课表
第一章 万信金融-项目介绍和开发环境搭建
1-1 项目介绍(万信金融学习资料在此节下载!)
day01-1-项目背景
day01-2-项目概述
1-2 技术介绍
day01-3-技术架构
day01-4-技术栈和技术解决方案
1-3 搭建数据库环境
day01-5-搭建服务器端数据库环境
1-4 搭建微服务基础工程
day01-6-微服务基础工程环境配置
day01-7-了解微服务基础工程
day01-8-微服务基础工程测试
1-5 配置中心Apollo介绍
day01-9-配置中心简介
day01-10-Apollo简介
day01-11-Apollo初体验
1-6 Apollo基本用法
day01-12-搭建Apollo配置中心
day01-13-Apollo核心概念
day01-14-玩转Apollo
1-7 微服务集成Apollo客户端
day01-15-微服务集成Apollo客户端
day01-16-搭建使用Apollo环境的微服务基础工程
1-8 Swagger的使用
day01-17-Swagger简介
day01-18-SpringBoot集成Swagger
day01-19-Swagger常用注解
day01-20-Swagger生成文档
1-9 Postman的使用
day01-21-Postman的使用
第二章 万信金融-开户
2-1 搭建前端环境
day02-1-搭建前端环境
2-2 项目开发步骤和编码规范
day02-2-开发步骤和编码规范
2-3 开户业务需求分析和业务流程
day02-3-开户业务需求分析
day02-4-开户业务流程
2-4 实现注册功能
day02-5-注册功能需求分析
day02-6-搭建统一账户微服务
day02-7-测试统一账户微服务
day02-8-部署短信验证码服务
day02-9-获取短信验证码-接口定义
day02-10-获取短信验证码-功能实现
day02-11-获取短信验证码-功能测试
day02-11-获取短信验证码-功能测试
day02-12-Mybatis-Plus简介
day02-13-Mybatis-Plus快速入门
day02-14-Mybatis-Plus-入门案例测试
day02-15-Mybatis-Plus-增删改查操作
day02-16-Mybatis-Plus-条件构造器
day02-17-Mybatis-Plus-分页查询
day02-18-Mybatis-Plus业务层封装
day02-19-异常处理机制
day03-1-校验手机号和验证码-接口定义
day03-2-校验短信验证码功能实现
day03-3-校验手机号功能实现1
day03-4-校验手机号功能实现2
day03-5-校验手机号功能实现3
day03-6-校验手机号和验证码功能测试
day03-7-保存用户信息需求分析
day03-8-统一账户保存信息-定义接口
day03-9-统一账户保存信息-功能实现
day03-10-用户中心保存信息-定义接口
day03-11-用户中心保存信息-搭建MP环境
day03-12-用户中心保存信息-Mapper
day03-13-用户中心保存信息-Service-用户是否存在
day03-14-用户中心保存信息-Service-保存用户信息
day03-15-用户中心远程调用统一账户
day03-16-保存用户信息-功能测试
day03-17-注册功能-前后端集成测试
2-5 实现传统登录方式并分析问题
day03-18-传统登录实现方式-定义接口
day03-19-传统登录实现方式-功能实现
2-6 理解认证、授权和数据安全
day04-1-传统登录实现方式存在的问题
day04-2-认证和授权
day04-3-数据安全的三个问题
day04-4-数据安全-机密性
day04-5-数据安全-完整性
day04-6-数据安全-身份验证
2-7 理解各种认证方式
day04-7-基于session认证机制
day04-8-基于token认证机制
day04-9-JWT令牌
day04-10-OAuth2认证机制-介绍
day04-11-OAuth2认证机制-引入P2P项目
2-8 实现认证功能
day04-12-P2P项目认证需求分析
day04-13-集成UAA服务
day04-14-认证(登录)功能实现-Feign代理
day04-15-认证(登录)功能实现
day04-16-认证(登录)功能测试
day04-17-认证(登录)功能测试(过网关)
day04-18-解析令牌功能测试
day04-19-认证(登录)功能前后端集成测试
2-9 实现认证拦截功能
day04-20-认证拦截功能需求分析
day04-21-认证拦截功能环境准备
day04-22-认证拦截功能实现
day05-1-认证拦截测试准备
day05-2-认证拦截功能测试
day05-3-微服务从请求中取数据
2-10 理解事务和分布式事务
day05-4-注册功能存在的事务问题
day05-5-什么是事务
day05-6-ACID特性
day05-7-分布式事务
2-11 理解分布式事务基础理论
day05-8-CAP理论-场景
day05-9-CAP理论-概述
day05-10-BASE理论
2-12 TCC方案
day05-11-TCC解决方案概述
day05-12-TCC案例
2-13 Hmily框架
day05-13-Hmily框架简介
day05-14-Hmily实现转账-环境搭建
day05-15-Hmily实现转账-bank1
day05-16-Hmily实现转账-bank2
day05-17-Hmily实现转账-功能测试
day05-18-Hmily实现注册-环境搭建
day05-19-Hmily实现注册-用户中心
day05-20-Hmily实现注册-统一账户
day05-21-Hmily实现注册-功能测试
2-14 开户需求分析
day06-1-开户需求分析
2-15 部署银行存管系统
day06-2-部署银行存管系统
2-16 实现开户功能
day06-3-开户第一阶段-定义接口1
day06-4-开户第一阶段-定义接口2
day06-5-开户第一阶段-功能实现1
day06-6-开户第一阶段-功能实现2
day06-7-开户第一阶段-功能实现3
day06-8-开户第一阶段-功能实现4
day06-9-开户第一阶段-功能实现5
day06-10-开户第一阶段-功能实现6
day06-11-开户第一阶段-功能实现7
day06-12-开户第一阶段-功能实现8
day06-13-开户第一阶段-功能实现9
day06-14-开户第一阶段-功能测试
day06-15-开户第一阶段-遗留功能测试
day06-16-开户第二阶段
day06-17-开户第三阶段-问题分析
day06-18-开户第三阶段-搭建MQ环境
day06-19-开户第三阶段-功能实现1
day07-1-开户第三阶段-功能实现2
day07-2-开户第三阶段-功能实现3
day07-3-开户第三阶段-功能实现4
day07-4-开户第三阶段-功能实现5
day07-5-开户第三阶段-功能实现6
day07-6-开户第三阶段-功能实现7
day07-7-开户第三阶段-功能测试
第三章 万信金融-发标
3-1 发标需求分析
day07-8-发标-需求分析
3-2 分库分表
day07-9-分库分表的原因
day07-10-垂直分表
day07-11-垂直分库
day07-12-水平分库分表
3-3 Shardind-JDBC
day07-13-分库分表带来的问题
day07-14-Sharding-JDBC概览
day07-15-Sharding-JDBC核心功能1
day07-16-Sharding-JDBC核心功能2
day07-17-入门案例-需求分析和数据库设计
day07-18-入门案例-搭建数据库环境1
day07-19-入门案例-搭建数据库环境2
day07-20-入门案例-搭建数据库环境3
day08-1-入门案例-功能实现1
day08-2-入门案例-功能实现2
day08-3-入门案例-功能实现3
day08-4-入门案例-功能实现4
day08-5-入门案例-功能测试
3-4 P2P项目分库分表
day08-6-P2P项目分库分表
3-5 交易中心微服务环境搭建
day08-7-交易中心微服务环境搭建
3-6 用户发标业务需求分析
day08-8-用户发标-需求分析
3-7 交易中心保存标的信息
day08-9-交易中心保存标的-定义接口
day08-10-交易中心保存标的-DAO
day08-11-交易中心保存标的-业务层1
day08-12-交易中心保存标的-业务层2
day08-13-交易中心保存标的-业务层3
day08-14-交易中心保存标的-Controller
day08-15-交易中心保存标的先决条件
day08-16-交易中心保存标的-前后端集成测试1
day08-17-交易中心保存标的-前后端集成测试2
3-8 部署管理平台前端工程
day08-18-部署管理平台前端工程
3-9 实现查询标的信息
day08-19-查询标的信息-定义接口
day08-20-查询标的信息-功能实现1
day08-21-查询标的信息-功能实现2
day08-22-查询标的信息-前后端集成测试
3-10 实现审核标的功能
day09-1-审核标的-定义接口
day09-2-审核标的-交易中心-功能实现1
day09-3-审核标的-交易中心-功能实现2
day09-4-审核标的-存管代理-功能实现1
day09-5-审核标的-存管代理-功能实现2
day09-6-审核标的-完善Controller
day09-7-审核标的-前后端集成测试
3-11 幂等性问题分析及实现
day09-8-审核标的-幂等性-问题分析
day09-9-审核标的-幂等性-解决思路
day09-10-审核标的-幂等性-功能实现
day09-11-幂等性-测试准备
day09-12-幂等性-功能测试
3-12 使用ES&logstash实现标的快速检索
day09-13-标的快速检索-需求分析
day09-14-标的信息检索-ES环境搭建
day09-15-标的快速检索-logstash环境搭建
day09-16-标的快速检索-使用logstash1
day09-17-标的快速检索-使用logstash2
day09-18-标的快速检索-logstash测试
3-13 实现标的信息检索功能
day10-1-标的信息检索-开发环境搭建
day10-2-标的信息检索-交易中心-定义接口
day10-3-标的信息检索-交易中心-功能实现
day10-4-标的信息检索-内容检索服务-定义接口
day10-5-标的信息检索-内容检索服务-功能实现1
day10-6-标的信息检索-内容检索服务-功能实现2
day10-7-标的信息检索-功能测试
第四章 万信金融-投标放款
4-1 用户投标业务需求分析
day10-8-用户投标-业务概述
day10-9-用户投标-需求分析
4-2 实现投标预览功能
day10-10-投标预览-定义接口
day10-11-投标预览-接口1-功能实现1
day10-12-投标预览-接口1-功能实现2
day10-13-投标预览-接口1-功能实现3
day10-14-投标预览-接口1-功能测试
day10-15-投标预览-接口2-功能实现
day10-16-投标预览-接口2-功能测试
day10-17-投标预览-接口3-功能实现
day10-18-投标预览-接口3-功能测试
day10-19-投标预览-前后端集成测试
4-3 实现用户投标功能
day11-1-用户投标-定义接口
day11-2-用户投标-功能实现1
day11-3-用户投标-功能实现2
day11-4-用户投标-功能实现3
day11-5-用户投标-功能实现4
day11-6-用户投标-功能实现5
day11-7-用户投标-功能实现6
day11-8-用户投标-功能实现7
day11-9-用户投标-功能实现8
day11-10-用户投标-功能实现9
day11-11-用户投标-功能实现10
day11-12-用户投标-功能实现11
day11-13-用户投标-前后端集成测试
4-4 满标放款需求分析和接口定义
day11-14-满标放款-需求分析
day11-15-满标放款-定义接口1
day11-16-满标放款-定义接口2
day11-17-满标放款-定义接口3
day11-18-满标放款-定义接口4
4-5 满标放款功能实现
day12-1-满标放款-接口1-功能实现1
day12-2-满标放款-接口1-功能实现2
day12-3-满标放款-接口1-功能实现3
day12-4-满标放款-接口1-功能实现4
day12-5-满标放款-接口1-功能实现5
day12-6-满标放款-接口1-功能实现6
day12-7-满标放款-接口2-功能实现
day12-8-满标放款-接口3-功能实现
day12-9-满标放款-接口4-功能概述
day12-10-满标放款-接口4-Mapper
day12-11-满标放款-接口4-业务层-获取相关数据
day12-12-满标放款-接口4-业务层-生成还款计划
day12-13-满标放款-接口4-业务层-保存还款计划
day12-14-满标放款-接口4-业务层-生成投资人应收明细
day12-15-满标放款-接口4-Controller
day12-16-满标放款-前后端集成测试
4-6 可靠消息实现最终一致性
day12-17-可靠消息实现最终一致性-概述
day12-18-可靠消息实现最终一致性-RocketMQ
day13-1-可靠消息实现最终一致性-入门案例-环境搭建
day13-2-可靠消息实现最终一致性-入门案例-bank1-数据访问层
day13-3-可靠消息实现最终一致性-入门案例-bank1-业务层
day13-4-可靠消息实现最终一致性-入门案例-bank1-执行本地事务
day13-5-可靠消息实现最终一致性-入门案例-bank1-回查事务
day13-6-可靠消息实现最终一致性-入门案例-bank1-controller
day13-7-可靠消息实现最终一致性-入门案例-bank2-业务层
day13-8-可靠消息实现最终一致性-入门案例-bank2-消费消息
day13-9-可靠消息实现最终一致性-入门案例-功能测试
4-7 解决满标放款业务中的事务问题
day13-10-解决满标放款业务中的事务问题-问题分析
day13-11-解决满标放款业务中的事务问题-交易中心-发送消息
day13-12-解决满标放款业务中的事务问题-交易中心-事务监听器
day13-13-解决满标放款业务中的事务问题-还款服务
day13-14-解决满标放款业务中的事务问题-功能测试
第五章 万信金融-用户还款
5-1 用户还款需求分析
day13-15-用户还款-需求概述
day13-16-用户还款-需求分析
5-2 用户还款功能实现
day13-17-用户还款-第一阶段-定义接口
day14-1-用户还款-第一阶段-实现接口1
day14-2-用户还款-第一阶段-实现接口2
day14-3-用户还款-第一阶段-业务触发入口
day14-4-用户还款-第一阶段-功能测试
day14-5-用户还款-第二阶段-功能实现
day14-6-用户还款-第二阶段-业务触发入口
day14-7-用户还款-第二阶段-功能测试
day14-8-用户还款-第三阶段-业务分析
day14-9-用户还款-第三阶段-发送消息
day14-10-用户还款-第三阶段-本地事务1
day14-11-用户还款-第三阶段-本地事务2
day14-12-用户还款-第三阶段-消息监听
day14-13-用户还款-第三阶段-业务触发入口
day14-14-用户还款-第四阶段-定义接口
day14-15-用户还款-第四阶段-功能实现1
day14-16-用户还款-第四阶段-功能实现2
day14-17-用户还款-第四阶段-消费消息
day14-18-用户还款功能测试
5-3 任务调度和分布式任务调度
day14-19-任务调度概述
day14-20-分布式任务调度概述
5-4 Elastic-Job介绍
day14-21-Elastic-Job简介
day14-22-Elastic-Job重要概念
day15-1-cron表达式
5-5 Elastic-Job入门案例
day15-2-快速入门-环境搭建
day15-3-快速入门-数据访问层
day15-4-快速入门-任务类
day15-5-快速入门-zookeeper配置类
day15-6-快速入门-elastic-job配置类
day15-7-快速入门-运行效果
5-6 实现定时还款任务
day15-8-定时还款任务-基础配置
day15-9-定时还款任务-数据访问层
day15-10-定时还款任务-业务层
day15-11-定时还款任务-任务类
day15-12-定时还款任务-配置类
day15-13-定时还款任务-功能测试
5-7 实现还款短信提醒功能
day15-14-还款短信提醒-腾讯云概述和环境准备
day15-15-还款短信提醒-定义接口
day15-16-还款短信提醒-还款提醒功能-准备工作
day15-17-还款短信提醒-还款提醒功能实现
day15-18-还款短信提醒-发送还款短信-功能实现
day15-19-还款短信提醒-功能测试
day15-20-定时还款短信提醒
第六章 万信金融-项目总结&就业指导
6-1 项目业务总结
day16-1-行业简介
day16-2-项目概述
day16-3-功能架构
day16-4-技术架构
day16-5-整体业务
day16-6-关键业务1
day16-7-关键业务2
6-2 项目技术总结
day16-8-易问技术-配置中心
day16-9-易问技术-UAA
day16-10-易问技术-分库分表
day16-11-易问技术-读写分离
day16-12-易问技术-分布式事务
day16-13-易问技术-TCC
day16-14-易问技术-RocketMQ事务消息实现最终一致性
day16-15-易问技术-分布式定时任务
day16-16-易问技术-ElasticSearch
day16-17-易问技术-Logstash
day16-18-易问技术-数据安全
6-3 项目管理总结
day16-19-项目管理
第七章 万信金融-项目实战
7-1 项目实战整体安排
1.项目实战整体安排
7-2 充值功能实战
2.充值-业务概述
3.充值-需求分析
4.充值-接口定义
7-3 提现功能实战
5.提现-业务概述
6.提现-需求分析
7.提现-接口定义
7-4 身份认证功能实战
8.身份认证-业务概述
9.身份认证-需求分析
10.身份认证-文件服务
11.身份认证-百度AI服务
12.身份认证-接口定义
7-5 项目部署实战
1.DevOps介绍
2.使用Docker Compose部署项目
3.持续集成的作用
4.持续集成介绍
5.Gogs的安装和使用
6.Jenkins的安装和配置
7.Jenkins构建任务测试
8.Jenkins自动构建任务
第八章 万信金融-微服务高级部分
8-1 服务调用链路追踪的理解和使用
1.服务调用链路追踪-学习目标
2.服务调用链路追踪-问题分析
3.服务调用链路追踪-解决方案
4.服务调用链路追踪-快速上手
5.服务调用链路追踪-入门案例
6.服务调用链路追踪-功能测试
8-2 Zipkin的理解和使用
7.Zipkin简介
8.Sleuth&Zipkin集成案例
9.Sleuth&Zipkin集成测试
10.Zipkin&Elasticsearch集成
11.Zipkin依赖分析
12.万信金融P2P项目实行服务调用链路追踪
8-3 Sentinel的理解和使用
13.Sentinel实现限流-学习目标
14.Sentinel问题分析
15.Sentinel简介
16.Sentinel入门案例
17.Sentinel入门案例-功能测试
18.SentinelDashboard图形化控制台
19.Sentinel限流规则参数
20.Sentinel动态规则
21.Sentinel网关限流
8-4 万信金融P2P项目实现网关限流
22.万信金融P2P项目实现网关限流
23.万信金融P2P项目网关限流测试
8-5 Hystrix的理解和使用
24.Hystrix学习目标
25.服务熔断概述
26.Hystrix简介
27.Hystrix&Feign入门案例
8-6 万信金融P2P项目实现服务熔断
28.万信金融P2P项目实现服务熔断
29.万信金融P2P项目熔断测试
字符串转Integer
borrowerDTO.setAge(new Integer(info.get("age")));
rocketmq
windows rocketmq broker创建不了
https://www.cnblogs.com/rouji...
删除user/store文件
mybatis plus
查询总数
查询满足条件的数量
tenderWrapper.selectCount(Wrappers..lambdaQuery.eq(Tender::getProjectId,1))
构造条件然后查询数量
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(Project::getConsumerId,
restResponse.getResult().getId());
根据条件查询列表
List tenderList = tenderMapper.selectList(Wrappers.lambdaQuery().eq(Tender::getProjectId,id));
时间戳,日期的归纳
新时间日期API详解与示例
获取当前时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
时间戳转成utc date,再转成LocalDateTime
public LocalDateTime convertUTCToLocalTime(String timeStamp) {
Long timeLong = Long.parseLong(timeStamp) * 1000L;
Date timeDate = new java.util.Date(timeLong);
String date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(timeDate);
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse(date, df);
return ldt;
}
数组转成ArrayList
int[] arr = {1,2,3}
ArrayList list = Arrays.toList(arr)
含毫秒或者不含毫秒的utc时间转换
先转Date,再转LocalDateTime
/** es输出的utc毫秒字符串转date
* @param text 时间字符串,格式支持两种
* 1、不包含毫秒值,如"2019-01-03T08:26:15Z";
* 2、支持任意位数的毫秒值:2019-01-03T08:26:15.503162206Z;
* 转换出来的Date类型精度知道毫秒位
* @return
* @throws ParseException
*/public static Date parseUTCText(String text) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
if (text.indexOf(".") > -1) {
String prefix = text.substring(0, text.indexOf("."));
String suffix = text.substring(text.indexOf("."));
if (suffix.length() >= 5) {
suffix = suffix.substring(0, 4) + "Z";
} else {
int len = 5 - suffix.length();
String temp = "";
temp += suffix.substring(0, suffix.length() - 1);
for (int i = 0; i < len; i++) {
temp += "0";
}
suffix = temp + "Z";
}
text = prefix + suffix;
} else {
text = text.substring(0, text.length() - 1) + ".000Z";
}
Date date = sdf.parse(text);
return date;
}
/**
* date转LocalDateTime
* @param l
* @return
*/
public static LocalDateTime convertDateToLocalDateTime(Date l){
LocalDateTime ldt = l.toInstant()
.atZone( ZoneId.systemDefault() )
.toLocalDateTime();
return ldt;
}
数据库是timestamp的时候javabean实体类的类型可以为string
开户
开户流程
调试过程中遇到的问题
Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
pom中mybatis-plus-boot-starter没有引入
可能是mybatis没扫到mapper文件
Caused by: feign.FeignException: status 404 reading AccountApiAgent#login(AccountLoginDTO)
feign里边的 接口没用添加前缀
创建mapper模板
UAA服务认证
rocketmq win下安装
win10 必须把rocketmq的安装目录放入环境变量
复制控制台java包到bin目录下,并且创建cmd执行文件
start mqnamesrv.cmd
start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
java -jar rocketmq-console-ng-1.0.1.jar --server.port=60000 --rocketmq.config.namesrvAddr=127.0.0.1:9876
控制台的访问地址http://localhost:60000/rocketmq/#/
rocketmq每一个消息
{"respCode":"00000","respMsg":"成功","status":1,"requestNo":"REQ_7A2A28AA88354AA1BDADD43DBDE2F6D1","bankCode":"PAB","bankName":"平安银行"}
发标
bigDecimal
业务流转图
标的分库分表方案
幂等性的问题
要解决的问题
发标
发标过程中logstash的执行命令
./logstash.bat -f ../config/mysql-es.conf