- 博客(17)
- 收藏
- 关注
原创 BloomFilter 布隆过滤器原理分析
我们知道,在用户和DB之间加入缓存可以有效缓解DB存取数据的性能瓶颈。就以Redis为例,缓存可以把DB中的数据以一个key-value的形式放入内存以便降低请求的平均延时,然而在流量洪峰之后很可能出现大范围key失效的缓存雪崩问题,除了设置key存活时间的偏移量,还可以通过BloomFilter布隆过滤器来解决缓存雪崩问题。一、查询原理布隆过滤器,可以说是一个二进制向量和一系列随机映射函数...
2020-04-17 18:23:09
223
原创 Java源码分析——HashMap(JDK1.8)
JDK 1.8 对 HashMap 进行了比较大的优化,底层实现由之前的 “数组+链表” 改为 “数组+链表/红黑树”,关于HashMap在JDK1.7中的分析在上篇文章:Java源码分析——HashMap(JDK1.7)HashMap在JDK1.8的新特性1、HashMap属性public class HashMap<K,V> extends AbstractMap<...
2020-04-13 19:52:30
149
原创 Java源码分析——HashMap(JDK1.7、JDK1.8)
HashMap在JDK1.7与JDK1.8中有较大的差别,下文就先以JDK1.7为例剖析源码,然后再与JDK1.8比较二者之间的差别。首先看与HashMap有直接关系的类与接口:HashMap 是基于哈希表的 Map 接口的实现,以 Key-Value 的形式存在,即存储的对象是 Entry (同时包含了 Key 和 Value) 。在HashMap中,其会根据hash算法来计算key-va...
2020-04-12 20:18:40
296
原创 git常用命令及分支管理
在熟悉Git命名之前,我们要先了解GIt所管理的仓库的概念。如上图所示,本地仓库即为工作区和版本区的集合。工作区:存储磁盘上的文件集合版本区:即.git文件git常用命令·git init 初始化,表示将整个文件变成可以被Git管理的仓库。另外,输入git init指令后仓库就会出现版本区,与之对应的是会出现一个隐藏的.git文件夹·git add 后可跟文件名+后缀名,可将指定文件...
2020-01-09 10:44:25
155
原创 Java反射机制
所谓反射,就是能够让运行于JVM中的程序检测和修改运行时的行为。而Class反射对象描述类语义结构,可以从Class对象中获取构造函数、成员变量、方法类等类元素的反射对象,并以编程的方式通过这些反射对象对目标类对象进行操作。这些反射对象类在java.reflect包中定义。主要的反射类Constructor类的构造函数反射类,会通过Class#getConstructor()方法获取类的构...
2020-01-08 17:42:08
106
原创 类加载器与双亲委派模型
这里写自定义目录标题一、类加载器工作机制二、双亲委派模型三、实例所谓类加载器,就是寻找类的字节码文件并构造出这个类在JVM内部的表示对象,通过这个表示对象可以获知与这个类对应的Class文件的相关信息。一、类加载器工作机制类加载器将一个类载入JVM中,通常需要经过以下几个步骤:(1)加载JVM会通过一个类的全限定名称来获取这个类的二进制字节流,然后将这个字节流加载进入JVM的方法区,同时...
2020-01-08 17:19:07
109
原创 利用Huffman编码进行文件的压缩与解压
哈夫曼编码是一种以哈夫曼树(最优二叉树,带权路径长度最小的二叉树)为基础的基于统计学的变长编码方式。其基本思想是:将使用次数多的代码转换成长度较短的编码,而使用次数少的采用较长的编码,并且保持编码的唯一可解性。在计算机信息处理中,经常应用于数据压缩。是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。而对于Huffman编码树的构造,我们可以采用贪心算法的思想,即循环地选择具有最低频数...
2019-12-20 17:03:17
956
原创 文件大小和占用空间为什么不同
最近使用Huffman编码计算文件压缩率时发现一个问题,在文件面板属性里,不但有文件的大小,而且还有文件的占用空间。那么这个文件大小和文件的占用空间有什么区别呢?原来,文件系统是通过簇来作为文件的基本存储形式,每个簇只能被一个文件占据;而且簇的大小是硬盘分区时决定的,比如,目前的固态硬盘采用4k的簇大小,换句话说,所有文件的占用空间肯定是能被2^n整除。如果一个文件大小即视刚刚超过4096字节,...
2019-12-13 09:53:16
2948
原创 深入理解Java NIO
所谓NIO,即new I/O,在JDK1.4用于改善原来I/O中的不足,通过进一步减少I/O操作中阻塞的粒度来提高I/O效率,所以也被称为NonBlocking I/O,非阻塞I/O一、IO与NIO的区别要说两种I/O的区别,其实它是被划分进不同的I/O模型中的,所以我们就先来看一下五种I/O模型的区别五种I/O模型:1.1 阻塞I/O模型在用户进程(线程)中调用执行的时候,进程会等待该...
2019-12-03 10:31:26
210
原创 动态规划算法的设计与实现
动态规划的思想方法与分治思想类似,都是将一个问题逐次划分为若干个子问题,然后将子问题逐一求解。然而,对于有些递归得到的子问题,却有相同的解法,而计算机却并不知道这一点,所以对于不是相互独立的子问题,分治方法将会重复计算一些相同的子问题,效率较低。所以,动态规划最主要的思想就是对于重叠性的子问题,将会从规模最小的子问题开始计算,并且用恰当数据结构存储子问题的解,已减少重复计算。以下,将会通过寻找加权...
2019-11-18 14:29:02
646
原创 红黑树原理详解
本篇文章主要讲述的是红黑树的插入以及删除的具体操作,而在此之前,我们将先简要介绍一下红黑树的基本特征:1、若由红黑两种颜色结点组成的二叉搜索树满足以下条件,则称为红黑树。(1)树根节点始终为黑色(2)外部节点均为黑色(3)其余节点若为红色,则其孩子节点必然为黑色(4)任意外部节点的黑深度相同2、所有红黑树都可转化为一个4阶b-树(具体来说是一颗(2,4)树),具体转化的依据是将所有红节...
2019-11-02 21:23:35
223
原创 Java中main()方法为什么是static的
今天刷Leetcode时候遇见了一个小问题,当时我就先把代码复制到IDEA中自己编译一下,但是在实例化对象时候却碰到了这样的问题。废话不多说,直接上图首先是测试类,然后声明一个内部类ListNode,一个简单的链表接下来就是main(),但问题来了,为什么48、49行实例对象时会报错呢,我们来看看编译器具体怎么说哦,编译器给了两个提示,要么将内部类ListNode加关键字static,...
2019-10-30 23:51:22
2758
1
原创 数据库事务的并发控制(一)
一、事务模型关于事务,就是构成单一逻辑工作单元的操作集合。从数据库的角度来看,必须保证事务正确以及完整的执行顺序,在SQL中事务通常用begin transaction和end transaction语句来界定。ACID特性对于数据库维护的事务,通常有以下四个特性:原子性事务中的多个数据库操作是一个不可分割的原子单元整体,只有所有的操作执行成功,整个事务才提交;事务中的任何一个数据库操...
2019-10-29 16:56:42
280
原创 Java并发编程——如何保证对象的线程安全
前面我们已经介绍了线程安全和同步的一些知识,但是前边几节保证线程安全的方法都只局限于一个方法或一个类,如果要对一个线程安全的对象加以修改,那么还需重新判断是否是线程安全。所以我们这一节就从对象间组合的角度再来具体探讨线程安全。设计线程安全的类通过之前几节的学习我们已经知道,设计一个线程安全的类至少要满足三个步骤:1. 找出构成对象状态的所有变量2. 找出上述变量的约束性条件3. 建立对象...
2019-10-19 14:51:38
756
原创 计算机网络-运输层 三次握手和四次挥手
继续上篇文章中提到的,这节中我们将详细讨论TCP的建立与拆除过程,也就是我们常听到的三次握手和四次挥手。建立TCP连接在了解TCP连接前我们需了解部分TCP报文段结构。TCP的首部报文除了源端口号和目的端口号外,还存储有上篇文章中提到过的分组序号、确认号、窗口长度及检验和等信息,除此之外,还有一个6比特长度的标志字段,用于标识连接的建立和拆除(如SYN、RST、FIN)等。上篇文章:计算机网...
2019-10-12 16:42:02
254
原创 计算机网络-运输层
运输层协议运输层协议为运行在不同主机上的应用进程间提供了逻辑通信。具体来看,就是运输层为它上层的应用层的不同进程提供了通信服务;而将它下层的网络层的端对端通信细化为进程与进程间通信。根据封装-分层的思想,运输层为它上层的应用层多路复用与多路分解TCP连接UDP连接...
2019-10-10 21:43:35
568
原创 计算机网络-应用层
这里写自定义目录标题一、域名系统DNSDNS工作机理DNS缓存二、客户-服务器体系结构HTTP协议非持续连接的HTTP持续连接的HTTPFTP协议三、P2P体系结构合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式...
2019-10-07 22:06:39
308
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人