自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

燃烧的小宇宙

语言只是工具,算法才是灵魂!

原创 MySQL高级 —— 高性能索引

引言最近一直在抱着《高性能MySQL(第三版)》研究MySQL相关热点问题,诸如索引、查询优化等,这阶段的学习是前一段时间MySQL基础与官方的“阅读理解”的进一步延伸。书中第五章详细阐述了如何设计高性能的索引,以及索引的诸多注意事项。之前关于索引的学习,包括《MySQL 高级 —— 复合索引简介(多列索引)》、《MySQL 高级 —— 索引实现的思考》、《MySQL 优化 —— MySQL 如何使用索引》这三篇文章,着实费了一番功夫,但随着对书中第五章内容的逐步学习,也越发觉得自己关于索引的理

2020-05-22 14:10:11 89

翻译 MySQL 优化 —— EXPLAIN 执行计划详解

引言本博客总结自MySQL 官网Understanding the Query Execution Plan专题。根据我们的表、字段、索引、以及 where 子句中的条件等信息,MySQL 优化器会考虑各种技术来更高效地执行查找。一个大表中的查找不一定要读取所有记录;多表连接也不一定需要比较每条联合记录。优化器选择的执行最优查询的操作集,称为“查询执行计划”,也可以说是 EXPLAIN...

2020-02-04 20:20:51 239

原创 Linux进阶之路——常用命令总结

一、帮助命令helpmantype区分内建、外建命令【扩展】关于内建命令与外建命令。内建命令属于shell程序的一部分,包含一些比较简单的Linux命令。这些命令被写在/bin/bash 文件的 builtins 里面,由shell程序识别并在shell程序内部完成运行。通常在Linux系统加载运行时,shell就被加载并驻留在系统内存中。解析内建命令不she...

2019-04-20 22:30:37 181

原创 为什么要坚持写博客

引言断断续续地写博客已经有一段时间了,作为一个Java中级开发工程师,工作了三年多也算渐渐入了门。不得不说,博客给我的改变是非常大的,那么作为一个技术人员,为什么我觉得必须要坚持写博客?下面,就来谈谈我的一些理解和感悟。写博客的好处不论你在哪里写博客,博客园、CSDN、自己的微信公众号、亦或是微博里,我觉得都没问题。首先,博客作为一种比较正式的技术分享资源,它给我的感受就是它真的应...

2018-11-08 18:27:07 357 4

原创 Java常用设计模式————享元模式

引言享元模式,也叫蝇量模式(Flyweight Pattern)。运用共享技术有效地支持大量细粒度的对象。享元模式常用于系统底层开发,解决系统的性能问题。例如数据库连接池,里面都是创建好的连接对象,在这些连接对象中,如果有我们需要的则直接拿来用,避免重新创建,如果没有,再去创建。享元模式能够解决重复对象的内存浪费问题,在一些不需要总是创建新对象,可以使用对象资源池时,可以从资源池中获取。这样可以降低系统内存消耗,同时提高效率。享元模式经典的应用场景就是池技术,String常量池、数据库连接池

2020-07-11 22:56:16 45

原创 Java常用设计模式————外观模式

引言外观模式(Facade Pattern),又叫“过程模式”。外观模式为子系统中的一组接口提供一个一致的入口,此模式定义了一个高层接口,这个接口使得这一组子系统更加易用。一、案例分析生活中有很多类似的案例,比如驾驶员驾驶汽车,只需要操作方向盘、档杆、离合器、刹车、油门这几个主要接口,而汽车内部的一组操作则不需要驾驶员考虑,比如驾驶员踩刹车后,车子就会停下来,而系统内部实际上通过“刹车”这一接口,经过一系列的机械传动到达刹车片。再比如,一套豪华的家庭影院,用户只需要简单点击遥控器上的“开始”

2020-07-03 20:29:21 79

转载 MySQL 高级 —— MVCC 多版本并发控制

