此系列,是本人免费提供的,大厂面试模拟,经本人同意后发出。如要申请,请查看《大厂面试模拟(免费)》
面试者画像:
本硕中部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++开发方面就很让人放心了
- 最后,对于数据库、分布式相关知识,可以考虑暂缓,有时间的话,把前三项夯实,对跳槽可能更有用。这两块,建议去新的环境中学习