点击上方“CSDN ”,选择“置顶公众号”
关键时刻,第一时间送达!
在求职的道路上谁都会迷茫、彷徨,但是如何走出来,找到你职业的方向才是关键,本文作者就职于阿里,任前端开发工程师,他从知识储备、面试准备、面试时的随机应变三个方面着手,为准备或即将成为前端工程师的同学们详细讲解了如何拿到互联网巨头的 offer。
0. 说在前面的话
首先我必须要说 chat 的题目取得有点大。但是正如开头所言,这个 chat 是给准备或者即将成为前端工程师的同学们的。
其实,我目前也正处于这个阶段,所以我希望能与大家共勉。在本场 chat 中,我可能更多的分享的是关于自己在求职过程中的一些经历和想法。
希望能给大家带来一点帮助。下面进入正题:
1. 一个合格的前端开发需要那些知识储备?
1.1 前端专业技能储备
其实专业技能的储备是比较抽象的,因为大多数专业都不会有前端相关的课程。
因此,前端开发工程师一般都是自学成才,那么是否就意味着前端工程师就不需要关注自己的硬技能呢?其实不是。
前端开发工程师牵涉的知识范围是非常广的,特别是随着 Nodejs 的出现,使得 JavaScript 开发者面临着前所未有的知识荒原等待着我们去开阔。
下面我列举一些在前端工程师面试中遇到的专业技能问题。而这些问题是作为前端开发工程师必须去深入学习的问题,就像英语学习中的单词记忆一样重要。下面列举我认为比较重要的知识点:
JavaScript 相关
原型链与作用域
闭包
模块化(amd/cmd/umd/ES6 module)
跨域多种方式,如 jsonp
JavaScript 中的 this 指向问题
CORS
AJAX 的几种状态,ajax与fetch,hijax
iframe 与 onload 阻塞主页面
前端安全与 CSRF,XSS,SQL注入,DDOS
JS 异步加载
IE 内存泄露
JS 创建对象的几种方式
JS 继承的几种方式与优缺点
SEO
ES6 新特性
promise 与 generator
服务器推
jQuery 相关
js 捕获与冒泡
drag 和 drop 实现拖拽
cookie/session/本地存储
雅虎网站优化的军规
CSS 与 JS 的阻塞加载
Chrome / IE 浏览器事件兼容
CSS 相关
垂直水平居中
盒模型
浮动与定位
排版引擎与 JS 引擎
GPU 加速与动画性能
DOM1,DOM2,DOM3 规范
CSS 性能
h 标签与 title 标签
em 与百分比等
浏览器缓存与应用缓存
div 与 table 布局
Web 标准
CSS 的 hack 技术
png/jpg/webp 图片格式
canvas 与 svg
CSS3 的新特性,如 flex 布局等
响应式布局
link 与 import 区别
三栏自适应
b 和 strong,i 和 em 区别
减少页面回流
BFC
硬件加速与动画优化
前端自动化相关
webpack 相关
webpack-dev-server 相关
单页面打包工具+多页面打包工具
babel 相关
其他知识
http/1.1 与 http2
http 三次握手协议
http 状态码
JSON 与 XML
前端性能优化
nodejs/npm 相关内容
算法
几种排序算法
回文字符
递归(很重要)
其他常见的前端算法
上面牵涉到的任何一部分内容都应该要能够融汇贯通。很多人都强烈反对刷题,其实我认为刷题本身没有什么坏处,只要你能真正的将这部分知识弄懂,那么也是一个好的学习方式。
比如上面我说的一个点,如硬件加速。那么很多人就会想到:
能够开启 GPU 加速,那么你对于 GPU 加速又了解多少?Webkit的网页分层了解吗?你知道将动画放到一个独立的图层中能够减少页面的回流吗?你知道软件加速和硬件加速区别吗?
我以前也尝试了解了这部分的内容,后面发现当你越深入了解,你感觉自己会的东西越少,但是当你真正从头到尾去仔细学习了的时候,你会发现你真的是在成长。
这样,当面试官问到这部分内容的时候,你也能够信手拈来。如果你想要深入了解硬件加速和软件加速,你可以仔细学习一下这部分内容,当然也包括动画性能优化。
我想,当你能将硬件加速在面试中表达这么多的时候,任何一个面试官都会对你产生兴趣。
又比如这几年比较火的打包技术 webpack,你可能知道它能够解决模块化开发的问题,它相对于 gulp/grunt 等有诸多优点。
但是你依然需要深入的了解它,比如: webpack 的 loader 与 plugin 的区别,webpack 的 tree-shaking 技术,webpack 集成 webpack-dev-server ,webpack 的 HMR 等等。
通过上面两个例子,我是想要告诉你:任何一个前端技术,你都要学会问为什么?只有你学会问为什么才说明你在思考。
这是刷题与学习的最重要的区别,所以我觉得,如果是抱着学习的态度去刷题本身就无可厚非,因为它能让你快速积累相关的知识,有问题的地方才能孕育知识。
1.2 沟通交流能力
这一部分内容往往来自于hr,他们是一群很敏感的群体。他们一般都不会问你技术问题,你需要告诉他,你很喜欢这个公司,你很看重这个机会,如果你过来了你会怎么怎么样。
我记得阿里HR当时还问了我这样一个问题:“你为什么选择做前端?你觉得前端和后端主要区别是什么?”
当然,这都是很开放性的问题,任何人都会有不同的回答,你只需要正确的表达你的观点,但是切记不要极端。
因为,谁也不想和一个思想很极端的人一起工作!我下面讲述一下我面试的几家公司HR阶段都问了什么问题:
阿里巴巴
拿到阿里的 offer 道路是比较坎坷的。实习阶段经过了三轮面试,虽然都是电话面试,但是感觉还是挺难的。
经过我上面说的那种刷题方式,技术上的问题基本都能够回答上来,当然这也可能是因为公司本身对于应届生的要求比较简单而已,或者说我具备了一定的面试技巧。
当然,后面又经过了实习生转正的3轮面试,包括技术面试和HR面试,不过这个阶段一般都是由于部门HC的限制,所以很多实习生都没有能够留下来,所以我算幸运的一批。
当时HR问过我几个问题,比如:你为什么选择前端?你觉得你最大的缺点是什么?对于未来你有什么规划?这些问题其实在网上都能看到,但是很多人可能回答的并不怎么好,最后结局往往很悲剧。
所以在面试前,你一定要想好这几个问题,如果是电话面试最好能够写下来。而如果是现场面试,那一定也要能很快的说出来,并且有条理,同时也不要给别人一种感觉你是在背题目。
这点很重要,因为别人在考察你的沟通能力,而不是你的记忆能力。
美团
美团的面试算法居多,当时技术上主要写了几个递归算法,这里就不再多说。
可能是因为在前面三轮面试中我表述了自己在实习阶段的一些不如意,所以 HR 阶段主要 focus 在这个方面。
比如:如果你的上一家公司和我们同时给了你 offer,那么你会选择谁,为什么?你实习是在杭州,我们的 base 地点主要在北京和上海,你有没有考虑?这一类的问题,我的回答都是没关系,会考虑这一类的。
当然,这一点有点违心,但是至少能够让HR看到你对他们公司感兴趣,你是带着真诚来的,而不是来玩玩。
况且招聘的过程就是双向的,所以你很难保证别人是否会给你机会,那么你当然应该去争取,而不用主动断了自己的路。
当然,到了HR阶段,如果你没有说什么不能说的,或者特别让别人认为你不适应这个岗位的,那么一般都是没有问题的。
最后,美团也如我预期的给了我 offer,而且是第一个 offer,虽然最后没去。
网易游戏
网易的校招面试难点在于笔试,这一点我已经领教过了,我加上在实习阶段的经历,在网易笔试上挂了3次。
最后一次我是跑去北京霸笔的,因为我实习回来的时候已经错过了网易的校招,所有就只赶上了网易游戏的单独招聘。
最后,做了笔试题,比较崩溃,感觉自己应该是没有机会了。最后游戏部分的 HR 姐姐告诉我,系统又开放了,我可以到校招系统中再次录入我的信息,这一点真的感谢网易游戏的 HR 姐姐。
网易游戏前端候选人团队当时给我惊呆了,几乎都是985类的研究生,而且一般都是拿着 BAT 等级别的前端 offer 来的。
不过,留下来的也少得可怜。到了HR阶段,也没有问我什么过多的问题,就和我聊了聊在杭州实习的经历。
当然,还有就是谈工资了,那么是第一次谈工资,最后结果比较被动。
其实,我觉得在HR阶段说明你在技术上已经得到认可了,至少能达到你面试的公司的基准线了。
但是在面试之前,你最好要想清楚几个问题:你为什么要来这个公司?你觉得你能给公司带来什么?你觉得你还有那些地方不足,需要改进?
等等诸如此类,而不要不做任何准备,那么HR姐姐肯定会给你一惊的。
2. 面试前你应该做怎样的准备?
2.1 学习式的刷题
说实话,在面试前我一直都在”刷题”。因为面试就短短的几十分钟,除了保持知识的广度,你也需要保证知识的熟悉程度,所以那段时间我一直都在反复的复习我上面提到的这些知识点。
几乎你只要问其中的任何一个问题,我都能立马回答出来。
当然,每天如果仅仅做这些,你会感到很烦,所以那段时间我也会学习一些新的东西,写一些小项目托管到 GitHub 上,频繁更新自己的博客,甚至有时候一天更新了好几篇(看 jQuery 源码的时候)。
所以你可以去我的博客看看那段时候我都写了些什么。这里我需要强调下,博客和 GitHub 是面试官比较看重的点。
记得当时收到新浪的一个面试邀约就是因为我的博客,当时面试官说,看你博客中有写 Node 内容的,是否有兴趣参加新浪的面试。
当然,最后因为工作地点的原因放弃了。但是我想说的是,保持记录知识和问题的习惯是自我提升一个重要的方面。当时,我们一起找前端职位的小伙伴,几乎每人都有一个自己的博客。
我们回到刷题的问题上来。请记住,刷题的初衷应该是为了扩宽自己知识的深度,深度的学习才能让你成长,而不是总是走马观花。当时和我一起面试阿里的还有好几个同学,但是最终都没能通过。
其实,我觉得他们的问题主要是太关注自己知识的广度,而忽略了知识的深度。
比如,同一个问题,我可能会说出 A+B+C+D,但是他们却只能说出 A+B,而且A+B往往都是网上现成的答案。
能参加这场 chat,我需要告诉你,如果你想要进BAT等大型互联网公司,千万别只关注知识的广度而忽略了深度。
特别是对于前端的开发职位来说,CSS+JS+Nodejs+打包工具等等内容,常常会让你眼花缭乱,但是一定别忘了深度问题。
2.2 简历猜题
我参加阿里面试之前没有任何实习经历,唯一有的就是自己做过一个小项目,包括前端和后端都是我写的。
其实,它本身都算不上一个项目,就是为了面试搞的(其实并不全是),当时好几个同学也开发了一个类似的网站,目的就是为了能让面试官在简历里面找问题。
简历里面找问题很容易,但是在简历里面自己找问题也很容易,你可以参考上面第一部分提到的基础知识,然后揣测面试官会问那些问题。
最后你会发现,面试官问的问题要么就是上面你准备的基础知识,要么就是你已经在简历中揣测出来的问题。大多数情况下都是如此。
2.3 反客为主
我经历的每一场面试最后都会有这个问题:你还有什么问题吗?其实每次面试之前我都会想好我需要问什么,有些问题来自于本身的思考,有些问题来自于上一次面试和其他公司的比较等等诸如此类。
还有就是,在每一轮面试的时候,如果面试官在表述的时候我都会记录下来他的主要内容,然后想好那些地方我需要进一步深入了解的。所以在这个阶段我往往会有很多话说,或者说有很多问题要问。
比如我上次到了网易游戏的第三轮技术面试的时候问了面试官一个问题:上次网易邮箱出了一次用户信息泄露的问题,这个问题会和前端有关系吗?
网易前端在安全方面是否做了处理,比如 CSRF,XSS,SQL 注入等等。
所以,在这个阶段,我觉得有问题问说明在整个面试的过程中你在思考。我是鼓励在这个阶段提出你自己的问题的。
3. 面试时候如何做到随机应变?
其实要做到随机应变不容易,但是也不困难。我的自信来自于我上面说的”学习式的刷题”,当然我这里说的刷题不是那种纯粹的刷题本身,这部分内容我上面已经详细说过了。
除了刷题能够做到随机应变以外,还有就是上面说的猜题,这种出于简历本身内容的猜题也是提高你面试自信的重要维度。
最后一个方面就是引导,你除了要知道面试官的问题以外,你还要告诉面试官你会什么。而你会什么的回答来自于你对面试官的引导。
比如,你对webpack很熟悉,那么你在面试中应该刻意的表现出来,而面试官一般都是很敏感的,所以如果引导得当将会是一个很好的表现机会。
还有一点就是,面试官一般也会去考察你知识的深度,你告诉他你对 webpack 很熟悉,那么他出于这个目的也会对这部分内容进行进一步的考察吧。
4. 心态
心态是最重要的一个环节。当时校招季很多同学由于压力过大,最后都病倒了,跑去医院打点滴。还有些同学,在经历一次面试失败的打击后就不想复习了,就觉得没有机会了。
不管是那种情况,我觉得都不是一个好的求职态度。因为,校招季的机会很多,错过了,并不是说完全没有机会了,况且很多公司最后还有春招等。
所以说,态度本身就是最重要的,如果你病倒了或者采取消极怠工的态度,那么最后你往往失去的会更多。
5. 推荐的博客或者文章
下面我主要列举出来我在校招阶段准备的面试题,很多题目来源于网络,还有一部分来自于自己的总结。
希望通过这些内容对你深入的了解前端,或者拿到顶级互联网公司的 offer 提供帮助。
那些年我准备的前端面试题: ( http://blog.csdn.net/liangklfang/article/details/52142679 )
前端面试题集锦: ( http://hawx1993.github.io/Front-end-Interview-Questions/#/ )
前端常见面试题总结: ( https://github.com/search?utf8=%E2%9C%93&q=%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%A2%98&type= )
前端面试题总结: ( https://github.com/Wscats/Good-text-Share )
————— END —————
207 台服务器被种植木马,谁害死了“旧”乐视?
如果你来开发一个微信,技术难度高不高?
一文快速掌握前端开发必备技能