面试通常注意这么几个方面
面试应该搞清楚「为什么」而不是停留在「是什么」。此外面试不应该问概念题或太过偏离实际应用的题目,只有实际应用会遇到的题目才能真实反映面试者解决问题的能力。
前端面试通常注意这么几个方面:
1.沟通能力2.基础知识3.解决实际问题的能力4.知识边界
沟通能力面看面试面试者对所有问题的视角,阐述是否准确容易理解。这是我们团队非常重要的一个指标。
基础知识面
具体基础知识方面,我会重点考察:闭包es6 - class比如说:类的静态成员和动态成员的区别?重点考察多态和类型的设计。比如说mixin和decorator等。
map/reduce/filter/find这些常用的函数 promise和async/await 基础算法(比如说什么链表,如何实现一个hash算法, 归并排序的复杂度) 前端常用设计模式(比如说subscribe,observable等) 进程和线程的区别(什么线程同步)
解决问题面
具体到解决实际问题的能力, 我会涉及:组件接口设计 (比如设计一个表单组件/Picker) —— 基于 react 或 vue。针对面试人员原公司业务逻辑提具体的问题具体的工具(gulp/webpack/rollup) 考察 具体的知识点,主要是希望面试者具有:根据自身团队的实际情况选择工具的能力
给一个实际问题, 问解决方案
知识边界
面知识边界主要是为了确定面试人员的知识范围。知识边界我会问:考察一个稍微复杂一点的shell知识点(如awk,xargs等命令) 问一个数据库相关知识中稍微有深度一点的(如:什么是锁) 问一个缓存先关的问题(如:什么是缓存穿透) React/Vue的virtual dom实现原理 js新特性掌握深度(如symbol-observable, 什么是web-asm)前端方向把握(pwa/electron/react-native node.js的学习情况
以下列出常见面试题:
1.⽤过Symbol吗,什么场景⽤2.迭代器 是什么,怎么⾃定义迭代(for of),异步迭代3.Promise A+规范,⼿写all、race、any、allsettled4.⽤过⽣成器吗,什么场景⽤5.推测async/await的原理,⽤⽣成器模拟下6.宏任务和微任务,node和浏览器差异7.正则表达式,NFA和DFA(加分项)8.CMD和UMD,ES Module的差别9.V8的GC过程,堆栈区别10.http缓存机制,CDN原理11.https,http2,http3(加分项)12.块级元素和⾏内元素差别,⾼度塌陷,BFC13.flex和grid布局14.元素层级顺序15.css3动画,渐变,滤镜(加分项),FLIP动画(加分项)16.css变量,⾃定义变量(加分项)17.canvas和svg⽐较18.node端web框架,express,koa,egg/nest,洋葱模型,AOP,IOC(加分项)19.流的概念,怎么处理20.异步和同步API,libuv(加分项)21.Worker,thread worker(加分项)22.typescript基础,联合类型,索引类型,枚举类型,逆变协变(加分项),类型推导,接⼝和类型的区别,declare作⽤23.webpack⼤概⼯作原理,插件原理,module federation(加分项),vite为什么快(加分项)24.Vue响应式原理,patch流程,composition api(加分项),Vue3的改进点,vue-router原理25.React hook原理,fiber做了什么(加分项),如何diff,⽐较redux和mobx26.单点登录原理,权限控制怎么做(加分项)27.微前端(加分项),WebComponent(加分项)28.CI/CD怎么做,git操作,容器部署特点,怎么做监控,线上问题排查思路