# 面试总结

前段时间按照规划找了一个月的工作,受疫情影响,本该金三银四的黄金季很多公司都受到了影响,很多公司都在裁员缩编,所以找工作相比于往年会困难一些。但是个人觉得其实还好,整体过程还算比较顺利,最终也斩获了一些 offer,积累下来一些经验,在此总结一下。

目前绝大部分的面试都采用线上面试的方式,有利有弊,可以在自己的主场面试我觉得还挺好的,至少不用四处奔波,但是会缺少一种直接跟面试官面对面沟通的感觉。大部分会通过牛客或者其他的一些网站进行 coding 的考察,这里一定要注意的是,千万不要认为是远程面试就可以随意将页面切出去查东西,其实面试官那边是可以看到你的状态的。下面就简单总结一下最近这一个多月的时间所积累下来的一些面试经验吧。

# 一面

一面我觉得应该是最重要也是最难的一个了,这里主要考察的都是一些基础的东西,但是如果答得不够好,就会给面试官留下基础不扎实的印象,所以基础这一块一定要搞的牢牢地。

# CSS

现在对 CSS 的考察占比不是很多了,但是也基本都要考察一两道题,所以这一块还是不要放掉,如果这里没有答好那基本就 GG 了。

  1. flex,绝大部分都会考的,经常问的有flex:1代表了什么,因为本身 flex 是一个复合属性,所以会考察这一点,再有就是会问水平垂直居中需要设置什么属性等等,flex 布局这里一定要弄熟。
  2. float/position 布局,会考察一些基础的东西,包括定位的属性等等。可能会配合着一些实际场景问应用
  3. css 选择器都有哪些,权重是什么样的
  4. 伪类和伪元素
  5. BFC,这个经常考,如何形成 BFC,BFC 是什么,有什么特点
  6. 画三角形,画扇形等等,像滴滴出了一道用一个元素画滴滴的 logo,其实主要考察的是 border-radius 和::before

# js 基础

  1. 原型链,会让你解释一下什么是原型链
  2. 闭包,解释闭包
  3. 继承,说一说继承的方式
  4. this,关于 this 这块,一般会出一个题,让你去判断最后都输出了什么,一定要搞清楚 this 指向的是谁,一般这种题还整的挺花里胡哨的
  5. 渲染流程,这个放在 js 基础不知道合不合适,但是渲染流程这个经常考。要详细的讲清楚渲染流水线的整个流程,最好能带上一些进程、线程的切换过程。其中的某些环节要能展开说,比如完美世界就问了 html 解析成 dom 树的具体过程。这部分经常问的还有重排重绘,包括如何避免等问题。再有的话如果答的比较全还会顺带着问问分层的一些东西,比如什么属性会造成分层。
  6. script 标签中 defer 和 async 有什么区别,这个考过两次
  7. ascii 码和 utf-8 的区别这个也考过几次
  8. 隐式转换有的时候也会经常考,虽然这个东西很无聊,但是真的会考

# es6

  1. var,let,const 有什么区别,这道题经常会考,说出块级作用域和暂时性死区只是一方面,要往深了聊,聊到他们的存储位置,聊变量空间,词法空间,以及整个查找变量的过程,有的时候会顺便考一下垃圾回收
  2. promise 也是个高频题,首先会让你简单介绍一下 promise 的一些基本属性和用法,然后有的时候会出一个题让你去写输出顺序,就是宏任务微任务那种,然后就该拓展了,聊一下事件循环、宏任务微任务,然后就顺便聊到 async await,这里可以稍微拓展一下讲,比如 async 其实就是 promise 和 generator 的语法糖,然后就可以顺便讲一讲 generator,然后就可以到协程,整体往下一捋。接着面试官可能会让你手写个 promise.all 或者 promise.race 之类的,这个一定要熟练。
  3. 箭头函数,也是一个经常会考的东西,会让你聊一聊很普通函数有什么区别,要聊深一点,可以自己查一查
  4. generator这一块也要好好准备一下,包括手写一个迭代器,手写生成器,能连带着 for of 和 for in 一起,但是这个考的确实不太多

# 网络

