学习记录汇总

没有总结的学习就是耍流氓

- 沃·兹基朔德

大多数学习的时候太过于零散,有的时候看到了一篇很好的文章,想找个时间沉下心来好好学习,可是转眼就又给忘了。
看完一本书,也许当时思考过,有一定印象。但是总会遗漏点什么,等真正有需要的时候,往往就真的是有影响。
学完一个知识,想要写个博客文章记录一下,可是耗费时间而没有坚持下来,所以知识没有得到积累。
虽然一直在不断得学习,但是感觉自己太过于浮躁,很多时候的学习并没有真正的沉淀下来,过一阵时间又给忘了。经常想做总结,却有被自己的懒惰和借口拐跑了。

所以本篇博客主要是:

  1. 记录看到的好的文章,便于后面有需要进行快速检索
  2. 记录自己的学习过程,等过几年回过头来看自己的成长
  3. 记录生活轨迹,等老了看看自己虚度多少时光

于2020-04-04 北京 天通苑

技术文章汇总

MySQL

死锁系列

  • 漫谈死锁 (1. RC级别下也会存在Next-key 2. RC级别下,获取到不符合记录时会释放锁)
    • innodb_print_all_deadlocks (将死锁信息记录到errorlog中参数)
    • innodb_status_output_locks (标准监控开关参数)
  • 如何阅读死锁日志 (锁组合)
  • MySQL 各种SQL语句加锁分析
    • innodb_locks_unsafe_for_binlog
  • 死锁案例一 (简单插入唯一索引插入意向锁案例)
  • 死锁案例二 (delete操作会有锁区间行为。PS:删除已有记录会导致锁范围变大)
  • 死锁案例三 (insert同一区间时,唯一索引的插入意向锁导致的死锁)
  • 死锁案例四 (并发插入时,插入意向锁不同阶段死锁。注意跟案例三的区别:本案例为X锁等待,案例三为S锁等待)
  • 死锁案例五 (repalce into插入死锁情况)
  • 死锁案例六 (不同事务加锁顺序不一样,导致锁资源交叉影响导致的死锁)
  • 死锁案例七 (RC级别下,update不存在记录会持有lock_S + GAP锁)
  • 死锁案例八 (多并发插入下的又一插入意向锁竞争导致的死锁案例)
  • 死锁案例九 (并发批量插入,导致的死锁)
  • 死锁案例十 (并发更新普通二级索引造成的死锁。PS:另一程度上说明索引不是随便加就行
  • 死锁案例十一5.6升级到5.7后,INSERT INTO .. ON DUPLICATE KEY语句锁模式加强
  • 死锁案例十二 (唯一索引,多插入,插入意向锁死锁情况)
  • 一个最不可思议的死锁分析 (并发delete语句造成的死锁情况,里面引用了很多好文章,需要细品)

分析死锁单从show engines innodb status中往往只能看到最后执行的语句,并不能很好的了解整个死锁形成过程。所以在分析死锁时,需要先了解两个死锁事务的具体逻辑和语句过程。
了解MySQL不同操作的加锁过程非常重要,这是对死锁形成过程分析的基础。

故障及优化案例系列

SQL变慢的原因主要有:

  1. SQL执行过程走索引不合理,导致执行缓慢。
  2. 使用合理索引,但是获取数据量比较多。(排序,临时表等)
  3. 网络重传丢包导致SQL变慢。
  4. 并发比较高的场景,请求排队处理,等待时间长。

性能优化是一个老生常谈的问题,需要对相关流程和机制有很深入的研究才能对症下药。平时扩充、积累相关知识,在遇到问题后,才会有思路。经验很重要,但更多的是建立在平时的积累上。

性能对比

源码解析

参数系列

工具相关

Redis

C/C++

  • C/C++内存对齐 (Redis 4.0中对sdshdr对象进行了内存对齐优化行为)

Java

Linux命令

操作系统

计算机网络

数据结构和算法

其他

LeetCode题目记录

5:最长回文子串(中心扩展、马拉车算法)
42:接雨水(简单DP、单调栈)
820:单词的压缩编码(字典树)

个人成长文章

职场

个人成长

理财

学习计划

书籍

  • Java开发规范(2020.04.07 done)
  • 向上管理的艺术(2020.04.19 done)
  • 图解HTTP(2019.04.19 done)
  • 用户故事地图
  • Redis开发与运维
  • MongoDB权威指南
  • GO语言核心编程

技术储备

  • 时序数据库(调研)
  • elasticsearch(极客时间视频)
  • 从0开始学架构(2020.04)

准备学习的东西记录

  • 图解MySQL
  • 动态代理、CGLIB代理
  • MySQL闪回工具binlog2sql和MyFlash工具问题记录
  • Having和where的区别
  • MySQL的ICP特性
  • MySQL的BKA特性
  • 重新回顾一遍MySQL45讲
  • Reactor 设计模式
  • interactive_timeout和wait_timeout
  • innodb_thread_concurrency和innodb_concurrency_tickets
  • innodb_online_alter_log_max_size
  • DDL 过程回顾
  • gdb调试MySQL和Redis
  • Cmakefile文件的编写

学习总结

  • 《向上管理的艺术》小结