引言MySQL的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制——MVCC。包括其他数据库如Oracle等,由于MVCC并没有一个统一的实现标准,因此它们的实现原理都不尽相同。MVCC简介可以认为MVCC是行级锁的一个变种。但是它在很多情况下避免了加锁操作,因此开销很低。一般都实现了非阻塞的读操作,同时写操作也只是锁定必要的行。MVCC的实现,是通过保存数据在某个时间点的快照来实现的。也就是说,不管需要执行多长时间,每个事务看到的数据

2020-06-27 18:42:00 75

原创 Java常用设计模式————组合模式

引言组合模式,是一种类似递归算法的结构性设计模式,通过以简单的 List ,组合本类对象,实现树状对象结构的“部分、整体”的层次。它可以让调用程序不需要关心复杂对象与简单对象的区别,而统一地实现处理逻辑。对于个体与整体存在一定共性的数据场景的展示非常有帮助,比如省市区的树状结构,领导与员工、校院系等。一、组合模式的类图结构用套娃形容组合模式非常贴切,其编码核心其实就是用数组来组合下级对象,而下级对象本身也属于此类实例。一般就是用于描述某种极具共性的实体类,如省、市、区;领导、员工等。

2020-06-25 21:15:26 77

原创 Java常用设计模式————装饰者模式

引言装饰者模式,又叫装饰器模式。它可以动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更灵活,同时装饰者模式也体现了OCP原则。在客户端调用使用了装饰者模式的对象时,就好像在使用构造器层层包裹核心对象,层层装饰核心对象,因此叫做装饰者模式。一、装饰者模式类图装饰者模式属于结构型设计模式。在JDK的IO流API中,就利用了装饰者模式:以简单的形状和颜色为例。如何为不同的形状装饰新的颜色呢?上图中,Shape和ShapeDecorator都是抽象类,一般情况下,装饰者模式

2020-06-24 22:11:48 89

原创 Java常用设计模式————桥接模式

引言在实际的业务中,经常会遇到多维度的概念组合,公园的门票,颐和园有年票、月票、日票,故宫也有年票、月票、日票。那么不同的公园和票种类型就可以视为两种不同的纬度,它们之间会形成相互组合的关系。在类的设计上,如果任由两种纬度的类任意组合的话,那么就会形成笛卡尔积的情况,使类泛滥,难以维护。在设计模式中,桥接模式就是为了解决这个问题而提出的,它通过将两种或多种纬度以上层抽象的组合关系为基础,形成一种桥接模型,将业务的组合时机延迟到客户端调用使才发生,避免在编写类的时候,大量的枚举每一种具体情况。

2020-06-22 23:20:00 63

原创 Java常用设计模式————适配器模式

引言由于无法直接使用某个类中的方法而采取的一种中间类转换的策略。将一个类的接口转换成另一个接口,让原本接口不兼容的类可以兼容。适配器模式可以分为三种:类适配器、对象适配器、接口适配器。它们之间的区别主要体现在适配器角色与被适配角色之间的依赖关系上。如类适配器是通过继承的方式,令适配器继承被适配类。一、类适配器...

2020-06-21 11:43:56 51

原创 哈希表的大小为何最好是素数

引言为什么散列函数采用取模运算?又为什么取模运算的被取模数最好是素数?素数是如何在取模运算中很好的规避冲突的?这些问题可能困扰诸多程序员很久了。我们总是说素数可以更好的避免冲突,但总是对各种长篇大论的分析望而却步。这篇文章是我在学习散列时针对素数在哈希函数中的如何成功避免大量冲突的原因总结。尽可能言简意赅地描述为什么素数那么香。一、结论素数能够在取模运算中避免冲突并不是一个数学定律,而且能够避免冲突也不是绝对的。从规律上来看,如果待存储的数列间隔是被取模数的因子,那么合数要比素数

2020-06-07 08:14:03 155

