Skip to content

Commit 52fb039

Browse files
committed
增加了两个实战项目:刷题系统+考试系统
1 parent 2fc103e commit 52fb039

File tree

3 files changed

+299
-2
lines changed

3 files changed

+299
-2
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@
4343

4444
## 实战项目
4545

46-
1. [Spring Boot搭建的一个在线文件预览系统!支持ppt、doc等多种类型文件预览](./docs/projects/kkFileView-基于Spring Boot在线文件预览系统.md)
47-
2. [一份热乎的 SpringBoot 前后端分离后台管理系统分析!分模块开发、RBAC权限控制...](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247495011&idx=1&sn=f574f5d75c3720d8b2a665d1d5234d28&chksm=cea1a2a8f9d62bbe9f13f5a030893fe3da6956c4be41471513e6247f74cba5a8df9941798b6e&token=212861022&lang=zh_CN#rd)
46+
1. [使用 Spring Boot搭建一个在线文件预览系统!支持ppt、doc等多种类型文件预览](./docs/projects/kkFileView-基于Spring Boot在线文件预览系统.md)
47+
2. [ SpringBoot 前后端分离后台管理系统分析!分模块开发、RBAC权限控制...](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247495011&idx=1&sn=f574f5d75c3720d8b2a665d1d5234d28&chksm=cea1a2a8f9d62bbe9f13f5a030893fe3da6956c4be41471513e6247f74cba5a8df9941798b6e&token=212861022&lang=zh_CN#rd)
48+
3. [一个基于Spring Cloud 的面试刷题系统。](./docs/projects/SpringCloud刷题系统.md)
49+
4. [一个基于 Spring Boot 的在线考试系统](./docs/projects/一个基于SpringBoot的在线考试系统.md)
4850

4951
## 面试题
5052

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
> 推荐👍:
2+
> - [接近100K star 的 Java 学习/面试指南](https://github.com/Snailclimb/JavaGuide)
3+
> - [Github 95k+点赞的 Java 面试/学习手册.PDF](https://www.yuque.com/docs/share/f0c5ffbc-48b5-45f3-af66-2a5e6f212595)
4+
5+
今天给小伙伴们推荐一个朋友开源的面试刷题系统。
6+
7+
这篇文章我会从系统架构设计层面详解介绍这个开源项目,并且会把微服务常用的一些技术都介绍一下。即使你对这个项目不感兴趣,也能了解到很多微服务相关的知识。美滋滋!
8+
9+
_昨晚肝了很久~原创不易,若有帮助,求赞求转发啊!_
10+
11+
不得不说,这个刷题系统确实是有点东西,你真的值得拥有!首先,这是一个微服务的项目,其次这个系统涵盖了市面上常用的主流技术比如 SpringBoot、Spring Cloud 等等(后面会详细介绍)。
12+
13+
不论是你想要学习分布式的技术,还是想找一个实战项目练手或者作为自己的项目经验,这个项目都非常适合你。
14+
15+
另外,因为项目作者提供了详细的技术文档,所以你不用担心上手太难!
16+
17+
![PassJava文档](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-12-21/PassJava%E6%96%87%E6%A1%A3%E5%9C%B0%E5%9D%80.png)
18+
19+
## 效果图
20+
21+
我们先来看看这个面试刷题系统的效果图。这里我们只展示的是这个系统的前端(微信小程序),后台管理系统这里就不展示了。
22+
23+
![PassJava前端展示](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-12-21/PassJava%E5%89%8D%E7%AB%AF%E5%B1%95%E7%A4%BA.png)
24+
25+
可以看到,除了少部分地方的颜色搭配比较难看之外,页面整体 UI 还是比较美观的。
26+
27+
## 技术栈
28+
29+
再聊聊大家最关心的问题:“**这套系统的技术栈是什么样的呢?**”。
30+
31+
这套系统采用了目前企业都在用的主流技术:SpringBoot(基础框架)、Spring Cloud(微服务)、MyBatis(ORM框架)、Redis(缓存)、MySql(关系型数据库)、MongoDB(NoSQL)、RabbitMQ(消息队列)、Elasticsearch(搜索引擎)。并且,这个系统是以 Docker 容器化的方式进行部署的。非常实用!
32+
33+
## 系统架构设计
34+
35+
了解了技术栈之后,那必然需要简单了解一下整个 **系统的架构设计** ,这是系统的灵魂所在了(图源:[PassJava 官方文档](http://jayh2018.gitee.io/passjava-learning/#/01.项目简介/2.项目微服务架构图 "PassJava官方文档"))。
36+
37+
![](http://cdn.jayh.club/blog/20200407/scg1XhlvGbUV.png?imageslim)
38+
39+
### 网关
40+
41+
网关负责认证授权、限流、熔断、降级、请求分发、负载均衡等等操作。一般情况下,网关一般都会提供这些功能。
42+
43+
这里使用的是 **Spring Cloud Gateway** 作为网关。Spring Cloud Gateway 是 Spring Cloud 官方推出的第二代网关框架,目的是取代 netflix 的 Zuul 网关。
44+
45+
### 注册中心和配置中心
46+
47+
注册中心和配置中心这块使用的是阿里巴巴开源的 **Nacos** 。Nacos 目前属于 Spring Cloud Alibaba 中的一员。主要用于发现、配置和管理微服务,类似于 Consul、Eureka。并且,提供了分布式配置管理功能。
48+
49+
Nacos 的基本介绍如下(图源:[官网文档-什么是 Nacos](https://nacos.io/zh-cn/docs/what-is-nacos.html "官网文档-什么是 Nacos")):
50+
51+
![nacos_map](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-12-21/nacosMap.jpg)
52+
53+
详解介绍一下 Nacos 在这个项目中提供的两个核心功能:
54+
55+
- **注册中心** :API 网关通过注册中心实时获取到服务的路由地址,准确地将请求路由到各个服务。
56+
- **配置中心** :传统的配置方式需要重新启动服务。如果服务很多,则需要重启所有服务,非常不方便。通过 Nacos,我们可以动态配置服务。并且,Nacos 提供了一个简洁易用的 UI 帮助我们管理所有的服务和应用的配置。
57+
58+
关于配置中心,我们这里再拓展一下,除了 Nacos ,还有 Apollo、SpringCloud Config、K8s ConfigMap 可供选择。
59+
60+
### 分布式链路追踪
61+
62+
> 不同于单体架构,在分布式架构下,请求需要在多个服务之间调用,排查问题会非常麻烦。我们需要分布式链路追踪系统来解决这个痛点。
63+
64+
分布式链路追踪这块使用的是 Twitter 的 **Zipkin** ,并且结合了 **Spring Cloud Sleuth**
65+
66+
Spring Cloud Sleuth 只是做一些链路追踪相关的数据记录,我们可以使用 Zipkin Server 来处理这些数据。
67+
68+
相关阅读:[《40 张图看懂分布式追踪系统原理及实践》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247492112&idx=3&sn=4eb100f4ecef98a475d7f7650c993222&chksm=cea1addbf9d624cdc0e868d3b72edf40a7a6880218ecb1a9ddbac50423d20dceceb8dca804f4&token=2007747701&lang=zh_CN#rd)
69+
70+
### 监控系统
71+
72+
监控系统可以帮助我们监控应用程序的状态,并且能够在风险发生前告警。
73+
74+
监控系统这块使用的是 **Prometheus + Grafana**。Prometheus 负责收集监控数据,Grafana 用于展示监控数据。我们直接将 Grafana 的数据源选择为 Prometheus 即可。
75+
76+
关于监控系统更详细的技术选型,可以看这篇文章:[《监控系统选型看这一篇够了!选择 Prometheus 还是 Zabbix ?》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247490068&idx=2&sn=3ac42f6891fec8906230cc9e0ec28ba7&chksm=cea255dff9d5dcc9369c9c30eb55925cd16045d914cbfe194ea7d5630c3339630d731d654527&token=2007747701&lang=zh_CN#rd)
77+
78+
### 消息队列
79+
80+
我们知道,消息队列主要能为系统带来三点好处:
81+
82+
1. **通过异步处理提高系统性能(减少响应所需时间)。**
83+
2. **削峰/限流**
84+
3. **降低系统耦合性。**
85+
86+
常用的消息队列有:RabbitMQ(本系统所采用的方案)、Kafka、RocketMQ。
87+
88+
### 缓存
89+
90+
缓存这里使用的是 Redis ,老生常谈了,这里就不再多做介绍。
91+
92+
另外, 为了保证缓存服务的高可用,我们使用 Redis 官方提供了一种 Redis 集群的解决方案 Redis Sentinel 来管理 Redis 集群。
93+
94+
### 数据库
95+
96+
数据库这里使用的是 MySQL ,并使用主从模式实现读写分离,以提高读性能。
97+
98+
### 对象存储
99+
100+
由于是分布式系统,传统的将文件上传到本机已经没办法满足我们的需求了。
101+
102+
由于自己搭建分布式文件系统也比较麻烦,所以对象存储这里我们使用的是阿里云 OSS,它主要用于存储一些文件比如图片。
103+
104+
### 快速开发脚手架
105+
106+
另外,为了后台的快速搭建这里使用的是 **[renren-fast](https://gitee.com/renrenio/renren-fast "renren-fast")** 快速开发脚手架。使用这个脚手架配合上代码生成器 **[renren-generator](https://gitee.com/renrenio/renren-generator "renren-generator")** ,我们可以快速生成 70%左右的前后端代码。绝对是快速开发项目并交付以及接私活的利器了!
107+
108+
我在之前的也推荐过这个脚手架,详情请看下面这两篇文章:
109+
110+
1. [听说你要接私活?Guide 连夜整理了 5 个开源免费的 Java 项目快速开发脚手架。](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247487002&idx=1&sn=e9db79f1bbd561b3ead1c9475f8fd7f5&chksm=cea241d1f9d5c8c72fa33764208a26a26de5d2d3e4ac2a6794e0792ba779bb11414b3fd506e3&token=2007747701&lang=zh_CN#rd)
111+
2. [解放双手,再来推荐 5 个 Java 项目开发快速开发脚手架!项目经验和私活都不愁了!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247487467&idx=1&sn=c2d2bd28918b58d8646f1441791aeaaf&chksm=cea24020f9d5c9364afc22013fac3266fabffcaa370f708434a6a304274c6b1d8bce235b7a24&token=2007747701&lang=zh_CN#rd)
112+
113+
## 总结
114+
115+
这篇文章我主要从架构设计层面分析了朋友开源的这个基于微服务的刷题系统。
116+
117+
当然了,朋友使用微服务开发这个项目的主要目的也是为了自己实践微服务相关的知识,同时也是为了给需要微服务相关实战项目经验的小伙伴一个可以学习的项目。不然的话,直接用单体就完事了,完全可以支撑这个项目目前的并发量以及可预见的未来的并发量。
118+
119+
- 项目地址:https://github.com/Jackson0714/PassJava-Platform
120+
- 文档地址:http://jayh2018.gitee.io/passjava-learning/#/
121+
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
[大家好!我是 Guide 哥,Java 后端开发。一个会一点前端,喜欢烹饪的自由少年。](https://www.yuque.com/docs/share/71251673-1fef-416e-93d7-489a25a9eda5?#%20%E3%80%8A%E8%B5%B0%E8%BF%91JavaGuide%E3%80%8B)
2+
3+
## 前言
4+
5+
最近看到了一个考试系统,感觉做的挺不错,并且也比较成熟,所以我就简单玩了一下。另外,考试系统应用场景还挺多的,不论是对于在校大学生还是已经工作的小伙伴,并且,类似的私活也有很多。
6+
7+
![在线考试系统后台管理主页](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/FireShot%20Capture%20027%20-%20%E4%B8%BB%E9%A1%B5%20-%20localhost.png)
8+
9+
下面我就把这个项目分享给小伙伴们,非常值得学习,拿来即用!
10+
11+
_为了一步一步演示,让小伙伴们都能成功部署/运行项目, Guide 哥自己本地搭建了项目环境,并将项目成功跑了起来。照着我的步骤,新手也能成功把项目跑起来!_
12+
13+
_如果你“感动”的话,点个赞/在看,就是对我最大的支持!_
14+
15+
另外,以下内容不涉及代码分析,整体代码结构比较清晰,熟悉了基本功能之后会很容易看明白。
16+
17+
## 介绍
18+
19+
[uexam](https://gitee.com/mindskip/uexam) 是一款前后端分离的在线考试系统。这款在线考试系统,不光支持 web 端,同时还支持微信小程序端。
20+
21+
[uexam](https://gitee.com/mindskip/uexam) 界面设计美观,代码整体结构清晰,表设计比较规范。
22+
23+
[uexam](https://gitee.com/mindskip/uexam) 后端基于 Spring Boot 2.0+MySQL/PostgreSQL+Redis+MyBatis,前端基于 Vue,采用前端后端分离开发!
24+
25+
另外,这个项目提供了 MySQL 和 PostgreSQL 两种不同的数据库版本,下面我以 PostgreSQL 数据库版本的来演示(_建议大家使用和体验 PostgreSQL 版本_)。
26+
27+
项目地址:[https://gitee.com/SnailClimb/uexam](https://gitee.com/SnailClimb/uexam)
28+
29+
## 软件架构
30+
31+
![软件架构图](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%E5%9B%BE.jpg)
32+
33+
## 使用效果
34+
35+
样式以及操作体验都是非常不错的,这也是我推荐这个项目很重要的一个原因。
36+
37+
### 管理端
38+
39+
#### 添加学科
40+
41+
在创建题目之前,你需要首要创建学科。这里我们创建的学科是编程,年级是三年级。
42+
43+
![添加学科](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/%E6%B7%BB%E5%8A%A0%E5%AD%A6%E7%A7%91.jpg)
44+
45+
#### 添加题目
46+
47+
可以看到这里可以添加多种题型: 单选题、多选题、判断题、填空题、简答题。
48+
49+
![添加题目](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/%E6%B7%BB%E5%8A%A0%E9%A2%98%E7%9B%AE.jpg)
50+
51+
我们以单选题为例,添加题目界面如下。
52+
53+
![添加题目页面](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/iShot2020-09-03%E4%B8%8B%E5%8D%8805.25.30.jpg)
54+
55+
添加成功之后,题目列表就会出现我们刚刚添加的题目。
56+
57+
![题目创建成功](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/%E9%A2%98%E7%9B%AE%E5%88%9B%E5%BB%BA%E6%88%90%E5%8A%9F.jpg)
58+
59+
#### 添加试卷
60+
61+
有了学科和题目之后才能添加试卷。
62+
63+
![添加试卷](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/%E6%B7%BB%E5%8A%A0%E8%AF%95%E5%8D%B7.jpg)
64+
65+
添加成功之后,试卷列表就会出现我们刚刚添加的试卷。
66+
67+
![试卷创建成功](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/%E8%AF%95%E5%8D%B7%E5%88%9B%E5%BB%BA%E6%88%90%E5%8A%9F.jpg)
68+
69+
#### 添加学生
70+
71+
**注意:这里的学生要和我们前面创建的学科对应的年级对应上。**
72+
73+
![添加学生](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/%E6%B7%BB%E5%8A%A0%E5%AD%A6%E7%94%9F.jpg)
74+
75+
### 学生端
76+
77+
使用我们刚刚创建的学生账号登录,你会发现主页多了一个试卷。这个试卷就是我们刚刚在管理端创建的。
78+
79+
![学生端-主页](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/%E5%AD%A6%E7%94%9F%E7%AB%AF-%E4%B8%BB%E9%A1%B5.jpg)
80+
81+
试卷答题界面如下。
82+
83+
![学生端-试卷](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/%E5%AD%A6%E7%94%9F%E7%AB%AF-%E8%AF%95%E5%8D%B7.jpg)
84+
85+
## 启动
86+
87+
### 后端
88+
89+
我们这里以 PostgreSQL 数据库版本来演示。
90+
91+
#### 安装 PostgreSQL
92+
93+
**这里我们使用 Docker 下载最近版的 PostgreSQL 镜像 ,默认大家已经安装了 Docker。**
94+
95+
```bash
96+
$ docker pull postgres
97+
```
98+
99+
**查看 PostgreSQL 镜像:**
100+
101+
```bash
102+
$ docker images |grep postgres
103+
postgres latest 62473370e7ee 2 weeks ago 314MB
104+
```
105+
106+
**运行 PostgreSQL:**
107+
108+
```bash
109+
$ docker run -d -p 5432:5432 --name postgresql -e POSTGRES_PASSWORD=123456 postgres
110+
```
111+
112+
#### 安装 Redis
113+
114+
**这里我们使用 Docker 下载最近版的 Redis 镜像 ,默认大家已经安装了 Docker。**
115+
116+
```bash
117+
$ docker pull redis
118+
```
119+
120+
**查看 Redis 镜像:**
121+
122+
```bash
123+
$ docker images |grep redis
124+
```
125+
126+
**运行 Redis:**
127+
128+
```bash
129+
$ docker run -itd --name redis-test -p 6379:6379 redis
130+
```
131+
132+
#### 创建数据库并执行数据库脚本
133+
134+
首先创建一个名字叫做`xzs` 的数据库,然后执行相应的数据库脚本即可(数据库脚本在 `uexam/source/xzs/sql` 目录下。)。
135+
136+
#### 配置文件修改
137+
138+
使用 IntelliJ IDEA 打开 `uexam/source/xzs` (后台代码),修改 `application-dev.yml` ,将 postgesql/mysql、redis 的服务地址改为自己本地的。
139+
140+
#### 启动项目
141+
142+
直接运行 `XzsApplication` 即可。
143+
144+
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-9/image-20200903180710467.png)
145+
146+
启动成功后,打开下面的链接即可跳转到对应的端:
147+
148+
- 学生系统地址:http://localhost:8000/student
149+
- 管理端地址:http://localhost:8000/admin
150+
151+
**注意:这种方式,前端虽然也启动了,也能访问,不过是内嵌在后端项目中。如果如果我们需要前后端分离的话,需要单独运行前端项目**
152+
153+
### 前端
154+
155+
小程序端的就不演示了,我这里只演示一下 web 端的。
156+
157+
web 端代码在 `uexam/source/vue` 下,我们需要首先进入这个目录,然后分别对 `xzs-admin` (管理端) 和 `xzs-student` (学生端)执行下面两个命令。
158+
159+
**1.下载相关依赖**
160+
161+
```bash
162+
$ npm install
163+
```
164+
165+
**2.启动项目**
166+
167+
```bash
168+
$ npm run serve
169+
```
170+
171+
启动完成之后,打开下面的链接即可跳转到对应的端:
172+
173+
- 学生系统地址:http://localhost:8001
174+
- 管理端地址:http://localhost:8002

0 commit comments

Comments
 (0)