好文推荐

好文推荐

摘要

本文会不断加入一些读到的好文,作为一个积累。

程序员健康

  • 程序员,我很担心你
  • 程序员如何保护自己的眼睛

思想

  • 阿里技术专家:优秀工程师必备的三大思维
    主要讲了技术人员应当具有的多维度思维:
    • 产品思维(用户角度思考->易用性->深刻理解产品特性)
    • 技术思维(需求精确理解, 性能和场景, 新技术敏感和先进性)
    • 工程思维(流程控制->产品质量把控->多手段控制质量)
  • 持续集成和持续交付
  • 闭环思维
  • 网易范欣欣:学习方法论

重要文档

  • java8新特性(简述十大新特性)
  • Java 9~Java11的七大新特性
  • Java8 API 文档
  • Github-P3C-Java开发手册(嵩山版)
  • 阿里云-Java开发手册发布页

1 Java理论

1.1 基础理论

  • java理解int转float为何会可能精度丢失的问题
    好文推荐_第1张图片
    int与float,都是32位,但是内存结构既存储结构是不一样的,float只能有24位来确定精度,而int是32位。其他类型也如此进行理解即可。

    两种“精度丢失”

    • 一个是有效数字丢失,int转float有可能丢失末尾的几位有效数字,这个是允许的,既然用户写了这个代码,说明他接受这种小范围误差
    • 另一个是目标类型可能完全无法表示数据,比如float存放一个1e30,转为int是无法表示的,因为int最多21亿多,这个就丢得没影了,所以会告诉你有可能出问题
  • 为什么Java StringBuilder的效率要比String高?

  • Java-NaN和INFINITY.

  • Java-HashCode

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 多线程基础概念

  • Java-线程安全
  • Java-多线程-ThreadLocal全解析
  • 当我们说线程安全时,到底在说什么

1.4.2 线程池

  • Java-并发-线程池

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

  • Reactor模式是什么
  • 高性能Server—Reactor模型

1.5 反射

  • Java-Class类
  • Java-反射

1.6 底层原理

1.6.1 总论

  • Java-JVM-知识总结
  • Java-JVM-分类

1.6.2 重要概念

  • Java-JVM-逃逸分析
  • Java-JVM-安全点SafePoint

1.6.3 编译

  • Java-底层原理-编译原理
  • Java-底层原理-javac源码笔记

1.6.4 加载和初始化

  • Java-底层原理-类加载机制
  • Java-底层原理-clinit和init

1.6.5 GC

  • Java-JVM-GC
  • Java-JVM-ZGC

1.6.6 监控

  • Java-JVM-监控诊断工具

1.6.7 内存模型

  • Java-内存模型-数组在内存中的存放
  • Java-内存模型-引用总结

1.7 动态代理

  • Java-动态代理

1.8 注解

  • Java-注解

1.9 其他重要事项

1.9.1 UNSAFE

  • Java-Unsafe

1.9.2 调试

  • Java-tomcat远程调试
  • Debug调试时 Object@xxx表示什么

1.9.3 源码阅读

  • OpenJDK 源码的目录结构

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用户看过来,高赞文章

  • spring 事务-使用@Transactional 注解(事务隔离级别)
    简洁易懂
    好文推荐_第2张图片

  • Spring 注解@Transactional readOnly=true

  • 只读事务(@Transactional(readOnly = true))
    从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据)。应用场合如下:

    • 如果你一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性;
    • 如果你一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持。
    • 【注意是一次执行多次查询来统计某些信息,这时为了保证数据整体的一致性,要用只读事务】
    • 在将事务设置成只读后,相当于将数据库设置成只读数据库,此时若要进行写的操作,会出现错误
  • Spring的@Transactional(readOnly=true)注解,对其效果进行测试

2.1.3 加载顺序

  • Spring-Bean加载顺序控制

2.1.4 拦截器与过滤器

  • Spring-拦截器与过滤器

2.1.5 面试题

  • Spring循环依赖的三种方式

2.1.6 新特性

  • 为什么Spring5缓存放弃了使用Guava Cache而转用Caffeine

2.2 Springboot

  • Springboot综合学习笔记

2.2.1 原理

  • Spring循环依赖的三种方式
  • Springboot之启动原理解析及源码阅读
  • SpringBoot 使用外部Tomcat方法及启动原理

2.2.2 手册

  • Spring-Boot干货系列
  • Spring Boot 官方文档学习(一)入门及使用
  • Spring 4 官方文档学习(五)核心技术之SpEL

2.2.3 配置

  • Spring Boot配置文件详解-带目录
    原文https://www.cnblogs.com/itdragon/p/8686554.html
  • SpringBoot基础篇配置信息之如何读取配置信息
  • springBoot 获取配置的方式-简洁明了

2.2.4 日志

  • 默认日志logback配置解析
  • Spring Boot的日志详解

2.2.5 部署

  • SpringBoot打war包全程以及各种问题解决
  • Springboot打war包遇到的那些坑
  • SpringBoot之War和Jar包部署-基于SpringBoot2.0.2版本

2.3 SpringMVC

  • Spring-SpringMVC-原理
  • Spring-SpringMVC-全局异常处理

2.4 Mybatis

Mybatis-好文推荐

2.5 连接池

2.5.1 Druid

2.5.2 Hikari

