复盘:前端岗位的寒冬,用这3点进行自救

110,648

本文7230字,浓缩了我去年年底面试中所有的复盘精华,阅读只需5分钟。

前言

先介绍一下个人情况,方便给正在求职的朋友一个参考。

本人是19年非计算机专业某末端二本毕业,去年8月31日从一线的一家国企离职,回去家里休息了一个多月,在国庆结束之后落地到了新的城市,开始了我的前端自救之旅。

10月17日开始投递简历,到10月27日决定停止面试。一共面试了6家公司,最终拿到了2家公司的offer。

我简历主要写到了vue、微信公众号、微信小程序、node.js(主要是egg.js和koa.js)、webpack和团队管理的经验。

我对react的使用比较少,所以react问的比较深的岗位我都没有投递。

经过了半个多月的面试经历,我主要从市场环境、作为面试官的体验、面试题目三部分聊一下我的心得。

为了对前东家和现东家表示尊重,我分别用A市代替上一个城市,C市代替现在的城市,并且把关键信息隐藏。

市场环境

还在A市的时候,只是听同事说了一下外面的情况很糟糕,如果考虑换工作的话建议三思后行,一定要想清楚了再决定是不是要行动。

我这人有点不信邪,因为这样的话我好像都听腻了。

小时候老师这样劝诫我,长大了父母这样叮嘱我,工作了老板这样劝说我。

周围的声音都劝你,要走最安全的路,不要冒险。

直到我打开了脉脉。

image.png

611667203109_.pic.jpg

621667203109_.pic.jpg

为了保护截图楼主的隐私,特意打了马赛克。

从脉脉上面反馈的话题都很让人绝望,仿佛每个人在脉脉上过的都很惨。

每天刷出来的话题都跟职场末日一样。

但是我自己的路还是要自己走的,别人的世界和经历只能作为参考,无法影响我的决定。

于是,我选择性的忽视了脉脉话题的讨论。

专注于自己当下的问题,直面最现实的问题,并解决这些问题。

这里有一点建议需要给到仍在空窗期的朋友:如果此时正处于职场求职的阶段,应该尽可能的忽略会给你产生自我怀疑或者负能量的东西,这些东西的一点点腐蚀你的心智,磨灭你的念想,进而影响你对当下正确的判断

面试官的体验

我在上一家公司担任的是技术负责人的身份,所以在去年8月初跟上级领导提出离职的申请之后,就开始帮公司招人了。

所以我也能从面试官的视角给求职者提供一些有利的信息,进而促成面试的成功。

主要从下面3点展开来说一下吧。

1、投递有可能没有回应

给大家分享一个简历投递的小故事。

8月12日,公司人事上午刚把前端的岗位发布出去,仅仅经过了2个小时,我就收到了人事发给我的50份简历。

然后我从这50份简历里面选出了12份作为候选人,接着人事给候选人打电话,7位候选人接通了电话,并预约了面试时间。

下午人事又筛选了60份简历给我,我从这些简历里面筛选出了8位候选人,人事打电话,6位接通了电话。

这样下周就有了14位候选人进行面试,我也跟人事说暂时先不接收简历了,当前的面试结束之后,再开放招聘岗位吧。

同时说一下我的心理状态吧。

上午我刚拿到简历的时候看的很仔细,每一份简历都很认真的去看,甚至会看一下他的项目介绍。

但是当我上午看完了50份简历,我觉得很多简历很雷同,长得都差不多,千篇一律的感觉。

下午又收到了60份简历,这个时候我基本看麻了,如果技术栈方面不匹配(比如我们项目要求的是vue,但是以前的项目都是react,这样的简历我就直接跳过了),基本就不会预约面试了。

所以说,招聘的时机是有很大的偶然性的。

如果你的投递时间正好是8月12号的上午,并且是在我看简历的前1个小时,只要能满足干活的能力,大概率都有面试邀约。

但如果投递时间是在8月12号的下午,必须要技术栈强匹配,项目相对复杂,简历写精炼简洁,能一眼抓住我的眼球,才能获得邀约。

另一方面来看,

如果投递时间不是8月12号这一天的话,我其实是看不到你投递的简历的。

因为在我说下周之内都不需要给我推简历之后,人事很大概率会把这个职位挂着。

但是面试者是不了解我这边的情况,看到岗位还在招聘,就会继续投递简历。但真实的情况是:我已经触达不到他们了,简历投进来基本石沉大海。

这样有一些朋友在投递过程中遇到的很多公司人事没有回馈,很大可能是遇到了上述我说的情况:简历都在排着队,触达不到面试官。

