一个完整的电商微服务系统,专为Java面试准备设计
这是一个完整的、可运行的Java微服务项目,项目中实际运用了3年Java工程师需要掌握的所有核心技术点。每个技术点都有详细的代码注释,标注该技术点的应用场景和面试重点。
| 技术 | 版本 | 说明 |
|---|---|---|
| Java | 17+ | 现代Java特性(记录类、密封类、虚拟线程等) |
| Spring Boot | 3.x | 微服务框架 |
| Spring Cloud | 2022.x | 微服务架构 |
| MyBatis Plus | 3.5.x | ORM框架 |
| MySQL | 8.0 | 关系型数据库 |
| Redis | 7.x | 缓存、分布式锁 |
| RabbitMQ | 3.12 | 消息队列 |
| Elasticsearch | 8.x | 搜索引擎 |
| Nacos | 2.x | 服务注册/配置中心 |
| Sentinel | 1.8.x | 流量控制/熔断降级 |
| Redisson | 3.23.x | Redis客户端/分布式锁 |
| 技术 | 说明 |
|---|---|
| Docker | 容器化部署 |
| Maven | 项目管理 |
| Git | 版本控制 |
| SkyWalking | 分布式链路追踪 |
| Prometheus + Grafana | 监控告警 |
java-interview-project/
├── common/ # 公共模块
│ └── common-core/ # 核心工具类、注解、切面
├── user-service/ # 用户服务
│ ├── controller/ # 控制器层
│ ├── service/ # 业务层
│ ├── mapper/ # 数据访问层
│ ├── entity/ # 实体类
│ └── dto/ # 数据传输对象
├── product-service/ # 商品服务
├── order-service/ # 订单服务(消息队列)
├── inventory-service/ # 库存服务(分布式锁)
├── payment-service/ # 支付服务
├── search-service/ # 搜索服务
├── gateway/ # API网关
├── docker-compose.yml # Docker编排
├── scripts/ # 脚本目录
└── docs/ # 文档目录
- 泛型与类型擦除
- 集合框架(ArrayList、HashMap、ConcurrentHashMap)
- 并发编程(线程、线程池、锁机制)
- JVM原理(内存模型、GC、类加载)
- 新特性(Lambda、Stream、Record)
- Spring Boot自动配置
- Spring IOC/AOP原理
- Spring事务管理
- Spring MVC原理
- Spring Boot Starter
- MySQL索引与优化
- 事务与隔离级别
- MyBatis动态SQL
- Redis数据结构与应用
- 缓存策略(Cache Aside、Write Through)
- RabbitMQ核心概念
- 消息可靠性保证
- 消息顺序性
- 消息幂等性
- 死信队列
- 服务注册与发现
- 服务间调用(Feign)
- 负载均衡
- 服务熔断降级
- 配置中心
- API网关
- 分布式锁(Redis/Zookeeper)
- 分布式事务
- 幂等性设计
- 限流与防刷
- 高并发设计
- 单例模式
- 工厂模式
- 代理模式
- 策略模式
- 模板方法
- 观察者模式
- JDK 17+
- Maven 3.8+
- Docker & Docker Compose
- MySQL Client(可选)
# 启动所有中间件
docker-compose up -d
# 检查服务状态
docker-compose ps# 执行数据库脚本
docker-compose exec -T mysql mysql -uroot -p123456 < scripts/init-db.sql# 一键启动所有服务
chmod +x scripts/start-all.sh
./scripts/start-all.sh
# 或手动启动
cd user-service && mvn spring-boot:run| 服务 | 地址 |
|---|---|
| 用户服务 | http://localhost:8081 |
| 商品服务 | http://localhost:8082 |
| 订单服务 | http://localhost:8083 |
| 库存服务 | http://localhost:8084 |
| API网关 | http://localhost:8080 |
| Nacos | http://localhost:8848/nacos |
| RabbitMQ | http://localhost:15672 |
- 阅读
user-service模块代码 - 重点理解:Controller → Service → Mapper 的调用流程
- 学习MyBatis Plus的使用
- 理解Spring Boot自动配置原理
- 阅读
inventory-service模块 - 重点理解:Redis分布式锁的实现
- 阅读
order-service模块 - 重点理解:RabbitMQ消息发送和消费
- 学习Nacos服务注册与配置
- 理解Feign服务调用
- 学习Sentinel熔断降级
- 理解分布式事务方案
- 部署完整项目
- 阅读所有模块的代码注释
- 尝试添加新功能
- 准备面试题
位置: inventory-service/InventoryServiceImpl.java
// 使用Redisson实现分布式锁
RLock lock = redissonClient.getLock(lockKey);
try {
// 尝试获取锁,等待5秒,锁持有30秒
boolean acquired = lock.tryLock(5, 30, TimeUnit.SECONDS);
if (acquired) {
// 执行库存扣减逻辑
}
} finally {
// 释放锁
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}位置: order-service/OrderServiceImpl.java
- 消息持久化:
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT) - 消息确认:配置
publisher-confirm-type: correlated - 消息回调:实现
ConfirmCallback
位置: inventory-service/InventoryServiceImpl.java
方案一:Redis分布式锁 + Lua脚本 方案二:数据库乐观锁 方案三:Redis原子操作
| 技术点 | 文件位置 |
|---|---|
| AOP切面 | common/common-core/.../LogExecutionTimeAspect.java |
| 线程池 | common/common-core/.../ThreadPoolConfig.java |
| 统一返回 | common/common-core/.../result/Result.java |
| 事务管理 | user-service/.../UserServiceImpl.java |
| 分布式锁 | inventory-service/.../InventoryServiceImpl.java |
| 消息队列 | order-service/.../OrderServiceImpl.java |
| 服务注册 | user-service/.../UserApplication.java |
| 参数校验 | user-service/.../dto/UserRegisterDTO.java |
# 只编译需要的模块
mvn clean compile -pl user-service -am# 检查Docker状态
docker-compose logs -f
# 清理重新启动
docker-compose down -v
docker-compose up -d# 查看所有服务日志
docker-compose logs -f
# 查看指定服务
docker-compose logs -f user-serviceMIT License - 欢迎学习交流
欢迎提交Issue和Pull Request!
💪 祝你在Java技术道路上不断进步,面试顺利!