一 键入网址到显示页面的过程
DNS 解析:浏览器首先检查缓存(浏览器缓存、系统缓存、路由器缓存)中是否有目标网址的 IP 地址。如果没有找到,浏览器通过域名系统(DNS)服务器将 URL 转换为对应的 IP 地址。
TCP 三次握手:在获得目标服务器的 IP 地址后,浏览器与目标服务器建立 TCP 连接,这通过三次握手来完成,确保通信的双方可以成功发送和接收数据。
发送 HTTP/HTTPS 请求:连接建立后,浏览器向服务器发送一个 HTTP 或 HTTPS 请求,通常包括请求的类型(如 GET、POST)、请求头(包括浏览器信息、Cookies等),以及请求的路径(如 /index.html
)。
服务器处理请求:服务器接收到请求后,处理该请求,可能会查询数据库、读取文件或进行后台计算,并将生成的响应内容打包为 HTTP 响应,发送给浏览器。
浏览器接收响应并渲染页面:浏览器接收到服务器的响应后,会解析 HTML 文件,同时加载页面中引用的资源(如 CSS、JavaScript、图片等)。浏览器根据解析结果构建 DOM 树、CSSOM 树,结合这些树来生成渲染树并进行页面布局、绘制,将页面显示给用户。
TCP 四次挥手:当通信结束后,浏览器和服务器通过 TCP 的四次挥手来关闭连接,释放资源。
二 HTTP和HTTPS的区别
数据加密:
- HTTP:数据传输是明文的,没有加密,容易被拦截。
- HTTPS:数据通过 SSL/TLS 协议加密传输,确保数据的机密性。
安全性:
- HTTP:不安全,容易受到中间人攻击、数据泄露等问题。
- HTTPS:安全性高,除了加密数据,还可以验证服务器的身份,防止中间人攻击。
端口号:
- HTTP 使用端口 80。
- HTTPS 使用端口 443。
性能:
- HTTP:由于没有加密过程,通信速度稍快。
- HTTPS:由于需要进行加密解密操作,性能略低于 HTTP,但现代优化(如硬件加速和 TLS 1.3)已显著提高 HTTPS 的速度。
三 对称加密和非对称加密,追问https采用的是哪种
对称加密:使用同一把密钥进行加密和解密,密钥的安全性至关重要。
优点:加密和解密速度快,计算开销小。
缺点:需要安全地传输密钥,否则可能被窃取。
常见算法:AES、DES、3DES。
非对称加密:使用一对密钥(公钥和私钥),公钥用于加密,私钥用于解密。
优点:不需要安全传输密钥,公钥可以公开。
缺点:加解密速度较慢,计算开销大。
常见算法:RSA、ECC。
HTTPS 使用的是 对称加密 和 非对称加密的结合。非对称加密用于在通信开始时安全地传输对称加密的密钥,后续的实际数据传输使用对称加密来提高效率。
四 段式存储的结构,每个段都存什么
段式存储(Segmented Storage)是一种内存管理方式,它将程序的逻辑内存划分为若干独立的段(Segment)。每个段包含特定类型的信息:
代码段(Code Segment):存储程序的可执行代码,也称为文本段。
数据段(Data Segment):存储已初始化的全局变量和静态变量。
堆段(Heap Segment):用于动态分配内存,主要由 malloc、new 等函数分配。
栈段(Stack Segment):用于存储函数调用时的局部变量、参数和返回地址,采用后进先出的存储方式。
五 虚拟内存的目的
扩展物理内存:虚拟内存允许程序使用的内存地址空间大于实际的物理内存,将不常用的数据放入硬盘中的交换空间,只有活跃的数据存放在物理内存中。
内存隔离:每个进程都有独立的虚拟地址空间,保护进程之间的内存不会互相干扰,提升系统稳定性和安全性。
提高内存利用率:通过内存分页或分段机制,将内存分配给实际需要使用的部分,避免浪费。
六 树的应用
文件系统:操作系统中的文件目录结构就是一个典型的树形结构,父节点是目录,叶子节点是文件。
数据库索引:例如 B-tree 和 B+ 树广泛用于数据库索引中,用于快速查找数据。
编译器中的语法树:编译器将代码解析为抽象语法树(AST),用于分析代码结构和执行编译。
网络协议路由:路由算法中使用树结构来表示网络拓扑,选择最优路径。
HTML/DOM 树:网页的结构由 HTML 构成,浏览器解析后形成 DOM 树,供 JavaScript 操作。
决策树:机器学习中的一种模型,常用于分类和回归问题。
二叉搜索树(BST):用于高效的插入、删除和查找操作,适用于动态数据集。