Heqianqian的博客

盛年不再有,一日难再晨,及时当勉励,岁月不待人.

Redis 探究底层存储结构

我们都知道Redis有五种数据类型,分别是字符串String,列表List,集合Sort,有序集合Sorted Set和散列表Hash,这些其实是Redis封装好的数据类型,Redis底层是用C语言编写的(大法好),所以用这边博客记录下这五种数据结构的底层是如何实现的。字符串类型C语言中字符串都是...

2017-09-29 17:37:51

阅读数 2051

评论数 0

Redis 持久化RDB和AOF原理

Redis持久化是如何工作的?持久化就是把数据放到断电后数据不会丢失的设备中,也就是我们通常理解的磁盘上。数据库在进行写操作时,有以下五个过程: 1) 客户端往服务器发送写操作(数据在客户端的内存中) 2) 数据库服务端接受到写请求的数据(数据在服务端的内存中) 3) 服务端调用write这个系统...

2017-09-28 15:21:26

阅读数 1737

评论数 0

Linux 安装部署Redis

在Linux上安装Redis,注意前提需要gcc环境首先去官网下载压缩包再传到服务器上,或者也可直接使用wget在线下载wget http://download.redis.io/releases/redis-4.0.2.tar.gz下载完后解压tar -zxvf redis-4.0.2.tar....

2017-09-28 09:46:00

阅读数 3243

评论数 0

MySQL 索引背后的数据结构及算法原理

摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用My...

2017-09-26 21:02:27

阅读数 1764

评论数 0

JVM 深入理解Java虚拟机读书笔记

讲道理,这是我第四遍看这本书了,不过之前有些知识点印象不深,现在记录一下。1.对象的创建为新生对象分配内存的两种方式 指针碰撞 一边是空闲的内存 一遍是已经使用的内存,中间一个指针作为标志,分配内存的时候就把指针往空闲内存移动一段和对象大小相同的距离 指针碰撞的前提是内存规整,一般使用复制清除...

2017-09-25 21:08:29

阅读数 1299

评论数 0

JSP 九大内置对象

JSP运行原理每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理,JSP引擎先把JSP翻译成一个_jspServlet(实质上也是一个Servlet),然后按照Servlet的调用方式进行调用由于JSP第一次访问时会翻译成servlet,所以第一次访问通...

2017-09-25 19:49:57

阅读数 1347

评论数 1

JVM SafePoint安全点分析

什么是safepointsafepoint可以用在不同地方,比如GC、Deoptimization,在Hotspot VM中,GC safepoint比较常见,需要一个数据结构记录每个线程的调用栈、寄存器等一些重要的数据区域里什么地方包含了GC管理的指针。从线程角度看,safepoint可以理解成...

2017-09-24 11:13:29

阅读数 1626

评论数 0

JVM 监控工具和调优工具[图形化]

之前有总结过JVM监控和调优的工具JVM 监控工具和调优工具 不过这些都是命令行和设置JVM参数的方式,现在来总结归纳下一些图形化的工具JConsoleJConsole 是一个基于JMX 的图形监控工具,用于连接正在运行的JVM,可以以图表化的形式显示各种数据,并可通过远程连接监视远程的服务器VM...

2017-09-24 10:33:47

阅读数 3406

评论数 0

JAVA Arrays.sort()和Collectons.sort() 原理分析

今天终于答辩结束,I’M FREEDOM!!! ^—^首先Collections内部也是使用Arrays的sort实现的,因此着重分析Arrays类内的sort是如何实现的主要分两种: 对于基本类型,使用调优的快排,双指针快排 对于引用类型,采用改进的归并排序 TimSort() 注意以下都是JD...

2017-09-24 10:18:46

阅读数 1964

评论数 0

JAVA 创建进程的两种方式

