校招近十家一线互联网大厂的面经css
个人秋招之路差很少走到尽头了,感受真是精疲力尽了.把这大半年的经历和面试总结写下来,但愿能给和我同样在求职路上煎熬的人一点帮助.html
先说背景:微电子科学与工程专业,学过两门和CS相关的课程:c语言和单片机.这个专业的惟一好处就是:大部分人并不知道这个专业学什么,觉得和电信差很少.因此在众多野生程序员中也算一丁点儿优点,哈哈.本专业适合读博,大三开学决定不去读研了,转CS作前端.这也算是一个我很菜的借口,能够自我欺骗一下.前端
求职经历:
三月份开始投简历找实习,发现本身真是菜的一无可取.一开始就是腾讯和阿里的内推面试,被虐的体无完肤,(事件模型,原生XHR,this等等都答不上)因而开始疯狂恶补前端.大三下课程巨多,买了一块新电池,上课坐在最后边敲代码.遇到稍微知名一点的互联网公司就投简历,不停面试,每次面试完赶忙记录面经,总结经验,查漏补缺.vue
就这样一直熬到四月份,开始渐渐可以从容应对前两轮技术面.五月初,拿到美团和头条实习offer.本身几斤几两仍是拎得清,这两个offer多少都有运气成分,因此并无多高兴.每次刷别人面经,看到本身那么多答不上就很慌乱,因而依然不停投简历,不停面试,为秋招积累经验.node
6月份去了美团实习,上班比较轻松,leader人也很好,有相对多的时间学习而不是沉迷业务.提早批校招开始后,就开始刷面经,准备面试.8月初拿到留用意向书,月底离职回学校专心准备面试.react
秋招投的公司很少,除了Face++,给了面试机会的公司基本都能走完全部面试流程,虽然有些最后并无给offer,可是这个状态也勉强过得去了.webpack
面试心经:
互联网一二线公司基本上都面过,总结一下面试技巧.
综论:我的觉得,技术面通常遵循DFS查找原则,先找一个点切入往深处探底,直到你答不上来,而后开始考察相近知识点,再接着探底.最后综合评判一我的水平.
所以,你掌握的知识体系必须既有深度又有广度.但,这是不可能的.css3
一. 学会主导面试问题走向和适时展现本身技术深度是很关键的一点.nginx
举例来讲,你花了足够时间研究了HTTP/2,基本上对它了如指掌.那么面试官一旦问到计网或者性能优化或者HTTP,HTTPS,你就要想办法引导面试官问你HTTP/2,而后展现你的功力.程序员
二. 学会回答问题:
面试问题分三种:
第一类,你遇到过而且熟悉的,这时候不要开心,要控制好回答节奏,避免面试官以为你恰好撞上.
第二类:不太熟,简单解释,避开可能让你入坑的词汇(好比问react你非要说diff,可是写不出diff算法).
第三类:不会,直接说本身没接触这方面,不装懂.若是是非知识性问题,能够推理一番,体现你的分析能力.
三. 应对总监/经理面:
通常技术问题较少,多职业规划和过去经历总结.我的觉得这里最重要的是要让面试官以为你是个颇有潜力的人,之后会是一个优秀的程序员.能够用本身的经历佐证你热爱技术,喜欢探究原理,作事可以锲而不舍等等,表现你具有优秀程序员的品质.应对其余问题慎言就好,出口以前先想好.
除此以外,我看过美团面试评价表,他们也在意一我的表达能力,思惟能力,以及我的素质.因此适当注重我的软实力也能够弥补技术上的不足.
关于应对前端面试,创建完善知识体系:
基础:
MDN/w3c文档基本过一遍.就不会在HTML,CSS基础问题翻车.掌握《JavaScript高级程序设计》就能够应对大部分JS问题.(犀牛书固然也是同样).而后就是套路型基础问题,这个多刷刷面经就知道了.
进阶:
阿里腾讯以及外企都是直接刷简历,没给面试机会.心塞.
我也很绝望啊, who let me so vegetable !
两轮技术面
(7月份搜狐大厦,问的都比较简单,只记得这么多)
两轮技术面+HR面,当时没记录,只记得没答上来的问题
百度内推面了俩部门,前先后后总计面了六轮,没写全,问的问题太多有些也记不清了.
大搜在百度现场面.三小时面完三轮.(荒郊野外真远 -_-
例行自我介绍,随便问了下美团实习项目,而后开始考察基础.
Q:先讲讲JS继承,后边有白板,能够画画.
讲了一下ES5继承和原型链,写了ES6的class示例.
Q:作过性能优化没,讲讲性能优化
大概说了传输,渲染,缓存的优化
Q:通常怎么排查性能问题
chrome面板,balabala.其余第三方工具
Q:cookie,localStorage有些什么区别
就记得这些了,基本覆盖大部分基础知识复制代码
例行自我介绍,问了问项目.
Q:学校课程(本专业没有任何CS相关课程)是些啥?
Q:数据结构了解多少,讲讲前端上用到的
堆栈,队列,hash table,DFS(挖了一个坑)
Q:如今给个DOM,写个DFS查找里边的全部文本,打印出来
白纸上大概写出了样子,可是明显有BUG
Q:递归是什么原理,需不须要设置显式终止条件?
答不出来
Q:给个数组,把这个数组每一个元素放到一个l列表格里,打印表格DOM结构
写了一个两层循环
Q:讲讲URL到页面过程
balabala
Q:HTTP创建是什么过程,详细点,是长链接吗?
Q:HTTP报文和回文内容包含些什么
Q:XHR怎么发的,具体怎么创建的,和HTTP有什么区别
原生XHR讲一遍,区别不了解
Q:XHR上传文件和其余数据有哪些区别?和HTTP传数据有什么不同?
文件上传用formData.
面试官XHR传数据会base64编码复制代码
除了聊人生外:
Q:你这项目里canvas绘制散点曲线怎么解决的?
高阶贝塞尔曲线拟合,计算控制点.也能够最小二乘法计算.
Q:为何不看看其余开源项目好比echart源码?(我用过echarts)
当时没有这么高觉悟.
介绍了网页搜索部前端组业务,整个部门只有一个前端组,貌似加班.复制代码
三轮技术面,一下午完成.
牛客视频面,上来就是写题.
第一题写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领我出去等二面.
滴滴给人面试体验太差了,因此放弃面试了.
下面是春招实习的一些面经,和校招差很少
浏览器的主要组件包括:
用户界面- 包括地址栏、后退/前进按钮、书签目录
浏览器引擎- 用来查询及操做渲染引擎的接口
渲染引擎- 渲染界面: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。
渲染上的差别:
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 只能检测基本数据类型