自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

三易专栏

三易专栏

  • 博客(125)
  • 资源 (10)
  • 收藏
  • 关注

原创 Java基础之try catch finally的原理

先看一段代码public class TestMain { public static int test() { int i = 0; try { System.out.println("业务执行"); // 标记1 i = 1 / 0; System.out.println("业务执行完成"); i++; return i; // 标记2 } catch (Exception e) { System.out.println("捕捉异常"); // 标记3 i++; return i; // 标记4 }

2022-02-12 12:02:19 1054

原创 事务是怎样工作的

目录事务特性事务隔离性解决什么问题隔离级别事务隔离实现原理可重复读隔离级别的实现原理知识铺垫InnoDB中的事务ID数据的多版本(MVCC)InnoDB 为每个事务构造了一个由事务ID组成的数组一致性视图(read-view)举例:可重复读的事务隔离级别工作原理问答问:回滚日志不会一直保留,什么时候删除问:为什么尽量不要使用长事务问:如何正确的开启事务问:哪些操作会导致长事务,或者说如何避免长事务问:如何查询数据库当前所有的事务事务特性

2021-09-03 08:36:16 215

原创 join 是怎样工作的

目录数据准备Index Nested-Loop Join(NLJ)(扫描被驱动表用到索引)Block Nested-Loop Join(BNL)(扫描被驱动表未用到索引)假设 join bufer 足够大实际中 join buffer 是有限制的如何选择驱动表走索引的情况不走索引的情况文中“小表”的含义举例1举例2举例3结论Multi-Range Read(MRR)Batched Key Access(BKA)BNL 算法的性能问题数据准备

2021-09-02 08:21:51 182

原创 group by 是怎样工作的

数据准备CREATE TABLE `t2` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `index_a` (`a`)) ENGINE=InnoDB;在表 t2 中插入数据 100 条数据for(int i=1; i<=100; i++) { insert into t2(id, a, b) values

2021-08-31 23:10:25 208

原创 order by 是怎样工作的

一图胜千言rowid排序排序的时候,只将 order by 后面排序字段以及记录主键放入到 sort buffer 中。比如 select a,b,c from t order by a desc,只将字段a,表主键id 放入 sort buffer 中全字段排序排序的时候,将select sql中所有字段都放入到 sort buffer 中一起参与排序,无需根据rowid 再去主键索引上获取记录。比如 select a,b,c from t order by a desc,只将

2021-08-29 19:36:35 194

原创 innodb存储引擎之:索引的数据结构

什么是 目录项每个页对应一个目录项,每个目录项包括下面两个部分页的用户记录中最小的主键值,用 key 来表示 页号,用 page_Do 表示主键索引结构示意图二级索引结构示意图联合索引结构示意图InnoDB 中 B+ 树索引的注意事项根节点千年不动窝一个 B+ 树索引的根节点自创建之日起便不会再移动(也就是页号不再改变)。这样只要我们对某个表建立一个索引 ,那么它的根节点的页号便会被记录到某个地方,后续凡是 InnoDB 存储引擎需要用到这个索

2021-08-26 23:25:49 145

原创 更详细的执行计划 optimizer_trace

目录数据准备查看 optimizer_trace数据准备CREATE TABLE `t2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11), `b` int(11), `c` varchar(16) , `create_time` datetime, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;插入数据for(int i=1; i&

2021-08-26 23:21:00 199

原创 mysql是如何选择索引的(为什么会选错索引)

什么是查询成本查询成本 = I/O成本 + CPU成本I/O 成本:将数据从磁盘加载到内存的损耗时间称为 I/O 成本(对 memory 引擎的表除外,使用与磁盘性的存储引擎,例如 myisam,innodb)CPU成本:读取记录,检测记录是否满足条件,对结果集进行排序等这些操作的损耗时间称为 CPU 成本对Innodb 存储引擎来说,读取一个数据页花费的成本默认是 1.0;读取记录、检测记录是否满足条件成本默认是 0.2。这里说的 “1.0” “0.2”,在mysql中是可以设置的

2021-08-26 23:12:24 360

原创 innodb存储引擎之:索引的数据结构(B+TREE)

什么是 目录项每个页对应一个目录项,每个目录项包括下面两个部分页的用户记录中最小的主键值,用 key 来表示 页号,用 page_no 表示主键索引结构示意图二级索引结构示意图联合索引结构示意图InnoDB 中 B+ 树索引的注意事项根节点千年不动窝一个 B+ 树索引的根节点自创建之日起便不会再移动(也就是页号不再改变)。这样只要我们对某个表建立一个索引 ,那么它的根节点的页号便会被记录到某个地方,后续凡是 InnoDB 存储引擎需要用到这个索引时,都会从那个固定

2021-08-25 21:29:41 331

原创 innodb存储引擎之:innodb buffer pool

目录缓冲页缓冲页的控制块缓冲页的哈希表free 链表flush 链表LRU 链表从 innodb buffer pool 看 select 语句的执行过程多个 innodb buffer pool 实例innodb_buffer_pool_chunk_size查看 innodb buffer pool 状态信息小小的扩展点问答:缓冲页innodb buffer pool 将一块连续的内存划分成了,大小固定的缓冲页。一个缓冲页保存这一个数据页上的所有数据

2021-08-25 21:20:32 291

原创 innodb存储引擎之:表空间

概览https://www.mubucm.com/doc/5X-MdVzKDKB为什么innodb设计了“区”的概念如果以页为单位来分配存储空间,B+树索引中同一层级的双向链表相邻的两个页之间的物理位置可能离得非常远,会导致遍历索引的时候,无法使用顺序I/O,所以引入了“区”的概念为什么innodb设计了“碎片区”的概念如果有些表的本身的记录数很少,例如业务配置类型的表,直接以“区”为单位分配存储空间,就会导致磁盘空间的浪费。所以mysql规定,当一个表占用的页数量超过.

2021-08-24 12:52:40 253

原创 innodb 存储引擎之:记录的数据结构,数据页的数据结构

目录innodb 行格式COMPACT 行格式记录的额外信息变长字段长度列表NULL值列表记录的头信息记录的真实数据innodb数据页结构示意图File HeaderPage Header(页头部)lnfimum + SupremumUser RecordsFree SpacePage Directory(页目录)File Trailer一个数据页的示意图innodb 行格式innodb 有4中不同类型的行格式,分别是COMPACT

2021-08-23 23:32:46 181

原创 memory 存储引擎

目录memory 引擎memory 表结构示意图memory表的特点在memory表上创建 B-Tree 索引为什么不建议在生产环境使用 memory 引擎的表锁粒度数据持久化问题主从数据同步问题在双M高可用架构中,更诡异的现象memory 引擎memory 表结构示意图memory表的特点Memory 引擎的数据和索引是分开的 内存表的数据部分以数组的方式单独存放,而主键 id 索引里,存的是每个数据的位置(数组的下标)。主键 id 是 has

2021-08-23 23:05:10 459

原创 mysql 逻辑架构图概览

逻辑架构图Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。连接器管理链接,权限验证 校验.

2021-08-23 13:16:57 245 1

原创 创建型-适配器模式

描述这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。对于这个模式,有一个经常被拿来解释它的例子,就是 USB 转接头充当适配器,把两种不兼容的接口,通过转接变得可以一起工作。实现方式类适配器,类适配器使用继承关系来实现 对象适配器,对象适配器使用组合关系来实现针对这两种实现方式,在实际的开发中,到底该如何选择使用哪一种呢?判断的标准主要有两个,一个是 Adaptee 接口的个数,另一个是 Adaptee 和 ITar.

2021-02-20 17:43:00 297

原创 结构型-装饰器模式

描述装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。除此之外,装饰器模式还有一个特点,那就是可以对原始类嵌套使用多个装饰器。为了满足这个应用场景,在设计的时候,装饰器类需要跟原始类继承相同的抽象类或者接口。代码示例假设这样一个场景,根据 userId 获取用户数据。先从缓存中获取,如果缓存中没有,则从第三方获取并写入到缓存中。 // 定义获取用户数据接口 publicin..

2021-02-20 17:41:38 92

原创 结构型-桥接模式

将抽象和实现解耦,让它们可以独立变化。这里所说的“抽象”不是某个具体的抽象类或者接口,而是一类抽象类、接口或者说由多个抽象类、接口组成的这个“抽象”。而这里说的“实现”也是对“抽象”中的抽象类、接口的具体实现。引用别人的一段话桥接看着就像是面向接口编程这一原则的原旨—将实现与抽象分离。让我迷惑的是,让两者独立变化的说法,接口不是应该稳定吗,为什么要变化?多个纬度独立变化那个解释倒是比较容易理解。文中举的警报的例子很贴切。紧急程度和警报的方式可以是两个不同的纬度。可以有不同的组合方式。这与slf4

2021-02-20 17:39:54 71

原创 创建型-建造者模式

解决了什么问题如果一个类中有很多属性,为了避免构造函数的参数列表过长,影响代码的可读性和易用性,我们可以通过构造函数配合 set() 方法来解决。但是,如果存在下面情况中的任意一种,我们就要考虑使用建造者模式了。我们把类的必填属性放到构造函数中,强制创建对象的时候就设置。如果必填的属性有很多,把这些必填属性都放到构造函数中设置,那构造函数就又会出现参数列表很长的问题。如果我们把必填属性通过 set() 方法设置,那校验这些必填属性是否已经填写的逻辑就无处安放了。 如果类的属性之间有一定的依赖关系或

2021-02-20 17:33:54 70

原创 创建型-原型模式

注意注意,原个毛线是什么如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。实现方法浅拷贝:只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用对象的引用对象……而深拷贝得到的是一份完完全全独立的对..

2021-02-20 17:28:53 52

原创 结构型-代理模式

解决什么问题当需要在不修改一个类的前提下,对类的方法进行功能增强时,就需要使用代理模式。或者说 通过引入代理类来给原始类附加功能应用场景代理模式常用在业务系统中开发一些非功能性需求,比如:监控、统计、鉴权、限流、事务、幂等、日志。我们将这些附加功能与业务功能解耦,放到代理类统一处理,让程序员只需要关注业务方面的开发。除此之外,代理模式还可以用在 RPC、缓存等应用场景中。如何实现的静态代理,代理类 // 原始类 publicclassUser { ...

2021-02-20 17:24:51 71

原创 创建型-工厂模式

目录场景假设代码示例说明简单工厂模式工厂方法模式那什么时候该用工厂方法模式,而非简单工厂模式呢?抽象工厂总结场景假设我们根据配置文件的后缀(json、xml、yaml、properties),选择不同的解析器(JsonRuleConfigParser、XmlRuleConfigParser、YamlRuleConfigParser、PropertiesRuleConfigParser),将存储在文件中的配置解析成内存对象 RuleConfig。说明:实例代码中的I..

2021-02-20 17:14:33 73

原创 创建型-单例模式

定义一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。解决了什么问题(应用场景)从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类。 我们还可以使用单例解决资源访问冲突的问题。如何实现要实现一个单例,我们需要关注的点无外乎下面几个:构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例; 考虑对象创建时的线程安全问题; 考虑是否支持延迟加载;..

2021-02-20 17:08:32 86 1

原创 自定义 Java ClassLoader

首先看一下 java.lang.ClassLoader 方法 loadClass(String name) 方法的源码public Class<?> loadClass(String name) throws ClassNotFoundException { return loadClass(name, false);}protected Class<?> loadClass(St

2017-02-16 19:50:09 424

原创 使用redis创建自己的分布式锁

RedisLock 简介1:支付公平锁,非公平锁(只是在单机器范围内) 2:不支持锁的重入。 3:参数可配置RedisLock 使用演示注意:演示的demo中使用的redisClient,是我们公司自己把redis给封装了。需要使用者把 RedisLock 的 属性 redisClient 的对象类型修改为 自己的 redis 客户端的对象类型,列入 jedis,并且 spring xml 中

2016-12-05 18:07:08 3912

原创 java自定义线程阻塞

LockSupport 线程 阻塞

2016-11-15 15:19:39 553

原创 根据表结构自动生成mybatis文件

版本由1.0升级2.0 (本人QQ:1135409377,加好友请写 “根据表结构自动生成mybatis文件”) 点击下载工具 1:运行环境 安装jdk1.6或者更高版本,配置操作系统环境变量,window操作系统。 2:执行命令,运行jar包 (1)java -jar IbatisMapperCreate_2.0.jar 显示下图,目前文件编码格式支持UTF-8,GBK,如果你的项

2016-10-17 15:24:28 1781 5

原创 在web项目中使用 ThreadLocal 要谨慎,使用不当容易造成内存溢出

这里使用的servlet容器是 tomcat如果在web项目中,使用 ThreadLocal 不当,会造成 OutOfMemoryError。说明原因前 1:先讲一下 ThreadLocal,Thead,ThreadLocalMap 三者之间的一个关系。(大家可以去看一下ThreadLocal的实现源码,可而参考我的另一篇文章点击查看) ThreadLocalMap 是 ThreadLocal

2016-09-29 13:56:26 12619 2

原创 freemarker如何编写自定义标签

编写自定义标签需要实现 freemarker.template.TemplateDirectiveModel 接口 demo如下freemarker模板 freemarker自定义标签.ftl <#assign x = 1> <@repeat count=4> Test ${x} <#assign x = x + 1> package com.yydb.lp.freemarker

2016-09-06 10:39:31 7637 1

原创 cookie 小解

cookie的组成 name 名称 value 内容 Domain 作用域 Path 作用路径 Max-Age 多少秒后过期 HttpOnly 脚本不可访问 Secure 只有在https下才传递cookiecookie的作用域默认为当前域名,作用路径默认为当前路径 cookie 只有在 有效的作用域和作用路径下,浏览器才会将cookie 发送给服务器

2016-09-01 09:51:58 297

原创 ajax 跨域请求(后端语言为 Java)

ajax 跨域请求

2016-09-01 09:50:54 7973 3

转载 Spring ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别

Spring ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别

2016-03-14 14:30:04 411

转载 Web监听器导图详解

Web监听器导图详解

2016-03-14 11:28:45 374

原创 dubbo-monitor-simple-2.5.3-assembly 简易监控中心安装

dubbo-monitor-simple-2.5.3-assembly 简易监控中心安装

2016-03-01 11:43:49 7460 1

原创 spring整合dubbo-2.5.3(使用TCP广播或者zookeeper 暴露和发现服务)

spring整合dubbo-2.5.3

2016-02-29 11:25:44 4294

原创 zookeeper学习-3(如何使用zookeeper进行集群管理-java版本)

zookeeper学习-3(如何使用zookeeper进行集群管理-java版本)

2016-02-15 14:48:40 2395

原创 zookeeper学习-2(如何使用zookeeper进行配置管理-java版本)

如何使用zookeeper进行配置管理

2016-02-14 17:03:38 712

原创 zookeeper学习-1(安装和配置)

注意:安装zookeeper 前 需要先安装 jdkzookeeper 安装和配置 1:下载安装包 zookeeper-3.5.1-alpha.tar.gz 2:解压安装包 tar -zxvf zookeeper-3.5.1-alpha.tar.gz (我下载到了 /usr/local/ 下,也在此目录 解压包) 3:修改文件夹名称 mv zookeeper-3.5.1-alph

2016-02-14 15:30:09 2084

原创 redis安装,命令详解,配置详解,java客户端如何使用,都在这里

redis安装,命令详解,配置详解,java客户端如何使用

2016-01-27 17:16:38 423

原创 apache-common-pool2(配置参数详解,以及资源回收,从池中获取资源,将资源返还给池 逻辑解析)

apache-common-pool2(资源池配置参数详解,以及资源回收,从池中获取资源,将资源返还给池 逻辑解析)

2016-01-26 17:29:29 11904

原创 基于 java nio 长连接实现的聊天室

基于 java nio 长连接实现的聊天室

2016-01-26 14:51:04 5761 2

dubbo-monitor-simple-2.5.3-assembly

dubbo-monitor监控中心,dubbo-monitor监控中心

2016-03-01

commons-pool2-2.3.jar

apache 开源的资源池项目 commons-pool2-2.3.jar

2016-01-13

spring整合rabbitmq需要的jar包(spring版本4.2.0)

spring整合rabbitmq需要的jar包(spring版本4.2.0)

2015-10-26

如何基于tcp进行http交互

如何实现基于tcp协议进行http协议交互。手机网页遥控器,其实就是在 android端利用 SocketServer 启动tcp协议进行http协议交互。源码开放给大家了,大家可以根据自己的需要,进行修改。

2015-07-28

aopalliance源码

aopalliance源码

2014-10-22

java jpcap 抓包

jpcap是使用java实现的抓包工具。该资源有详细的说明使用文档,

2014-07-14

commons-lang3-3.3.2-src

commons-lang3-3.3.2 的源码

2014-05-04

commons-lang3-3.3.2

hashCodeBuilder EqualsBuilder ToStringBuilder

2014-05-04

建设银行MD5加密算法,httpClient发送https链接以及接受返回的xml

建设银行MD5加密算法,httpClient发送https链接以及接受返回的xml

2012-11-29

工商银行b2c证书拆分工具

工商银行b2c证书拆分工具 将.pfx文件拆分为公钥和私钥 使用方法,将压缩包加压到本地,直接点击derive.exe 弹出命令行窗口, 之后的步骤请参考解压出的文档。

2012-11-23

空空如也

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

TA关注的人

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