自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 分布式事务,这一篇就够了

文章目录基础理论事务分布式事务强一致性、弱一致性、最终一致性CAP 原则BASE 理论柔性事务幂等操作分布式事务使用场景转账下单扣库存同步超时分布式事务的解决方案两阶段提交/XATCC本地消息表可靠消息最终一致性尽最大努力通知分布式事务实战两阶段提交/XATCC可靠消息最终一致性本地消息表最大努力通知总结基础理论事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务应该具有

2020-09-16 14:37:24 626

原创 面试之不得不说的数据库索引

文章目录MySQL索引原理索引目的索引原理磁盘IO与预读索引的数据结构详解b+树b+树的查找过程b+树性质建索引的几大原则B+Tree相对于B-Tree有几点不同:索引实战题型一题型二题型三题型四题型五MySQL索引原理索引目的索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引

2020-09-15 16:52:43 135

原创 详解java锁之java“锁“事

文章目录1. 乐观锁 VS 悲观锁2. 自旋锁 VS 适应性自旋锁3. 无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁无锁偏向锁轻量级锁重量级锁4. 公平锁 VS 非公平锁5. 可重入锁 VS 非可重入锁6. 独享锁 VS 共享锁结语Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍1. 乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。先说概念。对于同一个数据的

2020-09-14 16:05:40 409

原创 线程安全的List, 从Vector 到 SynchronizedList 到 CopyOnWriteArrayList

文章目录大部分人会脱口而出:用Vector,这样只会让面试官鄙视!除了Vector,你还会别的吗?你至少还得说得上这种:java.util.Collections.SynchronizedList它能把所有 List 接口的实现类转换成线程安全的List,比 Vector 有更好的扩展性和兼容性,Syfinal List list;SynchronizedList(List<E> list) { super(list); this.list = list;}nch

2020-09-10 16:27:35 342

原创 彻底搞懂String, 字符串常量池, intern方法

来看一段代码:public static void main(String[] args) { String s = new String("1"); s.intern(); String s2 = "1"; System.out.println(s == s2); String s3 = new String("1") + new String("1"); s3.intern(); String s4 = "11"; System.out

2020-09-09 10:29:39 212

原创 面试: 再看数据库与缓存一致性问题

读取数据库是比较耗时的操作,如果每次都需要去数据库读取数据,会对数据库造成一定的压力,程序性能也会比较低下,所以需要引入缓存。缓存是提升程序性能的最重要、最有效、也是最简单的手段之一。引入缓存后,读操作会先去缓存中看下,如果没有命中缓存,才去读取数据库,然后把读取出来的数据再放到缓存中去,这样下一次读操作就可以命中缓存了,如果命中缓存,就可以直接把数据返回出去了。写操作,除了修改数据库,还需要删除缓存,因为不删除缓存,读的操作读到的永远都是缓存中的旧数据。先删除缓存,后修改数据库这个方案显然是有

2020-09-07 16:41:41 157

原创 面试: 排序算法总结

文章目录排序算法总结一、排序算法种类二、性能比较三、使用场景简单排序算法冒泡排序选择排序插入排序复杂排序算法快速排序归并排序堆排序希尔排序高级排序算法计数排序基数排序桶排序排序算法总结查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还

2020-09-07 14:53:12 216

原创 海量数据面试题

文章目录1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?2. 有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。3. 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。4. 海量日志数据,提取出某日访问百度次数最多的那个IP。5. 在2.5亿个整数中找出不重复的整数,内存不足以容纳这2.

2020-09-04 15:25:08 247

原创 彻底搞懂 MySQL 事务的隔离级别

MySQL的事务隔离级别一共有四个,分别是读未提交、读已提交、可重复读以及可串行化。文章目录事前准备数据事务并发可能出现的情况脏读(Dirty Read)不可重复读(Non-Repeatable Read)幻读(Phantom)事务的隔离级别读已提交(READ COMMITTED)可重复读(REPEATABLE READ)可串行化(SERIALIZABLE)隔离级别的实现原理查看当前会话隔离级别设置隔离级别事前准备数据mysql> create table city( -> id

2020-09-04 13:46:06 779 1

原创 Java中创建对象的5种方式

文章目录1.使用new关键字2.使用Class类的newInstance方法3.使用Constructor类的newInstance方法4.使用clone方法5.使用反序列化作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象的方法,我们会在这篇文章中学到。Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码1.使用new关键字这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和

2020-09-04 10:50:20 201

原创 Java对象的序列化和反序列化, serialVersionUID作用

文章目录一、序列化和反序列化的概念二、JDK类库中的序列化API三、serialVersionUID的作用一、序列化和反序列化的概念把对象转换为字节序列的过程称为对象的序列化。  把字节序列恢复为对象的过程称为对象的反序列化。  对象的序列化主要有两种用途:  1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;  2) 在网络上传送对象的字节序列。在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对

2020-09-04 10:42:47 296

原创 Java 并发编程:volatile的使用及其原理

文章目录一、volatile的作用二、volatile的使用三、volatile的原理一、volatile的作用我们已经提到过可见性、有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果对Synchronized原理有了解的话,应该知道Synchronized是一个比较重量级的操作,对系统的性能有比较大的影响,所以,如果有其他解决方案,我们通常都避免使用Synchronized来解决问题。而volatile关键字就是Java中提供的另一种解决可见性和有序性问

2020-09-03 11:03:10 135

原创 Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)

一、线程的状态Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。New:新建状态,当线程创建完成时为新建状态,即new Thread(…),还没有调用start方法时,线程处于新建状态。Runnable:就绪状态,当调用线程的的start方法后,线程进入就绪状态,等待CPU资源。处于就绪状态的线程由Java运行时系统的线程调度程序(thread scheduler)来调度。Running:运

2020-09-03 09:51:13 109

原创 Java 并发编程:CAS、ABA问题、Synchronized底层优化, 偏向锁、轻量级锁、 重量级锁、原理与实现,悲观锁,乐观锁

一、重量级锁现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchronized效率低的原因。因此,这种依赖于操作系统Mutex Lock所实现的锁我们称之为“重量级锁”。JDK中对Synchronized做的种种优化,其核心都是为了减少这种重量级锁的使用。

2020-09-02 15:45:18 244

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除