MySQL 核心原理笔记:架构、日志、事务、索引与锁
MySQL 核心原理速记,覆盖架构、日志、事务隔离 / MVCC、索引与锁等高频主题。 MySQL 架构 连接器负责和客户端建立连接、获取权限、维持和管理连接。连接命令如下: 1mysql -h $ip -P $port -u $user -p 查询缓存 但是大多数情况下我会建议你不要使用查询缓存,为什么呢?因为查询缓存往往弊大于利。 查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。 MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻底没有这个功能了。 分析器词法、语法分析,分析你SQL语句中的各个字段,确保没有出错。比如识别SELECT 关键字,识别出表单名t. select * from t; 优化器 在表里面有多个索引的时候,决定使用哪个索引 在一个语句有多表关联(j...
设计模式
模板方法模式模板方法模式(Template Method Pattern) 是一种行为型设计模式。 简单来说,它在一个方法中定义了一个算法的骨架(步骤),而将一些步骤的具体实现延迟到子类中。这样,子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。 核心思想:封装不变,扩展可变想象一下“冲泡饮料”的过程: 烧开水(相同) 冲泡原料(不同:咖啡或茶叶) 倒入杯子(相同) 添加调料(不同:加糖或加柠檬) 在这个场景中,烧水和倒水是“不变”的结构,而冲泡什么、加什么调料是“可变”的细节。 模式结构 抽象类(Abstract Class):定义算法骨架。包含: 模板方法:定义了算法的步骤(通常设为 final,防止子类修改骨架)。 抽象方法:由子类实现的具体逻辑。 钩子方法(Hook):默认不做事或提供默认实现,子类可以视情况重写,用来控制算法的流程。 具体实现类(Concrete Class):实现抽象类中的抽象方法,完成属于自己的特定逻辑。 代码示例:制作咖啡与茶1234567891011121314151617181920212223242526272...
八股文
BitMap所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 我们可以用一个unsigned int类型的数组或者向量来表示位图,假设我们定义vector a,则 第i位可表示为a[i/32]的i%32位(其中,32*N+r = i,r为i%32,也就是i/32的余数)。 1234567891011121314151617181920212223242526class Bitmap{ private: vector<size_t> v; public: Bitmap(size_t num) : v((num>>5)+1, 0) {} //set 1 void set(size_t num) { v[num>>5] |= (1<<(num & 31)); // num & 31 equ...
AQS - AbstractQueuedSynchronizer
AQS - Java 8这是一个非常好的课题。AQS (AbstractQueuedSynchronizer) 是 Java 并发包 (java.util.concurrent) 中许多同步组件(如 ReentrantLock, CountDownLatch, Semaphore)的基石。理解了它,就理解了 Java 并发的半壁江山。 我将生成两张 Excalidraw 风格的图片来辅助讲解: AQS 宏观内部结构图:展示 State、持有线程以及 CLH 等待队列的整体关系。 AQS 核心流程与状态转换图:展示一个线程尝试获取锁失败后,如何进入队列、改变前驱节点状态以及最终被唤醒的动态过程。 AQS 宏观内部结构图这一张图展示了 AQS 是如何通过一个共享资源状态 (state) 和一个先进先出的等待队列 (CLH Queue) 来管理线程的。 AQS 核心流程与状态转换图 (Acquire Flow)这一张图聚焦于动态过程。当一个线程尝试去 “acquire”(获取锁)时,如果成功了会怎样,如果失败了,它在队列中会经历哪些关键状态的变迁。 图文详解 AQS 原理AQS 的...
Java锁
原理学习Java 中的锁机制经历了从重型到轻量,从单一到多元的发展历程。要深入理解它们,不能只背诵概念,必须结合 JVM 内存模型 (JMM)、对象头 (Mark Word) 以及 AQS (AbstractQueuedSynchronizer) 的底层原理。 以下是对 Java 各类锁的深度解析,涵盖 JVM 层面的锁优化、JUC 显式锁以及分布式环境下的锁策略。 一、 宏观分类:锁的特性视角在深入具体实现之前,我们需要建立一个清晰的分类体系。这些术语描述的是锁的特性或设计思想,而非具体的类。 锁分类 描述 代表实现 适用场景 乐观锁 假设没有冲突,操作时检测数据是否被修改 (CAS)。 AtomicInteger, 数据库版本号 读多写少,竞争不激烈 悲观锁 假设总有冲突,操作前先锁定。 synchronized, ReentrantLock 写多读少,竞争激烈 可重入锁 允许同一个线程多次获取同一把锁,防止死锁。 synchronized, ReentrantLock 递归调用,父子类方法调用 公平锁 严格按照请求顺序获取锁 (FIFO)。 Re...
线程池
学习大纲要想深入理解 JUC (Java Util Concurrent) 的线程池实现,不能只看 ThreadPoolExecutor 一个类,而应该顺藤摸瓜,从接口定义、核心实现、辅助组件三个维度入手。 以下是按“阅读优先级”排序的源码研读路径: 第一阶段:核心骨架(必看)这是线程池的灵魂,90% 的面试题和生产环境故障都源于对这个类的误解。 java.util.concurrent.ThreadPoolExecutor (核心) 地位:绝对的核心。 看什么: ctl 变量:高 3 位存状态,低 29 位存线程数。这是位运算设计的典范。 execute(Runnable command):入口方法,蕴含了“三级缓冲”逻辑(核心线程 -> 队列 -> 最大线程 -> 拒绝)。 addWorker(Runnable firstTask, boolean core):如何创建一个线程并启动它。 内部类 Worker:重点!它继承了 AQS。为什么要继承 AQS?为了实现独占锁,判断线程是否空闲(中断时使用)。 runWorker(Worker w):线程启动后...
Java新特性简介
Java 8 新特性Lambda 表达式123456789101112131415private static void testLambda() { List<String> names = Arrays.asList("name", "sex", "hobby"); // with method reference -- static method names.forEach(System.out::println); names.forEach(name -> System.out.println(name)); // with method reference -- instance method names.sort(String::compareTo); names.sort((a, b) -> a.compareTo(b)); // with method reference -- constructor method ...
数字证书与 PKI 技术详解
数字证书与 PKI 技术详解概述数字证书是现代网络安全的基石,PKI (Public Key Infrastructure) 公钥基础设施则是管理这些证书的完整框架。本文将深入探讨 PKI 的核心概念、组件架构、证书格式标准以及自动化管理协议。 PKI (Public Key Infrastructure) 公钥基础设施定义与核心价值PKI 是一个综合性的安全框架,专门用于管理数字证书和公钥加密的完整生命周期。它通过建立可信的数字身份体系,为现代网络通信提供身份验证、数据完整性和机密性保障。 核心组件架构1. CA (Certificate Authority) - 证书颁发机构1234567核心职能: PKI 的信任根节点,负责数字证书的全生命周期管理主要职责: - 严格验证申请者身份和资质 - 颁发符合标准的数字证书 - 实时维护证书状态信息 - 及时发布证书撤销列表 (CRL) - 管理证书有效期和续期流程 2. RA (Registration Authority) - 注册机构123456定位: CA 的授权代理,专注于证书申请前端处理核心功能: - 执行...
现代身份认证与授权技术完全指南 - OAuth、JWT、SAML 等协议详解
认证和授权完全指南概述在现代网络安全体系中,认证(Authentication) 和 授权(Authorization) 是保障系统安全的两大核心机制: 认证:验证用户身份(”你是谁?”) 授权:确认访问权限(”你能做什么?”) 本文将从协议和Token两个维度,系统性阐述认证授权的技术体系。 一、认证授权协议体系1. OAuth 2.0 - 授权标准协议OAuth 2.0 是现代互联网授权的基石,专注于授权(资源访问权限的委派),而非直接处理用户身份认证。 核心角色 角色 说明 示例 资源所有者(Resource Owner) 拥有资源的用户 微信用户 客户端(Client) 请求访问资源的应用 第三方小程序 授权服务器(Authorization Server) 颁发Token的服务 微信授权服务器 资源服务器(Resource Server) 存储受保护资源的服务 微信用户信息API 四种授权模式 授权码模式(Authorization Code) 适用场景:Web应用(服务端安全) 安全性:最高,推荐使用 流程:用户授权 → 获取授权码 ...
Spring MVC
SpringMVC 工作原理引言Spring MVC 框架作为 Java Web 应用程序开发中广泛采用的框架,以其分层和松耦合的架构而闻名。这种架构清晰地分离了表示层、持久层和控制层,使得开发人员能够独立地处理各个模块,并将其组合成专业的 Web 应用程序。遵循 MVC 标准开发的 Web 应用程序更易于扩展、更新和管理,因为松耦合的分层结构使得在特定层进行修改变得更加便捷 1。本报告旨在深入探讨 Spring MVC 框架内 HTTP 请求的完整生命周期,从客户端发起请求到最终响应返回,详细阐述其内部的工作原理。 理解模型-视图-控制器(MVC)模式模型-视图-控制器(MVC)是一种广泛应用于软件工程中的架构模式,旨在分离应用程序的不同关注点,从而提高代码的可维护性和可重用性 3。在 MVC 模式中,应用程序被划分为三个核心组件: 模型(Model): 模型负责封装应用程序的数据和业务逻辑 2。它是应用程序的核心,管理着数据的存储、检索和处理 4。模型独立于用户界面,当模型中的数据发生变化时,它会通知视图进行更新 4。 视图(View): 视图负责呈现模型中的数据,并将其转...
