高频面试题 - 本人亲历大厂面试总结

暑期大厂面了十余次,我把八股里面拷打最多的拿出来总结一下,可以随便看看

1. 浏览器渲染流程

浏览器渲染

  • 浏览器接收url并开启一个新进程(这一部分可以展开浏览器的进程与线程的关系)
  • 浏览器解析输入的 URL,提取出其中的协议、域名和路径等信息。(这部分涉及URL组成部分)
  • 浏览器向 DNS 服务器发送请求,DNS服务器通过 多层查询 将该 域名 解析为对应的 IP地址 ,然后将请求发送到该IP地址上,与 服务器 建立连接和交换数据。(这部分涉及DNS查询). 浏览器缓存 -> 本地DNS -> 根 -> 顶级 -> 权威
  • 浏览器与服务器建立 TCP 连接。(这部分涉及TCP三次握手/四次挥手/5层网络协议)
  • 浏览器向服务器发送 HTTP 请求,包含请求头和请求体。(4,5,6,7包含http头部、响应码、报文结构、cookie等知识)
  • 服务器接收并处理请求,并返回响应数据,包含状态码、响应头和响应体。
  • 浏览器接收到响应数据,解析响应头和响应体,并根据状态码判断是否成功。
  • 如果响应成功,浏览器接收到http数据包后的解析流程(这部分涉及到html - 词法分析,解析成DOM树,解析CSS生成CSSOM树(样式树),合并生成render渲染树(样式计算)。然后layout布局,分层,调用GPU绘制等,最后将绘制的结果合成最终的页面图像,显示在屏幕上。这个过程会发生回流和重绘)。
  • 连接结束 -> 断开TCP连接 四次挥手

2. js异步,promise 事件循环

简单

3. 浏览器缓存策略

强缓存(不会向服务器发送请求,直接用缓存)

机制

  • 浏览器在加载资源时,先查看缓存里有没有符合条件的资源。
  • 如果有,直接用本地缓存,不会发请求到服务器
  • 即使断网也能用缓存里的数据。

常见的控制方式

  • Expires (HTTP/1.0)
  • Cache-Control (HTTP/1.1)

