常见问题 ######## 网络 ==== 大家经常说的四层、七层,分别指的是什么? TCP 三次握手是什么,TIME_WAIT 是怎么发生的?CLOSE_WAIT 又是什么状态? Linux 下的 epoll 解决的是什么问题?如何使用 epoll 写出高性能的网络程序? 什么是网络事件驱动模型?Reactor 模式又是什么? 索引 ==== * Mongo 索引与 MySQL 索引的实际区别? URL请求 ======= 输入 URL,从一个请求到响应都发生了什么事:: 1. 常规的网络交互过程是从客户端发起网络请求,用户态的应用程序(浏览器)会生成 HTTP 请求报文、并通过 DNS 协议查找到对应的远端 IP 地址。 2. 在套接字生成之后进入内核态,浏览器会委托操作系统内核协议栈中的上半部分,也就是 TCP/UDP 协议发起连接请求。 3. 然后经由协议栈下半部分的 IP 协议进行封装,使数据包具有远程定位能力。 4. 经过 MAC 层处理,找到接收方的目标 MAC 地址。 5. 最终数据包在经过网卡转化成电信号经过交换机、路由器发送到服务端,服务端经过处理拿到数据,再通过各种网络协议把数据响应给客户端。 6. 客户端拿到数据进行渲染。 7. 客户端和服务端之间反复交换数据,客户端的页面数据就会发生变化。 缓存有:: 1. 路由器缓存、 2. DNS 缓存、 3. 浏览器缓存、 4. Service Worker、 5. Memory Cache、 6. Disk Cache、 7. Push Cache、 8. 系统缓存等。