Skip to main content

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에서 보기