自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weixin_44240370的博客

Java后端及云计算和大数据

  • 博客(267)
  • 收藏
  • 关注

原创 剑指Offer(锁)——synchronized和ReentrantLock

参考之前专栏的文章:https://blog.csdn.net/weixin_44240370/article/details/96646295

2020-01-30 22:48:14 183

原创 剑指Offer(锁)——synchronized底层实现原理

文章目录1、对象头2、Mark Work3、Monitor4、自旋锁和自适应锁自旋锁5、自适应锁6、锁消除7、锁粗化8、synchronized的四种状态偏斜锁轻量级锁实现synchronized的基础:Java对象头MonitorHotspot虚拟机中对象在内存中的布局:对象头、实例数据、对齐填充1、对象头主要来说一下对象头,下图是对象头的结构2、Mark Work3、M...

2020-01-30 22:13:45 435 1

原创 剑指Offer(锁)——synchronized基本使用方法

说到并发那么就要说一下Synchronized和ReentrantLock等等方面相关的知识。针对互斥锁先来介绍一些引起线程安全问题的主要原因是什么?存在共享数据(也称临界资源);存在多条线程共同操作共享数据。解决上面的问题的方法时:同一个时刻有且只有一个线程在操作共享数据时候其他线程必须等到该线程处理完数据后再对共享数据进行操作。因此引入了互斥锁,其有以下几个特性:互斥性同...

2020-01-30 12:52:32 260

原创 剑指Offer(线程)——如何中断线程

之前我们通常会使用stop来停止线程但是这种方法是不安全的,这是因为一个线程会影响另外一个线程,使线程本应该满足的原子性存在无法满足的可能了。假设线程A调用stop停止了线程B,一般情况下线程是不进行通信的这样就会让线程B释放可能还有用的锁这样就会导致数据不同步的问题。。现在使用最多的是interrupt。它的用处不是中断线程而是通知线程应该去中断但是最后中断还是不中断是由线程自己去判断的,这...

2020-01-29 13:10:53 184

原创 剑指Offer(线程)——sleep和wait的区别以及notify和notifyAll的区别

sleep和wait在源码中可以看出基本的差别:sleep是Thread类中的一个方法,wait是Object类中的一个方法;sleep()方法可以在任何地方使用;wait()方法只能在synchronized方法或者synchronized块中使用。但是本质上的区别在于:Thread.sleep只是会让出CPU,但是不会导致锁行为的改变;Object.wait不仅是会让出CP...

2020-01-29 12:40:18 327

原创 剑指Offer(线程)——线程的状态

通过Thread.State就可以看到线程的状态:public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable t...

2020-01-29 00:16:41 159

原创 剑指Offer(线程)——如何实现处理线程的返回值

run方法是Thread内部类中一个重写的方法没有参数传入,也没有返回值。如果想在实现run方法时传参有三种方法:构造函数传参成员变量传参回调函数传参了解了如何在run方法内进行传参之后,那么要如何实现处理线程的返回值呢?实现处理线程的返回值一共有三种方法:1、主线程等待法使主线程循环等待知道目标子线程返回值为止;下面是一个简单的demo:使用主线程等待法之后就能获取到子线...

2020-01-28 23:49:22 270

原创 剑指Offer(线程)——Thread和Runnable的关系

从本质上看Thread是JDK的一个类,Runnable是一个接口,Thread内部实现了Runnable接口。。。写个简单的demo来看一下两者之间有什么不同:首先将线程执行的内容写出来(十次循环,打出执行任务的线程名字):创建三个线程去执行任务,结果入下:可以看出多线程情况下线程之间是保持原子性的互相不会依赖,因此不存在因为先执行一个线程或者最后执行一个线程从而影响程序的输入和输出...

2020-01-28 22:40:07 263

原创 剑指Offer(线程)——线程start和run方法的区别

