整理的字节面经

字节面试

面经

番茄 日常 一面

4.25 字节跳动 番茄 前端日常实习 一面_牛客网 (nowcoder.com)

  • 自我介绍
    • ==!准备==
  • 低代码平台的原理,为什么要去做低代码平台
    • ==odin 的原理,受众==
  • 移动端如何适配
    • 媒体查询
    • rem,vw,vh
    • rem,值就是 html 的对应的 font-size
  • rem 参考哪个值计算
    • html 的 font-size
    • em 是参照父元素

==计网==

  • OSI 七层网络模型
  • HTTP 工作哪一层
  • HTTP 和 HTTPS 的区别
  • HTTPS 的加密过程
  • 如何判断证书是否是正确的?
  • 常见的状态码

CSS

  • 盒子模型
    • 标准和 IE 盒子
    • content-boxborder-box
  • 两个盒子模型如何互相转化
    • box-sizing:content-box|border-box
  • 样式题:两栏布局,左侧固定 200px 右侧沾满空间
    • float,grid,flex,推荐 flex
  • BFC 有什么应用
    • 俩个元素之间的 margin 重叠了

JS 基础

  • 基本数据类型
    • string,number,boolean,symbol,undefined,null
    • 引用数据类型,统称 object,array,function,object
  • 哪些方式可以判断数据类型
    • 判断:typeof,基本类型,instanceof,沿着原型链去找
    • toString.call()Object.prototype.toString.call()
  • 实现数组扁平化
    • flat
    • reduce
    • 原型链重写
  • 讲一下跨域,为什么协议域名端口号不一样就会出现跨域问题,如何解决跨域
    • 浏览器为了安全的同源策略
    • JSONP,CORS,代理,WebSocket
  • 讲一下事件循环,宏任务和微任务有哪些
    • 宏任务:setTimeout,setInterval,main script
    • 微任务:promise.then
  • requestAnimation,浏览器渲染之前还是渲染之后执行
    • 重绘之前,页面首次加载也是重绘一次,所以应该是渲染之前
  • 两次宏任务之间一定会有浏览器绘制吗
  • 以下会发生什么:
    • 白-》蓝
setTimeout(() => {
document.body.style.background = 'red'
})
setTimeout(() => {
document.body.style.background = 'blue'
})

Vue

  • Vue 的响应式原理
  • Vue 的生命周期
    • setup,mount,upload,unmount
  • v-for 为什么要设置 key 值
    • diff 判断,不熟
  • Diff 算法,读过源码?如何实现的
  • key 值设置有什么考量
  • key 设置为 index 值会有什么问题,比如在哪些组件

数据结构

  • 判断单向链表是否有环路

其他

  • 有偏硬币无偏决策(一个不均匀的硬币,设计一个两个人公平的游戏)

牛客面经 2

  1. 自我介绍
  2. 实习项目介绍
  3. 尽可能多的实现三栏布局
    1. float,flex,grid
  4. 箭头函数
  5. 还有一些特别简单的八股文,八股一共就问了十分钟,然后发了三道题让我做。
  6. 全排列
  7. 给定字符串和相应的数据,根据数据处理字符串并输出(没完全写出来)
  8. 数组扁平化。
    1. flat
    2. reduce 无限+n 级
    3. stack
    4. 常规遍历+递归

总结:面试的时候手写题的确弱一些,写的不是特别好。面试官说,手写算法很重要,可以理解成字节的企业文化。

搜索 一面

孩子第一次面试大厂,魂都快吓没了,两个代码题都没答好,不出意外应该是凉凉。

  1. ES6 的新特性你知道哪些?
    1. 箭头函数
    2. promise
    3. 解构赋值
    4. let,const,块级作用域
    5. 模板字符串
    6. ==Set,Map==
  2. 异步编程解决方案 Promise,详细说一下?
  3. Promise 为什么可以在状态变化之后再获取结果?
  4. 事件循环机制说一下
  5. 了解浏览器的缓存策略吗?
    1. 不是 cookie,sessionStorage,localStorage,这些是村粗
  6. 自己做项目的时候遇到的最有挑战的事情?
  7. 算法题。一个匹配模式和一个字符串,检验字符串是否符合匹配模式。比如模式 abba,字符串 dog cat cat dog 就返回 true;但是如果是 dog dog dog dog 这种就返回 false。(用哈希表其实很快就能解决,只是最后需要考虑不同的 key 不能有相同的 value,处理后一种情况。这里我像个猪逼,一直没想到最后一种边界情况的处理方式)
  8. 代码题
