JAVA && Spring && SpringBoot2.x — 学习目录
JAVA篇
JAVA基础篇(1)-格式化
JAVA基础篇(2)-异常
JAVA基础篇(3)-深克隆与浅克隆
JAVA基础篇(4)-Validation验证框架
JAVA基础篇(5)-POJO的命名规则
JAVA基础篇(6)-自定义注解(理论)
JAVA基础篇(7)-自定义注解(实践)
JAVA基础篇(8)-命名规则
JAVA基础篇(9)— 数组和集合优化建议
Java基础篇(10)—MultiValueMap(一个Key对应多个Value)
Java基础篇(11)— 抽象类中为什么存在构造方法
Java基础篇(12)—枚举类(枚举值对象)
Java基础篇(13)— 运算符%的使用
JAVA基础篇(14)— 接口与抽象类的区别
JAVA基础篇(15)—自定义“通用型枚举参数”校验注解
JAVA基础篇(16)-实际项目中获取集合的交集/差集
JAVA基础篇(17)—ordered接口和order注解
Java基础篇(18)—CaseInsensitiveMap(key不区分大小写)
Java基础篇(19)—正则表达式
[JAVA基础篇22]—去重字符串中的回车、换行、制表符
[JAVA基础篇23]—JAVA异常工具类ExceptionUtils的使用
[JAVA基础篇24]—Java的对象的拷贝方式集合
重写toString方法的工具类—ToStringBuilder(重写父类来影响子类toString)
[JAVA基础篇25]—反射读取枚举值上的注解信息
commons-lang3的tuple包—响应对象携带多个值
JAVA基础篇26:实际项目中对Exception的装饰&使用
JAVA基础篇—优雅的校验:Preconditions方式实现
Java好用的http请求框架
设计模式那点事-万物皆可“建造者”(2)-利用lamda实现流式的校验
高并发场景线程安全的List
SpringBoot中使用Jackson自定义注解完成参数的个性化处理
Spring的getRequestURI与getRequestURL方法导致安全风险
JAVA中实现数据压缩所有方式(适用于通信时数据压缩)
PositiveAtomicCounter(正数原子递增器-用于路由的轮询分区)
Java超好用的工具方法(持续更新ing)
文件上传与魔数判断
JAVA文件上传与格式校验(Apache tika)
JAVA解析文件内容(Apache tika)
通过改造源码 Linux解决pdf发票转图片中文乱码
ofd和pdf电子发票解析为java对象
[快捷]Java读取resources目录下的文件为InputStream
Spring使用“注解”(自定义实现依赖注入)实现动态切换Bean
RequestBodyAdvice和ResponseBodyAdvice来处理请求报文与响应报文
开发遇到的异常们:
lombok的@Data注解用在异常子类,导致堆栈没有打印message
集合的clear()方法引发的IndexOutOfBoundsException异常。
巧用lambda表达式
巧用lambda表达式系列(1)— 选择属性实现集合对象的去重
巧用lambda表达式系列(2)— lambda与Comparator<T>排序接口
巧用lambda表达式系列(3)— JDK8中CompletableFuture+lambda表达式—快速使用多线程
颠覆认知的Java-lambda流特效:构建管道->数据流转
使用SerializedLambda获取到方法引用的方法名
常用工具类
常用工具类(1)—DateUtil实现日期格式化和解析
进阶篇
Java进阶篇(2)—Optional类(预防空指针NPE)
Java进阶篇(3)—Optional类(是否使用Optional来代替null)
Java进阶篇(4)— JDK8新增的Map方法
Java进阶篇(5)—项目中出乎意料的空指针异常(持续更新...)
JAVA进阶篇(6)—Calendar日期类性能优化(clone创建Calendar对象)
JAVA进阶篇(7)—Java agent从0到1的踩坑过程
JAVA进阶篇(8)—TransmittableThreadLocal—父子线程间线程本地变量
JAVA进阶篇(9)—实现网络照片的上传和下载(腾讯云cos)
JAVA进阶篇(10)—Guava实现的EventBus(观察者模式)
项目实战—观察者模式(自定义高性能的订阅-发布模型)
JAVA进阶篇(11)—获取项目所在机器的IP地址和项目的jar名称
JAVA进阶篇(12)— 如何读取JVM启动参数的值
JAVA进阶篇(13)— 正则表达式的性能优化(正则表达式导致CPU飙升)
Java进阶篇(14)——规则引擎QlExpress
从TransmittableThreadLocal使用前调研(源码分析)
规范篇
Java项目开发规范(1)—方法命名规范
记一次线上bug:请求入参没有trim()导致查询失败
并发篇:
维护缓存时,要对什么加锁?【synchronized能否对局部变量加锁,ConcurrentHashMap提供的computeIfAbsent源码分析】
synchronized借助ConcurrentHashMap实现细粒度的对象锁
JDK1.8的ConcurrentHashMap提供的computeIfAbsent性能问题
多线程——线程池ThreadPoolExecutor
自定义实现JAVA线程池的线程工厂类——ThreadFactory
JAVA优化篇:
JAVA优化篇1-优化高并发下System.currentTimeMillis()获取当前时间
JAVA优化篇2-生成3-10之间随机数的方法(高并发下优化Random)
JAVA优化篇3-判断两个Date是否相等(高并发下优化Calendar)
JAVA序列化:
复习盘点-Java序列化方式(1)JSON序列化(温故知新-泛型)(jdk8-LocalDate序列化)
复习盘点-Java序列化方式(2)JAVA原生序列化以及Protostuff序列化
【常用】Jackson针对泛型的序列化的工具方法
proto对象与Java对象转换工具类(1)— 简单对象转化
Jackson序列化(1)— [SpringBoot2.x]-Jackson在HttpMessageConverter(消息转换器)中的使用
Jackson序列化(2)— [SpringBoot2.x]-Spring容器中ObjectMapper配置
Jackson序列化(3)— Jackson中ObjectMapper配置详解
Jackson序列化(4)— Jackson“默认的”时间格式化类—StdDateFormat解析
Jackson序列化(5) — Jackson的ObjectMapper.DefaultTyping.NON_FINAL属性
Jackson序列化(6)— Java使用Jackson进行序列化
Jackson序列化(7) —使用BeanSerializerModifier定义Jackson的序列化方式(对于null,String格式要返回"")
Jackson序列化(8)— 支持泛型的反序列化
Jackson2.x中内存泄露的风险点—封装的intern逻辑
Jackson复杂Json的快速解析
SpringBoot的HttpMessageConverter使用(1)RestTemplate中的应用
SpringBoot的HttpMessageConverter使用(2)@RequestBody和@ResponseBody中的应用
SpringBoot的HttpMessageConverter使用(3)—Feign中的使用
SpringBoot2.x之HandlerMethodArgumentResolver实战
SpringBoot2.x之HandlerMethodArgumentResolver(2)—自定义解析器顺序
SpringBoot2.x之HandlerMethodArgumentResolver(3)—取代@RequestBody注解来获取Json参数
ContentCachingRequestWrapper实现Request对象的可重复读(引发OOM)
SpringBoot2.x对http请求accept的消息转换处理
一次生产事故引发的JDK序列化思考
FastJson出现{"$ref":"$[0]"}解决方案
RestTemplate远程调用:
SpringBoot2.0.x中RestTemplate调用三方接口出现汉字乱码(消息转换器)
SpringBoot的HttpMessageConverter使用(1)RestTemplate中的应用
RestTemplate远程调用—复杂API极简使用(面向Map组装)
Spring—RestTemplate设置Interceptor拦截器
SpringBoot2.x下更加灵活的RestTemplate(定制化第三方接口的template)
RestTemplate如何支持泛型对象输出?
JAVA反射:
Java反射-1(理论)
Java反射-2(技巧)
Java反射-3(性能)
Java反射-4—工具类ReflectionUtils
java内省(Introspector)
java内省优化工具类BeanUtils(优化内省并防止内存泄漏)
mybatis的反射工具类—MetaObject(反射对象类)
mybatis的使用BaseTypeHandler实现参数重写(入库前加解密)
JAVA的IO
socket通信—实现网络间的IO通信
IO学习(1)Java-BIO体系学习
SpringBoot实现http请求的异步长轮询【1】—AsyncContext【推拉结合的配置更新】
SpringBoot实现http请求的异步长轮询【2】— AsyncHandlerInterceptor方式
hive-jdbc的connection如何设置socketTimeOut
Lambda表达式助力开发:
lambda之函数式数据处理(2)Stream流的API方法
JDK8中List转换为Map
Stream流式编程取代普通for循环
Stream流式编程取代双层for循环(flatMap的使用)
JDK8实现多条件排序
JDK8对List进行分组操作(stream的groupby)
JDK8的Stream实现统计(求最大值最小值求和等操作)
JDK8的列表中对象分割使用,分割的字符串
Spring篇
Spring基础篇(1)-事务
Spring基础篇(2)-重试-注解版
Spring基础篇(3)-单元测试
Spring基础篇(4)-AOP
Spring基础篇(5)-restful命名规则
Spring基础篇(6)-ServletServerHttpResponse(Spring对原生Servlet的包装)
Spring基础篇(7)-TransactionalEventListener实现事务的监听
Spring基础篇(8)-Spring构造函数注入—实现子类的动态注入
Spring—ObjectProvider更加宽泛的依赖注入
spEL—基础语法+注解中动态调用Bean方法
spEL表达式—让注解更加灵活(项目埋点实战)
spEL表达式注入漏洞以及预防措施
spEL表达式:集合处理操作
源码篇:
Spring源码篇(1)—RequestMappingHandlerMapping(Handler的注册)
Spring源码篇(2)—RequestMappingInfo与RequestCondition(Handler—映射)
工具篇:
Spring工具篇(1)- AntPathMatcher&&UrlPathHelper(针对URL进行处理)
动态读取篇:
Spring进阶篇(2)-ApplicationContextAware(动态获取容器中Bean)
Spring基础篇(9)-普通JAVA类动态读取@Value的值
进阶篇:
Spring进阶篇(1)-AutowireCapableBeanFactory(容器外的Bean使用依赖注入)
Spring进阶篇(3)-FactoryBean(创建复杂的Bean)
Spring进阶篇(4)- BeanDefinitionRegistryPostProcessor(操纵Bean对象)
Spring进阶篇(5)- BeanPostProcessor(Bean的后置处理器)
Spring进阶篇(6)- DelegatingFilterProxy(Spring管理Filter)
Spring进阶篇(7)- TransactionSynchronizationManager(事务监听)
Spring的事件监听—ApplicationContextEvent(实现异步监听)
Spring进阶篇(8)- RequestMappingHandlerMapping(Handler的注册)
Spring进阶篇(9)- MethodValidationPostProcessor 后置处理器的运用
Spring进阶篇(10)-BeanPostProcessor的注册时机
Spring精华篇(1)— druid配置导致循环依赖(自检异常)
SpringBoot篇
基础配置:
SpringBoot2.x基础篇—常用注解
SpringBoot2.x常用的ConditionalXX注解
SpringBoot2.x基础篇—Bean的生命周期方法(与容器耦合)
SpringBoot2.x基础篇—Bean的生命周期方法(实现Lifecycle接口)
SpringBoot2.x整合CORS解决跨域问题
SpringBoot2.x创建Starter项目
SpringBoot2.x 读取自定义的yml配置到各种数据结构中
定时监控:
SpringBoot2.x整合监控(1-actuator端点)
SpringBoot2.x整合监控(2-SpringBoot Admin)
SpringBoot集成钉钉报警sdk(解决Failed to introspect Class异常)
SpringBoot—实现n秒内出现x个异常报警
线程并发:
SpringBoot2.X整合线程池(ThreadPoolTaskExecutor)
SpringBoot2.X整合定时线程池(ScheduledThreadPoolExecutor)
Spring线程池—TaskDecorator线程的装饰(跨线程传递ThreadLocal的方案)
通信:
SpringBoot2.x集成HttpClient
Java中使用OkHttp进行Http通信
OkHttp调用微信小程序二维码接口照片是黑屏
SpringBoot2.x整合SMTP邮件服务(配置篇)
SpringBoot2.x整合SMTP邮件服务(使用篇)
Spring Boot 内嵌容器Undertow取代tomcat
安卓小程序http请求的header的key全部会转换成小写(Spring如何兼容)
记录一次排查okhttp3的unexpected end of stream on Connection异常(服务端长链接失效)
网络/数据库常见的超时设置(socketTimeOut、connectionTimeout...)
数据库篇:
Springboot2.x集成DataSource之druid连接池
SpringBoot2.x下durid配置导致循环依赖(自检异常)
Druid连接池的监控stat造成内存泄漏
Druid连接池在mysql的场景PS Cache是否需要开启?
SpringBoot2.x实现动态切换数据源(durid实现读写分离)
mybatis自定义拦截器(二)对象详解
mybaitis拦截器(3)— 打印调用者service的信息(获取到调用者的信息)
SpringBoot2.x—mybatis中的@MapperScan和@Mapper以及打印sql日志
SpringBoot整合Mybatis自定义拦截器不起作用解决方案!!!
mybatis的相同拦截器—切面执行的顺序
AspectJ类注解&方法注解的实现(@within)
mac下mysql如何开启binlog
JAVA实现mysql的binlog监听(mysql-binlog-connector)
mysql的查询json结构数据时出现Invalid JSON text异常
mybatis的使用BaseTypeHandler实现参数重写(入库前加解密、JSON序列化与反序列化)
缓存篇:
SpringBoot2.X整合Redis缓存
SpringBoot2.x中使用Redis的bitmap结构(工具类)
SpringBoot2.x—使用Redis的bitmap实现布隆过滤器(Guava中BF算法)
SpringBoot2.x—自定义Protostuff方式的RedisSerializer
SpringBoot2.x下Redis的Pipeline的使用
SpringBoot2.x—SpringCache(1)集成
SpringBoot2.x—SpringCache(2)使用
SpringBoot2.x—SpringCache(3) CacheManager源码
SpringBoot2.x—SpringCache(4)集成SpringCache保证Redis的数据一致性
SpringBoot2.x—SpringCache(5)使用多级缓存
SpringBoot2.x—SpringCache(6)缓存注意事项
LRU缓存—groovy提供的ConcurrentLinkedHashMap
将Cache操作模板化—本地缓存&&redis缓存的整合实现
SpringBoot2.x—代码实现多级缓存(Redis实现订阅发布模式)
将Cache操作模板化—论:如何实现key粒度失效时间的缓存
事务:
SpringBoot2.x实现动态切换数据源(实现读写分离)
SpringBoot2.x实现链式事务(分库事务)
SpringBoot事务失效(1)—dataSource配置问题
SpringBoot2.x整合Zookeeper(实现starter)
SpringBoot2.x自定义实现PooledObjectFactory对象池
JAVA自定义实现KeyedPoolableObjectFactory对象池(netty的channel对象池)
本地缓存
guavaCache本地缓存失效方案expireAfterWrites和refreshAfterWrites
SpringBoot2.x—方法参数/返回值的注解版校验(解决方法内事务不生效)
消息中间件
SpringBoot2.x集成RabbitMQ
SpringBoot2.x整合Rabbit(1)connection和channel的区别
SpringBoot2.x整合Rabbit(2)消费者消息获取--推模式+拉模式
SpringBoot2.x整合Rabbit(3)生产者如何确保消息的不丢失
SpringBoot2.x整合Rabbit(4)消费者消息获取及异常处理的实现
SpringBoot2.x下RabbitMQ的并发参数(concurrency和prefetch)
使用Redis实现分布式双端列表解决RabbitMq顺序消费
SpringBoot中RabbitMQ动态创建队列以及绑定关系(AmqpAdmin)
拦截机制:
SpringBoot2.x拦截器&&过滤器&&AOP
SpringBoot2.x整合Interceptor拦截器(1-定义拦截器)
【精】SpringBoot2.x将Filter过滤器添加到容器
【精】Filter 优先级规则(Order数字相同时规则)
SpringBoot2.x过滤器OncePerRequestFilter(Spring内置Filter)
SpringCloud-feign调用时使用RequestInterceptor设置request对象
Spring—RestTemplate设置Interceptor拦截器
SpringBoot整合Mybatis自定义拦截器不起作用解决方案!!!
SpringBoot全局异常处理器与Filter和HandlerInterceptor的关系
SpringBoot2.x 利用Filter打印pv日志
SpringBoot2.x中HandlerInterceptor与注解搭配使用(骚套路)
日志框架:
JAVA中的日志slf4j从0到1
SpringBoot2.x整合logback日志框架(1)
SpringBoot2.x整合logback日志框架(2)—layout和MDC机制
maven打jar包供其他项目使用(记一次logback引发的线上bug)
SpringBoot2下log4j2和logback实现异步打印
logback日志使用if...else逻辑判断
logback日志MessageConverter(脱敏敏感信息)
【log日志】根据自定义规则,打印出特定日志
SpringBoot2.x-自定义log.info()打印日志
SpringBoot2.x下使用log4j2打印JSON日志(支持ELK机制)
性能优化— log.debug()日志打印
log.error()输出的异常栈没有“关键”信息解决方案
NoClassDefFoundError: Could not initialize class org.slf4j.MDC解决方案
SpringBoot2.x+Sentry实现跨线程的异常汇总
后置处理器实战运用
SpringBoot2.x—方法参数/返回值的注解版校验
SpringMVC相关
SpringBoot2.x—定制HandlerMapping映射规则
MongoDB
SpringBoot2.x集成Mongodb
SpringBoot2.x下的Spring Data Mongo源码二次开发(1-动态切库)
记一次mongodb的生产事故—项目线程数彪升
文件存储:
SpringBoot2.x整合(cos,oss,本地挂载盘)文件存储的小而美的项目实现
Spring AOP源码分析
SpringBoot2.x下“AOP自动代理”实战—注解版日志打印
SpringBoot2.x下“后置处理器”完成AOP代理实战—注解版日志打印
SpringBoot2.x下Advice和MethodInterceptor的区别
SpringAOP联盟(9)-自动代理器的注册(EnableXxx的作用)
validate校验
JAVA基础篇(4)-Validation验证框架
SpringBoot2.x—方法参数/返回值的注解版校验
JAVA基础篇(15)—自定义“通用型枚举参数”校验注解
SpringBoot2.x—方法参数/返回值的注解版校验(解决方法内事务不生效)
SpringBoot项目启动时校验@ConfigurationProperties注解(对于内部类的支持)
Spring进阶篇(9)- MethodValidationPostProcessor 后置处理器的运用
项目实战—@Valid+自定义校验注解+全局异常处理器实现敏感词过滤
Validation验证框架—动态的返回所有字段的异常信息
elasticSearch
Es封装RestHighLevelClient和BulkProcessor的工具类
Es7.x使用RestHighLevelClient的3种分页实现
Es7.x使用RestHighLevelClient进行增删改和批量操作
Es7.x使用RestHighLevelClient进行查询操作
apm框架
skywalking(1)MAC版本安装
skywalking(2)自定义插件【okhttp插件-监控cos的sdk调用】
prometheus:
SpringBoot2.x整合Prometheus收集RestTemplate/feign远程调用信息
设计思路
设计模式导致分层—如何实现参数传递(文末附彩蛋)?
如何托管ThreadLocal的声明周期来防止内存泄露
线程池系列(6)如何统一管理旧项目中的线程池
Jackson父子类多态处理(注解实现)
lambda中Function+Map—实现轻量级的策略模式
Java项目开发规范(1)—方法命名规范
推荐github的项目:
分布式高效ID生产黑科技(sequence)
Hutool是一个小而全的Java工具类库
proto对象与Java对象的转换工具类
mysql专栏
mysql的replace语句先删除在插入,binlog是如何监听的?
启动耗时优化
减少SpringBoot项目启动耗时(1)— 缩小扫描范围
减少SpringBoot项目启动耗时(2)— 公司实战篇
减少项目的编译耗时—maven编译速度优化(集成idea中)