Skip to content

手撕代码

知识储备

并行计算基础

  • 阿姆达尔定律:理解并行计算中串行部分的性能限制。
  • NUMA 架构:非统一内存访问的原理及应用场景。
  • False Sharing 问题:缓存行伪共享现象及优化策略。
  • GPU 与 CPU 异构计算:SIMD 架构、线程调度及通信优化技术(如 RDMA)。

算法思维深度

  • 堆的应用:解决 TOP K 问题(如流式数据求最大 K 个元素)。
  • 双指针变种:滑动窗口处理时序数据(如最小覆盖子串)。
  • 树结构问题:非递归遍历和最近公共祖先(LCA)算法。
  • 动态规划:状态压缩技巧(如滚动数组)和字符串编辑距离。

系统底层优化

  • 缓存一致性协议:MESI 协议的工作原理及性能影响。
  • 内存对齐:数据结构 padding 优化。
  • 向量化指令:AVX-512 在矩阵运算中的应用。
  • 分布式系统优化:通信开销优化(如计算与通信重叠)。

计划

筑基阶段(Day1-4)

  • 上午:主攻高频数据结构(哈希表、堆、双指针、树结构)。
  • 下午:学习并行计算理论(阿姆达尔定律、NUMA 架构、False Sharing)。
  • 晚上:综合复盘,完成 5 道 LeetCode 精选题目。

进阶训练(Day5-10)

  • 动态规划攻坚:背包问题、字符串处理类 DP、矩阵路径 DP 并行化分析。
  • 树与图算法:LCA 问题、Dijkstra 算法、并行图计算(如 BFS 层级并行)。
  • 高性能计算专题:OpenMP 并行矩阵乘法、MPI 归并排序、GPU 优化。

模拟实战(Day11-14)

  • 每日 2 场机考模拟:练习大厂真题(如字节跳动字符串解码、华为矩阵路径)。
  • 手撕代码强化:严格时间限制,五步解题法(问题澄清、举例验证、暴力解法、优化分析、代码实现)。
  • 错题深度复盘:分析错误类型(边界条件遗漏、优化思路偏差、并行设计缺陷)。

考点与经典题型

数据结构类必刷题

  • 哈希表:两数之和、最长连续序列、和为 K 的子数组。
  • 堆结构:数组中的第 K 大元素、数据流中位数、IPO 问题。
  • 双指针:三数之和、最小覆盖子串、回文链表。

树与图核心题型

  • 二叉树:翻转二叉树、二叉搜索树转双向链表。
  • 图论:课程表(拓扑排序)、腐烂的橘子(多源 BFS)、网络延迟时间(Dijkstra)。

动态规划经典模型

  • 字符串处理 DP:编辑距离、正则表达式匹配、单词拆分。
  • 背包问题变种:分割等和子集、零钱兑换、目标和。

高性能计算特选题

  • 并行算法:OpenMP 矩阵乘法、MPI 归并排序。
  • 硬件优化:GPU 矩阵转置、False Sharing 修复(缓存行填充)。

面试实战技巧

沟通表达规范

  • 解题过程展示:先框架后细节,辅以架构图说明。
  • 复杂度分析:主动说明时空复杂度及并行加速比预期。

代码编写规范

  • 防御性编程:输入校验、指针判空。
  • 模块化设计:拆分为辅助函数,关键步骤注释。

疑难问题应对

  • 卡壳重启技巧:暴力解法兜底,类比经典问题。
  • 未完成代码补救:伪代码 + 核心逻辑片段。

学习资源与工具

刷题平台

  • LeetCode:大厂真题覆盖率最高。
  • 牛客网:完整机考环境模拟。
  • Codeforces:思维强化训练。