腾讯秋招面经

1、负载均衡中的一致性哈希如何使用的

2、服务器的半同步半异步怎么使用的

主线程异步监听listenfd,当有客户端连接的时候,将连接连接套接字发给工作线程,工作线程也是异步处理,使用libevent将所有套接字监听起来。所以是一个高效的半同步半异步

3、服务器和客户端通讯的步骤

4、数据包在网络中传输的具体过程

应用层将要发送的数据发送到传输层,传输层加上传输层的头部信息之后给到网络层,网络层添加网络层的头部之后,主要是目的ip和源ip,ttl跳数等,将数据包给到网络接口层,这时arp协议开始工作,根据目的ip地址在arp表中查找对应的mac地址,如果在同一个局域网并且arp表中可以查到对应的目的mac,直接发送,如果查不到则arp会给该局域网广播一条arp请求来获取目的mac,然后发送消息并将该目的mac和ip存入到自己的arp表中。如果不在一个局域网中,那么arp就会将连接该局域网的路由器的mac地址封装到mac帧中,由物理层发送出去,然后当路由器接收到该数据包之后,他会进行一个去头部的过程一直到网络层,识别到目的ip,在自己的路由表中查找到合适的next hop的ip地址,将该ip传给网络接口层,arp协议根据ip找到mac地址,封装到mac帧中发送出去,在网络中的路由一直重复这个过程,直到一个路由器发现该数据包的目的ip是自己的局域网中的一台主机时,就不再进行路由,而时直接发送给该主机,这就完成了一次数据包在网络中的传输过程。

5、数据包的传输经过了哪些层

应用层->传输层->网络层->网络接口层

6、粘包的优点和缺点

粘包的概念:发送端的多个tcp数据包被连在一起头尾相接,当成一个数据包发送。或接收端从接收缓冲区中读的时候,将多个数据包一次读出。产生原因:socket缓冲区与滑动窗口的限制,MSS/MTU限制,Nagle算法将多个包结合起来一次发送。

优点:减少网络中细碎的数据包个数,避免对网络造成压力,导致网络拥塞。

缺点:接收端处理的时候比较困难,要进行解包

7、接收端如何处理粘包

  1. 用特殊字符来标识数据包的结束。
  2. 给数据包增加长度字段,置于数据包首部
  3. 规定每个数据包的固定大小,若不足该大小时会造成空间的浪费

8、数据包在网络中路由时如何确定路由的路径,目的ip和源ip会改变吗

arp协议根据ip地址查找对应的mac地址,进行物理层的寻路转发,如果arp表中没有对应的mac地址,则会广播一条mac请求,谁回应他谁就是对应的mac地址,也是一个学习过程,网络层根据ip地址在路由表中查找合适的下一跳,确定之后将下一跳的mac地址封装到链路层头部,进行转发。因此,ip地址是不会改变的,改变的是mac地址,每次都会被更新成下一跳的mac地址。

9、滑动窗口协议,窗口是越大越好吗,为什么

滑动窗口协议是tcp流量控制的一种手段,tcp的内核缓冲区中会维护一个窗口,发送缓冲区维护发送窗口,发送窗口的大小由接收窗口和拥塞窗口的最小值决定;接收缓冲区维护接收窗口,接收窗口的大小一般由接收应用程序读取接收缓冲区的速度决定。当双方通信的时候,接收端在对所接收到的数据包进行确认的时候,会将接收窗口的大小放在tcp头部带给发送端,发送端根据接收窗口的大小结合拥塞窗口的大小,确定自己发送窗口的大小。发送窗口的前沿可以右移,也可以左移(不推荐),后沿只能右移。而且后沿只有在接收到第一个数据包的确认的时候才会右移。接收窗口在接收到数据包后,会先暂存在接收缓冲区,直到应用程序读取该数据包之后才会将其从接收窗口移出。

发送窗口是由拥塞窗口和接收窗口共同决定的,在网络状况允许的情况下,如果接收窗口越大,那么发送窗口也会越大,这样的好处是会提高传输效率,但是有可能会对网络造成压力。

10、tcp为什么是三次握手

如果是两次的话,这时的情况是:客户端发送给服务器一个SYN,服务器在接收到该SYN后,发送一个ACK给客户端,这时服务器进入ESTABLISHED状态,客户端收到ACK后也进入ESTABLISHED状态。在这种情况下,如果客户端第一次发送的连接请求在网络中拥塞了,超过重传时间,客户端又发送了第二个请求,这次很快从到达服务器,建立连接,完成交互,断开连接。当断开之后,第一次的请求才到达服务器,服务器又会重新建立一个和该客户端的连接,然而此时客户端已经关闭了,这将会极大的浪费服务器的资源。

11、IP头部的字段

