计算机网络知识部分:
1、7层结构
从上向下:应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
2、TCP和UDP的区别?
3、什么是HTTP协议?
超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
4、TCP和HTTP的关系?
TCP是传输层,HTTP是应用层。
TCP是底层通讯协议,定义的是数据传输和连接方式的规范
HTTP是应用层协议,定义的是传输数据的内容的规范
HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCP
HTTP是要基于TCP连接基础上的,简单的说,TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,即实际应用上来的。
5、三次握手是怎样的过程?
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
两次握手为什么不行:A发送的报文在某些网络节点长时间滞留了,延误到达B,B以为A发出的新请求,于是向A发出确认,同意建立连接,如果只有两次,B确认过后新的连接就建立了,由于A没有发出请求,所以不会发送数据,B在一直等待,会浪费很多资源。
结束时4次握手:6、TCP如何确认对方收到了消息?
就俩办法,你自己的包里带长度,服务器端首先接收到长度,然后不停的按长度接收,接收满那些长度,则此次发送完毕,或者就是包尾结束符,不停的收,收到结束符则视作此次发送完毕。
数据库部分知识:
1、mysql锁
(1)、表级锁定(table-level)
获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。最大负面影响是出现锁定资源争用的概率也会很高,使并发效率不高。
开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
(2)、行级锁定(row-level)
发生锁定资源争用的概率也最小,虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。
开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
(3)、页级锁定(page-level)
开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
适用:从锁的角度来说,表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用;而行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统。
2、索引
索引是对数据库表中一个或多个列的值进行排序的结构。
一般在查询时经常使用的字段添加索引。
索引是用来定位的。
索引的使用:
create index index_name on table_name(column_name) ;
create index idx_a on aaa (a); //aaa是表名,a是列名
索引一般是在查询时由数据库优化器自动进行判断是否使用,就是说就算你在某个列上创建了索引,当你在查询这个表时数据库也不一定会使用索引,因为有时候需要查询的范围比较大,如全表查询,这时数据库优化器会去判断使用索引和不使用索引哪个效率高,当然是不使用索引效率高啦!所以说一般查询时是不要指定索引的,不过索引还是得创建的!
虽说查询时不推荐指定索引,但还是可以指定的:SELECT * FROM stuMarks(INDEX=IX_writtenExam) WHERE writtenExam BETWEEN 60 AND 9
3、数据库查询优化(看最下面总结)
总结:应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
其次,尽量避免以下情况: