JAVA && Spring && SpringBoot2.x学习目录

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基础篇27:集合求交集、并集、差集、补集、分片

JAVA基础篇—优雅的校验:Preconditions方式实现
Java好用的http请求框架

【工具类】BigDecimal常用功能

设计模式那点事-万物皆可“建造者”(2)-利用lamda实现流式的校验

高并发场景线程安全的List
SpringBoot中使用Jackson自定义注解完成参数的个性化处理

Spring的getRequestURI与getRequestURL方法导致安全风险

JAVA中实现数据压缩所有方式(适用于通信时数据压缩)
PositiveAtomicCounter(正数原子递增器-用于路由的轮询分区)

Java并发(13)— 各种Java对象占用内存大小

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异常。

Jackson父子类多态处理(注解实现)

巧用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解析OFD/PDF格式文件(电子发票的校验)

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参数

SpringBoot生命周期回调方法的原理

ContentCachingRequestWrapper实现Request对象的可重复读(引发OOM)

SpringBoot2.x对http请求accept的消息转换处理

一次生产事故引发的JDK序列化思考
FastJson出现{"$ref":"$[0]"}解决方案

记一次生产事故—JIT编译与CPU使用率飙升

RestTemplate远程调用:

RestTemplate设置Interceptor拦截器

SpringBoot2.0.x中RestTemplate调用三方接口出现汉字乱码(消息转换器)

SpringBoot的HttpMessageConverter使用(1)RestTemplate中的应用

RestTemplate远程调用—复杂API极简使用(面向Map组装)
Spring—RestTemplate设置Interceptor拦截器

SpringBoot2.x下更加灵活的RestTemplate(定制化第三方接口的template)
RestTemplate如何支持泛型对象输出?

SpringBoot使用Feign调用三方接口

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

【excel】easyexcel流式导出大批量数据

Lambda表达式助力开发:

lambda之函数式数据处理(2)Stream流的API方法
JDK8中List转换为Map
Stream流式编程取代普通for循环
Stream流式编程取代双层for循环(flatMap的使用)
JDK8实现多条件排序
JDK8对List进行分组操作(stream的groupby)
JDK8的Stream实现统计(求最大值最小值求和等操作)
JDK8的列表中对象分割使用,分割的字符串

JDK8中谨慎使用peek去取代map/forEach

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更加宽泛的依赖注入

Spring重试(编程式)源码+应用

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实现读写分离)

SpringBoot整合Mybatis+druid快速开发

mybatis自定义拦截器(一)基本使用

mybatis自定义拦截器(二)对象详解
mybaitis拦截器(3)— 打印调用者service的信息(获取到调用者的信息)

SpringBoot2.x—mybatis中的@MapperScan和@Mapper以及打印sql日志

SpringBoot整合Mybatis自定义拦截器不起作用解决方案!!!

mybatis的相同拦截器—切面执行的顺序
AspectJ类注解&方法注解的实现(@within)

JAVA动态读取mysql表的字段名

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的使用

Jedis源码分析
JedisCluster源码分析

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)缓存注意事项

google的Guava Cache的使用

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的作用)

AOP-@EnableRetry实现的原理(源码存在瑕疵)

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中)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容