P7 · 开发工作流与运维(W27-30)
目标:能融入企业协作,能上手主流 DevOps 工具 验收:能独立完成从代码提交到生产部署的完整流程
一、本阶段核心知识点
A. Git 工程化(每天都在用)
1. 基础命令(必熟)
git init / clone / add / commit / push / pull / fetch / merge / rebase
git stash / cherry-pick / revert / reset / reflog / bisect
2. 分支策略(面试加分)
- GitFlow:
master/develop/feature/*/release/*/hotfix/* - GitHub Flow:基于 main + feature branches
- GitLab Flow:环境分支(main / staging / production)
- Trunk-based:主干开发 + 短期特性分支(大型互联网)
3. PR / MR 流程
- 提交 PR 前自检:单测、Lint、Style、Commit Message
- Code Review 文化:reviewer ≥ 1 人,24h 内响应
- 评论风格:探究问题(非指责)+ 给出建议
- Squash Merge / Rebase Merge
4. 提交规范(Conventional Commits)
feat: 新功能
fix: 修复
docs: 文档
style: 格式
refactor: 重构
perf: 性能
test: 测试
chore: 构建/工具
B. 构建工具
1. Maven
- POM 继承、
dependencyManagement - 多模块项目(parent + children)
- profile(dev / test / prod)
- 常用插件:
maven-compiler/maven-surefire/spring-boot-maven-plugin - 私服:Nexus / Artifactory
mvn dependency:tree/mvn help:effective-pom
2. Gradle(了解)
- Groovy DSL / Kotlin DSL
- 依赖管理、增量构建
C. 单元测试
1. JUnit 5
- 注解:
@Test/@ParameterizedTest/@DisplayName/@Nested - 断言:
assertEquals/assertThrows/assertAll - 生命周期:
@BeforeEach/@AfterEach/@BeforeAll - 假设:
Assumptions.assumeTrue - 嵌套与标签:组织复杂测试
2. Mockito
mock()/when()/verify()@Mock/@InjectMocks/@Spy/@Captor- 验证调用次数 / 顺序 / 参数
3. 测试覆盖率
- JaCoCo:行 / 分支 / 方法覆盖
- 行业经验:业务核心 ≥ 80%,工具类 ≥ 60%
4. TDD 思想(了解)
- Red → Green → Refactor
- 单测先行的适用场景
D. 文档与日志
1. API 文档
- Swagger / OpenAPI 3
- Knife4j(增强 UI)
- SpringDoc
2. 日志框架
- SLF4J + Logback(Spring Boot 默认)
- 日志级别:ERROR / WARN / INFO / DEBUG / TRACE
- logback.xml / logback-spring.xml
- MDC(Trace ID 链路追踪)
- 结构化日志:JSON 格式(Logstash Encoder)
3. 日志收集与查询(ELK)
- Elasticsearch + Logstash + Kibana(或 EFK)
- Filebeat → Logstash → ES → Kibana
- 实战:业务异常自动告警
E. 容器化与编排
1. Docker(必学)
- 核心:
docker run/ps/exec/logs/build/pull/images - Dockerfile 最佳实践:
- 多阶段构建
- 镜像层复用
- 基础镜像选择:
eclipse-temurin:17-jre - Docker Compose:多服务编排
- 网络模式:bridge / host / overlay
- 数据卷:持久化
- 镜像仓库:Harbor / 阿里云 ACR
2. Kubernetes(了解)
- Pod / Deployment / Service / ConfigMap / Secret
- K8s 部署 Spring Boot 项目
F. Linux 常用命令(必熟)
1. 基础
ls / cd / pwd / cp / mv / rm / mkdir / cat / less / tail / head
find / grep / awk / sed / sort / uniq / wc
chmod / chown / ps / top / free / df / du / netstat / curl / wget
ssh / scp / rsync / tar / unzip
2. Java 运维专属
jps/jstack/jmap/jstat/jcmdtop -Hp pid看线程 CPUkill -3 pid触发线程 dump- 内存 dump:
jmap -dump:live,format=b,file=heap.hprof pid
3. 在线排查套路
1. top 看 CPU 哪个进程高
2. top -Hp pid 看线程 CPU
3. jstack pid | grep <nid> 看哪个方法
4. jstat -gcutil pid 1000 看 GC 频率
5. jmap -heap pid 看内存分布
G. Nginx
1. 基础
- 反向代理、负载均衡(轮询 / 权重 / ip_hash)
- 静态资源服务
- 动静分离
2. 进阶
- 限流:
limit_req_zone/limit_conn_zone - 缓存:
proxy_cache - HTTPS:证书配置、HTTP/2
H. 监控与告警
1. 指标采集
- Prometheus:pull 模型、时序数据库
- Micrometer:Java 端埋点
- Grafana:可视化看板
- JVM、Tomcat、Redis、MQ、业务自定义指标
2. 链路追踪
- Sleuth + Zipkin(Spring Cloud 原生)
- SkyWalking(国产推荐)
- TraceID / SpanID 跨服务传递
3. 健康检查
/actuator/health- K8s liveness / readiness
I. CI / CD(持续集成 / 持续交付)
1. GitHub Actions / GitLab CI
- Pipeline:lint → test → build → push image → deploy
2. Jenkins(传统企业)
- Pipeline + Jenkinsfile
3. 部署策略
- 蓝绿部署
- 滚动部署(K8s 默认)
- 灰度发布(按比例 / 用户)
- 金丝雀发布
二、任务清单(可勾选打卡)
Week 27 · Git / Maven / 测试
- 用 GitFlow 在本地模拟完整流程(master/develop/feature/release)
- 写一份完整的 PR 模板 + Code Review Checklist
- 把一个现有项目改为多模块 Maven 工程
- 给 P1 阶段的 demo 写 JUnit 5 + Mockito 单测,覆盖率 ≥ 80%
- 给一个项目加 Conventional Commits 规范 + commitlint
Week 28 · Docker / Nginx / Linux
- 把 P1-P5 任意一个 demo 改造成 Dockerfile + docker-compose
- 跑通 Nginx 反向代理 Spring Boot + 限流配置
- 在 Linux 上排查一个伪 CPU 100% 问题,输出报告
- 写一份《Linux 常用命令速查表》(自己整理)
Week 29 · 日志 / 监控 / 链路
- 集成 ELK(本地 docker-compose),接入业务日志
- 集成 Prometheus + Grafana 监控 P6 项目 1
- 集成 Sleuth + Zipkin,验证 TraceID 跨服务传递
- 配置业务异常 ERROR 日志自动告警
Week 30 · CI/CD 与综合实战
- 用 GitHub Actions 写完整 Pipeline(Lint + Test + Build + Push + Deploy)
- 配置 K8s(或简单 docker swarm)灰度发布
- 输出《部署运维手册》md:覆盖发布 / 回滚 / 扩容 / 监控
- 完成 P6 项目 2 的完整部署运维方案
三、阶段验收标准
✅ 能独立完成: - 在 Linux 上排查一次线上问题的全过程(命令 + 截图) - 在新项目接入 ELK + Prometheus + 链路追踪 - 用 GitHub Actions 跑通完整 CI/CD - 写出《部署运维手册》给新人按步骤上手
四、产出物
notes/P7-week27-Git与测试.mdnotes/P7-week28-Docker与Linux.mdnotes/P7-week29-日志与监控.mdnotes/P7-week30-CI-CD.md.github/workflows/CI 配置docker/Docker Compose 工程runbook/部署运维手册.md
五、面试高频问题预告
- Git rebase 与 merge 的区别?什么时候用?
- 你们项目怎么分模块的?为什么用 Maven 多模块?
- 单测覆盖率多少?你怎么写单测?
- 你们线上怎么监控的?告警怎么配?
- 你们怎么发布?蓝绿还是滚动?回滚怎么做的?
- 你线上排查过最难的问题是什么?