前言
本人两年经验,目前已经接受了头条offer。最近一个月基本面试了很多大厂,结果也还不错,最终选择了头条。如果你有什么问题,可以加文末的微信,我们一起交流!
本篇是面试题汇总篇,大厂的面试基本都是三面+hr面,所以,我会根据每个阶段的面试,来对面试题进行分类,从中总结面试经验。欢迎收藏和关注~
正文
一面
一面,以考察基础为主,同时也会有笔试题的考察。面试官,一般都比较好沟通,对于基础问题都会有所探讨。因为这一面的面试官,大概率是自己以后的师兄/师姐。主要会从以下几个维度考察:
- JS基础
- CSS基础
- 网络层
- 常用技术栈
JS基础
- for循环和forEach循环,哪种性能会好一些
- let,const和var的区别【给一道题,分析报出什么错误】
- JS的基础数据类型有哪些
- 什么是Symbol,它的使用场景是什么
- 数组原型上面的方法有哪些,哪些是可以改变数组的,哪些是不可以的
- 如何转换一个类数组对象,大致原理是怎么样的
- Map 和 Weakmap的区别
- 了解JS的作用域么,函数作用域是在什么时候形成的
- 什么是闭包,它有什么作用,它的原理
- 通过例子的形式,说一下JS的原型链
- 如何实现一个new
- 说一下JS的继承方式
- 什么是箭头函数,它和普通函数的区别
- this的指向【通过题目考察,表述结果,解释理由】
- 如何迭代一个对象,for..in这种方式,如何取出对象自己的属性
- Object.assign它是一个浅拷贝还是深拷贝
- 如何实现一个深拷贝
- 什么是Promise,如何实现它,Promise.then,Promise.race如何实现
- 什么是防抖,什么是节流,如何实现防抖
- 描述一下Event Loop,这个循环会一直下去么,宏任务和微任务的区别【通过笔试题的方式,表述结果,解释理由】
- 如果在Event Loop中,不断push微任务是否一直会执行
- 浏览器的事件机制有哪几个阶段?addEventListener的第三个参数起到什么作用
- 如何实现一个请求超时
CSS基础
- 什么是盒模型,如何进行不同盒模型的切换
- 样式的优先级排序,如何去获取一个样式的相邻元素
- position的属性值有哪些,它们的区别是什么
- 列举一下移动端适配方案
- flex的布局了解么,什么是主轴,如何控制主轴和副轴
- Flex的优点和缺点,如何用flex布局两边固定,中间自适应;同时其他方式能实现么
- 如何实现水平垂直居中
- 如何清除浮动,清除浮动的原理
- 什么是BFC,它的作用是什么,什么行为会产生BFC
- 父元素浮动了,子元素形成BFC能清除浮动么
- css的动画如何实现
- 为什么使用transform写动画,不用left写动画
- 回流和重绘的区别,什么行为会导致回流,什么行为会导致重绘
- 了解CSS3么,CSS3里面新增了哪些属性
- 1px的问题可以如何去解决【尽可能地多说】
- less和css的区别,less的函数有了解过么
网络层
- 在浏览器输入一个URL的整体过程是怎么样的
- 描述一下浏览器页面渲染的过程
- 浏览器白屏是什么导致的
- 浏览器存储Cookie、localstorage、sessionStorage的区别
- cookie如何进行设置的,JS能改变哪些值
- 描述一下浏览器缓存
- HTTP的状态码有哪些
- HTTP的请求头包含什么
- 解决跨域的方法有哪几种
- 描述一下JSONP的原理
- 描述一下CORS的过程
常用技术栈
- vue 和 react的一些区别
- vue的生命周期有哪些
- vue的异步组件了解过么
- vue的双向数据绑定如何实现的,数组的响应式如何做到的,proxy的好处
- vue的指令有哪些,v-if和v-show的区别是什么
- 计算属性和侦听属性的区别
- vue的虚拟DOM和react的有什么不一样
- 描述一下vue的diff算法
- v-for之后的key的作用是什么
- Vue的组件通信有哪些
- keep-alive如何实现
- 如何实现一个hash路由
- vueRouter的方式有哪两种,区别是什么
- vueRouter的路由守卫了解么
- vue3.0的新特性了解么
- React的setState的机制是什么
- 描述一下React生命周期
- 描述一下redux的中间件原理
- redux如何进行异步处理
- redux和dva的区别
- webpack的loader和Plugins有什么区别,webpack是如何去使用Plugins的
- 描述一下小程序的同层渲染原理
- 小程序的bindtap和catchtap的区别
- 小程序的通信是怎么样的
- 小程序的setData的数据如何很大,如何解决
- 如何实现数据打点和用户行为监控
编程题
- 实现一个sum方法【sum(1, 2, 3)(4),sum(1, 2)(3, 4)类似的调用】,同时console.log(sum(1, 2, 3)(4) => //输出10
- 给定一个先增后降的数组,找出其中的最大值
- 实现数组去重的方法【尽量多写】
- 实现一个正则表达式(匹配url链接)
- 如何通过CSS实现一个梯形,然后实现一个可以点击的圆形
- 一个人总共吹了253根蜡烛,它几岁了【一岁吹一根,两岁吹两根,依次类推】
- 如何实现两个有序数组的合并,要求时间复杂度是O(n)
二面
二面,一般都会考察一些项目问题,性能优化,也会对基础的原理部分进行综合考察。二面面试官,往往是以后自己的leader,或者其他部门更加资深的技术。考察的维度比较多变,需要多对项目这个部分进行准备。
基础部分
- Http状态码有哪些
- HTTP1.1/HTTP2.0的区别
- 描述一下浏览器缓存
- cookie和Session的区别
- 描述一下xss和csrf,如何防范
- 请求超时timeout的原理
- 描述一下进程和线程
- node内存泄漏的原因
- 了解过vue迁移到小程序的原理
- 虚拟列表的实现原理
- 骨架图的实现方案
- React hooks的优点
- Dva的同步状态管理,异步状态管理,是如何实现的
- 描述一下vue的nextTick的原理
- webpack常用插件,以及dev和product有啥差别
- webpack打包原理
- 小程序页面之间的通信怎么处理
- webview组件和原生组件的区别
性能优化
- 移动端的性能优化【从自己做过的角度出发】
- webpack的性能优化如何做
- 如何进行首屏加载优化
- 平时如何做小程序部分的性能优化的
编程题
- 写出3种水平垂直居中方案
- 手写实现bind方法
- 手写promise的sleep函数实现
- 手写Promise.all的实现
- 算法题 - 寻找最长不重复子串
- 算法题 - 计算年龄 【输入一个字符串:yyyy-mm-dd,根据当前时间计算它的年龄】
二面面试过程中,会涉及到项目的问题,我这里不进行列举。因为每个人的项目不太一样,参考意义不大。可以多对项目中的难点和亮点进行展开叙述。
三面
三面,一般会考察项目,个人规划,提供技术方案的能力。三面的考察,开放程度更大,每个人根据自己的情况,酌情回答。同时,也会有笔试题的考察
- 聊项目,项目中遇到的问题,如何解决的
- 回头看,项目中还有什么需要改进的地方
- 平时如何去做性能优化的
- 在公司有啥技术贡献
- 在原公司,自己最大的成长是什么
- 自己觉得在原公司的开发流程上,还有哪些可以改进的
- 代码的注释,数组的解构,整体的思路,如何进行函数的封装,如何使用设计模式,如何你进行代码调试
- 希望公司能够提供你什么
- 自己未来的职业规划是怎样的
- 平时如何进行学习的
- 目前在学习什么【慎重回答,这是面试的扩展点】
- 离职的原因是什么
编程题
- 算法题 - 实现一个二分查找
- 实现一个异步缓存请求【考察并发】
- 算法题 - {} [] ()三个判断是否闭合
hr面
hr面,一般比较轻松。主要围绕着你的基本信息、薪资情况、个人发展、性格、和他人相处、团队协作等方面展开。题目本身开放性程度比较大,每个人的答案也不相同。按照个人情况作答即可。
- 你为什么离职,对上一家公司的印象如何
- 你的优点是什么,缺点是什么【一般会让你通过具体案例去说明】
- 你在别人眼里是怎么样的一个人
- 你对未来的规划是怎样子的
- 你的期望薪资是多少