Todo List
第 1 月 - 基础回顾
第 1 周:Spring Boot 核心复习
技术学习
- 复习 Spring Boot 基础架构 (1.5 h)
- 重点:启动流程、自动配置原理、常用 starter。
- 行动指南:
- 1. Debug Spring Boot 的启动类 SpringApplication.run(),理解其核心的 prepareContext 和 refreshContext 步骤。
- 2. 深入理解 @SpringBootApplication 注解背后的三个核心注解 (@Configuration, @EnableAutoConfiguration, @ComponentScan)。
- 3. 找一个常用的 starter (如 spring-boot-starter-web),查看其 pom.xml 和 spring.factories 文件,理解自动配置的实现原理。
- 掌握 15 个核心注解 (2 h)
- @RestController, @Service, @Repository, @Autowired, @Value, @ConfigurationProperties 等。
- 行动指南:
- 创建一个小型项目,亲自实践并分组理解这些注解: 声明Bean (@Component, @Service, @Repository, @Controller); 依赖注入 (@Autowired, @Qualifier, @Resource); 配置读取 (@Value, @ConfigurationProperties); Web开发 (@RestController, @RequestMapping, @PathVariable, @RequestBody); 配置类 (@Configuration, @Bean)。
- AOP 实战练习 (2 h)
- 实现:日志记录、性能监控、权限校验三个切面。
- 行动指南:
- 使用 @Aspect 创建一个切面类。
- 1. 日志切面: 使用 @Around 注解,记录Controller层每个方法的入参、返回值和执行耗时。
- 2. 权限校验: 使用 @Before 注解,模拟检查用户请求中是否带有合法的 token。
- 3. 性能监控: 同样使用 @Around,当方法执行超过特定阈值(如50ms)时,打印警告日志。
- Spring Boot 与 MyBatis 整合 (1.5 h)
- 配置数据源、事务管理、mapper 扫描。
- 行动指南:
- 1. 在 pom.xml 中添加 mybatis-spring-boot-starter 依赖。
- 2. 在 application.yml 中配置数据源 (URL, username, password) 和 MyBatis (mapper-locations)。
- 3. 在启动类上添加 @MapperScan 注解,指定mapper接口的扫描路径。
- 4. 编写一个 UserMapper 接口及对应的XML文件,实现基本的 CRUD 操作并进行测试。
英语学习
- Software Engineering Daily 跟读 (30 min×7)
- 每天选一个 10 分钟片段,逐句跟读 3 遍。
- 行动指南:
- 使用支持 A-B 复读的播放器(如 PotPlayer),对选定的 10 分钟片段进行逐句跟读。第一遍盲听,第二遍看文本跟读,第三遍不看文本模仿语音语调跟读。
- 技术词汇积累 (20 min×7)
- 每天 10 个新词:scalability, latency, throughput, idempotent 等。
- 行动指南:
- 使用 Anki 或 Quizlet 等闪卡应用创建自己的技术词汇卡片集。正面是英文单词,背面是中文释义和例句 (e.g., “This API is idempotent, you can safely retry it.”)。
- 英文自我介绍录制 (1 h)
- 2 分钟版本,包含背景、技术栈、项目经验。
- 行动指南:
- 撰写一份2分钟的英文自我介绍稿,覆盖三个核心部分:Who you are (背景学历), What you do (技术栈与项目), What you want (职业目标)。使用手机录音,反复练习直到流利自然。
算法练习
- 数组类题目×7 (1 h×7)
- 两数之和、三数之和、滑动窗口、双指针技巧。
- 行动指南:
- 集中攻克 LeetCode 上的经典数组题,例如: 1. Two Sum, 15. 3Sum, 209. Minimum Size Subarray Sum (滑动窗口), 11. Container With Most Water (双指针)。
- 整理解题模板 (2 h)
- 总结:滑动窗口、快慢指针、左右指针模板。
- 行动指南:
- 在 Notion 或 Typora 中创建文档,为每种技巧总结出代码模板。例如,滑动窗口模板应包含 left, right 指针的移动逻辑、窗口内数据的更新方式以及结果的判断条件。
实战项目
- 短链系统-需求设计 (3 h)
- 功能需求、非功能需求、容量估算、API 设计。
- 行动指南:
- 撰写一份迷你需求文档。功能需求: 长链生成短链、短链重定向、访问统计。非功能需求: 高可用、高性能、低延迟。API 设计: 设计 /api/v1/generate 和 /{shortCode} 两个核心 RESTful API,明确其请求方法、路径、参数和返回的 JSON 结构。
- 短链系统-数据库设计 (2 h)
- 表结构、索引设计、分库分表策略。
- 行动指南:
- 使用 draw.io 或类似工具绘制 ER 图。设计核心表 url_mapping (id, short_code, long_url, created_at)。重点考虑 short_code 字段应建立唯一索引,并思考未来数据量增长后,如何进行分库分表(如按 short_code 的 hash 值)。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 2 周:Spring 生态深入
技术学习
- Spring Security 深入 (3 h)
- JWT 认证、OAuth 2.0、权限控制、记住我功能。
- 行动指南:
- 在项目中集成 Spring Security。
- 1. 实现一个 JwtAuthenticationFilter 用于解析 JWT Token。
- 2. 配置 SecurityFilterChain,设置 /login, /register 等路径匿名访问,其他路径需要认证。
- 3. 使用 @PreAuthorize(“hasRole(‘ADMIN’)”) 注解实现方法级别的权限控制。
- Spring Cloud 组件 (3 h)
- Eureka、Ribbon、Feign、Hystrix 基础使用。
- 行动指南:
- 搭建一个最小化的微服务环境。
- 1. 启动一个 Eureka Server。
- 2. 创建两个 Spring Boot 应用作为 Eureka Client 互相注册。
- 3. 在一个应用中使用 @FeignClient 接口,以声明式的方式调用另一个应用提供的 API。
- 4. 在被调用的服务中人为制造延迟,并在调用方使用 @HystrixCommand (或 Sentinel) 添加 fallback 逻辑。
- RestTemplate vs WebClient (2 h)
- 同步异步调用对比、性能测试、最佳实践。
- 行动指南:
- 编写测试用例。
- 1. 创建一个会 Thread.sleep(200) 的下游服务接口。
- 2. 分别使用 RestTemplate 和 WebClient 并发调用此接口 100 次。
- 3. 比较两者的总耗时,直观感受 WebClient 异步非阻塞带来的性能优势。
- 全局异常处理 (1.5 h)
- @ControllerAdvice、自定义异常、统一返回格式。
- 行动指南:
- 1. 创建一个统一的 ApiResponse
封装类。 - 2. 创建一个自定义异常 BusinessException。
- 3. 使用 @RestControllerAdvice 注解创建一个全局异常处理器,并在其中使用 @ExceptionHandler 捕获 BusinessException 和 Exception,将其统一封装成 ApiResponse 格式返回。
- 1. 创建一个统一的 ApiResponse
英语学习
- 第一次 Cambly 对话 (30 min)
- 话题:自我介绍、讨论最近的技术学习。
- 行动指南:
- 提前准备好对话提纲:1. 自我介绍。 2. 描述你本周学习的 Spring Security 或 Spring Cloud 的一个具体知识点。 3. 准备 1-2 个问题请教外教。对话结束后,回看录像,记录自己表达不顺畅的地方。
- YouTube 技术视频精听 (30 min×7)
- Spring Boot Tutorial 系列,1.0 倍速,做笔记。
- 行动指南:
- 观看 “Spring Boot Tutorial for Beginners” 系列视频。第一遍正常观看,理解内容。第二遍打开英文字幕,暂停并记录不熟悉的单词或表达。第三遍关掉字幕,尝试听懂每一个句子。
- 技术博客朗读录音 (30 min×7)
- 选 Medium 上的 Java 文章,录音后对比原音频。
- 行动指南:
- 在 baeldung.com 或 vladmihalcea.com 上找一篇关于 Java 或 Spring 的文章。朗读全文并录音,然后与原文音频(如果有的话)或自己的语感进行对比,纠正发音。
算法练习
- 链表专题×7 (1 h×7)
- 反转链表、合并链表、找环、找交点。
- 行动指南:
- 每天攻克一个链表高频题,例如: 206. Reverse Linked List, 21. Merge Two Sorted Lists, 141. Linked List Cycle (快慢指针), 160. Intersection of Two Linked Lists。
- 链表题型总结 (2 h)
- dummy 节点技巧、快慢指针应用、递归 vs 迭代。
- 行动指南:
- 在笔记中总结链表题的常用技巧。Dummy 节点: 简化对头节点的特殊处理。快慢指针: 用于找中点、判断环、找环的入口。递归 vs 迭代: 对比两种方式反转链表的代码实现和优缺点。
实战项目
- 短链系统-核心代码实现 (5 h)
- ID 生成器、长短链映射、301 跳转实现。
- 行动指南:
- 1. ID生成器: 实现一个基于雪花算法 (Snowflake) 或自定义进制转换的短码生成器。
- 2. 映射存储: 编写 UrlMappingService,实现将 short_code 和 long_url 存入数据库的逻辑。
- 3. 301跳转: 编写一个 Controller,接收 /{shortCode} 请求,从数据库查找 long_url,并返回 301 (永久重定向) 状态码。
- 短链系统-缓存层设计 (3 h)
- Redis 缓存策略、缓存更新、缓存击穿处理。
- 行动指南:
- 1. 在 pom.xml 中添加 spring-boot-starter-data-redis。
- 2. 在 UrlMappingService 的查询方法上添加 @Cacheable 注解,实现查询结果的自动缓存。
- 3. 思考并写下笔记:如何处理缓存穿透(缓存空对象)、缓存击穿(热点key失效用锁)和缓存雪崩(过期时间加随机值)。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 3 周:JVM 与并发编程
技术学习
- JVM 内存模型 (3 h)
- 堆、栈、方法区、程序计数器、本地方法栈。
- 行动指南:
- 编写简单的 Java 代码,并用文字或画图解释其在 JVM 内存中的分布。例如 User user = new User();,说明 user 引用在栈上,而 new User() 对象实例在堆上。解释方法区(元空间)存储了类信息。
- 垃圾回收算法 (2 h)
- 标记清除、复制、标记整理、分代收集。
- 行动指南:
- 重点理解不同算法的适用场景。标记-清除 (产生碎片), 复制 (无碎片但浪费空间,适用于新生代), 标记-整理 (无碎片但效率稍低,适用于老年代)。画图演示这三种算法的执行流程。
- GC 调优实战 (3 h)
- GC 日志分析、常用参数调整、OOM 排查。
- 行动指南:
- 1. 编写一个会不断创建对象的程序来模拟内存溢出 (OOM)。
- 2. 使用 JVM 参数 -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError 运行,并获取 heap dump 文件。
- 3. 使用 VisualVM 或 MAT (Memory Analyzer Tool) 打开 dump 文件,分析是哪个对象占用了最多内存。
- 并发基础:synchronized vs Lock (2 h)
- 原理对比、使用场景、性能差异。
- 行动指南:
- 编写代码对比两者。
- 1. 用 synchronized 实现一个简单的线程安全计数器。
- 2. 用 ReentrantLock 实现同样的功能,并务必在 finally 块中调用 unlock()。
- 3. 尝试使用 ReentrantLock 的 tryLock() 方法,演示其可中断和可超时的特性。
- 线程池详解 (2 h)
- 7 大参数、4 种拒绝策略、最佳实践。
- 行动指南:
- 不要使用 Executors 的工厂方法。直接 new ThreadPoolExecutor(…),手动传入 7 个核心参数,并清楚解释每个参数的含义(核心线程数、最大线程数、存活时间、队列类型、拒绝策略等)。
英语学习
- 模拟技术面试-自我介绍 (1 h)
- 录制 5 个版本,选出最佳版本。
- 行动指南:
- 针对不同类型的公司(大厂、创业公司、外企)准备三个版本的英文自我介绍,并分别录制。听自己的录音,改进语调和流利度。
- 技术播客 1.1 倍速练习 (30 min×7)
- 逐步提升听力速度,做关键词笔记。
- 行动指南:
- 听 “Java Pub House” 或 “Talking Kotlin” 等播客。先用 1.0 倍速听懂大意,再用 1.1 倍速进行第二遍收听,训练大脑处理更快语速的信息。
- 第二次 Cambly 对话 (30 min)
- 话题:解释一个技术概念(如微服务)。
- 行动指南:
- 本次对话主题:向外教解释 JVM 的垃圾回收机制。提前画好示意图,练习用简单的语言 (like “It’s like a janitor cleaning up unused objects in memory.”) 解释复杂概念。
算法练习
- 二叉树专题×7 (1 h×7)
- 前序、中序、后序遍历、层序遍历、最大深度。
- 行动指南:
- 练习二叉树遍历:144. Preorder, 94. Inorder, 145. Postorder (递归和迭代两种方法都要掌握), 102. Level Order Traversal。
- 二叉树题型总结 (2 h)
- 递归遍历、迭代遍历、Morris 遍历。
- 行动指南:
- 总结三种遍历方式的迭代实现模板。前序: 栈,先入右子节点再入左子节点。中序: 栈+指针,一路向左,到底后处理并转向右子树。后序: 双栈法或前序遍历的变种。
实战项目
- 短链系统-并发优化 (4 h)
- 使用线程池处理请求、同步锁保护共享资源。
- 行动指南:
- 1. 线程池: 对于一些非核心操作(如记录访问统计),使用 @Async 注解和一个自定义的 ThreadPoolTaskExecutor 将其异步化。
- 2. 同步锁: 当出现缓存击穿时,使用 synchronized 或 ReentrantLock 保护数据库查询代码块,防止多个线程同时查询数据库。
- 短链系统-测试与部署 (3 h)
- 单元测试、集成测试、Docker 部署。
- 行动指南:
- 1. 使用 JUnit 和 Mockito 为 UrlMappingService 编写单元测试。
- 2. 使用 @SpringBootTest 编写集成测试,测试完整的 Controller -> Service -> DAO 链路。
- 3. 编写 Dockerfile 将应用打包成 Docker 镜像,并成功在本地 Docker 环境中运行起来。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 4 周:分布式基础 - Redis
技术学习
- Redis 数据结构复习 (2 h)
- String, List, Set, Hash, ZSet 的使用场景。
- 行动指南:
- 为每种数据结构匹配一个具体的业务场景并写出示例代码。String: 存储用户Session或文章阅读数。Hash: 存储一个用户的完整信息对象。List: 实现一个简单的消息队列。Set: 存储一篇文章的点赞用户ID列表。ZSet: 实现一个游戏积分排行榜。
- Redis 持久化机制 (2 h)
- RDB vs AOF, 配置和优化。
- 行动指南:
- 亲自修改 redis.conf 文件。
- 1. 开启 RDB 并设置 save 策略,然后执行 BGSAVE 并查看 dump 文件。
- 2. 开启 AOF 并设置 appendfsync 策略为 everysec,然后观察 aof 文件是如何记录写命令的。
- Redis 集群方案 (2 h)
- 主从复制、哨兵模式、Cluster 模式。
- 行动指南:
- 画出三种架构的示意图并解释其优缺点。主从复制: 解决数据备份和读扩展。哨兵模式: 在主从基础上实现自动故障转移。Cluster模式: 真正的分布式方案,通过哈希槽实现数据分片,解决单机容量和性能瓶颈。
- Redis 实战场景 (2 h)
- 缓存穿透、缓存雪崩、热点 key 处理。
- 行动指南:
- 针对每个问题,给出清晰的定义和解决方案。缓存穿透: 查询一个不存在的数据。解决方案:缓存空对象或使用布隆过滤器。缓存击穿: 热点Key失效。解决方案:使用互斥锁(如 SETNX)只让一个线程去加载数据。缓存雪崩: 大量Key同时失效。解决方案:给Key的过期时间增加一个随机值。
英语学习
- 第三次 Cambly 对话 (30 min)
- 话题:描述一个技术项目。
- 行动指南:
- 对话主题:向外教描述你的“短链系统”项目。练习使用 First, Then, Finally 等连接词来有条理地介绍项目背景、技术架构和挑战。
- 技术视频 1.25 倍速练习 (30 min×7)
- Redis Tutorial 系列,做笔记。
- 行动指南:
- 在 YouTube 搜索 “Redis Explained” 或 “Redis Tutorial”。先用 1.0 倍速观看并做笔记,然后用 1.25 倍速进行第二遍观看,检验自己是否仍能跟上节奏。
- 英文技术文章阅读 (30 min×7)
- 选 Redis 相关文章,总结关键点。
- 行动指南:
- 阅读 Redis 官方文档中关于持久化或集群的章节。目标不是读懂每个单词,而是能总结出该章节的核心思想和关键配置项。
算法练习
- 图论基础×7 (1 h×7)
- BFS, DFS, 最短路径。
- 行动指南:
- 练习图的两种基本遍历:BFS (常用于求无权图最短路径) 和 DFS (常用于遍历所有可能性)。练习题目: 200. Number of Islands (DFS/BFS), 797. All Paths From Source to Target (DFS)。
- 图题型总结 (2 h)
- 邻接表 vs 邻接矩阵,Union-Find。
- 行动指南:
- 总结图的两种表示方法:邻接矩阵 (适合稠密图) 和邻接表 (适合稀疏图) 的代码实现。学习并实现一个基础的并查集 (Union-Find) 模板,用于解决连通性问题。
实战项目
- 短链系统-集成 Redis (4 h)
- 使用 Redis 作为缓存,实现高可用。
- 行动指南:
- 将之前 @Cacheable 的缓存实现,替换为手动操作 RedisTemplate。在查询时,先查 Redis,若没有再查数据库,并将结果写入 Redis。这样可以更精细地控制缓存的过期时间和更新策略。
- 性能测试与优化 (3 h)
- 使用 JMeter 测试,优化瓶颈。
- 行动指南:
- 使用 JMeter 对未加缓存和加入Redis缓存后的重定向接口进行压力测试。记录下 QPS、平均响应时间、P99 响应时间等关键指标,并制作一个简单的对比图表,这将是简历上的亮点。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 2 月 - 深度强化
第 1 周:分布式基础 - Kafka
技术学习
- Kafka 架构原理 (2 h)
- Broker, Topic, Partition, Replica。
- 行动指南:
- 画出 Kafka 的整体架构图。清晰地解释 Broker, Topic, Partition, Replica, Producer, Consumer, Consumer Group, Zookeeper/KRaft 各自的角色和关系。特别是要理解 Partition 是实现并行处理和水平扩展的关键。
- 生产者模式 (2 h)
- 同步/异步发送、ACK 配置。
- 行动指南:
- 编写一个 Kafka Producer。重点关注并测试三个 acks 配置 (0, 1, all) 对消息可靠性和性能的影响。了解并实践如何配置 retries 和 idempotence 来保证消息不丢失且不重复。
- 消费者模式 (2 h)
- 消费者组、偏移量管理、再平衡。
- 行动指南:
- 编写一个 Kafka Consumer。
- 1. 启动多个实例并指定同一个 group.id,观察 Partition 是如何被分配给不同实例的。
- 2. 尝试手动提交和自动提交偏移量,理解两者的区别和适用场景。
- Kafka 实际应用案例 (2 h)
- 日志收集、流处理、消息队列。
- 行动指南:
- 在“短链系统”项目中,将原来的同步写访问日志改为:Controller 接收请求后,立即发送一条日志消息到 Kafka 的 access_log 主题,然后由一个独立的日志服务去消费和处理。以此来实践业务解耦。
英语学习
- 第四次 Cambly 对话 (30 min)
- 话题:讨论分布式系统挑战。
- 行动指南:
- 对话主题:讨论分布式系统面临的挑战,如网络延迟、节点故障、数据一致性。提前学习 CAP 理论和 BASE 理论的英文表达。
- Kafka 相关英文视频练习 (30 min×7)
- 1.25 倍速,笔记关键词。
- 行动指南:
- 观看 Confluent 官方 YouTube 频道上的 “Kafka 101” 系列视频。用 1.25 倍速观看,练习在快速语境中抓取关键词(如 Partition, Offset, Broker, Zookeeper)。
- 英文技术博客写作入门 (30 min×7)
- 写 Kafka 基础笔记。
- 行动指南:
- 就本周学习的 Kafka 知识,写一篇 300-500 字的英文笔记或博客。主题可以是 “What is Kafka?” 或 “Kafka Producer’s Key Configurations”。使用 Grammarly 等工具检查语法。
算法练习
- 动态规划基础×7 (1 h×7)
- 背包问题、斐波那契、LCS。
- 行动指南:
- 攻克 DP 入门经典题目:70. Climbing Stairs (斐波那契数列), 198. House Robber, 322. Coin Change, 53. Maximum Subarray。
- DP 模板总结 (2 h)
- 状态定义、转移方程、初始化。
- 行动指南:
- 总结 DP 解题五步法:1. 定义 dp 数组的含义。 2. 找出状态转移方程。 3. 初始化 dp 数组。 4. 确定遍历顺序。 5. 举例推导 dp 数组。
实战项目
- 集成 Kafka 到短链系统 (4 h)
- 异步日志记录、消息通知。
- 行动指南:
- 1. 添加 spring-kafka 依赖。
- 2. 创建一个 KafkaProducerService,用于发送短链的访问日志。
- 3. 在重定向 Controller 中调用该服务。
- 4. 创建一个 KafkaConsumerService,使用 @KafkaListener 注解来消费日志消息并打印。
- 系统设计:URL Shortener 扩展 (3 h)
- 高可用设计、全球分布。
- 行动指南:
- 思考并写下设计文档,解决两个问题:1. 如何实现自定义短链接? (在 url_mapping 表中增加一个 custom_code 字段)。 2. 如何统计每个短链接的 PV/UV? (使用 Redis 的 HyperLogLog 统计UV,使用 INCR 命令统计PV)。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 2 周:性能调优与监控
技术学习
- 性能调优工具 (2 h)
- JProfiler, VisualVM 使用。
- 行动指南:
- 1. 启动你的 Spring Boot 应用。
- 2. 打开 VisualVM,连接到该应用的 Java 进程。
- 3. 使用 Sampler 页签找到 CPU 占用最高的“热点”方法。
- 4. 使用 Profiler 页签进行内存分析,观察对象创建和 GC 情况。
- 监控系统介绍 (2 h)
- Prometheus + Grafana 基础。
- 行动指南:
- 1. 在本地通过 Docker 启动 Prometheus 和 Grafana。
- 2. 配置 Prometheus 的 prometheus.yml 文件,添加一个 scrape job 来抓取你的 Spring Boot 应用暴露的 /actuator/prometheus 端点。
- 3. 在 Grafana 中配置 Prometheus 为数据源,并创建一个仪表盘,添加一个图表来展示 http_server_requests_seconds_count 指标,从而监控 QPS。
- 链路追踪 (2 h)
- Zipkin or Jaeger 原理。
- 行动指南:
- 概念学习为主。理解 Trace 和 Span 的父子关系。画图解释当一个请求跨越多个微服务(A -> B -> C)时,Trace ID 是如何通过 HTTP Header (如 B3 Propagation) 传递的,从而将所有 Span 串联起来。
英语学习
- 模拟面试:行为问题 (1 h)
- 准备 STAR 方法回答。
- 行动指南:
- 准备 3 个最常见的行为问题:”Tell me about a time you had a conflict with a teammate.”, “Describe a challenging technical problem you solved.”, “Tell me about a project you are most proud of.”。为每个问题都用 STAR 法则写下详细的英文回答稿。
- 技术播客跟读 (30 min×7)
- 性能调优主题。
- 行动指南:
- 找一个关于性能调优主题的播客片段。第一遍听,理解大意。第二遍,使用能够调速和复读的播放器,进行逐句跟读,重点模仿专业术语的发音和表达方式,例如 “latency bottleneck”, “memory footprint”, “garbage collection overhead”。
算法练习
- 贪心算法×7 (1 h×7)
- 区间调度、跳跃游戏。
- 行动指南:
- 重点攻克贪心算法的经典题型。例如:455. Assign Cookies (理解贪心思想), 435. Non-overlapping Intervals (区间调度), 55. Jump Game, 122. Best Time to Buy and Sell Stock II。
- 贪心总结 (2 h)
- 证明正确性方法。
- 行动指南:
- 总结贪心算法的适用场景:通常涉及局部最优解能推导出全局最优解的问题。写下笔记,区分它与动态规划的区别(贪心不做后悔的选择,而DP会考虑所有选择的最优结果)。
实战项目
- 添加监控到短链系统 (4 h)
- 集成 Micrometer + Prometheus。
- 行动指南:
- 1. 在 pom.xml 中添加 spring-boot-starter-actuator 和 micrometer-registry-prometheus 依赖。
- 2. 在 application.yml 中配置 management.endpoints.web.exposure.include: prometheus 来暴露指标端点。
- 3. 运行应用,访问 http://localhost:8080/actuator/prometheus,确保能看到监控指标输出。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 3 周:系统设计基础
技术学习
- 系统设计方法论 (2 h)
- 4S 分析法:Scenario, Service, Storage, Scale。
- 行动指南:
- 找一个简单的系统设计问题,如“设计一个图片分享网站的后端”。严格按照 4S 法则进行思考和陈述:1. Scenario: 明确功能(上传/查看/评论),估算QPS和存储(DAU 1M)。 2. Service: 拆分为用户服务、图片服务、评论服务。 3. Storage: 用户数据用MySQL,图片用对象存储S3/OSS,评论用MongoDB。 4. Scale: 图片服务前加CDN,数据库做读写分离。
- 常见设计模式 (2 h)
- 负载均衡、缓存、一致性哈希。
- 行动指南:
- 为每个模式画一个简单的架构图。负载均衡: 解释常见的轮询、最少连接等策略。缓存: 画出 Cache-Aside 模式的流程图。一致性哈希: 画图演示当一个节点增减时,它如何比普通取模哈希影响更少的数据。
英语学习
- 系统设计英文视频 (30 min×7)
- Grokking the System Design Interview。
- 行动指南:
- 观看 “Grokking the System Design Interview” 或 “Exponent” 频道上的系统设计面试视频。主动学习法: 视频开始时,面试官提出问题后暂停,自己先花 15 分钟设计一个草案,然后再继续观看,对比自己的思路和视频中讲解的差距。
算法练习
- 堆与优先队列×7 (1 h×7)
- Kth largest, merge k lists。
- 行动指南:
- 掌握 PriorityQueue 的使用。练习相关经典题目:215. Kth Largest Element in an Array (小顶堆), 347. Top K Frequent Elements (小顶堆), 23. Merge k Sorted Lists (小顶堆)。
实战项目
- 设计 Twitter 系统框架 (4 h)
- 用户时间线、推文存储、粉丝模型。
- 行动指南:
- 撰写一份迷你系统设计文档。1. API 设计: 设计发推、关注/取关、获取时间线的核心 API。 2. 数据库Schema: 设计用户表、推文表、关注关系表。 3. 核心挑战分析: 重点分析“粉丝很多的大V发推文”场景下,如何设计时间线(Timeline)的生成和读取(写扩散 vs 读扩散)。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 4 周:项目故事准备
技术学习
- STAR 方法复习 (2 h)
- Situation, Task, Action, Result。
- 行动指南:
- 将你在“短链系统”中做的最大亮点(如性能优化),严格按照 STAR 法则写成一段话。确保 A (Action) 部分足够详细,R (Result) 部分有数据支撑。
英语学习
- 项目故事英文版准备 (1 h×7)
- 翻译并练习讲述。
- 行动指南:
- 选择你过去做过的另外两个项目(可以是课程设计、实习项目或个人作品)。同样使用 STAR 法则和“项目指标化”的方法,将它们包装成两个可以随时在面试中讲述的精彩故事。
算法练习
- 回顾上月算法 (1 h×7)
- 重做难题。
- 行动指南:
- 回到第 1 个月练习过的数组和链表题目。找出当时做起来比较困难的 5 道题,不看答案,重新做一遍。目标是能在 15 分钟内写出 bug-free 的代码。
实战项目
- 扩展 2 个项目故事 (4 h)
- 应用 STAR 法则。
- 行动指南:
- 选择你过去做过的另外两个项目(可以是课程设计、实习项目)。同样使用 STAR 法则和“项目指标化”的方法,将它们包装成两个可以随时在面试中讲述的精彩故事,并写入简历草稿中。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 3 月 - 云原生入门
第 1 周:Docker 基础
技术学习
- Docker 安装与基本命令 (2 h)
- pull, run, exec, logs。
- 行动指南:
- 练习核心命令:docker pull (拉取镜像), docker run -d -p 8080:8080 (后台运行并映射端口), docker ps (查看运行中的容器), docker exec -it
/bin/sh (进入容器交互), docker logs -f (实时查看日志), docker stop/rm (停止/删除容器)。
- 练习核心命令:docker pull (拉取镜像), docker run -d -p 8080:8080 (后台运行并映射端口), docker ps (查看运行中的容器), docker exec -it
- Dockerfile 编写 (2 h)
- 多阶段构建、最佳实践。
- 行动指南:
- 为你的“短链系统”编写一个 Dockerfile。使用多阶段构建 (multi-stage build):第一阶段使用 maven 镜像打包 jar 文件,第二阶段使用轻量的 openjdk 镜像,仅复制第一阶段的 jar 文件来运行。这能显著减小最终镜像大小。
- Docker Compose (2 h)
- 多容器应用管理。
- 行动指南:
- 编写 docker-compose.yml 文件,定义三个服务:app (你的短链系统), redis, mysql。通过 depends_on 控制启动顺序,通过 networks 让它们处于同一个网络中互相通信。实现 docker-compose up -d 一键启动整个应用环境。
英语学习
- Docker 英文教程视频 (30 min×7)
- 1.5 倍速练习。
- 行动指南:
- 观看 “Docker Tutorial for Beginners” 系列视频,在 1.5 倍速下练习听力,并跟着视频亲手敲每一个命令,确保理解其作用。
- 参加线上英语技术 meetup (1 h)
- 讨论容器化。
- 行动指南:
- 在 Meetup.com 或 Eventbrite 上寻找关于 Docker 或云原生的线上活动。即使不发言,也要全程参与,感受技术讨论的氛围,并记录下高频出现的专业词汇。
算法练习
- 字符串处理×7 (1 h×7)
- KMP, Rabin-Karp。
- 行动指南:
- 练习字符串匹配算法,重点是 KMP 算法的思想(理解 next 数组的含义)。练习题目: 28. Implement strStr(), 459. Repeated Substring Pattern。
实战项目
- 容器化短链系统 (4 h)
- 编写 Dockerfile 并运行。
- 行动指南:
- 运行 mvn clean package 打包项目。然后执行 docker build -t short-url-app . 构建镜像。最后,执行 docker-compose up -d 启动整个应用,并通过 localhost:8080 成功访问到服务。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 2 周:Kubernetes 入门
技术学习
- K8s 核心概念 (2 h)
- Pod, Node, Cluster。
- 行动指南:
- 在本地安装 Minikube。理解核心关系:Deployment 是一个“控制器”,它根据模板创建和管理 ReplicaSet,而 ReplicaSet 则确保指定数量的 Pod 始终在运行。Pod 是 K8s 中最小的部署单元。
- Deployment 和 Service (2 h)
- 滚动更新、负载均衡。
- 行动指南:
- 编写 deployment.yaml,定义应用的镜像、副本数 (replicas: 3)。编写 service.yaml,类型设置为 NodePort,将 Service 的端口暴露到集群外部,从而可以通过 minikube ip:
访问到你的应用。
- 编写 deployment.yaml,定义应用的镜像、副本数 (replicas: 3)。编写 service.yaml,类型设置为 NodePort,将 Service 的端口暴露到集群外部,从而可以通过 minikube ip:
- ConfigMap 和 Secret (2 h)
- 配置管理。
- 行动指南:
- 将 application.yml 中的数据库配置抽离出来,存入一个 ConfigMap。将数据库密码存入一个 Secret。然后在 deployment.yaml 中,通过环境变量 (envFrom) 的方式将它们注入到应用的 Pod 中。
英语学习
- K8s 英文文档阅读 (30 min×7)
- 总结术语。
- 行动指南:
- 阅读 Kubernetes 官方文档中关于 “Concepts” -> “Workloads” -> “Deployments” 的章节。目标是能够用自己的话,结合英文术语,解释什么是滚动更新 (Rolling Update) 和回滚 (Rollback)。
- 模拟英文面试:云原生 (1 h)
- 解释 K8s 优势。
- 行动指南:
- 准备并练习用英文回答这个问题:”Why would a company choose Kubernetes over Docker Compose for production?” 答案应覆盖可伸缩性 (scalability)、自愈能力 (self-healing)、服务发现 (service discovery) 等方面。
算法练习
- 二分搜索变体×7 (1 h×7)
- 旋转数组、峰值元素。
- 行动指南:
- 练习非标准数组上的二分搜索。例如:33. Search in Rotated Sorted Array, 153. Find Minimum in Rotated Sorted Array, 162. Find Peak Element。
实战项目
- 部署短链系统到 Minikube (4 h)
- 创建 Deployment 和 Service。
- 行动指南:
- 1. 将你的应用镜像推送到 Docker Hub。
- 2. 编写 deployment.yaml 和 service.yaml。
- 3. 在 Minikube 环境中,依次执行 kubectl apply -f deployment.yaml 和 kubectl apply -f service.yaml。
- 4. 使用 kubectl get pods 和 kubectl get services 检查状态,并成功通过暴露的 NodePort 访问到你的应用。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 3 周:云服务基础
技术学习
- AWS EC2 和 S3 (2 h)
- 实例创建、存储桶管理。
- 行动指南:
- 注册一个 AWS 免费套餐账户。
- 1. EC2: 启动一个 t2.micro 的 Amazon Linux 实例,并通过 SSH 客户端连接上去。
- 2. S3: 创建一个存储桶 (Bucket),通过 Web 控制台上传一张图片,并将其设置为公开访问,获取其访问 URL。
- 阿里云 RDS 和 OSS (2 h)
- 数据库实例、对象存储。
- 行动指南:
- 类似地,在阿里云上:
- 1. RDS: 创建一个最基础配置的 MySQL 实例,获取其连接地址、用户名和密码。
- 2. OSS: 创建一个 Bucket,上传一个文件,并了解其读写权限的设置。
- 云安全基础 (2 h)
- IAM, VPC。
- 行动指南:
- IAM: 创建一个新用户,只授予其 S3 的只读权限,然后使用这个用户的 Access Key 尝试上传文件,验证权限是否生效。
- VPC/安全组: 在 EC2 的安全组中,尝试关闭 22 (SSH) 端口,验证你是否无法再连接。然后再打开它。
英语学习
- 云服务英文文档 (30 min×7)
- AWS 文档阅读。
- 行动指南:
- 阅读 AWS Well-Architected Framework 的白皮书摘要。重点理解其五大支柱的英文名称和核心含义: Operational Excellence, Security, Reliability, Performance Efficiency, Cost Optimization。
算法练习
- 回溯算法×7 (1 h×7)
- 子集、排列、组合。
- 行动指南:
- 掌握回溯算法的模板(选择、递归、撤销选择)。练习经典题目:46. Permutations (排列), 77. Combinations (组合), 78. Subsets (子集)。
实战项目
- 部署到云平台 (4 h)
- 使用 ECS 部署短链系统。
- 行动指南:
- 1. 将你的“短链系统”应用打包成一个可执行的 jar 文件。
- 2. 将 jar 文件上传到你创建的 EC2 实例上。
- 3. 在 application.yml 中,将数据库地址修改为你创建的 RDS 实例地址。
- 4. 在 EC2 上运行 java -jar your-app.jar,并确保 EC2 的安全组开放了 8080 端口,然后通过公网 IP 成功访问。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 4 周:Linux 运维基础
技术学习
- 常用命令实践 (2 h×7)
- ls, cd, grep, awk, sed 等。
- 行动指南:
- 登录到你的 EC2 服务器上,进行实战练习。
- 文件/目录: ls -al, mkdir, touch, cp, mv, rm -rf。
-
[ ] 文本处理: 使用 grep ‘error’ app.log awk ‘{print $1, $5}’ sort uniq -c 组合命令来统计日志中每种错误信息的出现次数。 - 系统监控: 使用 top 查看 CPU/内存占用,使用 df -h 查看磁盘空间,使用 netstat -tuln 查看端口监听。
- shell 脚本入门 (2 h)
- 自动化部署脚本。
- 行动指南:
- 编写一个 deploy.sh 脚本,实现自动化部署“短链系统”到你的 EC2 服务器上。脚本应包含以下步骤:git pull, mvn clean package, 停止旧的Java进程 (kill), 然后在后台启动新的 jar 包 (nohup java -jar … &)。
英语学习
- Linux 命令英文解释 (30 min×7)
- man page 阅读。
- 行动指南:
- 学习如何阅读 man page。例如,执行 man ls,然后尝试理解 -l, -a, -h 等参数的英文解释。目标是能够独立通过 man page 学习一个不熟悉的命令。
算法练习
- 回顾云原生相关算法 (1 h×7)
- 负载均衡算法。
- 行动指南:
- 概念学习为主。研究并能解释至少三种负载均衡算法的原理:1. Round Robin (轮询)。 2. Least Connections (最少连接)。 3. IP Hash。
实战项目
- 搭建个人服务器部署项目 (4 h)
- 使用 Linux VM。
- 行动指南:
- 综合本周所学,将你的 deploy.sh 脚本完善并实际运行在 EC2 实例上。最终目标是:在本地 git push 代码后,只需登录服务器执行一个 ./deploy.sh 命令,就能完成应用的更新部署。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 4 月 - 架构进阶
第 1 周:微服务架构
技术学习
- 服务注册与发现 (2 h)
- Nacos or Consul。
- 行动指南:
- 将“短链系统”拆分为两个服务:short-url-service 和 user-service。在本地启动一个 Nacos Server。让这两个服务都作为 Nacos Client 注册到 Nacos 上。
- 配置中心 (2 h)
- Apollo or Spring Cloud Config。
- 行动指南:
- 在 Nacos 上创建一个配置文件,例如 short-url-service.yml,并将服务中的数据库配置等信息移到 Nacos 上。在服务中引入 Nacos Config 依赖,并配置 bootstrap.yml 来拉取配置。尝试在 Nacos 页面上修改配置,验证服务无需重启即可动态生效。
- 网关 (2 h)
- Spring Cloud Gateway。
- 行动指南:
- 创建第三个服务 api-gateway,引入 Spring Cloud Gateway 依赖。在 application.yml 中配置路由规则,将 /api/user/** 的请求转发到 user-service,将 /api/url/** 的请求转发到 short-url-service。
英语学习
- 微服务英文博客 (30 min×7)
- Medium 文章阅读。
- 行动指南:
- 阅读 Martin Fowler 的著名文章 “Microservices”。目标是理解微服务架构的核心思想,如:组件化、围绕业务能力组织、去中心化治理等。
- 写一篇微服务英文博客 (2 h)
- 发布到 Medium。
- 行动指南:
- 在 Medium 或个人博客上,分享你本周将“短链系统”进行微服务改造的过程和心得。文章结构可以包括:Why Microservices?, The Architecture, Challenges Faced。
算法练习
- 设计相关算法×7 (1 h×7)
- LRU Cache, LFU。
- 行动指南:
- 亲手实现一个 LRU Cache (最近最少使用缓存)。可以使用 HashMap + 双向链表的方式实现,确保 get 和 put 操作的时间复杂度都是 O(1)。
实战项目
- 将短链系统微服务化 (4 h)
- 拆分服务,添加注册中心。
- 行动指南:
- 完成代码拆分,确保服务能独立运行、注册到 Nacos,并通过 Gateway 成功访问。重点是处理服务间的调用(使用 Feign 或 RestTemplate),以及统一的配置管理。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 2 周:系统设计实践 - YouTube
技术学习
- 视频上传与存储 (2 h)
- 分片上传、CDN。
- 行动指南:
- 画出视频处理的流程图:1. 用户通过App/Web上传视频。 2. 后端接收视频文件,存入对象存储 (S3/OSS)。 3. 触发一个转码任务(放入消息队列)。 4. 转码服务器从队列获取任务,将原视频转码成多种分辨率 (1080p, 720p, 480p) 和格式 (HLS, DASH)。 5. 转码后的文件存回对象存储。 6. 用户观看时,通过 CDN 加速分发。
- 推荐系统概述 (2 h)
- 协同过滤、内容基于。
- 行动指南:
- 概念学习。理解协同过滤的核心思想:“物以类聚,人以群分”。基于用户的协同过滤: 找到与你品味相似的用户,把他喜欢的而你没看过的视频推荐给你。基于物品的协同过滤: 找到与你喜欢的视频相似的视频推荐给你。
英语学习
- YouTube 系统设计视频 (30 min×7)
- 英文讲解练习。
- 行动指南:
- 观看 “System Design Interview – A step by step guide” 系列中关于设计 YouTube 的视频。练习跟读视频中解释权衡 (trade-off) 的部分,例如:”On one hand, we can do this… but the downside is… So, a better approach would be…”
算法练习
- 图算法进阶×7 (1 h×7)
- Dijkstra, Floyd。
- 行动指南:
- 学习并实现两种核心的最短路径算法:Dijkstra (适用于无负权边) 和 Floyd-Warshall (适用于所有点对,可处理负权边)。
实战项目
- 设计 YouTube 系统 (5 h)
- 视频流、推荐、搜索。
- 行动指南:
- 在系统设计文档中,重点细化两个模块:1. 视频上传流程图 (同技术学习部分)。 2. 视频推荐系统架构:画出离线和实时推荐的流程。离线部分使用 Spark/MapReduce 计算相似度,实时部分根据用户当前行为进行调整。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 3 周:系统设计实践 - Twitter
技术学习
- 时间线设计 (2 h)
- Fanout on write vs read。
- 行动指南:
- 重点对比两种模式的读写放大问题。写扩散 (Fan-out-on-write): 发推文时,将推文ID写入所有粉丝的时间线列表(存放在Redis ZSet中)。读请求非常快,但写请求很重。读扩散 (Fan-out-on-read): 读时间线时,实时去拉取所有关注对象的最新推文再聚合。写请求快,但读请求非常慢。理解业界通常采用两者结合的混合模式。
- 趋势与搜索 (2 h)
- Elasticsearch 集成。
- 行动指南:
- 画出数据流图。1. 用户发推文,推文数据进入 Kafka。 2. Flink/Spark Streaming 实时消费 Kafka 数据,进行热点词(Hashtag)统计,并将结果存入 Redis。 3. 另一路消费 Kafka,将推文数据写入 Elasticsearch 建立索引。 4. 用户请求趋势榜时读 Redis,请求搜索时查询 Elasticsearch。
英语学习
- Twitter 系统设计讨论 (30 min×7)
- Cambly 练习。
- 行动指南:
- 在 Cambly 上与外教进行一次角色扮演。你扮演面试者,向外教(扮演面试官)解释你将如何设计 Twitter 的时间线功能。重点练习如何清晰地阐述你做出的技术权衡。
算法练习
- 滑动窗口进阶×7 (1 h×7)
- 最大子数组、最长无重复。
- 行动指南:
- 练习需要存储额外信息的滑动窗口题目。例如:239. Sliding Window Maximum (需要使用单调队列), 3. Longest Substring Without Repeating Characters。
实战项目
- 设计 Twitter 系统 (5 h)
- 推文、关注、时间线。
- 行动指南:
- 在系统设计文档中,重点细化时间线模块的设计。画出混合模式的架构图:对普通用户使用写扩散,对大V (celebrities) 使用读扩散,并解释这样做的原因。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 4 周:面试模拟
技术学习
- 常见面试题复习 (2 h×7)
- 微服务优缺点。
- 行动指南:
- 准备并能流利回答这些问题:1. 微服务和单体的优缺点对比? 2. CAP 理论和 BASE 理论是什么? 3. 分布式事务有哪些解决方案?(2PC, TCC, SAGA, 可靠消息最终一致性) 4. 如何设计一个高可用的系统?(冗余、降级、限流、隔离)
英语学习
- 模拟系统设计面试 (1 h×3)
- 用英文回答。
- 行动指南:
- 使用 Pramp 或找朋友进行模拟。严格遵守45分钟的时间限制。练习主动与面试官沟通,澄清需求,画出架构图,并有条理地阐述你的设计选择和权衡 (trade-off)。
算法练习
- mock 面试算法题 (1 h×7)
- 时间限制内解决。
- 行动指南:
- 在白板或 A4 纸上手写代码,而不是用 IDE。练习在没有代码补全和实时纠错的情况下,写出语法正确、逻辑清晰的代码。写完后,自己充当测试人员,想出几个测试用例(包括边界情况)来验证代码的正确性。
实战项目
- Pramp 系统设计练习 (2 h×2)
- 模拟面试。
- 行动指南:
- 完成至少两场 Pramp 上的系统设计面试。一场扮演面试者,一场扮演面试官。扮演面试官能让你更好地理解面试官的考察点,从而在自己面试时表现得更好。
📋 每日时间分配建议
- 9:00-11:00 技术学习
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 项目实战
第 5 月 - 面试冲刺
第 1 周:简历优化
技术学习
- 更新技术栈 (2 h)
- 在简历的“技术栈”部分,将云原生技能具体化,例如:Docker (熟练编写多阶段构建Dockerfile)、Kubernetes (熟悉核心组件,有Minikube部署经验)、Prometheus (通过Micrometer暴露指标并搭建监控)。
- 量化成果 (2 h)
- 为“短链系统”项目添加 3-5 个硬核数据指标。例如:性能 (QPS从500提升至8000)、稳定性 (引入Sentinel实现限流熔断)、效率 (Docker部署时间从30分钟降至2分钟)
英语学习
- 英文简历撰写 (2 h×3)
- 准备三个不同侧重点的英文简历版本:A版强调分布式系统经验,B版突出云原生实践,C版为通用后端岗。
算法练习
- 高频题复习×7 (1 h×7)
- LeetCode Top 100 Liked Questions,每天完成 3-4 题,并要求自己能用两种以上的方法解出其中一题。
实战项目
- 完善项目文档 (3 h)
- 为 GitHub 上的“短链系统”项目撰写一份高质量的 README.md,包含清晰的技术架构图、部署指南和核心功能 GIF 演示。
📋 每日时间分配建议
- 9:00-11:00 求职准备
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 面试模拟
第 2 周:投递策略
技术学习
- 研究目标公司技术栈 (2 h×7)
- 阿里、腾讯、Google。
- 行动指南:
- 1. 找 3-5 个目标岗位的 JD,提炼高频技术关键词。2. 观看该公司近一年的技术分享视频。3. 阅读其官方技术博客,了解他们遇到的挑战和解决方案。
英语学习
- Cover Letter 写作 (2 h)
- 针对你的 Dream Company,撰写一封高度定制化的英文求职信,信中要提到你对他们某项具体技术的理解或赞赏。
算法练习
- 公司高频题练习 (1 h×7)
- Google 常见题。
- 行动指南:
- 使用 LeetCode 的企业题库功能,集中练习目标公司(如 Google)近半年内出现频率最高的 20 道题。
实战项目
- 海投 20 份简历 (3 h)
- 创建一个面试追踪表 (Excel/Notion),记录公司、岗位、投递渠道、当前状态、反馈。重点关注那些在一周内有反馈的公司。
📋 每日时间分配建议
- 9:00-11:00 求职准备
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 面试模拟
第 3 周:面试实战
技术学习
- 复盘面试题 (2 h×7)
- 常见坑点。
- 行动指南:
- 每次面试后 1 小时内,立即记录所有问题。对于答得不好的技术问题,要求自己写一篇500字以上的技术博客文章来彻底搞懂它。
英语学习
- 英文面试复盘 (1 h×3)
- 录音分析。
- 行动指南:
- 如果有英文面试,请求对方允许你录音。面试后反复听录音,找出自己表达不流畅、用词不当的地方,并进行修正。
算法练习
- 每日 3 题 (1.5 h×7)
- 保持手感。
- 行动指南:
- 每天完成 1 道 easy、1 道 medium、1 道 hard 题目,严格限制 medium 和 hard 的解题时间在 25 分钟和 45 分钟内。
实战项目
- 参加 2 场面试 (变时)
- 记录笔记。
- 行动指南:
- 安排一场目标公司的面试和一场“保底”公司的面试。用保底公司的面试来练习和建立信心,用目标公司的面试来检验最高水平。
📋 每日时间分配建议
- 9:00-11:00 求职准备
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 面试模拟
第 4 周:海外机会探索
技术学习
- 研究签证政策 (2 h)
- US H1B, EU Blue Card。
- 行动指南:
- 重点研究 H1B 的抽签流程、时间线和对学历/工作的要求;了解欧洲蓝卡的申请条件和优势。
英语学习
- LinkedIn 优化 (2 h)
- 英文 profile。
- 行动指南:
- 将 LinkedIn 的 Profile 标题、个人简介和每一段工作经历都用 STAR 法则进行优化,添加所有相关的技能标签,并设置为“对新机会开放”。
- 联系海外人脉 (1 h×3)
- 发消息。
- 行动指南:
- 找到 10 位在海外目标公司工作的校友或华人工程师,发送礼貌的、个性化的好友请求,准备好一段简洁的自我介绍和问题。
算法练习
- 海外公司题型 (1 h×7)
- FAANG 风格。
- 行动指南:
- 重点练习图论 (Graph)、动态规划 (DP) 和系统设计相关的算法题(如 LRU Cache),这些是 FAANG 面试的重灾区。
实战项目
- 申请 5 个远程职位 (3 h)
- 准备材料。
- 行动指南:
- 在 akeri.io、We Work Remotely 等平台上寻找合适的远程工作机会,并完成申请。重点关注对时区要求友好的公司。
📋 每日时间分配建议
- 9:00-11:00 求职准备
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 面试模拟
第 6 月 - Offer 收割
第 1 周:精投目标公司
技术学习
- 公司特定技术复习 (2 h×7)
- 针对心仪公司。
- 行动指南:
- 根据已预约的面试,深入复习其 JD 中要求而你相对薄弱的技术。例如,如果 JD 强调 Elasticsearch,则花一天时间复习其核心原理和 API。
英语学习
- 外企面试准备 (1 h×7)
- 文化适应问题。
- 行动指南:
- 准备 BQ (Behavioral Questions) 问题库,特别是关于团队协作、处理冲突、项目领导力等体现文化适应性的问题,并为每个问题准备一个 STAR 故事。
算法练习
- 全真模拟×7 (1.5 h×7)
- 45 min 内解题。
- 行动指南:
- 使用 Pramp 或与朋友结对,进行 7 场 45 分钟的模拟算法面试。练习在有压力的情况下清晰地沟通思路、编写代码并处理边界情况。
实战项目
- 投递 10 个目标职位 (3 h)
- 定制简历。
- 行动指南:
- 这 10 个职位都应是你真心想去的。为每一个职位都对简历进行微调,突出与该 JD 最匹配的技能和项目经历,并通过内推渠道投递。
📋 每日时间分配建议
- 9:00-11:00 求职行动
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 面试实战
第 2 周:面试冲刺
技术学习
- 薄弱环节补强 (2 h×7)
- 基于复盘。
- 行动指南:
- 根据前几轮面试的复盘结果,找到你被问倒次数最多的 1-2 个知识领域(例如并发编程或 JVM 内存模型),进行地毯式复习和总结。
英语学习
- 每日英文对话练习 (30 min×7)
- Cambly。
- 行动指南:
- 每天和 Cambly 导师进行 30 分钟对话。主题: 用英文向导师解释一个你昨天复习的技术概念,例如“什么是 Raft 协议?”。
算法练习
- 随机题练习 (1 h×7)
- 适应未知。
- 行动指南:
- 在 LeetCode 上使用随机选题功能,每天做 3 道题,训练自己在面对完全未知问题时的分析和建模能力。
实战项目
- 每周 3 场面试 (变时)
- 立即复盘。
- 行动指南:
- 将面试安排在周二、周三、周四。面试后立即复盘,总结出的问题在第二天立刻解决,确保在下一场面试中不再犯同样错误。
📋 每日时间分配建议
- 9:00-11:00 求职行动
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 面试实战
第 3 周:Offer 谈判准备
技术学习
- 谈判技巧学习 (2 h)
- 薪资、福利。
- 行动指南:
- 阅读或观看关于薪酬谈判的资料,学习如何沟通你的期望、如何利用 competing offer、以及如何询问福利细节(如签字费、股票归属计划等)。
英语学习
- Offer 谈判英文练习 (1 h×3)
- 模拟对话。
- 行动指南:
- 模拟与 HR 的英文电话或邮件沟通。练习如何专业地表达感谢、询问 Offer 细节、以及提出你的薪酬期望 (counter offer)。
算法练习
- 保持节奏练习 (1 h×7)
- 每日 2 题。
- 行动指南:
- 强度降低,但不能完全停止。每日完成 2 道 medium 题目,保持思维活跃,以应对可能出现的更高轮次面试。
实战项目
- 跟进 Offer (变时)
- 邮件沟通。
- 行动指南:
- 对于已经完成终面的公司,每隔 3-4 个工作日发送一封礼貌的邮件跟进进展。如果收到口头 Offer,务必请求对方发送正式的书面 Offer Letter。
📋 每日时间分配建议
- 9:00-11:00 求职行动
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 面试实战
第 4 周:最终复盘与调整
技术学习
- 6 个月总结 (3 h)
- 进步与不足。
- 行动指南:
- 用 XMind 或类似工具,绘制一份你自己的后端技术知识图谱,将这 6 个月的所有学习内容结构化地串联起来。
英语学习
- 英语进步评估 (2 h)
- 录音对比。
- 行动指南:
- 找出你在第 1 个月录制的英文自我介绍,现在重新录制一遍。对比两个版本,直观地感受自己的进步。
算法练习
- 算法知识图谱构建 (2 h)
- 总结所有模板。
- 行动指南:
- 将所有刷过的题目按类型(DP, DFS, Sliding Window…)分类,并为每种类型总结出核心的解题模板和易错点。
实战项目
- 规划下一阶段 (3 h)
- 持续学习计划。
- 行动指南:
- 确定入职公司后,开始研究该公司的技术栈和内部开源框架,为 Onboarding 做准备。同时,设定入职后 3 个月的学习目标。
📋 每日时间分配建议
- 9:00-11:00 求职行动
- 14:00-15:00 算法练习
- 19:00-20:00 英语学习
- 20:30-22:00 面试实战
Enjoy Reading This Article?
Here are some more articles you might like to read next: