好文推荐
摘要
本文会不断加入一些读到的好文,作为一个积累。
程序员健康
思想
- 阿里技术专家:优秀工程师必备的三大思维
主要讲了技术人员应当具有的多维度思维:- 产品思维(用户角度思考->易用性->深刻理解产品特性)
- 技术思维(需求精确理解, 性能和场景, 新技术敏感和先进性)
- 工程思维(流程控制->产品质量把控->多手段控制质量)
- 持续集成和持续交付
- 闭环思维
- 网易范欣欣:学习方法论
重要文档
1 Java理论
1.1 基础理论
-
java理解int转float为何会可能精度丢失的问题
int与float,都是32位,但是内存结构既存储结构是不一样的,float只能有24位来确定精度,而int是32位。其他类型也如此进行理解即可。两种“精度丢失”
- 一个是有效数字丢失,int转float有可能丢失末尾的几位有效数字,这个是允许的,既然用户写了这个代码,说明他接受这种小范围误差
- 另一个是目标类型可能完全无法表示数据,比如float存放一个1e30,转为int是无法表示的,因为int最多21亿多,这个就丢得没影了,所以会告诉你有可能出问题
1.2 Java Agent
- Java Agent基础概念
- Java Agent简单例子1
- Java Agent简单例子2
- Java Agent详细例子1
- Java Agent详细例子2,图文
- Java Agent+SpringLoaded
- Java Agent结合javassist或asm demo详解
ASM可参考ASM详解
1.3 容器
- Java-自己实现阻塞队列
- Java-ConcurrentHashMap
- Java-WeakHashMap
- Java-PriorityBlockingQueue
- Java-SynchronousQueue
- Java-阻塞和非阻塞队列总结
- 大型HashMap评估:JDK、FastUtil、Goldman Sachs、HPPC、Koloboke与Trove
- JDK 1.8 中 HashMap 扩容
- JDK1.8 HashMap 扩容机制
1.4 多线程和高并发
1.4.1 多线程基础概念
1.4.2 线程池
1.4.3 锁
- Java-并发-关于锁的一切
- Java-并发-CAS
- Java-多线程-wait/notify
- Java-并发-锁-synchronized
- Java-并发-锁-synchronized之对象锁和类锁
- Java-并发-Condition
- Java-并发-锁-ReentrantLock
- Java-并发-锁-ReadWriteLock
- Java-并发-锁-LockSupport
- LockFree思想
1.4.4 Reactor
1.5 反射
1.6 底层原理
1.6.1 总论
1.6.2 重要概念
1.6.3 编译
1.6.4 加载和初始化
1.6.5 GC
1.6.6 监控
1.6.7 内存模型
1.7 动态代理
1.8 注解
1.9 其他重要事项
1.9.1 UNSAFE
1.9.2 调试
1.9.3 源码阅读
2 Java框架
2.1 Spring
2.1.1 Spring IOC和AOP
- Spring-IOC
- 仿照 Spring 实现简单的 IOC 和 AOP - 下篇
- 一步步重构容器实现Spring框架——从一个简单的容器开始
- Spring的AOP逐层深入——AOP的基本原理(六)
- Spring的AOP逐层深入——采用注解完成AOP(七)
- 零基础带你看Spring源码——IOC控制反转
- 从源码入手,一文带你读懂Spring AOP面向切面编程
- 《Spring3.X企业应用开发实战》学习笔记–IoC和AOP,原理和例子
2.1.2 @Transactional
-
Spring对于事务的控制@Transactional注解详解
对于一些事务不生效情况的讨论 -
Spring之@Transactional注解原理以及走过的坑
简洁易懂,但有些地方有错误 -
@Transactional
大而全 -
Spring Boot 中使用 @Transactional 注解配置事务管理
SpringBoot用户看过来,高赞文章 -
只读事务(@Transactional(readOnly = true))
从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据)。应用场合如下:- 如果你一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性;
- 如果你一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持。
- 【注意是一次执行多次查询来统计某些信息,这时为了保证数据整体的一致性,要用只读事务】
- 在将事务设置成只读后,相当于将数据库设置成只读数据库,此时若要进行写的操作,会出现错误
2.1.3 加载顺序
2.1.4 拦截器与过滤器
2.1.5 面试题
2.1.6 新特性
2.2 Springboot
2.2.1 原理
2.2.2 手册
2.2.3 配置
- Spring Boot配置文件详解-带目录
原文https://www.cnblogs.com/itdragon/p/8686554.html - SpringBoot基础篇配置信息之如何读取配置信息
- springBoot 获取配置的方式-简洁明了
2.2.4 日志
2.2.5 部署
2.3 SpringMVC
2.4 Mybatis
2.5 连接池
2.5.1 Druid
2.5.2 Hikari
SpringBoot 2.0 默认连接池就是Hikari,hikariCP在并发较高的情况下,性能基本上没有下降
SpringBoot项目开发(五):HikariCP数据库连接池
数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
2.6 Spring Reactor
2.7 缓存
2.7.1 Guava Cache
2.7.2 Caffeine
2.8 JUnit
2.9 Antlr
2.10 Guice
2.11 Ehcache
3 大数据
4 设计模式
5 算法
-
漫谈递归转非递归
简单来说,递归思想就是:把问题分解成规模更小,但和原问题有着相同解法的问题。典型的问题有汉诺塔问题,斐波那契数列,二分查找问题,快速排序问题等。PS:其实像我们常见的分治法和动态规划法都是递归思想的经典应用。既然的递归的思想是把问题分解成规模更小但和原问题有着相同解法的问题,那是不是所有具有这样特性的问题都能用递归来解决呢?答案是否定的。除了这个特性,能用递归解决的问题还必须具有一个特性:存在一种简单情境,能让递归在简单情境下退出,也就是要有一个递归出口。总结一下就是,能用递归解决的问题,必须满足以下两个条件:
- 一个问题能够分解成规模更小,且与原问题有着相同解的问题;
- 存在一个能让递归调用退出的简单出口。
6 数据结构
7 数据库
7.1 通用概念
7.2 调优
7.3 MySql
7.4 PalDB
7.5 SQlite
一个轻量级别数据库
8 微服务和RPC
8.1 Dubbo
8.2 Service Mesh
9 序列化
10 工程管理
10.1 Git
10.2 SourceTree
10.3 Maven
- Maven学习-scope
- Lombok介绍及使用方法
一款注解辅助小工具