协商缓存(会向服务器发送请求,但可能不下载资源

机制

  • 资源过期后,浏览器向服务器发一个请求,询问:我这有个缓存版本,可以用吗?
  • 如果服务器说可以(返回 304 Not Modified),浏览器继续用缓存的版本。

常见的控制方式

  • Last-Modified / If-Modified-Since
  • ETag / If-None-Match

4. 浏览器的存储

特性

Cookie

localStorage

sessionStorage

IndexedDB

存储大小

4KB 左右

5MB 左右

5MB 左右

几十MB甚至更多

生命周期

可设置过期时间(否则默认关闭浏览器过期)

除非主动删除,否则一直存在

页面关闭就没了

持久存储

作用域

同源 + 路径限制

同源

同源 + 当前窗口/标签页

同源

是否随HTTP请求发送

适合场景

登录状态、用户跟踪

用户长期保存数据(如主题偏好)

临时保存(如表单未提交时)

大量数据、离线应用(如Todo应用)

5. 跨域

  1. 同源策略:两个 URL 的协议、域名和端口都相同,限制js脚本、传统请求、数据访问三大问题
  2. 跨域解决:

6. 浏览器安全

威胁类型

说明

XSS攻击(跨站脚本攻击)

恶意脚本注入页面,被用户执行

CSRF攻击(跨站请求伪造)

利用用户的登录态,诱导用户发送恶意请求

点击劫持(Clickjacking)

页面被透明iframe覆盖,引诱点击

中间人攻击(MITM)

拦截篡改用户与服务器之间的数据传输

Cookie劫持/窃取

非法获取或伪造用户Cookie,冒充用户

1. XSS攻击:

在网站注入恶意脚本,让其他用户浏览时执行,窃取敏感信息(如cookie)或者进行非法操作

○ 存储型 XSS 攻击:黑客将恶意代码储存到存在漏洞的服务器,浏览器访问含有恶意代码的页面,浏览器上传用户信息到服务器。

○ 反射型XSS攻击:用户将一段含有恶意代码的请求提交给 Web 服务器,Web 服务器接收到请求时,又将恶意代码反射给了浏览器端,这就是反射型 XSS 攻击。

○ 基于 DOM 的 XSS 攻击:不牵涉到页面 Web 服务器,在 Web 资源传输过程或者在用户使用页面的过程中修改 Web 页面的数据。 比如通过网络劫持在页面传输过程中修改 HTML 页面的内容,这种劫持类型很多,有通过 WiFi 路由器劫持的,有通过本地恶意软件来劫持的。

防范措施

○ 输入内容严格 转义/过滤(如HTML、JS、URL编码)

○ 使用 Content-Security-Policy(CSP安全策略)限制脚本来源

○ HttpOnly设置Cookie,避免被JS读取

2. CSRF跨域请求伪造

利用受害者在已登录的情况下身份验证的权限,对受害者进行操作。攻击者通过伪装的请求来执行未经授权的操作,比如修改密码、发送电子邮件或进行资金转账等

防范措施

○ 设置 CSRF Token(每次请求携带验证令牌)

○ 检查 Origin / Referer 来源

○ 对重要操作使用 二次确认

○ Cookie设置 SameSite 属性7. https和http

7. https和http

  • HTTP:无连接、无状态,明文传输
  • HTTPS:HTTP+SSL/TLS协议

HTTP 与 HTTPS 区别

  • 加密: HTTPS 是 HTTP 协议的更加安全的版本,通过使用SSL/TLS进行加密传输的数据;
  • 连接方式: HTTP(三次握手)和 HTTPS (三次握手+数字证书)连接方式不一样;
  • 端口: HTTP 默认的端口是 80和 HTTPS 默认端口是 443

保证安全性

  • 加密传输:HTTPS使用SSL/TLS协议对HTTP报文进行加密,这种加密过程结合了对称加密和非对称加密,确保数据的保密性和完整性。
  • 身份验证:HTTPS通过数字证书进行身份验证,确保通信双方的真实性。在建立HTTPS连接时,服务器会提供数字证书来证明自己的身份。如果验证通过,客户端就可以信任服务器,并继续与其进行安全的数据传输。这有效防止了被恶意伪装的服务器攻击。
  • 数据完整性保护:在传输数据之前,HTTPS会对数据进行加密,并使用消息摘要(hash)算法生成一个摘要值。在数据到达接收端后,接收端会使用相同的算法对接收到的数据进行摘要计算,并与发送端的摘要值进行比较。如果两者一致,说明数据在传输过程中没有被篡改。如果不一致,通信双方应重新进行验证或中断连接。

8. https连接过程

(也就是拿非对称加密对称,保证非对称的密钥安全)

HTTPS通过TLS协议来建立安全连接,大致过程是:

➡️ 1. 客户端发起请求

浏览器向服务器发起 HTTPS 请求,并说明支持的加密算法。

➡️ 2. 服务器返回证书

服务器返回包含公钥的数字证书(CA机构签发)。

➡️ 3. 客户端验证证书

检查证书是否有效(未过期、可信颁发机构、未吊销等)。

验证通过后,浏览器生成一个随机对称密钥(Session Key)。

➡️ 4. 客户端加密密钥并发送

客户端用服务器的公钥加密这个对称密钥,发送给服务器。

➡️ 5. 服务器解密密钥

服务器用私钥解密出这个对称密钥。

➡️ 6. 建立安全通道

双方以后使用这个对称密钥进行加密通讯(效率高)。

简图:

浏览器 ——> 服务器证书(含公钥)
浏览器(验证证书)——> 随机对称密钥(用公钥加密)
服务器(用私钥解密)——> 双方用对称密钥加密通讯

9. tcp和udp

TCP

UDP

可靠性

可靠

不可靠

连接性

面向连接

无连接

报文

面向字节流

面向报文

效率

传输效率低

传输效率高

双共性

全双工

一对一、一对多、多对一、多对多

流量控制

滑动窗口

拥塞控制

慢开始、拥塞避免、快重传、快恢复

传输效率

10. http状态码

以下是一些常见的HTTP状态码及其代表的意思:

1. 1xx(信息性状态码):

○ 100 Continue:请求已收到,继续处理。

2. 2xx(成功状态码):

○ 200 OK:请求成功。

○ 201 Created:请求已经被实现,并因此创建了一个新的资源。

○ 204 No Content:服务器成功处理了请求,但没有返回任何内容。

3. 3xx(重定向状态码):

○ 301 Moved Permanently:永久重定向,资源位置变了。

○ 302 Found:临时重定向,资源临时移动到其他位置。

○ 304 Not Modified:资源未修改,走缓存(跟协商缓存有关)。

4. 4xx(客户端错误状态码):

○ 400 Bad Request:服务器无法理解请求。

○ 401 Unauthorized:请求要求进行身份验证。

○ 403 Forbidden:服务器理解请求,但拒绝执行它。

○ 404 Not Found:服务器无法找到请求的资源。

○ 405 Method Not Allowed:请求中指定的方法不被允许。

5. 5xx(服务器错误状态码):

○ 500 Internal Server Error:服务器内部错误。

○ 502 Bad Gateway:服务器作为网关或代理时收到无效响应(常见于反向代理、Nginx)。

○ 503 Service Unavailable:服务器暂时过载或维护,无法处理请求。

○ 504 Gateway Timeout:网关超时,代理服务器等待上游服务器响应超时。

11. react diff算法

react fiber前,传统的diff算法:

  • 把树形结构按照层级分解,只比较同级元素。
  • 列表结构的每个单元添加唯一的 key 属性,方便比较。
  • React 只会匹配相同 class 的 component(这里面的 class 指的是组件的名字)
  • 合并操作,调用 component 的 setState 方法的时候, React 将其标记为 dirty 到每一个事件循环结束, React 检查所有标记 dirty 的 component 重新绘制.
  • 选择性子树渲染。开发人员可以重写 shouldComponentUpdate 提高 diff 的性能。

react fiber后

从 React 16 开始,底层 Diff 算法升级为 Fiber 架构,可以做到:

  1. 可中断的渲染:Fiber 允许将大的渲染任务拆分成多个小的工作单元(Unit of Work),使得 React 可以在空闲时间执行这些小任务。当浏览器需要处理更高优先级的任务时(如用户输入、动画),可以暂停渲染,先处理这些任务,然后再恢复未完成的渲染工作。
  2. 优先级调度:在 Fiber 架构下,React 可以根据不同任务的优先级决定何时更新哪些部分。React 会优先更新用户可感知的部分(如动画、用户输入),而低优先级的任务(如数据加载后的界面更新)可以延后执行。
  3. 双缓存树(Fiber Tree):Fiber 架构中有两棵 Fiber 树——current fiber tree(当前正在渲染的 Fiber 树)和 work in progress fiber tree(正在处理的 Fiber 树)。React 使用这两棵树来保存更新前后的状态,从而更高效地进行比较和更新。
  4. 任务切片:在浏览器的空闲时间内(利用 requestIdleCallback思想),React 可以将渲染任务拆分成多个小片段,逐步完成 Fiber 树的构建,避免一次性完成所有渲染任务导致的阻塞。

👉 Fiber 主要是为了解决大页面卡顿的问题,但核心的 Diff 思想还是类似的!

#牛客创作赏金赛#
全部评论
点赞 回复 分享
发布于 04-28 01:18 北京
香喷喷的八股
点赞 回复 分享
发布于 04-27 23:26 北京
佬最后去哪啦
点赞 回复 分享
发布于 04-27 23:06 山西

相关推荐

暑期是进不了大厂了想问问前端友友们 ,后面应该如何沉淀自己,我想秋招再冲一下尤其是八股,应该抓哪一块是重点,理解到什么程度呢,要学到什么深度才能抗住拷打。还有场景题如何去准备。期待友友们的解答。
命烈焰带我飞走:找个中厂小厂先看看吧,去了熟悉熟悉项目,简历上扒点东西,之后刷刷sobb上百度美团快手的日常实习,流程都比较快轮次也少,别给自己太大压力,一步一步来,先不用想着暑期,转正,秋招那些事情,另外如果可能的话可以关注下面试时候的形象,穿搭,环境这些,其实实习主要就是看个眼缘,看着好看声音好听其实加分不少..八股这些不要死记硬背,挨个拿去问问chatgpt,这个东西做出来是为了解决什么问题,有啥效果,自己有想法有个模糊的概念就可以了,人家也知道你是学生,实习生没有什么kpi,放你去面都是希望能把你招进去的,场景题算法题没做过你可以边试着写边跟面试官说你的想法思路,也可以直说没见过让他们给你提示,反正最后都是与或非顺序分支循环存取值那套。总之建议是别为了秋招..出去旅旅游放松放松,少投几家少背八股多写写代码
点赞 评论 收藏
分享
评论
4
22
分享

创作者周榜

更多
牛客网
牛客企业服务