代码改变世界

随笔档案-2022年12月

MySQL-(InnoDB)事务和锁

2022-12-30 12:08 by 杭伟, 62 阅读, 收藏,
摘要: 在事务并行处理背景下,不同的事务之间因数据共享的状态变化,存在着某种依赖/隔离影响。即事务隔离级别。 事务隔离级别,官网的解释在这里。 InnoDB提供 SQL:1992 标准描述的所有四种事务隔离级别: READ UNCOMMITTED、 READ COMMITTED、 REPEATABLE RE 阅读全文

MySQL-存储引擎架构

2022-12-29 09:52 by 杭伟, 336 阅读, 收藏,
摘要: MySQL是一种分层体系结构的关系数据库。 一共有三层:客户(连接)层,Server层,存储引擎层。 简单理解就是这三层架构。官网的解释在这里。(这个部分建议看8.0的文档,8.0文档补充了架构图,5.7没有放图) 如上图所示(请记住各层的上下顺序,比如索引下推概念中的下推pushdown指的就是s 阅读全文

MySQL-索引优化

2022-12-23 11:38 by 杭伟, 50 阅读, 收藏,
摘要: 回顾聚簇索引,官网的定义在这里。 聚簇索引无法显示创建,存储引擎会根据一定的规则自动创建,具体规则优先级是: 主键--》非空唯一索引--》隐藏列rowid **InnoDB表的主键列应该选择有序的顺序ID。 慢SQL查找(慢查询日志) 查看是否开启,默认不开启。如果不需要进行调优,一般不建议开启。参 阅读全文

MySQL-带你上官网看索引

2022-12-22 11:54 by 杭伟, 201 阅读, 收藏,
摘要: 在我之前的一篇文章中,有引用一个讨论用Hash还是Tree的问题,DB中关于查找类数据结构,除了树,还有Hash(HashMap,HashSet)。 存储数据结构之争 B+树主要是照顾磁盘IO这种特殊的性质应运而生的;然而在内存够多够大时,Hash某些时候比Tree结构有用得多。 但是Hash做索引 阅读全文

MySQL-执行计划

2022-12-21 11:20 by 杭伟, 254 阅读, 收藏,
摘要: 上官网看执行计划文档释义,移步 此部分在MySQL官方文档中的结构属于优化(Optimization)-理解查询执行计划(Understanding the Query Execution Plan)。 此部分一共包括5个部分内容: 1,使用explain优化查询 2,explain输出内容释义 3 阅读全文

MySQL-InnoDB磁盘结构

2022-12-20 12:10 by 杭伟, 205 阅读, 收藏,
摘要: 主要阐述InnoDB存储引擎(MySQL5以后的默认引擎)。 数据库中最基本的组成结构是数据表,视觉上的表和其对应的磁盘结构如下: 此图参考了厦门大学课堂:MySQL原理 。但是视频中一些更多细节没有涉及,比如Leaf node segment和Non-leaf node segment其实就是叶子 阅读全文

负载均衡原理

2022-12-15 22:54 by 杭伟, 101 阅读, 收藏,
摘要: 本人在工作中接触到的负载均衡:F5,DNS,nginx,云平台SLB,在此做个总结。 负载均衡的分类 DNS解析: 因为一个域名可以通过DNS解析到多个IP,这一特性天然使DNS有负载均衡的能力。 现在负载均衡这块主要应用于地理位置服务:实现地理级别的全局负载均衡。比如将南方区域访客流量解析到深圳的 阅读全文

nginx概要

2022-12-15 20:41 by 杭伟, 23 阅读, 收藏,
摘要: 新机(CentOS7)配置nginx: 一. 更新yum源为阿里云镜像 ping mirrors.aliyun.com mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc 阅读全文

Tomcat工作原理

2022-12-15 11:19 by 杭伟, 274 阅读, 收藏,
摘要: Tomcat要实现两个核心功能: 1,处理Socket连接,负责网络字节流与Request/Response对象的转化。 2,加载和管理Servlet,以及具体处理Request请求体(比如HelloServlet的doGet()方法进入和将请求对象转化为HttpServletRequest)。 核 阅读全文

Servlet原理

2022-12-14 09:16 by 杭伟, 109 阅读, 收藏,
摘要: Servlet的本质是一个Java接口,定义了一套处理网络请求的规范。 最主要的是两个生命周期方法init()和destory(),以及一个处理请求的service()。 因为处理一个网络请求,绕不开:初始化?请求处理?销毁? 这三个基本面。 其中:init()和destory()方法各自执行一次, 阅读全文

Java:Should I use a `HashSet` or a `TreeSet` for a very large dataset?

2022-12-13 15:52 by 杭伟, 53 阅读, 收藏,
摘要: 这是StackOverflow上一个有意思的提问,记录一下。 原地址在这 翻译: 对于大型数据集,应该使用”哈希集”还是”树集”? (因为HashTable有着O(1)的查找速度比树结构更有效率,虽然HashTable的数据无序,但这不是本文的重点) 我需要在数据结构中存储2到1500万个帐户(长度 阅读全文

JUC中常见的集合

2022-12-13 15:06 by 杭伟, 32 阅读, 收藏,
摘要: Map: HashMap > ConcurrentHashMap List: ArrayList > CopyOnWriteArrayList Set: HashSet > CopyOnWriteArraySet Queue: Queue > ConcurrentLinkedQueue 阅读全文

CopyOnWriteArrayList的使用和优缺点

2022-12-13 12:29 by 杭伟, 395 阅读, 收藏,
摘要: CopyOnWriteArrayList允许并发读,读操作无锁,性能较高; 而写操作(含删除),比如向容器中添加/删除一个元素,则首先将当前容器复制一份,然后在新副本上执行写操作,结束之后再将原容器的引用指向新容器。 可以看到,设计上使用volatile数组变量+ReentrantLock可重入锁组 阅读全文

ThreadLocal实现原理和使用场景

2022-12-13 11:09 by 杭伟, 129 阅读, 收藏,
摘要: ThreadLocal是线程本地变量,每个线程中都存在副本。 实现原理: 每个线程中都有一个ThreadLocalMap,而ThreadLocalMap中的key即是ThreadLocal。 内存泄漏: ThreadLocal变量存储在栈内存中,对应对象存储在堆内存中,这个指向是强引用关系。 同样, 阅读全文

ConcurrentHashMap实现原理

2022-12-12 15:18 by 杭伟, 71 阅读, 收藏,
摘要: jdk1.7分段锁: Segment类(小型HashMap),继承ReentrantLock put简要流程: 先根据key,算出Segment数组的下标index 加锁 生成Entry对象,并添加到Segment的数组或链表上(和HashMap相同) segments[index].put(key 阅读全文

JUC同步工具CountDownLatch

2022-12-12 10:06 by 杭伟, 38 阅读, 收藏,
摘要: CountDownLatch:允许一条或多条线程等待其它线程中的一组操作完成后再继续执行。 在探究CountDownLatch之前,我们知道Thread的join也有类似功能,先看thread的join方法: 1 public static void main(String[] args) thro 阅读全文

线程池ThreadPoolExecutor

2022-12-11 23:45 by 杭伟, 150 阅读, 收藏,
摘要: 回顾Java创建线程的几种方式: 1,继承Thread(实际Thread也是实现Runnable接口); 2,实现Runnable接口; 3,实现Callable接口(返回值); 4,由线程池创建。 根据阿里巴巴Java开发手册,关于并发编程有两个强制要求: 1.线程资源必须通过线程池提供,不允许在 阅读全文

Java线程中断机制

2022-12-08 09:53 by 杭伟, 78 阅读, 收藏,
摘要: 在阅读AQS源码以及juc包很多基于AQS的应用源码过程中,会遇到很多interrupted相关的方法,这里复习一下java线程中断相关。 要点:使用interrupt()中断一个线程,该方法只是标记中断,并不会马上中断。马上中断使用stop(),该方法已过期,不建议使用(立刻中断容易造成生产数据一 阅读全文

JVM有意思的图-持续更新

2022-12-07 19:11 by 杭伟, 25 阅读, 收藏,
摘要: 放一些JVM有意思的图 通过一行代码联想JVM: 阅读全文

ReentrantLock源码

2022-12-06 21:13 by 杭伟, 49 阅读, 收藏,
摘要: ReentrantLock即是AQS线程同步队列器思想的具体应用/实现 实现了AQS,并有公平锁和非公平锁(默认非公平锁)两种实现 ReentrantLock有三个重要的内部类:Sync(抽象类),NonfaireSync(Sync的非公平锁实现),FairSync(Sync的公平锁实现) Sync 阅读全文

AQS原理

2022-12-06 18:05 by 杭伟, 129 阅读, 收藏,
摘要: *前置知识: 1,线程的生命周期:新建(new())--就绪(start())--运行(run())--阻塞--死亡; 线程的非运行状态: 等待,挂起,睡眠,阻塞 正常生命周期中运行的线程,如果有同步需求,假如正在竞争一把锁,在没拿到锁时,应该被挂起。(而不是什么都不做) 2,在队列中的线程,应该处 阅读全文

Object o = new Object();

2022-12-05 10:37 by 杭伟, 97 阅读, 收藏,
摘要: 对象的创建过程: 1,申请内存,并初始化; 2,构造器初始化; 3,o指向对象。 对象在内存中的存储布局: 使用jol工具打印java对象在内存的存储布局: 其中,对象头的组成: 对象头包括Mark Word和Class Pointer MarkWord包含三个主要信息: 锁信息,GC,HashCo 阅读全文