1.有名管道和无名管道的区别?
答:管道是半双工的,有名管道的名字等属性信息在磁盘上,数据在内存上,无名管道全部在内存上。有名管道可以任意两个进程间进行通信,而无名管道只可以在父子间进程进行通信。
2.进程和线程的区别?
答:线程是进程内部的一条执行路径,进程是一个正在运行的程序。在Linux系统下线程与进程实现是一样的,线程就是一个轻量级的进程。进程间通信的方式:管道、共享内存、信号量、信号、消息队列、套接字。线程同步的方法:信号量、互斥锁、条件变量,读写锁。
进程之间私有和共享的资源:
私有:地址空间、堆、栈、全局变量、寄存器
共享:代码段、公共数据、进程目录、进程id
线程之间私有和共享的资源:
私有:线程栈、寄存器、程序寄存器
共享:堆、地址空间、全局变量、静态变量
如何选择多进程还是多线程?
需要频繁创建销毁的优先用线程,需要进行大量计算的优先使用线程、强相关使用线程,弱相关处理用进程,可能要拓展到多机分布的用进程,多核分布的用线程。
3.static关键字的几种用法和它的作用?
答:1>修饰普通变量,会修改变量的存储区域和生命周期,使变量存储在静态区,在main函数运行前就分配了空间,如果有初始化值就用初始化值初始化它,如果没有初始值系统用默认值初始化它。
2>修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目中,为了防止和其他人的 函数名字相同,可以将函数定位为static。
3>修饰成员变量,修饰成员变量使所有的对象只保存一个该变量,而且不需要生成对象就可以访问该成员。
4>修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但在static函数内不能访问非静态成员。
4.堆和栈的区别
答:栈:由操作系统自动分配释放,存放函数的参数值,局部变量等的值,用于维护函数调用的上下文(函数调用前后需要保持不变的寄存器)
一般包括函数的返回地址和参数,临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量,
堆:一般有程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收,用来容纳应用程序动态分配的内存区域。
5.TCP和UDP的区别?TCP黏包问题如何解决?
答:TCP是面向连接的,UDP是无连接的,TCP提供可靠的服务,UDP只是尽最大努力交付,不保证可靠交付,TCP面向字节流(可能出现黏包问题)UDP是面向报文的,每条TCP只是点到点的而UDP
则支持一对一,多对多相互通信,TCP是全双工的可靠信道,udp是不可靠的信道UDP没有拥塞控制,TCP首部的开销20字节,UDP首部开销只有8字节。
解决黏包问题:(1)发送定长包(2)在包头加上包体长度(3)在数据之间设边界
6.三次握手、四次挥手
答:三次握手:(1)客户端发送SYN给服务器,说明客户端请求建立连接(2)服务端收到客户端发的SYN,并回复SYN+ACK给客户端(3)客户端收到服务端的SYN+ACK后,回复ACK个服务端(表示)客户端收到服务端发的同意报文(4)服务端收到客户端的ACK,连接已建立可以数据传输。
四次挥手:1.客户端发送FIN给服务器,说明客户端不必发送数据给服务器了(请求释放连接)2.服务端接收到客户端发的FIN,并回复ACK给客户端3.客户端收到服务端发来的回复此时 端到服务端的连接已经释放4.服务端发送之前没有发送完的数据给客户端5.服务端发送FIN+ACK给客户端6.客户端收到服务端的FIN+ACK并且回复ACK给客户端。7.服务端收到客户端的ACK后,释放从服务端到客户端的连接。
.TCP为什么要进行三次握手?
答:因为信道不可靠,而TCP想要在不可靠的连接上建立可靠的传输,那么三次通信理论上是最小值。而且通信双方都需要确认对方收到了自己发送的序列号,确认的过程至少要进行三次通信。
TCP为什么要进行四次挥手?
答:因为TCP要进行全双工模式,客户端请求关闭连接后,客户端向服务器的连接关闭,服务端继续传输之前没传完的数据给客户端,服务端向客户端的连接关闭,所以TCP释放连接时服务器的 ACK和SYN是分开发送的。
超时重传:超时重传是TCP协议保证数据可靠性的一个重要机制,发送数据的过程中开启一个计时器,在一定时间内如果没有得到确认的ack报文,那么就重新发送数据,直到发送成功为止。超时时间必须大于tcp连接的往返时延。这种的话超时周期一般比较长,会延迟端到端的时延。所以,如果发生丢包现象,一般tcp会受到三次同样的ACK确认。
如果连续收到三个对于一个数据包的确认就要重新传输它的下一个数据包。
7.select与poll的区别?select、poll、epoll的区别?
答:poll的描述符比select多,poll解决的仍然是多个客户端与服务器的连接。sellect和poll在用户空间定义了数组存放描述符由内核去找。epoll是描述符直接放在了内核里,epoll的优点:不需要考入内核中,内部实现有轮询,在描述符上设回调函数,epoll直接把就绪的描述符返回谁就绪就把谁加在就绪队列中。
8.new/delete,与malloc和free
答:new是关键字,malloc是函数new开辟空间加初始化,malloc只初始化,new开辟的空间叫自由存储区malloc在堆上,new内存不足抛出异常,malloc开辟无效返回空。
9.库函数和系统调用的区别?
答:库函数在用户空间执行,系统调用在内核地址空间执行,库函数开销比较小,系统调用开销大,库函数是有缓冲的,系统调用是无缓冲的。系统调用依赖于平台,库函数不依赖。
10.http应答报文段中的状态码吗?他们代表什么意思?
答:1、200状态码:
成功2××:成功处理了请求的状态码。
200 :服务器已成功处理了请求并提供了请求的网页。
204:服务器成功处理了请求,但没有返回任何内容。
2、300状态码:
重定向3××:每次请求中使用重定向不要超过 5 次。
301:请求的网页已永久移动到新位置。当URLs发生变化时,使用301代码。搜索引擎索引中保存新的URL。
302:请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL。
304:如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引擎机器人,可节省带宽和开销。
3、400状态码:
客户端错误4××:表示请求可能出错,妨碍了服务器的处理。
400:服务器不理解请求的语法。
403:服务器拒绝请求。
404:服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。
410 :请求的资源永久删除后,服务器返回此响应。该代码与404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时用来替代404 页面代码。如果资源已永久删除,应当使用301 指定资源的新位置。
4、500状态码:
服务器错误5××:表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。
500 :服务器遇到错误,无法完成请求。
503:服务器目前无法使用(由于超载或停机维护)。
复习-知识点总结(1)
最新推荐文章于 2023-06-22 12:54:35 发布