今天4399面试啦!!!加油。
面试题(计算机网络)
1. TCP三报文握手 / 能否只两次握手
能否只两次握手呢?答案是不能的:
1.如果客户端有一条失效了很久的请求连接报文段,因为网络滞留导致连接结束了才到达服务端,如果只两次握手,那么这时服务端就会直接建立连接,而服务端发送的确认报文段也无客户端响应,导致服务端浪费资源,一直等待客户端响应。
2.如果直接两次握手,只能说明客户端与服务端建立了正常通信,却不能说明服务端与客户端建立正常通信。
2. TCP四报文挥手
close-wait这段时间是等待服务器将剩下的数据处理完。
3. TCP如何保证可靠性
1. 防止数据丢包的确认应答机制,以及丢包后的超时重传。
2. 防止数据乱序的序列号。
3. 滑动窗口动态控制数据的传输速度,也就是流量控制。
4. 防止网络瘫痪的拥塞控制。
4. HTTP和HTTPS的区别,以及HTTPS的优缺点
区别:
1. HTTP协议以明文的方式在网络中传输数据,HTTPS是在HTTP的基础上将数据进行TLS/SSL加密。
2. HTTPS在TCP三次握手的基础上加个SSL握手。
3. HTTPS协议需要在服务器申请证书,客户端安装对应的根证书。‘
4. HTTP协议端口号为80,HTTPS端口号为443。
HTTPS优点:
1. 安全性高
2. 确保数据发送对象正确。
缺点:
1. 建立连接的握手延时高,由于多一次安全握手
2. 部署成本高,占用CPU资源多。
5. IP地址的作用,以及MAC地址的作用
MAC地址是硬件地址,定义网络设备位置,由数据链路层负责。IP地址由IP协议提供的统一的地址格式,为互联网的每一个网络和主机分配一个逻辑地址,来抵消物理地址的差异。
6. 用户从输入URL到显示页面整个过程
DNS解析URL,接着传输层的TCP建立连接,发送HTTP请求,服务器处理并返回HTTP报文,浏览器解析并渲染页面。
7. TCP拥塞控制?以及达到什么情况的时候开始减慢增长速度
什么是拥塞控制?拥塞控制是为了防止过多的数据注入网络,从而使网络中的路由器或者链路过载,是全局网络流量整体性的控制,连接的双方都有一个拥塞窗口(cwnd)。
1. 慢开始:最开始发送方的拥塞窗口为一,由小到大递增。每经过一个传输轮次,拥塞窗口cwnd加倍,当cwnd超过慢开始门限,使用拥塞避免算法。
2. 拥塞避免算法:当cwnd超过慢开始门限,每经过一个往返时间RTT,cwnd+1。一旦发现网络拥塞,就将慢开始门限设置为当前值的一半,并重新设置cwnd为1,重新慢开始。
3. 快重传:接收方每收到一个失序的报文段就立即发出重复确认,发送方只要收到3个重复确认就立即重传。
4. 快恢复:当发送方连续收到三个重复确认,就将慢开始门限减半,将当前窗口设置为慢开始门限,并采用拥塞避免算法。
8. TCP/IP数据链路层的交互过程
网络层等到数据链路层用MAC地址作为通信目标,数据包到达网络准备往数据链路层发送时,首先会去自己的arp缓存表(ip-mac对应关系)查找目标ip的mac地址,查到就将目标ip的mac地址封装到链路层数据包的包头。如果没找到,则广播寻找目标mac地址。
9. TCP四次挥手的时候,先发起方为什么会有一个TIME_WAIT状态,它的作用是什么?
为了能够确保发起方的最后一次报文能到达,如果中途丢包,可以接收到对方的重传报文段进行超时重传。
10. GET和POST的区别
GET请求:获取指定页面信息
POST请求:向指定资源提交数据进行修改
区别:
1. get参数通过url传递,post在request body中。
2. get请求在URL中传递参数有长度限制,post没有。
3. get比post更不安全,因为参数都暴露在url中。
4. get请求只能进行url编码,而post支持多种编码方式。
5. get请求会被浏览器主动cache,post不会。
6. get请求会完整保留在浏览历史记录里,而post中的参数不会。
7. get产生一个TCP数据包,而post产生两个数据包。
11. 阻塞,非阻塞,同步,异步
阻塞:调用者在事件没有发生的时候,一直等待事件发生,不能处理其他任务。
非阻塞:调用者在事件没有发生时,可以处理事务。
同步:调用者循环查看事件发生情况。
异步:调用者无需查看事件发生情况,而是等待注册在时间上的回调函数通知。
12. 简单说一下http协议
HTTP协议是基于TCP/IP通信协议来传递数据,属于应用层的面向对象的协议。HTTP协议工作于客户端-服务端架构之上。
优点:
1. 简单快速,发送请求只需传送请求方法和路径。
2. 灵活:允许传输任何类型的数据对象。
3. 无连接:每次连接只处理一个请求。
4. 无状态:处理请求无记忆功能。
面试题(操作系统)
13. 进程间的通信的几种方式
1. 管道(pipe)和命名管道(named pipe):管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,还允许无亲缘关系进程间的通信。
2. 信号(signal):信号是一种比较复杂的通信方式,用于通知接收进程事件发生。
3. 消息队列:消息队列是消息的链接表,克服上两种通信方式信号量有限的缺点,具有写权限的进程可以向消息队列添加消息,具有读权限的进程可以从消息队列读取信息。
4. 共享内存:最有用的进程间通信方式。可以使多个进程访问同一块内存空间,不同进程可以及时看到对方进程中对共享数据的更新。
5. 信号量:主要作为进程之间及同一种进程的不同线程之间的同步和互斥手段。
6. 套接字:用于网络不同机器之间的进程通信。
14. 线程同步的方式
1. 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。
2. 信号量:允许同一时刻多个线程访问同一资源,需要控制同一时刻访问此资源的最大线程数量。
3. 事件(信号):通过通知操作的方式来保持多线程同步,方便实现多线程优先级的比较操作。
今天的4399面试感觉还不错,有一些基础知识不扎实没答出来,收拾一下心情继续努力,星期四有网易笔试,星期五有阿里笔试,之前的游戏测试觉得真不适合就拒绝了,没想到他帮我转到了 游戏开发,太神奇了,加油加油!!!