大厂前端面试题
一面题目
- VueRouter 的原理?(两种路由方式说了一下)
- 对于 History 路由而言,在服务端是如何做路由分发的呢?
- 介绍一下 Vuex 的 Mutation 和 Action 的区别吗?(mutation做同步操作,action一般用于异步)
- 为什么要设计出 Mutation 和 Action 这两个东西?(Action 作为业务逻辑的封装更合适,提供了更大的自由度)
- 计算机网络, 磁盘寻道算法?(FIFO,最短优先,电梯算法)
- 最短寻道时间优先的缺点是什么?(会造成远处的任务饥饿问题)
- 进程和线程的区别(顺便把Chrome为什么从单进程转成多进程架构说了一下)
- 知道哪些进程间通信(IPC)的方式? (主从式、会话式、消息-邮箱机制、管道、共享内存、Unix Domain Socket, Chromium IPC 的源码,内核里面把以前的 ChannelPosix 换成了 ChannelMojo,从而达到线程安全的目的,顺便解释了下线程安全)
- 能不能说说从输入 URL 到页面渲染经历了什么?(DNS 解析过程,HTML词法分析和语法分析,CSS解析, 合成图层、合成线程调用光栅化线程池,生成位图后浏览器进程间通信过程,显卡缓存与显示器的关系)
二面题目
- ES5写一个数组去重(O(n^2)时间)
- 能不能优化? (用新空间一个O(n)时间的)
- 能不能区别开数字和字符串?(indexOf方式)
- 讲一讲 HTTPS 加密(对称加密有AES + CHACHA20, 分组模式以前有 CBC、CTR,TLS1.3 中只剩下 GCM,非对称加密 RSA、ECDHE)
- 怎么握手的呢?(讲了三个版本:传统 RSA、TLS1.2、TLS1.3, 后面也讲了 TLS1.3 的 Session ID、Session Ticket 以及 PSK)
- HTTPS 如何保证数据是否被篡改?(说了下有签名的过程)
- 签名是什么原理(私钥加密,公钥解密,比对哈希摘要)
- 哪些哈希摘要算法(Sha256, Sha384)
- 介绍一下你的项目(说了下项目遇到的挑战,说了这几点: 1. 怎么解决闭包陷阱。2. 通过 EventLoop 解决 transform 失效的问题)
- EventLoop 的理解(宏任务-微任务-UI渲染)
- 如果要在UI渲染之前做一些事情你会怎么办?(启动微任务执行吧)
- requestAnimationFrame 在 EventLoop 中是一个什么位置?(实际上rAF会在UI渲染之前)
- 分离图层做动画有什么好处呢?(通过设置 CSS 的 will-change 可以转换为一个图层,调用 GPU 加速)
- 分离图层会发生重绘吗?(会)那既然重绘,它的好处在哪里?(不会影响其他的图层)
- 说说 computed 属性为什么能够在依赖改变的时候,自己发生变化?( computed 和 watch 公用一个 Watcher 类,在 computed 的情况下有一个 dep 收集依赖,从而达到更新computed属性的效果,computed Watcher如何跟渲染Watcher关联,以及 Vue 在二次收集依赖时用 cleanupDeps 卸载一些无用的 dep)
- webpack 了解?(webpack 的一些优化手段,打包时间方面,预编译、缓存、缩小构建目标,说了大概十个插件,然后打包体积上,JS 和 CSS 的Tree-Shaking 怎么配置)
- CommonJS 为什么不能做 Tree-Shaking ?
- ESModule 既然是编译时加载,那它可以做到运行时加载吗?(webpack 有动态 import 的方式)
- 写过 loader 和 plugin 吗?两者有什么差异吗?(先loader后plugin)