我是靠谱客的博主 贪玩裙子,最近开发中收集的这篇文章主要介绍个人秋招面经——字节,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

博主目前在蚂蚁集团-体验技术部,AntV/S2 是博主所在团队的开源项目——多维交叉分析表格,欢迎使用,感谢到 S2 github 仓库点赞 star,有任何关于前端面试、就业、技术问题都可给在文章后留言。

一面(2021/7/15)

一、position的几个属性

二、文档流、dom

文档流: 浏览器在页面上摆放HTML元素的方法,将窗口分为一行一行的,然后在每行中按照从左至右的顺序摆放元素。
dom树: 从网络传输给渲染引擎的HTML文本字节流是无法被直接理解的,需要将其转化为能够被理解的内部结构,这个结构就是dom树。
dom树的生成: 通过分词器将文本字节流转换为Token(栈结构,用于计算节点之间的父子关系),再将Token解析为dom节点,并将dom节点添加到dom树中。

三、浏览器渲染页面的过程(重排、重绘)

四、跨域

跨域是浏览器的一种特性,浏览器不允许直接访问另外一个“域”上的资源,只允许访问同一个“域”上的资源,这也是浏览器的“同源策略”,要求协议、域名、端口号一致。
<script>标签、<img>标签、<link>标签等是支持跨域的。
解决跨域的方法:JSONP、CORS、反向代理

五、<script> 和 <img> 标签可以接收跨域的资源吗

可以,还有<link> <audio> <video> <iframe>

六、父级div的宽、高各为100px,padding-top为20%,子div的高为多少?父级div设为absolute呢?

100px、100px

七、事件循环机制(例题)

八、HTTP缓存机制(强缓存和协商缓存)

九、<script /> 中的同步和异步。

由于提到了构建dom树的过程中,遇到script标签,dom树的构建会暂停,直至脚本执行完毕。
defer:延迟脚本,告诉浏览器下载脚本,但延迟执行,直到解析完HTML再执行脚本,再触发DOMContentLoaded事件

<script type="text/javascript" defer src="test.js"></script>

async:异步脚本,异步下载引入js脚本,此时不会影响dom的构建,但一旦下载完成,无论是在dom解析阶段,还是DOMContentLoaded事件触发之后,一定会在load事件触发之前执行脚本。

<script type="text/javascript" async src="test1.js"></script>
<script type="text/javascript" async src="test2.js"></script>

在这里插入图片描述

十、px em rem % 的区别

十一、this的指向

十二、手写Function.prototype.call()

Function.prototype.call = function(context) {
let obj = context || window;
// 将调用call的方法赋值给obj对象
obj.fn = this;
// 传参数
const args = [...arguments].slice(1);
// 调用函数
const result = obj.fn(...args);
delete obj.fn;
return result;
}

手写apply方法:

Function.prototype.apply = function(context) {
let obj = context || window;
obj.fn = this;
let args = arguments[1] || [];
let result = obj.fn(args);
delete obj.fn;
return result;
}

手写bind方法:

Function.prototype.bind = function(context) {
let self = this;
let args = [...arguments].slice(1);
return function F() {
if (this instanceof F) {
return new self([...args, ...arguments]);
}
return self.apply(context, args.concat([...arguments]));
}
}

十三、let a = {}; let b = new Object(); let c = Object.create({}); 的区别

字面量创建和new关键字创建的实例,原型指向Object.prototype,并继承内置对象Object;Object.create(proto[,propertiesObject])创建的对象的原型取决于proto,如果proto为null,新对象为空,没有原型,不继承任何对象,proto是指定对象,新对象的原型指向指定对象,继承指定对象。

十四、new 一个对象的过程

十五、算法题:将两个排序数组按顺序合并到一个数组中。

捞一面(2021/7/29)

一、vue 2.0和vue 3.0的区别。

二、vue 2.0 中的diff算法。

利用JS对象根据真实的DOM生成虚拟DOM,当虚拟DOM的某个节点发生变化时,会生成一个新的Vnode,然后对比新的newVnode和旧的oldVnode,把不同的地方修改到真实DOM上。
diff算法: 是对同一层级的节点单独进行比较。

  1. 调用patch()方法。 判断新、老节点是否为同一节点。如果不是同一节点,直接替换;如果是同一节点,再调用patchVnode()方法比较子节点。
  2. 调用patchVnode()方法比较子节点。如果不是同一节点,直接替换;如果是同一节点,分为(1)旧节点有子节点,新节点无子节点,删除旧节点的子节点;(2)旧节点无子节点,新节点有子节点,把新节点的子节点添加到旧节点上;(3)新、旧节点的子节点都是文本节点,直接替换文本;(4)都有子节点,调用updateChildren()函数。
  3. 调用updateChildren()函数。 对于每一层节点,对新、旧节点都添加上首尾指针start和end,一一比较,如果旧节点的start > end,将新节点剩余的节点添加到旧节点上;如果新节点的start > end,将旧节点多余的节点删除。
    每个节点的比较方式(sameNode() 函数): key、tag、注释信息、data信息(onclick、style等)、如果是input节点看type是否一致。

三、腾讯实习有没有遇到什么困难。文件上传怎么做,有没有分片。

四、localStorage和sessionStorage区别,cookie和session之间怎么建立联系的。

五、跨域。

六、浏览器安全攻击。

七、算法:去除字符串中的字符“b”,和连着的“a”、“c”,比如:“aabcd” -> “ad”、“aaabccc” -> “”

最后

以上就是贪玩裙子为你收集整理的个人秋招面经——字节的全部内容,希望文章能够帮你解决个人秋招面经——字节所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部