6-7腾讯面经

Http相关

http内容

请求行+请求头部+请求数据
请求行:请求方法(GET/POST)+url+版本协议
请求头部:常见字段如:Host,Content-length,Connection,Content-type,Content-Ecoding

  • Host :请求的资源在哪个主机的端口上
  • Connection:该请求支持长连接(heep_alive)
  • Content-Length:正文内容长度
  • Content-Type:数据类型
  • User-Agent:声明用户的操作系统和浏览器版本信息
  • Accent:发起了请求
  • Referer:当前页面是从哪个页面跳转过来的
  • Accept-Encoding:接受的编码
  • Accept-Language:接受的语言类型
  • Cookie:用于在客户端存储少量信息,通常用于实现会话(session)功能
    请求数据

响应行+响应头部+响应数据
响应行:版本协议+状态码+状态码描述
响应头部:Connection,Content-type,Content-length等
响应数据

常见状态码

1xx信息型状态码,表示当前是协议处理的中间状态,还需要等待后续的处理。
2xx成功状态码,表示服务器成功处理了客户端的请求

  • 200 OK常见的成功状态码,表示一切正常
  • 204 Not Content 与200相同,但是没有Body数据
  • 206 Partial Content 表示响应返回的Body只是资源的一部分数据
    3xx重定向状态码,表示当前请求的数据的位置发生了变动,需要客户端重新发送请求获取资源
  • 301 Moved Permanently 永久重定向,客户端需要使用新的url进行访问
  • 302 Found 临时重定向请求资源还在,需要用另一个url进行访问
    使用Location字段,表明后续的url,浏览器自动重定向到新的url
  • 304 Not Modified 资源未修改,重定向到缓冲文件,客户端可以通过缓存资源访问
    4xx客户端错误状态码
  • 400 Bad Request表示客户端的请求报文有错误,但是个笼统的错误
  • 403 Forbidden表示服务器拒绝访问资源
  • 404 Not Found表示请求的资源在服务器上不存在或未找到,无法提供给客户端
    5xx服务端错误状态码
  • 500表示服务器有错误,但是个笼统的错误
  • 501 Not Implemented表示客户端的请求功能还未支持
  • 502 Bad Gateway通常是服务器作为网关或代理时返回的错误,表示当前服务器工作正常,但是访问后端服务器时发生错误
  • 503 Service Unavailable表示服务器当前正忙,暂时无法响应客户端

常见的Http请求

GET POST DELETE PUT PATCH
GET 与 POST
GET是从服务器获取指定资源,安全且幂等
POST是根据报文Body对指定的资源做出处理,不安全不幂等
GET浏览器回退是无害的,而POST会再次提交请求
GET请求会被浏览器主动Cache,POST不会
GET参数放在url中传递,而POST放在请求体上,因此GET参数暴露在url上,不能传递敏感信息
GETurl的长度有限制,POST没有
GET请求接收ASCII编码,POST没有限制
GET请求通过一次TCP数据包发送,POST通过两次TCP数据包发送

http与https区别

加入了报文加密的过程,在tcp与http之间增加了TLS层,连接建立需要经过TCP三次握手和TLS三次握手
使用密钥非对称加密
使用CA证书验证网站的合法性

http是明文传输,存在安全风险问题,https加入了TLS安全协议使报文加密传输
http在TCP三次握手之后便可以进行http传输,https需要进行TCP三次握手以及TLS四次握手
http默认端口80,https默认端口443
https需要向CA证书权威机构申请证书,保证服务器身份可靠

链接

函数调用原理

栈帧:栈帧是存储在栈上的每一次函数调用涉及的相关信息的记录单元。“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。”
栈帧表示函数调用的调用记录,栈帧保存在栈上,因此栈上保持了N个栈帧的实体,那么就可以说栈帧将栈分为了N个记录块,但每个块的大小不是固定的,因为栈帧不仅保存入参,出参,上一个栈帧的栈底指针,返回地址等,还保存了函数内部的自动变量。

 void func(int m, int n) {
    int a, b;
    a = m;b = n;
}
main() {
...
    func(m, n);
L:  下一条语句
...
} 

初始栈帧
在这里插入图片描述
形参入栈
返回地址入栈
在这里插入图片描述
上一栈帧的栈底指针入栈,并使栈底指针指向栈顶指针
在这里插入图片描述
开辟栈帧空间,并为变量分配空间
在这里插入图片描述
返回时esp回退,并pop出原来的ebp位置给ebp,将返回地址给程序计数器,并将esp减去形参的空间大小,还原原来的esp,ebp。
返回值 <=4 eax
>=4 && <=8 eax edx
>8 借助临时变量带出返回值

字节序

字节序就是大于一个字节的数据在内存中存放的顺序。
分为大端字节序和小端字节序,网络字节序一般为大端字节序,主机字节序一般为小端字节序
大端字节序,高位地址存放在内存的低地址端,低位地址存放在内存的高地址端。
小端字节序,高位地址存放在内存的高地址端,低位地址存放在内存的低地址端。
数据最靠左边的是高位地址,最靠右边的是低位地址。

网络字节序与主机字节序转换
htons,htonl:ntohs,ntohl
inet_ntop,inet_pton
inet_aton,inet_ntoa
链接

内存内部碎片与外部碎片

内部碎片指的是已经被分配出去且能够指定使用进程,但是分配得到的空间大于该进程请求的空间大小,多余的空间无法被当前进程以及其他进程使用,称为内部碎片。
内部碎片是处于区域内部或页面内部的存储块,占有这些区域或页面的进程并不使用这个存储块,而在进程占用这个存储块时,系统无法利用它,直到进程释放他,或进程结束时,系统才能利用这个存储块。
为了有效的利用内存,减少内存的外部碎片,需要对内存进行分页,内存以页为单位进行使用,最后一页往往装不满,于是形成了内部碎片。
由于被装入的数据块小于分区大小,从而导致分区内部有空间浪费,这种现象成为内部碎片。

外部碎片指的是还没有被分配出去,但是由于大小不足无法分配给申请内存空间的新进程的内存空闲数据块。
外部碎片是处于任何已分配区域或页面外部的空闲存储块,这些存储块的总和可以满足当前内存空间申请大小,但是由于地址不连续等原因,因此系统无法满足当前申请。
为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。

产生内部碎片的情况:固定分区分配,分页式存储
产生外部碎片的情况:可变式分区分配,分段式存储,动态分区分配
链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值