var a = function () {
this.b = 3
}
var c = new a()
a.prototype.b = 9
var b = 7
a()

//分别输出什么?为什么?
console.log(b)
console.log(c.b)

上面这段代码放到一个立即执行函数里面执行,会有什么不同吗?为什么?(这里脑子有点被绕晕了,其实牢记直接以函数形式被调用的时候,函数的 this 默认指向 window 就可以了。我怎么这么菜啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊)

反问:

  • 学习建议。建议我多做项目,多问自己为什么,多去钻研才能进步。
  • 广度足够了不用过度追求,技术不仅要会用,还要学习它的原理和设计思想,扎根基础才能走的更远。
  • 部门业务和技术栈。

面试官人挺好,代码题答得不好也会引导,最开始问八股的时候他应该在出代码题,整得我老紧张了哈哈哈。估计是凉凉了,但是面试官最后给的建议很中肯,继续打基础去。第一次面试大厂仿佛回到了刚开始面试的时候,脑子一片空白,希望后面还能得到大厂的面试机会吧。

剪映 一面

总体:难死我了,我晕,虐爆本菜鸡……好多没弄出来,哈哈哈

  1. vue 响应式原理,vue2vue3 变化
    1. defineProperty,Proxy
  2. xhr 介绍,和 fetch 的区别,axios 底层实现,不知道
  3. 跨域解决方法
  4. 手写:使用 defineProperty 实现一个简单的响应式,忘记了。。
  5. 手写:封装一个 jsonp,不会
  6. 异步加载 js 的方法,esm 底层原理,不知道
  7. xss 介绍一下,解决办法,又深入问了
  8. 我们设置 cookie 的哪些属性
  9. 介绍一下网络层次结构,应用层有哪些协议
  10. 手写:把一个数组又要去重又要扁平化又要排序。我用了比较讨巧的 toString().split(‘,’)扁平化,又让我写了递归扁平化
  11. postMessage 使用
  12. 代码输出题,关于变量提升作用域那些的,错了一点,原因我还不知道呐(现在知道了,纯笨比错误)
  13. 事件循环

一二三面

一面 - 2.16

  1. 移动端适配具体怎么做的 为啥用 pxtorem 为啥不直接用 rem 直接用 rem 可以吗
    1. 样式调整
    2. 媒体查询
    3. vw,rem
  2. 写一个原生的 ajax 发送 get 请求 封装一下 只有 status 为 200 才成功吗
  3. 象征问你一下网络问题吧:跨域问题
  4. 如何实现组件间的 css 样式隔离
    1. css-moudle
  5. 除了 scoped 呢 css in js 了解吗
    1. styled-component,emotion
  6. 单独设置组件库比如 button 的样式怎么做
  7. 为什么想做前端 如何了解到前端这个岗位的
  8. 手写题 safeGet
const data = { a: { a: { b: 1 } } }
let path = 'a.a.b'
let failMsg = 'fail'
function safeGet(data, path, failMsg) {
let paths = path.split('.')
for (let p of paths) {
if (data[p] === undefined) {
return failMsg
}
data = data[p]
}
return data
}

反问环节

业务:toC 的 做一些节假日的活动

学习建议:学习 ts react 了解一下后端的知识 了解他们的思维模式 方便交互沟通