所以正在求职的朋友也不要灰心,把时间线拉长来看这个事情。公司跟个人之间是双向选择的,好事多磨,最终都能获得自己想要的。

2、简历是门面

简历是作为公司能够在没有见到真人情况下,对你能力最直接的预判,然后决定是否需要把你列入候选人名单的重要条件。

所以这个门面特别重要。

首先是基本信息一定要清晰。

姓名、年龄、性别、工作年限、手机号、邮箱、学历跟求职地点一定要写清楚,这些算是必填项了。

然后技术栈尽量简短概括,陈述你大概能做哪些事情。

我在招聘求职者的时候首要看这一项,技术栈不精练的可能就直接跳过了。

像jquery、bootstrap这些比较老的库,或者说类似elementui等ui库尽量都不要写上去,看上去显得重复累赘,没有突出重点。

还有学历方面,上家公司的招聘学历是硬性要求的。

我也看到有技术能力完全能胜任的的两个面试者,就因为学历问题被卡了。问了人事学历能不能放宽一点,她说是硬性规定,不能放开。

我想人事大概也是不想徒增麻烦吧,直接按照流程走总不会出错,也能理解。

但是站在专科的求职者角度,技能到了但是因为学历原因,也就缺少了一个机会,还是有点遗憾的。

但是对于卡学历的求职者,我也显得有心无力,帮不上忙。

3、自我介绍很重要

面试的第一步首先是自我介绍,我认为这个是非常重要的一步。

其实面试官在拿到求职者简历的时候,可能也没有很认真的阅读。

所以面试官让你进行自我介绍,一方面是留给自己时间让面试官有的一个看你简历重点的缓冲时间,另一方面也希望你说点跟简历上不一样的东西,然后从自我介绍中找到话题,向求职者提问。

在我的面试体验下来,我觉得会让我比较舒服的自我介绍时间是2分钟左右。

一方面过于简短的自我介绍会让我感觉到面试者对项目或者对自己的认识不够深入,或者自我介绍就是简历中已经写过问题的重述,都让我感觉准备不充分,有青涩感。

还有过短的自我介绍会让面试官在认真看简历的过程有有一种突然被打断,或者没太想好根据简历中哪一个具体的点进行发问而错失了首次接触的好感度。

当然我其实在面试时已经会建立一个准备提问的题库。

即使面试者没有项目亮点,我也能就根据我在开发中遇到的问题或者一些基本面试题进行发问。

面试本身两个人就像聊天一样,本质上还是人之间情感的交互。

只要有人的地方,就会掺杂个人的情感偏好,相互之间有情绪感情的传递。

提供正向的情绪,尽可能的体现自己的加分项、专业度能让面试官觉得你很靠谱、值得推荐。

同时也能增加面试官对你的好感度。

举个栗子:我在面试中遇到一个女生在自我介绍的时候,她先简要介绍了一下自己常用的技术栈以及对应技术栈的熟悉程度,然后介绍了她上家公司做的项目,分模块的介绍一下自己在这些模块中做的事情以及两个业务线之间的关系。

她的介绍大概在3分钟左右,整个介绍说的比较有条理、有逻辑性,在她做完自我介绍的之后,我基本已经知道从她项目中挖掘哪些问题进行提问了。

全程没有一句废话,这让我对她的专业度的好感就增加了;即使她后面vue的一些原理说的很磕磕巴巴,但最后因为第一印象,我还是推荐了她。

在我面试的所有女生中,提炼中心思想,能有条理且有主次的把自己的擅长的技术和业务说明白的,她是最好的一个。因为我所在的业务生产线需要做一些跨部门沟通,所以能一句话说清楚自己的需要,情商在线的话,能提高整个工作的效率。

面试中整理的面试题

接下来就是在这6家公司面试中遇到的问题了。

一、公司一

1、机试
1、把一个url拆解成origin、文件名、hash拆解成示例的格式。
2、两个数组合并成一个数组,并进行算法优化。
3、设置值的时候是数字,输出的时候变成百分号的格式。
4、首屏优化的方案,分别从代码、网络和缓存说一下。
5、如果一次性增加100万个用户访问项目,前端角度你会怎么优化。
6、分别用es5和es6的方式解决一个继承问题
2、现场面试

第一轮的机试过了,约了下周进行面试。

双休在知乎上搜了一下这家公司,网上风评不太好,技术栈也不是我熟悉的,就拒绝了接下来的面试。

二、公司二