SpringBoot 2.0 默认连接池就是Hikari,hikariCP在并发较高的情况下,性能基本上没有下降
SpringBoot项目开发(五):HikariCP数据库连接池

HikariCP连接池及其在springboot中的配置

数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)

springBoot中使用Hikari连接池(yml)

数据库连接池 HikariCP 使用实例及配置参数详解

Hikari数据源介绍

2.6 Spring Reactor

  • Spring Reactor 入门与实践

2.7 缓存

2.7.1 Guava Cache

  • Guava-Cache的使用
  • Guava Cache实现原理系列文章

2.7.2 Caffeine

  • 本地缓存高性能之王Caffeine
  • 为什么Spring5缓存放弃了使用Guava Cache而转用Caffeine

2.8 JUnit

  • Junit常用注解

2.9 Antlr

  • Antlr4学习1-基本概念和入门示例
  • Antlr4学习2-Java开发

2.10 Guice

  • Guice 学习(八)AOP (面向切面的编程)
  • Guice:轻量级IOC/DI 容器
  • java轻量级IOC框架Guice

2.11 Ehcache

  • Ehcache学习

3 大数据

  • 大数据好文推荐

4 设计模式

  • Java 设计模式

5 算法

  • LeetCode

  • 算法-String转int

  • 算法学习-LCS 最长公共子序列

  • 算法学习-PageRank

  • 漫谈递归转非递归
    简单来说,递归思想就是:把问题分解成规模更小,但和原问题有着相同解法的问题。典型的问题有汉诺塔问题,斐波那契数列,二分查找问题,快速排序问题等。PS:其实像我们常见的分治法和动态规划法都是递归思想的经典应用。

    既然的递归的思想是把问题分解成规模更小但和原问题有着相同解法的问题,那是不是所有具有这样特性的问题都能用递归来解决呢?答案是否定的。除了这个特性,能用递归解决的问题还必须具有一个特性:存在一种简单情境,能让递归在简单情境下退出,也就是要有一个递归出口。总结一下就是,能用递归解决的问题,必须满足以下两个条件:

    • 一个问题能够分解成规模更小,且与原问题有着相同解的问题;
    • 存在一个能让递归调用退出的简单出口。
  • 十大经典排序算法

  • HyperLogLog算法详解

6 数据结构

  • 数据结构-常用树总结
  • 数据结构-LSM-Tree
  • 数据结构-跳表
  • 数据结构-Roaring Bitmaps
  • 数据结构-散列表
  • 数据结构-BloomFilter布隆过滤器

7 数据库

7.1 通用概念

  • 关于PreparedStatement和Statement
  • 谓词下推
  • 数据库-异地多活多中心概念

7.2 调优

  • 有赞-性能优化之分页查询

7.3 MySql

  • Mysql好文推荐
  • MySQL索引原理及慢查询优化

7.4 PalDB

  • PalDB 介绍
  • PalDB 详解
  • LinkedIn开源PalDB,一个只读的键值存储数据库
  • paldb原理分析
  • Github-PalDB

7.5 SQlite

一个轻量级别数据库

8 微服务和RPC

8.1 Dubbo

  • 初识Dubbo

8.2 Service Mesh

  • 下一代的微服务架构基础是ServiceMesh?

9 序列化

  • 大型HashMap评估:JDK、FastUtil、Goldman Sachs、HPPC、Koloboke与Trove

10 工程管理

10.1 Git

  • Github-搜索技巧
  • Git 高级玩法
  • 在IDEA上Git的入门使用(IDEA+Git)

10.2 SourceTree

  • SourceTree 教程文档(进阶知识)

10.3 Maven

  • Maven学习-scope
  • Lombok介绍及使用方法
    一款注解辅助小工具

11 技术选型

  • 开源OLAP引擎测评报告(SparkSql、Presto、Impala、HAWQ、ClickHouse、GreenPlum)
    好文推荐_第3张图片

12 网络

  • 四种常见的 POST 提交数据方式
  • HTTP中GET和POST对比
  • 一个 TCP 连接上面能发多少个 HTTP 请求?
  • TCP协议固定窗口和滑动窗口
  • Nginx学习

13 架构

13.1 综合

  • 架构-好文推荐

13.2 高并发

  • 高并发方案一览

13.3 异地多活多中心

  • 异地多活多中心概念

14 Linux

  • Linux-好文推荐

15 机器学习

  • 机器学习好文推荐

16 Python

  • Python-迷路剑客

17 Scala

  • Scala-迷路剑客

18互联网

  • B2B, B2C, C2C, O2O概念

19 其他技术和工具

19.1 正则表达式

  • 正则表达式30分钟入门教程

19.2 Idea

  • idea-常用快捷键

20 程序员考证

  • 程序员考证

21 面试

  • 场景题目
  • 面试整理-Java综合高级篇
  • 2019最新《BAT Java必考面试题集》
  • 挑战10个最难回答的Java面试题

22 云计算

  • 云计算好文推荐

23 开源

  • 我是如何成为Apache Kudu committer & PMC的?
    小米-彭州周

DevOPS

  • 蓝绿部署、A/B 测试以及灰度发布
  • 蓝绿发布、滚动发布、灰度发布等部署方案对比与总结
  • 什么是蓝绿部署、滚动发布和灰度发布?
  • 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布

0xFF 参考文档

Mybatis动态SQL之trim标签

你可能感兴趣的:(思想,经验分享)