高德 滴滴 美团 网易 快手 腾讯 金山 360 百度 知乎 微软等大厂面试经验
一年半以前,写了个万字前端面经,最终去了字节混饭吃,因为一些业务调整的原因,我又跑路了,没写一面二面都是一轮挂的或者后面我不想面了的,附带部门的是挂了或者我拒了之后又面了另外的部门,按照一面开始时间先后排序,还有很多优秀的公司我面了但是忘记录音,比如momenta、完美世界、掌阅等等。现已完成更新,全文共计一万三千字,
每家的自我介绍和离职原因部分我就省略了~
“我自己是一名从事了6年web前端开发的老程序员,今年年初我花了一个月整理了一份最适合2021年自学的web前端全套培训教程(视频+源码+笔记+项目实战),从最基础的HTML+CSS+JS到移动端HTML5以及各种框架和新技术都有整理,打包给每一位前端小伙伴,这里是前端学习者聚集地,欢迎初学和进阶中的小伙伴(所有前端教程关注我的微信公众号:web前端学习圈,关注后回复“web”即可领取
写在前面
- 本次面试持续了整整四周,密度非常大,平均每天四家,身心俱疲,如果不是时间紧迫建议不要把面试安排得这么密集
- 八股文虽然很多没什么用,但是该背还得背
- 算法和数据结构不是短时间就能练成的,不过好在前端不会有太难的算法题,都是基本的动态规划,回溯,数组遍历,链表,二叉树的问题,如果自己算法实在不太行,找工作提前一两个月把力扣上比较经典的题刷一刷,遇到题最起码不至于没思路,各种排序的原理还是要看看的,很容易被问到,而且一旦答不上来很减分
- 不管你写Vue的还是React的(如果你写ng当我没说),很容易被问到两者区别,建议从多个角度去聊,比如框架特性、生态、开发体验、社区评价、性能、源码等多个角度聊
- 有亮点的项目最好多准备几个,最好是不同类型的,比如业务的、偏中后端的、组件库的、工程化的和新兴技术的,根据自己擅长的内容最起码准备两三个,有的面试官就是想看你都做过哪些有难度的事情,一招鲜这时候就不好用了
- 对不同的角色的面试官问的问题,要在不同的角度回答,比如同样问你有没有处理过兼容性问题,对前面的面试官,就可以回答遇到过的不兼容的场景和解决细节,遇到后面leader的面试就可以更多地从如何高效验证排查兼容性问题这个角度回答,注意场景
- 最后一般面试官都会给提问题的时间,我个人一般是问业务内容、技术栈、团队规模或者未来业务和技术上发展方向,到后面的面试官我会问一下这位面试官在这个团队中的角色,根据他的角色结合他对上面几个问题的表述可以初步判断出这个团队是边缘的,还是核心的,还是单纯是个画大饼的
- 整体面下来,面试体验最好的是微软,谦卑,有礼貌,感觉微软面试官是有一整套面试话术的,比如
- “接下来我会问你一些业务相关问题,请在不违反当前公司原则的情况下回答,如果我的问题你不方便回答可以直接告诉我”
- “接下来这个题你可以用你任何熟悉的编译器进行作答”
- “我接下来描述的问题如果你有任何不清楚的都可以随时打断我”
- 我答的题,还有我描述的项目,面试官一般都会先给予肯定答复,如果有问题再做进一步的提问
- 中途有一轮,面试官的问题我理解错了,实现了另一个东西,面试官第一反应是自己没有表述清楚,而且说我理解的这个方向的代码实现得很好
- 后面英文面试时,我英语很差,面试官说了一大段英语我基本没听明白,面试官问我是不是自己说太快了
Taptap
一面
- 换肤都做过什么处理,有没有处理过可能改变尺寸的换肤
- i18n 在团队内部都做了哪些实践
- webpack 迁移 vite 遇到了哪些问题
- CI/CD 做了哪些实践
- 鉴权有了解么,jwt 如何实现踢人,session 和 jwt 鉴权的区别
- TCP 三次握手 http1.0,1.1,2 都有哪些区别
- https,为什么 https 可以防中间人攻击
- 冒泡排序
二面
- 给你一个已经升序排列的数组,给一个数字,找一下这个数字在这个数组里出现了几次
- 洗牌算法,如何验证这个洗牌算法可以把牌洗得足够乱
- node stream 去取一个超大数据量的日志,由于内存限制每次只能取一部分,现在希望在全部日志中随机取一万条,如何做
- 介绍一下项目 有哪些是由你主导提出的方案做的事情
京东
一面
- 介绍一下 promise,它为啥叫 promise
- esmodule 介绍一下,它和 commonjs 的区别,主要的优势是什么
- 介绍一下 vite 的原理,它会去编译你的代码吗,vite 引用 commonjs 的包的时候怎么处理
- 如何转成 esm vue3 的组合式 API 有了解吗,它有哪些优势
- 介绍 https cors 介绍一下
- 微前端有了解吗
- 为什么你们移动端 h5 用 vue,pc 管理端用 react?
- git 对象上的操作有了解过吗? git reset、rebase 这些操作用过吗 ?
- 看你之前跳的都比较频繁,每段都没超过两年,京东有个二五原则,这个问题你怎么看
二面
- 你们小程序是用的 taro,对 taro 原理有了解吗
- 你们 cms 系统的架构是怎样的
- 你有了解过 webpack 现在也支持 esm 了吗?
- 你们的组件库是全公司公用的还是团队内自己的,是从 0 开发还是参考其他开源组件库在别人的基础上搞的?
- 有用 vue3 吗,为什么团队没有上 vue3?
- 你们 react 用的是什么语法? fiber 原理有了解吗?
- 你们当前团队有多少人,未来想做哪方面?
度小满
- 怎么理解 vue 单向数据流的
- Vue 组件之间的通信方式都有哪些,用过 eventbus 么,eventbus 的思想是什么
- 写个自定义 v-modal
- $attrs和$listener 有了解吗
- Vue 生命周期有哪些,都是做什么的,updated 什么情况下会触发,beforeCreate 的时候能拿到 Vue 实例么,组件销毁的时候调用的是哪个 API
- 什么情况下会触发组件销毁,销毁的时候会卸载自定义事件和原生事件么
- 自定义指令写过么,自定义指令都有哪些钩子
- 传统前端开发和框架开发的区别是什么
- Vue2 的数据响应式有两个缺陷,你知道是哪两个缺陷么,为什么会有这样的缺陷,如何解决
- Vue 如何实现的数组的监听,为什么 Vue 没有对数组下标修改做劫持
- Symbol 有了解吗,迭代器有了解吗,哪些是可迭代的
- 用 Set 获取两个数组的交集,如何做
- 实现 Promise.all
- animation 和 transition 有什么区别
- 写个动画,一个盒子,开始时缩放是 0,50%时是 1,100%时是 0,开始结束都是慢速,持续 2 秒,延迟 2 秒,结束后固定在结束的效果
这是我面的比较离谱的一个,问各种API,没什么实际营养,说实话挺无聊的,面试体验也一般
BOSS 直聘
- 聊一下最复杂的项目
- 在无障碍的项目中做过哪些
- 做黑夜模式有没有考虑过用户设置了定时切换手机黑夜模式的情况
- 你们开发的 h5 项目依赖的安卓和苹果的 webview 的内核分别都是什么
- Lottie 动画上做过哪些优化,有考虑在低端机上用 CSS 动画做么
- 如果让你做一个动画,一个地球本身在自转,外面有个飞机围着它转,飞机的螺旋桨自己也在转,有哪些需要考虑的点
- CI/CD 上做过哪些
- webpack 迁移 Vite 遇到过哪些问题,之前 webpack 慢是为什么,有过优化么
- 业务内的公共工具提炼了哪些
- 自己做着玩的这些项目介绍一下,主要都是做什么的
- 这次找工作主要看重什么
奇虎 360(安全卫士)
- 写 Vue 多还是 React 多?
- 职业规划
- CSS 实现一个扇形
- 问输出,以及原因(具体代码我没记,但是这个考点,以下题也都是)
var a = { name: "Sam" };
var b = { name: "Tom" };
var o = {};
o[a] = 1;
o[b] = 2;
console.log(o[a]);
复制代码
- 问输出
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
console.log("async2");
}
console.log("script start");
setTimeout(() => {
console.log("setTimeout");
}, 0);
async1();
new Promise((resolve) => {
console.log("promise1");
resolve();
}).then(() => {
console.log("promise2");
});
console.log("script end");
复制代码
- 问输出
const promise1 = Promise.resolve("First");
const promise2 = Promise.resolve("Second");
const promise3 = Promise.reject("Third");
const promise4 = Promise.resolve("Fourth");
const runPromises = async () => {
const res1 = await Promise.all([promise1, promise2]);
const res2 = await Promise.all([promise3, promise4]);
return [res1, res2];
};
runPromises()
.then((res) => console.log(res))
.catch((err) => console.log(err));
复制代码
- Vue 的 nextTick 是做什么的? 8.React 的合成事件和原生事件了解吗?
- webpack 和 vite 的区别是什么,切 Vite 的动力是什么
- 之前的开发模式是怎样的,是一个人负责一个模块还是按照需求排期分配
- 微前端有了解么
HR约我现场二面,我说我去不了北京,HR说帮我协调一下远程面试,之后就再也没联系我
陌陌
- 之前做过哪些工具
- 移动端兼容性问题遇到过哪些
- 如何限制 Promise 请求并发数
- 实现这个 pipe
const fn = pipe(addOne, addTwo, addThree, addFour); // 传入pipe的四个函数都是已实现的
fn(1); // 1 + 1 + 2 + 3 + 4 = 11,输出11
复制代码
- 了解过 Vue3 么,为什么还没有上 Vue3,了解 Proxy 么,它和 defineProperty 的区别是什么,性能上有什么区别么
- Vue 如果想做模板的复用,应该怎么做
- 有做过骨架屏么,是怎么做的
- 有做过懒加载么
- 有过 React Native 的经历吗
- MySQL 优化有了解过么