面试备战录

12 阅读5分钟

1、什么是进程什么是线程?

  • 进程(Process):是资源分配的最小单位;
  • 线程(Thread):是程序执行的最小单位。

以浏览器为例:

  1. 浏览器主程序启动后会创建一个主进程(Browser Process),它管理整个浏览器。
  2. 每打开一个 Tab 页面,浏览器主进程会为该页面创建一个渲染进程(Renderer Process),它是一个子进程
  3. 每个子进程(如渲染进程、网络进程)内部包含多个线程(如 JS 线程、渲染线程、网络线程等)。
  4. 子进程之间不能直接访问彼此的线程,只能通过主进程或者浏览器提供的**进程间通信(IPC)**来通信。

2、输入一个 URL 到浏览页面渲染中间过程发生了什么?

答:从输入URL到页面渲染,大致可分为7大步骤:

  1. URL解析与DNS的查询
  • 用户在地址栏输入网址(如 www.xxx.com)
  • 浏览器会进行:
    • 检查缓存(DNS缓存、系统缓存、路由缓存)【问题1】
    • 若无缓存则向DNS服务器发送请求,解析出地址
  1. TCP链接(三次握手🤝)
  • 通过 DNS 拿到 IP 后,浏览器会发起 TCP 连接
  • TCP 是一种可靠的传输协议(建立连接需要三次握手 🤝)
  1. 发送 HTTP/HTTPS 请求
  • TCP 连接建立后,浏览器向服务器发送 HTTP 请求(GET / POST)
  • 如果是 HTTPS,还会先进行 SSL/TLS 握手,加密传输
  1. 服务器响应 HTML 文档
  • 服务器接收到请求后,生成/读取页面内容,返回响应:
HTTP/1.1 200 OK
Content-Type: text/html
...
  • 浏览器开始接收 HTML 数据流
  1. 浏览器渲染流程
  • HTML 解析 → 构建 DOM 树(文档对象模型)
    • 浏览器的 渲染引擎(Blink) 开始自上而下解析 HTML
    • 构建成 DOM Tree(文档树)
  • 加载 CSS → 构建 CSSOM(样式规则树)
    • 遇到 link、style 标签开始解析 CSS
    • 并构建成 CSSOM(CSS Object Model)
  • 执行 JavaScript(由 JS 引擎 V8 执行)
    • 遇到 script 标签,默认会暂停 HTML 解析,优先执行 JS(除非有 async 或 defer)
    • JS 可修改 DOM/CSSOM,影响后续渲染
  • DOM + CSSOM → 渲染树(Render Tree)
    • 浏览器将两棵树合并,生成只包含可见元素的 渲染树
  • 布局(Layout)
    • 又叫 Reflow,计算每个元素的位置和大小
  • 绘制(Paint)
    • 把元素绘制成像素(颜色、边框、文字等)
  • 合成(Composite)
    • 多层(图层)合成一张最终的页面画面,交给 GPU 渲染显示
  1. 页面展示完成(DOMContentLoaded / load 事件触发)
  • DOM 解析完后触发 DOMContentLoaded
  • 所有资源加载完后触发 window.onload
  1. 后续异步资源处理
  • 图片、视频、字体等异步加载
  • 用户交互事件触发(滚动、点击等)
  • JS 执行异步逻辑(比如 Ajax、setTimeout)

问题1:这些缓存是在哪存放在哪呢?工作流程是怎样的?

答:浏览器要先把域名解析成 IP 地址,这一步是 DNS 解析。为了加快解析速度,系统会用多个层级的缓存机制。 DNS 解析过程中的缓存层级(从上到下,依次检查):

  • 浏览器 DNS 缓存: 放置在浏览器内存中,通常几分钟到几小时;
  • 操作系统缓存: 本地系统(OS 层),由系统控制,可手动清空,这里的系统指的是操作系统如 Window/macOS/Linux
  • 路由器缓存: 本地网络路由器,有路由器决定,路由器会缓存最近访问的域名以加快解析
  • ISP DNS 缓存:这是存放在 运营商的 DNS 服务器,通常遵守 TTL(缓存过期),比如移动、联通、电信
  • 权威 DNS 服务器:域名注册服务商提供,域名注册设置的 TTL(缓存过期)

问题2:描述一下 TCP 连接时的三次握手。

答:TCP 是一种 面向连接的、可靠的传输协议,在客户端和服务器 正式通信之前,必须先建立连接。而建立连接的过程就是所谓的“三次握手”。

  • 第一次: 客户端向服务端发送 SYN 报文(同步序列号标志)(保证自己能发,服务端能收)
  • 第二次: 服务器收到后回复 SYN + ACK 报文(保证自己能发,客户端能收)
  • 第三次: 客户端再次发送 ACK 报文 (为了服务器能确认客户端能收到)

问题3:SSL/TLS 是什么,有什么作用?

答:SSL(Secure Sockets Layer) 和 TLS(Transport Layer Security) 是一种用于实现 网络通信加密 的安全协议。

SSL/TLS 作用:

  • 加密通信内容,防止数据被中间人窃听
  • 验证服务器身份(防止钓鱼网站)
  • 数据完整性保护,防止篡改

SSL/TLS 握手过程(在 TCP 连接建立之后);当使用 HTTPS 时,会在三次握手之后,多出一个SSL/TLS 握手过程,这个过程的目标是:

  • 验证身份(如验证服务器的证书是否可信)
  • 协商加密算法
  • 交换密钥

流程:

  1. 客户端发起 Hello
    • 告诉服务器我支持哪些加密算法
  2. 服务器响应 Hello
    • 附上数字证书(含公钥)+ 选定的加密算法
  3. 客户端验证证书
    • 验证服务器是否可信(如证书是否被伪造)
  4. 客户端生成一个随机密钥(Pre-master key)
    • 使用服务器的公钥加密后发送给服务器
  5. 服务器用私钥解密出密钥
    • 双方得出一个共享对称加密密钥
  6. 后续通信使用该密钥对称加密传输