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

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

相关推荐

点赞 评论 收藏
分享
卡卡罗特w:是这样的,说的太对了
点赞 评论 收藏
分享
03-15 20:26
已编辑
电子科技大学 C++
T3题面:给一个3e5数组,每次询问长度为len的子数组乘积的和,如果子数组乘积>1e9,则视为0.赛后一分钟想出来了,比赛时打了个暴力+线段树注意到1e9大约是2^30, 因此len长度如果>30就直接输出0,30以内做一个记忆化就行,复杂度O(30*n)感觉是以前比赛做过的题,忘了怎么做了。。。---upd: 忘了数据范围了,如果有0,1的话那这样也不行
blueswiller:给出一个做法,刚刚才想到,应该没问题,时间复杂度为 O(max(30n, nlogn)): 1. 根据 0 切分数组。2. 现在问题转化为>=1 的情况,我们首先维护每一个数前一个 > 1 的数的位置,同时维护一个长度的差分数组,初始值全为 0。3. 我们从每一个数 i 开始向前跳,至多跳 30 次,维护这个过程中的乘积,于是得到 30 个区间加和。举例:假设从 j1 跳到 j2 ,相当于对查询长度 (i- j1 + 1) 至 (i - j2) 贡献 a_i * ... * a_j1。4. 对于所有区间加和,我们采用差分数组结合树状数组对其进行维护,由于长度至多为 n ,树状数组构建的复杂度为 O(nlogn),于是,构建阶段的复杂度为 O(max(30n, nlogn))。在线单次查询的复杂度为树状数组查询的复杂度 O(logn)。
投递淘天集团等公司10个岗位 > 笔试
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务