个人求职之路差很少走到尽头了,感受真是精疲力尽了.把这大半年的经历和面试总结写下来,但愿能给和我同样在求职路上煎熬的人一点帮助.css
先说背景:微电子科学与工程专业,学过两门和CS相关的课程:c语言和单片机.这个专业的惟一好处就是:大部分人并不知道这个专业学什么,觉得和电信差很少.因此在众多野生程序员中也算一丁点儿优点,哈哈.本专业适合读博,大三开学决定不去读研了,转CS作前端.这也算是一个我很菜的借口,能够自我欺骗一下.html
求职经历:
三月份开始投简历找实习,发现本身真是菜的一无可取.一开始就是腾讯和阿里的内推面试,被虐的体无完肤,(事件模型,原生XHR,this等等都答不上)因而开始疯狂恶补前端.大三下课程巨多,买了一块新电池,上课坐在最后边敲代码.遇到稍微知名一点的互联网公司就投简历,不停面试,每次面试完赶忙记录面经,总结经验,查漏补缺.前端
就这样一直熬到四月份,开始渐渐可以从容应对前两轮技术面.五月初,拿到美团和头条offer.本身几斤几两仍是拎得清,这两个offer多少都有运气成分,因此并无多高兴.每次刷别人面经,看到本身那么多答不上就很慌乱,因而依然不停投简历,不停面试,为面试积累经验.vue
去了美团实习的经历很愉快,上班比较轻松,leader人也很好,有相对多的时间学习而不是沉迷业务.提早批开始后,就开始刷面经,准备面试.一个月以后拿到留用意向书.node
后边投的公司很少,除了Face++,给了面试机会的公司基本都能走完全部面试流程,头条,百度,美团,好将来,快手,华为都给了offer.虽然有些最后并无给offer,可是这个状态也勉强过得去了.react
面试心经:
互联网一二线公司基本上都面过,总结一下面试技巧.
综论:我的觉得,技术面通常遵循DFS查找原则,先找一个点切入往深处探底,直到你答不上来,而后开始考察相近知识点,再接着探底.最后综合评判一我的水平.
所以,你掌握的知识体系必须既有深度又有广度.但,这是不可能的.webpack
一. 学会主导面试问题走向和适时展现本身技术深度是很关键的一点.css3
举例来讲,你花了足够时间研究了HTTP/2,基本上对它了如指掌.那么面试官一旦问到计网或者性能优化或者HTTP,HTTPS,你就要想办法引导面试官问你HTTP/2,而后展现你的功力.
二. 学会回答问题:nginx
面试问题分三种:
第一类,你遇到过而且熟悉的,这时候不要开心,要控制好回答节奏,避免面试官以为你恰好撞上.
第二类:不太熟,简单解释,避开可能让你入坑的词汇(好比问react你非要说diff,可是写不出diff算法).
第三类:不会,直接说本身没接触这方面,不装懂.若是是非知识性问题,能够推理一番,体现你的分析能力.
三. 应对总监/经理面:程序员
通常技术问题较少,多职业规划和过去经历总结.我的觉得这里最重要的是要让面试官以为你是个颇有潜力的人,之后会是一个优秀的程序员.能够用本身的经历佐证你热爱技术,喜欢探究原理,作事可以锲而不舍等等,表现你具有优秀程序员的品质.应对其余问题慎言就好,出口以前先想好.
除此以外,我看过美团面试评价表,他们也在意一我的表达能力,思惟能力,以及我的素质.因此适当注重我的软实力也能够弥补技术上的不足.
关于应对前端面试,创建完善知识体系:
基础:
MDN/w3c文档基本过一遍.就不会在HTML,CSS基础问题翻车.掌握《JavaScript高级程序设计》就能够应对大部分JS问题.(犀牛书固然也是同样).而后就是套路型基础问题,这个多刷刷面经就知道了.
进阶:
阿里腾讯以及外企都是直接刷简历,没给面试机会.心塞.
我也很绝望啊, who let me so vegetable !
两轮技术面
(7月份搜狐大厦,问的都比较简单,只记得这么多)
两轮技术面+HR面,当时没记录,只记得没答上来的问题
百度内推面了俩部门,前先后后总计面了六轮,没写全,问的问题太多有些也记不清了.
大搜在百度现场面.三小时面完三轮.(荒郊野外真远 -_-
电话面试,两天面完
三轮技术面,一下午完成.
牛客视频面,上来就是写题.
第一题写url转置,www.toutiao.com => com.toutiao.www
转换成数组,而后换位.
面试官说,不用API,像c语言同样写怎么办.
查找全部.,记录index.根据index数组长度,循环交换每两个相邻index以前的片断.
面试官说这里交换用到了temp临时变量,js不用临时变量而交换值该怎么写呢?好比交换ab值.写个函数试试.
想了一下子,尝试写一个柯里化函数解决,可是没写出来,面试官提示ES6.
我的以为这题好偏,除了解构,用arguments和对象都能实现.
[a,b] = [b,a]; { a:b, b:a }
接着考察css,要求写一个搜索框,右侧搜索按钮固定宽度,左侧自适应.
写了一个absolute定位,浮动布局,css3 calc,css translate设置宽度.
而后大体讲了用flex布局.
中间问了哪些元素默认是inline-block,解释与block,inline的差异.
面试官接着上边问css3有哪些新特性?
问到了动画,就细细问animation,我说动画不熟.中间提到了css3性能,
接着问2D和3D动画性能上有什么差别?这个不了解,说了有些能够触发GPU加速,渲染性能有必定提高.
面试官又问动画的GPU问题,这就答不上了.
很少说,写题.
bind函数实现,这个不难,一下子写完了.主要是考闭包和arg,另外记得先检测bind是否存在.
面试官说不完善,bind绑定对象以后再去调用传参怎么办.
获取arguments传入返回的函数.
而后出了这个题:
最多存储n对KV;若是大于n个, 则随意剔除一个已通过期的KV;若是没有过时的KV,
则按照LRU的规则剔除一个KV;查询时若是已通过期, 则返回空;
没学过算法彻底看不懂.
而后开始问性能优化,从域名服务开始,到HTTP传输,到加载和缓存,再到渲染,再到代码优化,一步步详细讲解.
中间面试官打断HTTP,问HTTP/2有哪些特性?
讲了多路复用和server push.
而后问HTTPS过程
讲了HTPPS创建链接,证书加密过程
面试官又问简历HTTPS链接以后传输数据怎么加密?
面试官问雪碧图为何能优化性能?
答减小HTTP链接,一次性传输,HTTP有并发限制
问HTTP为何限制并发,我说多是避免资源占用过多.
问要是非要一次性加载100张图怎么办?说不知道,知道的CDN也不能解决.
面试官问HTTP2多路复用是什么?
创建一个HTTP链接,传输多个文件.
问那雪碧图优化点在哪里?还有别的么?答不上.
(其实雪碧图把多张图合并,必定程度上减少了体积,单个图片要包含不少无用信息,可是在HTTP层的优化能够被多路复用替代了).
HTTP在OSI哪一层? 应用层
详细说哪七层?
在渲染优化上问了函数节流,并让写了一个节流函数.
在代码优化上问了queryselectAll和getBy的区别,
还问了mouseenter和mouseover的区别.
三面主要问项目和实习,遇到了考察点就追问到底.
没什么具体印象了.
如下为血的教训:
又问了OSI,
依然不会.
面试官:中间隔了一个小时,你就不去查一下吗?
我:.....
上来一个定时器异步的for循环题,问了一下结果要求解释.没啥难度,就是要细心.
而后是一个很长函数调用的题,主要考察this指向,做用域链,原型链和call.一不当心会掉进坑里,我给告终果,顺便深刻讲了一下分析过程.
接着是一个模板解析函数,给一个mustache风格的模板和一堆参数,要求编译模板并输出.白纸手写.
大概画了几笔,发现判断模板是否合法写不出来.而后接着写mustache替换.
告诉面试官本身的想法和遇到的难题,面试官趁势对着代码问了一些问题.
面试官又问了一下事件代理,
大体讲了这个东西,顺便解释了事件模型和性能优化点.
而后让解释url到页面渲染的过程,
大体说了整个流程.
接着问css和js加载的差别,主要考察js阻塞问题.
而后问domready和onload区别,这点不是很清楚,答得很差.
中间提到了HTTP/2,因此面试官又让细说http的各个版本.
讲了http1.1特性.http/2的二进制分帧,多路复用,server push以及性能优化做用,而后讲了https加密.
面试官接着问HTTPS流程和细节,详细解释了HTTPS证书加密过程.
面试官让HR领我出去等二面.
滴滴给人面试体验太差了,因此放弃面试了.
快手HC不多,面试也有点难,薪资还不错,面完了以后去办公室看了看,感受挺不错的.
讲讲这家略神秘的公司面试流程
一面是基础技术面,将前端的方方面面都问了一下,给了一些算法题和技术场景,让给解决方案.
二面(前端主管)基本全程在线coding,题目记不清了,四五道题难度有高有低,写了整整一个小时代码.后边是半小时前端技术面,基本每一个点都会问到问不下去.
三面是部门Leader面(先后端主管),HR后来讲三面考察智力,反应速度和学习能力,问了一些算法和智力题,给了一个UML图应用实例,让设计一个停车场计费系统的UML示例图.
四面是HR面,乱七八糟问了一通,学校状况啊,实现状况啊,我的性格啊什么的.
春招实习的时候没有offer,因而投了菊厂试试.笔试,性格测试混混就过了.两轮面试,问了一些学校的项目经历和关于c语言的问题,其余都是在聊天.而后莫名其妙就过了面试.
秋招直接进终面,也没有问任何技术问题,40分钟也在瞎聊天.而后就拿到offer了,感受没有比华为更简单的面试了?.薪资通常水平.
下面是其余公司的一些面经:
浏览器的主要组件包括:
用户界面- 包括地址栏、后退/前进按钮、书签目录
浏览器引擎- 用来查询及操做渲染引擎的接口
渲染引擎- 渲染界面:Firefox、Chrome和Safari是基于两种渲染引擎构建的,Firefox使用Geoko——Mozilla自主研发的渲染引擎,Safari和Chrome都使用webkit.
网络- 用来完成网络调用,例如http请求
UI 后端- 用来绘制相似组合选择框及对话框等基本组件,具备不特定于某个平台的通用接口,底层使用操做系统的用户接口
JS解释器- 解释执行JS代码
数据存储- 属于持久层,浏览器须要在硬盘中保存相似cookie的各类数据
流程: 解析html以构建dom树->构建render树->布局render树->绘制render树
参考文章
懵逼了
总结一下其余方式
1.Comet技术:基于HTTP长链接的Web端实时通讯技术
2.SSE:服务器发送事件,使用长连接进行通信
一面(记录两个,其余都还好)
实现动画有哪些途径
二面
web安全
性能优化
网络性能优化:
设计模式(要求说出如何实现,应用,优缺点):
跨域(产生缘由)
模板到DOM大体流程:
template模板通过parse处理后返回AST
得到一棵AST后再通过generate()生成渲染函数
执行渲染函数后会得到一个VNode,即虚拟DOM
patch函数,负责把虚拟DOM变为真正DOM。
(百度外卖业务:包含移动客户端(RN,hybrid),PC web端,H5,后台界面vue,桌面应用包含编辑器插件,前端构建工具,node中间层)
渲染上的差别:
1.将元素设置为display:none后,元素在页面上将完全消失,元素原本占有的空间就会被其余元素占有,也就是说它会致使浏览器的回流和重绘。
2.设置元素的visibility为hidden,和display:none的区别在于,元素在页面消失后,其占据的空间依旧会保留着,因此它只会致使浏览器重绘而不会回流。
3.opacity:0,只是看不到元素,元素依然存在而且占有原有位置.
注:
事件绑定的差别:
一、display:none:元素完全消失,不会触发绑定的事件.
二、visibility:hidden:没法触发其点击事件,有一种说法是display:none是元素看不见摸不着,而visibility:hidden是看不见摸得着,这种说法是不许确的,设置元素的visibility后没法触发点击事件,说明这种方法元素也是消失了,只是依然占据着页面空间。
三、opacity:0:能够触发点击事件,设置元素透明度为0后,元素只是相对于人眼不存在而已,对浏览器来讲,它仍是存在的,因此能够触发绑定事件
动画属性的差别: 一、display:none:彻底不受transition属性的影响,元素当即消失
二、visibility:hidden:元素消失的时间跟transition属性设置的时间同样,可是没有动画效果.
三、opacity:0,动画属性生效,可以进行正常的动画效果. 代码演示地址
Null,Undefined,Boolean,Number,String,Object
typeof 只能检测基本数据类型
Null,Undefined,Boolean,Number,String,Object typeof 只能检测基本数据类型