腾讯二面
· 阅读需 6 分钟
腾讯二面
-
自我介绍
-
探讨了 服务端架构, 以及 对于CPU密集型 任务, 如何优化~ (越来越细, 但是面试官引导的很好, 逐渐深入!)
以及 线程协程最大的区别; 期间还讨论了我前缀树维护的端点什么的~
-
说说你工作的 优化 从 10 min -> 2s 是做了什么?
-
你平时看什么书籍
<< C++ templates >>, 平时更多的是看视频(小彭老师/白律师)、博客、论坛(purecpp) (应该补上 cppcon)
-
你对元模板挺感兴趣的, 你可以描述一下元模板吗?
-
如果一个项目使用了元模板, 如何保证它的可维护性呢?
这块我没有很好的回答出来qwq...
应该是:
**1. 设计层: 控制模板元逻辑复杂度**
- 尽量让每个模板承担单一职责, 拆分成独立的`traits`、`concept`或`constexpr`函数。
- 使用`concept`或`requires`表达式约束模板参数, 明确接口边界, 防止滥用。
- 避免嵌套过深的`if constexpr`或`typename::type`, 用辅助模板或`constexpr auto`函数重构。
**2. 表达层: 提升可读性**
- 所有元模板都必须配`static_assert`断言, 用于早期编译期错误提示。
- 使用`using`别名和命名空间分层组织元逻辑, 避免长链`std::enable_if_t`或`typename detail::meta::...`。
- 命名约定清晰:
- `_t`后缀代表类型结果 (`foo_t`),
- `_v`代表值结果 (`bar_v`)。
- 在核心元逻辑旁写简短注释解释「意图」而不是「机制」。
**3. 工具层: 静态分析与编译期验证**
- 使用`clang-tidy` + 自定义规则检测模板深度、展开次数、递归深度。
- 启用`-ftime-trace`和`-fconcepts-diagnostics-depth`分析编译时间瓶颈。
- 编写小型编译期测试单元(用`static_assert`验证所有预期类型推导)。
**4. 封装层: 提供稳定的外部接口**
- 把元逻辑隐藏在`detail`命名空间, 只暴露最小API层。
- 对外接口尽量使用概念或函数模板, 不暴露底层`struct`模板实现。
- 给复杂模板增加文档示例和推导用例, 让维护者可以通过类型别名快速验证效果。
- 看那么多系统相关的, 你对 性能优化 与 可维护性 有什么见解吗?
性能优化主要是 利用多核性能吧, 比如多线程、TBB、Cuda 之类的
可维护就是 强类型(类型代替注释)、设计模式、设置单元测试 这块
后面面试官提示了一下, 性能优化除了硬件方面的应该还有?
- 数据结构的使用上、现代C++(如移动语义)、以及把一些运行时的内容放到编译期做
反问
- 面试官有了解过 C++20 吗? 比如我看 阿里他们有使用 C++20 的 模块 然后进行编译, 编译速度随随便便就提升 10% ~ 50%, 你们日后的战略规划有打算尝试吗?
我们这边主要是 C++17, 但是因为升级C++版本对业务没有什么实质性的提升, 更多的是在编码体验上 (不太记得原话是怎么说的了)
所以这块就没有太主要, 也就是目前的优先级不高.
- 如果是新项目呢? 会尝试使用 C++20 吗?
小demo什么的话, 会尝试
然后我这边网卡了, 有些听不清楚. 然后就听到面试官问 我们这块到是使用 AI 进行辅助、代码生成, 到是有.
你有使用过AI吗? 然后探讨了AI使用心得.
- 面试官有了解过C++26, 比如编译器就提供了反射. 我个人认为它说不定可以替代 Java 哦awa
有了解, 但是和实际应用的差别还是比较大的qwq. 就比如目前我们主要做的是从 GCC 迁移到 Clang 上,
但是即便这样就已经遇到很多问题了, 比如不同编译器的警告不同导致这里编译不过. 你要是升级C++版本, 那就更难了~ (这好像是前面问题的回答. 我忘记顺序了qwq, 不过实际上都是一个类型的问题)



