nico许愿小米offer1 level
获赞
32
粉丝
11
关注
66
看过 TA
675
门头沟学院
2024
C++
IP属地:江苏
想去C++开发岗
私信
关注
投递小米集团等公司7个岗位
0 点赞 评论 收藏
转发
投票
0 点赞 评论 收藏
转发
投递牛客等公司7个岗位
0 点赞 评论 收藏
转发
投递小米集团等公司7个岗位
0 点赞 评论 收藏
转发
答:用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.深挖项目。
投递诺瓦星云等公司7个岗位
0 点赞 评论 收藏
转发
14.你刚刚说了事件,你觉得事件是哪些事件?答:事件我个人认为:主要包含两种,一个是读写事件,还有一个是错误事件,还有一些超时,当然最主要的还是一些连接,首先我得先判断已经连接了,我再去处理一些业务。问:一个读事件什么时候触发啊?答:比如说缓冲区有数据到来了,我会对这个数据进行读入。问:你的理解是只要你的接受缓冲区有事件了就会触发你的读事件?答:那也不完全是这样,可能他是要到达一定的量再去读这些数据可能会涉及到用户态到内核态的转换会有开销的。问:那这个量你怎么定位呀,你觉得有什么来控制这个东西?他会不会触发你的读事件,这个怎么去控制?答:我想一下哈。问:你有办法去控制吗这个东西?有没有提供一些机制给你去控制?答:他是不是会有一个叫定时器机制他会每隔一定的时间间隔去触发然后进行一些数据的读入。问:你这个定时器效率太低了呀?答:那是不是他只是其中的一种,他会有一个最大的量,达到最大的量会直接读入,定时器只是一个保底的作用。面试官解答:他是有一个高低水位的限制的,他的发送缓冲区和接收缓冲区都是有水位的限制的。问:那你的写事件什么时候触发呀?答:比如写缓冲区已满的时候会去。问:满的时候报错了啊?答:应该是写缓冲区为0的时候会触发写事件。问:只有为0的时候会触发吗?答:不一定,得看你具体是怎么实现的,就是写缓冲区不满就都可以触发的,他相当于是生产者消费者的问题,只要我不满我就可以去生产那个东西。问:是这样的,没错,但是你怎么把他利用起来,假如你写一个TCP的客户端,你怎么利用他的写事件,有没有思路,你正常写的时候是一个send、一个write,你怎么去利用他的写事件呢,为什么有IO多路复用这种反应堆模式之后的话,怎么把他写事件用起来,用来做什么的问题?答:这里我说了Reactor模式下怎么去处理事件的。问:你说的没错嘛,就是那个IO多路复用事件注册机制嘛?答:就是利用那些回调函数。问:如果说业务在空跑也没有任何数据往外发,你的发送缓冲区肯定是空的嘛,那你的IO多路复用那个机制的epollwait是不是疯狂的在回调,怎么解决这个问题?答:线程切换到读事件。问:我是说没有任何的读写数据,你的业务在空跑,那这个时候你的读事件也不会触发的嘛,那你的写事件是在疯狂的触发的,那你怎么处理这种问题?15. 见篇3
投递诺瓦星云等公司7个岗位
0 点赞 评论 收藏
转发
总面试时长:57分钟(等面试官10分钟,面试官问问题47分钟)1.先简单自我介绍一下吧?2.你现在是在读本科还是读研呀?答:现在是在读本科。3.您说一下C++多态的实现方式吧?答:经典八股文。4.虚析构函数作用是什么?答:经典八股文。5.vector内存不够的时候会做什么?答:经典八股文。6.语法我就问这么多哈,你觉得你比较擅长的技术栈有哪些?答:我觉得我擅长的技术栈主要是C++的一些基础的语法,包括一些STL模板库包括他的一些新特性然后还有一些常见的数据结果特点及其实现,还有一些线程通信跟互斥,因为我也实现过一些简单的线程池。这个可能是我觉得我比较擅长的地方。7.就是对语法和标准库这块比较熟哈,有没有看过STL的源码?答:看过一些。8.对于那个网络编程跟进程间通信这些东西熟不熟?答:这个也是了解过一些的,我看过一本书叫《Linux高性能服务器编程》介绍了相关的一些东西。问:你是说libevent吗,你看那本书有没有讲libevent?答:讲了,但是我还没到那里,好像是第十三章,他相当于是一种高性能网络库。9.先简单说一下进程间通信的几个机制?答:主要是管道(主要是命名的和无名的)、消息队列、共享内存、信号量、信号、socket。问:那命名管道跟匿名管道区别在哪里呀?答:匿名管道只能在父子进程间进行通信,而命名管道可以在两个毫不相关的进程之间进行通信。但是命名管道用的比较少,他是通过另外一种方法,但是这种方法叫什么可能我忘了,因为我在一本书里面看到讲过。10.你都看了哪些书呢?答:C++primer,STL源码剖析,Linux高性能服务器编程,深入理解计算机相同,程序员的自我修养。问:还有没有其他的书?答:因为最近想写一个Qt的项目,最近在看一本书叫好像叫Qt5.9C++开发实例。11.你刚刚说的进程间通信这块共享内存有没有在项目中用过?答:可能没有怎么用过。主要是线程间通信。进程间通信用的比较少。12.网络编程这块有没有涉猎?答:了解一些。13.那简单聊一下IO多路复用的一些机制?答:这里我说了select、poll、epoll的优缺点、底层数据结构还有epoll的使用的步骤。14.见下一篇。
投递诺瓦星云等公司7个岗位
0 点赞 评论 收藏
转发
牛客网
牛客企业服务