4位版本号,4位头部长度,8位服务类型,16位总长度,16位标识,3位标志,13位片偏移,8位生存时间,8位协议,16位头部校验和,32位源ip,32位目标ip

12、myisam和innodb的区别

       1、myisam只支持表锁,而innodb支持行锁

       2、innodb支持事务,myisam不支持事务

       3、myisam支持全文索引,innodb不支持全文索引

       4、innodb支持外键,而myisam不支持外键

       5、myisam只支持非聚簇索引,而innodb支持聚簇索引

13、innodb如何实现对事务的支持

事务的话是有它的四个特性:ACID,即原子性,一致性,隔离性,持久性。

原子性:一个事务必须被视为一个不可分割的最小工作单元,整个事务的所有操作要么全部提交成功,要么全部失败回滚,不可能只执行其中的一部分

一致性:数据库总是从一个一致性的状态转换到另一个一致性的状态。

隔离性:通常来说,一个事务所做的修改在最终提交前,对其他事务是不可见的。

持久性:一旦事务提交,那么其所做的修改就会永久保存到数据库中,即使系统崩溃修改的数据也不会丢失

那innodb对ACD的支持是通过redo log和undo log实现的,隔离性是靠锁实现的。

redo log:记录字段被事务修改后的值,由于考虑到效率问题,事务被提交之后并不会立即对数据文件进行写入,而是先暂存在内存中,但redo log却会在事务未被提交时就刷到redo日志文件中,这时如果数据库断电,当恢复后就可以从redo日志文件中读取事务对数据库的修改然后写入磁盘。

undo log:记录字段执行事务前的值,如果事务已经修改了某个记录,但是还未提交的时候突然断电,当恢复后就可以从undo log中回滚到事务未执行之前的状态,确保了原子性。

14、索引的类型

       b+树索引:使用b+树作为存储键值的数据结构,叶子节点存放数据或者数据的地址

       hash索引:采用一种hash算法,将键值转换成新的hash值存储

       在等值查询时,hash索引的优势比较明显,只用经过一次hash函数的计算而不用经过 从跟节点到叶子节点的查询过程。但是范围查找时由于b+树的叶子节点之间是连续的,      所以很高效,只用进行一次I/O,而且hash索引也不能用来对键值进行排序。

15、聚簇索引和非聚簇索引,myisam和innodb索引的区别

       聚簇索引的叶子节点是数据节点而不是索引节点,而非聚簇索引的叶子节点存放的是聚       簇索引的地址,先根据非聚簇索引找到聚簇索引,再根据聚簇索引找到数据。

       myisam中没有聚簇索引,innodb中有聚簇索引。

       myisam中的索引的叶子节点存放的是数据文件的文件指针,而innodb的非聚簇索引   的叶子节点存放的是聚簇索引键值,找到键值后再根据聚簇索引去找到数据。

16、聚簇索引为什么快,如果查询的字段不是建立索引的字段还会高效吗

       聚簇索引只用查找一次就能够获取到数据,而非聚簇索引要查找一遍之后,再进行一次       聚簇索引的查找

17、聚簇索引范围查找为什么快

       b+树的叶子节点会有一个指向下一个叶子节点的指针,找到范围中的第一个数据后,   就可以直接指向下一个节点,而不用再回表重新查找。

18、操作系统的分页机制及其优点

       二级页面映射:

       linux内核中位每个进程维护了一个页面目录,当cpu将线性地址交给mmu去查找物    理地址时,mmu以该线性地址的高十位为下标去页面目录中查找目录项,对应目录项    的高20位指向了一个页面表,低12位的最低位p标志位为1时说明       该页面表在    内存中,为0时说明在磁盘上;找到页面表后,mmu再根据线性地址的次       10位在   该页面表中找到对应的页面表项,页面表项的高20位指向对应的页面,当该页面表项  的最低位为1时表示该页面在内存中,否则在磁盘上,找到对应的页面后,再用该页面       的地址加上线性地址的低十二位就是对应数据在物理内存中的位置

       分页机制:操作系统在将磁盘上的数据加载到内存中时是按页为单位加载的,每个进程       会有一个页表,对应物理内存中的一个页面。

       优点:程序不必连续存放,局部性原理:每次加载一个页到内存中,访问页中的一个数       据时,下次访问的可能是和该数据在同一页的数据,不用多次加载。

19、堆排序的思想

       利用堆进行排序,小顶堆根节点和叶子节点相比肯定是最小的。使用小顶堆排序的思路       为:将待排数据先构造成一个小顶堆,此时整个堆的根节点是整个序列的最小值,将其    和最后一个元素互换,将待排序列长度减一,再调整小顶堆,这时堆顶元素是次小元素,       再和最后一个元素交换,重复这个过程直到剩下一个数据的,就成为有序的一个序列。

20、如何从一个字符串中找到所有不重复的字符,最优的时间复杂度

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值