2021-02-27 01:43:26
双非二本科班出身,两年经验前端拿下阿里、头条、PDD、快手等大厂offer的面经总结如下:
一、基础准备必看内容:原型链、继承的实现、数据类型、var/const/let对比、new的过程、this指向问题、bind实现方式、闭包、事件循环、类型判断、手写Promise。
深入理解:例如将js原型链理解为链表,this为链表当前指向的原型,bind/call/apply为改变链表next指向;垃圾回收机制需掌握新生代和老生代,以及Scavenge GC算法;渲染页面过程需结合TCP网络层基础,解析算法、容错机制、图层树建立等。
示例:
eventloop需答出新版chrome优化了await执行速度,await更早执行,以及node和浏览器的区别,新老node版本执行顺序的不一致。
复习vue、vuex、vue-router文档,结合项目经验和遇到的坑进行准备。
常见问题:
vue生命周期及项目中使用场景。
vue keep-alive常用属性。
组件通信方式。
hash和history区别。
v-for唯一key的作用。
vue运行机制及依赖收集。
v-show和v-if的区别。
watch和computed的使用场景。
vuex中模块拆分方法。
编码题:数组去重、CSS水平垂直居中。
页面有父子组件时的渲染顺序及生命周期触发。
keep-alive中只缓存router-view内某个组件的方法。
组件通信中的eventbus原理。
vue diff算法简述。
3.0 proxy与2.0的区别(广度)。
data为什么是函数。
常用vue API原理(包括不限于nextTick、watch、computed)。
编码题:call/apply/bind实现、节流防抖、class实现。
一面基础,二面工程化和项目,三面广度。
一二面从题库抽题,包括this、eventloop、promise等,最后给一道算法题(leetcode easy难度,最多不超过middle),特别喜欢问二叉树。
示例问题:
promise.all异常处理。
版本号比较排序。
数组中第k个最大元素。
二叉树中的所有路径。
二叉树中和为某一值的路径。
node中promisify实现。
fetch兼容超时重传。
观察者模式(高频)。
String indexOf实现。
扁平化、科里化。
第一轮基础+场景题+工程+编码,第二轮技术深度+场景题。
示例问题:
vue如何实现组件封装。
动态拖拽场景中抓取div后显示最靠近div的基线(用队列方式解决)。
图片、视频断点续传问题。
两轮面试,二面出棘手算法题。
示例问题:给定一个二叉树,找到该树中两个指定节点间的最短距离。
一面:业务、技术、困难点、技术推进业务的事例,补1~2个基础问题,有的面试官会问http协议。
二面:工程化切入,如项目中用到ssr,会细致入微的问webpack原理。
三面:对行业的理解。
对技术追求较高,可反问面试官公司针对某个问题的做法。
在意氛围,可问多久搞一次技术分享。
了解未来同事水平,可问公司项目如何区分用vue还是用react。
关注工作内容,可详细问公司的业务和经济链路、盈利模式。
