字节跳动 Data 部门
太菜了,一面感谢信 😭😭
4.14 一个小时
- 介绍一下项目
- 输入 url 到渲染会发生哪些事情
- 浏览器渲染的流程
- 为什么一般 Css 放在开头,JS 放在结尾
- for in 和 for of 的区别
- 对原型的理解
- new 一个 Object 出来之后,这个 Object 上会挂什么东西。比如 Object 上可能会有一些属性和方法,new 完之后这些东西会存在与哪些地方,new 完后的实例会有哪些部分组成,每一个 部分挂了哪些东西
以下是 ChatGPT 回答:
使用 new 关键字创建一个对象时,会执行以下步骤:
- 创建一个新对象。
- 将新对象的原型指向构造函数的 prototype 属性。
- 将构造函数的 this 指向新对象。
- 执行构造函数,并将参数传递给构造函数。
- 如果构造函数返回一个对象,那么返回该对象,否则返回新对象。
因此,通过 new 关键字创建的对象会具有以下属性和方法:
[[Prototype]]
:指向构造函数的 prototype 属性,用于实现原型继承。constructor
:指向构造函数本身,用于判断对象的类型。- 其他属性和方法:由构造函数定义,通过 this 关键字添加到新对象上。
需要注意的是,通过 new Object() 创建的对象并没有额外的属性和方法,只有 `[[Prototype]] 和 constructor 属性。而其他内置对象(如 Array、Function、Date 等)则会在创建时自动添加一些属性和方法。
- 有听过原型击穿(原型污染)吗?通过原型链修改上层的属性
- 当出现原型击穿(原型污染)了,有没有什么办法去解决
Object.seal()
以下是 ChatGPT 回答:
JS 原型污染是指在 JS 中,通过修改原型对象,可以影响到其他对象的属性和方法,从而导致意外的结果。这种情况可能会出现在使用第三方库或框架时,如果在全局范围内修改了原型对象,就可能会对其他模块或代码产生影响,从而导致程序出现不可预料的行为。
一个常见的原型污染攻击是通过 __proto__
属性来实现的。由于 __proto__
属性可以用来修改对象的原型,因此攻击者可以通过构造恶意数据来污染原型,从而影响到其他对象。例如,攻击者可以通过将 __proto__
属性设置为一个包含恶意代码的对象,从而污染原型链,导致程序出现意外的结果。
为了避免 JS 原型污染,可以采取以下措施:
- 避免在全局范围内修改原型对象,尽量使用局部变量和闭包来限制作用域。
- 在使用第三方库或框架时,要仔细阅读文档,了解其对原型的使用和影响。
- 不要轻易信任来自不可信源的数据,特别是包含
__proto__
属性的数据。 - 在编写代码时,要使用
Object.create(null)
来创建纯净的对象,它没有原型链,可以避免原型污染的问题。
- 一个正则(记不清了),说出哪些字符串可以匹配成功
- JS 隐式转换题(记不清题目了)
- 带 var 的输出题(记不清题目了)
- 场景题:img 的资源不可访问了,需要加一个默认图像,怎么加?如果默认图像也挂了呢?
- 说一下 Css 的盒模型
- 一个父元素的宽度是 100px,border 是 2px,padding 是 4px,子元素的 width 为 50%,问父元素为
border-box
和content-box
,子元素的宽度分别为多少。(子元素的 width 基于父元素的 content 宽度进行计算) - 浮动和 BFC 了解吗?说一下 BFC
- 哪些场景下会生成 BFC
- 层叠上下文题目
- 组件库选型是怎么选的
- 组件库打包,为什么选择 Rollup 而不是 Webpack 呢
- 上大学之前有接触过软件开发吗
- 代码题:leetcode 242. 有效的字母异位词
- 设计一个消息提示([element-plus](https://element-plus.org/zh-CN/component/message.html)组件