计划调整为 16 周:以 Python/Agent 为主线,新增 RAG 项目、Redis/消息队列/Docker、LangGraph、MCP、记忆、评测和岗位要求对照

This commit is contained in:
Shikui Wang committed 2026-10-22 18:17:06 +08:00
1 parent f8a25cb765
commit 1e6315bb40
11 files changed
+1205 -629

No files matched your search

+28 -2
View File
@@ -1,12 +1,14 @@
# 转岗计划 · 第 3 周学习计划(PostgreSQL + SQL + sqlc)
> 所属阶段:第 1 个月 Go 全栈基础。总纲见同目录 `README.md`,上周计划 `week02-gin-api.md`,下周计划 `week04-auth-project1.md`。
> 所属阶段:第一段 Go 全栈基础(第 1~5 周)。总纲见同目录 `README.md`,上周计划 `week02-gin-api.md`,下周计划 `week04-auth-project1.md`。
目标:把第 2 周任务清单里的 `MemoryStore` 换成 PostgreSQL。学会表结构设计、常用 SQL、索引、事务和数据库迁移,用 sqlc 生成类型安全的数据访问代码。因为上周用接口隔离了存储层,本周主要是新写一个 `PgStore`,接口代码基本不用动。
前置条件:第 2 周的 `todo-api` 已完成,`go test ./... -race` 能通过,前端能联调。
要求:SQL 自己写,AI 只帮你检查和解释。本周是你在 Agent 项目里设计状态表的基础,表结构设计这一块一定要自己想清楚。
要求:SQL 自己写,AI 只帮你检查和解释。表结构设计、索引、事务是所有后端岗位的基本功,后面 RAG 和 Agent 项目设计状态表也靠它。
**为什么学 PostgreSQL 而招聘里 MySQL 更多**:招聘里写 MySQL 的明显更多,但两者的常用 SQL 大部分相同。本周用 PostgreSQL 学(它的 pgvector 扩展在 RAG 里也能用),文末附“MySQL 差异速查”和一个半天的小练习,面试时能说清差异就够了。
参考资料:
- PostgreSQL 官方文档(中文):http://www.postgres.cn/docs/current/
@@ -289,5 +291,29 @@ docker compose exec postgres psql -U todo -d todo # 进入交互模式
- [ ] 会用 `ON CONFLICT` 做“存在就跳过或更新”
- [ ] 写了能自动跳过的集成测试
- [ ] 会做游标分页
- [ ] 看过文末 MySQL 差异速查,能说出 3 个以上的差异
## 附:MySQL 差异速查(第 7 天有余力时做,或放到第 5 周的缓冲时间)
招聘里 MySQL 出现得多,会 PostgreSQL 后只需要知道这些差异:
| 方面 | PostgreSQL | MySQL 8 |
| --- | --- | --- |
| 自增主键 | `BIGSERIAL` 或 `GENERATED ... AS IDENTITY` | `BIGINT AUTO_INCREMENT` |
| 插入后拿回数据 | `INSERT ... RETURNING *` | 不支持 `RETURNING`,用 `LAST_INSERT_ID()` 再查一次 |
| 存在就更新 | `ON CONFLICT (...) DO UPDATE` | `ON DUPLICATE KEY UPDATE` |
| 布尔 | `BOOLEAN` | `TINYINT(1)`(`BOOLEAN` 是它的别名) |
| 时间 | `TIMESTAMPTZ` 带时区 | `DATETIME` 不带时区,`TIMESTAMP` 有范围限制;一般统一存 UTC |
| JSON | `JSONB`,可建索引 | `JSON`,索引要借助生成列 |
| 字符集 | 默认 UTF-8 | 建库时指定 `utf8mb4`,否则存不了表情符号 |
| 字符串比较 | 默认区分大小写 | 默认排序规则一般不区分大小写 |
| 存储引擎 | 只有一种 | 用 InnoDB(支持事务和外键) |
| 占位符(Go 驱动) | `$1, $2` | `?` |
**小练习(半天)**
- 在 `docker-compose.yml` 里加一个 `mysql:8` 服务(端口 `3306`)。
- `sql/practice/mysql_schema.sql`:把 `000001` 和 `000003` 迁移改写成 MySQL 语法,跑通。
- `sql/practice/mysql_notes.md`:记下改写时遇到的每一处差异。
- 了解即可:sqlc 也支持 MySQL(`engine: mysql`),GORM 两种数据库都支持,换库主要改的是 SQL 方言和驱动。
下周预告:第 4 周在这套基础上做项目一“团队任务看板”:注册登录、JWT、看板成员权限、按状态分列的任务,前后端完整联调。