什么时候出结果:得看 hr 什么时候通知你(悄悄透露一下,感觉你准备的蛮充分的

你怎么都不问我工作强度?不关心这个吗 🤧

二面 - 2.20

  1. 说说登录 鉴权 token 续签怎么做的
  2. 手写 promise.all (/处理一下传入的元素不是 promise 的情况 /抽离一下公共代码
  3. 项目的挑战点
  4. 算法题 最大子数组和
  5. 一个发散的问题:设计一个用户行为分析平台 类似一个 B 端的产品:怎么采集行为 分析、输出哪些数据 判断当前产品的情况通过什么区判断产品是否处于一个健康的状态
  6. 说说 webpack 的使用

三面 - 2.24

  1. 什么时候开始学的前端 为什么学前端
  2. 觉得学习哪些知识点比较困难 (promise eveloop 原型链
  3. 那你说说 promise 原理 宏任务和微任务
  4. 说说路由的权限管理 登录流程
  5. 接触过 pwa 吗?
  6. 最近在看什么 (vue 源码
  7. 说一下 diff 算法流程
  8. 设计一个 web 缓存系统 (需要注意哪些点 如何处理 大致的逻辑
  9. 把淘汰算法的 LRU 写一下

Date 部门 一面 寄

4.14 一个小时

  • 介绍一下项目
  • 输入 url 到渲染会发生哪些事情
  • 浏览器渲染的流程
  • 为什么一般 Css 放在开头,JS 放在结尾
  • for in 和 for of 的区别
    • of 数组,in 对象
  • 对原型的理解
    • proto,prototype
  • 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 等)则会在创建时自动添加一些属性和方法。

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

以下是 ChatGPT 回答:

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

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

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

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

一面 答案见链接

时长 60min,问问题 45min,手撕代码 15min

1、网络分层以及对应层次的协议

2、输入一个 URL 会发生什么?

3、http2.0 更新了什么?

4、new 操作符原理

​ 创建空对象 A、A 的proto指向函数的 protoType、this 指向 A、执行 construstor

5、apply,call,bind 的区别

6、发布–订阅模式

7、css3 动画 transition 和 transform 性能+原理

8、使用 CSS3 实现一个秒针绕一点转动的效果

9、数据结构概括一下有哪些以及常见的操作和如何选用对应的数据结构

10、广度优先搜索(BFS)与深度优先搜索(DFS)的对比

11、手撕:三数之和 、K 个一组翻转链表

本地服务 成都 一面

4.13

  • 自我介绍
  • 拓保网项目如何做不同权限的动态展示和多级审批
  • 用户在路由输入地址是不是可以自动跳转
  • 图片懒加载怎么做的,原生 JS insertSectionObserver
  • 跨域都有了解哪些 项目是如何做跨域的 cors 的客户端和服务端是如何做跨域的,具体步骤 × 权限信息是保存在 cookie 上吗,token 刷新有设置吗
  • 组件库的下拉如何做组件通信
  • 组件库按需引入是如何实现的,如何配置
  • 按需引入后打包如何处理的,设置对个组件的出口和入口
  • Vue3 为什么要使用的 compositionAPI × setup 组合的底层原理是什么 ×
  • 浏览器渲染的过程 ×
  • 为什么要三次握手
  • 手写观察者模式,手写层序遍历

字节不愧是大厂,面试官很年轻+态度很好,问的问题很有深度,死抠项目细节,代码题有提示,但本人没准备过观察者模式,再怎么提示也写不出来,大概率没有后续。再次收集大厂面试体验卡一枚~

国际化电商 一面

  1. 打印螺旋矩阵
  2. react hooks 有哪些
  3. useCallback 和 useMemo 的区别
  4. useState 作用是什么
  5. key 的作用
  6. 考察闭包输出
  7. 0.1 + 0.2 === 0.3?
    1. 0.30000000000000004
  8. 十进制怎么转化为二进制呢?
  9. ‘1’ + 2 = ? 1+’2’ = ?
  10. 大数相加
  11. http1.1 和 2.0 的区别
  12. 拥塞避免是怎么做的

22 春招 教育 一面 寄

  1. 自我介绍

  2. css 盒模型

  3. 实现左 200px, 右侧自适应布局

  4. promise.all 和.race 的区别,简单实现一个 promiseAll(promises)函数

  5. XSS 攻击怎么防范 Cookie 劫持(HttpOnly)

  6. 项目登陆注册介绍

  7. require 和 import 的区别及应用场景

  8. 怎么实现小程序扫码登录 web 端应用,思路是什么?

敲代码老是卡住以及写错,面试官后面一直在引导思路。

希望能给个机会二面吧,呜呜!

22 日常实习 一面 寄

  1. 自我介绍
  2. 一周实习几天
  3. 你投的是日常实习吗?是(投太多,忘了)
  4. 元素垂直居中
  5. http 和 https 区别。加密过程?(不会)
  6. cookie,localStorage, sessionStorage 区别。面试官:说下 session。我:sessionStorage?面试官:就是 session。我:不会
  7. import 和 require 区别。修改 import 和 require 引入的文件,代码会同步更新吗?
  8. for in 和 for of
  9. vue 源码
  10. 一道事件循环题目,写输出顺序
  11. 手写强拷贝

22 一面 寄

  1. 三栏布局,如何实现三栏布局

    楼主答了 float 的圣杯和双飞翼,然后被追问 absolute,答不出

  2. http 的方法,追问 post 和 put 的区别

  3. 事件轮询,追问 Promise,宏任务和微任务

  4. this 的指向,看了两道代码答输出

  5. new 的过程中发生了什么,现场手撕

  6. JS 代码题:将 123456 转化为 123,456

  7. 算法题:长度最小的子数组

生活服务 暑期实习 一面

原本一面约的是 45 分钟 面完整个过程大概一个小时多一点,大概可能是因为中间有一些问题进行了一些讨论,因为不太记得题目顺序了,就想到什么问题就写什么问题了,顺序不重要!先问题然后再手写代码

  1. 自我介绍

  2. 怎么接触到的前端呢

  3. 学习方式有哪一些?视频 博客 书籍 项目中运用

  4. 实习主要做了些什么? 主要做哪些项目?tob 的也有 toc 的也有,然后根据实习里的组件库项目讨论了一下 jest 测试用例 覆盖率等等

    面试官说问一些基础的

  5. css 中 bfc 了解吗 说一下是什么 有什么应用场景

  6. 说一说箭头函数?

    1. 说完了问 箭头函数的原型函数是什么 一时间脑子不清醒 没答上来 然后面试官说换一个思路 先说一下 new 操作符 答到 new 操作符不能去 new 箭头函数 所以猛的想起箭头函数是没有原型对象 面试官就说是对的
  7. js 的事件模型哪几个阶段都了解吗?那是先捕获阶段还是先冒泡阶段?

  8. 浏览器的本地存储有了解吗?

    1. 回答 cookie 和 storage 存储大小 过期时间等等
    2. 又问了问存储大小具体?回答 cookie 4kb 左右 ,storage 有几 mb
  9. https 和 http ?

    1. 讲了混合加密过程和 ssl 证书数字签名等等。
  10. react hooks 在 if 判断中使用会怎么样?当时也没想清楚 面试官又说那我们也换一个思路 刚刚你说你了解 react 源码 那对它的 fiber 架构有了解吗 我简单说了一下任务的优先级

  11. 反问那 fiber 是一个什么数据结构?我说是树结构 面试官说不对 是链表结构 如果 if 语句去调 hook 会将整个结构打断的,然后基于这个和面试官讨论了一小会。

  12. 浏览器的缓存有了解吗?说了强制缓存和协商缓存。

  13. 那是用哪个字段控制的呢?

  14. 跨域问题有遇到过吗?怎么解决的呢?答完后问我实际项目和实习中遇到是怎么解决的,回答了项目里的 nginx 反向代理

  15. 代码题:关于 this 指向的问题,面试官让我说思考这个题的流程 √

  16. 代码题:关于 async/await 的一道,面试官本来说让我想一下然后写到边上,我说我直接说就可以说,然后他可能看我答得太轻松了就说我再想还考点啥,然后他就边想边手敲了一段代码(面试官想再考考) √

  17. 问下面这一段放在浏览器执行,会怎么样?我一开始在分析,然后分析着他就问浏览器界面会卡死吗?我也不清楚标准答案,我说宏任务队列会不断更新,如果页面已经渲染完了就不会让浏览器卡死。

    const fn = () => {
    setTimeout(() => {
    fn()
    }, 0)
    }
    fn()
  18. 紧接着他又改了改:那下面这个会怎么样呢?我说这个会不断更新微任务队列可能导致界面卡死,他说当前这一个执行栈会怎么样,我回答可能永远不会停止所以界面卡死。

    const fn = () => {
    Promise.resolve().then(() => {
    fn()
    })
    }
    fn()
  19. 我也不知道上面两题回答是否正确,面试官也没说就接着考:节流函数知道吗?封装一个节流函数。很快写完,面试官问了问里面变量的含义,没问题 √

  20. Promise.all 方法有用过吗?实现一下?手写了一个,然后有一点细节问题面试官让我改一下,参数里有不是 promise 情况怎么做?那想要返回的结果和入参一一对应该怎么做?

  21. 做一道算法题吧!全排列 用递归完成了 第一次输出有问题,后来有个地方改成 Array.from(),然后就 a 了,面试官问为什么会这样?答了一下 from 实现浅拷贝。

  22. 反问:对我之后学习的一个建议?说也没什么特别的建议,现在肯定不如那些工作经验几年的,以后在业务场景不断提升自己就好了。

  23. 反问:技术栈,字节 90%都是 react

  24. 反问:应该对最近微前端,webgl,低代码那些去学习一下吗?回答说,都是根据业务场景再去选择用什么的,在日新月异的环境应该打牢基础,这样学一个新的东西才会更快,低代码包括微前端都有局限,只是加快效率。

    总结:整个面试的体验特别好特别好,面试官遇到我一时间没答出来的也让我别紧张,然后引导我去解开,感觉更加是看重思考问题的能力,很多地方都有豁然开朗的感觉。面完不到一个小时就给结果进二面了。

剪映 一面 二面寄

23 生活服务 一面 寄

4.17

45min

1.自我介绍

2.实习有什么收获

3.实习的过程中,开发的过程是怎么样的,前后端怎么沟通,然后聊了一点有关接口文档的东西

4.怎么解决多端不兼容的问题,那 Uni-app 一套代码可以编译成多端的小程序有什么不好的地方 × 不知道有什么缺点

5.团队怎么去做代码维护和校验的

6.怎么用 git lab 进行团队的协作

7.Git revert 和 git reset 有什么区别 × git reset 是将 HEAD 移向过去,git revert 是将 HEAD 移向未来

8.Token 的登录鉴权是怎么做的

9.Cookie 的一些安全设置

10.Axios 封装了什么

11.为什么使用 vuex,不用 vuex 可不可以,什么情况下用 vuex 比较好 × 中大型单页应用

12.用全局组件可以减少代码体积,但是有什么危害 × 危害这里回答不上来了

13.介绍一下 Vue-router 的两种模式 × hash 模式和 history 模式,之前没有用过

14.讲一下 CSS3 的动画

15.怎么画 0.5px × 讲的不好

16.讲解 Flex 的参数

17.事件机制

18.事件循环

19.闭包的作用,自执行函数是闭包吗

20.Keep-alive 组件

21.v-for 为什么要加 key,不加 key 页面渲染会出现错误吗 × 会报错

22.算法:全排列 × 回溯就可以做,力扣 46 题改一下就行

23.反问

总结,面完就又 emo 了一天,最痛心的还是那道算法题,leetcode 原题改编一下,我就不会做了。前面八股的内容也是面试官一往深了挖我就寄了。金三银四快要结束了,至今 0 offer,我也该差不多收拾收拾东西,去工地搬砖了

24 届 商业化技术 一面(已 oc)

整理一下上个月面试的战况,也焦虑过,迷茫过,双非的我每次受挫时都想到老师说过的一句话:‘一线希望,百倍努力’,我可以失败很多次,但成功只需要一次!同各位共勉。

1.自我介绍

吧啦吧啦

2.你说到解决内存泄露,这个能详细说说吗

项目里的东西

3.什么是 css 盒模型?,有几种?

border-box content-box

4. 接着上面,如何切换盒模型?

5.display:none visibility:none 的区别

页面的 dom 结构,对事件的影响,对动画的影响(讲细一点?)

6.cookie,sessionstorage,localstorage 区别

7.js 常见基本数据类型有哪些?(7 个)

8.引用数据类型?

9.如何判断一个变量是数组类型

10.介绍一下跨域,怎么解决跨域?

11.防抖节流的概念?

12.手写防抖

13.深拷贝和浅拷贝的区别?

14.手写深拷贝(只考虑对象{}}

15.get 和 post 的区别??

16.讲讲闭包,优缺点?

17.0.1+0.2=0.3?为什么?具体一点,解决方法?

扯 IEEE754 对小数如何转二进制,精度缺失

18.讲讲前端框架,你是怎么理解 react 的 hook?

19.hook 的优点?

20.常见状态码

21.安全漏洞你了解哪些?分别介绍一下? 如何避免??

22.因为上面避免里说到看 referer,继续问 header 头部有哪些

23.url 敲回车到页面展示发生了啥?

24.反问环节

上面漏了还有 for in,for of 的区别?,这个相关知识点还有稀松数组,没细问

24 暑期实习 广告

这次的面经是 22 年 9 月字节 hr 来约的日常实习面试的记录,由于暑假刚过面经难度可能比较简单

岗位对应广告业务,已于 22 年 12 月入职,过年这几天比较闲过来分享下面试经历~

9.6 一面

  1. 自我介绍介绍+问项目
  2. JS 的基本数据类型
    1. number,string,boolean,symbol,null,unde,set,map
    2. 引用:object,function,array,object
  3. == 和 === 的区别
    1. ==可能会有类型转换,如0=='0'
  4. 事件循环理解
    1. 因为 js 是单线程的,但是这样就容易阻塞,所以 js 就有一套事件循环的机制,他有一个主线程和一个任务队列,同步任务在主线程执行,形成一个执行栈,异步队列有了运行结果就会放到任务队列里面,当执行栈的同步任务执行完成的时候系统就会读取任务队列,里面的异步任务就进入执行栈开始执行
    2. 异步任务氛围宏任务和微任务,他们的区别就是在队列中的执行优先级
    3. 微任务优先
  5. 深拷贝和浅拷贝
    1. 浅拷贝就是一个新对象,拷贝了原始对象的属性值,基本类型就是拷贝值,引用类型就拷贝内存地址
    2. 深拷贝才是创建了新的内存
    3. 。。手写
  6. 闭包的理解和举例使用
  7. Vue 和 React 的生命周期
  8. 题目 1:正则表达式(手写正则匹配手机号/邮箱)
  9. 题目 2:日期格式化(实现一个 format(new Date(), ‘YYYY-MM-DD’)函数)

一面八股非常常规,正则表达式写出了大半,面试官说差不多就进了下一题;日期格式化的时候不记得 Date 相关的方法,发现 ctrl + 单击居然可以在飞书的 IDE 里找到 TS 定义,于是速通

9.7 二面

  1. TCP 队首阻塞、七层网络模型
  2. 进程和线程
  3. 小程序和 Web 渲染的区别,性能为什么好
  4. axios 拦截,怎么统计请求时长
  5. Electron 底层有几个线程
  6. js 有哪些 worker
  7. PWA 的功能、实现,service worker 怎么写
  8. CSS 的新标准
  9. Vue Router 的模式、实现原理
  10. Vue2 和 3 的区别
  11. 题目一:顺时针打印矩阵
  12. 题目二:解析 URL 的参数(有数组)
  13. CSRF 攻击原理、防范
  14. 反问

这轮面试八股部分属于是狠狠地把自己坑到了(提了嘴过了计算机网络方向三四级),不少内容都没回答出来;两个代码题很常规

9.8 hr 面

  1. 为啥会后端不面后端
  2. 啥时候能实习,实习多久,实习出勤

这轮面试后开始 offer 审批,但由于原岗位不再支持线上,因此转岗加面

9.15 四面

  1. 自我介绍
  2. SSR 应用的优点,有什么需要注意的
  3. docker 和虚拟机有什么区别,一般用 docker 干啥
  4. CI/CD 实现的方法
  5. 题目:象棋马走日字的方法数 // 象棋中马只能走日字,计算在 7×7 的棋盘上马从(x0, y0)走到(xn, yn)且走 n 步的方法数 // function(x0, y0, xn, yn, n) -> number 边界条件判断+递归 什么情况会爆栈
  6. 尾递归优化
  7. DP 优化算法题
  8. 反问

这轮面试的面试官是入职之后的 leader,给的算法题比较常规,提了嘴红宝书里看到的尾递归优化,过了一个小时就收到了通过的邮件