likes
comments
collection
share

深圳求职半个月,前端自救指南

作者站长头像
站长
· 阅读数 25

前言

先介绍一下个人情况,方便给正在求职的朋友一个参考:本人是19年非计算机专业某末端二本毕业,今年8月31日从北京的一家国企离职,回去家里休息思考了一个月,调整身体的同时整理一下面试问题,国庆结束之后来了深圳。落地宝安之后,又复习了一周。

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

我简历主要写到了vue、微信公众号、微信小程序、node.js(主要是egg.js和koa.js)、webpack和团队管理的经验。我对react的使用比较少,所以react问的比较深的岗位我都没有投递。

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

市场环境

还在北京的时候,只是听同事说了一下外面的情况很糟糕,如果考虑换工作的话建议三思后行,一定要想清楚了再决定是不是要行动。我感觉这样的建议从小学到大学,身边的老师、父母都劝你要走最安全的路,不要冒险。

直到我打开了脉脉。

深圳求职半个月,前端自救指南

深圳求职半个月,前端自救指南

深圳求职半个月,前端自救指南

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

从脉脉上面反馈的话题都很让人绝望,仿佛每个人在脉脉上过的都很惨。每天刷出来的话题都跟职场末日一样。

于是,我选择性的忽视了脉脉话题的讨论。专注于自己当下的问题,直面最现实的问题,并解决问题。

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

面试官的体验

因为我在上一家公司担任的是技术负责人的身份,所以在8月初跟上级领导提出离职的申请之后,就开始帮公司招人了。所以我也能从面试官的视角给求职者提供一些有利的信息,进而促成面试的成功。

1、投递有可能没有回应

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

8月12日,公司人事上午刚把前端的岗位发布出去,仅仅经过了2个小时,我就收到了人事发给我的50份简历。然后我从这50份简历里面选出了12份作为候选人,接着人事给候选人打电话,7位候选人接通了电话,并预约了面试时间。

下午人事又筛选了60份简历给我,我从这些简历里面筛选出了8位候选人,人事打电话,6位接通了电话。这样下周就有了14位候选人进行面试,我也跟人事说暂时先不接收简历了,当前的面试结束之后,再开放招聘岗位吧。

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

上午我刚拿到简历的时候看的很仔细,每一份简历都很认真的去看,甚至会看一下他的项目介绍。但是当我上午看完了50份简历,我觉得很多简历都长得差不多,千篇一律的感觉。

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

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

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

但如果投递时间是在周五的下午,必须要技术栈匹配,项目相对复杂,简历写的能一眼抓住我的眼球,才有可能获得邀约。

但如果投递时间不是这周五的话,我其实是看不到你投递的简历的。因为在我说下周之内都不需要给我推简历之后,人事很大概率还是会把这个职位挂着,那样不知情的面试者仍然会继续投递,但事实上面试官已经触达不到他们了。

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

所以正在求职的朋友也不要灰心,把时间线拉长来看这个事情,好事多磨。

2、简历是门面

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

所以这个门面特别重要。

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

然后技术栈尽量简短概括,陈述你大概能做哪些事情。我在招聘求职者的时候首要看这一项,技术栈不精练的可能就直接跳过了。像jquery、bootstrap、elementui这些比较老的库,或者说一些ui库尽量都不要写上去,看上去显得重复累赘,没有突出重点。

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

我想人事大概也是不想徒增麻烦吧,直接按照流程走总不会出错,也能理解。但是站在专科的求职者角度,技能到了但是因为学历原因,也就缺少了一个机会,还是有点遗憾的。

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

3、自我介绍很重要

面试的第一步首先是自我介绍,我认为这个是非常重要的一步。其实面试官在拿到求职者简历的时候,可能也没有很认真的阅读。所以面试官让你进行自我介绍,一方面是留给自己时间让面试官有的一个看你简历重点的缓冲时间,另一方面也希望你说点跟简历上不一样的东西,然后从自我介绍中找到话题,向求职者提问。

在我的面试体验下来,我觉得会让我比较舒服的自我介绍时间是2-2.5分钟。一方面过于简短的自我介绍会让我感觉到面试者对项目或者对自己的认识不够深入,或者自我介绍就是简历中已经写过问题的重述,这些都是不好的。

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

当然我其实在面试时已经会建立一个准备提问的题库。即使面试者没有项目亮点,我也能就根据我在开发中遇到的问题或者一些基本面试题进行发问。

但面试本身也有一种情绪的感觉存在,尽可能的体现自己的加分项、专业度能让面试官觉得你很靠谱、值得推荐。同时也能增加好感度。

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

她的介绍大概在3分钟左右,整个介绍说的比较有条理、有逻辑性,在我看完她的简历之后,已经能够之后想要问她项目中的哪些问题了,她还给了我半分多钟的缓冲时间,我对她的专业度的好感度就增加了;即使她后面vue的一些原理说的很磕磕巴巴,但最后因为第一印象,我还是推荐了她。

面试中整理的面试题

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

