摘要:
##1.1 vi/vim 先贴一段发展史: Vi的诞生 Vi源自QED编辑器,距今已有五十多年的历史。其发展历程如下: 1966年:伯克利分时系统的QED(“Quick EDitor”) 1969年7月:登月(仅供参考) 1969年8月:QED → AT&T的ed 1976年2月:ed →玛丽王后大 阅读全文
摘要:
##简介 AQS是Java并发包中很重要的一个抽象类,我们所使用的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore等都是基于AQS来实现的。 ##1.1 实现原理 AQS中维护了一个state变量这个表示共享的资源,以及一个C 阅读全文
摘要:
###1.1 什么是布隆过滤器? 首先,我们需要了解布隆过滤器的概念。 布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于1970年提出的。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的的 List、Map 阅读全文
摘要:
1.简单介绍一下Redis 简单来说redis就是一个使用c语言开发的数据库,不过与传统的数据库不同的是,Redis的数据是存在内存中的,也就是说它是内存数据库,所以读写速度非常快。 另外,Redis除了做缓存外,Redis也经常被用来做分布式锁,甚至是消息队列。 Redis提供了多种数据类型来支持 阅读全文
摘要:
这个类是在JDK7中新增的随机数生成器,它弥补了Random类在多线程下的缺陷。 Radndom类的局限性 在JDK7之前包括现在java.util.Random都是使用比较广泛的随机数生成工具。为什么说它在多线程中有缺陷,看下面一个例子: public class RandomTest { pub 阅读全文
摘要:
前言 多线程访问同一个共享变量的时候也别容易出现并发问题,特别是在多线程需要对一个共享变量进行写入的时候。为了保证线程的安全,一般使用者在访问共享变量的时候需要进行适当的同步。如下图所示 同步的措施一般是加锁,但是加锁显然加重了使用者的负担。那么有没有一种方式可以做到,当创建一个线程过后,每个线程对 阅读全文
摘要:
一首诗送给各位: 全值匹配我最爱,最左前缀要遵守; 带头大哥不能死,中间兄弟不能断; 索引列上少计算,范围之后全失效; Like百分写最右,覆盖索引不写星; 不等空值还有or,索引失效要少用; VAR引号不可丢,SQL高级也不难! 举个栗子: 假设index(a,b,c) |where语句|索引是否 阅读全文
摘要:
首先我们得先了解java的对象结构 可以看到分别由三个部分组成对象头,实例数据,以及填充位 查看JDK1.8 String源码可以看到一个String对象由以下组成: @Stable private final byte[] value; /** Cache the hash code for th 阅读全文
摘要:
类的生命周期 类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下 7 个阶段: 加载 验证 准备 解析 初始化 使用 卸载 验证、准备、解析 3 个阶段统称为连接。 加载、验证、准备、初始化和卸载这 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始(注意是“开 阅读全文
摘要:
对象的内存布局 在 HotSpot 虚拟机中,对象的内存布局分为以下 3 块区域: 对象头(Header) 实例数据(Instance Data) 对齐填充(Padding) 对象头 对象头记录了对象在运行过程中所需要使用的一些数据: 哈希码 GC 分代年龄 锁状态标志 线程持有的锁 偏向线程 ID 阅读全文