数据结构
文章平均质量分 69
一位即将成功的野男人
这个作者很懒,什么都没留下…
展开
-
PostgreSql索引相关知识总结
采样统计的时候,InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。上图所示 我们查到了根块的枝块指向 . 该节点中每行的孩子节点中的 data 为16进制码 , 表示索引中数据的最小值 (比如我们这里的索引是靠 userpool_id 键排序的) , 转换成10进制就可以看出来 , 他是从小到大的排序。图中可以看出 , 叶子结点有指针 , 说明是 b+tree , 但是叶子结点储存的是什么呢 , 是数据还是物理地址?......原创 2022-08-09 23:52:10 · 1143 阅读 · 1 评论 -
JAVA几种IO方法的性能体现/对比,信息来自SCI期刊文章
TIPS:此篇文章信息来源于:CONCURRENCY AND COMPUTATION: PRACTICE AND EXPERIENCE期刊杂志作者:Dan Bonachea, Phillip Dickens and Rajeev ThakurSci-Hub | High-performance file I/O in Java: Existing approaches and bulk I/O extensions. Concurrency and Computation: Practice a翻译 2022-03-20 19:34:13 · 490 阅读 · 0 评论 -
如果一个父类定义了一个无参数的构造函数,是否有必要调用super()?
Is it necessary to call super() if a Parent class defines a no-argument constructor?在任何条件下,构造函数的第一行都必须是对父类构造函数的调用。也就是说,每次你创建一个子类的实例之前,都会在内存中创建一个父类的新实例。默认构造函数 - 是一个无参数的构造函数,如果类没有提供任何构造函数,编译器会自动生成。默认构造函数和你可以自己添加到类中的无参数构造函数之间没有任何区别。如果一个父类有一个无参数的构造函数(不管它是原创 2022-02-15 22:28:40 · 545 阅读 · 0 评论 -
MySQL Connectors组件8.0.12及之前版本的Connector/J子组件存在安全漏洞及其相关性分析
MySQL Connectors组件8.0.12及之前版本的Connector/J子组件存在安全漏洞及其相关性分析原创 2022-02-13 23:08:17 · 5398 阅读 · 0 评论 -
为什么我们重写equals方法时也要重写hashcode?
Why do I need to override the equals and hashCode methods in Java?这个问题国内讨论出的答案各式各样,于是我去Stackoverflow中查看了一下这个问题的解国外对于override the equals and hashCode的解释更多的是contract(合同,契约的意思),也就是说,重写equals必须重写hashcode已经达成了一种契约(或者说是定理?)本篇文章来自于对该评论的解析Why do I原创 2022-02-13 17:26:47 · 600 阅读 · 0 评论 -
JVM调优之使用JProfiler工具分析java堆内存溢出OOM原因
JProfiler分析结果展示配置首先我们在IDEA安装JProfiler插件之后下载JProfiler的软件(有破解版,自行上网搜即可)然后在IDEA的设置里面找到Tools的JProfiler,设置文件目录对应到exe文件,与你刚安装的软件的目录一致配置好之后,开始调试我们先输入一下代码,设置一个ArrayList,无限制往里面添加大对象public class Hellow { Byte[] arr = new Byte[1 * 1024原创 2022-02-07 18:05:19 · 1649 阅读 · 0 评论 -
Java小白手撕LRU算法,竟讲的这么通透.
什么是LRULRU全称是Least Recently Used,即最近最久未使用的意思LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰图示映射关系增删改代码问题解释我们基本实现原理是通过Hashmap+双链表(Entry)实现的.为什么用hashmap+双链表,而不是单独的双链表? 原因:用hashmap找双链表比较快,..原创 2022-01-28 16:43:17 · 1366 阅读 · 0 评论 -
final的几个注意点讲解(作者亲测)
首先我们测试final对非静态变量和方法的影响有final的情况下:public class FinalTest { final int a = 1; final String s = "sss"; final void haha() { System.out.println("haha"); System.out.println(a); } public static void main(String[] args) {原创 2022-01-20 19:45:20 · 516 阅读 · 0 评论 -
基于JDK1.8源码讲解Integer128陷阱
什么是128陷阱?以下代码i==i1输出true,说明i和i1的对象地址相同f==f1输出false,说明f和f1对象地址不相同public class Test { public static void main(String[] args) { Integer i=127; Integer i1 = 127; System.out.println(i == i1);//输出true Integer f = 128;原创 2022-01-20 18:05:19 · 204 阅读 · 0 评论 -
阿里面试题之变量、代码块、构造器、静态变量,静态代码块的初始化执行顺序讲解
震惊!阿里面试的一道题,竟然挂了n多个面试生!原创 2022-01-20 17:12:51 · 469 阅读 · 0 评论 -
如何从零用Java构建一个简单HashMap
类里面有一个静态类<泛型>,静态类<泛型>的变量为hash值,key和value,还有下一个节点的地址.还有一个初始容量池为16的Entry[]数组,里面主要装Entry.还有构造函数,赋值hash,key,value用的.还有set()和get()方法,setHashCode(),toString()方法.这几个方法的作用:setHashCode(K key)方法里:通过key计算散列值set(K key, V value)方法里:我们需要使用s..原创 2022-01-17 01:15:52 · 1283 阅读 · 0 评论 -
Redis的基本介绍和八大类型和事务讲解
RedisRedis是单线程的Redis是很快的,官网表示,Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了.Redis是C语言写的,官方提供的数据为100000+的QPS,完全不比同样是使用key-value的Memecache差Redis为什么单线程还这么快? 无趣1:高性能的服务器不一定是多线程的 误区2:多线程(CPU上下文会切换!),一定比单线程效率高! 先去CPU>原创 2022-01-14 16:38:10 · 359 阅读 · 0 评论 -
String,StringBuffer,StringBuilder的区别以及源码分析
String,StringBuffer,StringBuilder大体区别String是final修饰的,不可变的,每次操作都会产生新的String对象StringBuffer和StringBuilder都是在原对象上操作StringBuffer是线程安全的,StringBuilder线程不安全的StringBuffer方法都是synchronized修饰的性能:StringBuilder>StringBuffer>String应用场景:经常需要改变字符串内容原创 2022-01-04 16:48:34 · 378 阅读 · 0 评论 -
基于JDK1.8源码讲解ArrayList扩容机制
现在有两组ArrayList,分别是list1和list2 List list1 = new ArrayList(); list1.add(1); list1.add(14); List list2 = new ArrayList(list1);先说list1的情况,我们点进ArrayList查看ArrayList构造器(无参),如下会构造一个默认容量为10的ArrayList[],即Object[],此时的size为0(如..原创 2022-01-01 15:23:23 · 491 阅读 · 0 评论 -
跳表:Skiplist原理介绍和优缺点
skiplist介绍 不要求上下相邻两层链表之间的节点个数有严格的对应关系,而是为每个节点随机出一个层数(level)。比如,一个节点随机出的层数是3,那么就把它链入到第1层到第3层这三层链表中。为了表达清楚,下图展示了如何通过一步步的插入操作从而形成一个skiplist的过程: 如果我们查找23 skiplist的算法性能分析skiplist每次插入都是独立的,根据以下算法(因为random()的随机生成)执行插入操作时计算随机数的过程,是一个很关键的过程,它对s原创 2021-12-10 21:29:43 · 3681 阅读 · 0 评论 -
Java队列方法判断是否为完全二叉树
二叉树的种类:完美二叉树 Perfect Binary Tree Every node except the leaf nodes have two children and every level (last level too) is completely filled. 除了叶子结点之外的每一个结点都有两个孩子,每一层(当然包含最后一层)都被完全填充。 完全二叉树 Complete Binary Tree Every level except the last leve原创 2021-12-10 21:27:58 · 497 阅读 · 0 评论 -
关于二叉树的前中后序遍历的一种简单遍历方法
视频链接:关于二叉树的前中后序遍历的一种简单遍历方法_哔哩哔哩_bilibili我们从根节点开始遍历,往左,直到null,然后返回,继续向右,直到null,然后返回,每次都记录值,如下图左边值.那么,前序则为每个数第一次出现的顺序;中序为每个数第二次出现的顺序,后序为每个数第三次出现的顺序....原创 2021-12-07 15:45:35 · 289 阅读 · 0 评论 -
两链表相交节点问题:两个链表都无环,返回第一个相交节点,如果不相交,返回null(力扣160题)
问题解决思路:计算出两个链表的长度差n,然后让长链表走n步,然后两个链表共同走,当两个链表相同的时候,返回链表public ListNode noloop(ListNode head1, ListNode head2) { if (head1 == null || head2 == null) { return null; } int n = 0;//长度差 ListNode cur1 = head1...原创 2021-12-07 15:07:01 · 196 阅读 · 0 评论 -
锁表:MyISAM非聚集索引和InnoDB聚集索引的各种锁表问题
参考文献Mysql数据库中的各种锁_张花生的博客-CSDN博客_数据库锁面试官:MySQL死锁有哪些场景?如何避免?概述相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。一.导致锁表的原因 锁表发生在insert,update,delete中 锁表的原理是数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite或者回滚或者退出数据库用户 锁表的原因: 第一.A程序执行了对t原创 2021-12-04 16:42:39 · 877 阅读 · 0 评论 -
利用JAVA构造一棵哈夫曼树
哈夫曼树原理:步骤: 统计每个字符出现的次数,放入集合中 每次选出次数最低的两个字符,从集合中取出来合并成一个,重新放入 重复步骤直到合并为一个,就是哈夫曼树 设置哈夫曼树的左右边对应0,1 遍历到叶子结点,路径就是哈夫曼编码 代码:import java.util.HashMap;import java.util.PriorityQueue;import java.util.Queue;import java.util.原创 2021-12-02 19:11:20 · 668 阅读 · 0 评论 -
两种索引:MyISAM(非聚集索引)和InnoDB(聚集索引)的介绍
索引:索引是帮助Mysql高效获取数据的排好序的数据结构 索引的数据结构 二叉树(早期Mysql用这个) 红黑树(早期Mysql用这个) Hash表 B-Tree B+Tree(B-Tree的变种)(现在在用) =========================================B+Tree B+Tree(在内存查找,和磁盘做一次IO交互) 非叶子节点不存储data,只..原创 2021-12-01 16:55:24 · 1665 阅读 · 0 评论 -
Redis为什么用跳表而不用平衡树?
本文是《Redis内部数据结构详解》系列的第六篇。在本文中,我们围绕一个Redis的内部数据结构——skiplist展开讨论。(注:后台发送Redis可以获得全部Redis系列文章)Redis里面使用skiplist是为了实现sorted set这种对外的数据结构。sorted set提供的操作非常丰富,可以满足非常多的应用场景。这也意味着,sorted set相对来说实现比较复杂。同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大部分学校里的算法课都没有对这种数据结构进行过详细的介绍。转载 2021-12-01 16:15:32 · 397 阅读 · 0 评论 -
java-堆,栈,类和对象,方法
栈(Stack):也被称为虚拟机栈,用来存放在方法执行时的变量。其中包括了变量的句柄(变量名)和变量的值。引用类型的值放的是地址值。并且栈中的变量会在方法结束后消亡.堆(Heap):通过new创建出来的对象都放在堆空间中,还包括像数组集合等这些都存在堆中,堆空间的每一个地址都是唯一的,栈中句柄引用堆的地址值,所以如果一个地址被多个句柄引用,其中一方改变会影响其他正在使用的句柄。堆中的内存通过GC来回收.常量池:常量是不可变的变量,直接赋值的String变量的值就存储在常量池中,Strin原创 2021-07-30 23:12:29 · 363 阅读 · 0 评论 -
动态NodeList和静态NodeList的区别/getElemensByTagName和querySelectorAll的区别
在一些情况下,NodeList是动态的,即文档中一些节点发生了变化,这个NodeList也会发生变化,例如document.getElementsByTagName()等函数获取的NodeList在某些情况下,NodeList是静态的,即文档中一些节点发生了变化,这个NodeList不会发生变化,例如document.querySelectorAll()等函数获取的NodeList在网页中插入js代码动态NodeList时var divs = document.getElementsB原创 2021-07-15 20:50:56 · 211 阅读 · 0 评论 -
JS:for循环下onclick点击事件的i值捕捉问题
HTML部分代码<divclass="tab_box"><ulclass="tab_tit"><liclass="current">tab1</li><li>tab2</li><li>tab3</li><li>tab4</li>...原创 2021-07-14 18:38:31 · 819 阅读 · 0 评论