诺瓦星云提前批软件工程师篇2

14.你刚刚说了事件,你觉得事件是哪些事件?答:事件我个人认为:主要包含两种,一个是读写事件,还有一个是错误事件,还有一些超时,当然最主要的还是一些连接,首先我得先判断已经连接了,我再去处理一些业务。问:一个读事件什么时候触发啊?答:比如说缓冲区有数据到来了,我会对这个数据进行读入。问:你的理解是只要你的接受缓冲区有事件了就会触发你的读事件?答:那也不完全是这样,可能他是要到达一定的量再去读这些数据可能会涉及到用户态到内核态的转换会有开销的。问:那这个量你怎么定位呀,你觉得有什么来控制这个东西?他会不会触发你的读事件,这个怎么去控制?答:我想一下哈。问:你有办法去控制吗这个东西?有没有提供一些机制给你去控制?答:他是不是会有一个叫定时器机制他会每隔一定的时间间隔去触发然后进行一些数据的读入。问:你这个定时器效率太低了呀?答:那是不是他只是其中的一种,他会有一个最大的量,达到最大的量会直接读入,定时器只是一个保底的作用。面试官解答:他是有一个高低水位的限制的,他的发送缓冲区和接收缓冲区都是有水位的限制的。问:那你的写事件什么时候触发呀?答:比如写缓冲区已满的时候会去。问:满的时候报错了啊?答:应该是写缓冲区为0的时候会触发写事件。问:只有为0的时候会触发吗?答:不一定,得看你具体是怎么实现的,就是写缓冲区不满就都可以触发的,他相当于是生产者消费者的问题,只要我不满我就可以去生产那个东西。问:是这样的,没错,但是你怎么把他利用起来,假如你写一个TCP的客户端,你怎么利用他的写事件,有没有思路,你正常写的时候是一个send、一个write,你怎么去利用他的写事件呢,为什么有IO多路复用这种反应堆模式之后的话,怎么把他写事件用起来,用来做什么的问题?答:这里我说了Reactor模式下怎么去处理事件的。问:你说的没错嘛,就是那个IO多路复用事件注册机制嘛?答:就是利用那些回调函数。问:如果说业务在空跑也没有任何数据往外发,你的发送缓冲区肯定是空的嘛,那你的IO多路复用那个机制的epollwait是不是疯狂的在回调,怎么解决这个问题?答:线程切换到读事件。问:我是说没有任何的读写数据,你的业务在空跑,那这个时候你的读事件也不会触发的嘛,那你的写事件是在疯狂的触发的,那你怎么处理这种问题?
15. 见篇3
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务