原创 设计模式七大原则

引言设计模式如单例模式、工厂模式、适配器模式等,大概有二十多种,但是这些设计模式的背后,有七大设计基本原则。它们分别是:单一职责原则,接口隔离原则,依赖倒转原则,里氏替换原则,开闭原则(OCP),迪米特法则,合成复用原则。这些设计模式的基础设计原则,虽然都非常简单,但是却指导着软件开发的方方面面。这篇文章对各个原则做以简单总结。一、单一职责原则单一职责原则(SRP:Single responsibility principle)又称单一功能原则,它规定一个类应该只有一个发生变化的原因。应

2020-06-05 20:27:48 50

原创 MySQL高级 —— 查询性能优化

引言承接《MySQL高级 —— 高性能索引》,本篇博客将围绕《高性能MySQL(第三版)》第六章内容进行总结和概括。与索引的部分一样,SQL优化也是广大程序员深入MySQL的又一条必经之路。希望通过本篇博客的总结,能够为我们成为“高级工程师”添砖加瓦。本博客会从查询设计的一些基本原则开始,然后介绍一些更加深入的查询优化技巧,并介绍一些MySQL优化器的内部机制。一、查询变慢的原因MySQL执行查询时会有很多子任务,通常来说,查询的生命周期大致可以分为:从客户端,到服务器,然后在服务.

2020-05-24 20:57:06 105

原创 Windows误关闭资源管理器重启的办法

引言有时候Windows系统在开机后,在桌面底部的任务栏中无法正常加载必要的网络连接图标或音量图标等,导致无法手动操作音量或连接网络。这时候就会需要打开“任务管理器”重新启动“资源管理器”使其重新加载这些必要的控制图标。但是由于操作失误,直接关闭了“资源管理器”,导致任务栏被直接关闭了,桌面也成了黑屏,那么如何才能重新启动“资源管理器”呢?在任务管理器中启动资源管理器有一个简单粗暴...

2020-04-26 08:30:17 239

原创 关于 OutOfMemoryError 的总结与解决方法

