美团测开复习题
1.算法题:合并区间,有重复全排列
2.项目
3.进程和线程资源共享的方式:
进程通信:管道,消息队列,共享内存。管道:通过内核空间共享,数据传输是单向的,通信效率低,不适合频繁交换数据。消息队列:保存在内核中的消息链表,通信过程中存在用户态与内核态之间的数据拷贝开销。共享内存:两个进程都取一块虚拟地址空间,映射到相同的物理内存,无需消息拷贝。信号,socket。
线程通信:全局变量:多个线程可以访问同一个全局变量。全局变量是在程序的整个生命周期内存在的,因此多个线程可以共享并修改它。
动态分配的堆内存:多个线程可以访问和操作通过动态内存分配(如malloc或new)在堆上分配的内存块。类似于全局变量,对于共享堆内存的访问也需要进行同步,以避免并发问题。
共享对象:多个线程可以同时访问和操作通过共享对象实现的数据共享。
文件和网络连接:多个线程可以共享对同一文件或网络连接的访问。
4.用户态切换到内核态的 3 种方式:
①系统调用:用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现
②异常:当 CPU 在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常
③外围设备的中断:当外围设备完成用户请求的操作后,会向 CPU 发出相应的中断信号,这时 CPU 会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。
5.TCP三次握手
6.UDP对应的协议
①DNS:用于域名解析服务,将域名地址转换为IP地址,使用53号端口。
②SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备。由于网络设备过多,无连接的服务体现优势。
③TFTP:简单文件传输协议,该协议在端口69号使用UDP服务。
TCP对应的协议
FTP:定义了文件传输协议,使用21号端口。
Telnet:用于远程登录的端口,其使用23号端口,用户可以以自己的身份远程连接到计算机上。
SMTP:邮件传送协议,用于发送邮件。其使用25号端口。
POP3:其与SMTP对应,POP3用于接收邮件。使用了110端口。
HTTP:从Web服务器传输超文本到本地浏览器的传送协议,端口是80号
HTTPs:端口是443号
7.堆栈与缓存
栈和堆都是放在内存里的,就是RAM,通常所说的内存条,程序运行就是在运行在内存里的。
栈:栈的大小是静态的,编译时就知道,比如数组的大小,每个程序允许申请的栈大小是有上限的,数组申请过大,会导致栈溢出
堆:堆的大小是动态的,程序运行是动态申请的,不固定,比如new对象的个数和大小!需要自己手动释放,不然会导致内存泄漏!
缓存:分为两种:程序缓存和CPU缓存
程序缓存:就是所说的缓冲区!栈和堆都属于程序缓存!让数据保存在内存中,加快程序计算效率的!(说法:栈属于一级缓存、堆属于二级缓存)
CPU缓存:这是硬件层次缓存,处于内存条和CPU之间,以为比如CPU的L1 L2 L3等缓存机制,因为CPU缓存比CPU读内存数据更快!用于存放热点数据,数据如何分级存放有自己的算法。
8.HTTP状态码
1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。
「200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。
「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。
「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。
「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。
「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制。
4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。
「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。
「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。
「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
5xx 状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。
「500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。
「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。
「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
「503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思。