一面

都是基础,问的比较深,BFC、缓存、简单的算法;
递归、链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序),常用的实现 ,
考察了vue的一些原理和浏览器机制;
递归、手动实现节流、防抖,比较麻烦的布局;

1 Css bfc static 和 relative的区别
2 node require 和 import的区别,require看起来像注册在全局
3 写版本号排序的代码(及优化),时间复杂度
4 http 的 cache ,浏览器如何获取设置
5 react 的diff算法,key 的作用
6 是否喜欢看源码,看源码的感觉
7、实现一个add方法,使计算结果能够满足如下预期:
add(1)(2)(3) ()
add(1, 2, 3)(4)()
8、项目优化
9、浏览器重绘和回流
10、虚拟dom的好处
11、动态规划求解最多有几种方案求解硬币找零问题
12、比较vue 和react , React 代码与Vue 代码互转和复用
13、关于异步任务执行的题目,涉及主线程任务、宏任务、微任务
14. 场景:从1-10,按顺序每秒输出一个数字
15. 变量提升,函数内 var 和 let 声明的执行结果各怎样

  1. // js
  2. var a = 10;
  3. function say() {
  4. console.log(a);
  5. var a = 20;
  6. // var let a = 20;
  7. console.log(a);
  8. }


16. css 垂直居中
17. css 3D 加速
18. redux 的优缺点
19. react 中 render props 适用场景(类组件和函数组件的区别)
20. 浏览器缓存策略及相应流程
21. 手写 Promise.all
22、垂直居中
23、arguments是数组吗?如果不是,怎么转换成数组?
24、event loop
25、 手写节流函数
26、event loop, css动画, webpack 插件 , react 生命周期, promise
27、 设计和产品规划的一个组件,但是基础组件库没有,rax 的
28、HTTPS 和 HTTP 的区别
29、浏览器是单进程吗?进行和线程的区别?
30、 什么时候传值,什么时候传变量
31、问了debounce的实现,居中定位的各种方法,给了一个数组求两数相加和等于m总共有多少种可能性,还有问怎么定位排查用户反馈页面性能问题,性能方面的问题聊了比较久
32、arguments
33、Array.prototype.slice.call(arguments);
34、arguments 为什么可以通过上述方式转为数组?
代码执行顺序

  1. // 同步代码
  2. console.log('begin');
  3. // setTimeout 添加一个 宏观任务
  4. setTimeout(() => {
  5. // 同步
  6. console.log('setTimeout 1');
  7. // 微观任务
  8. Promise.resolve()
  9. .then(() => {
  10. // 同步
  11. console.log('promise 1');
  12. // 添加宏观任务
  13. setTimeout(() => {
  14. console.log('setTimeout2 between promise1&2');
  15. })
  16. })
  17. .then(() => {
  18. // 微观任务
  19. console.log('promise 2');
  20. });
  21. }, 0);
  22. // 同步代码
  23. console.log('end');
  24. 结果:
  25. begin
  26. end
  27. setTimeout 1
  28. promise 1
  29. promise 2
  30. setTimeout2 between promise1&2

arguments 如何转数组, 尽可能多方式
[…arguments];
Array.prototype.slice.call(arguments);
function(…arg) {}
Array.form(arguments)
35、react setState什么时候同步什么时候异步
36、render props和HOC优缺点
37、手写promise
问的都和自己项目有关的,编程题一道CSS的10px字体无法显示的解决方案,transform:scale,防抖

  1. 1.
  2. console.log('begin');
  3. setTimeout(() => {
  4. console.log('setTimeout 1');
  5. Promise.resolve().then(() => {
  6. console.log('promise 1');
  7. setTimeout(() => {
  8. console.log('setTimeout2 between promise1&2');
  9. })
  10. }).then(() => {
  11. console.log('promise 2');
  12. });
  13. }, 0);
  14. console.log('end');

请说出执行结果,并谈一下对事件循环(event loop)的理解
38、解释一下边距重叠?以及如何解决。什么是BFC?
39、浏览器的绘制原理,重排及重绘
40、请实现 DOM2JSON 一个函数,可以把一个DOM节点输出JSON的格式,例如下面的例子

  1. <a></ a>
  1. <a></ a>
  2. <a></ a>

