面试官上来说啥聊一聊,三部分聊项目、聊基础、算法题。最后面了44分钟结果没让我做算法题,真的太假了,完全都不是客户端常见的问题。
-
说一下局域网聊天工具中的如何实现可靠文件传输的。然后怎么实现这个异步计时器的?
项目中用UDP来实现可靠文件传输是通过发送方将要发送的 文件进行分成大小相同的包,并加上包序号,发送一个包后启动计时器,当在超时的范围内接收到接收方的ack才继续传输下一个数据包,否则的话超时是会重传上一个数据包的,重复这个流程直到发送完所有的数据包。如何实现这个timer类呢 ?就是如何实现的开启计时器之后异步发送数据包,然后在收到ack之后重置这个计时器。 -
logisim上的 MIPS 32位CPU项目
INTEL 和 MIPs 比如一个int 类型的数据在指令上会有什么区别呢?说了符号位和数据位,没想到不同的地方,数据的大小端,
所谓数据的大端模式是指数据的高字节保存在内存的低地址中而数据的低字节保存在内存的高地址中,与处理字符串类似,地址由小向大增加,而数据从高位向低位放。所谓的小端模式是指高字节保存在内存的高地址上,数据的低字节保存在内存的低地址上。
由于不同的系统会有不同的模式,为了统一,规定在网络传输中使用大端模式。需要判断主机是以什么模式进行存储,如果与网络字节序相反要做对应的处理。 -
说一下虚拟内存
CPU地址线的位数表明的是CPU最大的寻址范围,对应的是最大的虚拟内存寻址范围 -
局域网聊天工具,那么在公网上会遇到什么问题,会不会有访问不到的情况,该怎么解决?
NAT协议:network address translation ,是指在私有地址和全局地址之间转换的协议。私有地址是不能在internet上用的地址。路由器将丢弃寻址这种地址的包,只能用在局域网的内部,私有地址由三种,10.0-10.255,172.16-172.31/12, 192.168.0-192.168.255。私网ip作为局域网内部的主机标识,公网ip作为互联网上通信的标识。
- 网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向的流量都必须要经过NAT网关。
- 网络访问只能先由私网侧发起,公网无法主动访问私网主机。
- nat网关为了实现双向翻译的功能,需要维护一张关联表,把会话信息保存下来。
静态NAT是指一个内部主机唯一占用一个公网IP,这种对于节约公网IP没有太大意义。
动态NAT能够将未注册的IP地址映射到注册IP地址池中的一个地址。
NAT重载
它利用源端口将多个私网ip映射到一个公网ip地址(多对一)。面对私网内部数量巨大的主机,如果NAT只进行IP地址的简单替换,就会产生一个问题:当有内部有多个主机去访问同一个服务器时,从返回的信息不足以祛痱粉相应应该转发到那个内部主机。此时,需要NAT设备根据传输层信息或者其他上层协议去区分不同的会话,比如TCP或者UDP端口号。
举个例子,客户端172.18.250.6和百度服务器202.108.22.5通信,172.18.250.6发送数据时,先转换为219.155.6.240:1723(任意>1024的随机端口),然后再利用这个身份发送数据给百度服务器,然后百度服务器回应数据并发送给219.155.6.240:1723,NAT网关检查自己的关联表,意识到这是自己地私网中172.18.250.6的数据包,然后把这个数据发送给客户端
实现string类
shared_ptr 模板类型的
http状态码
200:ok
3开头的是重定向
301:
304:跟缓存相关,问的很多,带条件的请求条件不对
4开头的是客户端错误
404:
5开头的是服务器错误
准备的知识点:
1.为什么要内存对齐?
提高CPU访存的利用效率
2.死锁的必要条件
死锁是指多个进程因为竞争资源而造成的一种相互等待的僵局,若无外力作用这些进程都将无法向前推进。
四个必要条件:
1. 互斥条件 一个资源每次只能被一个进程使用
2. 请求与保持条件:进程已经至少保持了一个资源但是又提出了新的资源请求,请求的资源被其他进程占有,但是对自己已经获得的资源保持不放。
3. 不可剥夺条件:进程获得的资源在未使用完毕之间,不能被其他进程强行夺走,只能自己主动释放
4. 循环等待条件 若干进程形成首尾相接循环等待资源的关系。
解决方法:
死锁避免、死锁预防
通过破坏死锁产生的四个必要条件来预防死锁
1. 破坏不可剥夺:等待期间占有的资源将被隐式的重新释放到系统的资源列表中。
2. 破坏请求与保持:在进程开始执行时就申请他所需要的全部资源。
3. 逻辑地址、线性地址、物理地址
逻辑地址是相对于当前进程数据段的地址
线性地址也叫虚拟地址,32位无符号的整形数,
虚拟内存是指计算机呈现出要比实际拥有的内存大得多的内存量
逻辑地址->分段单元->线性地址(虚拟地址)->分页单元->物理地址