前言
笔者坐标北京,目前总共9年的工作经验,在去年的时候由于各方面原因选择了裸辞,然后就开始着手于简历的修改,投递,以及面试,但是呢,并不是很顺利,还好最后找到了,目前在一家游戏公司做前端架构,下面就把我的面试一些经历做个分享。
面试准备
一般最好的话,是在跳槽之前就可以开始着手准备了,多刷面试题,以及力扣,性能优化以及设计模式,也是必须要看的东西。
还有一些最最最常考的东西,比方说原型,原型链,Event Loop ,微任务宏任务,this 指向,闭包防抖节流,垃圾回收机制,深浅拷贝,JSON.parse(JSON.stringify()) 实现深拷贝存在的缺陷,如何自己实现一个深拷贝的方法,Promise的特性以及 Promise 的新特性,比如 race,all 等。
包括响应式的具体实现原理,数组的常用哪些方法,关于 v2 数组和对象响应式的缺陷,如何解决,v2 和 v3的区别,v3到底快在哪里,为什么能快,webpack打包的优化,原理,为什么需要 webpack ,以及 vite 和 webpack 究竟有哪些区别, vite 为什么能快那么多,什么是树摇。
包括行业中相对较新点的概念,例如PWA,微前端等,都要有所了解,得知道具体是能干嘛,需求背景是什么,都有哪些实现方式等。
这些都是面试题所必须做的准备,在于常考的面试题,你得自己先准备好,回答的好,自然有底气可以要的高,这些都是面试之前,你对于自己专业知识的补充。
关于简历
简历的话,就是你个人的明信片,如果觉得自己颜值还可以,可以去花钱拍个证件照,因为,如果技术实力差不多的情况下,面试官也肯定会选择一个面相看起来更顺眼的,虽然我们敲代码和颜值没有半毛钱的关系。
关于简历的大致板块,我是那么推荐的,上面就是基本的个人信息,人名,联系方式,意向岗位,再附上自己的证件照,千万不要写自己的期望薪资。
然后是个人优势,比方说学历比较好可以提及学历,或者你的个人的博客有很多点赞,亦或者是个人开源项目有很多star,(如果是单纯有,那还不如不提),或者你在上家公司中获得的荣誉或者绩效很高,或者是你项目的日活用户量多大,亦或者是你有项目管理的经验(可以分为项目上的管理,把控进度,人员工作内容安排,或者是技术上的,整个系统的架构,然后公共组件库的搭建以及文档的书写),亦或者是读过哪些源码或者是设计模式。
然后,就是个人技术栈的罗列,让面试官更清晰的知道,你具有哪些技能,当然要注意一点,不要把自己不是很了解的技术写上熟悉或者精通,写个了解即可,即使面试官问了答不出,也不至于很尴尬。
接下来,就是工作经历以及项目经历了,尤其是项目经历,可以自己整理下,自己的简历容易被问哪些问题,提前准备下。比方说项目的背景,具体为了解决哪些问题,以及具体怎么实现的,期间遇到了哪些问题,是如何排查问题以及最终解决的,你在这个项目中担任了什么样的角色等。
关于投递思路
找工作之前,你得先想明白一点,你具体想做什么样的公司,具体想做什么样的工作。找工作得具有目标性。
主要就是技术栈,还有工作内容,比方说,你只会 Vue ,如果是React的工作,我可能就不会考虑了。在招聘的标签中,有React,我可能就会直接提前pass掉了,因为我觉得实际工作中,只要把一个学的很通透就可以了。当然,如果你希望能多学,跨越技术栈也不是不可以,都是看个人的想法。
工作内容的话,就是你更偏向的开发类型,比方说是 erp 或者是电商是偏向效果展示或者企业官网,直播,游戏开发等。
当然,投递的顺序,也最好先从小公司开始投起,毕竟,长时间不面试的话,得先练练手,找找感觉,直接投递心仪的公司,容易直接芭比Q,而且,大公司可能会有简历池,当你没过,或者是印象很差之后,你的简历就已经被拉黑了,以后投递多少次都是直接屏蔽的。
关于面试
首先,面试需要调整自己的心态,并不是说所有问的,你都要答出来,你首先要放轻松。你要了解面试的本质,它其实就是在简短的时间内,将你的知识传递给面试官,我个人还是比较喜欢面试的感觉的,我会把它当做是一场技术的聊天。
当面试官问你问题的时候,其实就是它想知道你关于这方面的知识,一般新手很容易犯的一个问题就是,一问一答,面试官问什么,你就说什么。说完就放空了,现场一度沉寂。
正确的做法是,你要学会答出问题的同时,引申出一些别的更深层次的东西。当然,引的方向你也要学会自己把控,不要把方向往自己不会的地方引,那你无疑是给自己挖坑。
那么,到底如何避免一问一答的机器人回答呢,举个例子:
深浅拷贝
首先从基本数据类型到堆栈内存,再到如何实现深浅拷贝,再到JSON.parse(JSON.stringify()) 所带来的弊端,再到如何自己实现深拷贝。
数据响应式
从 v2 的 Object.defineProperty,再到数组和对象的循环绑定 Object.defineProperty ,再到 Vue 无法检测实例被创建时不存在于 data 中的 属性,以及无法监测到直接通过数组下标修改带来的响应式问题,包括,它是如何通过重写数组的七大方法 (push,pop,shift,unshift,sort,splice,reverse),来让它实现响应式的,然后,再到当不发生响应式更新时,通过 $set 以及 $forceUpdate 来解决,以及 $set 为什么相比于 $forceUpdate 性能更好,再可以往下深入的话,就是发布、订阅者模式(Dep和Watcher),再可以到数据的响应式如何影响到视图的响应式,那就是模板语法。
Event Loop
可以从 JS 的单线程,为什么是单线程,再到同步任务和异步任务,再到微任务宏任务,再到视图渲染更新,再到重绘和重排,再到浏览器的渲染机制,以及$nextTick()。
当然,这些都是抛砖引玉,当你懂得越多,你就越发现,所有的知识都能串联在一起,在面试官抛出一个问题之后,你可以自己延伸出很多问题,当然,只要不是往自己不会的地方延伸就行,那我只能说,马里奥(挖坑管道工)nb 。
当然,你也要学会察言观色,因为,有些面试官其实自己面试都没什么准备,是想到什么问题,有些面试官可能听你延伸听的津津有味,心想的是真轻松,都不需要自己问问题,但有些面试官是提前准备好了要问哪些问题,并且,可能面试的人比较多,当听的皱眉头,觉得你有点啰嗦,答非所问的时候,建议不需要回答的那么完整,不然可能会引起他的反感。
关于薪资
还是重申一下,千万不要在简历上写期望薪资,等于直接给自己自由门堵上了。
一般面试之前,都会让你填写表,这就是期望薪资的第一道门,可以写的比较宽泛,同样不要给自己限定死,在面试完了之后,你就应该对公司,以及面试官(同事以及领导,毕竟都是两三面起底的),包括公司的技术栈,主要项目都有个大致印象了,如果你觉得这家公司一般,不太想去,放心大胆的期望薪资再提一提就行(反正都不是那么心仪了,可以探一探上限,如果真能给,也不亏)。
如果是比较心仪的公司,可以适当降低一些,毕竟,工作的舒服,可比每个月多点钱,更让我觉得值得。
心灵鸡汤
其次,也不需要那么地在意是否回答的出来,只要聊的开心,让面试官觉得,如果能和你一起工作,是一件令人愉快的事情,那我觉得就已经很不错了。毕竟,面试官也仅仅是寻找一个一起工作的工作伙伴而已。
当然,也有那种故意刁难人的面试官,这种,也无需挂在心上,本身问题的就很刁钻,你回答不出来也不要紧,反正,就算进去了,面试都这样子了,真一起工作,还不得把你卷死,这种进不去也没事,进不去也是血赚,省的进去之后头裂开。
无论如何,要把控好自己的心态,还有一点就是,要学会复盘,在面试完之后,记录下自己还有哪些不会的,然后,复盘学习下,下次再被问到,刚好就会了。
当然,也可以弄个excel记录下,笔者就写了个excel记录了下自己的面试记录,比如日期,然后哪家公司,要的多少薪资,然后备注可以写面试之后的感受,比如说面试官人怎么样,对于公司的印象等。看看自己究竟面多少家才能找到自己心仪的工作。
关于问面试官的问题
- 公司所有项目使用的技术栈(毕竟如果老项目技术不一致,还让你维护,直接头裂开)
- 公司新开项目会使用的技术栈
- 关于公司是否有组件库,代码规范程度,前后端如何约定文档等(无文档的组件库等于天书)
关于问 HR 的问题
- 关于五险一金的比例
- 关于试用期的时长和薪资折扣
- 加班是否有加班工资或者调休
- 关于每年涨薪还有职级提升的制度
- 关于福利待遇的情况:比方说餐补、房补、交通补、节假日福利等
当然,如果是比较心仪的公司,我觉得没必要问那么多。