起点
从去年2017年7月毕业至今将近快1年的时间了,2018年5月底6月初开始面试,一共面了快手,滴滴,头条。很幸运每家都面完了3轮技术+1轮hr,能跟这么多大牛聊天真是太有收获了,对基础是一次查漏补缺,对技术视野也是一次提升,于是就想记录一下这些面试的问题与收获,有一些问题值得更加深入的研究的。
问题
由于已经过了些时日,仅记录问题而不分哪家也不分几轮面试。
-
计算机基础类
- TCP和UDP区别以及各自的应用
- TCP3次握手与4次挥手,为什么要这么做
- keep-alive是对应接口复用还是对应的域名复用
- HTTP与HTTPS区别,HTTPS握手过程,包含对称非对称加密,在哪步做,为什么要包含两种加密
- 是否了解HTTP2
- 进程与线程的区别
- 物理地址与虚拟地址
- websocket协议握手以及对nignx需要进行什么配置
-
智力类
- 海盗分金
- 概率论抽扑克牌问题
-
算法类
- 快排算法,并说出你写快排的时间与空间复杂度(如果是阮大神快排就要注意空间复杂度了)
- 递归反转二叉树
- 检测字符串回文,并说出时间与空间复杂度
- 写一个函数,简化linux相对路径(如 /a/b/.././c => /a/c)
前端类
- JS的六大基本类型以及判断方法(5+symbol)
- JS判断数组以及对象的方法
即 typeof instanceof Object.prototype.toString.call 适用范围 - apply和call的区别
- 原生bind的作用 实现一个bind的polyfill
需要了解bind和new在一起用的时候的优先级,真正的polyfill是需要考虑到这一点的 - 写一个数组去重
自然回答通过哈希记录,存在的就不放入。但是漏掉了一个NaN的情况,被面试官指出来了。因为无论如何NaN做key的话string的NaN与真实的NaN是一致的 - == 与 === 区别
其实考察的是==的隐式类型转换,还好之前看过规范也写过一篇文章,还是比较熟悉的。https://segmentfault.com/a/11... - isNaN(null)返回什么?为什么?
一开始想的很简单,直接回答返回false。后来面试官问isNaN不应该是在不是一个数字的时候返回true吗,那null也不是一个数字,为什么会返回false呢。然后意识到事情并没有这么简单,然后按照基础知识推理了一下,isNaN应该会先执行抽象操作toNumber, 而null toNumber就是0,所以是一个数字,故返回false。
- 对原型链的理解以及继承的实现
- 实现一个函数,2个参数为两个构造函数,A的实例继承B
- 如果让你实现一个Promise,要如何去做
看过几遍Promise/A+规范,简单说了下重点实现构造函数,状态机制,链式机制,解决程序,then方法。 - 实现 Promise.all
自己想得有点偏激,想用链式来做,不过在reject的时候会有问题。面试官提出了一个用计数法resolve的方案,简单易懂。 - 说出几种解决跨域的解决方案
CORS,jsonp,iframe,proxy - 配置CORS是时候注意的点
除了正常的头配置之外,复杂请求会发一个OPTIONS,可以通过配置类缓存这个OPTIONS请求,而不是每次都发送,其他具体描述见阮神http://www.ruanyifeng.com/blo... - cookie session localStorage区别
- 说说对eventloop的理解
- 节流与防抖的区别,实现一个防抖
- 用promise包装一下xhr
- vue数据绑定的原理
主要是依赖收集,Object.defineProperty,getter,setter,watcher - vue与原先jquery时代的区别
- vue父子组件如何传递数据
- vue非父子组件如何传递数据,不用vuex
event bus - 实现一个事件的机制
简单实现emit on - vue v-model实现的原理
- vue :xxx.sync实现的原理
- vuex的实现及其原理
没答出满意的答案,看过部分源码只是为了确认dispatch哪部分是异步的 - vue-router守卫类别
- vue-router的实现
- webpack loader与plugin的区别
- webpack用过哪些plugin,列举并说明作用
- 说说cmd amd区别
- 模块依赖分析以及加载
看过webpack打包过后的代码,把__webpack__require__的加载机制以及模块缓存讲了一下。再底层一些静态分析建立模块依赖树,从最底层开始加载。这一部分自己答得也不是很好,还需要继续研究。 - webpack + vue-router异步组件加载的原理
- 对于具体分包依赖打包过后的代码
a组件依赖c b组件依赖c 若单独打包了ab作为单js,会不会单独打包c - 自己项目的路径及其作用
- display: none; visibility: hidden; opacity: 1; 区别
- 外边距合并的问题,如何解决
- 如何清除浮动
- 对BFC的理解
- 移动端适配的解决方案 rem vw vh
- 300ms点击延迟的起因及其解决办法
- 对重绘和重排的理解
- 从接收到html到绘制完整页面的过程
- 对script标签的理解
主要是下载可以使同步并发的,而执行必须是按照script标签的位置有序执行的 - 对前端缓存的理解
强缓存和协商缓存 - requestAnimationFrame的理解与如何模拟
- 对浏览器优化方面有哪些方案与理解
- 箭头函数与普通函数的区别
- 对ES7与ES8的了解
ES7基本就是async await ES8就真的不了解拉
结语
基本还有记忆的就是这些问题,大多数是一些基础问题,有的问题当时回答的并不好,回来也查了资料加深了理解,能跟大牛对话收货就是很多,也已经拿到了满意的offer,希望在找工作的大家加油~祝早日拿到满意的offer~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。