本人刚刚大三结束,投递了字节跳动抖音的秋招提前批,三轮技术面+一轮hr面,已经成功拿到意向书,特意把面试过程整理下来分享。
一面(1h)
- 跨域说一下
- 可以从跨域的原因和解决跨域的方法说。
- 1.1 跨域主要是由于浏览器的同源策略,是对跨域响应进行了拦截。
- 1.2 跨域的解决方法有JSONP、CORS、反向代理等等,具体说一说。
- 输入URL发生了什么
- 寻找强缓存 -> 构建请求 -> DNS解析 -> 建立TCP连接 -> 发送HTTP请求 -> 响应(200/304协商缓存) -> 构建DOM树 -> 构建CSSOM树 -> 声称布局树 -> 建图层树 -> 生成绘制列表 -> 生成图块 -> 显示器显示
- 重绘和回流说一下
- 重绘、回流的触发条件、过程,可以针对此做的优化策略。
- new操作符进行的操作
- 以构造函数.prototype为原型创建空对象,将构造函数的this绑定到建立的空对象并执行,结果是引用数据类型则返回结果否则返回创建的对象。
- 说一下CommonJS和ES模块化的区别
三道算法题:
- 版本号排序
// 输入 ['1.1.1.1.1.1', '6', '5.4.3', '2.3.1', '2.3.1.1']
返回从大到小的版本号数组
我的写法是将每一个版本号以.分隔为数组,然后从第一位往后比较。
- 判断一个链表是否有环
- 快慢指针即可。
- 实现一个类的add方法,使得同时的并行请求只有两个,并行请求完成后自动执行下一个任务直到全部执行完。
class Scheduler {
async add(promiseFunc) {
}
}
const scheduler = new Scheduler()
const timeout = (time) => {
return new Promise(r => setTimeout(r, time))
}
const addTask = (time, order) => {
scheduler.add(() => timeout(time)).then((res) => console.log(res))
}
addTask(1000, 1)
addTask(500, 2)
addTask(300, 3)
addTask(400, 4)
完整实现详解参考:实现Promise并行调度器
- 使用Koa实现请求-响应的时间监听
二面(1h)
上来就是两道题:
- ES5实现数组去重,要求时间复杂度是O(n). [1, 2, 2, '1', 'test'] => [1, '1', 'test'] 要求可以区分到1和'1'
- 我问了是否可以使用额外空间,面试官回答是可以的。那就定义一个hash对象,遍历存入,key值的话需要添加typeof,用来区分1和''1'
- Promise并行
[promiseGenerator]
promiseGenerator => Promise
dispatch(arr, n) {
}
// 实现dispatch方法
跟上一面的思路差不多
接下来就是跟着简历问项目,项目中自己所做的一些亮点,这个持续的时间比较长。
然后问了一些基础题:
- HTTPS相相对于HTTP做了些什么?
- 从SSL+数字签名这两个方面说。
- HTTP2.0的优化?
- 头部压缩、多路复用、服务器推送这三个方面详细回答。
- 说一下为什么HTTP1有队头阻塞的问题
- HTTP2.0实现了服务器主动PUSH,那么如果服务端文件(html)没有发生改变,那么此时还会主动PUSH,如何解决这个问题?
- 这个我有点懵,因为面试官对于服务端主动推送问的很深,我不会,他回答是服务端可以主动释放。
- React看你比较熟悉,说一下?
- 可以说一下解决的问题、优势、原理。
- 看过相关的源码没,说一下印象深刻的地方?
- Virtual DOM的优势
- 函数式UI编程、跨平台。
- webpack的原理说一下?
- 其实就是依赖关系图的构建过程
- webpack自己实现过loader或plugin吗?
- webpack loader和plugin的区别?
三面(35min)
三面进行的时间比较短,首先是围绕项目进行的一些提问,这个持续的时间比较长。 然后其他没问,直接给了两道题:
-
一个非常长的非递减数组,找出一个数出现的次数。比如:
[1, 2, 3, 3, 4, ......, 45, 45, 69, ......, 1000]
找出80出现的次数- 使用二分查找,找出这个数字出现的索引,然后向左向右扩展。
-
同花顺扑克牌问题 将扑克牌去除大小王,剩余1~13的黑桃、红桃、梅花、方块,1~13黑桃编号1~13,1~13红桃编号14~26,一次类推,求解取出5张牌是同花顺(同一颜色,顺子)
- 解决方法很简单,先排序,最大与最小和需要是4,然后判断最小或最大是否在指定区间。
三面进行的很简单时间也很短,主要是项目,算法也很简单,不知道为什么~
hr面(40min)
三面完就约了当天进行hr面,不得不说字节的效率,hr面是个可爱的小姐姐~ 主要沟通了一些工作、实习、学校、学习方面的事情吧。
- 为什么实习离职了,而不是留下来转正?
- 你觉的你的优势在哪里?
- 你觉得你的缺点在哪里?
- 你对薪资待遇有什么要求?
- 薪资在你心中的地位和分量?
- 实习期间对于公司的工作时间怎么看的?能接受吗?
- 对于加班怎么看待的呢?
- 你未来两三年的职业规划?
- 你是会学习一些后端、人工智能,还是专注于前端?
- 平时学习的方式?
大概是有这些问题,当时还有其他问题想不起来了,沟通了四十分钟过程还是挺OK的。
反问环节我问她怎么看待印度最近封杀了抖音海外版的情况,她笑了笑说说明了公司这方面的工作,然后通知我三个工作日offer会到。
如今意向书到了也快有一星期了,也祝愿大家都能拿到心仪的offer~
整理不易,求个点赞关注~