1、一面
1、简单的介绍一下你自己
2、你们这项项目中有微信公众号、后台管理端、医生app端和小程序端,有没有提炼出一些公共的工具js,怎么提炼的?
3、你们的git分支管理是怎么样的?
4、你在做完前端项目之后,一般都会写哪些文档,readme里面写一些什么?
5、你做完一个项目之后写一些什么内容,让接手你的人能够看懂你的项目架构,并且迅速上手?
6、你基于你的脚手架做了哪些优化?
7、你们的项目文档一般都要记录哪些基本的东西?
8、有在项目中遇到过xss攻击吗?
9、你这个错误数据上报了哪些数据,怎么实现的?
10、成功抵御过多次攻击能具体说一说吗?
11、说一下你在项目中遇到印象深刻的项目场景,并且怎么解决的?
12、能说一下session跟jwt的优缺点吗?
13、你说用户登录之后要在session中加入user_name,为什么要增加?
14、jwt的整个流程怎么实现的?
15、实现jwt的实现遇到什么困难了吗?
16、如果同一部手机用户A登录了,更换了B登录,此时使用jwt会出现什么问题?
  - 我觉得这里他给挖坑了,B登录了之后就会返回B用户的token,然后请求头带着的就是B的token,验证到的用户也就是B,我认为没有问题啊。我不太清楚他说的可能会有什么问题值啥情况,可能是我考虑不周全,如果有网友知道可以提醒一下我他想问的答案,让我学习一下。
17、当线上出了紧急bug的时候,你们是怎么处理的?
18、你们团队成员是怎么配合完成任务的?
19、你近2年的职业规划?
20、还有什么想问我的吗?

问的一些问题偏向于后端,面试官大概是java工程师吧。然后从团队管理、怎么让新来的成员快速接手项目、文档方便的管理等等;前端技术问题整个面试过程中占比不大。

看得出来至少要在团队管理方面有比较深的总结,并且对于团队管理积累上,自己有独有的见解,一面才能面试通过。

一面就败了的原因,主要偏向于管理方面的经验,这部分我总结比较少。

另一方面,我觉得有可能招聘单位也没太想清楚要招聘怎样的人吧,时间过去了半年,我今天刷了一下boss直聘,发现这家公司的招聘信息还挂着,人事活跃时间也是几分钟前。

三、公司三

1、一面
1、事件循环的机制了解吗?宏任务和微任务的执行顺序是怎样的?
2、怎么理解闭包这个定义的,在平时工作中有用到闭包的使用吗,举个例子。
3、vue组件间的哪些通信方式?
4、一个父组件潜嵌套了子组件,他的生命周期函数顺序是怎么执行的?
5、vue的权限管理应该怎么做?路由级和按钮级分别怎么处理?
6、说一下你对虚拟DOM的理解
7、了解diff算法吗?vue的diff算法是怎样的一个过程
8、能说一下v-for中key的作用吗?
9、做过vue项目哪些性能方面的优化?
10、vue组件为什么只能有一个根元素?
11、如何实现路由懒加载呢?
12、客户端渲染和服务端渲染有什么区别呢?在之前的工作中有做过服务端渲染吗?
13、Vue长列表的优化方式怎么做?
14、Vue3相比Vue2有哪些优化?
15、为什么在模板中绑定事件的时候要加.native?
16、能说一下响应式原理的过程吗?
17、数组的响应式怎么实现的?
18、Vue是数据改变后页面也会重新改变嘛;this.a = 1; this.a = 2; 他是怎么实现异步更新优化整个渲染过程的?
19、render函数封装有什么特别的,或者用到比较巧妙的东西吗?
20、浏览器缓存的方式有哪些?
21、正向代理和反向代理的区别?
22、域名解析过程是怎样的?
23、TCP协议三次握手、四次挥手的过程,为什么挥手要4次?
2、二面
1、nextTick, setTimeout 以及 setImmediate 三者有什么区别?
2、说一下你在项目的安全性做了哪些工作?
3、当一张表数据量比较多的时候,为了提高查询速度,你们一般会使用哪些方式做优化?
4、webSocket与传统的http相比有什么优势?
5、用过koa吗?简要阐述一下koa的洋葱模型。
6、用过promise吗?它的使用是为了解决一个什么问题?promise底层是怎么设计的?
7、你们现在整个登录鉴权是怎么设计的?如果要考虑单点登录呢,会如何设计?
8、如何用同一套代码部署到服务器中,怎么区分当前本地开发环境还是线上环境?是测试环境还是生产环境呢,怎么去区分?
9、待支付的订单,到期后主动取消这个功能你会怎么设计去做?
10、如果要做音视频的安全性,你能想到哪些方案?
11、多台服务器部署定时任务怎么保证一个任务只会做一遍呢?
12、你觉得程序员除了提升技术能力之外,其他什么能力你比较看重?
3、人事面

