阅读 5013

面试系列——面经汇总

前言

本人两年经验,目前已经接受了头条offer。最近一个月基本面试了很多大厂,结果也还不错,最终选择了头条。如果你有什么问题,可以加文末的微信,我们一起交流!

本篇是面试题汇总篇,大厂的面试基本都是三面+hr面,所以,我会根据每个阶段的面试,来对面试题进行分类,从中总结面试经验。欢迎收藏和关注~

正文

一面

一面,以考察基础为主,同时也会有笔试题的考察。面试官,一般都比较好沟通,对于基础问题都会有所探讨。因为这一面的面试官,大概率是自己以后的师兄/师姐。主要会从以下几个维度考察:

  • JS基础
  • CSS基础
  • 网络层
  • 常用技术栈

JS基础

  1. for循环和forEach循环,哪种性能会好一些
  2. let,const和var的区别【给一道题,分析报出什么错误】
  3. JS的基础数据类型有哪些
  4. 什么是Symbol,它的使用场景是什么
  5. 数组原型上面的方法有哪些,哪些是可以改变数组的,哪些是不可以的
  6. 如何转换一个类数组对象,大致原理是怎么样的
  7. Map 和 Weakmap的区别
  8. 了解JS的作用域么,函数作用域是在什么时候形成的
  9. 什么是闭包,它有什么作用,它的原理
  10. 通过例子的形式,说一下JS的原型链
  11. 如何实现一个new
  12. 说一下JS的继承方式
  13. 什么是箭头函数,它和普通函数的区别
  14. this的指向【通过题目考察,表述结果,解释理由】
  15. 如何迭代一个对象,for..in这种方式,如何取出对象自己的属性
  16. Object.assign它是一个浅拷贝还是深拷贝
  17. 如何实现一个深拷贝
  18. 什么是Promise,如何实现它,Promise.then,Promise.race如何实现
  19. 什么是防抖,什么是节流,如何实现防抖
  20. 描述一下Event Loop,这个循环会一直下去么,宏任务和微任务的区别【通过笔试题的方式,表述结果,解释理由】
  21. 如果在Event Loop中,不断push微任务是否一直会执行
  22. 浏览器的事件机制有哪几个阶段?addEventListener的第三个参数起到什么作用
  23. 如何实现一个请求超时

CSS基础

  1. 什么是盒模型,如何进行不同盒模型的切换
  2. 样式的优先级排序,如何去获取一个样式的相邻元素
  3. position的属性值有哪些,它们的区别是什么
  4. 列举一下移动端适配方案
  5. flex的布局了解么,什么是主轴,如何控制主轴和副轴
  6. Flex的优点和缺点,如何用flex布局两边固定,中间自适应;同时其他方式能实现么
  7. 如何实现水平垂直居中
  8. 如何清除浮动,清除浮动的原理
  9. 什么是BFC,它的作用是什么,什么行为会产生BFC
  10. 父元素浮动了,子元素形成BFC能清除浮动么
  11. css的动画如何实现
  12. 为什么使用transform写动画,不用left写动画
  13. 回流和重绘的区别,什么行为会导致回流,什么行为会导致重绘
  14. 了解CSS3么,CSS3里面新增了哪些属性
  15. 1px的问题可以如何去解决【尽可能地多说】
  16. less和css的区别,less的函数有了解过么

网络层

  1. 在浏览器输入一个URL的整体过程是怎么样的
  2. 描述一下浏览器页面渲染的过程
  3. 浏览器白屏是什么导致的
  4. 浏览器存储Cookie、localstorage、sessionStorage的区别
  5. cookie如何进行设置的,JS能改变哪些值
  6. 描述一下浏览器缓存
  7. HTTP的状态码有哪些
  8. HTTP的请求头包含什么
  9. 解决跨域的方法有哪几种
  10. 描述一下JSONP的原理
  11. 描述一下CORS的过程

常用技术栈

  1. vue 和 react的一些区别
  2. vue的生命周期有哪些
  3. vue的异步组件了解过么
  4. vue的双向数据绑定如何实现的,数组的响应式如何做到的,proxy的好处
  5. vue的指令有哪些,v-if和v-show的区别是什么
  6. 计算属性和侦听属性的区别
  7. vue的虚拟DOM和react的有什么不一样
  8. 描述一下vue的diff算法
  9. v-for之后的key的作用是什么
  10. Vue的组件通信有哪些
  11. keep-alive如何实现
  12. 如何实现一个hash路由
  13. vueRouter的方式有哪两种,区别是什么
  14. vueRouter的路由守卫了解么
  15. vue3.0的新特性了解么
  16. React的setState的机制是什么
  17. 描述一下React生命周期
  18. 描述一下redux的中间件原理
  19. redux如何进行异步处理
  20. redux和dva的区别
  21. webpack的loader和Plugins有什么区别,webpack是如何去使用Plugins的
  22. 描述一下小程序的同层渲染原理
  23. 小程序的bindtap和catchtap的区别
  24. 小程序的通信是怎么样的
  25. 小程序的setData的数据如何很大,如何解决
  26. 如何实现数据打点和用户行为监控

