5-27腾讯面经

输入URL的过程

解析url 通过字符串处理解析出url中的的域名、传输协议、文件路径名等。
生成http消息体,包括请求头和消息头和消息体。
DNS域名解析 查找浏览器缓存和本地DNS服务器缓存,若没有本地DNS查询根域名DNS服务器,根域名DNS服务器返回下一级的域名服务器,层层查找直至找到权威DNS服务器,权威DNS服务器将IP发送给本地DNS服务器,本地DNS服务器再将IP地址返回给浏览器。
获取到IP后将http传输任务交给协议栈,协议栈将http请求封装TCP头部,包括源端口号和目的端口号,序列号,ack,窗口大小以及选项内容等,若此时的HTTP请求消息大小超过了MSS,则在tcp头部封装阶段进行拆解。然后进行IP头部的封装,包括源IP,目的IP,其中目的IP及通过DNS查询到的IP地址,源IP则通过查询路由表确定将哪一块网卡作为源IP。封装MAC头部,包括发送方MAC,接收方MAC,协议类型等,但此时只知道目的IP,并不直到下一跳的MAC地址,因此此时需要通过ARP数据报进行MAC查询,当MAC消息头部的协议类型为0806时表示此时的消息为arp数据报,此时将通过路由表查询的下一跳IP进行填充,目的MAC地址以F填充,并将ARP数据包以广播的形式进行发送,目的IP地址接收到ARP数据报后将自己的MAC进行填充,并且同样以ARP数据报的形式发送回对端。
至此协议栈封装包的工作结束,将网络包交给网卡,网卡将网络包复制到网卡的缓存区并加上报头和起始帧分界符,最后转换为电信号通过网线发送出去。
到达交换机,交换机根据MAC地址表查询MAC地址,发送至对应的端口。
到达路由器,进行错误校验和MAC地址检查,去掉MAC头部,查询路由表找到下一跳的IP地址,通过ARP数据报的到下一跳的MAC地址,重新封装MAC头部进行发送。在查询路由表时若网关列为空,此时说明已经到达了终点。
到达服务器进行校验,并依次拆解检查MAC,TCP,IP头部,解析http请求并封装http请求,通过协议栈进行层层封装进行同样的发送过程。

TCP超时重传

在发送数据之后,就开启一个定时器,在定时器时间之内若没有收到对端发送来的ACK,就再次重发数据并重置定时器,直到收到对端的ACK或者达到最大重发次数发送RST。
超时重传时间主要由RTT往返时延确定,一般重传时间要略大于RTT。
修改超时重传次数:
该参数在vi /etc/sysctl.con中修改
net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_synack_retries=1
可以看到,可以修改操作系统作为客户端或服务器端,发送syn包或SYN-ACK包的数量。
修改超时重传时间:
超时时间由TCP_TIMEOUT_INIT定义,该参数在内核代码/include/net/tcp.h中定义
#define TCP_TIMEOUT_INIT((unsigned(1*HZ)

Linux中数据读写相关系统调用

传统的 System Call I/O
高性能优化的 I/O
链接

malloc底层原理

malloc函数用于在堆区动态分配内存,为了减少内存碎片和系统调用的开销,malloc采用内存池的方式来管理资源,先申请大块的内存作为堆区,然后将堆区分为多个内存块,每个内存块为堆区分配的基本单位,malloc使用双向链表的数据结构来管理内存块,包括已分配块和未分配块,当用户申请内存时,通过遍历隐式链表找到空闲合适的内存块进行分配,在对空闲内存块进行合并时,采用边界标记法,根据每个块的前后块是否被分配选择是否被合并。
用户申请内存小于128k,使用brk函数调整堆区末尾的_endata指针进行分配,大于128k时,使用mmap函数在共享内存区分配。
brk函数和mmap函数
链接

Shell程序执行的流程

主要分为内置命令和非内置命令
对于内置命令,内置命令会改变shell的参数,比如cd,echo,exit等。内置命令实际上shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行。通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内置命令是写在bashy源码里面的,其执行速度比外部命令快,因为内部命令shell1不需要创建子进程。
对于非内置命令,1.交互shell(bash)fork并exec一个子shell(sh)用于执行脚本,bash等待sh终止。2.sh读取脚本中的cd …命令,调用相应的函数执行内建命令,置环境变量PWD为上一级目录。3.sh读取脚本中的ls命令,fork并exec这个程序,列出当前目录的文件,sh等待ls终止。4.ls终止后,sh继续执行,读到脚本末尾,sh终止。5.sh终止后,bash继续执行,打印提示符等待用户输入。
链接
链接

数据库中一条语句的执行流程

在这里插入图片描述

  • 客户端发起查询请求,与服务器建立链接,服务器检查客户端是否有查询权限,如果有权限接下来客户端将查询语句发送给服务器。
  • 查询高速缓存,如果高速缓存内存在相同的语句和执行逻辑,直接返回之前相同语句的执行结果。
  • 词法分析、语法分析
    • 语法合法性检查,检查查询语句的语法是否符合合法规则,不检查表名、列名等。
    • 语言含义检查,对语句中的字段、表名等检查,检查这些字段名、表名是否存在于数据库中。
  • 获得对象解析锁,系统对查询的对象进行加锁,保证访问内容的一致性。
  • 数据访问权限的核对,检查客户端是否有对于该数据的访问权限。
  • 语法优化,确定最优执行计划,根据一定规则对查询语句的执行规则进行优化,例如选择哪个索引,是否通过索引访问等。
  • 语句执行,如果被查询的数据块已经读取到数据缓冲区中,则不需要查询数据库文件,直接返回给客户端。如果没有被读取到数据缓冲区中,则从数据库文件中读取对应的数据块,并将数据放入数据缓冲区中。
  • 提取数据,在服务器端的进程中,有一个专门负责数据提取的一段代码。他的作用就是把查询到的数据结果返回给用户端进程,从而完成整个查询动作。
  • FROM 子句返回初始结果集。
  • WHERE 子句排除不满足搜索条件的行。
  • GROUP BY 子句将选定的行收集到 GROUP BY 子句中各个唯一值的组中。
  • 选择列表中指定的聚合函数可以计算各组的汇总值。
  • 此外,HAVING 子句排除不满足搜索条件的行。
  • 计算所有的表达式;
  • 使用 order by 对结果集进行排序。
  • 查找你要搜索的字段。
    链接
    链接

数据库写数据的流程

在这里插入图片描述链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值