《C++工程方向面试记录》

        此系列,是本人免费提供的,大厂面试模拟,经本人同意后发出。如要申请,请查看《大厂面试模拟(免费)》


面试者画像

        本硕中部985,工作2-3年,本硕均非计算机专业。毕业后一直在某研究所工作。项目经历主要面向国家项目,即项目为处理数据量不大,更偏向于模块多,链路长。

个人倾向的考核方向

  • 重点是基础Code能力、C++相关基础、对自己最熟悉的项目的理解程度
  • 加分项是如果有足够的时间,考察对性能优化,以及分布式系统的理解

部分实际问答

  • 1、
    • 问:mutable关键字的作用
    • 答:“只记得和类相关,但是没用过,不太记得请了”
  • 2、
    • 问:constexpr关键字的作用
    • 答:“编译时计算,这是c++11的特性”
  • 3、
    • 问:既然说到c++11的特性,那说下std::move的作用
    • 答:“移动语义,能够减少内存拷贝”
    • 问:是对所有类都支持的吗
    • 答:“应该是”
    • 问:减少拷贝的动作,是谁支持的。是三方库,还是编译器,还是内核
    • 答:“不太清楚”
    • 问:std::forward的作用是什么
    • 答:“完美转发”
    • 问:具体解释下,什么是完美转发,为什么需要完美转发
    • 答:“应该是在模板中用的,但是比较少用,记不清了”
  • 4、
    • 问:写一段代码,找到二叉树的从根节点到叶子节点的最大代价的路径。如下图,输入时一个根节点指针,需要返回一个数组。
    • 答:写代码过程,整个过程持续20分钟:
      • 1、第一遍写完,递归返回条件不对。提示后修改
      • 2、修改后,代码时间复杂度为O(nlogn),提示后修改为O(n)

  • 5、
    • 问:介绍一个你最熟悉的项目
    • 答:“xxx的无人小车,自己负责建图相关模块”
    • 问:建图如何做的
    • 答:“知道车辆实时gps位置,知道每个时间点,所拍到的真实世界的相对坐标,转换为绝对坐标,再把各个世界点拼接在一起”
    • 问:既然基于gps位置,那gps位置不对会影响作图,做出来的图会有阴影,怎么解决的
    • 答:“有遇到过,其他同事尝试过SLAM,虽然没有很好解决,但是有更大的问题,是障碍物识别,所有这块没有再尝试,因为在大部分情况下够用”
    • 问:建图模块做好后,如何评价图的质量,有哪些指标
    • 答:“没有做个图的质量评价,基本是做完,在环境里面试一试,能跑就行”
  • 6、
    • 问:我看你有一些熟悉项,是写的多线程、分布式相关的,这块平时用的多吗
    • 答:“自学,但是也了解一些,平时偶尔会用”
    • 问:那说说多线程同时读一个数据,需要加锁吗
    • 答:“不太清楚,我一般使用的时候会加上”
    • 问:为什么需要条件变量
    • 答:“配合互斥锁使用”
    • 问:对,详细再说下,怎么配合使用,为什么有了互斥锁,还需要条件变量
    • 答:“不太记得了”
    • 问:那说下智能指针线程安全吗
    • 答:“不太清楚,不过我在多线程使用时,会加上锁”
  • 7、
    • 问:平时工作时,有关注过自己写的模块的性能吗,如何发现程序性能还有优化点,如何优化程序性能
    • 答:“一般就是再review代码,确实没有做过太多性能优化的事情”
  • 8、
    • 问:分布式系统的里面我看你的简历里面写了一些,平时应该是很少用,是通过什么途径学习的
    • 答:“主要是通过博客,然后通过一些视频自学过”
    • 问:那说说线性一致性、顺序一致性、因果一致性、最终一致性的区别
    • 答:“最终一致性了解过,应该是说明系统在一段时间过后,数据会达到一致,其他不太清楚”
    • 问:那对于流式系统,请求在不停地来,不停地处理,如何去评价它是否具有最终一致性呢
    • 答:“不太清楚”

个人主观评价和建议

  • 面试评价:
    • 优点:
      • 有一定学习能力,基本知道自己的知识边界
      • 沟通顺畅,表达清晰
      • 提示下能写完,时间复杂度最优的Code
    • 待改进:
      • 语言基础略薄弱
      • 项目经历略简单,且对自己项目的各个模块、上下游链路理解不深
      • 多线程、分布式相关知识薄弱
    • 未问到的领域(未在简历中写熟悉):
      • 数据库、操作系统
  • 建议:
    • 首先是C++语言相关基础需要补充,至少在关键字以及类的使用方面要熟悉
    • 然后是当前所作的项目要在深入理解,至少上下游,当前不足和未来规划要清晰
    • 然后建议在实践中补充操作系统+多线程相关知识和经验,这样在单机的c++开发方面就很让人放心了
    • 最后,对于数据库、分布式相关知识,可以考虑暂缓,有时间的话,把前三项夯实,对跳槽可能更有用。这两块,建议去新的环境中学习

相关推荐

  1. 《大厂面试模拟(免费) - C++工程方向

    2024-03-31 20:30:01       35 阅读
  2. 【面经&八股】搜广推方向面试记录(八)

    2024-03-31 20:30:01       45 阅读
  3. c# Xml 和 Json 转换方法记录

    2024-03-31 20:30:01       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 20:30:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 20:30:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 20:30:01       82 阅读
  4. Python语言-面向对象

    2024-03-31 20:30:01       91 阅读

热门阅读

  1. map net收集

    2024-03-31 20:30:01       34 阅读
  2. MongoDB聚合运算符:$literal

    2024-03-31 20:30:01       32 阅读
  3. Qt之创建向导用户界面QWizard

    2024-03-31 20:30:01       40 阅读
  4. ubuntu22.04安装Fcitx5的步骤

    2024-03-31 20:30:01       33 阅读
  5. python中的re库 ,正则表达式模块

    2024-03-31 20:30:01       36 阅读
  6. 3.30蓝桥杯备赛写题心得

    2024-03-31 20:30:01       36 阅读
  7. vue知识点: v-if和v-for为何不能同时使用?

    2024-03-31 20:30:01       31 阅读
  8. Ansible

    Ansible

    2024-03-31 20:30:01      29 阅读