原文链接:https://juejin.im/post/5e664bdd6fb9a07cd80f3192

集体近期面试状况

往年二月以来,我的面试除了一个用友的,根本其余都被毙了,能够说是十分残暴的。其中有很多本人感觉还面的不错的岗位,比方百度、跟谁学、好将来等公司。说实话,打击比拟大。

状况基本上是从三月开始好起来的,这个工夫点,可能疫情快过来了,国家也开启了靠近40万亿的根底建设打算,在这个工夫断,面试的几个代表性的公司,包含腾讯、饿了么、宝宝树、旷世科技等等,根本都成了。

最终,就在三月9号,饿了么刚给我确认了p7的职位。也算本人到了另一个奋斗的阶段了。对本人的经验,做一个面试总结。

我的面试筹备

面试其实我是属于一边面试,一边筹备的过程,然而无论如何,肯定要做到根底扎实、比拟好的自我介绍,以及形容本人的职业故事。

1、基础知识的筹备

这一块,其实很重要,很多问题,必须轻松的了解,就和呼吸一样天然。

因为这一块的把握水平,就决定了一个前端工程师,能不能达到高级的水平。

抛砖引玉,比方面向对象、原型链、闭包、es6、html5、css3,它们是前端的根底,须要烂熟于心。比方连闭包都解释不明确的,真的该好好下功夫在这些根底上。。

对于前端框架,根本的个性,生命周期、组件、传值交互、路由、redux、vuex等等,根本都没有应用上的纳闷。比方面试官可能问,actions 和 mutations 有什么区别之类的。

这一块,能问的问题简直是无穷多的,哪怕同一个知识点,问法不一样,不真正了解的话,切实是过不去高级那一关。

2、好的自我介绍

自我介绍,很多人其实做的不好,其实这是面试官对面试者的第一印象。

如果我是一个面试官,我根本能从自我介绍中,得悉这么一些信息:

1、这个人是不是一个逻辑清晰的人?

2、这个人的性情是积极向上的,还是稍显自大的?

3、这个人能不能很好的表白自我?

这些问题很重要,依照这个思路,其实你反过来就能够向面试官体现自我。

1、学校、业余

2、技术栈

3、职业履历

4、最近一家公司的奉献

千万不要和面试官说,和产品、后盾很好的配合,实现公司的我的项目之类。因为齐全是废话!

自我介绍个别是两分钟左右,你确定你能两分钟,把下面四个问题给面试官讲清楚?并且你还要突出一些重点,比如说,我比拟善于react,做过XXX优化之类,有过XX年的我的项目教训之类。

自我介绍的实质:用最短的话,向面试官灌输你的长处,并且让面试官在以后大抵的范畴内考查你。如果你说你相熟vue,个别面试官都会问vue相干的多一点,应该不会和你死磕react。

3、如何“讲故事”

这是一个比拟重要的点。重要的是,这个故事要有看点,示意了你和其他人不一样在哪。

比方我,我会说,我之前在公司,做了咱们前端的我的项目标准化工作,做了咱们外部的组件库建设,集成了咱们本人的脚手架工具。

这是我感觉,我和其余大多数前端不一样的点,面试官的焦点就会集中在,什么是我的项目标准化,定义了哪些维度的规范?组件库的建设,解决了什么问题?脚手架的呈现,又解决了什么问题?

任何一个人,都是惟一的,任何一个我的项目,也是不同的,作为面试者的咱们,重要的是,要把这些重点因素提取进去,造成本人的“故事”。

比方,我独立承当了公司的xxx我的项目。遇到了哪些挑战,我如何在不利的条件下成长起来的。

比方,我通过xxx渠道,钻研了多少个我的项目的架构工作。

肯定要置信,因为你,什么才产生了变动。其实大多数人是一个被动的状态,不晓得本人有什么用,本人在团队中的定位,本人的职责是什么。在工作中,我心愿每个人置信本人的是有用的,而后寻找你能够发力的点,去做真正的扭转。如果你在找工作,那就好好思考,本人的确在团队中,承当了什么。

面试该留神的点

面试的外围是什么?肯定要记住,那就是沟通!而咱们做技术的,其实最大的硬伤,多半是沟通,至多对于我本人,就是有这个问题的。

沟通的意义,一方面,是你要让他人听懂你表白的货色;另一方面,是你要听懂他人的话。

1、谈话得留神,让他人懂你

间接举个例子,我在面试美团的时候,谈话始终结巴,其实我也不晓得为什么,平时谈话都是失常的,在非凡的场合,就呈现这个问题,尽管把话说完了,然而显然,美团第一面,就pass了。过后是在家中视频面试,我的室友,不好意思间接说我,就给我录音,我听了10分钟左右,的确不尽人意。。