引言本文总结自周志明的《深入理解Java虚拟机》第二章部分内容。这部分内容,可以为后续性能调优方面的工作起到铺垫作用。一、什么是 OutOfMemoryErrorOurOfMemory 简称“OOM”, 直译为“内存耗尽”或“内存溢出”,当然,并不是真的内存耗尽了,它指的是 JVM 的几个逻辑分区的内存不够用了。在 JVM 的几个主要内存分区中(JVM 栈、本地方法栈、计数器、...

2020-03-28 19:01:16 102

原创 MySQL 高级 —— 深入理解 InnoDB 与 MyISAM

引言本篇主要聚焦MySQL 存储引擎的优缺点。一、InnoDB 和 MyISAM 存储引擎的比较

2020-03-07 10:03:37 102

原创 Git 初学札记(十)—— Reset 回退的三种状态解析

引言工作中经常会涉及到需要本地代码覆盖更新的操作。有时候可能是从远端git 上直接覆盖更新,或者是其他本地分支覆盖更新当前分支等等。这个时候就需要用到 reset 操作。reset 操作分为三种类型:Soft、Mixed、Hard。今天我们就来说说这三种类型究竟如何使用。一、Git 提交的三种状态在解释 reset 的三种类型之前,我们需要了解 Git 提交的三种托管状态。不论你是...

2020-02-05 11:27:19 134

翻译 MySQL 优化 —— MySQL 如何使用索引

引言本文翻译自MySQL 官网 :How MySQL Uses Indexes,MySQL 版本 5.7 。提升 SELECT 操作性能最好的方式就是在查询的一列或多列上建立索引。索引的行为类似指向表数据的指针,可以让查询能够快速判断哪个记录满足 WHERE 子句中的条件,然后取得这些记录的其他字段的值。所有的 MySQL 数据类型都支持索引。虽然在可能用于查询的所有字段上都建立索引...

2020-01-29 18:15:29 106

原创 MySQL 高级 —— 索引实现的思考

引言最近看了一个公开课,是有关MySQL对索引设计的思考。详细讲解了几种索引实现的设计思考与利弊辨析,讨论了为什么MySQL默认情况下会使用B树索引,B+树索引又对B树做了哪些结构改进。本片博客通过个人的学习理解和总结,由几种简单的索引数据结构,逐渐展开对B+树索引的探究和思考。一、常见的索引实现索引是帮助MySQL 高效获取数据的排好序的数据结构。它可以在几十毫秒,最多几百毫秒内...

2020-01-27 12:33:49 135

翻译 MySQL 优化 —— ORDER BY 优化

引言本文翻译自MySQL 官网:ORDER BY Optimization,MySQL 版本:5.7。这一部分描述了MySQL何时会使用索引来满足order by子句,filesort 操作会在索引不能生效的时候被用到,以及优化器对order by的执行计划信息。order by后面有没有跟着limit,可能会返回不同的记录顺序。一、使用索引来满足 ORDER BY某些情况,M...

2020-01-23 22:01:06 69

翻译 MySQL 优化 —— IS NULL 优化

引言本博客翻译自 MySQL 官网:IS NULL Optimization, MySQL版本 5.7。MySQL 对 IS NULL 的优化MySQL 可以对 IS NULL 执行和常量等值判断(列名= 常量表达式,如name = 'Tom')相同的优化。MySQL 可以利用索引和范围来搜索空值。例如:SELECT * FROM tbl_name WHERE key_co...

2020-01-23 13:12:44 409

翻译 MySQL 优化 —— WHERE 子句优化

引言本文翻译自 MySQL 官网:WHERE Clause OptimizationWHERE 子句优化这一部分我们来讨论对 WHERE 子句的优化处理。本部分的案例都是以 SELECT 语句为例,但这些优化同样适用于 DELETE 和 UPDATE 语句中的 WHERE 子句。注意因为对 MySQL 优化器的工作一直在进行,因此并不是全部的MySQL执行优化都在本文档中说明...

2020-01-22 20:18:24 132

原创 MySQL 优化 —— SQL优化概述(优化专题开篇词)

引言最近为了研究索引的知识,特地去MySQL 官网研读了一番,发现MySQL官网有比较全面的MySQL优化方案和知识背景,所以希望通过一系列文章,将官网的知识翻译总结一下,避免日后去网上胡乱搜索产生不必要的知识勘误风险。本系列文章标题都会以 “MySQL 优化” 前缀开头,有些可能是翻译,也会有少量自己的总结和试验,针对 MySQL 5.7 版本进行。当然也并不会全部将官网的优化专题翻译完...

2020-01-22 19:11:18 1632

原创 MySQL 高级 —— 复合索引简介(多列索引)

引言复合索引是指包含多个列的索引,单一索引仅包含一列。不论是哪种索引,都旨在加快SQL查询速度。复合索引最多支持16个列(一定不要这么做!),索引是一种有序的数列,复合索引也是如此。相对于单一索引,复合索引有一些必须注意的使用细节,否则很容易造成索引失效,降低查询速度。而要了解这些注意细节,就必须从复合索引的作用方式入手。一、复合索引的作用方式所谓“复合”,那一定是包含有多个,...

2020-01-18 23:15:43 140

原创 MySQL 基础 ————高频函数总结

一、MySQL函数调用方式函数调用的基本语法:SELECT 函数(实参列表) [FROM 表]其中,对于函数,需要重点关注三点:1、函数的名称2、参数列表3、函数功能二、函数的分类在 MySQL中,函数分为两类:1、单行函数;2、分组函数。2.1 单行函数单行函数有 concat、length、ifnull 等。单行函数下还有多种分类。2.1.1...

2020-01-03 16:54:57 196 1

原创 Java 动态代理解析

引言本博客总结自《Java 编程思想》第十四章一、实现第一个动态代理程序代理是软件设计中重要的设计思想,它允许我们在调用实际操作之前或之后解耦式地编写额外的操作,而一旦不需要这些操作了,就可以轻易的移除它们。浏览了《编程思想》中对动态代理的解释,我发现动态代理的实现也是非常简单的。想要实现动态代理,除了要借助于 Java 的运行时类型信息( RTTI :Run-Time Typ...

2020-01-02 23:51:37 77

原创 Linux 实操 —— Linux 系统性能分析

引言最近配合解决压测(性能测试)方面的问题,了解到了一些可以监控 Linux 系统性能指标,如CPU、IO、内存等的工具。此篇博客主要讲解 Linux 系统监控的一些重点内容以及 sar 命令的使用。一、Linux 性能分析聚焦Linux 性能分析的重要参数包括:1、系统整体 cpu 利用率(利用率 >= 50 % 需要注意;>=70% 需要密切关注;>=9...

2020-01-02 14:50:42 123

原创 Java 注解知识总结

引言本博客总结自《Java 编程思想》第 20 章。一、什么是注解注解是 Java 5 引入的一种通过反射机制实现的语法特性,开发者可以通过在类、域、方法等元素前面标记一个“标签”达到对程序的源码、类信息或运行时进行某种说明或处理的效果,尽可能地简化代码,从而使程序开发更高效。但需要注意的是,编译器要确保在其构造路径上,必须有对应注解的定义。Java 中在 1.5 之初内置了三个标...

2020-01-01 14:13:59 111

原创 Linux 实操 —— 日志筛选操作(sed与wc命令介绍)

引言在处理数据交互业务场景的问题时,经常会出现需要统计日志中出现某些指定关键字的行数,或者行数,那么如何通过Linux 命令来快速统计一段时间之内,某个特定关键字出现的行数呢?这篇文章将会给你答案。一、快速统计一段时间内特定log关键字出现行数指令示例:sed -n '/2019-12-28 11:26/,/2019-12-28 12:13/p' nohup.out | grep...

2019-12-28 14:40:10 160

原创 Java正则表达式总结

引言正则表达式(英文:regular expression)是用于描述字符串规则的工具,是记录文本规则的代码。它可以用来搜索、编辑、处理文本。现有编程语言都支持正则表达式的处理,但每种语言都有细微的差别。在Java 中,正则表达式的转义反斜杠要用:\\ 来表示,这是因为在《Java Language Specification》中明确规定,Java 中的一个反斜杠会用于转义Unicod...

2019-12-22 21:05:40 72

转载 MySQL 高级 ———— MySQL逻辑架构图简介

引言本篇文章介绍MySQL的逻辑架构图。MySQL并不完美,但足够灵活,能够适应高要求环境。MySQL不仅可以嵌入到应用程序中,同时也可以支持数据仓库、内容搜索、和部署软件、高可用的冗余系统、在线事务处理系统等各种应用类型。一、MySQL逻辑架构MySQL最重要、最与众不同的特性就是它的存储引擎架构,这种架构将:查询处理、其他系统任务、数据的存储与提取 三部分分离。所以,带来的...

2019-12-15 17:53:19 346

原创 MySQL 基础 ———— 流程控制结构

引言MySQL 中的流程控制作为基础知识的最后一块拼图,显得并不是特别重要,而且,在实际生产开发中,也往往不需要通过它来进行程序的控制,那么为什么还要学习它呢?我认为有以下几点:1、知识的完整性:虽然MySQL 的流程控制结构并不重要,但是作为MySQL 基础知识的一部分,我认为有必要将它补充完善,最起码也要掌握其基本语法和结构,不至于到了真正用的时候临时抱佛脚。2、任何知识都有其应用...

2019-12-08 12:34:33 60

原创 MySQL 基础 ———— 存储过程与函数

一、存储过程介绍存储过程是一组预先编译好的SQL语句的集合,可理解成批处理语句。它的优点主要有以下几点:1、提高代码的重用性;2、简化操作;3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。二、存储过程的创建DELIMITER 定界符CREATE PROCEDURE 存储过程名(形参列表)BEGIN 存储过程体(一组合法的SQL语句)END ...

2019-12-08 11:13:00 83

原创 MySQL 基础 ———— 变量

一、MySQL系统变量系统变量是由系统提供,属于服务器层面。系统变量分为:全局变量和会话变量。全局变量一般要加 GLOBAL 关键字,例如在《MySQL 基础 ————事务与隔离级别总结》中提到的 GLOBAL TRANSACTION,就属于全局变量,它针对所有连接都会生效,但是一旦MySQL服务重启,同样会失效。会话变量由 SESSION 关键字修饰,一般可以省略,比如 SET...

2019-12-08 09:58:30 160

原创 MySQL 基础 ———— 视图的应用与总结

引言视图是一种虚拟表,和普通表的使用是一样的,视图的一大特点就是“临时性”,是通过表动态生成的数据,只保存SQL逻辑,不保存查询结果。视图在实际生产中主要有两种应用场景:1、多个地方用到同样的查询结果;2、该查询使用的SQL比较复杂。下面,我们来总结一下这个在开发中经常会用到的知识点。一、视图的优势首先,视图并不能提高SQL的性能,它的作用在于更好的组织数据。优势有以下...

2019-12-07 18:24:13 81

原创 MySQL 基础 ———— SAVEPOINT 的应用

引言savepoint 关键字用于在数据库事务中设置一个存储点,在一个较长的事务中暂存数据,如果在事务末尾执行回滚,可选择性的回滚到 savepoint 设置的暂存点。本文承接上一篇博客《MySQL 基础 ————事务与隔离级别总结》,进一步探讨事务在实际生产中的重要场景——回滚。一、SAVEPOINT 语法SAVEPOINT identifierROLLBACK [WORK]...

2019-12-07 12:59:57 428

原创 MySQL 基础 ————事务与隔离级别总结

一、事务的概念事务主要针对查询以外的其他几项操作:插入、更新、删除,将多条SQL合并到一个执行单元中,要么全部执行成功,要么全部回滚。MySQL的TCL 事务控制语言,就是为事务而设计,接下来我们来总结一下。二、事务的 ACID 属性1、原子性原子性是指事务是一个不可分割的工作单元,不可分割,意味着要么全部执行,要么全部回滚。2、一致性事务必须使数据库从一个一致状态,变换到...

2019-12-07 12:03:21 86

原创 MySQL 基础————常用数据类型

引言从第一次学习mysql开始,不知道为什么MySQL的数据类型始终没有像Java 一样深入脑海,对某些数据类型的定义和用法,也并不清晰,这篇文章,就好好总结一番,将MySQL中几个常用的数据类型归纳一下。一、类型选择的原则在设计表的时候,首先就是要考虑存储的数据与MySQL的哪种类型相吻合,比如,金额,就要用数字类型,最差也要用字符串类型,日期可以是date 类型,或者也可以是字符串...

2019-12-06 11:29:24 106

原创 MySQL 基础———— UNION 联合查询

引言联合查询与连接查询不同,通过UNION 关键字,我们可以将多个查询语句一同执行并将结果集展示出来,不涉及到任何关联关系。UNION 的含义是“联合,并集,结合”,在MySQL中可以将多个查询语句的结果合并成一个结果集,在MySQL 不支持FULL OUTER JOIN 的情况下,弥补了“并集” 查询的短板。连接查询相关知识总结,参考《MySQL 基础 ———— 连接查询》。一、...

2019-11-10 11:43:40 184

提示
确定要删除当前文章?
取消 删除