面经
字节飞书
一面太久远了, 当时没有做记录, 凭回忆只能记得起这么多了.
一面
- 项目中用到了keep-alive, 实现原理(说了LRU, 所以笔试题是LRU)
- 项目中滚动到顶部怎么实习的, (scrollTo + requestFrameAnimation)
- 为什么要用requestFrameAnimation
- 事件循环
- Typescript中把一个对象中的所有属性变成可选属性用什么关键字, 变成必选属性用什么关键字(我忘记了关键字, 但是把实现给写出来了)
- 算法题: 实现 LRU
二面
进程线程区别, 以及调度方法
闭包、以及闭包会有什么问题
http、头部字段、请求行请求体
tcp三次握手
内存回收机制
哈夫曼树
debounce
链表和数组区别
算法题: 两个有序数组寻找中位数
算法题: 最小栈
三面
- 一个题目, 异步相加, 然后就是在聊天和写题目当中度过.
function asyncAdd(a, b, cb) { setTimeout(() => { cb(null, a + b); }, Math.floor(Math.random() * 1000)); } async function sum(...args) { // code // 不能使用加法, 只能调用asyncAdd实现加法运算, 如何让它最快 } (async () => { const result1 = await sum(1, 2, 3, 4); const result2 = await sum(1, 2, 3, 4, 5, 3, 2, 5, 9); const result3 = await sum(1, 6, 3, 0); console.log([result1, result2, result3]); // [10 , 34, 10] })();
hr面
聊天
字节是我提前批第一个投的公司, 想着多时间准备一下下, 所以面试周期就比较长, 花了一个月时间才全部面完, 最后得知hr面挂了, 有一点点不太甘心, 不过看到有不少牛友们拿到了字节的offer, 又一次次的激励了我, 加油🐛.
百度
一面
- 闭包
- 闭包会有什么问题
- 事件循环
- this
- 三个手撕题
// 链接参数 const url = 'https://www.baidu.com'; const params = { a: 1, b: 2, c: 3, }; fn(url, params) // https://www.baidu.com?a=1&b=2&c=3
var arr = [[12, 2, 2], [6, 7, 8, 5], [3, 4, 5, 9, [11, 12, [1, 13, [14]]]]]; fn(arr); // 去重 + 扁平 + 排序 // [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14]
// 摊平数组转嵌套数组 const list = [ { id: 1, label: 'a' }, { id: 2, label: 'b' }, 'group1', { id: 3, label: 'c' }, 'group2', { id: 4, label: 'd' }, { id: 5, label: 'e' }, ]; fn(list); // 结果 const result = [ { id: 1, label: 'a' }, { id: 2, label: 'b' }, { group: 'group1', children: [{ id: 3, label: 'c' }] }, { group: 'group2', children: [ { id: 4, label: 'd' }, { id: 5, label: 'e' }, ], }, ];
二面
介绍实习内容
如何设计一个组件Tooltip, 有什么参数, 什么事件, 如果有不同的样式, 你会怎么设计
同步异步、阻塞非阻塞
Redux的理解、为什么要这么设计
Promise
算法题: 设计链表+反转链表
手撕题: 并发请求api