1.http三次握手,状态码,交互细节
2.为什么要三次握手
3.四次挥手,状态码,传输细节,为什么握手要三次,挥手要四次
4.数据链路层怎么传输数据的,展开说说
打包成帧(framing)
: 在每个网络层数据报在传输之前,几乎所有的链路层协议都会将数据报用链路层封装起来。数据链路层从网络层获取数据后将其封装成为 帧
,如果帧太大的话,数据链路层会将大帧拆分为一个个的小帧,小帧能够使传输控制和错误检测更加高效。
帧就是 0 1 序列的封装。
一个帧由 Header、Payload Field、Trailer 组成,网络层数据报就封装在 Payload Field
字段中。根据不同的物理介质,每个帧的结构也不同。帧的组成如下
5.Arp协议中网关怎么去转换ip地址到对应MAC地址的
6.MySQL的行锁怎么实现的
MySQL InnoDB 行锁是通过给索引上的索引项加锁来实现的。
Oracle 是通过在数据块中对相应数据行加锁来实现的。
MySQL InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!
7.MySQL的事务,展开说说
8.MySql 解决死锁
- 合理的设计索引,区分度高的列放到组合索引前面,使业务 SQL 尽可能通过索引
定位更少的行,减少锁竞争
。 - 调整业务逻辑 SQL 执行顺序, 避免 update/delete 长时间持有锁的 SQL 在事务前面。
- 避免
大事务
,尽量将大事务拆成多个小事务来处理,小事务发生锁冲突的几率也更小。 - 以
固定的顺序
访问表和行。比如两个更新数据的事务,事务 A 更新数据的顺序为 1,2;事务 B 更新数据的顺序为 2,1。这样更可能会造成死锁。 - 在并发比较高的系统中,不要显式加锁,特别是是在事务里显式加锁。如 select … for update 语句,如果是在事务里
(运行了 start transaction 或设置了autocommit 等于0)
,那么就会锁定所查找到的记录。 - 尽量按
主键/索引
去查找记录,范围查找增加了锁冲突的可能性,也不要利用数据库做一些额外额度计算工作。比如有的程序会用到 “select … where … order by rand();”这样的语句,由于类似这样的语句用不到索引,因此将导致整个表的数据都被锁住。 - 优化 SQL 和表设计,减少同时占用太多资源的情况。比如说,
减少连接的表
,将复杂 SQL分解
为多个简单的 SQL。
9.http和https的区别
- HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
- 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
- HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
- HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
10.select,poll,epoll介绍下
11.TCP的传输可靠保证
https://zhuanlan.zhihu.com/p/37379780