面试题集训1
# 腾讯
# 一面
- 写一个 LRU 缓存函数
- 写个防抖和节流函数
- 你们服务是怎么部署的?Node Agent 做了什么工作?
- Grpc 的优缺点?
- http2 的相关特性?
- viewport 和移动端布局方案
- 实现一个 compose 函数
- 开发中有遇到过比较难定位的问题吗?Node 内存泄露有遇到过吗?
# 二面
- react ssr 是在什么场景下做的?
- react ssr 双端怎么做构建的?区别在哪里?
- 有没有做过同构组件?服务端和客户端怎么同步状态的?
- render 和 renderToString 的底层实现上的区别?
- 客户端怎么处理 JS 事件失效的问题?客户端不重新加载 JS 的情况下怎么实现?
- 做服务端渲染的时候有没有遇到过比较难的点?
- react ssr 和 ejs 性能的差异?
- 服务回滚是怎么做的?上线流程是怎样的?k8s 回滚、拉取以前的镜像
- webpack plugin 的原理是什么?
- plugin 中有异步请求会阻塞后面的 plugin 吗?
- 做过哪些 webpack 的性能优化?
- hard-source-webpack-plugin 是怎么做缓存的?修改文件后会怎么样?
- parallel 的原理是什么?多个子进程怎么通信?
- 你们 webpack 是怎么做拆包的?
- 服务端监控是怎么做的?服务有上报过什么指标?
- Node 服务怎么去定位 CPU 占用暴涨的情况?怎么去定位内存泄露?
- 编写 grpc 服务和 http 服务的区别?
- 做过哪些 react 相关的优化?函数组件怎么实现 shouldComponentUpdate?
- 如果有一个非常大的 react 页面,我想优先渲染某一部分,这该怎么做?
- react 函数组件和 class 组件里面 state 的区别?
- react useEffect 对应 class 组件的哪些生命周期?
- 前端的监控是怎么做的?除了 sentry 还做了其他异常处理吗?
# 三面
- 讲一下你做的比较复杂的项目?以及你在项目中担当了什么角色?
- 你是怎么看待现在各种造轮子的?
- 有一个一亿长度的字符串,怎么存储设计可以让它更好去查询、修改?
- 怎么优化 H5 让它可以在 300ms 之内打开?
- 你们 WebView 加载一般耗时多久?
- 你们为什么从 Python 重构到 Node?好处是什么?
- 你是怎么看待做后台管理系统的?很多人觉得它没有难点,你觉得呢?(问这个问题是因为我现在在做后台管理系统)
# 总监面
有点儿记不清了
- 新加坡和深圳内网是怎么连通的?
- 未来的职业规划是什么样的?
- 对当前新的技术有了解吗?
- 对客户端知识有了解吗?
- 为什么要离职?
拒了,岗位不是很喜欢
# 蚂蚁
# 一面
- React setState 怎么获取到更新后的值?异步函数中为什么 setState 会立即更新?
- 做过离线包吗?H5 离线包的原理?客户端根据什么拦截静态资源请求?
- JS Bridge 的原理?你们这套方案的s优缺点?
- 怎么判断 webview 是否加载完成?
- 怎么实现 App 头部和页面的背景渐变?
- PC 端做过比较有意义的项目?
- 微前端子应用之间怎么通信?有没有了解过业界的一些方案?
# 二面
- 你们部署的 Jenkins 是怎么做的?
- JS Bridge 原理?有没有安全漏洞?
- 有没有做过和安全相关的?waf 主要做了什么?
- 有没有做过埋点和性能上报相关?
- 如果你们用一个第三方的上报库,但页面加载这个 JS 失败了,还想上报该怎么办?
- 实现两个大数相加
- 实现 DOM 字符串转虚拟 DOM 对象(不能用 DOM 相关的 api)
- 有木有做过你觉得比较困难的项目?
# 三面
- 管理系统都做了哪些业务?有没有做一些提高开发效率的东西?
- 常用的组件是哪个?解决了什么问题?
- 平时 Node 都用来做什么?怎么实现的?
- SSR 的实现原理是什么?
- 项目中遇到的技术难点有哪些?
- 你觉得你们比 lazada 做得更好是哪些原因?
# 四面(略)
# 五面(略)
# 拼多多
# 一面
- 有没有做过比较复杂的页面?携程的 React-imvc 做了什么?
- 使用 Redux 的好处,以及和 Mobx 的区别
- 对 React 最新特性有了解吗?class 组件和函数组件的区别?
- useState 为什么不能放到条件语句里面?
- 实现一个 Promise.all
- React SSR 是怎么实现的?
- 有用过代码规范相关的吗?Eslint 和 Prettier 冲突怎么解决?
- 实现一个数组转树形结构的函数
# 二面
- 说几个你觉得足够复杂的项目?
- 你是怎么去做 React SSR 的?
- 有没有做过性能优化相关的?
- 实现一个深拷贝
- 实现一个二叉搜索树转链表的方法
拒了,不想去卖命
# 商汤
# 一面
- 在工作中,主要是做什么内容?
- 有用过 lerna 吗?多个项目之间共用的东西怎么共享?
- 讲一讲微前端是怎么做的?怎么独立部署?子应用通信怎么做?
- webpack 构建流程是怎样的?
- webpack loader 和 plugin 的原理和区别?
- webpack 热更新原理?
- webpack 怎么做分包?
- 做过 webpack 性能优化吗?有用过 rollup 吗?
- react-imvc 是什么?它做了什么?
- react 和 react-dom 的区别是什么?
- redux 和 mobx 的区别和优劣?用过 redux-saga 吗?
- react diff 的复杂度,以及 react diff 的原理
- react class 组件和 hooks 的区别?
- 什么是 TS 泛型?
- 从输入 url 到页面展示经过了哪些步骤?
- 讲一下重绘和回流
- 知道 BFC 吗?使用场景有哪些?
- 怎么判断是否为数组?
- 页面卡顿怎么去定位?
- 数组有10万个数据,取第一个和取第10万个的耗时多久?
- 有用过 canvas 相关的吗?
- JS 垃圾回收机制?怎么定位 Node 内存泄露问题?
- 你是怎么理解前端的?
- 工作中遇到过最难的问题?有没有什么让你自豪的项目?
- 周末你都在做什么?学习前端的途径是什么?
其他公司面的差不多了,这个后续面试就都拒了
# 字节
# 一面
- tcp 和 udp 的区别和使用场景?
- quic 基于 udp 怎么保证可靠性?
- 讲一下同源策略和跨域方案?CORS 的几个头部是什么?
- 讲一下 react fiber?
- vue 双向绑定原理?
- redux 和 mobx 的区别和使用场景?
- typeof null?null instanceof Object?
- typeof 可以判断哪些类型?instanceof 做了什么?
- 实现一个 bind 函数
- 求数组里面最大连续项的和
- event loop
# 二面
- 怎么优化 h5 的加载速度?
- 离线包怎么更新?怎么知道需要打开哪个离线包?
- js bridge 通信原理?
- 怎么实现 h5 页面秒开?
- 明明不是同一个语言,为什么 js 和 native 可以通信?
- 怎么实现 js bridge 跨多个 app 共用?
- grpc 相比 http 的优势?
- rpc 的调用流程?前端怎么调用 grpc 的?
- 为什么要用 grpc?
- 服务发现为什么用 ip,而不用域名?
- 怎么做 DNS 预解析?
- 怎么实现移动端的布局?
- iOS 下软键盘输入框遮挡遇到过问题么?怎么解决顶不起来的问题?
- 实现两个大数相加
- 求一个数组最大子项的和,要求这些子项在数组中的位置不是连续的
- 常用的 react hooks 方法
- useState 怎么做缓存的?
- react fiber 是什么?
- 怎么解决 useState 闭包的问题?
- useReducer 比 redux 好在哪里?
# 三面
- 做过哪些公共组件?DatePicker 怎么实现的?难点在哪里?
- 组件封装有哪些原则?
- 组件数据和 UI 怎么分离?
- 有没有做过一些提高工作效率的东西?
- 有没有了解过拖拽?觉得它有哪些难点?
- 有没有做过优化相关的?webpack 做了哪些优化?
- cache-loader 和 hard-source-webpack-plugin 的区别是什么?
- 最近遇到的比较难的项目是什么?你们服务是怎么部署的?
- Puppeteer 可以用来做什么?
# 再惠
有点儿记不清了
# 一面
- 自我介绍一下
- 看到你用过mobx,说一下mobx的优势?实现原理呢?
- 你工作以来,在项目中遇到的印象深刻的问题有哪些?有没有在项目实践过一些自己的想法和新技术?
- 说说TS和ES的区别,以及TS带来的好处?
- 你说你学习能力强,那你毕业这一年多来,你都是怎么熟悉业务和项目的?有系统的看完过哪本书?
- 对小程序有了解吗?(我只写过demo)
- 对打包工具有了解吗?
- 除了react,你还用过哪些框架?
- 求契波那切数列的第N项
- 获取到契波那切数列的前N项
- 求一个对象的层级数(我写完后,又问如果不用递归,只用循环实现呢)
- 实现下面这道题中的machine函数
function machine() {
}
machine('robot').execute()
// start robot
machine('robot').do('eat').execute();
// start robot
// robot eat
machine('robot').wait(5).do('eat').execute();
// start robot
// wait 5s(这里等待了5s)
// robot eat
machine('robot').waitFirst(5).do('eat').execute();
// wait 5s
// start robot
// robot eat
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 二面
- 介绍一下你们那边的业务?那你们业务都是在app里面吗?(安卓、IOS、H5甚至小程序和快应用都有,基本上都是webview套h5做的)
- 你最近有比较感兴趣的、主要研究的技术吗?为什么感兴趣?
- 我看了你的github,上面star了一个react.backbone,这个是什么?
- 我看你的github里面有个mobx-jquery,这个是做什么的?
- 这个mobx-jquery里面的observer你是怎么实现的?(封装的autorun)那么autorun的原理是什么?
- 你对团队的要求是怎么样的?你毕业这一年多收获最大的是什么?
- 看到你写了TS,那么TS的优势是什么呢?你说修改字段后其他还用原字段的地方会报错,那么是怎么跟踪到是否修改的呢?vscode里面是怎么实现根据类型文件来给一个方法添加类型的呢?
- 看到你的简历里面写着维护一个老项目,这个lizard是什么框架?(基于backbone封装的一个Hybrid框架xxxxx)
- 那来做道题吧。实现一个函数,可以按顺序获取到一个DOM节点下面所有的文本。
- 你有什么想问我的吗?(你平时在公司的一天都是在做什么呢?)
# 总结
感觉技术栈和这家可能不是很匹配,他们主要做h5和小程序,h5也以vue居多,所以这些问题基本上都没怎么深入。
面试除了mobx,也没问过我react相关的技术,也没问过app开发方面的东西,他们唯一感兴趣的就是TS,可惜我TS写的不多。
但是面试体验还不错,我属于比较紧张的人。面试官让现场写代码,可以查资料,可以现场调试,甚至有不懂的还可以问一下他,我觉得这个挺好的。听他们描述,感觉团队技术氛围不错,和HR聊了一下,觉得福利还算不错。
附上一面第12题的答案。
function machine(name) {
return new Action(name)
}
const defer = (time, callback) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve(callback())
}, time * 1000)
})
}
class QueueItem {
constructor(defer, callback) {
this.defer = defer;
this.callback = callback;
}
}
class Action {
queue = []
constructor(name) {
this.name = name;
this.queue.push(new QueueItem(0, () => console.log(`start ${this.name}`)))
}
do(eat) {
this.queue.push(new QueueItem(0, () => console.log(`${this.name} ${eat}`)))
return this;
}
wait(time) {
this.queue.push(new QueueItem(time, () => console.log(`wait ${time}s`)))
return this;
}
waitFirst(time) {
this.queue.unshift(new QueueItem(time, () => console.log(`wait ${time}s`)))
return this;
}
async execute() {
while(this.queue.length > 0) {
const curItem = this.queue.shift();
if (!curItem.defer) {
curItem.callback();
continue;
}
await defer(curItem.defer, curItem.callback)
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 富途
# 一面
- 自我介绍
- 为什么离职?你说你觉得做的业务无聊,那怎么样才是不无聊的呢?你期望的团队是怎样的?
- 什么是xss攻击?有什么危害?怎么解决?
- 实现一个深拷贝
- 有两个有序数组M和N,怎么判断N是否为M的子集?
- 箭头函数和普通函数有什么区别?
- for循环里面setTimeout打印的值是多少?怎么解决这个问题呢?(let和闭包解决,解释一下原理就好了)
- 你们团队中的每个成员都是什么角色?你在里面扮演什么角色?
- 怎么优化页面的加载速度?如果有很多个小图标,怎么优化?iconfont有什么缺点?
- 移动端兼容不同设备有哪些解决方案?这些方案都有哪些缺点?
# 达达-京东到家
面试过去的时候,先让做了一张试卷,主要是考察http、css和js的。
# 笔试题
只记得这几道http相关的
- http2.0的新特性有哪些?(选项是多路复用、头部压缩、设置优先级、服务端推送、二进制传输)
- DNS的作用有哪些?(选项是域名解析、防火墙、负载均衡、控制流量还有一个我不记得了)
- 以下哪些协议是可靠的?(选项是TCP、UDP、FTP、HTTP还有一个我不记得了)
- 以下关于POST请求说法正确的是?(POST请求只能通过body带参数、服务器一定能够收到POST请求发送的数据、POST请求发送了两个数据包、POST请求可以被缓存)
# 一面
- 什么是BFC?垂直margin重叠是为什么?怎么解决这个问题?
- CSS里面有哪些相对单位?都是相对什么的?
- fixed是相对于谁定位的?如果加上transform会出现问题吗?
- 什么是XSS攻击?怎么解决?
- innerHTML有什么问题?有什么简单的办法可以避免插入文本被XSS攻击吗?
- 为什么不推荐用style内联元素?内联元素有什么缺点?(css文件可以缓存)
- 什么是原型链?原型链的终点指向什么?
- cookie、sessionStorage、localStorage的区别和作用是?
- http状态码有哪些?301和302的区别是什么?304是指什么?
- 什么是闭包?使用场景有哪些?闭包会引起什么问题?
- 什么是浅拷贝和深拷贝?怎么实现一个深拷贝?
- lodash和ramda的区别是什么?
- HTML中attribute和property的区别是什么?
- 怎么解决跨域?
- 字符串和new String出来的字符串有啥区别?
# 二面
- 解释一下react中setState?(说说setState的表现和原理实现)
- 如果我需要上传一个文件,前端展示进度条,用setState会导致合并更新,你有什么好办法?(Promise封装setState、利用setState底层特性,使用异步函数(setTimeout、async)包裹)
- 有状态组件和无状态组件,有人说有状态的更好复用,有人说无状态的更好复用,你平时写的时候是怎么分的?(这个还是要看业务场景)
- 如果有个react项目,你该管理组件状态?(从local state、global state和global store三个方向来解释)
- react中组件是怎么响应数据的变化从而更新的呢?
- react中的生命周期分为哪几个阶段?react16废弃了哪几个生命周期api?
- 虚拟DOM相比真实DOM,为什么会带来性能上的优化?
- diff算法是怎么比较新旧节点并更新的?key有什么作用?
- 如果我这里有一个文本组件,我修改了里面的文本,那么会影响到其他的组件吗?(所以这个还是要看场景)
- 如果store中有一个cityList字段,我们需要在用户刷新后保持原来的样子,做缓存,如果这个时候上方下达了一个命令,需要关闭某个城市的物流配送,这个时候需要将该城市移除,用户不刷新浏览器的情况下,如何做到?(这道题说实话我没理解,我说更新store和缓存,但被面试官否定了,后来只能说不知道,也忘了问他答案是什么了)
- 对webpack有了解吗?chunk、bundle和module有什么区别?
- 说说hash、chunkhash和contenthash的区别?
- TypeScript有哪些好处?
- 浏览器页面渲染的流程是什么?
- css会阻塞页面渲染吗?会的话该怎么解决呢?怎么做到只加载首页的css?
- 你觉得你最擅长的技术是哪一块呢?
# 综合面
综合+HR+部门leader
- 从你的项目中随便找一个,说一说这个项目解决了哪方面的问题,业务或者技术上的都行。
- 这个项目中你的角色是什么?你做了哪些?哪里又能够体现你的能力呢?
- 为什么只在携程呆了一年多就出来找工作了?你现在的职级是多少?
- 你最近有看过什么书?最近在研究的技术是什么?
- 用过vue吗?感觉和react的区别是什么?如果让你做vue项目,你能接受吗?
- 这边是一个vue重构到react的项目,最近招人来做这块的内容,包括webpack之类的都是重新搭,你觉得你能hold住吗?
- 打算在上海定居吗?是打算啥时候回二线?
- 你未来3-5年的职业规划是什么?
- 其他私密问题等等
# 总结
二面的时候,面试官问我有什么想问的吗?我说,对于我这种刚毕业1-2年的人来说,我对webpack和node接触比较少,在公司也很难接触到,自己写项目又遇不到很多深入的场景,接下来我该往哪方面发展呢?什么才是更重要的呢?
面试官说,你之前说自己为什么离职的时候已经说的很清楚了,我相信你已经找到答案了。我觉得对于毕业1-3年的人来说,如果能够做到独立去带一个项目和团队,这是非常可贵的。
部门leader面的时候,问了我很多项目方面的问题,不少正中我要害,刚毕业一年多来确实没有想过那么多东西。在技术不够突出,工作经验也比较少的情况下,似乎也很难说哪里能够体现出自己的能力。如果能多呆半年,肯定会有不一样的回答。
HR面的时候,这个HR对前东家的薪资待遇、职称等等可以说非常了解了,问了很多深入和细节的问题,也和我聊了很多,导致我非常尴尬和紧张(我一向不会撒谎,很多都是照实说了)。
这是自己遇到时间最久一次面试,算上HR面前后有五轮。不过,还算是愉快,至少让我积累了一大笔很宝贵的面试经验。
# 参考链接
https://juejin.cn/post/6939774328858738696
https://juejin.cn/post/6844903799035789325