如题,这是晨风面字节的面经,感谢他的投稿,将这次宝贵的面经分享给大家。

后面还有一份有赞的,最硬核的是字节三面,硬核的​​CSAPP​​都出来了,我看完题目的第一反应是

字节三面,太硬核了_面经

如果你没有看过CSAPP这本书籍的话,或者对计算机底层相关有所涉及的话,恐怕一些相关的问题,回答起来挺吃力的。

这里的CSAPP书籍,全称是:深入理解计算机系统

字节三面,太硬核了_跨域_02

深入理解计算机系统

至于对本书的评价,可以逛逛一些社区,看看大佬们对它的评价如何,不过工作之余有时间的话,我挺推荐大家去阅读的,周末在家细细品读

介绍完这本书籍后,我们回到正题,为什么我强调字节三面是很硬核的(可能我涉及面太少了)

比如第一个问题:说一下 js 代码到 CPU 单个时钟周期指令的执行的流程。

围绕这个问题展开的话,没有看过计算机系统相关的书籍,应该回答挺吃力。

这里我猜想,可能跟他前面的面试表现有关系,可能是压力面,可能是简历上面有涉及到相关。

友情提示:只开放了部分问题,没有答案,面经应该就是如此,思辨的过程应该留给屏幕前的你。

以下是正文。

字节跳动某部门面试

一面


  • 浏览器缓存有哪几种类型?
  • chrome 80+ 对 cache 的改动点了解吗?
  • cache 如何做到在不同域的情况下,还可以共享cookie,且不考虑 samesite 和 domain 设置
  • 如果本地资源里面有一个 10 mb+ 的图片,它又是整个网页的背景图片,你如何优化它,让它不影响网页的渲染速度?
  • react 17 和 18 分别做了什么优化
  • react 17 的合成事件的具体改进点在什么地方
  • react 什么情况下 state 是同步的什么情况下是异步的
  • react 的 state 异步的情况下是个宏任务吗?
  • 看见你使用了 MVC 的形式开发组件,依赖注入的原理说下
  • 如果我想让某个类的属性继承其他的类,那么这步的依赖注入应该如何做?
  • 看你了解 js v8,那么隐藏类主要是解决什么问题
  • 知道隐藏类的作用后,我们在编码的时候应该做哪些操作可以提高编码执行效率,至少说两点
  • babel 我看你也挺了解的,请说明如何优化直接 import polyfill 整个包的情况。
  • babel runtime 和 helper 有何区别?
  • 它们和 preset-env 有何关系?
  • 为什么最新的 babel 草案(Array.prototype.at),没在 preset-env 的支持范围
  • preset-env 的 stage 和上一个问题的关系
  • babel 的原理
  • babel-plugin-import 主要做了什么操作
  • import 插件对于当前的 bundle 环境,你认为还有什么价值?

二面

很多都是项目问题,这里略过


  • Http 2.x 和 Http 1.x 有啥区别?
  • Http 2.x 有哪些特性?
  • Hpack 做了什么?
  • PSK 有啥缺点?
  • 为什么选择 qiankun,什么场景需要使用微应用?
  • qiankun 和其他方案相比到底做了什么,有什么优势?
  • qiankun 和 single-spa 的区别?

三面

这是我目前所有面过交流中给我最大压力的,论难度,排在我面经中的 top1 当之无愧。

形式:我根据问题,自由回答,它会直接打断提出言论,让我最难受的就是——我回答完毕一个问题,面试官总会希望追加,还有吗?你说不出他会给你一个方向,让你现场想,比较耗费脑力


  • 说一下 react 的 fiber。

    • 说一下 fiber 的属性
    • 为什么需要设计可中断的模式?为什么最后选择了类似 fiber 这样的数据结构?
    • 由于 fiber 是可中断的审核节点的更新,那么 fiber 检查完毕某个节点时,我又去修改了此节点,这里 react 会如何处理?
    • 为什么一定要使用可中断更新的模式?其核心需求是什么?就算现在的结构是链表,但是用递归也可以实现的。
    • 究竟为什么 v15 递归不行?如果我记录一个全局变量,那么虽然递归无法直接回溯到制定的状态,但是我们依旧可以通过计算得出上一次递归的中间结果。
    • 为什么数据结构必须要是链表,数组呢?
    • schedule 是如何设置对于组件更新、删除状态的优先级,这个调度是如何伴随 fiber 节点的 diff 而产生变化的?
    • 这个优先级节点在源码中还是比较难的,这样吧,你自己去设计一个动态优先级调度的 schedule 你会怎么做?(没答好,没经验)

  • 说一下 react 组件异步加载
  • 自己实现一个 react 异步加载组件说一下思路,我就是想看看你对组件理解有多深
  • react 的 jsx 是如何通过 React.createElement 生成最后的数据结构的
  • 说一下你常用的 react hook,以及在项目中的优化使用。