我听了10分钟的录音,给我本人的评估就是,谈话都吃力,当前一起工作,那还不把我累死。

当前,所有的面试,我都把关注点,从我如何说,变成了,如何让他人很欢快的听懂我说的话。

第一、我向面试官说的所有的话,都是成体系的。

第二、我向面试官说的所有的话,都是逻辑清晰的。

第三、我向面试官说的所有的话,我都先进展两秒以上,思考分明了再谈话。

当然了,这一块,可能是我集体的特例,然而根本的语句通顺、逻辑清晰,在程序员中,做到的应该不多。

2、学会聆听,让你懂他人

很多状况下,其实面试官在表白的时候,很可能咱们本人没听懂面试官的意思,这个时候,就会特地的难堪。

我个别会这么做,我会说,方才您说的问题,我来形容一遍xxxxxxx。形容完之后,你再问面试官,您表白的是这个意思吗?一般而言,面试官会进行更具体的举例和形容。

我在面试饿了么的时候,二面的面试官,一开始就问了一个业务比较复杂的问题,所以一开始,我其实齐全没明确,面试官说的是什么货色,然而我通过本人的形式,疏导面试官说的更多,而后到某个水平,达成一个共识,这就是比拟欢快的一个交换。

无论是学会谈话,还是学会聆听,其实外围的问题,就是让单方的交换,在一个频道上,因为对于领导,面试面试,其实就是找同类人!

必会的面试题目

前端一些外围的经典问题,感觉永远都不会过期,反正我集体遇到的频率十分高,不过集体不会具体解读这些问题,只做一个抛砖引玉。

1、前端浏览器输出URL后产生什么?

一般前端会答复,dns解析,获取html文件,解析DOM,渲染页面这么一个流程。

其实过程简单的很,比方一个dns解析阶段,它分为哪几步?解析的ip肯定是一样的吗?每次都会进行dns解析吗?可能还须要理解cdn托管的一些问题。

比方html文件获取,它是如何传输的?如何建设链接的?三次握手、四次挥手是什么?http协定端口是什么?为什么间接能拜访一个html文件?

....

2、前端性能优化?

大多数前端,根本会说,缩小http申请、压缩合并js以及css、图片懒加载的技术、避免回流和重绘、css放头部、js放底部。

以上的说法对吗?完全正确!可是在这个过程中,我感觉短少一种思考。

比方缩小http申请,能够从哪些维度上缩小呢?比方合并http申请?比方合并资源?比方图片懒加载?http还有其余维度的优化吗?cookie优化?http申请和资源加载的辨别优化?在webview中呢?和一般的浏览器的优化技术,又有什么区别?

......

3、前端如何做性能监控、异样监控?

性能监控,异样监控,根本在小公司,是没有实际根底的,可是在差不多的大厂中,他们会关注这个问题。

首先是性能监控,应该从这么几个维度来说:一个是http的方面,在后端log日志,流入kafka,而后在kafka生产数据,能够精确的监控到哪些接口有异样?异样率是多少?另一个方面,是前端的 Performance 的api,在用户的实时应用的过程中,就会产生数据,这样就能实现页面性能监控。

前端异样监控,首先要明确什么是异样,html、css这些货色,无非就是一个展现的问题,还不至于让页面白屏的事件产生,所谓的异样监控,其实就是js的异样监控。在前端畛域,window.onerror是进行js异样的监听事件。并且要晓得,它在IE中,是不反对的,所以IE的监控,要应用try catch 的形式进行捕捉,比方咱们可能还要留神到,遇到异步的时候,这个如何做try catch的异样捕捉。

最初一个是前端sdk埋点,间接开发一个js文件,统计用户的UV/PV剖析等等,比方用户的转化率之类的,这一块集体没有什么特地的实际,各位能够在网上百度看看。

4、前端平安方面

这是一个高级前端必问的问题,说的是一个前端对整个前端平安的零碎认知。

咱们必须了解这么几个方面:sql注入、xss、csrf、cookie平安、明码平安等等。

sql注入,要了解sql注入的场景,它的原理是什么,以后的数据库的解决方案是什么?

xss攻打,常见的攻打场景,什么类型的网站容易被xss攻打,整个流程的原理是什么?

csrf攻打,其实就是一个钓鱼网站,要了解为什么会收到攻打,应该采取什么策略进行进攻。

cookie平安,要了解为什么用token,劣势等。

明码平安,次要是用户登陆,用户数据提交,加密,存入数据库的一整个流程。

其次,其实还有http和https的问题等等。

5、http、https、http1.0、1.1、2.0、3.0的区别

http这一块,其实是一个非常复杂的体系,要深挖的货色特地多。

http进行非对称加密,失去https,这个过程是怎么样的?什么是CA证书?整个网站进行验证的流程是什么?