{

tag: ‘DIV’,

children: [

  1. {
  2. tag: 'SPAN',
  3. children: [
  4. { tag: 'A', children: [] }
  5. ]

},
41. 请实现如下的函数,可以批量请求数据,所有的 URL 地址在 urls 参数中,同时可以通过 max 参数控制请求的并发度,当所有请求结束之后,需要执行 callback 回掉函数。发请求的函数可以直接使用 fetch 即可
function sendRequest(urls: string[], max: number, callback: () => void) {
}
42.ts class里面怎么实现一个runtime里面访问不到private的属性
43.闭包的变量内存怎么分布的
44. 协程与同步异步
45.实现一个Promise.all
47.[-1,-2,8,9,-10] 求最大和
48.webpack的plugin与loader的区别,有没有写过plugin或者loader?
49.React的diff算法原理?
50.Node的SSR是否有做过,怎么做的?
51.项目中自认为最好的项目是哪个,做了哪些比较有价值的事?
52.重绘与回流?
53.虚拟dom的好处?
54.编程题:
DomtoJson:将Dom树写成Json格式?
链表环检测?
请实现如下的函数,可以批量请求数据,所有的 URL 地址在 urls 参数中,同时可以通过 max 参数控制请求的并发度,当所有请求结束之后,需要执行 callback 回掉函数。发请求的函数可以直接使用 fetch 即可
function sendRequest(urls: string[], max: number, callback: () => void) {
}
55.arguments是数组吗?如果不是,怎么转换成数组?
56.介绍一下你做的项目,然后揪着这个项目问一些实现或者你做的功能相关
介绍一下eventloop、介绍一下promise,看打印 、实现一个上下固定高度,然后中间至少是撑满屏幕的布局、实现一个promise all、实现一个flat、介绍一个你做的组件功能和实现,然后根据组件会提很多边界问题,问你实现。有没有后端语言开发经验。
二面:
1、都是vue各种原理解析、react原理、http协议理解、用法;
2、各种异步任务执行顺序,类型转换;算法:动态规划
3. 讲一下收获最大的项目
4. 讲一下 react 常用的优化项
5. 讲一下 dom-diff 算法
6. 实现下面功能
```js
class Scheduler {
add(promiseCreator) {
//…
}
}

  1. const timeout = (time) => new Promise(resolve => {
  2. setTimeout(resolve, time)
  3. })
  4. const scheduler = new Scheduler()
  5. const addTask = (time, order) => {
  6. scheduler.add(() => timeout(time))
  7. .then(() => console.log(order))
  8. }
  9. addTask(1000, '1')
  10. addTask(500, '2')
  11. addTask(300, '3')
  12. addTask(400, '4')
  13. // output: 2 3 1 4
  14. // 一开始,1、2两个任务进入队列
  15. // 500ms时,2完成,输出2,任务3进队
  16. // 800ms时,3完成,输出3,任务4进队
  17. // 1000ms时,1完成,输出1
  18. // 1200ms时,4完成,输出4
  1. 7. 实现下面功能
  2. ```javascript
  3. function sum() {
  4. //...
  5. }
  6. console.log(sum(2,3)); // 输出5
  7. console.log(sum(2)(3)); // 输出5

8、实现一个函数sum, 运算结果可以满足如下预期结果:
sum(1, 2, 3).valueOf(); //6
sum(2, 3)(2).valueOf(); //7
sum(1)(2)(3)(4).valueOf(); //10
sum(2)(4, 1)(2).valueOf(); //9
9、redux saga vue 订阅、发版 双向绑定 观察者模式 设计模式 单例 中介者 高阶组件
reflow repaint 获取 react性能优化 houldComponentUpdate function component
diff key immutable equal redux性能 connect reselect 多线程 多进程 web首屏
3个js文件,300k,是否需要合并为900k的js tcp 并发上线 多域名 dns, tcp tcp keep-alive
http2 nw electron
10、继承和原型链,浏览器窗口居中,宏任务与微任务,性能优化,深度克隆,算法题(题目非常长,没有记下来)
11、链表环检测
12、聊聊动态规划,红黑树原理
13、自适应search框; input + button 布局;
14、页面性能优化
15、vue diff算法,key作用;
// 实现 sum 函数
sum(1, 2, 3).valueOf(); //6
sum(2, 3)(2).valueOf(); //7
sum(1)(2)(3)(4).valueOf(); //10
sum(2)(4, 1)(2).valueOf(); //9
16、Promise
17、Promise.all 返回值
18、实现方式?
入参,返回值,内部实现
Promise.then 如何实现链式调用,返回值是什么?
为什么每次返回新 Promise, 像 jquery 那样直接返回 this 不行吗?
[1,2,2,3,2,1]
有以上数组输出字符串 (不考虑缩进):
尽量不用到 domApi





    1. A B C D E 5所学校。在一次检查评比中,已知 E 肯定不是第二名或第三名,他们相互进行推测。
    2. AE一定不是第一名;B: 我校第二名;CA校最差;DC不是最好;E: D是第一名。结果这只有实际排名为第一和第二名的学校猜对了,其他学校都猜错了。

请编写一个程序,求出这5所学校的名次。
要求编码清楚,简单。 设计时考虑一定的灵活性,猜测可能更复杂,如:C: A的排名和B的排名的乘积再减去D的排名的结果是7

使用说明

  1. 先提示不是智力题
  2. 确保面试者清楚完理解完题意再开始解题
  3. 先描述清楚解法再开始编码

补充

可以认为已知所有可能的排列情况,直接判断。
8、如何采集错误?
9、如何解决 window.onerror 监听跨iframe错误?
10、页面内一个元素点击后没有执行事件监听函数,原因可能有哪些?如何定位到问题代码?
11、算法: 回文数字判断,要尽可能高效的算法.
12、级联组件设计,及很大数据量时的优化;
13、页面卡顿如何定位,如何优化.
14、讲讲做过最难/有价值项目?学到什么?有啥问题,如何解决?
15、业务项目问题,性能问题,问题定位, 会被反复问到

面试形式:网上直接写代码,或者笔试,聊天的形式都有可能;3论技术面+1轮hr面
如果是视频面试,请提前10分钟进入链接,检查好耳机和摄像头
总结:1、算法只是加分项,https://leetcodecn.com/explore/featured/card/bytedance/

建议优先刷这个页面的题目,再刷其它的基础算法题
3、面试过程中题目一定要写出多种答案,面试官可能会问每种答案的优缺点,如果面试过程中有回答不上来的题目,千万不要直接回答:不知道!可以请教面试官,如:这个地方是这样吗?有哪些书籍或者资料可以查询?哪怕只有一般的思路,也要讲出来,和面试官一起切磋,面试官的目的不是难倒你,而是想考察你的思路。
4、面试结束时,面试官一般会问:你有什么问题问我的吗?(请不要问一些技术无关的问题,比如:几点下班,团队现在多少人等;这些问题可以留给我或者hr来解答 。最好是根据面试情况,问一下技术方向的话题,比如性能优化你回答的不好,问面试官,如何提高这方面的技术,尽量表现出对技术的追求,面试官会喜欢的)
5、无论你出于什么目的参加面试,请尊重面试机会,面试过程中把最好的素养和丰富的知识展现出来,大厂每次面试,都会留档,面试过程愉快和良好,对以后的跳槽也是有好处的。面试的好,谈薪的时候,才有可能谈到更高的薪资
6、上一轮面试没有回答出来的题目,下一轮面试很有可能再次考到,请在等待下一轮面试官的过程中,再想一下最优解(如果2次面试分开面试的,回去一定好好复习上轮面试回答不好的题目,然后做一下拓展),有人选3次都有问同一道题
7、最近很多人选,反复考到性能优化的题目,请好好复习,祝面试顺利!
8、面经请不要外传,不要给自己增加竞争对手,也请理解我的工作,谢谢!