Ubuntu桌面快捷图标
新建文件touch idea.desktop
写入下面内容[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;
Mongo 创建索引语句
1 单个索引db.tf_kd_bus_online_data.createIndex({"req_dts":1} , {background:true});
2 复合索引db.tf_kd_bus_online_data.createIndex({ "interface_code":1, "req_dts": 1, "resp_dts": 1, "status":1});
Synchronized原理分析(一)
synchronized 对应的内存间交互操作为:lock 和 unlock,在虚拟机实现上对应的字节码指令为 monitorenter 和 monitorexit。
synchronized 关键字底层原理属于 JVM 层面。
1、synchronized同步语句块public 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 反编译。
public class javase.thr ...
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 中那些有资格成为候选资源的线程被移动到 ...
Mysql事务原理&MVCC
1、总结先行 Mysql的Innodb存储通过MVCC乐观锁的方式来保证了可重复读隔离级别下事务的幻读问题
MVCC的核心就是Undo Log+ Read View,“MV”就是通过Undo Log来保存数据的历史版本,实现多版本的管理,“CC”是通过Read View来实现管理,通过Read View原则来决定数据是否显示。同时针对不同的隔离级别,Read View的生成策略不同,也就实现了不同的隔离级别
2、事务的隔离级别和异常问题
隔离级别/异常
脏读
不可重复读
幻读
读未提交
✅
✅
✅
读已提交
❌
✅
✅
可重复读
❌
❌
✅
串行化
❌
❌
❌
在MySQL中,默认的隔离级别是可重复读,可以解决脏读和不可重复读的问题,但不能解决幻读问题。如果我们想要解决幻读问题,就需要采用串行化的方式,也就是将隔离级别提升到最高,但这样一来就会大幅降低数据库的事务并发能力。
哪Mysql中是咋么在可重复读隔离级别解决幻读的呢?
- 答案是: MVCC + Next-Key Lock
3、MVCC简介MVCC的英文全称是Multi ...
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), M]。
叶子节点包括k-1个关键字(叶子节点没有孩子),k的取 ...
查找第K大元素?
1、查找第K大元素?
思想: 分而治之
算法: 归并排序
步骤:
1、1个退出条件 2个递归调用(左和右)
2、1个合并,合并中 4个循环(1 去最后元素, 取左边剩余元素, 取右边剩余元素 复制)
public void findKthLargest(int[] arr, int k){ //归并排序 mergeSort(arr, 0, arr.length - 1); //返回第K大元素 return arr[arr.length - k];}public void mergeSort(int[] arr, int left, int right){ //退出条件 if(left >= right){ return; } //分解 int mid = (left + right) / 2; //left mergeSort(arr, left, mid); //rigth mergeSort(arr, mid + 1, right); //合并 merge ...