17-飞书专项突击计划 (Go 语言版)

💡 现状分析: 基础不错(网络/OS/Go 基础),弱点主要在:

  1. Redis 实战:穿透/击穿/雪崩/持久化等场景题不熟。
  2. 分布式理论:CAP/BASE 比较虚,停留在背定义。
  3. 项目经验:缺乏拿得出手的微服务项目(被问到 Kaggle 说明简历上的 Go 项目太单薄)。
  4. 底层原理:如浮点数精度等计算机组成原理知识。

📅 第一周:Redis & 分布式死磕

目标:把 Redis 从”没用过”变成”精通”,能够自信回答所有缓存异常问题。

Day 1-2: Redis 核心大图

  • 数据结构:String, List, Hash, Set, ZSet (跳表原理)。
  • 持久化:RDB vs AOF(优缺点、重写机制)。
  • 过期策略:定期删除 + 惰性删除(为什么不用定时删除?)。
  • 淘汰策略:LRU, LFU, Random(手撕 LRU 是加分项)。

Day 3: 缓存异常实战(重中之重)

  • 缓存穿透:布隆过滤器原理。
  • 缓存击穿:互斥锁(Go singleflight)、逻辑过期。
  • 缓存雪崩:随机过期时间、高可用集群。
  • 双写一致性:先删缓存还是先改库?延时双删?Canal 订阅 Binlog?

Day 4: 分布式理论

  • CAP 定理:深入理解 P 发送时 C 和 A 的权衡。
  • BASE 理论:基本可用、软状态、最终一致性。
  • 分布式锁:Redis setnx + lua 脚本(看下 redsync 包)。

📅 第二周:项目大改造 (ServiceTelemetry)

目标:把现有的 ServiceTelemetry 项目包装成一个高并发、微服务架构的亮点项目。

Day 5: 引入 Kratos 微服务改造

  • Protobuf 定义接口:把 HTTP API 改为 gRPC 定义。
  • 引入 Etcd:做服务注册与发现(解决 CAP 中的 CP 问题)。
  • 引入 Redis:缓存热点遥测数据(解决查询压力)。

Day 6: 解决难点 (给自己挖坑再填坑)

  • 场景:假设每秒上万个遥测数据上报。
  • 优化
    • 使用 Kafka 削峰填谷(引入消息队列)。
    • 数据库使用 时序数据库 (InfluxDB) 或 MySQL 分表。
    • Go 优化:使用 sync.Pool 复用对象,减少 GC。

Day 7: 整理项目话术 (STAR 法则)

  • S (背景):为了解决大规模设备监控数据上报的高并发问题。
  • T (任务):设计一个高可用、可扩展的微服务后端。
  • A (行动)
    • 使用 Kratos 拆分服务。
    • 引入 Redis 缓存热点数据,解决击穿问题。
    • 使用 Kafka 异步处理写入。
  • R (结果):单机 QPS 从 500 提升到 5000,延迟降低 80%。

📅 第三周:算法 & 查漏补缺

目标:保持手感,攻克 Hard 题,补齐底层原理。

Day 8-10: 飞书高频算法题(前 50)

  • 链表:K 个一组翻转 (Hard)、合并 K 个升序链表。
  • 数组/字符串:最长回文子串、无重复字符最长子串、接雨水。
  • 二叉树:层序遍历 (Z字形)、最近公共祖先。
  • 动态规划:爬楼梯、最大子序和、股票买卖。

Day 11: 计算机原理扫盲

  • 浮点数:IEEE 754 标准,二进制小数表示。
  • CPU:缓存行 (Cache Line)、伪共享 (False Sharing)。
  • Linux:零拷贝 (Zero Copy)、IO 多路复用 (Epoll 源码级理解)。

🚀 每日习惯

  1. 早起手撕一题:保持手感。
  2. 模拟面试:对着镜子讲项目,特别是”为什么用 Redis?” “如果有 10 倍流量怎么办?”。
  3. 看面经:牛客网/Boss 上搜”飞书 Go 面经”,查漏补缺。

给你的建议: 面试官看你没项目才问 Kaggle 的。如果你能把 ServiceTelemetry 讲得头头是道(微服务、缓存、消息队列、高并发优化),面试官绝对会眼前一亮!不用真做完所有功能,但原理一定要懂,话术一定要溜