CVTE C/C++研发实习面试(凉)

在线笔试

在线测试的主要内容就是20道选择题和两道编程题。

选择题就是一些八股文,具体记不清了。反正对面试影响不大。

两道编程题是:

  1. 求给定一个数组经过降序排序之后,前30%中最小的数。
  2. 给一组IP vector ips,求子网掩码的最大长度。

面试

面试官是一个小哥,听声音比较温和,

注:开面之前假装调摄像头,先把iwatch录音开启来。

  1. 自我介绍

    答:我叫xxx,来自xxx,在德国克莱登大学计算机专业读研二。我自己目标的方向是CC++Linux后台开发方向,我对这个方向所需要用到的理论知识有一定的了解。 比如数据结构,如队列、栈链表、还有一些别的算法,比如回溯、动态规划等。还有IO多路复用的知识,比如select、poll、epoll以及在它们之上进行封装的Reactor和Proactor?这里C/C++说自己只是了解(有点不够自信),学习的时候习惯将学到的重要知识点总结成笔记,然后业余爱好的话,我每天坚持跑步5km,然后平时喜欢读一些书。现在在学RPC这方面的内容,想把之前的项目扩充 ,把httpserver扩充用到数据库之类的中间件。

    reactor是对epoll的一层封装 ,epoll是对io进行管理,reactor将对io的管理转化为对事件的管理。

    应该要说能够熟练掌握C/C++基本语法与应用,放介绍的前面说比较合适,

  2. 看你简历上说你有一次实习经历,你的收获是什么?

    答:做的事情相对比较简单,因为算是第一次实习,之前也有实习过,但是是测试,这次实习至少能看到一些软件开发流程,导师有分配一些解bug的任务。然后这次实习主要是与QT相关。主要是能够接触到它们的代码的语法风格。有些问题看起来很简单,但是做的时候没法下手,然后导师指导后,也就是用到常用的封装的方法,不应该这么说应该具体是说面向对象的方法,比如说继承。。。

    打日志很重要。(中间又是一大堆嘶嘶嘶嘶嘶嘶)。

  3. 在实习中你有了解过软件开发的生命周期是怎么样的呢?

    答:忘记了,答的支支吾吾

  4. 你在实习的时候有解决过什么bug吗,有没有学到或者是有没有一些解决问题的心得方法?

    答:这里已经慌了。语无伦次了,

    先找到出现问题的大概位置,阅读上下文代码,了解类的封装情况,代码的执行情况,根据这个来修改,增添新类不是很敢做。

  5. 有学过一些设计模式吗?

    答:这个只记起来单例模式,别的一时间脑子一片空白。

  6. 类的封装或设计上你有没有什么设计思想或者是一些指导思想?

    答了一些屏蔽属性,只提供给用户有限的使用接口,反正也是答的不好

  7. 我看你写了一个web服务器项目,有用到哪些开源组件吗

    回答:目前没有,只用到了epoll

  8. 你能介绍一下你的这个项目整体设计是什么样的?分了几个线程或者是线程,每个线程职责是什么?或者说从类的分工上分了几个层次或者框架,你能简单介绍一下你的这个程序的设计吗?

    答:开始不知道为什么笑起来了???说的乱七八糟???

    搞的面试官再次提问,你这个项目的工作流程是什么样子的呢?先给我介绍一下大概的结构是什么样子,然后再介绍进程和线程都是做什么用的,这样我比较好的了解你这个项目的全貌。

    明明这方面项目看了好多

  9. 你这个项目用的是get方法来获取资源 ,你这个程序是只能下载不能上传的吗?

    答:目前没有做这个功能

  10. 那么如果下载的是一个大文件,有没有支持断点续传功能呢?

    答:这个不了解,没做过。

  11. 你这里用到了get请求,有没有了解过http请求的一个效率问题呢?get请求和post请求数据量一致的情况下哪一个效率会更高一点呢,为什么?

    答:不知道,答不上来,我说没差别。。

  12. 你这里epoll选择的是ET、还是LT为什么?

    答:ET、因为我请求的都是小文件,基本几次数据就到了,所以只要缓冲区第一次有数据到来才触发就够了。

  13. 都说epoll比select和poll高效,那么高效的原因是什么?

    答:说了一下区别,select和poll每次都要设置监听fd的集合,而epoll不需要,而且epoll事件是存在一个红黑树。所以效率更高。感觉不行

  14. 你这个程序的话,是一个web服务器,那现在我们发散一下,改成一个CDN服务器,就像我们现在用的视频会议工具有个视频流传输,要做到实时级别视频级别的服务器的话,底层就传输层协议可能不用TCP实现,而是用UDP实现,因为我们都知道UDP实时性能要高一点。现在场景是传输层我用UDP实现,但应用层协议我还没敲定,我的要求是能够有一个更好的可靠性,如果既要保证实时性又要保证可靠性的话,你会怎么去实现呢?

    答:TCP是依靠序号机制和三次握手来实现数据包不丢失不乱序,那么传输层UDP时在应用层发送数据时加上序号。

  15. 你是否有了解过满足我刚刚说的要求的应用层协议呢?

    答:QUIC,具体细节忘记了

  16. 你刚刚提到有用到线程池,那么你有了解过线程池的线程数初始值根据什么来决定。

    答:(不会)根据并发数来确定初始值。

  17. 那你有测过你的webserver的并发数吗?

    答:瞎扯之前百万并发的实验,就说通过调大内存和最大文件描述符打开数量,调小读写缓冲区,能到80w连接。

    面试官说那就是要好好系统性的梳理一下原因

  18. 在STL你会用到哪些容器呢?

    答:vector、set、map详细讲一下

  19. 你刚刚说到vector中动态扩容,那为什么是1.5倍或者是2倍?