在Java中创建线程有两种方式:继承Thread类或者实现Runnable接口再重写run()方法 那么在Java中要如何创建进程呢?同样也有两种方法通过ProcessBuilder.start()方法先看进程类Processpublic abstract class Process { ...

2017-09-21 14:54:43

阅读数 4735

评论数 1

JAVA 多线程(一) ThreadPoolExecutor 原理分析

工作原理当一个新的任务被提交到ThreadPoolExecutor的execute()方法处理,如果当前池中正在运行的线程少于corePoolSize,就会创建一个新的线程来处理任务。 如果线程池中的线程大于等于corePoolSize,但是小于最大容量maximumPoolSize时,队列未满...

2017-09-21 14:34:31

阅读数 1277

评论数 0

JAVA AQS抽象队列同步器详解

之前看到一篇很好的介绍AQS抽象队列同步器的文章,分享下。框架维护了一个state(代表共享资源,注意是volatile修饰的保证可见性)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)state的访问方式有三种: getState() setState() compareAndS...

2017-09-21 08:47:50

阅读数 937

评论数 0

算法 卡特兰Catalan数

介绍Catalan数是组合数学中一个常在各种计数问题中出现的数列。一般项公式为 Cn的另一个表达形式为一般来说,我们编程时使用递推关系会更方便计算或即:C(n) = C(1)*C(n-1) + C(2)*C(n-2) + … + C(n-1)C(1).它的前几项为: 1, 1, 2, 5, 14,...

2017-09-20 18:44:36

阅读数 352

评论数 0

JAVA 并发类(六) ReentrantLock 源码分析

ReentrantLock实现了Lock接口,是一种递归无阻塞的同步机制。首先ReentrantLock有公平锁和非公平锁机制,使用构造方法ReentrantLock(boolean)指定,默认是非公平锁。公平锁的含义是线程按照发出请求的先后顺序获取锁,而非公平锁的机制下,线程可以插队,后到的线程...

2017-09-20 17:41:34

阅读数 376

评论数 0

JAVA 并发类(五) CopyOnWriteArraySet 源码分析

1.创建CopyOnWriteArrayList() 2.添加元素 add(E) 3.删除元素 remove(E) 4.遍历对象iterator();CopyOnWriteArraySet内部使用CopyOnWriteArrayList实现 基本属性: 适合元素不多,读操作较多的并发场合...

2017-09-20 14:46:35

阅读数 247

评论数 0

MySQL 存储引擎InnoDB和MyISAM的区别

1.事务处理InnoDB支持事务 MyISAM不支持 MyISAM的执行速度更快 性能更好2.增删改查操作MyISAM:如果执行大量的SELECT,会使用全文索引,是更好的选择 InnoDB:如果你的数据执行大量的INSERT或者UPDATE操作,出于性能方面的考虑,应该使用InnoDB表3....

2017-09-20 10:43:26

阅读数 244

评论数 0

JAVA 并发类(四) CopyOnWriteArrayList 源码分析

创建:CopyOnWriteArrayList() 添加元素: add(E) 获取单个对象:get(int)方法 删除对象:remove(E)方法 遍历所有对象:iterator() CopyOnWriteArrayList是一个线程安全,读操作无锁的ArrayList创建public CopyO...

2017-09-20 10:28:53

阅读数 275

评论数 0

JAVA 并发类(三) ConcurrentHashMap 归纳总结

1. JDK6和JDK7中的实现1. 设计思路ConcurrentHashMap采用了分段锁的设计,只有在同一个分段内才存在竞态关系,不同的分段锁之间没有锁竞争。相比于对整个Map加锁的设计,分段锁大大的提高了高并发环境下的处理能力。但同时,由于不是对整个Map加锁,导致一些需要扫描整个Map的方...

2017-09-18 16:00:54

阅读数 502

评论数 0

JAVA 并发类(二) ConcurrentHashMap 原理分析

HashTable是一个线程安全的类,使用synchronzied来锁住整张Hash表来实现线程安全,而ConcurrentHashMap允许多个修改操作并发执行,关键在于使用了锁分离技术。使用多个锁来控制对hash表的不同部分进行修改。ConcurrentHashMap内部使用段Segment来...

2017-09-18 15:05:18

阅读数 351

评论数 0

JAVA JDK7和JDK8中HashMap的实现

JDK7中的HashMapHashMap底层维护着一个数组,数组中的每一项都是一个Entrytransient Entry<K,V>[] table;存入HashMap的键值对key-value以Entry对象的形式都存储在该table数组中static class Entry<...

2017-09-18 14:00:47

阅读数 409

评论数 0

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