[TOC]
- HashMap源码深度解析[download]
美团技术团队
-
***CompletableFuture使用大全,简单易懂(分类、消化学习)
分类记忆规则:
以Async结尾的方法,都是异步方法,对应的没有Async则是同步方法,一般都是一个异步方法对应一个同步方法。
以Async后缀结尾的方法,都有两个重载的方法,一个是使用内置的forkjoin线程池,一种是使用自定义线程池
以run开头的方法,其入口参数一定是无参的,并且没有返回值,类似于执行Runnable方法。
以supply开头的方法,入口也是没有参数的,但是有返回值
以Accept开头或者结尾的方法,入口参数是有参数,但是没有返回值
以Apply开头或者结尾的方法,入口有参数,有返回值
带有either后缀的方法,表示谁先完成就消费谁
作者:愤怒的酸菜鱼 链接:https://juejin.cn/post/6844904195162636295 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
任务取消
StampedLocks vs ReadWriteLocks and Synchronized
- 两篇 AQS 原理和相关源码分析的文章:
阻塞队列的实现原理:通知模式
实现方式举例:lock锁的多条件(condition)阻塞控制
Java中实现等待/通知又有两种类型:
- 一种是基于Object类中的wait()/notify()方法来实现
- 另一种是基于AQS中Condition类的await()/signal()方法来实现
CAS是一条CPU的原子指令(cmpxchg指令),不会造成所谓的数据不一致问题,Unsafe提供的CAS方法(如compareAndSwapXXX)底层实现即为CPU指令cmpxchg。
内存泄漏
-
笔记:
- 联想学习:由慢查询的现象发散思维引申思考底层原理
- Explain关键点:select_type、rows。
- select_type:是否走索引
- rows:每一步的结果必须都是无限向最终结果数量靠拢
- ClickHouse内核分析-MergeTree的存储结构和查询加速
- 《ClickHouse原理解析与应用实践》第九章第十五节(9.15 查看SQL执行计划)
- 查询语句:
clickhouse-client -h ch7.nauu.com --send_logs_level=trace <<< 'SELECT * FROM hits_v1' > /dev/null - 借助后台的服务日志即可分析
- 查询语句:
clickhouse-client --send_logs_level=trace <<< 'select * from table' > /dev/null
clickhouse-client --send_logs_level=trace <<< 'select index_col from table' > /dev/null
clickhouse-client --send_logs_level=trace <<< " select index_col from table where index_col='xxx' " > /dev/null- Spring多数据源、动态数据源源码解析
- 使用dynamic-datasource-spring-boot-starter做多数据源及源码分析
- AbstractRoutingDataSource动态数据源切换
-
- 个人认为并不能理解为缓存,缓存的最终目的是为了解决性能,而这三个map的目的更多的是标识一个bean的创建状态。比如在单例池中的表示bean已经完整的被创建,在单例工厂中的表示bean正在被创建,在early中的表示已经被创建但不完整
- Spring内部维护了三个Map,也就是我们通常说的三级缓存。在Spring的
DefaultSingletonBeanRegistry类中,你会赫然发现类上方挂着这三个Map:- singletonObjects 一级缓存,俗称“单例池”“容器”,缓存创建完成单例Bean的地方。
- 用于保存实例化、注入、初始化完成的bean实例
- earlySingletonObjects 二级缓存,映射Bean的早期引用,也就是说在这个Map里的Bean不是完整的,甚至还不能称之为“Bean”,只是一个Instance.
- 用于保存实例化完成的bean实例
- singletonFactories 三级缓存,映射创建Bean的原始工厂
- 用于保存bean创建工厂,以便于后面扩展有机会创建代理对象
- singletonObjects 一级缓存,俗称“单例池”“容器”,缓存创建完成单例Bean的地方。
Mason技术记录
版本对应
异同
- ***硬核Redis
实际应用
// 流处理:Stream<T> sorted(Comparator<? super T> comparator)
list.stream()
.sorted(Comparator.comparing(DeskInfo::getUpdateTime).reversed())
.collect(Collectors.toList());
//根据源文本字数倒叙
List<DocErrorSet> sortErrorSet = docErrorSetList.stream()
.sorted(Comparator.comparing(e -> e.getTagetText().length(),Comparator.reverseOrder()))
.collect(Collectors.toList());
// 直接排序:list.sort(Comparator<? super E> c)
list.sort(Comparator.comparingInt(String::length).reversed());
// 太繁琐
List<DocErrorSet> collect = list.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(o -> o.getTagetText()))), ArrayList::new));-
***常用 Git 命令清单
-
***Git常用命令及方法大全
-
彻底清除git所有历史提交记录使其为“新”库(注意:仅远程的看不到)
随机数
开发效率
-
- MobaXterm
- FinalShell
- 红黑树[download]
-
[公有云API的认证方式:AK/SK 简介](公有云API的认证方式:AK/SK 简介)
- TLog-轻量级分布式日志标志追踪
1、Java 基础、线程池、JVM
Java 应用线上问题排查思路、常用工具小结:Java 应用线上问题排查思路、常用工具小结 | Richard's Code Studio 详解一次由读写锁引起的内存泄漏 :高并发服务优化篇:详解一次由读写锁引起的内存泄漏 一次 Java 线程池误用引发的血案(OOM)和总结 - 文西(字节架构师):一次Java线程池误用引发的血案和总结 - 知乎 一次线程池引发的线上故障分析:一次线程池引发的线上故障分析 线程池运用不当的一次线上事故:线程池运用不当的一次线上事故 | HeapDump性能社区 Java 中 9 种常见的 CMS GC 问题分析与解决: Java中9种常见的CMS GC问题分析与解决 - 美团技术团队
2、MySQL 死锁、事务、编码、慢查询 MySQL死锁系列-线上死锁问题排查思路:MySQL死锁系列-线上死锁问题排查思路 - 云 社区 - 腾讯云 一个诡异的 MySQL 查询超时问题,居然隐藏着存在了两年的 BUG:一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG - CoderW喜欢写博客 - 博客... MySQL 可重复读,差点就让我背上了一个 P0 事故!:MySQL 可重复读,差点就让我背上了一个 P0 事故! 慢查询引发的车祸现场,案例分析!:慢查询引发的车祸现场,案例分析! 为什么不建议在MySQL中使用UTF-8?: 为什么不建议在MySQL中使用 utf8 ?
3、Redis 高可用、高性能、分布式锁 Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文:Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文 如何从0到1构建一个稳定、高性能的Redis集群?(附16张图解):如何从0到1构建一个稳定、高性能的Redis集群?(附16张图解) 颠覆认知——Redis会遇到的15个「坑」,你踩过几个?:颠覆认知——Redis会遇到的15个「坑」,你踩过几个? Redis——由分布式锁造成的重大事故:Redis——由分布式锁造成的重大事故 - 掘金
4、Kafka 一次 Kafka 消息堆积问题排查:一次 kafka 消息堆积问题排查 记一次 Kafka 重启失败问题排查:记一次 Kafka 重启失败问题排查 记一次 Kafka 集群线上扩容:记一次 Kafka 集群线上扩容
5、 Spring Boot 警惕 Spring Boot Actuator 引发的安全问题 - Kirito 的技术分享:警惕 Spring Boot Actuator 引发的安全问题
6、网络 万字长文让你掌握网络问题排查技巧!:万字长文让你掌握网络问题排查技巧!
@dotnetgeek
看来已经摆脱了日常CRUD 业务Boy了,专注研究架构技术方面。
在这年代,我们所作的大部分系统、平台都依赖于数据库的。只要落实到具体的业务开发,所谓的“CURD”是无法避免的。技术服务于架构,架构服务于业务。
就算我已经做了多年系统架构师,我还是尊重写“CRUD”业务开发。
- 测试多行commit
commit -m "" -m "" -m "";
- 单引号:windows cmd下不一定可以
commit -m "
第一行
第二行
第三行
";
- Git Bash测试双引号换行
