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

答:用trylock?用条件变量?直接返回失败,避免用户出现卡顿问题。问:你还没完全理解IO多路复用这块机制?答:ET模式,不管事件处不处理完毕都不会通知应用程序。问:不是的,这个是针对读事件的。
15.TCP/IP协议栈里面的,在内核层里面有一个nagle算法,nagle算法用来做什么的呀?答:不知道。问:setsocket接口那个nodelay标志位是用来干什么的?答:减小分组报文个数。问:嗯哼是这样的吗?是nodelay啊,无延迟啊,你想一下是不是这个。面试官解答:解释了nodelay怎么解决粘包的。答:我只了解过我们可以设置固定长度、设置标志位、设置特殊的数据结构并添加一个字段来表示长度。问:那是应用层协议设计的问题嘛对不对。问:知不知道为什么这么做啊,为什么要加nodelay标志位可以开可以关,他的应用场景是怎样的呀?答:我觉得是为了让网络处理繁忙时用户不卡顿。问:不是这样的。然后这里解释了一堆我听不懂的东西。
16.你怎么理解线程安全的问题?答:保证随着线程调度的顺序不同不会产生不同的结果,保证不会产生竞态条件。我们得保证原子性。线程安全主要包含两个方面是线程通信和线程互斥。线程互斥我们是通过互斥锁来做的可以保证同一时刻两个线程不能进入同一个临界区,线程通信是指线程A依赖于线程B的一些步骤,线程B也依赖于线程A的一些步骤,主要通过条件变量跟信号量来做的。
17.有没有考虑过加锁?答:mutex里的lock方法,在临界区前加锁,临界区后解锁。或者C++11提供的unique_lock或者lock_guard(这里我还讲了这两个的实现原理和这两个的区别)
18.互斥锁跟自旋锁的区别是什么?答:对于互斥锁来讲:没有抢到锁的线程想进入临界区直接进入阻塞状态,只有当这个线程拿到锁后进入就绪态才可以进入临界区执行,对于自旋锁:他是不断地去循环检查锁是否可用,不会让出CPU资源的,不断地自旋。
19.技术栈这块我就先了解这么多哈,我问的东西可能不是你擅长的,就是你有没有想要去说的你自己还比较擅长的技术栈我没有问到的?答:C++基础语法、STL模板库、C++新特性、常见数据结构的实现和原理。
20.C++11智能指针的缺陷,使用要注意什么?答:解释了一下shared_ptr的循环引用问题,线程安全产生野指针问题,lambda表示捕获产生野指针问题。
21.深挖项目。
全部评论
感觉问的好细啊
点赞
送花
回复
分享
发布于 2023-10-17 14:50 CloudFlareDNS

相关推荐

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