网络这块应该说是必考的一个大部分,可以结合着url 从输入到输出都经历了什么这个题来自己捋顺整个过程。

  1. 都有什么状态码,2xx,3xx,4xx,5xx 都要搞明白大概都是什么
  2. 状态码只是个起点,绝大部分会继续往下探究301,302,304,比如会问永久重定向和临时重定向有什么区别;304 这个是必考的!缓存一定要好好准备,强缓存、协商缓存,这个几乎都考了,一定要整的很细,比如要说到 etag 是 hash 串,而 last-modify 是服务器操作的最后的时间等等,尽量详尽,网上有很多这方面的资料。
  3. 顺带的有时候会问一下请求头响应头都有哪些举例
  4. http1.1 和 http2 的区别,这块也经常会考,有的时候会单独考,反正这两个各自的东西都要捋明白,要讲的有条理、详尽,有机会甚至可以聊一聊 http3
  5. tcp 和 udp 的区别,顺着 http 有的时候会问到 tcp,这里一般不会问的太深,但是也不一定,也遇到几家问的比较深的,比如好未来、完美世界等,会问到慢启动的过程、拥塞窗口、滑动窗口等等,可以了解一下。
  6. https 和 http 的关系,这里其实主要就是要考察对安全握手这块过程的掌握,要讲出 SSL 握手的完整过程,包括什么时候是对称加密,什么时候是非对称加密,还可以顺便聊一下数字证书的一些东西
  7. 讲到 https 就会顺带着问一下安全相关的东西,比如你都知道哪些攻击,比如 XSS,CSRF,中间人攻击等等,要讲清楚是怎样进行攻击的,以及一些基本的防范方法。
  8. 跨域,解决跨域的一些方法,经常考

# 框架

框架这部分一面的时候会考一些,不多。我这边主要用的是 react,这里就以 react 为例,vue 也差不多。在一面中,像头条、美团这些都没有问过关于框架相关的东西,主要还是集中在基础知识的考察,像 360、阿里、跟谁学、易车等等还是会问到一些,这里就先不讲了,主要放在二面部分去写。

# 算法

这个绕不开的,基本上多多少少都会考一些,但是大部分还是以数组类型的题目多一些,很多都不是特别难,当然在头条和微软的时候被给了明白 T T

算法这块主要是得靠平时的一个积累过程,没事多刷刷 leetcode,按照一定的规划去进行。

常考的比如手写实现一个 flat 函数;实现一个柯里化;两个数字数组合并成一个升序数组等等。

二叉树会考到,但是真的很少,我只在微软和头条见到了

动态规划考的也不多,大概占到 30%左右吧

还是要靠平时多练多积累,这是个慢活

# 二面

二面主要考察的还是技术,但是跟一面不同的是,大部分的会依据你的简历来进行相关知识点的考察。

# 性能优化

性能优化绕不开的,每一家都会问的问题。有的时候会在一面就问,这个看公司,比如像头条、美团这种,一面就很中规中矩,会完全按照面试官设计好的一些基础题来考察,而有些公司就不按套路出牌,在一面的时候就结合简历来问。

性能优化这块,要结合雅虎军规,从网络、渲染流程、代码优化、框架使用等环节去叙述,最好能拿出一些自己做过的实际的例子,有数据支撑最好,可以结合 performance,通过不同阶段的时间来进行佐证。具体的还是要靠个人的平时积累。

# webpack

webpack 这块,在一面也可能会问,但确实不多,大部分会在二面问到。

  1. loader 和 plugin 有什么区别,分别是什么
  2. webpack 原理
  3. 有没有写过 loader 或者插件
  4. 都用过哪些插件
  5. 对于 webpack 优化都做过哪些

# 框架(react)

大部分的框架原理都会在二面去问,有的真的问的很深,建议把官网重新撸一遍,收益良多。

  1. 讲一讲 react 的生命周期,这个考的最多,如果能结合上 15 版本和 16 版本做比较去讲最好,会问到为什么会去除了三个生命周期,他们分别是做什么的,有的时候会细扣某个生命周期的作用,比如在蚂蚁金服的时候,老姐就跟我死磕了一波 static getDerivedStateFromProps(props, state)

  2. 父传子,子传父,因为 react 是单向数据流的,所以有的时候会考察一些基本的用法

  3. setState 是同步还是异步,这个问题经常会考,很经典,结合着源码去一波骚操作就能把面试官收服

  4. 什么是 fiber,这个也经常会考,自行查资料吧

  5. diff,这个就不用说了,不光要整明白简单的原理,要能把整个 diff 的过程简单叙述出来

  6. hooks,讲到 react 新特性,hooks 这块跑不了。会问到 hooks 是为了解决什么问题。useEffect、useMemo、useCallback 的区别一定要分清。还有的时候会问在使用 hooks 的时候都遇到了哪些坑。再有的话,会问到为什么 hooks 要采用数组的方式,这些都要捋明白。

  7. react 和 vue 个有什么特点,这个也经常会问到,会顺便问你单向数据流有什么好处和缺点。

  8. 除了 react 还会问到 redux,但是这块问的不太多,主要还是问 redux 的一些思想,为什么要设计成函数式的形式等等

  9. react-router 这块也经常会考到,会问到原理,包括 hash 和 history 两种模式的不同。

  10. immutability 在快手的时候考到了

