数据库的事务
事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行 。事务是一个不可分割的工作逻辑单元事务必须具备以下四个属性,简称 ACID 属性: 1. 原子性(Atomicity)事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行 2. 一致性(Consistency)当事务完成时,数据必须处于一致状态 3. 隔离性(Isolation)对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。 4. 永久性(Durability)事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性。
Radix Tree、B+树、跳表之间的区别
B+树和跳跃表有什么关联? B+树和跳跃表这两种数据结构在本身设计上是有亲缘关系的,其实如果把B+树拉直来看不难发现其结构和跳跃表很相似,甚至B+树的父亲结点其实类似跳跃表的level层级。 在当前计算机硬件存储设计上,B+树能比跳表存储更大量级的数据,因为跳表需要通过增加层高来提高索引效率,而B+树只需要增加树的深度。此外B+树同一叶子的连续性更加符合当代计算机的存储结构。然而跳表的层高具有随机性,当层高较大的时候磁盘插入会带来一定的开销,且不利于分块。 为什么Redis不使用B+树呢而选择跳表呢? 因为数据有序性的实现B+树不如跳表,跳表的时间性能是优于B+树的(B+树不是二叉树,二分的效率是比较高的)。此外跳表最低层就是一条链表,对于需要实现范围查询的功能是比较有利的,而且Redis是基于内存设计的,无需考虑海量数据的场景。 Radix Tree优势在哪? 本质上是前缀树,所以存储有「公共前缀」的数据时,比 B+ 树、跳表节省内存 没有公共前缀的数据项,压缩存储,value 用 listpack 存储,也可以节省内存 查询复杂度是...
不重复最长字符串
输出 给定字符串中 不重复的最长字串的 字符个数123456789101112131415161718192021222324252627282930313233343536public static int lengthOfLongestSubstring(String str){ if (str == null || "".equals(str)){ return 0; } char[] chars = str.toCharArray(); return 0; } public int lengthOfLongestSubstring_(String s) { if(s == null || s.equals("")){ return 0; } char[] arr = s.toCharArray(); ...
Java语言中各种引用的区别
1、说明不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。 强引用(“Strong”...
Linux 命令awk
1 简介awk是一个报告生成器,它拥有强大的文本格式化的能力,这就是专业的说法。 awk是由Alfred Aho 、Peter Weinberger 和 Brian Kernighan这三个人创造的,awk由这个三个人的姓氏的首个字母组成。 awk早期是在unix上实现的,所以,我们现在在linux的所使用的awk其实是gawk,也就是GNU awk,简称为gawk,awk还有一个版本,New awk,简称为nawk,但是linux中最常用的还是gawk。 awk其实是一门编程语言,它支持条件判断、数组、循环等功能。所以,我们也可以把awk理解成一个脚本语言解释器。 grep 、sed、awk被称为linux中的”三剑客”。 grep 更适合单纯的查找或匹配文本 sed 更适合编辑匹配到的文本 awk 更适合格式化文本,对文本进行较复杂格式处理 2 awk命令使用 awk [选项参数] 'script' var=value file(s) 或 awk [选项参数] -f scriptfile var=value...
Ubuntu桌面快捷图标
新建文件1touch idea.desktop 写入下面内容1234567891011121314151617[Desktop Entry]Name=IntelliJ IDEAComment=IntelliJ IDEA//idea 启动命令路径Exec=/home/edwin/work/work/soft/idea/bin/idea.sh //idea 图标路径Icon=/home/edwin/work/work/soft/idea/bin/idea.pngTerminal=falseType=ApplicationCategories=Developer;
Synchronized原理分析(一)
synchronized 对应的内存间交互操作为:lock 和 unlock,在虚拟机实现上对应的字节码指令为 monitorenter 和 monitorexit。 synchronized 关键字底层原理属于 JVM 层面。 1、synchronized同步语句块1234567public class SynchronizedClass(){ public void method(){ synchronized(this){ System.out.println("MY SYNCHRONIZED METHOD...") } }} 通过 JDK 自带的 javap 命令查看 SynchronizedClass 类的相关字节码信息:首先切换到类的对应目录执行 javac SynchronizedClass.java 命令生成编译后的 .class 文件,然后执行 javap -c -s -v -l SynchronizedClass.class...
Synchronized原理分析(二)
1、Synchronized同步锁 synchronized 它可以把任意一个非 NULL 的对象当作锁。他属于独占式的悲观锁,同时属于可重入锁。 1.1、synchronized作用范围 1)作用于方法时,锁住的是对象的实例(this)。 2)当作用于静态方法时,锁住的是 Class 实例,又因为 Class 的相关数据存储在永久带 PermGen(jdk1.8 则是 metaspace),永久带是全局共享的,因此静态方法锁相当于类的一个全局锁,会锁所有调用该方法的线程; 3)synchronized 作用于一个对象实例时,锁住的是所有以该对象为锁的代码块。它有多个队列,当多个线程一起访问某个对象监视器的时候,对象监视器会将这些线程存储在不同的容器中。 1.2、synchronized核心组件(6个) 1)Wait Set:哪些调用 wait 方法被阻塞的线程被放置在这里; 2)Contention List:竞争队列,所有请求锁的线程首先被放在这个竞争队列中; 3)Entry List:Contention List...
B树与B+树的区别
1、什么是B树 如果用二叉树作为索引的实现结构,会让树变得很高,增加硬盘的I/O次数,影响数据查询的时间。因此一个节点就不能只有2个子节点,而应该允许有M个子节点(M>2)。 B树的出现就是为了解决这个问题,B树的英文是Balance Tree,也就是平衡的多路搜索树,它的高度远小于平衡二叉树的高度。在文件系统和数据库系统中的索引结构经常采用B树来实现。 B树的结构 B树作为平衡的多路搜索树,它的每一个节点最多可以包括M个子节点,M称为B树的阶。同时你能看到,每个磁盘块中包括了关键字和子节点的指针。如果一个磁盘块中包括了x个关键字,那么指针数就是x+1。对于一个100阶的B树来说,如果有3层的话最多可以存储约100万的索引数据。对于大量的索引数据来说,采用B树的结构是非常适合的,因为树的高度要远小于二叉树的高度。 一个M阶的B树(M>2)有以下的特性: 根节点的儿子数的范围是[2,M]。 每个中间节点包含k-1个关键字和k个孩子,孩子的数量=关键字的数量+1,k的取值范围为[ceil(M/2),...
Mongo 创建索引语句
1 单个索引1234db.tf_kd_bus_online_data.createIndex({"req_dts":1} , {background:true}); 2 复合索引12345db.tf_kd_bus_online_data.createIndex({ "interface_code":1, "req_dts": 1, "resp_dts": 1, "status":1});