面试题持续作答

1.不考虑以太网传输IP数据报分包的话,UDP的最大包是多少,包的大小是由什么控制的?

答:不考虑分包的话,UDP最大包为65535-20(IP首部)-8(UDP首部)=65507字节,包的大小是由IP首部16bit的总字段长度所限制的。

延伸:考虑分包情况下,UDP包的大小在局域网内不应该超过MTU-28=1472字节,在因特网内不应该超过MTU(576)-28=548字节。


2.TCP/UDP的区别,各在什么场合适用?

答:TCP有连接,UDP无连接;TCP所需系统资源较多,UDP较少;UDP程序结构较简单;TCP基于流模式,UDP基于数据报模式;TCP确保数据正确完整,UDP可能会丢包;TCP可以保证数据顺序,UDP不保证。

TCP多用于对数据传输的准确性要求很高,发送或接受邮件,远程登录,如电子邮件,文件传输,远程终端接入,万维网;UDP多用于即时通讯等对准确性要求较低但是速度要求较高的场合,如QQ聊天,在线视频等。


3.TCP是怎么保证可靠的数据传输的?

答:TCP发送数据后需要对方接受方确认,未确认就会重传;数据会合理分片和重新排序;当接受方来不及接受数据时,发送会减慢;当网络拥塞时,会减少发送的数据。


4.用UDP怎么实现TCP的可靠数据传输,多余的包怎么处理,丢掉后会有什么问题吗?

答:在UDP上加入TCP的超时重传(定时器),有序接收(给数据包编号),应答确认,滑动窗口等机制。


5.怎么用多线程技术来提高自己的程序处理速度,线程是怎么划分的?



6.GetLocalTime()的精度有多少?

答:精确到毫秒。


7.对于单核CPU多线程可以提高处理效率?

答:不可以。


8.I/O密集型和处理密集型那种情况下在单核CPU上可以提高处理效率?


9.C++内存会有什么问题?内存泄漏和内存溢出的区别?哪个危害更大?

答:C++内存可能出现内存泄漏,内存溢出(内存越界访问),野指针,返回指向临时变量的指针,内存未分配成功但是已使用(动态内存不足),内存分配成功却没有初始化。内存泄漏指从堆上申请的动态内存没有释放,从而程序每运行一次都会少一些内存,最后导致内存耗尽;内存溢出指系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。内存溢出会导致程序崩溃。


10.map与hash_map的区别?

答:hash速度快,构造慢,内存高。


11.何时使用多线程?线程划分?

答:在编写程序时,遇到了阻塞过程而不想使整个程序停止响应时,应使用多线程。线程分为用户级线程和内核级线程。

猜你喜欢

转载自blog.csdn.net/weixin_40736096/article/details/79825888