简介
整体来说字节跳动的面试的考核很全面,包括项目,算法,基础,问的问题也很细致,有些题目也没怎么答出来,投的是 Node.js 方向,所以 Node 的题也比较多。一天面完的,每面大概40-50分钟。面试官都挺负责的,也给了我一些很中肯的意见,学到了很多。
询问了一下 Node 在公司中的应用,感觉公司还是在大力推广 Node.js 的,也在围绕 Node 构建基础设施和生态环境,也有全栈 Node.js 的组,感觉对于 Node 还是很重视的。
一面
- 先聊了一通项目,问了我 decorator 的实现原理,扯了一大堆,感觉良好。
- 如何判断是不是完全二叉树(没答出来)
- 编程题:判断一个链表是否有环
- 一道考异步执行顺序的题,只要了解micro task 和 macro task 应该就可以答出来
- 编程题:写个函数反转字符串
- TCP 握手,分手,拥塞控制,流量控制
- https的原理
- DHCP 的实现基于啥协议(UDP)
- Vue 的双向绑定实现原理
- Vue 如何监听一个不会触发 render 的数据
剩下的记不清了
二面
先聊项目
- TCP 握手,分手,拥塞控制,流量控制
- 有哪些缓存策略(只答出了 LRU)
- 简单介绍进程与线程
- 简单介绍 node 中的 child_process 模块,父子进程的通信机制(没答好)
- 介绍基本的数据结构及其应用,队列,栈,堆。函数的执行栈和堆内存
- 又是一道考异步执行顺序的题,需要了解 Node 的 nexttick 以及事件循环每个 stage 做了啥。比如 poll 阶段, timer阶段, check阶段之间的差异,有点难,最后还是错了一点
- 编程题:实现一个简单的 EventEmitter,然后基于此聊了一会
- 二叉树的前中后序遍历,已知前中序,求原有的二叉树
- 各类排序算法介绍,冒泡,快排,堆排,以及相应的算法复杂度
三面
这面没问算法题,聊了很久项目,问了一些开放性的问题,也问了一些基础题,感觉发挥的不是很好,有些很简单的题没答出来。
- 简单介绍一下 body-parser 的作用和原理(没答好)
- 基于 http 模块,写一个 http server,并且处理 POST 请求
这里 req 实际上是个 stream,获取 body 的方法是基于注册 on data 事件实现的,当时脑子短路没说上来。。错了整道题 - 跨域相关的问题
- 介绍CSRF。CSRF会不会有跨域的问题(不会,这里涉及到跨域的一些原理,跨域请求会被后端接口执行,但是返回的时候会被浏览器拦截)
- 希望 全栈还是专注做 Node.js
- 基于你学的信息安全专业你对现在的 web 安全有什么看法,有什么改进意见(没有看法。。。)
- 一堆开放式问题。。
最后
等结果ing