进大厂要做哪些准备(已拿offer)| 掘金技术征文

2,898 阅读13分钟

最近换工作,大大小小面试了不少公司,其中包括京东,高德,滴滴,美团,小米,腾讯,完美世界,爱奇艺等知名公司,已经拿到合适的offer。

本文主要从简历,前端基础技术知识,项目,团队选择几个方面,来梳理找工作时我们需要做的准备和注意事项。

一 简历

简历是敲门砖,一定要认真准备,甚至逐字推敲。很不建议其他部分准备差不多了,然后花个2小时把简历写完了。写简历,一定是个不断思考自己做了什么,有哪些优势,包括自己需要准备哪些面试点,包括自我介绍时要突出什么,这些很多都是要基于简历去展开的,而且要在这个思考的过程中再不断的完善简历。甚至在面试后,也要根据面试官的反馈不断的更新简历。

关于简历,我个人认为需要做到以下原则:

第一,尽可能的突出自己的优势

一定要让人一眼就能从简历中看出你的优势所在,比如你在一家公司做了很突出的贡献,那一定要写在简历最显眼的位置,用颜色加深也不为过。如果你是学历特别好,那么教育经历一定要放在第一页。一个岗位可能会接收到几百份简历,只有你能在那短短几秒内吸引住对方,才能有面试的机会。
除了突出优势以外,对于自己不擅长的点,尽可能不在简历中出现,因为只要你简历中出现的,就极有可能会被问到,到时候如果了解的很少,会有减分。

第二,简

之前看过有人写简历写了6-7页纸的,很可能这么多页的简历中,会有亮点,但是难道要指望对方从这么多页的简历中去提炼出你的优势所在吗?!
简历一定不能写成流水账,技术同学的简历一般不建议超过3页,主要包括个人信息(联系方式,学历等),专业技能,工作经历,项目经验等几个部分,要尽可能用最简的语言描述自己所做的事情,能用一个字说清楚,就不要用两个字。简历不是写小说,不是讲故事,尽量不要出现第一人称。

下面举一个例子说明一下:

像上面这段简历,可以直接删掉了,自我评价不是不可以写,但是一定要言之有物,且一定要和工作有密切的关系,比如能够承受工作压力,那可以写个具体的案例,比如擅于学习,那么可以写自己的产出,比如开源项目,技术博客等。

下面再看另一个例子:
这是一位同学在介绍在一家公司所负责的事情时是这么写的

罗列了5条工做内容,但是这几条工作内容,完全体现不出来他做出了哪些成绩,尤其像第4条和第6条,这就是每个工程师工作中都会做的事情,这种根本不需要写在简历上,只要你做的是前端,就一定在做这些。另外像具体使用的技术栈最好在项目经验模块中去着重描述,不然两个地方都写就是重复的。

所以这里需要写的就只剩下两点:

  1. 负责页面的代码重构与优化
  2. 分析软件开发工程中的问题与解决

第三,描述自己做到了什么,而不是做了什么

还是继续上面的例子,简历中只描述了自己做了什么,而并没有说明自己做到了什么。

比如说 负责页面的代码重构与优化,那么这里应该体现的是都做了什么优化,优化和重构带来了什么好处,如果是带来了性能的提升,那么提升的数据是怎么样的,最好能用数据来说话。另外,如果做了重构,那么为什么重构,以及重构会带来什么好处,是如何衡量是否要进行重构的,这些都要做到心中有数。

再说一下另一点 分析软件开发工程中的问题与解决,同样,要说明解决了什么问题,通过什么手段解决的,带来了什么样的效果,比如设计了一个编写接口文档的工具,使接口能够保证符合现有规范,减少了前后端沟通成本,有效的提升了接口质量,整体效率提升了20%。

最后,简历中尽量避免低级错误,如技术栈的英文单词错误,出现错别字,格式最好尽量PDF格式。

二. 基础知识准备

