字节三面,太硬核了

你好,我是tiantian

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

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

50105f977b8f1ff5f3f7fd5d1f8f8812.gif

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

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

44cce2ecc82be99d57759b5bfb5eccfe.png
深入理解计算机系统

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

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

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

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

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

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

以下是正文。

原作者博客:https://www.zhihu.com/people/prof-bramble

字节跳动某部门面试

一面

  • 浏览器缓存有哪几种类型?

  • 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,说说为什么要写。

  • 聊跨段引擎实现

  • 聊我未来的规范和想法


看完后,你认为这是工作几年的面经,刚毕业,1年还是2年,或者是。评论区可以给出你的答案。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值