09
2019
09

linux C/C 服务器后台开发面试题总结(服务器编程篇)

时间:2019-09-09 15:37栏目:英雄联盟比赛可以赌吗 点击: 87 次
proactor模式:异步I/O模式。

9.如果select返回可读,结果只读到0字节,什么情况?

某个套接字集合中没有准备好,可能会select内存用FD_CLR清为0.

10. connect可能会长时间阻塞,怎么解决?

1.使用定时器;

2.采用非阻塞模式:设置非阻塞,返回之后用select检测状态。

2).可以通过在已建立连接的UDP套接字上,调用connect()实现指定新的IP地址和端口号以及断开连接。

13.udp调用connect有什么作用?

1).因为UDP可以是一对一,多对一,一对多,或者多对多的通信,所以每次调用sendto()/recvfrom()时都必须指定目标IP和端口号。

c/c linux后台开发技术学习视频,后台私信获取

7.网络编程设计模式,reactor/proactor/半同步半异步模式?

reactor模式:同步阻塞I/O模式,注册对应读写事件处理器,等待事件发生进而调用事件处理器处理事件。

Reactor是:

主线程往epoll内核上注册socket读事件英雄联盟比赛可以赌吗,主线程调用epoll_wait等待socket上有数据可读英雄联盟比赛可以赌吗,当socket上有数据可读的时候英雄联盟比赛可以赌吗,主线程把socket可读事件放入请求队列。

12.socket什么情况下可读?

1.socket接收缓冲区中已经接收的数据的字节数大于等于socket接收缓冲区低潮限度的当前值;对这样的socket的读操作不会阻塞,并返回一个大于0的值.

2.连接的读一半关闭,并且返回0;

3.socket收到了对方的connect请求已经完成的连接数为非0.这样的soocket处于可读状态;

4.异常的情况下socket的读操作将不会阻塞,并且返回一个错误。主线程调用epoll_wait等待写请求事件,当有事件可写的时候,主线程把socket可写事件放入请求队列。

3).如果可达,但应用程序崩溃,对方就发FIN消息。当用户缓存区的数据被写入socket之后内核向应用程序发送一个信号,以通知应用程序数据已经发送完毕。

1).如果主机可达,对方就会响应ACK应答,就认为是存活的。

keepalive原理:TCP内嵌有心跳包,以服务端为例,当server检测到超过一定时间没有数据传输,那么会向client端发送一个keepalive packet。

14. socket编程,如果client断电了,服务器如何快速知道?

使用定时器;

使用socket选项SO_KEEPALIVE;

1)、自己编写心跳包程序,幸运快三盘口简单的说就是自己的程序加入一条线程, 雷竞技官网定时向对端发送数据包, 雷竞技app查看是否有ACK, 靠谱的菠菜app根据ACK的返回情况来管理连接。主线程处理其他逻辑。

8.有一个计数器,幸运快三盘口多个线程都需要更新,会遇到什么问题,原因是什么,应该如何做?如何优化?

有可能一个线程更新的数据已经被另外一个线程更新了,更新的数据就会出现异常,可以加锁,保证数据更新只会被一个线程完成。

自旋锁,递归调用容易造成死锁,对长时间才能获得到锁的情况,使用自旋锁容易造成CPU效率低,只有内核可抢占式或SMP情况下才真正需要自旋锁。此方法比较通用,一般使用业务层心跳处理,英雄联盟比赛可以赌吗灵活可控,但改变了现有的协议;

2)、使用TCP的keepalive机制,UNIX网络编程不推荐使用SO_KEEPALIVE来做心)跳检测。应用程序预先定义好的信号处理函数选择一个工作线程来处理客户请求。

Proactor:

主线程调用aio_read函数向内核注册socket上的读完成事件,并告诉内核用户读缓冲区的位置,以及读完成后如何通知应用程序,主线程继续处理其他逻辑,当socket上的数据被读入用户缓冲区后,通过信号告知应用程序数据已经可以使用。Reactor和Proactor模式的主要区别就是真正的读取和写入操作是有谁来完成的,Reactor中需要应用程序自己读取或者写入数据,Proactor模式中,应用程序不需要进行实际读写过程。默认二个小时。

11.keepalive 是什么东西?如何使用?

keepalive,是在TCP中一个可以检测死连接的机制。

而底层的任务使用异步I/O模型,提供了执行效率。

半同步半异步模式:

上层的任务使用同步I/O模型,简化了编写并行程序的难度。应用程序预先定义的数据处理函数就会完成工作。工作线程处理完客户请求之后调用aio_write函数向内核注册socket写完成事件,并告诉内核写缓冲区的位置,以及写完成时如何通知应用程序。通过调用connect()建立一个端到端的连接,就可以和TCP一样使用send()/recv()传递数据,而不需要每次都指定目标IP和端口号。但是它和TCP不同的是它没有三次握手的过程。

2).如果可达,但应用程序退出,对方就发RST应答,发送TCP撤消连接。睡眠在请求队列上的某个工作线程被唤醒,处理客户请求,然后往epoll内核上注册socket写请求事件。

4.进程间通信和线程间通信

1).管道 2)消息队列 3)共享内存 4)信号量 5)套接字 6)条件变量

5.多线程程序架构,线程数量应该如何设置?

应尽量和CPU核数相等或者为CPU核数 1的个数

6.什么是原子操作,gcc提供的原子操作原语,使用这些原语如何实现读写锁?

原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch。睡眠在请求队列上的工作线程被唤醒,处理客户请求。

4).如果对方主机不响应ack, rst,继续发送直到超时,就撤消连接

福耀玻璃董事长曹德旺

近年来,我国经济发展的越来越好,许多人产生了出国旅游的想法。然而,仍有许多人担心旅游价格过高的问题,特别是在一些旅游业比较发达的国家。一般来说,他们的价格很贵,这让人们犹豫不决。所以今天小编想给大家推荐一个价格很低的国家。对于一些每月挣2000或3000薪水的小伙伴来说,这个国家真的是个不错的选择。

青岛双星(000599)今日强势封涨停板,当日成交1.24亿元,换手率3.515%,该股近12个月涨停6次。

运动可以锻炼心肺功能,提高肌肉力量与弹性,锻炼关节和韧带,增强抵抗力,还能帮助我们克服忧郁孤独等不良情绪。这一点无论对1型糖友还是2型糖友,都是同样的。

1

,,
当前网址:http://rcq537.com/yingxionglianmengbisaikeyiduma/47540.html
相关内容
热点内容

Powered by 真人优德论坛注册 @2018 RSS地图 html地图