各类资讯汇总
写在前面(声明)
声明:这里的各个内容基本都是平时看到的一些觉得有用的文章资讯的链接汇总,里面的内容都不是我的创作!
做个快乐的搬运工!
常用框架
- 高效 Java 人必须知道的十大框架
- Spring MVC & Boot & Cloud 技术教程汇总
Netty
- 看完这篇还不清楚Netty的内存管理,那我就哭了!
- Netty 实现心跳机制与断线重连
- [拜托!面试请不要再问我 Netty 底层架构原理!](https://mp.weixin.qq.com/s/d5_RbMuw5ADcBhIMOy_tGQ)
Spring
- Spring AOP 的实现原理
- Spring AOP 的实现机制
- 手把手教你用 Java 实现 AOP
- 你必须要懂的 Spring:Aop
- 深入分析 Spring 框架中 AOP 与动态代理的整合原理
- Spring AOP是什么?你都拿它做什么?
- Spring中AOP相关源码解析
- springAOP底层源码深度解析
- 学完 Aop,连动态代理的原理都不懂?
- 我们为什么要用IoC和AOP
- spring 依赖注入时,什么时候会创建代理类
- Spring 常犯的十大错误
- Spring 中那些让你爱不释手的代码技巧
SpringBoot
原理
- Spring Boot启动原理解析
- SpringBoot 究竟是如何跑起来的?
- 这样深度Spring Boot的源码解析,看完帮你立即提升一个台阶!
- Spring Boot 2.x 新特性总结及迁移指南
- Spring Boot 配置优先级顺序
- ### 实践
- SpringBoot 整合长连接心跳机制
- 给你一份超详细 Spring Boot 知识清单
- 两年摸爬滚打 Spring Boot,总结了这 16 条最佳实践
- springboot+dubbo+redis+RabbitMQ 项目整合实例【附完整源码】
- springboot多数据源读写分离和主库数据源service层事务控制
- Springboot中logback配置日志按天分割
- SpringBoot项目单元测试
- SpringBoot项目中,拦截器获取Post方法的请求body
- 基于springboot的RestTemplate、okhttp和HttpClient对比
- SpringBoot中建立WebSocket连接(STOMP)
- websocket实例问题
- SpringBoot2.0集成WebSocket,实现后台向前端推送信息 备注:使用CopyOnWriteArraySet存储连接对象不合理,因为该类只适合读多写少的场景
- springboot2.0+websocket集成【群发消息+单对单】
- 为什么很多SpringBoot开发者放弃了Tomcat,选择了Undertow?
- 惊呆了,Spring Boot 竟然这么耗内存!
- Spring Boot 如何使用 Redis 进行 API 防刷限流?
- Spring Boot 接口幂等性实现的 4 种方案!
- 还在使用kill -9 pid结束spring boot项目吗?那你已经落伍了!
- Spring Boot bootstrap.yml外置
- SpringBoot数据脱敏
- SpringBoot 我随手封装了一个万能的导出excel工具,传什么都能导出
ORM框架
- 几个数据持久化框架Hibernate、JPA、Mybatis、JOOQ和JDBC Template的比较
Mybatis
- MyBatis 的执行流程,写得太好了!
- 超全MyBatis动态代理详解!(绝对干货)
- 如何使用通用Mapper
- Spring Boot Mybatis 搞反向工程,太方便咯。。
- spring boot(六):如何优雅的使用mybatis
- SpringBoot 下 mybatis 的缓存
- springboot mybatis redis 二级缓存
- 备注: 1. MyBatis默认开启一级缓存关闭二级缓存; 2. MyBatis一级缓存的生命周期和SqlSession一致,在同一个Session中才会有效果; 3. 因为MyBatis缓存都是基于本地的,所以分布式使用Redis、Memcached等分布式缓存更加合适;
- MyBatis 批量插入的 3 种方式!还有谁不会?
- 你还在用分页?试试 MyBatis 流式查询,真心强大!
- SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页
- SpringBoot+Mybatis+druid(基于maven)
- 扔掉工具类!MyBatis 一个简单配置搞定加密、解密,不能太方便了~!
- MyBatis-Plus 不支持联表?一个依赖轻松搞定
- 我的mybatis-plus用法,被全公司同事开始悄悄模仿了!
- MybatisPlus,用起来不要太方便!
- Mybatis-Plus官方分库分表神器,一个依赖轻松搞定!
- 本以为用的MyBatis框架就万无一失了,没想到还是被黑客注入了,我真的无语了!
- 为什么老外不愿意用 MyBatis?
- 一条失去条件的动态 SQL,到手的年终奖飞了
- 一起来看看 Mybatis 中使用的 9 种设计模式!
- MyBatis框架的精华
Hibernate
- Hibernate 缓存机制(N+1问题)详解
- 备注: 1. 默认开启一级缓存,一级缓存作用范围也是同一个Session,和Mybatis类似;
JPA
- 选Spring Data JPA,还是MyBatis?
微服务
- 阿里巴巴为什么不用 ZooKeeper 做服务发现?
Dubbo
- Dubbo负载均衡、容错、高可用
- Dubbo性能调优参数及原理
- 看了这篇Dubbo RPC面试题,让天下没有难面的面试题!
- Dubbo面试18问!这些你都会吗?
- 一文看懂 Dubbo 的集成与使用,很强!
SpringCloud
- SpringCloud中文网
- 史上最简单的 SpringCloud 教程 | 终章
- Spring Cloud 系列文章
- SpringCloud微服务架构升级总结
- Spring Cloud之eureka配置——eureka.instance
- Spring Cloud中,Eureka常见问题总结
- 中小企业对Spring Cloud微服务架构实践经验总结的一些思考!
- Spring Cloud Feign常见问题
- 微服务网关 Spring Cloud Gateway
- spring cloud gateway之服务注册与发现
- Spring Cloud Gateway-过滤器工厂详解(GatewayFilter Factories)
- Spring Cloud Gateway-路由谓词工厂详解(Route Predicate Factories)
- Spring Cloud Stream知识点盘点
- Spring Cloud Stream 错误处理详解
- Spring Cloud Stream实现消息过滤消费
- Feign调用丢失Header的解决方案
- 【性能优化之道】每秒上万并发下的Spring Cloud参数优化实战
Dubbo Spring Cloud
- Dubbo Spring Cloud 重塑微服务治理
- Gateway网关使用不规范,同事加班泪两行~
注解
- Spring中的18个注解,你会几个?
- @RequestMapping 用法详解之地址映射
- springboot注解@NotNull,@NotBlank,@Valid自动判定空值
- 为什么 @Value 可以获取配置中心的值?
- spring自带的定时任务功能@EnableScheduling
注意:
1. 默认的 ConcurrentTaskScheduler 计划执行器采用Executors.newSingleThreadScheduledExecutor() 实现单线程的执行器,有些场景会导致单线程任务丢失。
2. 关于分布式情况下,重复执行的问题
3. 服务器宕机/任务执行失败,丢失的任务如何补偿?
@Scheduled 相关的一些注意事项:
1.默认情况下,Scheduled线程池为单线程池,如果工程中有多个定时任务,此时如果有某一个任务阻塞了,那么会导致其他定时任务也没法运行;针对这种情况可以设置Scheduled线程池为非单线程线程池;例如:@Configuration @EnableScheduling public class ScheduleConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(taskExecutor()); } @Bean(destroyMethod="shutdown") public Executor taskExecutor() { return Executors.newScheduledThreadPool(10); } }
- @Scheduled中使用cron表达式模式,项目启动时如果没有到达触发条件,不会执行;
如果系统时间产生变化等,可能会导致定时任务失效;这是因为cron表达式模式时,是生成的绝对时间来触发定时任务的;例如此时yyyMMdd 9:01,定时任务是yyyMMdd 9:30触发,如果修改系统时间为yyyMMdd 9:31后,那么这个定时任务就没法触发了;
针对以上情况,可以考虑使用相对时间模式来解决这个问题; - @Scheduled使用相对时间模式,在项目启动时就会执行一次;
fixedRate:每隔一定时间执行一次,单位ms,是不受上一次任务完成结束时间影响的;
fixedDelay:上一次任务结束后,再开始计算相对间隔时间,单位ms;
- @Scheduled中使用cron表达式模式,项目启动时如果没有到达触发条件,不会执行;