面灵AI→

华为通软西安线下三面合辑:手撕与八股复盘

轮次
一面+二面+三面
时间
2026-10
来源
牛客网

《面试题目》

一面(35 分钟)

  1. 手撕:左上到右下路径数目(递归实现)。
  2. C++ 的编译产物有哪些?编译过程是怎样的?
  3. 什么是 RAII?
  4. HTTP 各种请求方法的区别是什么?
  5. 删除博客内容时使用 GET 报文有什么问题?
  6. 各个数据库的区别是什么?运用到工程部署上该怎么选择?
  7. 有没有用过 Agent?

二面(26 分钟)

  1. 手撕:二分查找。
  2. 讲讲项目上遇到的困难。
  3. 团队协作相关的经历?
  4. 用过 Agent 吗?

三面(30 分钟)

  1. base 地怎么选择?
  2. 有没有迷茫的时候?
  3. 为什么选择就业而不是继续深造?
  4. 为了就业做了哪些准备?

《参考解析》

C++ 编译过程与 RAII 是同一套「资源生命周期由对象管理」的知识。 编译分四步:预处理(展开宏、处理 #include 与条件编译,产出 .i)→ 编译(词法语法语义分析与优化,产出汇编 .s)→ 汇编(转成目标文件 .o,含机器码、符号表与重定位信息)→ 链接(符号解析与重定位,静态库直接并入、动态库只留引用,产出可执行文件或 .so)。常见追问:声明与定义的区别、extern 与 static 的作用、为什么头文件要加 include guard、inline 的真实含义(允许在多个编译单元重复定义,不是「一定展开」)、静态链接与动态链接在体积与升级上的取舍、以及 ODR(单一定义规则)违例会导致什么。RAII 是把资源的获取放在构造函数、释放放在析构函数,靠栈对象的确定性析构保证任何返回路径与异常路径都能释放,典型应用是智能指针、锁的 lock_guard、文件流与 socket 包装类。要主动讲清它与 GC 的差别:RAII 是确定性的、可管理非内存资源(句柄、锁、连接),GC 只处理内存且时机不确定。追问预备:unique_ptr 与 shared_ptr 的开销差异、循环引用与 weak_ptr、make_shared 相比 new 少一次分配、以及析构函数抛异常的危险。

GET 删除内容是语义与安全双重违规。 HTTP 方法有明确的语义约定:GET 是安全方法(不改变服务端状态)、幂等方法(重复执行结果相同)、且响应可被缓存与预取,参数在 URL 里还会进日志、浏览器历史与 Referer;用它来删除内容,会被爬虫、预取器、代理缓存「顺手」触发,也会因为重放导致误删。正确做法是用 DELETE 或 POST,并把动作做成幂等(携带资源 ID,重复调用返回相同结果),再补一层鉴权与 CSRF 防护、软删除与操作审计。追问常延伸到「哪些方法幂等」(GET、HEAD、PUT、DELETE 幂等,POST 不幂等)、「什么时候用 PUT 什么时候用 POST」、「HTTP 状态码语义」(201/204/409/412)、以及「为什么不能只用 POST 把语义都塞进 body」。

数据库选型按「数据模型、一致性、访问模式、运维成本」四条判断。 关系型(MySQL/PostgreSQL)适合强事务、复杂关联查询与结构稳定的业务,是交易与账务的默认选择;PostgreSQL 在复杂类型(JSONB、数组、地理)与扩展性上更强,MySQL 生态与运维资料更厚。KV/缓存(Redis)适合高频读写与短暂态数据;文档型(MongoDB)适合结构灵活、按文档整体读写的场景;宽列(HBase/Cassandra)适合写入量大、按 key 范围扫描的日志与消息;搜索引擎(Elasticsearch)适合全文检索与分析;列式仓库(ClickHouse/Doris)适合报表与 OLAP;时序库(InfluxDB/TDengine)适合监控指标。工程部署上还要算三笔账:团队是否熟悉(选型首要考虑)、单机规模上限与分片方案、以及备份/扩容/升级的运维成本。面试里能把「为什么这个业务用它」讲成一个取舍故事,比背产品特性有效得多。

手撕两题都在考基本功,讲思路比写完更重要。 左上到右下路径数目:网格是 m×n,每次只能向右或向下,状态转移是 dp[i][j] = dp[i-1][j] + dp[i][j-1],边界第一行第一列都是 1,可滚动数组把空间降到 O(n);数学解是组合数 C(m+n-2, m-1),需要注意溢出(改写成边走边除防止中间结果爆掉)。递归实现要能说清「为什么直接递归是指数级、加记忆化后是 O(mn)」。二分查找的坑全在边界:用 left + (right-left)/2 防溢出、循环条件 left <= right 与 left < right 两种写法的收尾处理、返回「第一个不小于目标的位置」还是「是否存在」、以及数组有重复元素时要求第一个或最后一个出现位置的变体。写完主动跑两个用例(空数组、单元素、目标在两端)是加分动作。

「用过 Agent 吗」这类题要答成工程经验而不是工具清单。 一面的技术语境下,这题想确认的是你有没有真的把 AI 用在开发或测试链路里,以及有没有形成判断。答法建议按「场景—做法—效果—边界」四段:说明在哪个环节用(读代码、写用例、排查日志、生成单测)、怎么保证可控(上下文怎么给、工具怎么限制、结果怎么验证)、拿到的可量化收益(节省时间、发现的缺陷数)、以及什么时候不该用(需要确定性、涉密、成本高于收益)。只答「用 Cursor 写代码」信息量太低;能讲出「我会把接口定义喂进去让它生成用例,再自己按边界值补齐并跑一遍」这种带验证环的做法,才算过关。三面的软性问题同理,要给出具体、有取舍的答案而不是标准口号:base 地选择可以从业务与团队匹配度讲并表达可接受度;「有没有迷茫过」讲清一次真实的困惑与你怎么调整的;「为什么本科就业」不要贬低读研,而是讲清楚你的目标与就业路径的匹配;「为就业做了哪些准备」给出可验证的事(项目、实习、刷题量、复盘方式),有数字就带数字。