# node

node 这一块因为我做的不多,所以问到的也不多,包括 koa 的原理,这块经常会问,因为本身源码也不多,主要要把中间件那块的原理搞清楚,能叙述清楚。

再有的话因为我这边用到了 SSR,所以会问一些 SSR 相关的东西,也不多。

再比如 buffer 相关的东西,这块我了解的不多,所以也就没再往深问

# 说一个你做过最厉害或者最有挑战的项目

这个必问。自己一定要准备好,每个环节都要整好,不要弄假,因为真的会问的很细,包括每一步都做了什么,要有条理,包括一些自己的思考。

# 微前端

其实这个看个人,在美团、滴滴和阿里的时候都问到了,这块主要就是一些拓展的东西,看你对一些新东西有没有了解,以及了解到什么程度,包括怎么探索的过程。

# 三面

三面其实主要考察的就是一些综合素质了,对于纯技术的考察并不多,因为三面一般都是大老板了,他们可能对前端了解的并不多,但是并不妨碍从其他方面虐你 - -

有的三面面试官很懂前端这块,会继续问技术,甚至会问的更深,比如在面老虎金融的时候,老哥真的一路问 react,问的贼深的那种

大部分的三面 boss 对业务比较感兴趣,会考察你对业务的理解程度,比如顺丰、滴滴、阿里等等,因为前面已经对基础的技术有了很全面的考察,所以三面的时候主要看你在平时写代码的时候是只关注了自己的代码部分,还是说对于业务有很深的理解。所以还是要把自己做过的东西好好整理,要了解自己所做的事情是在做什么的,这点很看重

再有的话三面还有一个很重要的考察点,解决问题的能力,已经整个人是否有逻辑性。逻辑性这个很重要,在表述的过程中就能考察到。有的时候会预设一些场景,让你去解决问题,比如在面阿里云的时候,让我叙述怎样在团队中推广持续集成(我之前的公司没有持续集成),在整个过程中要逻辑清晰,中间也会问一些问题,可以参考 STAR 原则

为什么从上家公司离开,这个问题分布在一二三 hr 面中,几乎都会问到,回答这个问题,千万千万千万不能表述出对原公司的不满,包括觉得原来的平台不满足自身成长之类的,可以说自己渴望到更大的平台去发展,可以讲讲自己未来三到五年的一个规划发展等等。

总之,三面主要还是对综合素质的考察,要有逻辑、爱思考问题,不要给自己设置边界。

# hr 面

终于熬到了 hr 面,这块其实也有一些坑。

就是之前说的为什么离职,这块要自己捋顺,不该说的话别乱说。

再有就是薪资的博弈了,他们会想着法的往下压你的,这个跑不了,具体怎么博弈就得看自己了 ┓( ´∀` )┏

整体来说 hr 面还是相对轻松的,但是别说飘了,自己编好。

# 总结

整体来说,面试套路都差不多,可以先面一些中小型的公司热热身找找感觉,没做好准备真的别碰大厂,一点整不利索可能就凉凉。

大部分的面试还是很规矩的,一面基础、二面原理、三面综合,当然也有一些个例,像阿里,其实个人感觉不难,可能也是没面到难的部门 ┓( ´∀` )┏,阿里正式一面之前会有个简历面,按着你的简历先把你撸一遍,然后再一面。在蚂蚁金服的一面的时候确实是很规矩的问了预设的一些基础题,但是转到阿里云的时候,就没再问基础,直接各种考察解决问题的能力,二面其实也没考察太多东西,考了个 url 输入到页面显示的过程,大部分时间都在介绍去他们那的好处,三面之前又考察了一下 coding,二分法、深拷贝、两个数组排序,整体不难,三面就是考察业务理解,逻辑思维等等,但是流程确实太慢了,实在是等不及 offer 了。

年后差不多面了一个多月,大大小小的公司面了几十家,总结了上面这些东西,可能也不太全,但是主要的东西其实就那些,一定要有自己的知识网络,问到一个问题立马就能想到很多东西,这样才能把握整体面试节奏,嗯,就到这吧。