1.为什么说TCP是可靠的服务?
(1)、TCP有一套连接管理的机制:收发双方通信前要建立连接,即进行三次握手,然后才
进行应用层的通信;应用层通信完成之后要释放TCP连接,即进行四次握手。
(2)、在通信的过程中,对每一个发出的数据包都要进行确认,在规定时间内收不到确认的
话要重发该数据包。
(3)、TCP还通过滑动窗口的机制来进行流量控制,使收发双方的通信速率得到匹配。
2.如何理解面向对象?
面向对象就是看事物的一种方式,一种视觉角度,分析方式,我们可以把任意一个事物看成
是一个对象,分析它身上具备的主要特征,这个就是面向对象思维;
我们把事物当做一个对象,分析它的主体特征,注意力聚焦在主体特征,而不是聚焦于更细
节的内容及实现,如我们把手机当做一对象,现在我们要开发手机,手机是个对象,它有哪
些特征呢,比如颜色、手机壳、打电话、发短信等等,而我们不会去想到 发短信具体是怎么
实现的,集成电路如何设计,如何接收信号,电磁波如何发出,甚至更加细节的问题;
这样做有利于我们宏观掌控设计手机的主体功能,在整体上思考设计方针的准确性,等我们
确定了每一个功能模块,主体特征后,我们在考虑如何一步一步去实现这个主体特征;
把事物当做对象,宏观分析它的具备的主体特征,这已经是面向对象的思维了。
3.为什么要用到线程池?
大量的线程也会抢占cpu的资源,cpu不停的在各个线程上下文切换中,反而没有时间去处理
线程运行的时候该处理的任务。
因此,为了避免频繁的创建和销毁线程,让创建的线程进行复用,就有了线程池的概念。 线
程池里会维护一部分活跃线程,如果有需要,就去线程池里取线程使用,用完即归还到线程
池里,免去了创建和销毁线程的开销,且线程池也会线程的数量有一定的限制。
4.如何避免死锁呢?
避免多次锁定,多检查;
对共享资源访问完毕之后,一定要解锁,或者在加锁的使用trylock;
如果程序中有多把锁,可以控制对锁的访问顺序(顺序访问共享资源,但在有些情况下是
做不到的),另外也可以在对其他互斥锁做加锁操作之前,先释放当前线程拥有的互斥锁;
项目程序中可以引入一些专门用于死锁检测的模块;
5.select,poll,epoll的区别?