Skip to content

yeswangdalu/java-interview-project

Repository files navigation

🎯 Java面试实战项目

一个完整的电商微服务系统,专为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/                         # 文档目录

🎓 核心技术点清单

1️⃣ Java基础

  • 泛型与类型擦除
  • 集合框架(ArrayList、HashMap、ConcurrentHashMap)
  • 并发编程(线程、线程池、锁机制)
  • JVM原理(内存模型、GC、类加载)
  • 新特性(Lambda、Stream、Record)

2️⃣ Spring框架

  • Spring Boot自动配置
  • Spring IOC/AOP原理
  • Spring事务管理
  • Spring MVC原理
  • Spring Boot Starter

3️⃣ 数据库

  • MySQL索引与优化
  • 事务与隔离级别
  • MyBatis动态SQL
  • Redis数据结构与应用
  • 缓存策略(Cache Aside、Write Through)

4️⃣ 消息队列

  • RabbitMQ核心概念
  • 消息可靠性保证
  • 消息顺序性
  • 消息幂等性
  • 死信队列

5️⃣ 微服务

  • 服务注册与发现
  • 服务间调用(Feign)
  • 负载均衡
  • 服务熔断降级
  • 配置中心
  • API网关

6️⃣ 分布式

  • 分布式锁(Redis/Zookeeper)
  • 分布式事务
  • 幂等性设计
  • 限流与防刷
  • 高并发设计

7️⃣ 设计模式

  • 单例模式
  • 工厂模式
  • 代理模式
  • 策略模式
  • 模板方法
  • 观察者模式

🔧 快速开始

1. 环境要求

  • JDK 17+
  • Maven 3.8+
  • Docker & Docker Compose
  • MySQL Client(可选)

2. 启动基础设施

# 启动所有中间件
docker-compose up -d

# 检查服务状态
docker-compose ps

3. 初始化数据库

# 执行数据库脚本
docker-compose exec -T mysql mysql -uroot -p123456 < scripts/init-db.sql

4. 启动服务

# 一键启动所有服务
chmod +x scripts/start-all.sh
./scripts/start-all.sh

# 或手动启动
cd user-service && mvn spring-boot:run

5. 访问服务

服务 地址
用户服务 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

📖 学习建议

阶段一:基础与Spring(2周)

  1. 阅读 user-service 模块代码
  2. 重点理解:Controller → Service → Mapper 的调用流程
  3. 学习MyBatis Plus的使用
  4. 理解Spring Boot自动配置原理

阶段二:缓存与消息(2周)

  1. 阅读 inventory-service 模块
  2. 重点理解:Redis分布式锁的实现
  3. 阅读 order-service 模块
  4. 重点理解:RabbitMQ消息发送和消费

阶段三:微服务与分布式(2周)

  1. 学习Nacos服务注册与配置
  2. 理解Feign服务调用
  3. 学习Sentinel熔断降级
  4. 理解分布式事务方案

阶段四:项目实战(1周)

  1. 部署完整项目
  2. 阅读所有模块的代码注释
  3. 尝试添加新功能
  4. 准备面试题

💡 面试问题示例

Q: 分布式锁如何实现?

位置: 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();
    }
}

Q: 如何保证消息不丢失?

位置: order-service/OrderServiceImpl.java

  1. 消息持久化:message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT)
  2. 消息确认:配置 publisher-confirm-type: correlated
  3. 消息回调:实现 ConfirmCallback

Q: 库存超卖如何解决?

位置: 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

🔍 常见问题

Q: 项目太大,编译太慢?

# 只编译需要的模块
mvn clean compile -pl user-service -am

Q: Docker启动失败?

# 检查Docker状态
docker-compose logs -f

# 清理重新启动
docker-compose down -v
docker-compose up -d

Q: 如何查看日志?

# 查看所有服务日志
docker-compose logs -f

# 查看指定服务
docker-compose logs -f user-service

📄 许可证

MIT License - 欢迎学习交流

🤝 贡献

欢迎提交Issue和Pull Request!


💪 祝你在Java技术道路上不断进步,面试顺利!

About

Java面试实战项目 - 完整的电商微服务系统,专为Java面试准备设计

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors