java之路
2023-03-06 15:55:20 0 举报
AI智能生成
登录查看完整内容
java进阶之路
作者其他创作
大纲/内容
代码冲突
消耗资源
单点系统
代码复用
解耦
网络延迟
主要针对银行
面向服务架构
轻量级
独立运行
特性
微服务架构
发展历程
网站架构模式
减轻单台服务器的访问压力
作用
将一个项目部署到多个不同的服务器中
定义
集群
响应时间
并发用户数
QPS;每秒请求处理数
吞吐量
高并发概念
扩容
动静分离
缓存
关不重要的服务
服务降级
保护系统
目的
消息平台
延迟处理
部分处理
方式
数据库连接处、线程池
限制总并发数
tomcat中的maxConnections
限制瞬时并发数
Guava的RateLiter限制每秒平均速率
限制时间窗口内的平均速率
限制
具体操作
一天不能超过1万次请求
固定窗口
电梯格子模型
滑动窗口
有一个缓冲区
缓冲区满了进行限流干预
不能应付突发情况
漏铜算法
突发情况下可以一次拿多个令牌
放令牌速度固定
处理速度可以变化
令牌桶
分布式
原则
限流
优化策略
亿级并发处理策略
服务器宕机容错机制
一主一备;多主多备
keepalive
nginx设置宕机轮询
途径
高可用
一个大项目拆分成很多子项目
完成同一主体功能
会员,订单,支付,物流系统
案例
rpc远程调用
技术
开启慢查询,定位瓶颈sql语句;通过执行计划分析sql,是否有全表扫描等不合理的语句;sql语句优化
使用索引
分表分库
主从复制
读写分离
使用redis缓存数据库内容
哨兵机制
缓存机制
数据库
反向代理
负载均衡
服务器
减少请求,ajax
CDN加速
客户端
代码重构
垃圾回收,新生代,老年代
JVM参数
JVM调优
项目采用微服务和分布式架构
项目环境
高并发解决方案
默认配置
应用级配置
方法级配置
层次封装
重构
架构
CAS
JWT
sso
UserDetailsService
处理用户信息获取
UserDetails
处理用户校验逻辑
PasswordEncoder
处理密码加解密
自定义用户认证
loginPage(\"xx\")
自定义登录页面
AuthenticationSuccessHandler
自定义登录成功处理
AuthenticationFailureHandler
自定义登录失败处理
个性化用户认证流程
核心流程图
记住我
logout
退出
认证
授权
防护
核心功能
BasicAuthenticationFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
核心源码
认证处理流程说明
认证结果如何在多个请求之间共享
获取认证用户信息
认证流程源码
源码剖析
SpringSecrity
Oauth协议
ConnectControl
Session管理
核心知识
SpringSocial
自包含
密签
可扩展
Token处理
SpringSecurity OAuth
权限框架
开放平台
工作流平台
核心平台
正在运行的应用程序;线程的集合
进程
正在独立运行的一条执行路径
线程
提高程序的运行效率
多线程
概念
多线程下载;qq;爬虫;异步上传;分布式job
应用场景
继承Thread类;实现runlable接口;使用匿名内部类;callable;使用线程池
创建多线程的方式
主线程,守护线程,用户线程
新建
准备
运行
休眠
停止
几种状态
共享同一个全局变量,写的时候可能会受到其它线程的干扰,导致数据有问题
什么是线程安全
静态同步函数
非静态同步函数
同步函数
同步代码块
synchroized
lock
同步
解决办法
线程安全
两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去
多线程死锁
主内存
私有本地内存
分类
Volatile
atomicInteger
java内存模型
wait;notify
技术手段
多线程通讯
lock,condition
锁
vector与arrayList
Hashtable与HashMap
Collections
ConcurrentHashMap
集合
CountDownLatch
CyclicBarrier
Semaphore
是否有限制
有界、无界
不满足是否等待
阻塞和非阻塞
ConcurrentLinkedQueue
ArrayBlockingQueue
具体案例
并发队列
java并发包
重复利用,降低资源消耗
提供响应速度
提高线程的可管理性
为什么需要线程池
newCachedThreadPool
newFixedThreadPool
newScheduledThreadPool
newSingleThreadPool
Executor
ThreadPoolExecutor
线程数和cpu核数相同
cpu密集
2*CPU核数
IO密集
线程池配置数量
线程池原理分析
版本控制
乐观锁
每次拿数据的时候都会上锁
只能保证一个连接进行操作
缺点
悲观锁
排它锁
分段锁
打水排队,家人可以重复进入
重入锁
只有读-读能共存
读写锁
原子类底层实现保证线程安全
V-要更新的变量
E-预期的值
N-新值
参数
CAS无锁
一直循环等待锁,直到获取才退出循环
自旋锁
常见锁
锁的深度化
gson
fastjson
jackson
解析工具
json
dom4j
sax
xml
运行期动态创建类的实例
初始化效率低
java反射
对象之间的关系转移到容器
ioc
数据交换格式、反射、ioc的底层实现
内置注解
自定义注解
注解类运行环境需要设置,否则反射后拿不到值
注意点
注解
开闭原则
里氏代换
依赖倒转
接口隔离
迪米特法则
合成复用
jdk通过反射生成一个匿名类;cglib通过开源的asm修改字节码来实现
jdk动态代理只能针对接口;cglib都可以
jdk和cglib的区别
设计模式
自定义注解与java设计模式
面向连接
三次握手
字节流传输
可靠
tcp
面向无连接
传输<64k
不可靠
udp
socket网络通信
buffer
直接缓冲区
非直接缓冲区
分散读取,聚集写入
阻塞的,面向流的
io(Bio)
伪异步
数据准备就绪后,由选择器通知给服务器端;数据在准备之前无需等待
非阻塞
非阻塞,面向缓冲区的,选择器
nio
异步,非阻塞
Aio
区别
基本概念
异步通讯框架,异步非阻塞,高可用,事件驱动
粘包、拆包;序列化;短链接,长链接
功能
netty
NIO编程
方法区
创建对象,new 数组
堆
基本的局部变量
类的方法
栈
主要调用C语言
本地方法栈
PC寄存器
执行字节码文件
执行引擎
内存结构
减少垃圾回收的次数
堆初始值和最大值要一样
添加线程组
samples-http请求
添加聚合报告
操作步骤
jmeter
tomcat
基本工具
每秒钟请求成功次数
实战调优
JVM参数调优
不定时的清理堆内存不可达的对象
重写该方法,可以知道垃圾回收的时间
finalize
需要4g,实际只有3g
内存溢出
定义很多静态变量,但是又不能被回收,对象又没有被引用
内存泄漏
eden
s0
S1
新生代
老年代
划分
堆大小不足
堆溢出
web系统中尽量减少常量信息
堆初始值和最大值保持一致
尽量减少垃圾回收机制的次数
新生代与老年代比例:1/3;1/4
eden是S0,S1的两倍大小
SurvivorRatio=2
NewRatio=老年代/新生代
新生代回收次数比老年代多
调优
每个对象打一个标记,0:可达,1:不可达
标记清除
标记后,需要排序,压缩,集中清除
避免碎片化
优点
标记压缩
每个对象都有一个标记,默认是15次,如果GC回收发现对象没有引用,则减一,可达,则加一,超过一定次数会升级到其他区
执行时间比较快,不太会干扰程序
无法检测出循环引用
引用计数法
复制活动对象到对方区,交替清除S0或者S1区
连续性,不会出现碎片化
空间利用率不高
复制算法
分新生代和老年代,不同代采用不同算法
分代算法
算法
单线程收集,效率低
串行
多线程收集,效率高
并行
垃圾收集器
GC
JVM剖析
exclusions
冲突解决
Maven技术
javaee主要做web开发,面向企业的,spring,mybaits,hibernate
javase 面向对象,多线程,io流,集合,网络
javaee与javase
B/S:web程序,网站;浏览器到web服务;无需下载安装
C/S:客户端到服务器;需要下载安装;升级麻烦
B/S与C/S
将本地资源共享给外部访问
web服务器
本地host文件解析——》运营商的DNS解析
DNS解析
内网:内网相当于局域网访问;网关是否相同
外网:申请外网IP地址
外网映射工具:ngrok(不稳定);natapp,花生壳
内网与外网
init
service
destroy
生命周期
源码分析
是否安全
cookie与session
servlet
web开发入门
304
时间戳,治缓存
refer
nginx反向代理
防盗链
客户端跳转,地址会变化
重定向
服务内部
转发
转发与重定向
http协议
请求访问的域名与AJAX请求的地址不一致,浏览器无法获取到返回结果
定义
jsonp:只支持get
接口网关
httpclient内部转发
添加header允许访问
怎么解决
跨域
网络延迟,刷新,重新加载(回退)
原因
flag不能解决问题
前端
tocken
后端
表单重复提交
使用令牌+验证码
防止模拟请求
脚本注入
后台获取参数通过过滤器转换成HTML
XSS攻击
预编译
sql拼接,or 1=1;--
sql注入
http协议,表单重复提交,跨域
运维和安全审计
堡垒机
开源,免费,安全
> >>
touch
vim
grep
:set nu
shift+g
常用命令
虚拟机安装
centos6安装
检查是否安装:rpm -qa|grep 'msyql-server..'
rpm -ivh * rpm -Uvh
service mysqld start
mysqladmin -u root password 'password'
mysql
tar -zxvf 安装包
解压
etc/profile
环境变量
jdk
基础环境搭建
LINUX
直接运行在操作系统内核之上的用户空间
容器技术
通过中间层,将一台或者多台独立的机器,虚拟运行于物理硬件之上
虚拟机
官方文档
docker简介
C/S架构
服务端
守护进程
镜像
容器
仓库
docker基本组成
进程隔离
PID
管理网络接口
NET
管理跨进程通信的访问
IPC
管理挂载点
MNT
隔离内核和版本标识
UTS
namespace
资源限制
优先级设定
资源计量
资源控制
cgroup
文件系统隔离
网络隔离
资源隔离和分组
容器的能力
相关技术
内核版本
deviceMapper
安装前检查
ubantu
docker的安装部署
交互式容器和守护容器
docker操作
容器间
容器与外部访问
docker的网络设置
数据卷容器删除,也不会影响文件数据
数据卷容器
数据卷
配置简单,不依赖第三方软件
与主机在同网段,需要小心划分IP地址
需要有网段控制权,在生产环境中不易实现
不容易管理
网桥
Opend vSwitch
Weave
跨主机容器连接
docker
原子约束,每列不可再分
1范式
唯一性约束
2范式
不要有冗余数据
3范式
三范式
数据库设计合理
2的N次方
需要同步修改索引文件
索引底层原理
查询次数比较,值有非常多的不同;
是查询条件
何时需要建立索引
第一个条件会生效
两个一起也会生效
组合索引
like+%开头就会导致全表扫描
使用or,所有条件必须加索引
判断是否为NULL,使用is null,才会使用索引
group by会全表扫描
order by null可以禁止排序
尽量不要使用>=
in not in 也会全表扫描
索引注意事项
普通索引
primary key
主键索引
unique
唯一索引
不要使用like
match
全文索引
索引分类
添加索引
分页查询困难
查询非常受限制
水平分隔
垂直分隔
手段
数据库独立,减少风险,团队开发,项目拆分
分库
订单表多年数据
取模分表
分表
何时分库、分表
存储过程
配置mysql最大连接数
mysql服务器升级
随时清理碎片化
慢查询日志
explain
定位慢查询
sql语句调优
mysql优化
mysql读写分离
对象创建,管理依赖关系
扫包,反射,容器
Autowired:默认是以类型进行查找
Resource:默认是以名称进行查找
Autowired与Resource的区别
di
关注点:重复代码
切面:抽取重复代码
切入点:拦截那些方法
三大核心
环绕通知+异常通知
事务
日志
权限
性能统计
异常处理
aop
spring
spring核心技术
原子性
一致性
隔离性
持久性
事务的特性
手动事务
声明式事务
spring事务分类
AOP编程+环绕通知+异常通知
业务层不要try异常
事务的原理
事务的传递
当前没有事务,则新建一个事务;如果当前有,则直接加入
Required
如果当前有事务,直接加入;没有,则以非事务运行
supports
使用当前事务,当前没有事务,抛出异常
mandatory
新建事务,如果当前有事务,挂起
required_new
非事务运行,当前存在事务,挂起
not_supports
非事务运行,存在事务,抛出异常
never
如果当前存在事务,则在嵌套事务内执行;如果不存在,则类似required方式执行
nested
事务的传播行为
事务与传播行为
先知道怎么用
设想可能的实现原理
找关键点
思路
github,官网
maven
不推荐
反编译
如何下载源码
源码导入当前工具
外部引入
maven关联
关联源码
定义了IOC容器的最基本形式
BeanFactory
ioc反射
XML解析springbean文件
BeanDefinition
SPRING
servlet包装起来的
核心技术
springmvc的任何请求先交给DispatchServlet进行管理
执行DispatcherServlet doService方法 交给doDispatch方法
doDispatch获取 HandlerMaping
真正执行当前请求的适配器
主要是适配注解类处理器,注解类处理器就是我们经常使用的@Controller的这类处理器
AnnotationMethodHandlerAdapter
要是适配静态资源处理器,静态资源处理器就是实现了HttpRequestHandler接口的处理器,这类处理器的作用是处理通过SpringMVC来访问的静态资源的请求
HttpRequestHandlerAdapter
是Controller处理适配器,适配实现了Controller接口或Controller接口子类的处理器,比如我们经常自己写的Controller来继承MultiActionController
SimpleControllerHandlerAdapter
SimpleServletHandlerAdapter
HandlerAdaper 开始拦截器
执行完毕 获取当前ModelView
执行流程
SPRINGMVC
创建对象
初始化属性
BeanNameAware获取查找beanName
BeanFactoryAware获取bean容器工程
BeanPostProcess
销毁bean
Springbean的生命周期
SpringAop
敏捷开发
无需tomcat
减少XML配置
SpringCloud|SpringBoot
封装太多,扩展比较困难
弊端
快速搭建
整合jsp
整合模板
jdbcTemplate
jpa
mybatis
整合持久层
基本操作
这么样搭建多数据源
分包
如何区分不同的数据源
JPA+atomikos
分布式事务
多数据源整合
整合日志
Async异步化
创建定时任务
打包发布
整合ehcache
高级操作
SpringBoot
主要针对数据库访问层
oscache
主要针对jsp页面
escache
没有持久化机制
容易内存溢出
多服务器共享问题
JVM内置缓存
减轻数据库访问压力
token生成
session共享
分布式锁
自增id
验证码
String,set,zset,hash,list
基本数据类似
监听服务器
重新投票选举
哨兵
二进制文件格式存储
非实时
体积小
主动断开会自动备份;直接kill或者down机不会保存数据
RDB
日志文件方式存储
体积大
实时添加到日志文件末尾
AOF
持久化
事务机制
发布订阅
redis
存放json格式
mogadib
不能做持久化
memcache
hbase
数据存放在数据库中
存放在内存中
清掉缓存
数据库数据和缓存数据不一致
问题
nosql缓存
代理服务器
静态服务器
减轻单台服务器的压力
分布式job的幂等性问题
spring-session+redis
tomcat配置session共享
使用负载均衡策略,ip绑定
token重写session
子主题
使用cookie,不安全
解决方案
提前生成订单号
分布式生成全局id
权重
轮询
会话共享问题
ip绑定
第三方
负载均衡的算法
实现原理
不用暴露真实ip
虚拟服务器
http服务器
Lvs,haproxy,f5
类似工具
域名相同,项目名称不同
原理
企业API网关
故障转移
重启脚本
优先走主机
只能重启本机的服务
keepalived
nginx
阻塞,超时,重复提交。数据不一致
A项目默认3次重试,依然失败,则插入日志表(补偿表)
手动补偿
A调用B,B没有及时响应或者报错
异步
同步和异步
点对点
异步通讯
缓存排队
高并发
为什么需要消息中间件
注册后续服务
订单库存
发布版本解决
补偿表机制
try catch掉
数据转换异常
默认自动重试
jdbc链接异常
消费者消费过程中抛出异常
注意事项
本身不支持集群
activeMq
分布式消息中间件
效率非常高
海量消息堆积
支持几10万个队列
生产者投递消息,均摊集群服务器
消费者均摊消息消费
支持重试机制
顺序消息
事务消息,分布式事务
拉取机制
存放生产者,消费者投递信息
地址信息
nameserver
存放消息
broker
producer
consumer
必须要JDK1.7 64位环境
配置JVM参数
安装
rocketmq
rabbitmq
日志存放
大数据
kafka
自动签收
事务消息
手动签收
不用签收
签收模式
JMS可靠性
activemq可以使用消息id,但是roketmq集群不能使用
全局id
可以放缓存里面
核心
是因为消费者没有及时将消费结果反馈给生产者,自动重试
产生原因
每次消费存放到日志文件里面|全局id
重试机制,判断是否重复消费,不会存在并发的场景
业务更新和写全局id事务回滚
业务耗时太久,此时全局id没有放进去,就重试消息,不是会出问题
疑问
消息的幂等性
消息中间件
http://shardingsphere.io/index_zh.html
官网
Sharding-jdbc
Thread
timetask
quartz
spring-boot
实现方式
保证只有一台服务器执行job
start=true,false
保证只有一台服务器执行
配置文件开关
效率低
谁插成功了就执行
使用数据库唯一标识
幂等性
没有补偿机制;失败了就一直失败
不支持集群
不支持路由策略
统计;那些成功,那些失败
job管理平台
报警邮箱
状态监控
传统调度的缺点
任何job先在任务调度平台执行,再由任务调度平台路由到实际job服务器
XXL-JOB
分布式任务调度平台
持久层
解决元素存储的安全性问题
解决获取元素的时候需要强制类型转换的问题
使用目的
泛型
一段可以传递的代码
匿名内部类的替代
为什么需要
接口中只有一个抽象方法
Consumer:void accept(T t)
消费型接口
Supplier:T get()
供给型接口
Function:R apply(T t)
函数型接口
Predicate:boolean test(T t)
断言型接口
内置接口
子接口
函数式接口
Lambada表达式
方法引用和构造器引用
创建stream
filter
limit
skip
distinct
筛选与切片
函数作为参数,应用到每个元素上
map
类似add和addAll
flatMap
自然排序
定制排序
排序
中间操作
allMatch
anyMatch
noneMatch
findFirst
findAny
count
max,min
终止操作
将流中的元素反复结合起来
规约
join
分区
分组
list
将流转化成其他类型
收集
使用步骤
拆分合并
工作窃取
fork/join
任务拆分
parallel
并行流
Stream API
解决空指针异常
Optional容器类
类优先
default
static
接口
时间日期
重复注解与类型注解
java核心基础知识点
核心知识点
一种用于声明在应用中扮演“组件”角色的主键
@Component,@Service,@Configuration
派生性
层次性
<context:component-scan>
@ComponentScan
装配方式
Spring模式注解装配
具备相同领域的功能组件集合
@EnableWebMvc,@EnableAutoConfiguration
编程
Spring @Enable模块装配
Bean装配的前置判断
@Profile,@Conditional
主键
Spring 条件装配
装配
SpringApplication API
SpringApplicationBuilder API
自定义
配置Spring Bean来源
推断:Web应用类型和主引导类
加载:应用上下文初始器和应用事件监听器
准备阶段
加载
监听
运行阶段
SpringApplication
maven子父依赖,父类提供公共的jar
快速整合三方框架
java操作springmvc的配置过程
无配置文件
java创建tomcat服务器
内置HTTP服务器
注册中心
rest
自带负载均衡
fegin
ribbon
服务调用
所有请求在处理一个服务,不能访问其他服务接口
使用超时
服务接口发生错误,不去调用接口,调用本地方法fallback
达到规定请求,熔断,报错
熔断机制
每个服务隔离开
隔离机制
限流机制
服务雪崩效应
断路器
网关
分布式配置中心
SpringCloud
分布式协调工具
持久节点
持久顺序节点
会话链接失效后,值会自动删除掉
临时节点
临时顺序节点
节点
节点需要开启通知
消费者需要添加监听事件
节点事件通知
树状结构
节点名称唯一
dubbo的注册中心
服务注册到zk
从zk获取最新的服务链接信息
订阅子节点事件
按照规则获取一个链接发起调用
流程
取模算法
轮询机制
分布式通知
多台服务器,创建临时节点,谁能创建成功,谁就是主;主如果宕机,则再次重新创建节点
master选举
使用数据库
使用缓存
使用zk的临时节点+事件通知
分布式队列
zookeeper
同SpringCloud
dubbo使用zk实现注册中心
springCloud使用eurake作为注册中心
dubbo支持多种协议,springcloud只支持http协议
dubbo没有网关,springcloud有网关和分布式配置中心
都是rpc远程框架
dubbo可以整合hystirc作为断路器
dubbo与springcloud的区别
dubbo
两段提交协议
三段提交协议
过滤器
黑白名单
常用功能
ip+端口
LVS
HTTP
NGINX
对比
zuul,gateway
服务隔离
雪崩效应
服务降级、限流、熔断
当服务产生堆积的时候,
服务保护
不同服务互不影响
线程池
计数器
提高用户体验
服务不可用;直接返回一个错误
超过限制,直接拒绝服务,最终调用服务降级措施
服务熔断
微服务高并发
产生背景
微服务
PC端
安卓,ios
微信端
混合模式
平台来源
H5工程
PC工程
支付工程
视图层
DB1
会员服务
DB2
订单服务
DB3
支付服务
SOA层
总体架构
SpringBoot+SpringCloud+Maven+Redis+ActiveMQ+XXLJOB+Freemarker+Eureka+Feign+Hystrix+Mybatis+MySQL+SVN+Jenkins+Nginx+Lombok+Logstash+FastJson+Md5+Base64+RSA+FastDFS+支付网关接口使用支付宝+第三方登录使用QQ授权登录
技术栈
返回结果统一封装
redis工具类封装
基础核心类的封装
pom,jar,war
创建父子结构
map接受替换成param注解接受
InsertProvider获取不到参数
增加依赖
dao接口bean无法注入
扫包范围不对
接口调用404
如果没有父类属性,增加判断
自动sql 末尾,bug
raw
postman传参
@RequestBody
实现类必须要加参数注解
基于code获取配置的异常信息
异常错误信息
wokerset
增加顶级中文项目名称
问题集锦
环境搭建
使用token方式登录
注册app,得到appid,appsecret
生成授权码链接,返回授权码
通过授权码换取accesstoken,然后失效授权码
使用accessToken换取openid
使用openid调用接口
腾讯qq与给蚂蚁课堂
qq
第三方登录
SSO
多端登录
提供授权接口
微信开放平台
服务号
订阅号
小程序
微信公众平台
平台
ngrok
natapp
外网映射工具
青云客
智能机器人
weixin-java-tools
微信开发框架
微信开发
支付宝
微信支付
京东支付
平安支付
银联支付
小米支付
在线支付
整合主流的支付平台
收钱吧
mustpay
ping++
现有平台
聚合支付
支付分类
蚂蚁课堂提交参数到支付宝接口
支付宝返回结果信息
沙箱环境
客户端将参数封装进form表单自动提交到支付宝
https
Base64
DES
对称加密
单向加密
RSA
非对称加密
加密
安全
业务订单号去重判断
支付侧幂等
间隔一段时间尽量保证不出现并发
单机,使用同步锁
集群环境使用分布式锁
全局id,先验证是否修改过
业务侧幂等
幂等
支付结果展示;不处理订单等状态更改
使用模拟表单自动提交完成支付结果展示
参数隐藏
同步通知
异步通知
回调
加签名
付款金额和实际商品金额对比
篡改
异步通知+补偿
方案一
请求支付表生成一条支付记录
生成支付token,key为token,value为支付表id
返回token给客户端
使用支付token获取支付id
使用支付表的id获取支付信息
封装支付宝拼装表单提交参数
订单支付失效控制
支付流程
支付项目
SpringCloud微服务电商项目
业务和缓存混合
业务代码和技术代码耦合
业务和日志混合
主业务代码和增值业务代码耦合
方法的耦合
类的耦合
包的耦合
开发语言的耦合
数据库的耦合
多余的依赖关系
可读性差
可复用性差
可维护性差
切换缓存框架比较难
易变性差
缓存,日志不能出问题
运行期依赖
臃肿代码
spring的EL表达式
现学现用
系统优雅
动态获取客户端ip,判断与CDN服务器距离,选择最短路径
IMAGE
css
js
视频
直播网站
缓存静态资源
CDN内容分发
接口网络延迟
场景
接口幂等性框架
用URL描述资源
使用HTTP方法描述行为;使用HTTP状态码来表示不同结果
使用JSON交互数据
不强制
核心特性
url增加参数格式的正则
JsonView
getMapping
Valid
NotBlank
BindingResult
Configration
Bean
常见注解
浏览器返回HTML
app返回JSON
错误处理机制
自定义错误处理
cotrolAdvice
错误处理
不能获取进入容器后的信息
无法获取参数
拦截器
无法获取原始的请求响应
切片
拦截
必须由主线程发起
Callable
DeferredResult
常用方法
异步处理
WireMock
RESTFUL API
商品抢购
群红包
优惠券领取
抢火车票
在线预约
短时高并发、负载压力大
读多写少
竞争资源是有限的,不能多买,不能少买,不能重买
特点
memcached的cas机制
版本号
状态
数据库方式
秒杀系统
项目实战
13-19年技术变革
Java行业分析
java之路
0 条评论
回复 删除
下一页