先从一个简单的程序看起:使用start():public class ThreadTest { private static void attack(){ System.out.println("fight"); System.out.println("current thread is:" + Thread.currentThread().getNa...

2020-01-28 22:04:26 225

原创 剑指Offer(GC)——常见面试题

文章目录1、Object的finalize()方法是否与C++的析构函数一样2、Java中强引用、软引用、弱引用、虚引用之间的区别(1)、强引用(2)、软引用(3)、弱引用(4)、虚引用(5)、引用队列1、Object的finalize()方法是否与C++的析构函数一样答案肯定是否定的,finalize调用是确定的而析构函数调用是不确定的。一个Java方法经过第一次可达性分析时候发现没和GC...

2020-01-23 17:11:34 239

原创 剑指Offer(GC)——老年代垃圾收集器

垃圾收集器之间的联系,本文主要讲解一下老年代收集器。Serial Old收集器(-XX:+UseSerialOldGC,标记-整理算法)是Serial GC老年代版本,也是单线程的进行垃圾收集的时候必须暂停所有的工作线程,同样是简单高效,是Client模式下老年代的默认垃圾收集器。Parallel Old收集器(-XX:+UseParallelOldGC,标记-整理算法)是在JDK6之...

2020-01-23 12:33:01 325

原创 剑指Offer(GC)——新生代垃圾收集器

首先先来了解一下Stop-the-World:JVM由于要执行GC而停止了应用程序的执行;任何一种GC算法中都会发生;多数GC优化通过减少Stop-the-World发生的时间来提高程序性能。如果在进行垃圾回收的时候同时产生了垃圾,那么要怎么办呢,这个时候有了Safepoint。SafePoint:可达性分析要在一个快照点进行,是因为在运行时程序一直在运行,需要一个静态层面的分析。...

2020-01-23 11:16:52 255

原创 剑指Offer(GC)——垃圾回收之回收算法

文章目录标记-清除算法(Mark and Sweep)2、复制算法3、标记-整理算法(Compacting)4、分代收集算法1、Minor GC2、Full GC本文主要介绍几个经典的回收算法:标记-清除算法(Mark and Sweep)就像名字所说将回收分成两个阶段:标记和清除,使用的算法是可达性分析算法。标记:从根集合进行扫描,对存活的对象进行标记。清除:对堆内存从头到尾进行线性遍...

2020-01-22 23:53:05 345

原创 剑指Offer(GC)——垃圾回收之标记算法

先来说明一个什么情况下Java对象被判定为垃圾?当没有被其他对象引用情况下该对象就是没有用的。判断Java对象为垃圾的算法有哪些?引用计数法可达性分析算法引用计数法通过判断对象的引用数量来决定对象是否可以被回收;每个对象实例都有一个引用计数器,被引用加一,完成引用减一;任何引用计数为0的对象实例都可以被当做垃圾收集。优点:执行效率高,只需要过滤出引用计数为0的即可并且程序执行受影...

2020-01-22 21:49:13 221

原创 剑指Offer(JVM)——Java内存模型常考题

1、JVM三大性能调优参数-Xms、-Xmx、-Xss含义?-Xss:规定了每个线程虚拟机栈(堆栈)的大小,256K就已足够。-Xss大小会影响并发线程数的大小;-Xmx:堆的内存在不够的时候会进行扩容,-Xmx是堆能够扩展到的最大值;-Xms:堆刚被创建出来的初始大小。但是通常将-Xms和-Xmx设置成一样的,因为堆扩容时候会发生内存抖动,影响程序性能。2、Java内存模型中堆和栈...

2020-01-21 21:00:45 339

原创 剑指Offer(JVM)——Java内存模型

文章目录线程角度1、程序计数器(Program Counter Register)2、Java虚拟机栈(Stack)3、本地方法栈(Native Stack)4、元空间(MetaSpace)和永久代(PermGen)区别5、堆(Heap)首先来简单介绍一下内存:程序执行过程中需不断的将逻辑地址和物理地址进行映射从而找到指令具体执行的位置。Java程序运行在虚拟机上,运行时候需要内存空间,执...

2020-01-21 16:56:35 351

原创 剑指Offer(JVM)——loadClass和forName区别

先来说一下类的加载方式,一个类被加载出来有两种方式,分别是显示加载和隐式加载:显示加载:loadClass和forName等隐式加载:new隐式加载是通过new一个class来获得类的实例相对于显示加载更加好的地方在于它可以直接调用有参构造。显示调用原则不是很简单当获取到class对象之后需要调用class的new Instance()方法才能获取到类的实例,调用new Instanc...

2020-01-21 11:38:02 266

原创 剑指Offer(JVM)——ClassLoader双亲委派机制

不同的类加载器对于类和路径的加载方式是有区别的,并且各自负责各自的部分使逻辑变得更加明确但是需要相互之间的协调工作才可以,如果没有一定的规则和方法就会造成问题,这时双亲委派机制就出现了,它能够使这些类加载器各司其职互不干扰。首选先来看一下双清委派机制原理框图:简要解释一下:类被加载的时候自底向上执行考虑之前是否被加载过,如果被加载过直接返回否则进行第二步;如果没有被加载过,交给AppC...

2020-01-20 22:53:16 206

原创 剑指Offer(JVM)——ClassLoader

本文主要说一下一个类从编译到执行的过程,现在有一个普通的Person类。从编译到执行这段时间内,Person执行了三个阶段:编译器将Person.java源文件编译为Person.class字节码文件;ClassLoader将字节码转换为JVM中的Class< Person >对象;JVM利用Class< Person >对象实例化为Person对象。已经了解...

2020-01-20 21:19:11 194

原创 剑指Offer(JVM)——反射

Java反射机制是在运行状态中,对于任意一个类都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。接下来举一个反射的例子:创建一个实体类,包含两个有参方法,一个是public修饰一个是private修饰。public class Person { private String...

2020-01-20 16:48:21 199

原创 Akka框架简单介绍

Akka是Java虚拟机平台上构建高并发、分布式和容错应用的工具包和运行时。Akka使用Scala语言编写同时提供了Scala和Java的开发接口,Akka处理并发的方法基于Actor模型,Actor之间通信的唯一机制就是消息传递。Akka特点:对并发模型进行了更高的抽象异步、非阻、高性能的事件驱动编程模型轻量级事件处理(1GB内存可以容纳百万级别个Actor)提供了一种称为Actor...

2020-01-20 11:14:50 2045

原创 剑指Offer(Redis)——Redis集群管理

如何从海量数据中快速找到需要的数据是在开发中关注的问题。。分片:按照规则去划分数据,分散在多个节点上可以通过使用分片,降低单节点的压力。Redis Cluster采用五中心结构,节点之间使用Gossip协议发送消息,或者发现新的节点,既然Redis目的是将key分布式的放在不同的节点上,这是如何实现的呢???一般会获取到key的哈希值,根据节点数求模值,缺点是无法在一个节点上找到连续的key...

2020-01-18 20:39:44 307

原创 剑指Offer(Redis)——Pipeline及主从同步模式和哨兵模式

Pipeline加入使用Redis进行批量生产数据然后存入缓存,一般情况下是上一条缓存存完之后才轮到下一个存储指令的执行,这样肯定会让Redis性能降低,实际上Redis对此情况进行了一定的优化,优化方法就是Redis针对Pipeline的使用:Pipeline和Linux的管道类似;Redis基于请求/响应模型,单个请求处理需要一一应答;Pipeline批量执行指令,节省多次IO往返的...

2020-01-18 20:39:23 475

原创 剑指Offer(Redis)——Redis做持久化

文章目录1、RDB持久化2、AOF(Append-Only-File)持久化:保持写状态3、RDB和AOF文件共存情况下的恢复流程4、RDB和AOF优缺点5、RDB-AOF混合持久化方式Redis是一种基于内存存储的非关系型数据库,所以可以保证查询速度很快,但是因为内存数据库所以会导致如果一旦宕机就会立刻失去所有的缓存,于是有了Redis持久化策略,将缓存信息一边存一边写到硬盘上保证数据的存储是...

2020-01-18 17:10:56 246

原创 剑指Offer(Redis)——实现异步队列

可以使用Redis的list作为数据类型,使用RPush生产消息,LPOP消费消息,数据结构和对队列是一样的先进先出。演示如下:没有队列消息的时候,return null这种方法的缺点是:没有等待队列里有值就直接消费。对于这个缺点弥补方法就是:通过在service层引入sleep机制调用lpop去重试,不用sleep。另外一种解决方法就是使用blpop加上阻塞seconds,使用后立刻进入...

2020-01-18 12:11:31 256

原创 剑指Offer(Redis)——实现分布式锁

分布式锁是控制分布式系统或者不同系统之间共同访问共享资源的一种锁的实现,当不同主机共享了共享某一种资源时候往往通过互斥来除去彼此的干扰来保证一致性。什么是分布式锁?分布式锁需要解决什么问题?互斥性任意时刻只能有一个客户端获得锁安全性锁只能被持有该锁的客户端删除,不能被其他客户端删除死锁获得锁的客户端,出现意外宕机锁无法释放,资源也被永远锁住就出现了死锁容错性客户端...

2020-01-17 21:01:35 232

原创 剑指Offer(Redis)——Redis常用数据类型

Redis提供给用户使用的数据类型有:String:最基本的数据类型,二进制安全Hash:String元素组成的字典,适合用于存储对象List:列表,按照String元素插入顺序排序Set:String元素组成的无序集合,通过哈希表实现,不允许重复Sorted Set:通过分数来为集合中的成员进行从小到大的排序用于计数的HyperLogLog,用于存储地理位置信息的Geo底层数据...

2020-01-17 19:55:52 176

原创 剑指Offer(SQL)——InnoDB可重复读隔离级别下如何避免幻读

1、表象:快照读(非阻塞读)——伪MVCC读取数据也是有规范的,分为当前读和快照读。。。当前读:加了锁的CRUD事务,因为读取的实际上就是最新的版本,并且在读取之后还不允许其他事务修改查询的结果就是像select * from tablename lock in share mode 和 select * from tablename for update 这种加了共享锁和排它锁的叫做当前读。...

2019-12-28 10:03:58 427

原创 剑指Offer(SQL)——事务并发访问产生的问题以及事务隔离机制

MySQL会利用锁机制创建出来不同的事务隔离级别,将会根据事务隔离级别从低到高进行详解。事务并发时候会产生一系列的问题,结合这些问题说明和隔离级别之间的关系。第一个是更新丢失即一个事务更新覆盖了另一个事务的更新。InnoDB引擎已经避免了这种事情的发生。第二个问题是脏读,就是说读取了另一个更新事务,更新之前的数据就是"读未提交"。READ-COMMITTED是已提交读,事务隔离级别及以...

2019-12-26 20:38:43 192

原创 剑指Offer(SQL)——数据库事务的四大特性

ACID原子性(Atomic)事务内的操作要么全做,要么一个都不做一致性(Consistency)数据库需要保证完整性,指无论数据库在什么情况都要保证一个一致状态转换成为另一个一致状态,保证完整性约束。隔离性(Isolation)多线程情况下一个线程的执行不会影响另外一个线程。。。持久性(Durability)针对数据库的操作永久保存在数据库中,当数据库发生故障时可...

2019-12-26 14:06:49 205

原创 剑指Offer(SQL)—— MyISAM和InnoDB关于锁方面的区别

MyISAM默认使用的是表级锁,不支持行级锁当我们操作的表使用的是MyISAM引擎,这个时候我们对同一张表进行查询操作的时候,需要十秒那么再在这十秒内其他的SQL语句要想对这张表进行写操作的话就会被阻塞,一直要等到这十秒结束才能去进行操作。这样的锁叫做共享锁。<fonr ):在MyISAM引擎中在查询语句执行过程中,不会影响其他用户对于表的查询,但在查询过程中不能对表进行写操作。并且...

2019-12-25 16:22:34 193

原创 剑指Offer(SQL)——使用bitMap优化索引

bitMap索引不是主流的索引,只有很少的数据库支持如主流的Oracle数据库,首先按照状态值分开每种值空间会存储一个实际行是否是这个值。bitMap索引会下载到内存中几乎是CPU叠加进行操作,这样的速度是非常高的。但是bitMap索引只适用于某字段只有几个固定的值。bitMap还是存在缺点的:使用bitMap索引锁的力度是非常大的,新增/修改一条数据时通常与它在同一个位图的数据操作都会...

2019-12-17 16:21:10 404

原创 剑指Offer(SQL)——使用Hash优化索引

Hash索引比起B和B+索引是不同的思路,因为它可以完全不用从根去查找数据,而树必须从根去索引到值。因此Hash索引的IO次数就更少了,理论上有可能比B+树效率更高。但是Hash索引还是存在缺点的:仅仅能满足"=",“IN”,不能使用范围查询无法被用来避免数据的排序操作不能利用部分索引键查询不能避免表扫描遇到大量的Hash值相等的情况后性能不一定会比B-Tree索引高(大量Hash...

2019-12-17 16:20:58 183

原创 剑指Offer(SQL)——使用B+Tree来优化索引

之前的一篇文章我们介绍使用B树来优化我们的索引,今天来介绍一下使用B+Tree来优化索引。B+树是B树的变体,其定义基本与B树相同,除了:非叶子节点的子树指针与关键字个数相同非叶子节点的子树指针P[i],指向关键字值[K[i],K[i+1])的子树非叶子节点仅仅用来索引,数据都保存在叶子节点中所有叶子节点均有一个链指针指向下一个叶子节点结论:B+树磁盘读写代价更低B+树查询...

2019-12-13 16:08:49 289

原创 剑指Offer(SQL)——使用B树来优化索引

B树平衡多路查找树,如果每个节点最多有m个孩子,那么就可以称之为m阶B树。B树有四个特征:根节点至少包括两个孩子树中每个节点最多含有m个孩子(m >= 2)除根节点和叶节点外,其他每个节点至少有ceil(m/2)个孩子所有叶子节点都位于同一层其实最终的目的就是减少IO的读写次数。假设每个非终端结点中包含有n个关键字信息,其中Ki(i=1…n)为关键字,且关键字按照顺序...

2019-12-13 15:06:53 190

原创 剑指Offer(SQL)——使用二叉查找树优化索引

先来介绍依稀二叉查找树,大家都知道二叉查找树每个节点最多只有两个子树,通常称为左子树和右子树并且左子树节点的值要小于右子树节点的值,右子树节点的值要大于父节点的值,采用这种结构会提高索引的效率,时间复杂度是(O(logn))。上图中不仅仅是二叉查找树,也是平衡二叉树,所谓平衡二叉树就是左右子树高度的差的绝对值不超过1。原先我们是要遍历整张表(时间复杂度是O(n)),变为折半查找后确实是提高了...

2019-12-12 09:21:57 245

原创 剑指Offer(SQL)——数据库架构

如何设计一个关系型数据库如果在面试中面试官问了我们这样一道题,很多的面试者往往都会不知所措,因为要想很好的回答这道题要对数据库有很深的了解同时要对一些业务也有了解。首先这道题要回答的点太多了所涉及的知识面也不少。下面看一个RDBMS架构图:数据库由两个部分组成分别是存储(类似于一个文件系统)和程序实例(对存储进行逻辑上的管理)。程序由以下八个部分组成:存储管理:数据的逻辑关系转换为物...

2019-12-12 09:20:45 376

原创 Java——IO流

文章目录1、IO流四个基本抽象父类2、java.io.File类中一些方法的作用3、FileInputStream从父类继承的如下几个方法4、FileOutputStream从父类继承的如下几个方法5、一些流的用法5.1、FileInputStream5.2、FileOutputStream5.3、FileReader5.4、FileWriter5.5、BufferedInputStream5.6...

2019-12-07 23:28:26 305

原创 Java——GC

文章目录1、GC简介2、GC四大算法2.1、总体概述2.2、四大算法引用计数法复制算法标记清除标记压缩2.3、总结1、GC简介GC是分代收集算法特点:次数上频繁收集Young区次数上较少收集Old区基本不动元空间2、GC四大算法2.1、总体概述JVM在进行GC的时候,并非每次都对上面三个内存区域一起回收的,大部分时候回收都是指新生代。因此GC按照回收的区域又分为了两种类型,...

2019-12-06 13:28:14 152

原创 Java——JVM(二)

文章目录三、堆参数调优入门3.1、Java垃圾收集3.2、堆内存调优三、堆参数调优入门3.1、Java垃圾收集Java7Java8JDK1.8之后就将最初的永久代取消了由元空间取代。Java8中永久代已经被移除,被一个称为元空间的区域所取代。元空间的本质和永久代类似。元空间与永久代之间最大的区别在于:永久代使用的JVM的堆内存,但是Java8以后的元空间并不在虚拟机中而是使用本...

2019-12-06 11:28:30 148

空空如也

空空如也

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

TA关注的人

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