1. 项目背景与核心目标
这个看似诗意的标题实际上描述了一个典型全栈开发者的日常:既要处理业务需求(写部门接口),又要刷算法题(hot100普通数组和链表),同时保持着对技术相遇的浪漫想象。作为经历过这个阶段的开发者,我想分享如何高效平衡业务开发与算法训练的经验。
2. 业务接口开发实战
2.1 接口设计规范
RESTful接口设计需要遵循这些原则:
- 资源命名使用复数名词(如/departments)
- HTTP方法对应CRUD操作(GET获取/POST创建/PUT全量更新/PATCH部分更新/DELETE删除)
- 状态码精确反映结果(200成功/400参数错误/401未授权/404不存在/500服务器错误)
常见坑:新手容易混淆PUT和PATCH的区别。PUT要求客户端提供完整资源,而PATCH只需传需要修改的字段。
2.2 部门接口典型实现
以Spring Boot为例的部门查询接口:
@RestController @RequestMapping("/api/departments") public class DepartmentController { @Autowired private DepartmentService departmentService; @GetMapping public ResponseEntity<List<Department>> listDepartments( @RequestParam(required = false) String name) { return ResponseEntity.ok(departmentService.searchDepartments(name)); } @GetMapping("/{id}") public ResponseEntity<Department> getDepartment( @PathVariable Long id) { return departmentService.getDepartmentById(id) .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); } }关键点:
- 使用@RestController自动处理响应体序列化
- @RequestMapping定义基础路径
- 参数校验要明确required属性
- 返回ResponseEntity可以灵活控制状态码
3. 算法训练方法论
3.1 Hot 100题目分类攻略
普通数组和链表类题目高频考点:
| 题型 | 解题技巧 | 典型例题 |
|---|---|---|
| 数组遍历 | 双指针/滑动窗口 | 两数之和、盛水容器 |
| 数组排序 | 快速排序变种 | 颜色分类、数组中的第K个最大元素 |
| 链表操作 | 虚拟头节点/快慢指针 | 反转链表、环形链表检测 |
3.2 刷题效率提升技巧
- 建立错题本:记录每道题首次解题的思维盲点
- 计时训练:简单题15分钟/中等题30分钟/困难题45分钟
- 五遍刷题法:
- 第一遍:看题解理解思路
- 第二遍:自己实现
- 第三遍:24小时后重做
- 第四遍:一周后复习
- 第五遍:面试前速刷
4. 时间管理实践
4.1 每日计划模板
我的工作日安排:
08:00-09:00 算法训练(2道新题+复习旧题) 09:00-12:00 业务开发(接口实现) 14:00-16:00 代码评审+问题修复 16:00-18:00 技术方案设计 20:00-21:00 技术博客总结4.2 高效工作工具链
- VS Code插件:
- LeetCode:直接在IDE刷题
- REST Client:测试接口不用切出编辑器
- Chrome扩展:
- Momentum:保持专注
- Toby:工作区快速切换
5. 技术成长路线
5.1 能力雷达图
建议每季度评估:
radarChart title 技术能力评估 axis "业务理解", "架构设计", "算法能力", "工程规范", "沟通协作" "当前" [7, 6, 8, 7, 8] "目标" [8, 7, 9, 8, 8]5.2 学习资源推荐
- 接口开发:
- 《Spring实战》第5版
- RESTful API Design指南(Google API设计规范)
- 算法训练:
- 《算法导论》关键章节
- LeetCode官方解题册
6. 常见问题排查
6.1 接口开发高频问题
N+1查询问题:
- 现象:获取列表时产生大量SQL
- 解决:使用JOIN FETCH或@EntityGraph
循环依赖:
- 现象:Spring启动报Bean创建错误
- 解决:@Lazy延迟加载或重构代码结构
6.2 算法调试技巧
链表问题:
- 打印链表:实现toString()方法
- 可视化:draw.io画指针移动过程
数组越界:
- 添加边界检查日志
- 使用IDE条件断点
7. 个人实践心得
坚持三个月每天"业务+算法"的组合训练后,我的代码质量显著提升。最明显的改变是:
- 写业务时会自然考虑算法复杂度
- 解算法题时会联想实际业务场景
- 技术方案设计更加全面
有个有趣的发现:当用刷题的严谨态度写业务代码,再用业务开发的工程思维解算法题时,确实会产生标题所说的"心有灵犀"效果——解决问题的思路会自然贯通。