基础知识准备的怎么样,直接决定能否顺利通过技术一轮和二轮面试,一般技术面试的一二轮会围绕着一些前端基础来进行。
这部分主要包括的有这样几个方向:

1. HTML和CSS相关

这部分考察的一般都是十分基础,但是又容易被忽视的。
这里简单罗列下常见的考点

1. 实现水平垂直居中布局
2. BFC特性,如何创建BFC,BFC应用场景
3. flex布局有哪些特性
4. 伪类和伪元素区别,分别有哪些
5. css权重
6. position的属性及区别
7. 如何实现GPU加速,及其原理

2. JS基础

这部分一般考察会比较多,需要多花些时间去梳理。主要涉及的点有:

1. 类型相关(原始类型有哪些,怎么区分类型,有哪些区别,包装类型,类型转换,== vs ===,深浅拷贝)
2. this指向问题(包括call,apply,bind)
3. 事件循环
4. 模块化 (AMD, CMD,CommonJS,ES Module,webpack)
5. 异步相关(callback,Promise,Generator,async await)
6. ES6新增的语法和原理
7. 原型链和继承,作用域链及闭包
8. DOM,事件流,事件代理相关

3. 网络知识

这部分是很多前端工程师所欠缺的,但是面试中也会经常问到。主要涉及的点有:

1. 网络分层结构及各层功能
2. http协议的发展历程
3. http2.0的优点(多路复用,头部压缩,服务端推送),每个特点都需要详细了解,最好清楚原理,对比之前的优势
4. TCP三次握手和四次挥手(清楚过程,并知道为什么是3次和4次)
5. https相关 (握手过程,优点,中间人攻击)
6. http缓存策略

这部分可以参考我之前整理的 2020年大厂面试指南-网络篇

4. 性能相关

性能优化是非常高频的问题,也有很多优化方案,这里不止要知道怎么进行优化,还要了解其原理。

1. 性能指标有哪些,怎么获取
2. 性能优化方案有哪些
可以从减少资源体积和减少请求次数两个方向展开,另外可以考虑升级http协议版本,使用异步加载非核心资源或使用预加载。  

其中减少资源体积可以通过gzip压缩,对图片进行压缩,使用webp图片格式,优化编译后代码体积等方式展开。   

减少请求次数,可以通过DNS预解析,浏览器缓存,CDN等方式展开。  

5. 框架相关

关于框架部分,需要准备自己常用框架的一些基础知识,进阶用法,框架底层实现原理。 以Vue为例,需要准备:

1. 组件通信相关
2. 生命周期相关问题
3. 常用属性和指令的作用及对比
4. 底层原理分析
5. Vue-Router和VueX相关使用和原理

Vue技术栈的同学可以参考我之前整理的 2020年大厂面试指南 - Vue篇

6. 浏览器相关

浏览器相关的知识,也是常考点之一,需要了解的知识有:

1. 浏览器的线程和进程,有哪些引擎
2. 浏览器渲染过程,包括回流和重绘相关知识
3. 浏览器的缓存机制,涉及缓存读取机制,强缓存和协商缓存
4. 浏览器的同源策略及跨域相关知识
5. 浏览器输入url到页面展示都发生了什么

这部分可以参考我之前整理的 2020年大厂面试指南 - 浏览器篇

7. 工程相关

这部分主要涉及到代码构建,项目部署相关的知识。

1. webpack相关
a. webpack的原理  
b. 常用plugin和loader,如何编写一个plugin或loader  
c. webpack做过哪些优化  
2. babel的原理及其配置
3. 前后端分离的优缺点
4. 如何实现代码的自动化部署
5. sourcemap的原理是什么
6. npm install 是怎么工作的
7. 如何做异常监控
8. 抓包工具的实现原理是什么

8. 前端安全

1. 什么是xss及如何防止xss
2. 什么是csrf,如何防止csrf
3. css会存在安全问题吗?怎么攻击的
4. 什么是枚举攻击,如何防止
5. 什么是中间人攻击,如何防止

9. 数据结构和算法