人事面遇到的问题都比较类似,我在下面会专门拿一个部分汇总人事面的问题。

该公司最后也拿到了offer。

四、公司四

1、你在项目中用到mongodb吗?
2、在项目中用到mongodb存储哪些数据?
3、mongodb的管道有了解吗?聚合管道怎么用的?
4、mongodb和的mysql优缺点?
5、你对事务性的了解是怎样的?
6、node怎么开启子进程?
7、在一台机器上开启负载均衡的时候,如果这个项目有用到定时任务,你怎么去控制这个定时任务只会执行一次?
8、你在egg中怎么开启子进程,怎么编写一个定时任务?
9、react用的多吗?
10、react组件间通信的方式有哪些?
11、vuex跟redux的区别有哪些?
12、computed和watch的区别?
13、watch和computed哪一个可以实现异步?
14、vue的通信方式有哪些?
15、vue的history模式和hash模式的区别是什么?
16、history模式下会出现404,怎么处理?
17、你能说一下闭包的优缺点吗?
18、内存泄漏和内存溢出有什么区别?
19、还有什么想问我的吗?

该岗位是node全栈工程师的岗位,对后端的知识点问题的比较深,一层一层的往下问,我后端的知识点稍微薄弱一些,很多很细的问题答不上来;他那边技术栈用的是react,我复习的知识也比较少。

扑街了理所当然。

五、公司五

1.1、自我介绍?
1.2、常用的选择器有哪些,优先级怎么样?(除了这些还有其他的嘛)
1.3、垂直居中的实现方案有哪些?
2.1、你说的网格布局grid垂直居中有哪些属性值?
2.2、width:100%和width:auto有什么区别?
3、说一下cookie的作用是什么?
4、cookie有哪些属性?
5、设置cookie的domain用来实现什么功能?
6、懒加载的实现原理是怎样的?(除了你说的那一种还有其他的嘛)
7、vue中路由懒加载怎么实现?(除了你说的这一种还有其他的嘛)
8、说一下原型链的理解?
9、原型链__proto__这个隐式属性的实现原理是怎样的?
10、说一下vue中双向数据绑定?
11、vue中computed和watch的区别是什么?
12、说一下你们的前端登录流程是怎样的?
13、jwt是什么?
14、jwt由哪些部分组成?
15、你在项目中怎么实现打包优化的?
16、你说的这些优化方式是webpack哪个版本的?
17、你说一下项目中比较困难的事情有哪些(BFF处理模式)?
18、你们部署上线是怎么做的?
19、在项目中有使用jekenis和docker这些吗?
20、有什么想问我的吗?

我记得网格布局是有justify-contentalign-items属性,并且面试之后专门写了一个文件测试,测试通过。面试官说我属性记错了。

width:100%width:auto有什么区别?这个问题我没回答出来,最后我问面试官他们的区别是什么。面试结束之后我按照他说的那种方式,也没测试出来区别,很纳闷。

原型链__proto__这个隐式属性的实现原理是怎样的?,我以为这个问题就是让我说一下实例.__proto__指向构造函数的原型,抓住这个点然后扩展一下原型链的知识就好了。他说不是要你回答这个,而是让我说一下__proto__的底层实现,这个问题我不知道,有知道的朋友可以在评论区帮我回复一下,我学习一下这个知识点。

整个面试从面试官的表达上可以看得出来他有一些紧张,导致有一些问题我也听的不是特别清楚。结束之后我测试的几个知识点也没达到他说的效果,遗憾。

最后应该是挂了。

六、公司六

拿到offer,出于公司隐私考虑,不方便透露具体过程。

人事面问题汇总

1、对自己的评价?
2、你有哪些兴趣爱好?
3、描述一下你自己的优缺点?或者用三个词语描述你自己?
4、你在公司主要做一些什么工作?
5、离职原因是什么?
6、在工作之外有哪些学习技术的方式?
7、公司的整个开发流程是怎样的,你跟团队成员如何配合完成任务?
8、你有女(男)朋友了吗(稳定性)?
9、你有其他offer吗(稳定性)?
10、如何提高工作效率? 
11、与领导意见不统一时应该怎么办?
12、你觉得目前自己的技术在什么位置,觉得自己哪一块能力需要加强?
13、您还有什么问题想问我的嘛? 
15、你的职业规划是怎样的? 
16、入职之后如何开展工作? 
17、是否愿意接受加班?
18、你能为公司带来什么?你希望公司给你什么?
19、在项目中遇到了什么难点问题,最后怎么解决的?
20、谈一下你在上一家公司整个技术开发流程,你负责哪些工作?
21、你希望自己以后的发展方向是什么?

