linux C++服务器面试题

来源:互联网 发布:淘宝开放接口 编辑:程序博客网 时间:2024/06/05 10:40

1.TCP/IP 建立连接的过程?(3-way shake)

    Client与server建立TCP连接时:首先Client向server发SYN(请求),然后server回复(应答请求),最后Client回复,这样TCP就建立一次连接(三次握手)的过程就建立了


2.使用udp和tcp进程网络传输,为什么tcp能保证包是发送顺序,而 udp无法保证?

   

    1.主机每次发送数据时,TCP就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机对分配的这个序列号进行确认,如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包。接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序等,接收主机一旦收到已经顺序化的数据,它就将这些数据按正确的顺序重组成数据流并传递到高层进行处理。
  2.UDP不提供可靠的数据传输!一个端口发往同一个目的端口的几个数据包的顺序可能会出现混乱

3.Linux epoll的LT(level triggered)与ET(edge-triggered)工作方式的区别?
   
    LT:水平触发,效率会低于ET触发,尤其在大并发,大流量的情况下。但是LT对代码编写要求比较低,不容易出现问题。LT模式服务编写上的表现是:只要有数据没有被获取,内核就不断通知你,因此不用担心事件丢失的情况。
  ET:边缘触发,效率非常高,在并发,大流量的情况下,会比LT少很多epoll的系统调用,因此效率高。但是对编程要求高,需要细致的处理每个请求,否则容易发生丢失事件的情况。
  从本质上讲:与LT相比,ET模型是通过减少系统调用来达到提高并行效率的。

4.网络编程中设计并发服务器,使用多进程与多线程 ,请问有什么区别?
    两者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移

5.请列举进程间通迅都有哪些方式?并说明工作方式,优缺点等。
    
    常见三种方式:管道,消息缓冲,共享内存
  1.无名管道简单方便。但局限于单向通信的工作方式。并且只能在创建它的进程及其子孙进程之间实现管道的共享;有名管道虽然可以提供给任意关系的进程使用。但是由于其长期存在于系统之中,使用不当容易出错。
  2.消息缓冲,使用方便,但是信息的复制需要额外消耗CPU的时间。不适宜于信息量大或操作频繁的场合。
  3.共享内存,针对消息缓冲的缺点改而利用内存缓冲区直接交换信息,无须复制,快捷、信息量大是其优点但是不方便网络通信

6. C++中指针和引用有什么区别
    
    1.引用访问一个变量是直接访问,而指针是间接访问。
  2.引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间。
  3.引用在开始的时候就绑定到了一个内存空间(开始必须赋初值),所以他只能是这个内存空间的名字,而不能改成其他的,当然可以改变这个内存空间的值。

原创粉丝点击