编程题

  1. 实现一个sum方法【sum(1, 2, 3)(4),sum(1, 2)(3, 4)类似的调用】,同时console.log(sum(1, 2, 3)(4) => //输出10
  2. 给定一个先增后降的数组,找出其中的最大值
  3. 实现数组去重的方法【尽量多写】
  4. 实现一个正则表达式(匹配url链接)
  5. 如何通过CSS实现一个梯形,然后实现一个可以点击的圆形
  6. 一个人总共吹了253根蜡烛,它几岁了【一岁吹一根,两岁吹两根,依次类推】
  7. 如何实现两个有序数组的合并,要求时间复杂度是O(n)

二面

二面,一般都会考察一些项目问题,性能优化,也会对基础的原理部分进行综合考察。二面面试官,往往是以后自己的leader,或者其他部门更加资深的技术。考察的维度比较多变,需要多对项目这个部分进行准备。

基础部分

  1. Http状态码有哪些
  2. HTTP1.1/HTTP2.0的区别
  3. 描述一下浏览器缓存
  4. cookie和Session的区别
  5. 描述一下xss和csrf,如何防范
  6. 请求超时timeout的原理
  7. 描述一下进程和线程
  8. node内存泄漏的原因
  9. 了解过vue迁移到小程序的原理
  10. 虚拟列表的实现原理
  11. 骨架图的实现方案
  12. React hooks的优点
  13. Dva的同步状态管理,异步状态管理,是如何实现的
  14. 描述一下vue的nextTick的原理
  15. webpack常用插件,以及dev和product有啥差别
  16. webpack打包原理
  17. 小程序页面之间的通信怎么处理
  18. webview组件和原生组件的区别

性能优化

  1. 移动端的性能优化【从自己做过的角度出发】
  2. webpack的性能优化如何做
  3. 如何进行首屏加载优化
  4. 平时如何做小程序部分的性能优化的

编程题

  1. 写出3种水平垂直居中方案
  2. 手写实现bind方法
  3. 手写promise的sleep函数实现
  4. 手写Promise.all的实现
  5. 算法题 - 寻找最长不重复子串
  6. 算法题 - 计算年龄 【输入一个字符串:yyyy-mm-dd,根据当前时间计算它的年龄】

二面面试过程中,会涉及到项目的问题,我这里不进行列举。因为每个人的项目不太一样,参考意义不大。可以多对项目中的难点和亮点进行展开叙述。

三面

三面,一般会考察项目,个人规划,提供技术方案的能力。三面的考察,开放程度更大,每个人根据自己的情况,酌情回答。同时,也会有笔试题的考察

  1. 聊项目,项目中遇到的问题,如何解决的
  2. 回头看,项目中还有什么需要改进的地方
  3. 平时如何去做性能优化的
  4. 在公司有啥技术贡献
  5. 在原公司,自己最大的成长是什么
  6. 自己觉得在原公司的开发流程上,还有哪些可以改进的
  7. 代码的注释,数组的解构,整体的思路,如何进行函数的封装,如何使用设计模式,如何你进行代码调试
  8. 希望公司能够提供你什么
  9. 自己未来的职业规划是怎样的
  10. 平时如何进行学习的
  11. 目前在学习什么【慎重回答,这是面试的扩展点】
  12. 离职的原因是什么

编程题

  1. 算法题 - 实现一个二分查找
  2. 实现一个异步缓存请求【考察并发】
  3. 算法题 - {} [] ()三个判断是否闭合

hr面

hr面,一般比较轻松。主要围绕着你的基本信息、薪资情况、个人发展、性格、和他人相处、团队协作等方面展开。题目本身开放性程度比较大,每个人的答案也不相同。按照个人情况作答即可。

  1. 你为什么离职,对上一家公司的印象如何
  2. 你的优点是什么,缺点是什么【一般会让你通过具体案例去说明】
  3. 你在别人眼里是怎么样的一个人
  4. 你对未来的规划是怎样子的
  5. 你的期望薪资是多少