祈雨v的博客

种一棵树最好的时间是十年前,其次是现在

笔记声明

以下所有文章均为原来java学习过程中的笔记,特此写博客以防纸质笔记丢失。 另:祝自己早日找到工作

2016-12-24 21:22:23

阅读数 196

评论数 0

常用加密算法

Base64 import org.apache.commons.codec.binary.Base64; public class Base64Utils { public static void main(String args[]) { String value ...

2019-09-12 14:24:01

阅读数 9

评论数 0

mysql IS NULL 使用索引

简介 mysql的sql查询语句中使用is null、is not null、!=对索引并没有任何影响,并不会因为where条件中使用了is null、is not null、!=这些判断条件导致索引失效而全表扫描。 mysql官方文档也已经明确说明is null并不会影响索引的使用。 MySQ...

2019-08-28 18:58:51

阅读数 57

评论数 0

mysql字符集utf8mb4失效踩坑

现象 mysql数据表的字符集已经设置成了utf8mb4,但是通过JDBC向数据库写入4字节的emoji表情时报错,但是通过直接使用命令行插入该4字节的emoji表情时却成功了。示例如下: CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUT...

2019-08-17 17:39:13

阅读数 80

评论数 0

xml与javaBean转换

maven <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream&am...

2019-08-08 00:11:11

阅读数 30

评论数 0

初探InnoDB MVCC源码实现

转载自博客园本文链接地址: 初探InnoDB MVCC源码实现 1. 背景 本文基于MySQL InnoDB源码对InnoDB中非锁定一致性读是如何实现的作一些简单的探究。 2. 基本概念 2.1 隐藏字段 在经典之作《高性能MySQL》的1.4节中提及了MySQL中MVCC的实现,原著中提及了 ...

2019-08-03 15:12:49

阅读数 14

评论数 0

mysql索引原理

页分裂 每个数据页的开头记录了当前页的编号以及该数据页的上一页和下一页的编号,如图: 1-4字节为当前数据页数据的校验和; 5-8字节为当前数据页的编号; 9-12字节为上一个数据页的编号; 13-16字节为下一个数据页的编号; 即数据页以一个双向链表维持着顺序,每个数据页中以单向链表的格式...

2019-07-20 14:54:04

阅读数 37

评论数 0

redis之list源码分析

list的数据结构 redis的list的结构为quicklist,并非简单的类似java的LinkedList链表或者ArrayList数组,而是将链表和数值结合的一种数据结构。 宏观上list是一个quicklist链表,通过双向指针前后连接,但是链表的每一个节点是一个ziplist字节数组,...

2019-07-16 18:54:28

阅读数 27

评论数 0

redis之key过期源码分析

简述 redis的所有数据结构都可以设置过期时间,当key过期后再查询该key返回null。 redis实现key自动过期是通过额外保存需要自动过期的key和该key的过期时间,然后通过主动删除和定时任务删除两种机制来将过期的key移除并回收内存。在redis4.0版本引入了异步删除的机制,对于删...

2019-07-12 22:56:23

阅读数 28

评论数 0

redis之string源码分析

string的对象编码 string数据类型的对象编码有两种,分别是embstr和raw。两种编码的区别并不大,embstr相对于raw,内存空间连续。两者的数据格式见下图: redis的string数据之所以使用embstr和raw两种编码格式,是为了当一个string对象的值比较小时,使用一...

2019-07-10 22:12:52

阅读数 17

评论数 0

redis之hash源码分析

hash的对象编码 hash数据类型的对象编码有两种,分别是OBJ_ENCODING_ZIPLIST和OBJ_ENCODING_HT,即一种是以压缩数组;一种是哈希字典。两者的数据格式见下图: 编码转换 redis的hash数据之所以使用OBJ_ENCODING_ZIPLIST和OBJ_ENC...

2019-07-08 22:57:11

阅读数 31

评论数 0

java线程池之ThreadPoolExecutor

线程池状态转换 java.util.concurrent.ThreadPoolExecutor为JDK的线程池对象,线程池的状态和状态转换如下图: 使用方式 ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 10, 1, TimeUn...

2019-07-02 18:34:58

阅读数 21

评论数 0

mysql数据页结构

数据页结构 mysql默认每个数据页为16KB,InnoDB引擎的Compact行记录结构由以下字段组成: 变长字段长度列表 null值列表 记录头信息 列数据1 列数据N 不定长 不定长 5字节 变长字段长度列表 对于非固定长度的字段类型,例如varchar、text、b...

2019-07-01 20:43:25

阅读数 31

评论数 0

mysql回表致索引失效

简介 mysql的innodb引擎查询记录时在无法使用索引覆盖的场景下,需要做回表操作获取记录的所需字段。 mysql执行sql前会执行sql优化、索引选择等操作,mysql会预估各个索引所需要的查询代价以及不走索引所需要的查询代价,从中选择一个mysql认为代价最小的方式进行sql查询操作。而在...

2019-06-14 19:18:17

阅读数 205

评论数 0

Using temporary与Using filesort

通过explain查看sql的执行计划时,Extra字段的值往往会看到Using where; Using index; Using temporary; Using filesort,其中此次重点关注Using temporary; Using filesort。 Using temporary...

2019-06-13 23:35:26

阅读数 691

评论数 0

springboot(26)HTTP连接池

服务间基于HTTP通信相对于grpc、dubbo之类的通信效率要低得多,一方面是后者的传输数据结构紧凑,使用了序列化和压缩;另一方面,后者使用了TCP连接池,而前者默认情况下每一次服务间的通信会创建一个新的HTTP请求,会产生不小的性能消耗,对于需要额外非对称加密的HTTPS请求,性能消耗更加严重...

2019-06-12 23:17:49

阅读数 104

评论数 0

定时任务之ScheduledThreadPoolExecutor

java自带的定时任务执行器为ScheduledThreadPoolExecutor,继承于线程池管理器ThreadPoolExecutor,常用方法如下,程序将每2秒输出一次系统时间。 ScheduledThreadPoolExecutor executor = new ScheduledThr...

2019-05-23 22:17:13

阅读数 17

评论数 0

elasticsearch实现like查询

问题 elasticsearch查询需要实现类似于mysql的like查询效果,例如值为hello中国233的记录,即可以通过中国查询出记录,也可以通过llo查询出记录。 但是elasticsearch的查询都是基于分词查询,hello中国233会默认分词为hello、中、国、233。当使用hel...

2019-05-09 21:40:50

阅读数 362

评论数 0

elasticsearch实现乐观锁

elasticsearch的写操作是原子性的,可以通过如下两种方式实现es写操作的乐观锁。 基于_version version_type在elasticsearch6.x被移除,故该方法不适用于6.x版本,详见https://www.elastic.co/guide/en/elasticsear...

2019-05-01 11:43:48

阅读数 94

评论数 0

sql执行过程分析optimizer tracing

介绍 mysql从5.6的版本开始提供optimizer tracing功能,开发者可以通过该功能查看mysql的sql解释器的整个执行过程。 快速使用 # Turn tracing on (it's off by default): SET optimizer_trace="enabl...

2019-04-27 14:38:47

阅读数 41

评论数 0

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