一面电话面,二面现场面试的。整个过程都是循序渐进的,没有一开始就很难的问题(除了直接问源码/原理这种)
据了解阿里健康90%的项目前端技术栈是react,但是我的简历是vue技术栈和小程序比较多,所以很少涉及到react相关的部分。以下是一些面试题
Vue
- Vue里template到render经过哪些步骤
- Object.defineProperty有哪些缺陷,Vue3为什么要用proxy重构
- 修改data里绑定的一个变量的值,页面有没有立即更新,为什么要这样做
- vuex的实现原理
- vue-router的实现原理
详细描述从浏览器输入一个URL地址到页面渲染的整个过程
- http req有哪些参数,分别做什么用的,服务端接收到这些参数会如何做处理
- res header头有哪些(说出具体作用)
- 怎么做缓存,解释下http缓存机制,什么是强缓存/协商缓存,他们优先级是怎样的
- 什么情况下浏览器回返回204/304/301/500等状态码
- http2有哪些新特性
- http2多路复用和http1 keep-alive的区别
- 简单问了下spdy和http2的区别
- js加载如何不阻塞dom
- html css js这些是怎样被解析的
- 一些加载的细节
PWA
- PWA有哪些优势,你最喜欢其中哪些功能
- Service Worker特征
- Service Worker怎么做优化
- Service Worker是怎么更新的
css
- css实现一个左边定宽,右边自适应的布局,说出你知道的所有的方式
- 垂直居中的几种方式,分别用在什么场景
- 哪些属性可以开启GPU加速
css问题不多,大概过了一下就
谈项目
- jq重构为什么选择vue技术栈,技术选型是怎么考虑的
回答是从渐进式、侵入性低、方便做类似微前端方面考虑的
- 怎么理解微前端,有哪些使用场景,解决了什么问题
- webpack怎么优化打包速度,如何优化项目
- 谈到了团队会做codereview,然后问 codereview你会注重哪些地方
- 在聊codereview的时候引入了一个副作用的概念,然后开始聊函数式
函数式
- 函数式优缺点
- 什么是纯函数/副作用
- 柯里化的作用
- 柯里化和闭包的关系
- memoize(or memorize?)有哪些业务场景可以用到
- 怎么理解组合 compose
- 实现一个compose(图方便,用reduce写的的,跟redux的compose实现类似)
- compose内部出错返回error了怎么处理
- 什么是函子
- 前端跟服务端交互,ajax一定是有副作用的,怎么处理
- 解释下什么是monad
- 后边不会了就没有再继续问(我函数式了解不多)
小程序
- 小程序用taro相比原生有哪些好处
- 为什么要用taro
- 提到了async -> 小程序原生里怎么使用async
- generator+co的形式是怎么实现async的
- generator和promise的区别和联系
- generator怎么实现异步操作(不是很明白,我理解generator跟异步没关系)
- 小程序为什么是双线程架构,他是怎样考虑的
- 小程序渲染层是webview,那么原生组件是怎么渲染到页面上来的
- 为什么要设计原生组件,相比纯JavaScript有哪些好处
- 小程序和客户端的通信原理(JSBridge方案)
跟业务/简历无关的面试题
- 设计一个扫码登录的流程(前端),包括跟后端是怎样交互的,接口的设计。可以用UML或者其他自己擅长的任意方式描述
- 不用eval函数对一个四则运算求值。例如:"2+3*4/6-1"
剩下的大部分时间都在聊业务相关和个人发展,跳槽期望之类的了