知己知彼,从容不迫。

接下来的计划

在这次的面试中,也发现了自己能力的不足。比如我之前通过node写了一些提升团队的工具,用于提升自己在团队中的kpi。但是在纯前端中可能只能作为一家加分项来看,因为如果问到很具体的node的内存问题、mongodb细节的问题,可能就会被问住了,整个面试体验确实会比较糟糕。

C市很多大公司都是用的react,我之前在项目中用react比较少,所以空余时间要把react用起来,不用起来就会忘。

然后vue3的源码和优化的方面也要继续看看了。

还有这一次没有投递大厂的原因是我没有刷算法,这一点在之前的求职过程中都没有重视起来。现在年限到这了,必须要刷起来,才能更进一步提升自己。

给大家的一个建议

我在面试的过程中有一个体会,就是:当面试官问你一个很大的问题的时候,你要怎么回答?

比如面试官问题,简单的跟我说一下继承是什么吧?

很多朋友遇到这样的一个问题,马上就大脑蒙圈了,脑袋里很紊乱,知道很多,但是无法把他们串起来,不知道从何说起,导致回答的结果不是很好。

所以像这些技能题,我们在记笔记的时候也应该用这样的方式去记忆和背诵。遵循下面的几个步骤就行了,套公式的方式,一点也不会慌乱。

1、解释是什么的问题。
2、解释这个技术的应用点、应用场景在哪里。
3、整理一下这个问题的优缺点是什么。

我举一个例子来回答一下。比如面试官问:你给我讲一下闭包吧?

我就可以按照上面的归纳,分3步走的原则。

1. 闭包是:能够访问其他函数内部变量的函数。
2. 闭包一般会在:封装模块的时候,通过函数自执行函数的方式进行实现;或者在模仿块级作用域的时候实现;如:我们常用的库jQuery本身就是一个大的闭包。
3. 闭包的优点是:
    a、能够在离开函数之后继续访问该函数的变量,变量一直保存在内存中。
    b、闭包中的变量是私有的,只有闭包函数才有权限访问它。不会被外面的变量和方法给污染。
闭包的缺点是:
    a、会增加对内存的使用量,影响性能。
    b、不正确的使用闭包会造成内存泄漏。

针对上面闭包的回答,可能面试官又会继续问你:内存泄漏是什么啊,你能给我讲一下吗?垃圾回收机制说一下吧?内存泄漏和内存溢出的区别是什么?等等。

就是你回答完了这个问题之后,你可以先假设性的想一下面试官看到你的这个回答可能会问你什么。然后给自己提问深挖技术深度问题。

当然那不光是面试,自己平时学习深挖知识的时候,也可以用这种办法。

以上这3点,就是我在去年的面试,从自己的真实经历中的总结。

我觉得在求职的时候我遇到的问题,相信很多朋友有类似经历的朋友也会遇到。我就本着造轮子的这个心态,给大家输出一些流程化的经验,希望大家能在本次经济下行,行业萧条的情况下拿到好的结果。

另外,如果你想要更多关于前端方面的成长干货和学习方法与资料,欢迎你关注我这个账号「程序员摩根」,并且私信我。

里面有我最宝贵的私人学习经验,全都毫无保留分享给你,比如优质的前端编程类电子书,前端学习地图,前端入门到精通的学习路径、面试题等。

我的总结

去年10月份之后,整个面试下来,能明显感觉到整个市场的供需关系发生了变化。经过这一轮的洗刷之后,对整个前端求职者的深度、专业度一定会更上一个台阶。

所以在没找到更好的收入方式之前,刷题刷经验,技术上做精做深,这些事情还是需要重复做,认真做。

当然,即使在比较惨烈的市场环境下,我依然认为每个个体都有很大机会的。

我是个乐观主义者,积小胜为大胜。打能胜的仗,才能打胜仗。与各位共勉。

当然,这是我去年10月份的求职情况,今年的情况是否比去年年底还要更惨烈。我没有进入到实际的市场环境中体会。

希望还在求职的朋友们能在底部@我一下,跟大家分享一下目前你所在城市的前端求职现状,大家群策群力,一起商量下应对方法。

欢迎大家在评论区讨论一下。

如果这篇文档对你有帮助,欢迎点赞、关注或者在评论区留言,我会第一时间对你的认可进行回应。精彩内容在后面,防止跑丢,友友们可以先关注我,每一篇文章都能及时通知不会遗失。