1. JavaScript 基础,包括原型与原型链、继承、事件循环、作用域、ES6语法、垃圾回收与内存泄漏等。
2. 网络通信,重点有浏览器缓存、Http2.0、Https通信过程、TCP与UDP、DNS解析、CDN缓存等。
3. HTML和CSS,这块被问的内容比较少,重点从布局入手,比如单位、盒模型、定位、响应式布局等知识点。
4. 前端框架,框架的底层原理是一定会问的,至少要深入掌握一个前端框架。目前业界内比较流行的框架是 React 和 Vue,React 的知识点有 React diff、生命周期、Fiber 架构、Hooks 等;Vue 的知识点有Vue diff、响应式原理、Vue3.0新特性等。
5. 打包工具,主要围绕Webpack展开,比如loader和plugin原理、webpack构建流程、热更新原理、性能优化等。除此以外,打包界的新宠esbuild也可以了解下。
6. 加分项,除了JavaScript外,还了解哪些编程语言
OM 的事件机制,怎么阻止事件捕获
常用的 ES6 语法有哪些,var 怎么实现let
React Hooks vs Component
React中的 useCallback 和 useMemo 有什么区别,什么情况下需要用 useCallback
浏览器的 Event Loop 机制
setState 是同步还是异步的
Set 的用法,用 Set 实现数组去重
Graphql 的使用
移动端适配方案, rem 和 em 的区别
React 解决了什么问题
前端跨域怎么做
编程题:用 setTimeout 实现 setInterval
-
Vue 的双向绑定机制
-
字节小程序和微信小程序区别
-
React Fiber 机制
-
React Hooks 的原理
-
Node 遇到过哪些性能问题
-
Node 做耗时的计算时候,如何避免阻塞
-
低代码平台运行时的生成逻辑
-
低代码平台性能优化
-
低代码平台组件发布流程
-
上家公司做了哪些事情以及做事的流程
-
未来职业规划
-
感兴趣的工作方向
-
编程题:输入两个数组 [1,2,3,2,1], [3,2,1,4,7] 返回公共的并且长度最长子数组的长度
-
less-loader 的 less 转成 css 的底层原理
-
webpack的 loader 和 plugin 区别
-
webpack 常用插件
-
webpack 如何做代码拆分
-
webpack tree shaking 原理
-
webpack 动态导入原理
-
webpack 热更新原理
-
webpack5 新特性
-
esm 和 commonjs 的区别
-
TS 的 type 和 interface 的区别
-
TS 怎么做枚举
-
TS 泛型
-
canvas 绘制流程,canvas 里的图片跨域怎么处理
-
项目经历:babel 插件的实现
-
编程题:实现一个深拷贝
二面
-
链表和线性表 crud 比较
-
了解哪些设计模式,实现其中一个设计模式
-
canvas 绘制流程,遇到了哪些问题
-
从输入URL到浏览器显示页面过程中都发生了什么?
-
移动端布局方案
-
浏览器 Event Loop
-
对图形绘制了解多少
-
ES6 为什么要转成 ES5
-
H5 开发时遇到了哪些问题,怎么定位的
-
DOM 事件流
-
平时怎么做性能优化
-
最有亮点的两个项目
三面
-
HTTPS 加解密过程
-
哈希表原理,哈希碰撞时怎么处理
-
内存回收机制
-
栈内存和堆内存的概念
-
线上错误监控怎么做
-
CI/CD 流程,有哪些改进点
-
进程间如何通信
-
低代码平台的实现
-
对下一份工作的期望
3. 神策
一面
-
CSS 预处理器对比
-
CSS 定位有哪些取值
-
原型与原型链,函数怎么实现继承
-
this的指向,call、apply的区别
-
Vue 3.0 和 2.0 区别
-
Vue.$nextTick 作用
-
Vue 和 React 的 diff 有什么区别
-
proxy 拦截器的用法
-
DNS 解析流程
-
事件循环
-
闭包和内存泄漏
-
最有亮点的一个项目
二面
-
HTTP 幂等性定义和常用方法的幂等性
-
redux 单向数据流有哪些优势,redux 中间件实现原理
-
React HOC vs renderProps
-
浏览器里的线程与进程
-
requestAnimationFram 与 requestIdleCallback 的区别
-
npm管理痛点,如何解决
-
gitflow流程、分支管理
-
websocket建立连接过程
-
组件/工具库打包时的格式输出,如:CommonJS、ESM、UMD等,他们之间有什么区别
-
Http 301、302 状态码的区别
-
H5 性能优化
-
编程题:设计一个flat函数将如下数组arr=[1,2,['3',4,'5',[6,[7,8],9]]]输出为1,2,'3',4,'5',6,7,8,9。至少写出两种方法,要求不能改变数组中的原始数据类型
三面
-
BI 可视化系统介绍
-
在字节之后的提升有哪些
-
目前前端可以做的优化有哪些
-
新旧系统重构的时候,怎么过渡上线
-
Vue React 的区别
-
字节小程序介绍一下
-
自己未来的规划。自己的优缺点、周围人人对自己的评价
-
如何学习一门新技术
-
对神策数据的了解
-
对大数据的了解
4. 王者荣耀
一面
-
进程通信的几种方式
-
TCP/IP 如何保证传输稳定性
-
对称加密和非对称加密的使用场景
-
浏览器帧卡顿检测
-
Vue 和 React的设计理念
-
性能指标FP、FCP和FMP分别跟哪些因素有关
-
低代码平台的技术原理
-
业界其他低代码平台实现方式,对比差异
-
nginx怎么做反向代理与负载均衡
-
编程题:设计和实现一个 LRU (最近最少使用) 缓存机制,满足:1.获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。2.写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。
5. 天眼查
一面
-
JS 有哪些数据类型
-
JS 数据类型识别的方式,有什么缺点
-
原型和原型链,函数怎么实现继承
-
new 发生了什么
-
symbol 类型的用法
-
script 标签里分别设置 defer 和 async, 它们的执行顺序是怎么样的
-
React router 的两种模式模式,怎么动态获取路由上的 id
-
redux 中间件的实现原理
-
React 的 purecomponent 和 component 的区别
-
generator 函数的用法
-
React diff 节点对比的过程
-
Vite 打包工具的使用
-
箭头函数和普通函数区别
-
什么是执行上下文
-
堆内存和栈内存,数组存储在堆内存还是栈内存
-
HTTP2.0 相较于 HTTP1.0 的改进
-
isNaN和number.isNaN区别
-
闭包和内存泄漏
-
setState 是同步还是异步的
-
HTTP 与 HTTPS 的区别
-
React Hooks 的 useState 为什么不能放到条件语句
-
解释下浏览器的同源策略
6. 酷家乐
一面
-
Node 怎么做性能监控
-
React diff 节点移动的具体过程
-
讲一讲浏览器缓存
-
ES5 最优的一种函数继承,静态属性怎么做继承的
-
前端怎么做性能监控
-
V8 引擎对垃圾回收的优化
-
导致内存泄漏的方法,怎么监控内存泄漏
-
作用域和执行上下文区别
-
this的指向问题
-
Array方法,forEach、map 对比
-
for of 和 for in 区别;for of 循环数组时怎么拿到数组索引
-
移动端布局方案;怎么设置根元素的font-size大小的
-
Webpack bundle、chunk、module的区别
-
Webpack 热更新原理,怎么找到对应的局部模块做更新的
-
项目经历:babel插件的实现
7. 中国人寿
一面
-
HTTP2.0 和 HTTP1.0 的区别,HTTP2.0 有什么缺点
-
闭包及闭包的使用场景
-
实现一个侧边栏组件思路
-
浏览器缓存机制
-
重排与重绘,怎么减少重排
-
DOM 事件机制,不会冒泡的事件
-
cookie 和 session 的区别
-
sql 相关操作,增删查改
-
web 安全,xss、csrf 攻击特点及防御方式