简历拷打
Q:1. 自我介绍
Q:2. 讲讲你实习期间的工作和挑战
Q:3. 简历里提到的提升页面加载速度和用户体验,具体有哪些衡量指标(LCP、FCP等)?是怎么测量的?
Q:4. 介绍项目(问得非常深,不太会的千万别写上去
Q:5. 这个无限画布是基于 DOM 还是 Canvas 实现的?用了什么库?为什么要选这个,原因
八股
Q:6. 从输入 URL 到页面渲染完成,中间发生了什么?(全流程)
A
URL 解析。
DNS 解析:将域名转换为 IP 地址。
建立 TCP 连接(三次握手)。
发送 HTTP 请求。
服务器响应:返回 HTML。
浏览器解析渲染:解析 HTML 生成 DOM 树,解析 CSS 生成 CSSOM 树,合并生成渲染树(Render Tree),进行布局(Layout)和绘制(Paint)。
Q:7. 细问 DNS 解析过程,如果是递归查询是怎么查的?
A
先查浏览器缓存 -> 系统 hosts 文件 -> 本地 DNS 服务器。如果没找到,本地 DNS 服务器会向根域名服务器查询,一级一级向下(顶级域名服务器 -> 权威域名服务器)直到找到 IP。
Q:8. HTTP 1.1 和 HTTP 2.0 有什么区别?
A
主要是 HTTP 2.0 支持多路复用(Multiplexing),可以在一个 TCP 连接中并发处理多个请求,解决了队头阻塞问题;还支持头部压缩(Header Compression)和服务器推送。
Q:9. 同一个页面下有6个请求,在 HTTP 2.0 下会建立几条 TCP 连接?原因
A
只需要建立1条 TCP 连接(因为支持多路复用)。
Q:10. HTTPS 是怎么保证安全的?SSL/TLS 握手过程是怎样的?
A
HTTPS 在 HTTP 下加入了 SSL/TLS 层。握手过程涉及:
客户端发送支持的加密算法列表。
服务端返回证书(包含公钥)。
客户端验证证书。
利用公钥加密生成一个随机数(预主密钥)发给服务端。
双方利用这个随机数生成对称加密的密钥,之后的数据传输使用对称加密。
Q:11. 浏览器是单进程还是多进程?JS 线程和渲染线程的关系?
A
现代浏览器是多进程的(如浏览器主进程、渲染进程、插件进程等),一个 Tab 页通常对应一个渲染进程。但在渲染进程内部,JS 引擎线程是单线程的,且与 GUI 渲染线程是互斥的(JS 执行时会阻塞页面渲染)。
Q:12. 讲讲事件循环(Event Loop),宏任务和微任务的执行顺序
手写
Q:13. 代码输出题:关于 this 指向(为什么是这个结果,流程
Q:14. 手写代码题:手写 Promise.all
Q:15. 一道算法题:两个数组去重( 在飞书里面写,ACM模式纯手敲