自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Morty的技术乐园

每天进步一点点!

  • 博客(248)
  • 论坛 (1)
  • 收藏
  • 关注

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

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

2020-05-22 14:10:11 201 2

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

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

2020-02-04 20:20:51 790

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

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

2019-04-20 22:30:37 225

原创 为什么要坚持写博客

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

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

原创 2020 年度总结

2020年给我的感觉是短平快的一年。由于年初的新冠肺炎疫情,我大半年都呆在北京的破旧出租屋里写代码。整个春天和夏天,平平无奇。2月1日返京,居家办公,夜跑。8月复工,疯狂爆痘、烂脸,月末落户天津。9月搬家,10月治脸,12月学拳击。今天,我就来简单总结一下我的2020年的得与失,给自己留个纪念。一、我的投资元年4月,我接触到了投资,这让我打开了新世界的大门。一次偶然的机会,我在B站看到了一些财经UP主的视频,了解到了一些基金和股票相关的知识。此前我一直努力尝试在一些内容平台上输出技术

2021-01-19 21:57:26 11

原创 Spring —— 容器内部逻辑

引言上一篇关于IoC容器的详解《Spring —— IoC 容器详解》真是工程浩大,可以说Spring官网对核心中的核心IOC容器做了非常全面的使用说明,包括在《Spring揭秘》中让我一直没有成功的Method Injection,官网也解决了我的疑惑,并最终实验成功(未来会另起一篇单独对“方法注入”做以总结)。Spring官网的容器说明虽然全面,但是对于容器内部的处理并未深入解释,因此本篇博客做理论性的补充,总结自王富强老师的《Spring揭秘》第四章——“容器背后的秘密”。而且,本篇文章在工作

2020-11-15 13:07:40 63

原创 Spring —— IoC 容器详解

引言本篇博客总结自官网的《The IoC Container》,其中会有一些自己的语言描述和理解,大部分会摘抄官网的解释说明。主要介绍什么是 IoC 容器,什么是 Bean,依赖,Bean Definition,Bean Factory 等概念知识,帮助扫除 spring framework 框架知识盲区。一、什么是 Spring IoC 容器?什么是 Bean?IoC 也可以理解为依赖注入(dependency injection)(参考《控制反转 IOC 与依赖注入 DI》),它是一个只

2020-10-08 21:39:08 292

原创 控制反转 IOC 与依赖注入 DI

引言简单总结和巩固一下spring的核心原理——IOC和DI的概念,为什么IOC要叫控制反转?IOC和DI的关系是怎样的?一、IOC 控制反转初学者可能很好奇,为什么spring framework的对象托管容器叫做 IOC容器(Inversion of control)?设想这样一个场景,A对象依赖B对象。如果 new A,就需要先 new B,这是最基本的依赖创建方式。我们管 A 去申请 B 对象的过程,称为“资源查找”,可以理解为 A 对象需要向虚拟机申请一个资源 B 对象。传统

2020-10-02 10:57:37 129

原创 Spring Cloud —— 负载均衡与 Ribbon 应用

引言本篇博客简单介绍微服务负载均衡的概念,并通过 IDEA 多端口启动应用的方式,模拟多个应用实例,使用自定义和Ribbon 两种方式实现基本的负载均衡策略。微服务代码以《Spring Cloud Alibaba——Nacos实现服务治理》为基础。一、什么是负载均衡负载指的是系统接收请求的压力,通常来讲,单体应用如果接收的请求量过多,会对应用本身造成一定的并发困扰,导致逻辑出错,甚至是服务瘫痪。为了解决单个应用访问量过大的情况,人们很自然的想到将一个单体应用克隆多份,来分摊请求量,均衡.

2020-09-28 21:13:40 100

原创 Spring Cloud —— Feign 实现服务调用

引言本篇博客简单介绍 Feign 的基础知识和基本应用,以前一篇博客《Spring Cloud Alibaba——Nacos实现服务治理》为代码基础,实现更简单的微服务调用方式。一、什么是FeignrestTemplate 实现的微服务调用方式:// 调用商品微服务,查询商品信息Product prod = restTemplate.getForObject( "http://" + prodService.getHost() + ":" + prodService.ge

2020-09-26 21:38:03 106

原创 Spring Cloud Alibaba——Nacos实现服务治理

