记一年前端小白面经

起点

从去年2017年7月毕业至今将近快1年的时间了,2018年5月底6月初开始面试,一共面了快手,滴滴,头条。很幸运每家都面完了3轮技术+1轮hr,能跟这么多大牛聊天真是太有收获了,对基础是一次查漏补缺,对技术视野也是一次提高,因而就想记录一下这些面试的问题与收获,有一些问题值得更加深刻的研究的。html

问题

因为已通过了些时日,仅记录问题而不分哪家也不分几轮面试。前端

  • 计算机基础类vue

    • TCP和UDP区别以及各自的应用
    • TCP3次握手与4次挥手,为何要这么作
    • keep-alive是对应接口复用仍是对应的域名复用
    • HTTP与HTTPS区别,HTTPS握手过程,包含对称非对称加密,在哪步作,为何要包含两种加密
    • 是否了解HTTP2
    • 进程与线程的区别
    • 物理地址与虚拟地址
    • websocket协议握手以及对nignx须要进行什么配置
  • 智力类jquery

    • 海盗分金
    • 几率论抽扑克牌问题
  • 算法类linux

    • 快排算法,并说出你写快排的时间与空间复杂度(若是是阮大神快排就要注意空间复杂度了)
    • 递归反转二叉树
    • 检测字符串回文,并说出时间与空间复杂度
    • 写一个函数,简化linux相对路径(如 /a/b/.././c => /a/c)
  • 前端类webpack

    • 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~web

相关文章
相关标签/搜索