java-backend-engineer
Java 后端开发专家 skill。当用户涉及 Java 后端开发、SSM/Spring Boot/Spring Cloud 框架使用、Redis/Nginx 等中间件、高并发多线程编程、JVM 调优、框架源码分析、设计模式应用、代码重构、Java 面试准备、系统架构设计时, **必须**使用此 skill。触发场景包括:写 Java 代码、分析 Spring 源码、设计高并发方案、讨论 JVM 原理、 使用 MyBatis/Redis/消息队列、微服务架构设计、代码审查、性能优化、面试题解答等。即使用户没有明确说 "Java 后端",只要涉及上述技术栈,就必须调用此 skill 提供专家级指导。
来源信息
- 仓库
- bigBeardGit/skills
- 最近来源活动
- 2026年5月17日 15:13
- 检测到的 SKILL.md 语言
- 中文
- 星标
- 0
- 分支
- 0
安装方式
默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。
检查来源文件
决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。
文件资源管理器
6 个文件正在显示 SKILL.md
SKILL.md
来源说明 · 只读预览- name
- java-backend-engineer
- description
- Java 后端开发专家 skill。当用户涉及 Java 后端开发、SSM/Spring Boot/Spring Cloud 框架使用、Redis/Nginx 等中间件、高并发多线程编程、JVM 调优、框架源码分析、设计模式应用、代码重构、Java 面试准备、系统架构设计时, **必须**使用此 skill。触发场景包括:写 Java 代码、分析 Spring 源码、设计高并发方案、讨论 JVM 原理、 使用 MyBatis/Redis/消息队列、微服务架构设计、代码审查、性能优化、面试题解答等。即使用户没有明确说 "Java 后端",只要涉及上述技术栈,就必须调用此 skill 提供专家级指导。
# Java 后端开发工程师
以资深 Java 后端架构师的视角,提供 Java 技术栈全链路的专业指导。精通 Java SE、SSM、Spring Boot、Spring Cloud、中间件、高并发、设计模式和源码分析。
## 核心能力域
---
## 任务类型索引与按需加载
> 本 skill 采用**索引+详细参考**结构。SKILL.md 保留核心速查与任务路由,详细论述性内容存放在 `references/` 目录下。根据用户问题的任务类型,按需读取对应参考文件。
### 按任务类型速查
| 任务类型 | 识别关键词/场景 | 优先读取 | SKILL.md 速查章节 |
|----------|----------------|----------|-------------------|
| **语言基础** | "解释语法"、"这段代码什么意思"、"Java基础"、"面向对象"、"泛型"、"Stream" | `references/java-fundamentals.md` | §1.0 语言基础索引 |
| **集合/JVM/IO** | "HashMap原理"、"ArrayList扩容"、"GC调优"、"类加载"、"NIO"、"Netty" | SKILL.md §1.1~1.4 | — |
| **框架使用** | "Spring事务"、"Bean生命周期"、"MyBatis缓存"、"自动配置"、"Gateway"、"Feign" | SKILL.md §2~5 | — |
| **高并发** | "线程安全"、"线程池"、"AQS"、"volatile"、"synchronized"、"JMM" | `references/concurrency.md` | §6 速查 |
| **设计模式** | "用什么模式"、"模式对比"、"工厂/单例/策略"、"重构到模式" | `references/design-patterns.md` | §7 速查 |
| **架构设计** | "如何设计系统"、"微服务拆分"、"DDD"、"高可用"、"CQRS"、"Clean Architecture" | `references/architecture.md` | §8 架构索引 |
| **代码规范/Review** | "命名规范"、"代码审查"、"重构"、"Clean Code"、"Effective Java" | `references/coding-standards.md` | §9 速查 + 审查清单 |
| **源码分析** | "Spring源码"、"IoC原理"、"AOP实现"、"MyBatis执行流程" | SKILL.md §10 + 源码分析方法论 | — |
### 加载策略
- **默认情况**:先阅读 SKILL.md 的对应章节速查,快速定位知识域
- **深度需求**:当用户问题涉及某领域的系统设计、原理剖析、方案对比时,主动读取对应的 `references/*.md` 获取完整论述
- **多域交叉**:如"高并发架构设计"需同时读取 `references/concurrency.md` + `references/architecture.md`
---
### 1. Java SE 深度掌握
#### 语言基础与面向对象(索引)
> 详细深度内容见 `references/java-fundamentals.md`。以下为极简速查。
**核心一句话**:
- **对象**:一切皆为对象,操纵的是引用;`==` 比地址,`.equals()` 比内容
- **初始化顺序**:父静 → 子静 → 父实例 → 父构造 → 子实例 → 子构造
- **组合优于继承**:Has-A 比 Is-A 更灵活;继承破坏封装
- **多态陷阱**:构造器中不要调用可重写方法;静态方法不参与多态
- **异常**:受检异常(可恢复)vs 非受检异常(编程错误);绝不吞异常
- **泛型**:编译期类型安全,擦除实现;PECS = Producer Extends, Consumer Super
- **Stream**:惰性求值,不改变源数据;并行流慎用;Optional 只作返回值
- **版本特性**:JDK 8(Lambda+Stream) → 17(密封类) → 21(虚拟线程);新项目优先 LTS
---
#### 集合框架
- **ArrayList**: 底层 Object 数组,扩容机制 1.5 倍,初始容量 10,线程不安全
- **LinkedList**: 双向链表,适合频繁插入删除,实现了 Deque 接口
- **HashMap**: 数组+链表+红黑树,JDK8 优化,扩容 2 倍,负载因子 0.75
- 扰动函数: `(h = key.hashCode()) ^ (h >>> 16)`,减少哈希冲突
- 树化阈值 8,反树化阈值 6,最小树化容量 64
- **ConcurrentHashMap**: JDK7 分段锁(Segment),JDK8 CAS+synchronized,并发度更高
- **CopyOnWriteArrayList**: 写时复制,读多写少场景,add 时复制新数组
#### IO/NIO
- **BIO**: 同步阻塞,一个连接一个线程,适合连接数少的场景
- **NIO**: 同步非阻塞,Selector+Channel+Buffer,适合高并发连接
- **AIO**: 异步非阻塞,基于回调,Linux 下 epoll 实现
- **Netty 基础**: 基于 NIO 的事件驱动网络框架,理解 EventLoop、ChannelPipeline、ByteBuf
#### JVM
- **内存模型**: 堆(年轻代 Eden/S0/S1、老年代)、元空间、虚拟机栈、本地方法栈、程序计数器
- **垃圾回收**:
- CMS: 并发标记清除,低停顿,内存碎片,JDK14 移除
- G1: region 化内存,可预测停顿,适合大堆
- ZGC/Shenandoah: 亚毫秒级停顿,染色指针/读屏障
- **类加载机制**: 双亲委派模型,Bootstrap → Extension → Application → Custom
- 打破双亲委派: SPI 机制、OSGi、Tomcat 隔离
- **调优参数**: `-Xms/-Xmx` 建议相同避免动态调整,`-XX:+UseG1GC`,`-XX:MaxGCPauseMillis`
#### 反射与代理
- **动态代理**: JDK 动态代理(基于接口,`InvocationHandler`)、CGLIB(基于继承,`MethodInterceptor`)
- Spring AOP 默认 JDK 代理,无接口时 fallback 到 CGLIB
### 2. SSM 框架精通
#### Spring Core
- **IoC 容器**: BeanFactory vs ApplicationContext,后者含国际化、事件传播、资源加载
- **Bean 生命周期**: 实例化 → 属性赋值 → Aware 接口 → BeanPostProcessor.before → 初始化 → BeanPostProcessor.after → 销毁
- **循环依赖解决**: 三级缓存(singletonObjects、earlySingletonObjects、singletonFactories),构造器注入无法解决
- **事务传播**: REQUIRED(默认)、REQUIRES_NEW、NESTED、SUPPORTS、NOT_SUPPORTED、MANDATORY、NEVER
- **事务失效场景**: 非 public 方法、同类自调用、异常被吞、rollbackFor 配置错误、数据库引擎不支持
#### Spring MVC
- **请求处理流程**: DispatcherServlet → HandlerMapping → HandlerAdapter → Controller → ViewResolver → View
- **注解**: `@Controller`、`@RestController`(= @Controller + @ResponseBody)、`@RequestMapping` 派生注解
- **参数绑定**: `@RequestParam`、`@PathVariable`、`@RequestBody`(JSON 反序列化 Jackson)、`@ModelAttribute`
- **异常处理**: `@ControllerAdvice` + `@ExceptionHandler`,全局统一异常返回
- **拦截器**: `HandlerInterceptor` 接口,preHandle → postHandle → afterCompletion
#### MyBatis
- **执行流程**: SqlSessionFactory → SqlSession → Executor → StatementHandler → ParameterHandler → ResultSetHandler
- **缓存**: 一级缓存(SqlSession 级别,默认开启)、二级缓存(Mapper Namespace 级别,需配置)
- **延迟加载**: 基于 CGLIB 代理,关联对象按需加载
- **插件机制**: 拦截 `Executor`、`StatementHandler`、`ParameterHandler`、`ResultSetHandler`
- **#{} vs ${}`: `#{}` 预编译防 SQL 注入,`${}` 直接拼接,用于动态表名/列名
- **动态 SQL**: `<if>`、`<choose>`、`<where>`、`<foreach>`、`<bind>`
### 3. Spring Boot 精通
#### 自动配置原理
- `@SpringBootApplication` = `@Configuration` + `@EnableAutoConfiguration` + `@ComponentScan`
- `META-INF/spring.factories`(Spring Boot 2.7-) 或 `META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`(2.7+)
- 条件注解: `@ConditionalOnClass`、`@ConditionalOnProperty`、`@ConditionalOnMissingBean`
- 自定义 starter: 创建 `xxx-spring-boot-autoconfigure` + `xxx-spring-boot-starter`
#### 内嵌容器
- 默认 Tomcat,可切换 Jetty/Undertow
- 通过 `WebServerFactoryCustomizer` 自定义线程池、连接数等参数
#### 监控与运维
- **Actuator**: `/actuator/health`、`/actuator/metrics`、`/actuator/env`
- **Micrometer**: 指标收集,对接 Prometheus/Grafana
### 4. Spring Cloud 体系
#### 核心组件
- **Nacos**: 注册中心 + 配置中心,支持 AP/CP 切换,对比 Eureka(纯 AP)、Consul(CP/AP)
- **OpenFeign**: 声明式 HTTP 客户端,集成 Ribbon(负载均衡)、Sentinel(熔断)
- 底层基于 JDK 动态代理 + 编码器/解码器
- **Gateway**: 基于 Spring WebFlux + Reactor,路由、断言、过滤器
- 对比 Zuul1(阻塞) / Zuul2(异步 Netty)
- **Sentinel**: 流量控制、熔断降级、系统自适应保护,对比 Hystrix(已停更)
- **Seata**: 分布式事务,AT(默认,基于 undo_log)、TCC、Saga、XA 模式
#### 微服务设计原则
- 服务拆分: 按业务边界(DDD 限界上下文)、避免过度拆分
- 数据库独立: 每个服务独享数据库,禁止直接访问其他服务数据库
- API 版本控制: URL 路径 `/v1/users` 或 Header `Accept: application/vnd.api.v1+json`
- 分布式一致性: CAP 理论,CP 或 AP 选型,最终一致性方案
### 5. 中间件
#### Redis
- **数据类型与应用场景**:
- String: 缓存、计数器、分布式锁(`SET key value NX EX 10`)
- Hash: 对象存储、购物车
- List: 消息队列(生产者消费者)、时间线(lpush + lrange)
- Set: 去重、交集并集(共同好友)
- ZSet: 排行榜、延迟队列(时间戳做 score)
- Bitmap/HyperLogLog/Geo: 布隆过滤器、UV 统计、地理位置
- **持久化**: RDB(快照,fork 子进程,恢复块但丢数据)、AOF(日志,fsync 策略,恢复慢但完整)、混合持久化(4.0+)
- **高可用**: 主从复制(全量+增量)、哨兵(自动故障转移)、Cluster(16384 槽位,去中心化)
- **缓存问题**: 穿透(布隆过滤器/缓存空值)、击穿(互斥锁/逻辑过期)、雪崩(随机 TTL/多级缓存/熔断降级)
- **线程模型**: 单线程事件循环 + IO 多路复用(epoll/kqueue),6.0 引入多 IO 线程处理网络读写
#### Nginx
- **核心功能**: 反向代理、负载均衡(轮询/权重/ip_hash/least_conn)、静态资源、HTTPS/TLS
- **架构**: Master-Worker 多进程模型,Worker 基于 epoll 事件驱动
- **配置优化**: `worker_processes auto`、`worker_connections 1024`、`keepalive_timeout`、`gzip` 压缩
- **Lua 扩展**: OpenResty,通过 `ngx_lua` 模块实现动态网关、限流、鉴权
#### 消息队列
- **RocketMQ**: NameServer 注册中心,Broker 主从,Topic/Queue 模型
- 事务消息: Half 消息 → 本地事务 → Commit/Rollback → 回查机制
- 顺序消息: 同一 Queue 内有序,Hash 取模保证同 key 同队列
- **Kafka**: 高吞吐日志型 MQ,Topic-Partition 模型,ISR 机制,零拷贝(sendfile)
- **RabbitMQ**: 交换机类型(direct/topic/fanout/headers),TTL+死信队列实现延迟消息
### 6. 高并发与多线程(综合两本经典著作)
> 详细深度内容见 `references/concurrency.md`
> 综合《Java并发编程的艺术》(方腾飞、魏鹏、程晓明)与《Java Concurrency in Practice》(Brian Goetz 等,JCIP)两本经典著作的核心思想。
>
> 《并发编程的艺术》侧重底层实现原理(JMM、volatile、synchronized、AQS、线程池源码、并发容器);《并发编程实战》侧重设计原则与工程实践(线程安全、安全发布、取消与关闭、活跃性、性能与可伸缩性)。两者结合,既有"底层如何工作"的深刻理解,又有"上层如何设计"的工程智慧。
>
> **详细参考**:需要深入了解某项机制的完整源码分析、设计原则、测试方法时,阅读 `references/concurrency.md`。
#### 6.1 并发三大问题与 JMM
| 问题 | 含义 | 解决手段 |
|------|------|----------|
| **原子性** | 操作不可中断,要么全做要么不做 | `synchronized`、Lock、原子类(CAS) |
| **可见性** | 线程修改共享变量后其他线程立即可见 | `volatile`、`synchronized`、Lock、`final` |
| **有序性** | 程序按代码顺序执行 | `volatile`、`synchronized`、happens-before |
**JMM 核心**:主内存 + 线程工作内存。happens-before 是判断数据竞争和线程安全的主要依据(8条规则:程序次序、监视器锁、volatile变量、传递性、start、join、中断、对象终结)。
**volatile 内存语义**:
- 可见性:写 volatile 立即刷新到主内存,读 volatile 使工作内存失效
- 有序性:禁止指令重排序(通过内存屏障实现:写前 StoreStore、写后 StoreLoad、读后 LoadLoad/LoadStore)
- 只保证单个读/写的原子性,`volatile++` 不原子
**synchronized 锁升级**(JDK6 优化):
```
无锁 → 偏向锁(同一线程再次进入无需 CAS)→ 轻量级锁(CAS 自旋)→ 重量级锁(操作系统 Mutex)
```
**final 初始化安全性**:构造函数中 final 域的写不会重排序到构造器之外。前提是 this 引用不能在构造期间逸出(不要在构造器中启动线程、注册监听器、发布内部类)。
#### 6.2 线程安全性(JCIP 核心哲学)
> **编写线程安全代码的核心在于:对共享可变状态的访问进行管理。**
- **无状态的对象总是线程安全的**(没有字段,或只有 final 字段)
- **竞态条件**:`check-then-act`(如懒汉单例)和 `read-modify-write`(如 `i++`)
- **用锁保护状态**:每个共享可变变量都应只由一个锁保护。使用 `@GuardedBy("lock")` 标注
- **活跃性与性能**:同步块只包含必要操作,将耗时的 I/O/计算移出同步块
**对象的共享与安全发布**:
- **逸出**:对象在构造完成前被发布(this 引用逸出、返回私有可变引用)
- **安全发布的四种模式**:静态初始化、`volatile` 引用、`final` 域、锁保护
- **不可变对象**一定是线程安全的;**事实不可变对象**(发布后不再修改)被安全发布后无需额外同步
- **线程封闭**:栈封闭(局部变量)、`ThreadLocal`(线程隔离副本)
**对象的组合**:
- **实例封闭**:将非线程安全对象封装在另一个对象内,通过封装对象的同步保证安全
- **Java 监视器模式**:所有可变状态封装,由对象自己的内置锁保护
- **私有锁优于内置锁**:`private final Object lock = new Object();`,防止客户端错误参与同步
- **线程安全性委托**:如果组件已是线程安全的且状态变量独立,可将安全性委托给组件(但复合操作仍需额外同步)
#### 6.3 AQS 与 Lock 体系
**AQS 核心**(`AbstractQueuedSynchronizer`):
- `state`(int 同步状态)+ FIFO 同步队列(CLH 变体)+ Condition 条件队列
- 独占模式:`acquire` → `tryAcquire`(子类实现)→ 入队 → 自旋/阻塞 → `release` → 唤醒后继
- 共享模式:`acquireShared` → `tryAcquireShared`(返回值 <0 失败,>0 还有剩余)→ `releaseShared` 传播唤醒
- `Node.waitStatus`:CANCELLED(1)/SIGNAL(-1)/CONDITION(-2)/PROPAGATE(-3)
- **ConditionObject**:`await` 释放锁并加入条件队列;`signal` 将节点从条件队列转移到同步队列并唤醒
**Lock 对比**:
| 特性 | `synchronized` | `ReentrantLock` | `ReentrantReadWriteLock` | `StampedLock` |
|------|---------------|-----------------|-------------------------|---------------|
| 可重入 | ✓ | ✓ | ✓ | ✗ |
| 可中断/超时 | ✗ | ✓ | ✓ | ✓ |
| 公平性 | 非公平 | 可选 | 可选 | 非公平 |
| 条件变量 | 1个隐式 | 多个 Condition | 支持 | 不支持 |
| 特色 | 自动释放、锁升级 | 灵活控制 | 读读共享 | 乐观读(无锁读) |
> **选择建议**:优先用 `synchronized`(简洁、自动释放、JDK6后性能差距不大);需要可中断/多条件/公平锁时用 `ReentrantLock`。
**读写锁的锁降级**:获取写锁 → 获取读锁 → 释放写锁 → 以读锁继续。读锁**不能**升级为写锁(会死锁)。
#### 6.4 线程池深入
**ThreadPoolExecutor 七大参数**:核心线程数、最大线程数、存活时间、时间单位、任务队列、线程工厂、拒绝策略。
**execute 流程**:
```
当前线程 < corePoolSize → 创建核心线程执行
↓ 否
加入 workQueue → 队列满?
↓ 是
当前线程 < maximumPoolSize → 创建非核心线程执行
↓ 否
执行拒绝策略
```
**拒绝策略**:AbortPolicy(抛异常,默认)、CallerRunsPolicy(调用者执行,背压)、DiscardPolicy(静默丢弃)、DiscardOldestPolicy(丢弃最老)。生产环境推荐自定义(记录日志+持久化补偿)。
**参数设计**:
- CPU 密集型:`corePoolSize = CPU核数 + 1`
- IO 密集型:`corePoolSize = CPU核数 × 2` 或更大(线程等待时不占 CPU)
- 公式:`最佳线程数 = CPU核心数 × (1 + 等待时间/计算时间)`
- **禁止使用 Executors 便捷方法**(Fixed/Cached/Single 都有 OOM 风险)
**Worker 复用机制**:`runWorker` 内循环从队列取任务执行。核心线程调用 `take()` 永久阻塞;非核心线程调用 `poll(keepAliveTime)` 超时退出。
**Fork/Join 框架**:
- 基于工作窃取(Work-Stealing),每个线程维护双端队列,空闲时从其他线程尾部窃取任务
- `RecursiveTask<V>`(有返回值)、`RecursiveAction`(无返回值)
- 适合计算密集型、可递归分解的任务(数组求和、排序)
#### 6.5 并发容器
| 容器 | 核心机制 | 适用场景 |
在 GitHub 查看这个 SKILL.md 很大,SkillsMP 这里只预览前一段内容。 在 GitHub 查看