文章目录
计算机网络
OSI七层模型和TCP/IP四层模型
浏览器输入url后的过程 , 输入一个用https协议的url到呈现出页面的过程
1. DNS解析 获得IP地址
- DNS有迭代和递归查询。
- 如果只知道IP地址是不行的,还要知道MAC地址(物理地址),ARP协议(IP地址->物理地址)。
2. 建立TCP连接
- 三次握手,为什么?(因为会导致已经失效的连接请求的报文段又传到了服务端。并且两次握手也不能保证双方都互换了序列号)
3. 发送HTTP请求
- HTTP请求报文
报文首部
1. 请求行(方法,url,HTTP版本) 方法:post(增),delete(删),put(改),get(查),head(查询首部信息) HTTP版本:HTTP/0.9 HTTP/1.0 HTTP/1.1(长连接),HTTP/2.0 2. 请求首部字段
报文主体
4. IP路由
- 内部网关协议(RIP,OSPF) - 外部网关协议(BGP)
5. 服务器响应请求
- 响应报文 报文首部: 1. 状态行:HTTP版本,状态码,状态短语(HTTP1.1 200 OK) 状态码:1xx 信息类状态码。2xx 成功状态码。3xx 重定向。 4xx 客户端错误。5xx 服务器错误。 2. 信息首部 报文主体:
6. 浏览器解析渲染页面
7. 断开连接
- TCP四次挥手,半关闭。
http协议各个版本
http /1.0与1.1 : (1.1版本加入了持久连接,一个TCP连接可以允许多个HTTP请求;)
为了解决1.1版本利用率不高的问题,提出了HTTP/2.0版本。
- 增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题(HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级);
- 头信息压缩
HTTP 协议不带有状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如Cookie和User Agent,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。
HTTP/2 对这一点做了优化,引入了头信息压缩机制(header compression)。一方面,头信息使用gzip或compress压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。- 另外也增加服务器推送的功能,即不经请求服务端主动向客户端发送数据。
HTTP与HTTPS
问题:
http和https的区别
https是对称加密还是非对称加密
详细说下ssl连接的建立过程
然后又问了https,是如何验证证书有效的呢?
TCP与UDP的区别
- TCP面向连接 ,UDP无连接。
- TCP首部开销大(20B),UDP首部开销小(8B)。
- TCP有流量控制(滑动窗口)和拥塞控制(慢启动,拥塞避免,快重传,快恢复)。
- TCP面向字节流(分块封装到多个TCP段中),UDP面向数据报(封装到单个UDP数据报中传送)。
- TCP可靠传输(适用于文件传输,远程登陆),UDP实时,高效(视频,即时通信)。
- TCP点到点,UDP支持一对一,一对多,多对多
time_wait的作用
如果第四次的ACK服务器没有收到,那么服务器就会重传FIN。一来一回,2个MSL。
操作系统
进程和线程的区别
- 资源角度:进程是资源分配的最小单位,线程是处理机调度的最小单位。
- 系统开销:进程切换系统开销大(有独立的代码段和数据段),线程切换开销小(共享进程资源,有独立的栈空间)
- 健壮性:一个进程崩溃,不会对其他进程产生影响;而一个线程崩溃,会让同一进程内的其他线程也死掉。(一个进程可以有多个线程)
- 通信:进程间通信比较复杂,而同一进程的线程由于共享代码段和数据段,所以通信比较容易。
参考资料
进程间通信方式
- 管道
- 消息队列
- 共享内存。共享内存实现方式
- 套接字socket(不同主机进程之间)
线程间通信方式
- 临界区
- 互斥量
- 信号量(有限资源)
- 事件(信号)
用户态和内核态
死锁概念,发生条件,解决
进程同步机制(信号量)
C++基础
多态
多态的表现形式:
- 父类指针可以引用派生类指针
- 父类对象可以引用派生类对象
多态实现:虚函数表
学习链接
重载重写区别
重载:方法名相同,返回值和函数参数可以不同(多态的体现)
重写:也叫覆盖,覆盖原来的方法,返回值,函数名,函数参数都要与原来的同。
参考