2021-08-25 14:53:05
字节跳动今日头条前端面试(4轮技术面+1轮HR面)核心问题及解析如下:
一面(基础技术面)36进制转换算法:需理解进制转换原理,通过除基取余法实现,注意字符与数字的映射(如10→'A')。
HTTPS与HTTP区别:
HTTPS在HTTP基础上加入SSL/TLS协议,实现加密传输。
默认端口:HTTP为80,HTTPS为443。
HTTPS需CA证书,安全性更高。
Node.js中Cluster模块:
通过cluster.fork()创建子进程,主进程监听端口,子进程通过IPC通信。
端口复用:操作系统支持SO_REUSEPORT选项时,多个进程可绑定同一端口(Linux 3.9+),否则需主进程监听后分发请求。
Vue原理(数据劫持):
使用Object.defineProperty或Proxy实现响应式,需实现getter/setter、configurable(能否删除属性)、enumerable(能否枚举)。
Vue-router源码:基于哈希模式(hashchange事件)或History模式(H5的pushState/replaceState)。
树的遍历算法:
层次遍历(BFS):使用队列,依次访问每层节点。
对称二叉树判断:递归比较左右子树是否镜像对称。
let/var/const区别:
var存在变量提升,作用域为函数级;let/const为块级作用域,存在暂时性死区。
const声明常量,不可重新赋值(对象内容可修改)。
HTTP头部与连接保持:
Connection: keep-alive实现长连接,减少TCP握手开销。
常用头部:Content-Type、Cache-Control、User-Agent等。
跨域解决方案:
JSONP:利用<script>标签不受同源策略限制,仅支持GET请求。
CORS:服务端设置Access-Control-Allow-Origin等头部。
代理服务器:开发环境配置代理,生产环境使用Nginx反向代理。
Webpack优化:
HappyPack:多线程构建,加速JS编译。
Tree Shaking:基于ES Module静态分析,移除未使用代码。
TypeScript类型:
基础类型:string、number、boolean、any、void等。
高级类型:Union、Intersection、Type Guard。
type与interface区别:type可定义联合类型、元组等,interface支持声明合并。
React优化:
虚拟DOM、shouldComponentUpdate/React.memo、useMemo/useCallback避免重复渲染。
代码分割(React.lazy)、异步加载组件。
Node.js多进程通信:
主进程与子进程通过child_process.fork()的IPC通道通信。
子进程间通信需通过主进程中转或第三方工具(如Redis)。
Node.js多线程:
主线程为单线程,可通过worker_threads模块创建多线程(CPU密集型任务适用)。
算法题:
分饼干问题:贪心算法,优先满足需求小的孩子。
最大X值区间:暴力法遍历所有区间,或优化为单调栈/双指针(需分析时间复杂度)。
合并两个有序链表:递归或迭代法,时间复杂度O(n+m)。
Cookie属性:
Domain、Path、Expires/Max-Age、Secure(仅HTTPS)、HttpOnly(禁止JS访问)。
存储机制对比:
cookie:服务器设置,容量小(4KB),随请求发送。
localStorage/sessionStorage:客户端存储,容量大(5MB),sessionStorage会话级。
CSS预处理器:
Less/Sass提供变量、嵌套、混合等功能,编译为CSS。
学习方式:
官方文档、开源项目、技术社区(如掘金、Stack Overflow)。
前端接触时间:需体现持续学习(如自学课程、参与开源)。
项目难点:突出技术挑战与解决方案(如性能优化、跨域处理)。
未来规划:短期(技术深耕)、长期(架构师/全栈方向)。
实习时间:明确可到岗时间与实习周期(建议3个月以上)。
祝面试顺利,收获Offer!