大厂会注重数据结构和算法的考察,对于常见数据结构的特性一定要了然于心,这是解决算法问题的基础。

关于算法部分推荐阅读《剑指 offer》,详细理解书里面的题目,应对大部分前端的算法面试就能游刃有余了。
leetcode中《剑指 offer》刷题地址: leetcode

三. 项目复盘

很多人在准备面试时,可能会花大量的时间去准备上面说的基础技术知识,但是却忽略了对做过的项目或者技术方案的复盘。这点是非常非常重要的,一般到了技术面的二轮或三轮,很可能大部分时间都是围绕着项目进行的,这部分准备可以从以下这些问题入手。

1. 你在这个项目中承担了什么样的角色
2. 这个项目的背景是什么,如果是技术项目,为什么要做
3. 有哪些技术难点,是怎么解决的,是否还有更好的方案
4. 你认为项目中是否有可以改进的点
5. 这个项目解决了什么问题,最好用数据说话,这个数据又是怎么得出来的

提前想好上面这些问题,在面对项目相关问题时,就能做到心中有谱。除此之外,项目中涉及到的技术栈和技术难点等一定要提前做好准备,一定要保证简历上写过的东西一定要准备好,这也是上文为什么说要先写好简历,再一边准备一边完善简历的原因。

四. 团队选择

在找工作之前,我们就应该想好要去一个什么样的团队,想要在下份工作中获得什么样的成长,想要在下份工作中承担什么样的角色,包括想得到什么样的薪资以及能接受什么样的工作强度。这些都提前想好,在面临选择时,才能做出正确的判断。这也就要求我们要先对自己有一个认知,有一个相对明确的目标,知道自己欠缺的是什么,知道自己下一步想朝哪个方向去努力。有句话说的是,方向不对,努力白费,说的正是这个道理。

事实上,很多人对自己下一步计划,以及一个中长期的目标都是不够明确的,这时候,可以求助身边比自己level高的人,多听听他们的意见和想法。有时目标不清晰,并不一定是你没有目标意识,而是认知不够,不清楚自己后续能做什么,要达到目标需要怎么一步一步的制定计划。这时就更需要去请教更多的人,分析他们给的建议或经验,来帮助自己确定下一步的方向。

关于offer选择上,如果拿到了你有意向公司的offer,可以加上你面试官的微信,和他们了解公司以及团队的情况,看看和自己是否匹配。另外也可以联系你未来的leader,了解你后续会做的项目,以及看看和leader之间是否match。还可以通过询问猎头,目标公司内的其他人(通过脉脉,或者朋友等),了解团队,业务,leader的一些情况,来帮助我们做出选择。在这一步上多花费些时间是十分值得的,因为这决定了你之后几年的工作,会有怎样的成长,以及会不会做的开心。

五. 面试总结和复盘

面试的最最重要的当然是找到一份适合自己的工作。但是除此之后,我们还可以有意识的取收货一些额外的东西。

1. 发现自己不足

通过面试,很容易发现自己的技术上的不足,这就需要我们积极复盘,记录下自己不足的地方。

如果发现自己在某个方向上的不足,这很有利于我们制定后续的短期学习计划。另外,面试过程中,也可能会触碰到自己的知识盲区,积极复盘整理,能够帮助我们更好的去完善我们的知识体系。

2. 明确自己的目标

在面试大厂时,尤其到了后面的面试,都是一些有很丰富经验的大佬。我们可以和他们去沟通自己的目标和未来计划,听听他们的意见,这样可以让我们对目标和达到目标的路径更加清晰。

3. 了解其他团队在做的事情

借助面试的机会,了解其他团队都在做什么事情,这会给自己一些启发。也可以把自己在工作中遇到的问题提出来,了解一下其他团队是怎么解决的。这样做,首先可以解决自己的一些困惑,其次,会产生一些创新灵感,可以在下一份工作中进行实践。


更多面试文章,请关注我的公众号【前端小苑】。另外欢迎加我个人微信 yu_shihu_,拉你进群交流。