引言本博客总结微服务开发中各个微服务调用的实现,并使用nacos完成服务注册和发现。文章中会涉及到 maven 的使用,以及 spring boot 的一些知识。开发工具采用 IDEA 2020。一、模块设计本案例采用电商网站作为展示,涉及到的三个微服务有:shop-user、shop-product、shop-order,还有一个公共依赖模块shop-common。他们的依赖、调用关系如下所示:shop-user 是用户微服务,端口是807xshop-product 是商品微服

2020-09-26 20:53:45 213

原创 IDEA——Maven的配置与使用

引言简单介绍一下如何在 idea 中配置maven,以及如何去使用 maven 。一、配置 Maven homeMaven home 和 settings 文件一般都需要进行重新设置,关联到本机已经安装好的 maven 版本,settings 这里可以使用默认,也可以设置为 maven home 中 conf 文件夹下的 settings ,主要就是看平时的配置习惯了。二、自动下载依赖设置在 Maven -- Importing 中需要设置当我们的 pom 修改后,idea 自动

2020-09-06 07:42:08 1603

原创 IDEA——Git 的设置与使用

引言在本机下载好 Git 之后,再去在 IDEA 中设置 Git 相关的参数。一、设置Git执行程序路径二、导入一个新的远程 git 托管项目打开 File ——> New ——> Project from Version Control...设置好远程 git 项目的 URL 克隆地址,填写好本地存储的位置,点击右下角 Clone 即可,基本不需要其余的操作了。...

2020-09-05 10:54:56 88

原创 IDEA——常用代码模板

引言IDEA 提供了一些内置的代码模板,可以让开发者快速方便的使用,当然 eclipse 中也是有的,比如输入 syso 快速生成输出语句,main 快速生成主函数等。一、输出模板1、sout,最基本的输出语句,快速生成System.out.println();2、soutp,快速生成参数输出语句。3、soutm,快速生成方法名输出语句。4、soutv,快速生成最近一个变量的输出语句。5、xxx.sout 指定字符串进行输出,可以使用拼接变量的形式:回车直接:..

2020-09-04 21:09:52 179

原创 IDEA——常用快捷键

引言总结 IDEA 的常用快捷键,除了部分快捷键与 Eclipse 保持一致之外,枚举更多的实用快捷键。一、如何设置快捷键在 Settings -> Keymap 中,下拉框里选择 Eclipse ,即可将 IDEA 的快捷键设置为与 Eclipse 保持一致。但并不是所有的快捷键都与Eclipse 相同。二、我的快捷键列举出常用的快捷键,在选中了“Eclipse”后仍需要额外设置的,我会标注。2.1...

2020-09-04 17:09:51 109

原创 IDEA——常用基础设置

一、设置入口File—>Settings... 或者 在工具栏的“小扳手”图标。二、主题设置三、编辑通用设置设置面板中的 Editor3.1 自动导包可以设置IDEA自动为程序导包,在书写时加入准确的导包,在书写时优化导包(自动去掉未使用的)。3.2 大小写均有提示由于Java大小写敏感,所以如果希望在输入类似“string”依然有提示,那么需要设置此项:取消 Match case 勾选。3.3 字体样式3.4 注释字体颜色...

2020-09-04 09:54:28 90

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

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

2020-07-11 22:56:16 113

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

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

2020-07-03 20:29:21 135

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

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

2020-06-27 18:42:00 188

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

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

2020-06-25 21:15:26 126

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

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

2020-06-24 22:11:48 153

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

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

2020-06-22 23:20:00 107

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

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

2020-06-21 11:43:56 89

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

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

2020-06-07 08:14:03 405

原创 设计模式七大原则

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

2020-06-05 20:27:48 89

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

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

2020-05-24 20:57:06 260

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

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

2020-04-26 08:30:17 717 1

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

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

2020-03-28 19:01:16 348

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

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

2020-03-07 10:03:37 163

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

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

2020-02-05 11:27:19 233

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

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

2020-01-29 18:15:29 140

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

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

2020-01-27 12:33:49 176

翻译 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 133

翻译 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 1266

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

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

2020-01-22 20:18:24 213

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

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

2020-01-22 19:11:18 1684

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

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

2020-01-18 23:15:43 246

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

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

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

原创 Java 动态代理解析

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

2020-01-02 23:51:37 101

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

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

2020-01-02 14:50:42 178

空空如也

圣斗士Morty的留言板

发表于 2020-01-02 最后回复 2020-12-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

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