C++ 开发一面面经
完整信息
本篇目录
总体我感觉完全从简历项目方向去问的,也没有玩深入走,而且
一、开场与自我介绍
Q1 请先简单介绍一下你自己。
A:总体是:C 语言扎实,正在深入 C++,具备一定 AI 辅助的全栈开发能力,偏好从源码层面钻研实现。
二、系统层与应用层开发的区别
Q2 偏系统层的开发,在难度上和应用层开发有什么区别?
A:主要差别在资料的可得性。第一类是国产自研操作系统上的功能扩展开发,没有公开文档,内部文档又比较旧、有些接口没写,只能直接读源码和源码接口,一开始什么都不知道,这是最难的部分。第二类是内核侧的工作,虽然有公开的 Linux 内核资料,但我之前没接触过,需要重新学 KO 模块的编写与命令、内核 API 的调用方式,仍然要回到源码或内部文档里找实现。应用层恰好相反,公开文档和学习资料都比较充足。所以我理解差异主要在背景知识的获取成本上。
Q3 除了背景知识的差异,开发层面本身有大的区别吗?
A:有,主要是编程范式。我参与的两个项目都以 C 为主,C 不是面向对象的,所以是面向过程的写法,很多结构和流程要自己手工组织,代码里"自己写"的成分更多。应用层多用面向对象的语言,更强调对象抽象和面向对象的设计思想。
Q4 你之前的从业经历里,好像还没有太用过 C++?
A:确实没有具体做过。当时做手机底层驱动,直接接触的是 C;C++ 属于更上面一层,有专门的部门负责,我会看到一些,但没有具体承担。
Q5 用 C 的开发,除了驱动还有哪些内容?
A:驱动是 C 的主场,因为 Linux 内核本身用 C 实现。嵌入式也用 C,但和驱动的处境不同:驱动不是裸板,底下已经有一层铺垫,可以直接执行 C 代码;裸机嵌入式没有这层底层,要先看手册、调接口、写汇编,让汇编跳转到 C 编译出的程序入口才能跑起来。除此之外用 C 比较多的场景,我就不太了解了。
三、AI 辅助编程
Q6 AI 产出的代码、以及它对你编程的辅助,现在对你来说处于什么状态?
A:是一个逐步演进的过程。24 年底开始接触,25 年初开始长期使用,那时 Agent 还不完善,主要是对话式,我把 AI 当单模块实现助手:给出一个模块的实现想法,它出代码,我负责移植到自己的代码里做适配。25 年底到 26 年初,Agent 明显变强,有桌面端和命令行形态的工具,我就把它当成整体项目的协作者,边写计划边实现。26 年中开始主要用国产 Agent,流程稳定为:先让它写 Plan 或 Markdown 计划书,再按步骤拆分,我审查一遍,确认后一步一步交给它实现,每一步再自己审查。这样做的原因是,自己在提示词里往往描述不清,而它写出的计划书会把细节摊开,我一看就知道哪里缺、哪里不符合当前项目,再改一轮。整体上相当于"我当领导、它当员工"的协作方式。
Q7 接触过 OpenSpec、SuperPower 这一类 Spec 编程模式吗?
A:只能算知道,不算接触。知道有这类插件,也能装在常用的几个 Agent 工具上,但没有深入用过,实际就是装过、打开用过。
Q8 你刚才这套流程里,用过 ask、plan 这类模式吗?
A:用过,最常用的是 Plan 模式。给它一个 idea,它围绕这个想法一步一步提问,让我选或者自己填答案,最后生成一份 Markdown 计划书,我审查后确认是否继续。Ask 模式就是单纯的对话问答。真正落地项目时,Plan 是我用得最多的方式。
Q9 有没有拿这些工具做过你自己感兴趣的项目?
A:有。在 Windows 上用 AI 的 Plan 模式做过一个桌面图标分类的小项目:在桌面上生成一个方框,可以把桌面图标拖进去,效果类似手机上的文件夹,只是不做图标缩放,属于完整做过一遍的项目。
四、技术广度
Q10 有接触过三维领域吗?
A:大学时接触过,出于兴趣学过 3DMAX、Maya,也看过一点 Blender,都比较偏使用层面。最近这几年没有碰三维的东西。
Q11 有做过 CAD 研发,或者三维开发、模型开发这类工作吗?
A:没有,这方面确实没接触过。
Q12 做过数据库相关的工作吗?
A:关系型数据库了解一些,能说出 MySQL、PostgreSQL 这类;非关系型也就是 NoSQL,没有接触过,也没有实际用过。
Q13 什么时候该上数据库,什么时候用文件就够?
A:我的判断看数据量、可靠性和查询复杂度。数据量比较大、需要冗余备份时,就该有正式的存储形式;文件的问题在于通常要把整份数据读进来,几十万、几百万量级时内存和性能都扛不住,而数据库按需检索没有这个问题。另一方面,文件只有读写,缺少事务、缓存、分布式和一致性这些能力,需要分布式部署或一致性保证时,必然要上数据库,再在数据库上做拆分、加缓存。实践路径是:先文件过渡,数据量上来、或者出现复杂的查询读写和分布式需求,就整体转数据库。
五、经历追问与难点
Q14 这几段经历是实习还是工作?
A:是全职工作。
Q15 这些经历和项目里,哪一段挑战最大、最难突破?
A:分工作和项目两部分,工作是更重的那部分。刚工作时 C 语言基础偏弱,大学主要用 Java,进公司先从代码规范整改做起,不会的地方靠请教同事和查资料,白天写、写不完就留到晚上,节奏比较吃紧,前后大概持续了一个月。之后开始接新屏幕点亮的任务,因为不熟悉整体框架,一开始束手无策,只能找派任务的前辈和同部门同事,一边听他们开会讲解,一边读代码,逐步弄清框架结构、代码文件怎么组织、命名怎么写,才真正上手。这两段在学的时候耗时比较长,但学会之后后面的开发就快很多。项目上最费力的是第一个自研操作系统上的项目:没有公开文档,内部文档又老旧、缺接口,只能去读源码,加上当时刚入学还有课,前后花了大约两个月才摸清流程、开始实现。第二个内核对项目反而轻松,因为之前已经接触过 Linux 内核和模块编译,而且有 AI 加速。
Q16 遇到全新领域、自己没掌握的知识,你的应对思路是什么?比如新入职一个 C++ 岗,语言特性和你之前用的都不一样。
A:分有没有 AI 两种情况。不用 AI 时,先把问题的范围问清楚——涉及哪些方面、哪些代码、哪些工作,然后自己去搜资料、学明白,工科的基本能力就是自己发现问题、自己解决问题;如果确实看不懂,先去问给我这个问题的人,因为派任务的人一般更清楚背景;如果对方不是技术人员、只是管理者,就去找同岗位的同事或前辈请教。能用 AI 时,先问 AI,多数问题它能讲清楚;遇到概念本身晦涩、不好理解的,再找前辈同事帮忙,用他们习惯的比喻把这层概念翻译一遍。以上是我日常学习的两条路径。
六、反问环节
Q17 想请教一下,贵司做 3D 相关的工作,主要是开发三维程序吗?这个岗位具体做什么?
A:这个部门以工程造价为主要应用场景,属于建筑领域的软件服务商。业务流程是:设计院先把建筑方案化成 CAD 图纸,软件再把二维图纸转成三维模型,算墙的长度、混凝土量、钢筋量、窗户数量,因为三维更接近现实,算量更清晰。过程中大量用到智能识别:比如在一张图纸上选中两根线,就能把图上所有墙识别出来转成墙体;如果拿到的是 PDF 或图片类图纸,还会用 AI 做逆向建模,涉及多模态技术,把它变成能算量的几何模型。
Q18 除了算法和多模态,还会用到哪些技术或工具?听说用到 QT?
A:前端是装在 Windows 上的桌面软件,界面部分用 QT,菜单、Ribbon 入口、管理树、管理表都由 QT 呈现;几何显示由自己的图形库和图形引擎完成。
Q19 贵司在西安的办公地点在哪个区域?
A:在城北经开区,紧邻北三环。
本篇目录
当前问题0119
- 01
请先简单介绍一下你自己。
- 02
偏系统层的开发,在难度上和应用层开发有什么区别?
- 03
除了背景知识的差异,开发层面本身有大的区别吗?
- 04
你之前的从业经历里,好像还没有太用过 C++?
- 05
用 C 的开发,除了驱动还有哪些内容?
- 06
AI 产出的代码、以及它对你编程的辅助,现在对你来说处于什么状态?
- 07
接触过 OpenSpec、SuperPower 这一类 Spec 编程模式吗?
- 08
你刚才这套流程里,用过 ask、plan 这类模式吗?
- 09
有没有拿这些工具做过你自己感兴趣的项目?
- 10
有接触过三维领域吗?
- 11
有做过 CAD 研发,或者三维开发、模型开发这类工作吗?
- 12
做过数据库相关的工作吗?
- 13
什么时候该上数据库,什么时候用文件就够?
- 14
这几段经历是实习还是工作?
- 15
这些经历和项目里,哪一段挑战最大、最难突破?
- 16
遇到全新领域、自己没掌握的知识,你的应对思路是什么?比如新入职一个 C++ 岗,语言特性和你之前用的都不一样。
- 17
想请教一下,贵司做 3D 相关的工作,主要是开发三维程序吗?这个岗位具体做什么?
- 18
除了算法和多模态,还会用到哪些技术或工具?听说用到 QT?
- 19
贵司在西安的办公地点在哪个区域?