一、某地产方案商的面试

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

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

双休在知乎上搜了一下这家公司,网上风评说该公司pua太严重、领导搞小团体,技术栈也不是我熟悉的,给的薪资不高,就拒绝接下来的面试了。

二、某医疗集团的面试

1、笔试
1、宏任务和微任务输出执行问题,打印结果?
2this指向的问题,打印结果?
3、computed和watch的使用有什么区别?
4、react和vue有什么区别?
5、你认为好的团队协作方式应该怎样的?
6、你做过哪些项目上的性能优化?
2、一面
1、简单介绍一下你自己
2、你项目中说自己整理了文档规范、代码规范、项目规范,你说下都做了哪些具体的事情?
3、你说在项目各阶段都做了问题的汇总,举例一个你印象最深的问题和解决方案?
4、发布上线时间平均由10分钟提高到1分钟,你前后做了哪些优化达到这个目标的?
5、服务端异常这个问题你是怎么捕捉的?
6、webpack的构建流程是怎样的?
7、webpack做过哪些优化?
8、es module和babel分别有什么作用?
9、es module的执行逻辑是怎样的?
10、你是如何理解单文件组件的?
11、编译template之后最终会生成什么,过程是怎样的?
12、vue3在模板方面做了哪些优化?
13、说一下响应式原理?
14、你在响应式中说到diff算法,那diff算法的目的是什么?
15、为什么要引入$set和$delete这两个api?
16、你怎么理解异步更新机制的?
17、如果我在computed中依赖的data变化,但是返回值没有变化,这个computed会更新吗?
18、说一下v-for中key的作用,key值用了下标会存在什么问题?
19、说一下作用域的理解?
20、说一下原型和原型链?
21、说一下如果让你去封装一下extends函数,你会考虑怎么封装?
22、说一下this的指向有哪些?
23、闭包有什么特别,解决什么问题?
24、call、apply的封装应该怎么处理?
3、二面
1、你说一下这个错误监控上报功能是怎么做的?
2、你作为负责人的时候,接手的时候团队有多少人?
3、埋点自己开发的还是第三方的,主要埋哪些数据?
4、你们通过埋点的数据怎么做分析的?
5、你这个发布上线时间平均由10分钟提高到1分钟,做了哪些事情达到这个目标的?
6、你的职业规划是怎样的?
7、你跟你团队的人员是怎么配合的?
8、你大学专业不是计算机,怎么干起了编程呢,说一下过程?
9、你想要怎样的公司氛围?
10、你还有什么想问我的吗?
4、人事面

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

该公司把4轮面试放在了一个下午,直接去了现场面试。因为一轮面试回答的成功率90%以上,跟面试官聊得越来越深入,所以二面的时候基本就问了一些业务和求职意向的问题,也没有给我挖坑。

第二天人事给我回了电话,说了能给到薪资,我回复考虑一下,然后再决定接不接受offer,考虑了2天,接受了这家公司的offer。

三、某基金公司的面试

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工程师吧。然后从团队管理、怎么让新来的成员快速接手项目、文档方便的管理等等;前端技术问题整个面试过程中占比不大。

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

一面就败了的原因,个人认为一方面即使把自己的技术能力提升到很厉害的水平,可能与这个岗位也不符合,这个看运气和面试官的感觉。

另一方面,我觉得有可能招聘单位也没太想清楚要招聘怎样的人吧,因为这些问题放在问java、net工程师上估计也行得通。

四、某电商公司的面试

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__的底层实现,这个问题我不知道,有知道的朋友可以在评论区帮我回复一下,我学习一下这个知识点。

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

最后应该是挂了。

人事面问题汇总

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

人事的这些问题每次都大差不差,这些都问都可以提前自问自答,准备好最好的状态,回复人事。也就是我们常说的:我预判了人事的预判。整理50道左右的面试常问题目,足以应付目前的人事挖坑问题。

接下来的计划

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

深圳很多大公司都是用的react,我之前在项目中用react比较少,所以入职公司之后要把react用起来,不用起来就会忘。

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

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

给大家的一个建议

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

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

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

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

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

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

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

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

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

就是每一个问题的回答都是可以策划出来的,你回答完了这个问题之后,你可以先假设性的想一下面试官看到你的这个回答可能会问你什么。用上面面对人事的那种:用你的预判去预判他可能的提问

这样就可以在这次的大萧条中获得更有利的条件。

我的总结

这一次面试下来,能明显感觉到整个市场的供需关系发生了变化。经过这一轮的洗刷之后,对整个前端求职者的专业度一定是会提升一个台阶的。所以在没找到更好的收入方式之前,刷题刷经验还是要继续做下去。

我前段时间也跟一些工作了5-10年的朋友在聊,发现他们换工作的时候大多数还是基于薪资的求职,战术呢就是全面铺基础知识点和刷题。或许我身边没有P7或者P7+的朋友,想了解一下更高阶的程序员会怎么样为30岁之后做准备呢?

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

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