INSERT INTO course
VALUES (1, ‘C语言程序设计’, 1001, ‘周二’, ‘科401’, 18, ‘必修课’, 1, 4);
INSERT INTO course
VALUES (2, ‘Python爬虫技巧’, 1001, ‘周四’, ‘X402’, 18, ‘必修课’, 1, 3);
INSERT INTO course
VALUES (3, ‘数据结构’, 1001, ‘周四’, ‘科401’, 18, ‘必修课’, 1, 2);
INSERT INTO course
VALUES (4, ‘Java程序设计’, 1002, ‘周五’, ‘科401’, 18, ‘必修课’, 1, 2);
INSERT INTO course
VALUES (5, ‘英语’, 1002, ‘周四’, ‘X302’, 18, ‘必修课’, 2, 2);
INSERT INTO course
VALUES (6, ‘服装设计’, 1003, ‘周一’, ‘科401’, 18, ‘选修课’, 2, 2);
– Table structure for role
DROP TABLE IF EXISTS role
;
CREATE TABLE role
(
roleID
int(11) NOT NULL,
roleName
varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
permissions
varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘权限’,
PRIMARY KEY (roleID
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
– Records of role
INSERT INTO role
VALUES (0, ‘admin’, NULL);
INSERT INTO role
VALUES (1, ‘teacher’, NULL);
INSERT INTO role
VALUES (2, ‘student’, NULL);
– Table structure for selectedcourse
DROP TABLE IF EXISTS selectedcourse
;
CREATE TABLE selectedcourse
(
courseID
int(11) NOT NULL,
studentID
int(11) NOT NULL,
mark
int(11) NULL DEFAULT NULL COMMENT ‘成绩’,
INDEX courseID
(courseID
) USING BTREE,
INDEX studentID
(studentID
) USING BTREE,
CONSTRAINT FK1
FOREIGN KEY (studentID
) REFERENCES student
(userid
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
– Records of selectedcourse
INSERT INTO selectedcourse
VALUES (1, 10001, 98);
INSERT INTO selectedcourse
VALUES (2, 10001, 100);
INSERT INTO selectedcourse
VALUES (5, 10001, NULL);
– Table structure for student
DROP TABLE IF EXISTS student
;
CREATE TABLE student
(
userID
int(11) NOT NULL AUTO_INCREMENT,
userName
varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
sex
varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
birthYear
date NULL DEFAULT NULL COMMENT ‘出生日期’,
grade
date NULL DEFAULT NULL COMMENT ‘入学时间’,
collegeID
int(11) NOT NULL COMMENT ‘院系id’,
PRIMARY KEY (userID
) USING BTREE,
INDEX collegeID
(collegeID
) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10008 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
– Records of student
INSERT INTO student
VALUES (10001, ‘张三’, ‘女’, ‘1996-09-02’, ‘2015-09-02’, 2);
INSERT INTO student
VALUES (10002, ‘李四’, ‘男’, ‘1996-09-02’, ‘2015-09-02’, 1);
INSERT INTO student
VALUES (10003, ‘小陈’, ‘女’, ‘1996-09-02’, ‘2015-09-02’, 2);
INSERT INTO student
VALUES (10004, ‘王五’, ‘男’, ‘1996-09-03’, ‘2019-11-13’, 3);
INSERT INTO student
VALUES (10005, ‘黄七’, ‘女’, ‘1996-09-02’, ‘2015-09-02’, 2);
INSERT INTO student
VALUES (10006, ‘赵六’, ‘男’, ‘1996-09-02’, ‘2015-09-02’, 2);
– Table structure for teacher
DROP TABLE IF EXISTS teacher
;
CREATE TABLE teacher
(
userID
int(11) NOT NULL AUTO_INCREMENT,
userName
varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
sex
varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
birthYear
date NOT NULL,
degree
varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘学历’,
title
varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘职称’,
grade
date NULL DEFAULT NULL COMMENT ‘入职时间’,
collegeID
int(11) NOT NULL COMMENT ‘院系’,
PRIMARY KEY (userID
) USING BTREE,
INDEX collegeID
(collegeID
) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1004 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
– Records of teacher
INSERT INTO teacher
VALUES (1001, ‘刘老师’, ‘女’, ‘1990-03-08’, ‘硕士’, ‘副教授’, ‘2015-09-02’, 2);
INSERT INTO teacher
VALUES (1002, ‘张老师’, ‘女’, ‘1996-09-02’, ‘本科’, ‘普通教师’, ‘2015-09-02’, 1);
INSERT INTO teacher
VALUES (1003, ‘软老师’, ‘女’, ‘1996-09-02’, ‘硕士’, ‘助教’, ‘2017-07-07’, 1);
– Table structure for userlogin
DROP TABLE IF EXISTS userlogin
;
CREATE TABLE userlogin
(
userID
int(11) NOT NULL AUTO_INCREMENT,
userName
varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
password
varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
role
int(11) NOT NULL DEFAULT 2 COMMENT ‘角色权限’,
PRIMARY KEY (userID
) USING BTREE,
INDEX role
(role
) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
– Records of userlogin
INSERT INTO userlogin
VALUES (1, ‘admin’, ‘admin’, 0);
INSERT INTO userlogin
VALUES (14, ‘1001’, ‘123’, 1);
INSERT INTO userlogin
VALUES (15, ‘1002’, ‘123’, 1);
INSERT INTO userlogin
VALUES (16, ‘1003’, ‘123’, 1);
INSERT INTO userlogin
VALUES (18, ‘10001’, ‘123’, 2);
INSERT INTO userlogin
VALUES (19, ‘10002’, ‘123’, 2);
INSERT INTO userlogin
VALUES (20, ‘10003’, ‘123’, 2);
INSERT INTO userlogin
VALUES (23, ‘10004’, ‘123’, 2);
INSERT INTO userlogin
VALUES (24, ‘10005’, ‘123’, 2);
INSERT INTO userlogin
VALUES (25, ‘10006’, ‘123’, 2);
SET FOREIGN_KEY_CHECKS = 1;
二、系统展示
======
1.系统登录
2.管理员-课程管理
3.管理员-学生管理
4.管理员-教师管理
5.管理员-账号密码设置
6.管理员-修改密码
7.教师-我的课程
8.教师-学生打分
9.教师-修改密码
10.学生-所有课程
11.学生-已选课程
12.学生-已修课程
13.学生-修改密码
三、部分代码
======
AdminController
package com.system.controller;
import com.system.exception.CustomException;
import com.system.po.*;
import com.system.service.*;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
import java.util.List;
/**
- Created by Jacey on 2017/7/5.
*/
@Controller
@RequestMapping(“/admin”)
public class AdminController {
@Resource(name = “studentServiceImpl”)
private StudentService studentService;
@Resource(name = “teacherServiceImpl”)
private TeacherService teacherService;
@Resource(name = “courseServiceImpl”)
private CourseService courseService;
@Resource(name = “collegeServiceImpl”)
private CollegeService collegeService;
@Resource(name = “userloginServiceImpl”)
private UserloginService userloginService;
/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<学生操作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/
// 学生信息显示
@RequestMapping(“/showStudent”)
public String showStudent(Model model, Integer page) throws Exception {
List list = null;
//页码对象
PagingVO pagingVO = new PagingVO();
//设置总页数
pagingVO.setTotalCount(studentService.getCountStudent());
if (page == null || page == 0) {
pagingVO.setToPageNo(1);
list = studentService.findByPaging(1);
} else {
pagingVO.setToPageNo(page);
list = studentService.findByPaging(page);
}
model.addAttribute(“studentList”, list);
model.addAttribute(“pagingVO”, pagingVO);
return “admin/showStudent”;
}
// 添加学生信息页面显示
@RequestMapping(value = “/addStudent”, method = {RequestMethod.GET})
public String addStudentUI(Model model) throws Exception {
List list = collegeService.finAll();
model.addAttribute(“collegeList”, list);
return “admin/addStudent”;
}
// 添加学生信息操作
@RequestMapping(value = “/addStudent”, method = {RequestMethod.POST})
public String addStudent(StudentCustom studentCustom, Model model) throws Exception {
Boolean result = studentService.save(studentCustom);
if (!result) {
model.addAttribute(“message”, “学号重复”);
return “error”;
}
//添加成功后,也添加到登录表
Userlogin userlogin = new Userlogin();
userlogin.setUsername(studentCustom.getUserid().toString());
userlogin.setPassword(“123”);
userlogin.setRole(2);
userloginService.save(userlogin);
//重定向
return “redirect:/admin/showStudent”;
}
// 修改学生信息页面显示
@RequestMapping(value = “/editStudent”, method = {RequestMethod.GET})
public String editStudentUI(Integer id, Model model) throws Exception {
if (id == null) {
//加入没有带学生id就进来的话就返回学生显示页面
return “redirect:/admin/showStudent”;
}
StudentCustom studentCustom = studentService.findById(id);
if (studentCustom == null) {
throw new CustomException(“未找到该名学生”);
}
List list = collegeService.finAll();
model.addAttribute(“collegeList”, list);
model.addAttribute(“student”, studentCustom);
return “admin/editStudent”;
}
// 修改学生信息处理
@RequestMapping(value = “/editStudent”, method = {RequestMethod.POST})
public String editStudent(StudentCustom studentCustom) throws Exception {
studentService.updataById(studentCustom.getUserid(), studentCustom);
//重定向
return “redirect:/admin/showStudent”;
}
// 删除学生
@RequestMapping(value = “/removeStudent”, method = {RequestMethod.GET})
private String removeStudent(Integer id) throws Exception {
if (id == null) {
//加入没有带学生id就进来的话就返回学生显示页面
return “admin/showStudent”;
}
studentService.removeById(id);
userloginService.removeByName(id.toString());
return “redirect:/admin/showStudent”;
}
// 搜索学生
@RequestMapping(value = “selectStudent”, method = {RequestMethod.POST})
private String selectStudent(String findByName, Model model) throws Exception {
List list = studentService.findByName(findByName);
model.addAttribute(“studentList”, list);
return “admin/showStudent”;
}
/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<教师操作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/
// 教师页面显示
@RequestMapping(“/showTeacher”)
public String showTeacher(Model model, Integer page) throws Exception {
List list = null;
//页码对象
PagingVO pagingVO = new PagingVO();
//设置总页数
pagingVO.setTotalCount(teacherService.getCountTeacher());
if (page == null || page == 0) {
pagingVO.setToPageNo(1);
list = teacherService.findByPaging(1);
} else {
pagingVO.setToPageNo(page);
list = teacherService.findByPaging(page);
}
model.addAttribute(“teacherList”, list);
model.addAttribute(“pagingVO”, pagingVO);
return “admin/showTeacher”;
}
// 添加教师信息
@RequestMapping(value = “/addTeacher”, method = {RequestMethod.GET})
public String addTeacherUI(Model model) throws Exception {
List list = collegeService.finAll();
model.addAttribute(“collegeList”, list);
return “admin/addTeacher”;
}
// 添加教师信息处理
@RequestMapping(value = “/addTeacher”, method = {RequestMethod.POST})
public String addTeacher(TeacherCustom teacherCustom, Model model) throws Exception {
Boolean result = teacherService.save(teacherCustom);
if (!result) {
model.addAttribute(“message”, “工号重复”);
return “error”;
}
//添加成功后,也添加到登录表
Userlogin userlogin = new Userlogin();
userlogin.setUsername(teacherCustom.getUserid().toString());
userlogin.setPassword(“123”);
userlogin.setRole(1);
userloginService.save(userlogin);
//重定向
return “redirect:/admin/showTeacher”;
}
// 修改教师信息页面显示
@RequestMapping(value = “/editTeacher”, method = {RequestMethod.GET})
public String editTeacherUI(Integer id, Model model) throws Exception {
if (id == null) {
return “redirect:/admin/showTeacher”;
}
TeacherCustom teacherCustom = teacherService.findById(id);
if (teacherCustom == null) {
throw new CustomException(“未找到该名学生”);
}
List list = collegeService.finAll();
model.addAttribute(“collegeList”, list);
model.addAttribute(“teacher”, teacherCustom);
return “admin/editTeacher”;
}
// 修改教师信息页面处理
@RequestMapping(value = “/editTeacher”, method = {RequestMethod.POST})
public String editTeacher(TeacherCustom teacherCustom) throws Exception {
teacherService.updateById(teacherCustom.getUserid(), teacherCustom);
//重定向
return “redirect:/admin/showTeacher”;
}
//删除教师
@RequestMapping(“/removeTeacher”)
public String removeTeacher(Integer id) throws Exception {
if (id == null) {
//加入没有带教师id就进来的话就返回教师显示页面
return “admin/showTeacher”;
}
teacherService.removeById(id);
userloginService.removeByName(id.toString());
return “redirect:/admin/showTeacher”;
}
//搜索教师
@RequestMapping(value = “selectTeacher”, method = {RequestMethod.POST})
private String selectTeacher(String findByName, Model model) throws Exception {
List list = teacherService.findByName(findByName);
model.addAttribute(“teacherList”, list);
return “admin/showTeacher”;
}
/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<课程操作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/
// 课程信息显示
@RequestMapping(“/showCourse”)
public String showCourse(Model model, Integer page) throws Exception {
List list = null;
//页码对象
PagingVO pagingVO = new PagingVO();
//设置总页数
pagingVO.setTotalCount(courseService.getCountCouse());
if (page == null || page == 0) {
pagingVO.setToPageNo(1);
list = courseService.findByPaging(1);
} else {
pagingVO.setToPageNo(page);
list = courseService.findByPaging(page);
}
model.addAttribute(“courseList”, list);
model.addAttribute(“pagingVO”, pagingVO);
return “admin/showCourse”;
}
//添加课程
@RequestMapping(value = “/addCourse”, method = {RequestMethod.GET})
public String addCourseUI(Model model) throws Exception {
List list = teacherService.findAll();
List collegeList = collegeService.finAll();
model.addAttribute(“collegeList”, collegeList);
model.addAttribute(“teacherList”, list);
return “admin/addCourse”;
}
// 添加课程信息处理
@RequestMapping(value = “/addCourse”, method = {RequestMethod.POST})
public String addCourse(CourseCustom courseCustom, Model model) throws Exception {
Boolean result = courseService.save(courseCustom);
if (!result) {
model.addAttribute(“message”, “课程号重复”);
return “error”;
}
//重定向
return “redirect:/admin/showCourse”;
}
// 修改教师信息页面显示
@RequestMapping(value = “/editCourse”, method = {RequestMethod.GET})
public String editCourseUI(Integer id, Model model) throws Exception {
if (id == null) {
return “redirect:/admin/showCourse”;
}
CourseCustom courseCustom = courseService.findById(id);
if (courseCustom == null) {
throw new CustomException(“未找到该课程”);
}
List list = teacherService.findAll();
List collegeList = collegeService.finAll();
model.addAttribute(“teacherList”, list);
model.addAttribute(“collegeList”, collegeList);
model.addAttribute(“course”, courseCustom);
return “admin/editCourse”;
}
// 修改教师信息页面处理
@RequestMapping(value = “/editCourse”, method = {RequestMethod.POST})
public String editCourse(CourseCustom courseCustom) throws Exception {
courseService.upadteById(courseCustom.getCourseid(), courseCustom);
//重定向
return “redirect:/admin/showCourse”;
}
// 删除课程信息
@RequestMapping(“/removeCourse”)
public String removeCourse(Integer id) throws Exception {
if (id == null) {
//加入没有带教师id就进来的话就返回教师显示页面
return “admin/showCourse”;
}
courseService.removeById(id);
return “redirect:/admin/showCourse”;
}
//搜索课程
@RequestMapping(value = “selectCourse”, method = {RequestMethod.POST})
private String selectCourse(String findByName, Model model) throws Exception {
List list = courseService.findByName(findByName);
model.addAttribute(“courseList”, list);
return “admin/showCourse”;
}
/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<其他操作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/
// 普通用户账号密码重置
@RequestMapping(“/userPasswordRest”)
public String userPasswordRestUI() throws Exception {
return “admin/userPasswordRest”;
}
// 普通用户账号密码重置处理
@RequestMapping(value = “/userPasswordRest”, method = {RequestMethod.POST})
public String userPasswordRest(Userlogin userlogin) throws Exception {
Userlogin u = userloginService.findByName(userlogin.getUsername());
if (u != null) {
if (u.getRole() == 0) {
throw new CustomException(“该账户为管理员账户,没法修改”);
}
u.setPassword(userlogin.getPassword());
userloginService.updateByName(userlogin.getUsername(), u);
} else {
throw new CustomException(“没找到该用户”);
}
return “admin/userPasswordRest”;
}
// 本账户密码重置
@RequestMapping(“/passwordRest”)
public String passwordRestUI() throws Exception {
return “admin/passwordRest”;
}
}
LoginController
package com.system.controller;
import com.system.po.Userlogin;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
- Created by Jacey on 2017/7/5.
*/
@Controller
public class LoginController {
//登录跳转
@RequestMapping(value = “/login”, method = {RequestMethod.GET})
public String loginUI() throws Exception {
return “…/…/login”;
}
//登录表单处理
@RequestMapping(value = “/login”, method = {RequestMethod.POST})
public String login(Userlogin userlogin) throws Exception {
//Shiro实现登录
UsernamePasswordToken token = new UsernamePasswordToken(userlogin.getUsername(),
userlogin.getPassword());
Subject subject = SecurityUtils.getSubject();
//如果获取不到用户名就是登录失败,但登录失败的话,会直接抛出异常
subject.login(token);
if (subject.hasRole(“admin”)) {
return “redirect:/admin/showStudent”;
} else if (subject.hasRole(“teacher”)) {
return “redirect:/teacher/showCourse”;
} else if (subject.hasRole(“student”)) {
return “redirect:/student/showCourse”;
}
return “/login”;
}
}
RestPasswordController
package com.system.controller;
import com.system.exception.CustomException;
import com.system.po.Userlogin;
import com.system.service.UserloginService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
/**
- Created by Jacey on 2017/7/5.
*/
@Controller
public class RestPasswordController {
@Resource(name = “userloginServiceImpl”)
private UserloginService userloginService;
// 本账户密码重置
@RequestMapping(value = “/passwordRest”, method = {RequestMethod.POST})
public String passwordRest(String oldPassword, String password1) throws Exception {
Subject subject = SecurityUtils.getSubject();
String username = (String) subject.getPrincipal();
Userlogin userlogin = userloginService.findByName(username);
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。
更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务
*/
@Controller
public class RestPasswordController {
@Resource(name = “userloginServiceImpl”)
private UserloginService userloginService;
// 本账户密码重置
@RequestMapping(value = “/passwordRest”, method = {RequestMethod.POST})
public String passwordRest(String oldPassword, String password1) throws Exception {
Subject subject = SecurityUtils.getSubject();
String username = (String) subject.getPrincipal();
Userlogin userlogin = userloginService.findByName(username);
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-wlZgbm36-1710965434357)]
[外链图片转存中…(img-cVB7Za1q-1710965434358)]
[外链图片转存中…(img-a9trqxUU-1710965434359)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-oxPFrtWf-1710965434361)]
最后
做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。
更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务
[外链图片转存中…(img-9dy6Jio3-1710965434361)]
[外链图片转存中…(img-IgYubsbA-1710965434362)]
[外链图片转存中…(img-Syoo9g2b-1710965434362)]
[外链图片转存中…(img-B0wxlD5J-1710965434362)]