http各个版本的区别是什么?解决了哪些问题?比方头部缩减的优化,那你理解这个优化的具体策略吗?缩减了什么?又减少了什么?要深挖细节。

http的底层协定?tcp/ip协定的三次握手,四次挥手,具体是怎么通信的?什么叫满启动?甚至延长到整个网络协议的畛域,什么是socket?udp是干什么的?dns解析?ftp?以及不罕用的其余协定?

如果再进行扩大,计算机网络的7层构造?每一层做了什么事件?计算机组成原理,如何解析咱们的代码等等。

......

深度解读

这一部分,我大抵分了几个模块,源码、可视化、跨平台、工程化、混合app交互、设计模式,其实每一个都值得前端去钻研。

作为集体,其实也算是我定了几个方向,本人当前要致力的中央。

1、源码

最好要读一读某个框架的源码,最不济,也看看他人写的源码解读的文章,当初的趋势,根本是以react、vue为主。

以vue为例,你得懂vue框架的整个周期,比方vue的初始化,产生了什么?vue的模板解析,是如何进行的?如何造成AST?render函数的生成?什么是依赖收集?什么是patch?数据更新策略等等。

你也要懂得在这个过程中,混入mixins、$options,vuex、router他们各自如何通过这些api,实现各自的性能?

源码的维度,能够试着从vue的体系、react体系、loadash、zepto这些库中下手,因为咱们就是从这些框架以及js库,走过去的。

2、可视化

地图、echats、canvas、webgl、d3.js、three.js!

下面是集体想要钻研的对于可视化的一个个主题,尽管可视化不是自己的特长,可是因为之前在地图相干的公司待过,也算是沾了可视化的一点光。在面试饿了么的过程中,就提到了一个非凡的应用场景,就是对于地图的线路绘制,大批量数据的推送,以及性能相干的问题。

当前,一般前端的技能,比方vue、react等等,大家都会,没有什么差异化的竞争,前端市场趋于饱和,更须要的是在某些方面专精的人才。

3、跨平台

flutter、react-native、weex、electron

这是目前市场上,针对跨平台的一些解决方案,每一个框架,大抵方向上,都解决了肯定水平上的多端开发能力。

首先须要明确的是,多端开发并不是万能的,也有一些咱们开发中的痛点,无论rn、还是weex,都是给前端提供一些非凡的组件,实现开发能力。然而业务是多样的,须要也是多变的,对于没有提供的组件,或者api,咱们前端开发人员,有些性能是没方法实现的。

对于多端框架,更重要的是了解层面的货色,比方electron,就是要了解它的实质,就是应用node塑造一个桌面利用的容器,而后外部是一个webview。

从面试的角度,面试官器重的不是这个货色怎么用的问题,个别会问一些外部原理,比方小程序和公众号的比照?底层实现形式?比方rn的编译解析过程是什么?如何把js编译为真正的ios、android利用。比方flutter的渲染机制,和rn这些渲染形式有什么不同?和一般的web网页又有什么区别?

跨平台技术,flutter最近比拟火,从找工作的角度,其实能够学学。electron这些桌面利用,自身不难,然而学过和没有学过,其实自身就是一种差别。

4、工程化

工程化这一块,是集体比拟感兴趣的一个方向。本人也做过一些实际,然而只能说是工程化中的冰山一角。

抛砖引玉,提一些咱们能够探讨的点。

1、前端我的项目规范?

体现为库的抉择?文件划分目录的规定?pc、mobile多端实际?ssr计划集成?

2、组件库集成?

组件库建设的目标?npm包的公布?

3、脚手架工具?

webpack编译优化?webpack打包构建优化?自我脚手架的工具应用?

4、git提交标准commit-msg?代码查看标准eslint?

5、前端性能监控?前端异样监控?前端用户埋点sdk?

6、rap?jenkins?

5、混合app交互

jsBridge、性能晋升方面、x5内核

算是一个小的模块吧,咱们得明确,jsBridge是如何做到h5和原生利用的交互?

ios和h5的交互通信?window.webkit?是否同步?

android和h5的交互?细节和ios有什么不同?

webview在性能晋升方面,能够做哪些?什么是离线包?

腾讯x5内核的劣势是什么?咱们用了x5内核,能够防止什么问题?

6、设计模式

最初谈谈设计模式,算是一个高频的面试题。

咱们至多要晓得以下这些设计模式的性能、代码实现、应用场景问题。

单例模式、原型模式、工厂模式、观察者模式、策略模式、代理模式等等。

最初祝大家面试欢快。

逆锋起笔是一个专一于程序员圈子的技术平台,你能够播种最新技术动静最新内测资格BAT等大厂大佬的教训增长本身学习材料职业路线赚钱思维,微信搜寻逆锋起笔关注!