简历拷打

Q:1. 自我介绍

Q:2. 讲讲你实习期间的工作和挑战阿鲁_黑线

Q:3. 简历里提到的提升页面加载速度和用户体验,具体有哪些衡量指标(LCP、FCP等)?是怎么测量的?阿鲁_汗

Q:4. 介绍项目(问得非常深,不太会的千万别写上去阿鲁_汗

Q:5. 这个无限画布是基于 DOM 还是 Canvas 实现的?用了什么库?为什么要选这个,原因

八股

Q:6. 从输入 URL 到页面渲染完成,中间发生了什么?(全流程)阿鲁_高兴

A
  1. URL 解析。

  2. DNS 解析:将域名转换为 IP 地址。

  3. 建立 TCP 连接(三次握手)。

  4. 发送 HTTP 请求。

  5. 服务器响应:返回 HTML。

  6. 浏览器解析渲染:解析 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 层。握手过程涉及:

  1. 客户端发送支持的加密算法列表。

  2. 服务端返回证书(包含公钥)。

  3. 客户端验证证书。

  4. 利用公钥加密生成一个随机数(预主密钥)发给服务端。

  5. 双方利用这个随机数生成对称加密的密钥,之后的数据传输使用对称加密。

Q:11. 浏览器是单进程还是多进程?JS 线程和渲染线程的关系?阿鲁_欢呼

A

现代浏览器是多进程的(如浏览器主进程、渲染进程、插件进程等),一个 Tab 页通常对应一个渲染进程。但在渲染进程内部,JS 引擎线程是单线程的,且与 GUI 渲染线程是互斥的(JS 执行时会阻塞页面渲染)。

Q:12. 讲讲事件循环(Event Loop),宏任务和微任务的执行顺序阿鲁_高兴

手写

Q:13. 代码输出题:关于 this 指向(为什么是这个结果,流程阿鲁_汗

Q:14. 手写代码题:手写 Promise.all阿鲁_喷血

Q:15. 一道算法题:两个数组去重( 在飞书里面写,ACM模式纯手敲