两年前端 9 ~ 10月面经(已拿阿里,头条,pdd,快手 offer)
共 3966字,需浏览 8分钟
·
2020-11-19 00:02
刚签掉阿里天猫,闲来无事写点面经,回馈一下掘金
自身情况:双非二本,科班出身,中厂两年,小厂两个月,技术栈:包括但不限于 vue,php,jq,node,平时偷摸看文章,刷算法题 :)
这两个月面试的大厂罗列一下吧(时间顺序):
阿里 A 部门 二面挂 字节 A 部门 二面挂 滴滴 一面挂 抖音 二面挂 字节 B 部门 offer 阶段 快手 offer 阶段 陌陌 offer 阶段 蚂蚁 一面挂 阿里 b 部门 offer 阶段 pdd offer 阶段 电信 offer 阶段
其他一些小厂不罗列了,可以看到,上来面试的几家大厂几乎覆灭,其实是自身缺乏大厂面试经验导致,说说你需要准备的东西,我这里不会给具体问题的答案,很多答案是要自己去思考和总结
基础
前端八股文是必看的
原型链 继承的实现 数据类型 var、const、let 对比 new 的过程 this 指向问题 bind 实现方式 闭包 事件循环 类型判断 手写 Promise
翻来覆去的题也就这些,有一些问题是可以和其他人拉开差距的,然后你需要有自己的一套理解。
例如我理解js
的原型链是这样的:原型链就是链表,this
其实就是链表当前指向的那个原型,bind
call
apply
就是改变链表 next 指向。
例如垃圾回收机制有新生代和老生代,可以谈谈Scavenge GC
算法
例如问渲染页面的过程,除了 tcp 网络层的基础,我会答一些解析算法,容错机制,如何建立图层树
eventloop
答出新版的 chrome
优化了await
的执行速度,await
变得更早执行了,node
和浏览器的区别,新老node
版本执行顺序的不一致
这里我只是举个例子,需要你自己深入挖掘或者看一些文章自己积累
小厂
小厂宗旨就是你能来干活就行了,所以会问很多 api 的使用,假如你是 vue 技术栈的,建议把 vue,vuex,vue-router 文档过一遍,结合平时做的项目还有遇到的坑,基本就可以了。
这里罗列几个 vue 问题:
vue 生命周期,每个生命周期项目中什么时候会用 vue keep-alive 常用属性 组件通信方式 hash 和 history 区别 v-for 唯一 key vue 运行机制,依赖收集 v-show 和 v-if watch 和 computed vuex 中模块拆怎么做的
涉及到的编码题:
数组去重 css 水平垂直居中
中厂
中厂会对于你的深度会有一定的挖掘,不单单是会使用一些 api,还有独立思考问题,涉及到一些工程化的题,对于广度也有要求
罗列几个 vue 问题:
一个页面有父子组件,进入之后的渲染顺序触发的生命周期是什么样的 keep-alive
,如果只想要router-view
里面的某个组件被缓存,怎么做组件通信中的 eventbus
原理是什么vue diff
简单讲讲3.0proxy 讲讲,和 2.0 区别(广度) data
为什么是函数常用 vue api
原理(包括不限于nextTick
,watch
,computed
)
涉及到的编码题:
call
,apply
,bind
节流,防抖 class
实现
大厂
大厂风格不一,这里分开举例
头条,pdd,快手
把这三家放在一起是因为这三家都会问一点算法
头条面试一般 3 轮,一面基础,二面工程化和项目,三面广度,一二面基本就是从头条题库里面抽的,你挨个答就行,会有一道看代码说输出的题,一般是考this
或者是eventloop
,有时候还会有考promise
,前面答的都不错最后会给一个算法题,也可能是实现一个 xxx 函数,算法题也比较简单,也就是leetcode
的easy
难度,最多不会超过middle
,特别喜欢问二叉树,算法题 ok 了面试就过了
比较看运气,答不出的多了就给你挂了,如果你基础足够好覆盖方方面面那肯定能过,算法题我都是直接写出来的,本人算法比较强,算法不强的同学建议先刷剑指 offer,然后在搞个 200 道 easy+50 道 middle,反复咀嚼就够用
这里给点例子:
promise.all 异常处理 版本号比较排序 数组中第 k 个最大元素 二叉树中的所有路径 二叉树中和为某一值的路径 node 中 promisify 实现 fetch 兼容超时重传 观察者模式(高频) String indexOf 实现 扁平化 科里化
其余对于工程上面的考量,因为我是用webpack
打包的,所以会问一下loader
,plugin
的区别,怎么实现loader
,plugin
,自己有没有写过,webpack
整个流程是什么样的,这边建议自己去手写个简单的webpack
玩玩,就全知道了,本质上就是广度递归而已
快手一共两轮面试,第一轮基础+场景题+工程+编码,很全,第二轮技术深度+场景题,问的问题都挺好,很多没有涉及到的方面都是努力思考,面试官也很nice
,唯一一家看了我github
的公司,聊得很投机,给快手点赞,因为快手就面了一次就直接写题了
例子:
vue
如何实现组件封装一个动态拖拽的场景,抓取一个 div
之后如何显示最靠近的div
的基线,就是一条虚线,我这里用队列的方式解决图片,视频断点续传的一些问题 因为我 github
有手写webpack
,针对我写的webpack
问了几个问题,关于hook
和生命周期的
pdd 一共两轮面试,跟上面的问的大同小异,让我惊讶的是二面直接出了道比较棘手的算法题,不过问题不大撸了出来,我 10 分钟左右撸了出来,感兴趣的小伙伴可以试试
例子:
给定一个二叉树, 找到该树中两个指定节点间的最短距离
阿里
阿里是我感觉面试难度 max 的公司,社招 P6 起,基本都是电话面,总流程 3~4 轮,我比较强项的算法和基础得不到体现,基本都是深入业务挖掘的问题
一面:做的业务,用到了什么技术,有什么比较困难的,哪些事情是让技术推进业务的,最后会补 1~2 个基础问题,有的面试官还会问问 http 协议这块。头两次面试阿里没有经验,妥妥的挂了,也是告诫后面的同学不要像我这样,想清楚自己为什么要这么做,自己做的东西服务于谁,整个业务流是什么样的,再去面试阿里
二面:由于我项目中用到了ssr
,面试官从工程化切入,细致入微的问了一下webpack
原理(工程化)
三面:基本就是说说对于行业的理解
典型题
node
如果简历上写了koa
,express
,为什么要使用koa
(express
),直接用node
不能写吗?中间件本质是什么?类似一些进程相关:孤儿进程和僵尸进程,多线程。因为我用的php
,所以node
问题问的比较少,基本面试两个月过来前端面试官都没用过php
:(
项目
项目中遇到最困难的事是什么(必问),这道题自己提前组织好语言,找一个例子,困难点,最后用的什么方案解决。临时增加需求怎么处理?产品方案明显错误,技术怎么推进?类似这些
hr
这轮基本上保持对这个职位强烈需求就可以了,诸如工作氛围,技术,公司方面都举出很多优点就行。如果你觉得聊下来不行也明确表述你的顾虑,不要浪费互相时间
一些面试经验
和许多面试官交流下来,假如你基础特别好,最多也是一块挑一个问题问,20 分钟就结束了,很少遇到问的十分细,基本按照题库来问打分的,像米哈游,头条,ucloud
就是这样从题库出题,面试时间控制 30~45 分钟,问的长说明面试官对于你某些方面会有疑问和摇摆,问的短就是挂了。
我也尝试过跟一些候选人交流,发现普遍的一个问题就是好多东西明明知道,却表述不清楚,例如webpack
整个打包流程是怎么样的,聊聊闭包,箭头函数,es6
这些基础题,其实这些必问的问题必须提前准备,你需要在面试前提前把语言组织好,而不是问到再去想
面试过程注意点:基础题必须答好,有自己的理解,最好答出亮点和项目中实际使用的地方。项目题场景题和面试官求同存异,不一样的地方也不要过分纠结,不同厂有不同的解决方案。编码题最好说出自己的思路,编码这块我做的比较差,要么就是一次写出来,要么直接说不会。最后面试过程中答题一定要自信,我们写代码的肯定是胆大心细,而不是畏手畏脚。
其他
如果你对后面的工作技术追求较高,在一些问题后面可以反问面试官你们公司针对这个问题是怎么做的。如果你更在意氛围方面,可以问问多久搞一次技术分享。也是旁敲侧击的一种方式。如果你想了解未来同事水平如何,不妨最后问问公司项目如何区分是用vue
还是用react
。如果你更关注要去做什么,建议详细问问公司的业务和经济链路,盈利模式,看看是否有前景。求职也是一个双向选择。
对于我个人来说,虽然快手,头条,pdd
的薪资给的很多,基本就是double
的状态,但是我更看重公司未来的发展方向,最后还是选择了阿里,广大开发也要想清楚未来 3~5 年要做什么,个人是陪伴着业务成长的(是不是有阿里味了)
一些资料:
https://github.com/abc-club/js-paradise/blob/master/INTERVIEW.md
https://github.com/mqyqingfeng/Blog
https://webpack.wuhaolin.cn/ (比我翻文档快多了)
总结
对于我来说
难度上:阿里>快手>pdd>头条
体验上:阿里>快手>pdd=头条
阿里的 hrg 并没有传闻中说的那么可怕,还是非常 nice 的,面试流程一周内也搞完了。
最后祝愿迷茫的前端开发者一路顺风