接下来看一下 webpack


  • 之前异步加载你提到了 require.ensure。说一下 require.ensure 的原理
  • 使用 jsonp 的 require.ensure 只是一种模式,但是已经过时了,还有其他解决思路吗?
  • webpack loader 是如何进行排序的,这个规则在什么 webpack hook 中出现?
  • acron 解析代码至 ast 后,内部是如何解析模块关系的?
  • 你写过 webpack plugin 吗?
  • 关于 tapable , 你从最基础的角度说它主要是用于做什么,怎么让 webpack 跑起来的?
  • http2 做了啥,把知道的全部说一下

好了,前面只是开胃菜,下面开始考 CSAPP。


  • 说一下 js 代码到 CPU 单个时钟周期指令的执行的流程
  • 函数中调用函数,在计算机中是用了 rbp 和 rsp 去做栈帧顶和底的保存,那么如果函数中调用了新的函数,它是怎么保持调用关系的?
  • 你执行一条机器指令时,你在函数中声明的变量和语句都会进入调用栈帧吗?
  • 数组在堆内存中的表现形式是怎么样的?
  • 字节码解析的时候它是怎么去读取内存的?
  • 这样,我再给你一段代码,你把这段代码的 v8 执行过程说一遍。

function a() {
    let x = [12,3]
    console.log(x)
}


  • 这里在解析成 AST 前引擎会先做什么事?
  • 这里的那些元素是不会进入计算机调用栈帧的?
  • console.log 这个在内存中(字节码态)是如何读取的?

代码题


  • 看代码写输出,中间有 promise 的问题时,写一下 promise 源码伪代码,以说明前一个 promise 何时被 resolve,才会触发 then(这里我提到了,如果返回值是一个新的promise 以及 thenable 的处理方式)
  • 数组去重,每个数组元素内部内部可能是对象(我一开始用了排序+序列化的手段消除了不一样的对象元素,他看完后,禁止我使用这种方式,由于面试时间也长了,它让我用其他方式说一下思路。我说了递归,并且用 Map 做一个递归节点的记录,以防出现死循环,之后它又问,如果不允许你 Map 呢。。。。这个留给读者自己思考吧)


有赞面经

一面:


  • 观察者与访问者模式的区别:
  • 宏任务和微任务种类:
  • MessageChannel 是什么?
  • http 与 https 区别
  • 证书是如何加密的,用了什么算法,如何确保安全性
  • 有方法可以破解 https?
  • 301 和 302 除了临时重定向外还有什么本质区别
  • 307 和刚刚的 301 和 302 有啥区别
  • 307 会出现在什么场景中?
  • 为什么有同源机制,同源机制的触发条件是什么?
  • 简单请求默认允许修改报文的那些部分
  • 带 cookie 修改 cookie 还是简单请求吗?
  • 说说所有你知道的跨域实现方式
  • 说说 jsonp 的实现
  • 说说如何扩展简单跨域
  • 说说复杂跨域和简单跨域的区别
  • 同源策略如果是二级域名会不会影响
  • 复杂跨域还问了,但问了啥,我忘了。
  • react class 与 hook 区别
  • js 各种判断类型的所有方式,综合考
  • instanceof 的缺点
  • ts 的优缺点
  • 你平时如何使用 ts?
  • 你怎么看 ts 的泛型?
  • 使用 ts 如何只继承一部分元素
  • let const var 的区别
  • 说说 var 和 const 的特殊情况(var 和块级作用域的函数同名会触发浏览器的行为不统一,const 声明失败会触发永久性死区)

二面


  • monorepo + sudmodule 如何绑定私有 gitlab 与 github 的关联
  • 为什么要用 monorepo 架构?
  • 你认为的 monorepo 在你的项目中的优势是啥?
  • 看你使用过 qiankun 你认为微前端到底是为了解决什么问题而生,用在你这的场景合适吗?
  • 你是因为什么场景需要解决微应用 css 污染和挂载问题?(扯到 shadow dom )
  • 问 shadow dom 的浏览器事件的冒泡机制
  • 你认为微前端的未来是什么样的?
  • 如果让你优化现有的架构模式,你会怎么做?

三面

三面实际难度很高,重点深挖项目,此处不包含项目问题。


  • 你认为自己最大的优势是什么?并举例证明自己的观点。
  • webpack 中 loader 在哪个 hook 触发的?
  • loader 实际上是怎么 run 的?
  • loader 和 plugin 本质区别是啥?
  • plugin 可以干涉 webpack hook 中的 run 这个钩子吗?
  • 你写了什么 webpack plugin,说说为什么要写。
  • 聊跨段引擎实现
  • 聊我未来的规范和想法