​ 答:不知道。。。。

  1. map查找上是什么样的复杂度?

    答:Olog2N

  2. 你在做算法题或者项目功能时,有什么调试方法保证运行逻辑和你预期是一致的?

    答:主要是打输出,gdb中打断点。

  3. 你有了解过程序崩溃的时候,应该怎么去排查呢?

    答:我回答内存泄漏、边界问题,在资源分配和数据流动代码附件加断点或打输出。

  4. 你刚刚提到内存泄漏,那C++上有提供了一些好用的方法来解决这个问题,比如智能指针,你有了解过或用过吗?

    答:介绍了unique、shared、weak类型的shared_pointer,循环引用问题。

  5. 你对自己学习规划有什么想法吗?

    答:刚刚面试完发现自己网络部分薄弱,还要加强。把前面的知识复习到位,然后要多动手,并发编程这一块也要加强学习一下,同时redis mysql也想应用于自己的项目中。

反问

  • 如果有机会到贵公司实习,主要工作是什么呢?

    我们这是一个集团,旗下有很多子公司,有很多业务,像C++应用场景基本都覆盖了,像客户端开发,嵌入式开发,后台服务,比如这款通信会议软件后台就是用C++来实现的。还有就是研究院的一些算法工程落地,具体可以到官网看有哪些领域

  • 我想走后端开发应该要注重哪些方面学习,或者说刚刚面试下来我有哪些不足呢?

    从C++这边看,你刚刚这边也掌握的不是很清楚。就从一个研发人员的气质上来讲,刨根问底这方面还不够,应该有一些追求,思维方式上要有一些转变,对知识应该要有更深入的了解。

    第二,就是要有系统的思维方式,你做的事情都是点状的方式,像你想要做一个服务器,你都是从点上去发散,比如你想做个一个epoll,有一个线程池。没有能够从系统上去思考项目体现什么,使功能更丰富,比如你刚刚说的加入数据库这些。
    至于基础的话努力都是可以补回来的,问题不大。

心得体会:

  • 讲话有点慌张,总好像一直在笑,应该还是要稳一点,偶尔微笑可以;

  • 语气呼吸优点不流畅,不要思思思思;

  • 不够自信,总是想收回自己的话;

  • 理论知识和实践都需要提高,对于项目介绍的准备还不够充分;

  • 面试官人还是很好的,会一步一步循序渐进的提问,并且比较有耐心,最后也给出了比较中肯的评价,虽然这次面试挂了,但是收获上来说还是比较大的,比较换位思考,如果我是面试官,我也会把自己给挂了。~~

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值