跳到主要内容

字节跳动 Data 部门

太菜了,一面感谢信 😭😭

4.14 一个小时

  • 介绍一下项目
  • 输入 url 到渲染会发生哪些事情
  • 浏览器渲染的流程
  • 为什么一般 Css 放在开头,JS 放在结尾
  • for in 和 for of 的区别
  • 对原型的理解
  • new 一个 Object 出来之后,这个 Object 上会挂什么东西。比如 Object 上可能会有一些属性和方法,new 完之后这些东西会存在与哪些地方,new 完后的实例会有哪些部分组成,每一个部分挂了哪些东西

以下是 ChatGPT 回答:

使用 new 关键字创建一个对象时,会执行以下步骤:

  1. 创建一个新对象。
  2. 将新对象的原型指向构造函数的 prototype 属性。
  3. 将构造函数的 this 指向新对象。
  4. 执行构造函数,并将参数传递给构造函数。
  5. 如果构造函数返回一个对象,那么返回该对象,否则返回新对象。

因此,通过 new 关键字创建的对象会具有以下属性和方法:

  1. [[Prototype]]:指向构造函数的 prototype 属性,用于实现原型继承。
  2. constructor:指向构造函数本身,用于判断对象的类型。
  3. 其他属性和方法:由构造函数定义,通过 this 关键字添加到新对象上。

需要注意的是,通过 new Object() 创建的对象并没有额外的属性和方法,只有 `[[Prototype]] 和 constructor 属性。而其他内置对象(如 Array、Function、Date 等)则会在创建时自动添加一些属性和方法。

  • 有听过原型击穿(原型污染)吗?通过原型链修改上层的属性
  • 当出现原型击穿(原型污染)了,有没有什么办法去解决

Object.seal()

以下是 ChatGPT 回答:

JS 原型污染是指在 JS 中,通过修改原型对象,可以影响到其他对象的属性和方法,从而导致意外的结果。这种情况可能会出现在使用第三方库或框架时,如果在全局范围内修改了原型对象,就可能会对其他模块或代码产生影响,从而导致程序出现不可预料的行为。

一个常见的原型污染攻击是通过 __proto__ 属性来实现的。由于 __proto__ 属性可以用来修改对象的原型,因此攻击者可以通过构造恶意数据来污染原型,从而影响到其他对象。例如,攻击者可以通过将 __proto__ 属性设置为一个包含恶意代码的对象,从而污染原型链,导致程序出现意外的结果。

为了避免 JS 原型污染,可以采取以下措施:

  1. 避免在全局范围内修改原型对象,尽量使用局部变量和闭包来限制作用域。
  2. 在使用第三方库或框架时,要仔细阅读文档,了解其对原型的使用和影响。
  3. 不要轻易信任来自不可信源的数据,特别是包含 __proto__ 属性的数据。
  4. 在编写代码时,要使用 Object.create(null) 来创建纯净的对象,它没有原型链,可以避免原型污染的问题。
  • 一个正则(记不清了),说出哪些字符串可以匹配成功
  • JS 隐式转换题(记不清题目了)
  • 带 var 的输出题(记不清题目了)
  • 场景题:img 的资源不可访问了,需要加一个默认图像,怎么加?如果默认图像也挂了呢?
  • 说一下 Css 的盒模型
  • 一个父元素的宽度是 100px,border 是 2px,padding 是 4px,子元素的 width 为 50%,问父元素为 border-boxcontent-box,子元素的宽度分别为多少。(子元素的 width 基于父元素的 content 宽度进行计算)
  • 浮动和 BFC 了解吗?说一下 BFC
  • 哪些场景下会生成 BFC
  • 层叠上下文题目
  • 组件库选型是怎么选的
  • 组件库打包,为什么选择 Rollup 而不是 Webpack 呢
  • 上大学之前有接触过软件开发吗
  • 代码题:leetcode 242. 有效的字母异位词
  • 设计一个消息提示([element-plus](https://element-plus.org/zh-CN/component/message.html)组件