跳到主要内容
左猫娘右猫娘

腾讯二面

· 阅读需 6 分钟
Heng_Xin
ここから先は一方通行だ!

腾讯二面

  1. 自我介绍

  2. 探讨了 服务端架构, 以及 对于CPU密集型 任务, 如何优化~ (越来越细, 但是面试官引导的很好, 逐渐深入!)

以及 线程协程最大的区别; 期间还讨论了我前缀树维护的端点什么的~

  1. 说说你工作的 优化 从 10 min -> 2s 是做了什么?

  2. 你平时看什么书籍

<< C++ templates >>, 平时更多的是看视频(小彭老师/白律师)、博客、论坛(purecpp) (应该补上 cppcon)

  1. 你对元模板挺感兴趣的, 你可以描述一下元模板吗?

  2. 如果一个项目使用了元模板, 如何保证它的可维护性呢?

这块我没有很好的回答出来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`模板实现。
- 给复杂模板增加文档示例和推导用例, 让维护者可以通过类型别名快速验证效果。
md
  1. 看那么多系统相关的, 你对 性能优化 与 可维护性 有什么见解吗?

性能优化主要是 利用多核性能吧, 比如多线程、TBB、Cuda 之类的

可维护就是 强类型(类型代替注释)、设计模式、设置单元测试 这块

后面面试官提示了一下, 性能优化除了硬件方面的应该还有?

  • 数据结构的使用上、现代C++(如移动语义)、以及把一些运行时的内容放到编译期做

反问

  1. 面试官有了解过 C++20 吗? 比如我看 阿里他们有使用 C++20 的 模块 然后进行编译, 编译速度随随便便就提升 10% ~ 50%, 你们日后的战略规划有打算尝试吗?

我们这边主要是 C++17, 但是因为升级C++版本对业务没有什么实质性的提升, 更多的是在编码体验上 (不太记得原话是怎么说的了)

所以这块就没有太主要, 也就是目前的优先级不高.

  1. 如果是新项目呢? 会尝试使用 C++20 吗?

小demo什么的话, 会尝试

然后我这边网卡了, 有些听不清楚. 然后就听到面试官问 我们这块到是使用 AI 进行辅助、代码生成, 到是有.

你有使用过AI吗? 然后探讨了AI使用心得.

  1. 面试官有了解过C++26, 比如编译器就提供了反射. 我个人认为它说不定可以替代 Java 哦awa

有了解, 但是和实际应用的差别还是比较大的qwq. 就比如目前我们主要做的是从 GCC 迁移到 Clang 上,

但是即便这样就已经遇到很多问题了, 比如不同编译器的警告不同导致这里编译不过. 你要是升级C++版本, 那就更难了~ (这好像是前面问题的回答. 我忘记顺序了qwq, 不过实际上都是一个类型的问题)

请作者喝奶茶:
Alipay IconQR Code
Alipay IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...