年中佛系求职记录
我从事的是前端岗位,四月中旬时投过一波,很多都是找朋友或老同事内推,但都没响应,连面试机会都没有,只得作罢。
一直到五月底开始,陆陆续续开始有人来找我投简历,我在 boss 直聘和拉勾上公开了部分工作和项目信息后,找我的人也变多了。
我投了几家大厂或上规模的公司,都需要好几轮,基本都是电话或视频面试,只去了两个现场。面的内容可以分为两大块:技术和项目,这些年一直专注于前端基础知识的积累(前端躬行记系列),而忽视了项目的沉淀以及团队的建设。并且由于求职的岗位都是资深或高级前端,因此相对的要求也比较高(除了技术要扎实之外,还需要时刻关注着前沿技术,并且还得是个业务专家,能为公司作出额外的贡献),使得这么多次面试都不太理想。不过,从这几次的面试中,得到的收获也不少,既然认清了当前形势,就得适当的调整一下今后的工作重点。
目前来看求职的时候公司会看年龄、毕业院校和大厂经验,年轻名校有大厂经验的人机会会多一点。3 ~ 5 年工作经验的人特别吃香,非常建议早做职业规划,在毕业后开始几年先沉淀一下,然后去大厂历练历练,对以后的职业发展会有很大帮助。
自己为了能更好的应对面试,也整理了一套面试资料,希望对大家会有所帮助。
一、技术
1)基础要扎实
对于基础知识,得脱口而口,信手捏来。这次面的内容涉及 CSS 的比较少,JavaScript 和网络问的比较多,性能优化是必问的,还有时髦的 ES6 、React (我平时的项目都是用React写的)也是出现的比较多,数据结构和简单的算法也需要好好准备准备。
除了常规的问答之外,还需要手写代码。上机测试或者现场笔试,非常建议大家平时纯手写,不要借助 IDE 的自动提示。目前来看,很多公司都会出个几道笔试题,试试求职者的编程能力。题目的话都不会很难,有空的话可以去刷刷牛客网或力扣,保持手感。简单的算法可以练练,像快速排序、递归等,数据结构中的链表、二叉树平时都可以复习一下,只靠面试前的突击很容易忘记。我这次算法没有准备的很好,遇到一道很简单的背包问题,没有答出来,可惜了。
2)视野要宽阔
不要局限于自己眼前的一亩三分地,在平时就要有意识的拓宽自己的技术视野。例如现在非常流行小程序,那么你是否对小程序的原理有所了解。还比如很多公司都在实现同构,那么你是否自己操作过。还有微前端地目的是否有过了解,市面上给出的方案是否做过对比。时刻关注前沿技术,紧跟时代潮流,这也算是前端的一个特色吧。前端技术日新月异,没过多少天,就会冒出新思想新技术。
3)理解要深度
不要只停留在表层,适当地去深究一下你所看到的技术。例如你说跨域用的方案是CORS,那么它的跨域原理是怎么样的?如果要传递Cookie,那么前后端要如何配置?什么情况下,会发出两次请求?等等。当抛出一个技术点时,可以深挖到很多知识点。平时开发中,多问自己几个为什么?或许就能注意到自己的盲点。面试官会根据你的简历,找一个技术点去慢慢的渗透,看你理解到什么程度。有次面试还被问到,你最擅长的技能点是什么?平时真的可以往某个点做些深入研究。
4)团队的建设
除了完成自己手头工作之外,你为团队还带来了哪些贡献或变化?例如为新人提供技术思路,封装通用组件为成员使用,又或者制定自动化工作流改善工作效率等。多为团队着想,就能发现很多问题,试着解决这些问题,提升自己的同时也为团队带来便利。
5)思路要多样
面试中会遇到许多场景题,然后让你给出解决方案,大部分都是你没遇到过的,而你的回答当然是方案越多越好。这时候就得用自己过往的经验以及大胆的创新来给出技术思路。例如如何在一个域名中登录,而在另一个域名中直接是登录状态。再比如当重写XMLHttpRequest后,如果遇到第三方库也重写了它,碰到问题该如何排查?
其实平时上班的时候多向自己问几个为什么,时间长了,自己的思路也能更加开阔。还有就是平时项目中遇到的难点,自己也需要有意识的记录下来,试着多搞出些方案来。
二、项目
在考察项目时,经常会问你遇到的比较困难的项目是什么?
我自认为项目中的难点就是解决从未遇到过的问题。但说着说着自己会感觉好像也没那么难,就是有点烦。大部分人所做的业务都不会很难,那么就自己给自己加点难度。例如我平时会做广告落地页,就是个表单填线索,加个图片滑动,商品介绍,商业视频等部分。很普通很平凡,但是如果做成一个可拖拽的可视化编辑器,那么就会很有搞头,不仅能大大提升工作效率(甚至可以让非技术人员自行搭建页面),并且涉及到的技术点会很多,将碰到许许多多、形形色色的各类问题。这个时候就可以和面试官侃侃而谈了。要做成这种程度,需要大把时间的沉淀,非一朝一夕可成,所以建议大家早做打算。
再比如我在简历中提到自己设计过一个性能监控系统,有次面试正好碰到一个做过多年监控系统的面试官。由于我这系统还未正式上线,很多点还未考虑到,并且还仅仅是个雏形,很不完善,面试官问到的许多问题我也答不上来,即使回答了,也感觉给出的解释非常的苍白无力。例如通过你这系统解决过哪些业务瓶颈?你的系统架构是怎么样的?一个月后你预估数据库的存储量将是多少?你在选择的服务器配置是怎么样的?非常建议大家平时在公司推动一些本职工作以外的项目,当然这些项目对业务是有益的,其实就是为自己增值,在上线后记录遇到的问题以及带来的贡献。
三、面试题目
1)企鹅杏仁
第一轮 电话面试
在开始的时候,问了点项目问题,让我挑几个有挑战的说。剩下的就都是在问题基础,下面只列出了想到的几个问题。
(1)网络:描述TCP三次握手,四次挥手,HTTP2.0的优势,HTTP协议的特点。
(2)数据结构:链表和数组的区别,栈和队列的特点。
(3)简单算法:在两个数组中找到相同的元素,在数字数组中找出最大值。
第二轮 技术面试
下午三点的面试,提早到了,整层楼都是该公司的,不过工位有点小。
先做一份笔试试卷,四道题目,三十分钟。其实四道题目可以在一张纸里打印,不过用了两张纸,第一张纸翻过来还有一道题目,被我漏掉了。
题目做好后在一个会议室里等了四十分钟,才等到一个前端小姐姐。主要问了些比较基础的问题,集中在:
(1)白屏处理、懒加载的实现等性能问题。
(2)Hooks的使用等React语法问题。
(3)Webpack使用了哪些加载器等工程化问题。
(4)CDN的原理等网络问题。
(5)KOA有哪些中间件等Node.js问题。
面好后等了十几分钟,技术leader来面我,他问:
(1)在实现一个微信聊天功能的时候会用到哪些技术。
(2)你对目前前端现状的看法。
(3)你未来两年的职业规划是怎样的。
(4)小程序在微信中是如何执行的。
(5)如何通过微信公众号获取用户信息。
(6)JavaScript的缓存有哪些(cookie、LocalStorage等)。
(7)如何做到在两个域名中保持登录状态,例如在淘宝登录的帐号,当从淘宝页面进入天猫时不需要重新登录。
(8)你与其他人相比,有哪些优势。
(9)对微前端的理解。
(10)两个数字变量,不使用第三个临时变量,交换两者的值。
(11)你最近在读什么书?
(12)Charles能够解读HTTPS的原理是什么?
再次面完后,HR与我交流,询问了我的期望薪资、居住地、籍贯等问题,最后说如果该轮通过,会在3-5个工作日内安排CTO视频面试。
2)京东
第一轮 电话面试
项目和基础相辅相成,问的问题比较全面。
说说你最近的项目,深入讨论如何封装的组件。在简历中提到了自己设计的一个UI库和插件,就被问到如何使用,扩展,原理等。
基础题包括JavaScript、网络和CSS,下面只列出了想到的几个问题。
(1)JavaScript:闭包,Event Loop。
(2)网络:输入URL发生的过程。
(3)CSS:两栏布局,上下居中。
3)华为
周六下午四点钟左右,华为HR让我投个简历,和我简单介绍了一下华为的4轮面试流程。
第一轮 在线做题
在牛客网上生成的一个考试地址,有三道题,两道一星,一道两星。他们给了一个练习地址,既能熟悉考试环境,也能练练感觉。
在准备的这两天,自己意识到平时得尽量手写方法名称,不要过于依赖自动提示。并且有空的时候就去刷刷难度在中等偏下的编程题,保持手感。
第二轮 技术视频面试
有两个面试官,第一个是当前面试部门的面试官,以项目为主,基础概念问的不多。
(1)在内部做过哪些技术分享。
(2)你觉得组件封装有哪些注意点。
(3)你遇到的比较困难的项目是什么?
(4)你平时会做哪些性能优化?
(5)请叙述一下React的生命周期。
(6)双向绑定的原理。
(7)diffing算法比对过程。
(8)有没有搞过前端架构?初始化项目的那种。
(9)最后一道编程题
第二个是跨部门的面试官,同样以项目为主,基础概念比较少,有几个是给你一个场景,让你来分析,还有一些是比较底层的计算机知识。
(1)介绍一下你的项目经历
(2)Chrome浏览器打开了几个进程。
(3)浏览器性能优化,如果浏览器占了300M内存,该如何优化。
(4)package.json中有哪些常用字段?package.lock.json有什么作用?
(5)你有了解过Nginx吗?
(6)最后一道编程题。
4)喜马拉雅
第一轮 视频面试
使用了腾讯会议,下午两点的面试,天气很阴沉,随时要下阵雨的节奏,但是直到面试结束都没下大雨。视频面试的范围比较广泛,有基础也有实际项目。
(1)用过哪些CSS动画,CSS的定位有哪些?
(2)是否用过React Hooks?函数式编程的理解。
(3)在浏览器输入URL后发生的过程。强缓存和协商缓存。前端状态码301和302。HTTPs为何是安全的?
(4)设计模式实现发布订阅。
(5)你的职业规划是怎么样的。
(6)用Node.js做过些什么?
(7)什么情况下会驱使你去看书?
(8)你做过哪些比较有困难的项目?
(9)你的开发经历跨度很大,为什么现在选择前端?
(10)session和cookie的区别。
(11)谈谈你对XSS和CSRF的理解。
(12)事件委托的原理。
第二轮 现场面试
面试安排在下午,当天是雷暴预警,喜马拉雅的总部还是蛮大的,有两栋楼,楼的外层装修也很喜马拉雅。面试官会从简历中挑出一个技术点,有深度有广度的提问,很容易问到自己的技术盲点。
(1)JSBridge原理。iOS和安卓对JSbridge的处理有哪些不同,为什么使用iframe实现?
(2)CORS原理。跨域的时候带cookie是怎么配置的。有时候跨域请求会发送两次,为什么?
(3)你对哪个技术点比较擅长。
(4)同构的原理是怎么样的。为什么可以做到服务端和客户端只用一套代码就可以了。
(5)SSR有什么特点?
(6)你最近在看什么书?
(7)SVG有哪些特点?和Canvas比有什么区别。
(8)webpack的加载器和插件有什么本质区别?
(9)Promise的原理是怎么样的?
(10)请写一个正则,读取URL中的参数。
(11)你平时是怎么做性能优化的?
(12)宏任务和微任务有哪些?浏览器对它们的处理有何不同?
(13)如何上传大图。
(14)如何在Canvas中画一张第三方域名的图片。
(15)服务端如何将分片的文件组合成一个完整的文件。
(16)React为什么要推广Hooks?
(17)请用两种方式实现前端的路由。
5)饿了么
第一轮 技术基础
当天面完喜马拉雅,饿了么的人找到了我。投过简历后,过了一个小时就打我电话安排面试,正好当天没啥安排,就直接开面了。问的内容还是比较偏基础的,包括一些CSS的解决方案。
(1)rem是如何计算的。
(2)iframe之间是如何通信的。
(3)有一个弹层,如何禁止下层页面的滚动?
(4)如何实现双向绑定。
(5)对ES6的代理有了解吗?
(6)白屏的依据是什么?如何优化?
(7)解释一下Event Loop。宏任务和微任务。
(8)webpack的运行过程是怎么样的。
第二轮 技术项目
交谈了30分钟左右,主要围绕着实际项目展开。
(1)说说你的工作经历。
(2)你最近在了解什么新技术?有没有考虑应用到团队中?
(3)你平时会不会关注自己的业务?有没有想过拓展公司业务?
(4)你们跨域是怎么做的?有没有用网关实现?
(5)你最近有没有遇到比较困难的事情?
(6)你做了这么多年前端,有没有对这个行业提供一些产出?
(7)在团队中,你有没有制订过标准?或者有什么贡献?
(8)你们的代码是如何发布的?具体发布原理有了解过吗?
技术负责人
(1)你为什么选择前端?
(2)你为什么做了5年后端后才选择前端?
(3)你们团队几个人?你为团队做过哪些贡献?
(4)你最拿的出手的项目是什么?
(5)如果你还在这家公司呆着,你接下来会做什么?
(6)你期望要加入的团队是怎么样的?
(7)你做的性能监控系统与业界的相比,有什么特点或优势?
(8)你有什么优势?
(9)你简历中完成了100多个项目,这个数字很醒目,你想说明什么?
第三轮 跨部门
跨部门遇到的面试官是专门搞监控系统的,他在看了我的简历后,着重对简历上的性能监控系统开展了提问,下面只列出了几个。
(1)你做过的比较困难的项目有哪些?
(2)你的性能监控系统的架构是怎么样的?
(3)你目前负责哪些业务?
(4)你有没有计算过一个月后,你的MongoDB的存储量是多少?
(5)在重写XMLHttpRequest后,如果遇到第三方库也重写了它,碰到问题该如何排查?
(6)如何通过你的性能系统,来找出业务瓶颈?
(7)是否考虑过监控多端,例如浏览器、小程序、客户端等。