自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法-螺旋矩阵II

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]输出:[1,2,3,6,9,8,7,4,5]

2023-07-25 15:33:28 150

原创 算法-滑动窗口

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

2023-07-24 15:16:52 116

原创 synchronized和lock的原理解读以及它们的区别?

对实例变量更改的场合,刷新主内存共享变量的值从而使得各个 线程可以获得最新的值,线程读取变量的值需要从主存中读取;另外,synchronized还会创建一个内存屏障,内存屏障指令保证了所有CPU操作结果都会直接刷到主存中(即释放锁前),从而保证 了操作的内存可见性,同时也使得先获得这个锁的线程的所有操作。:处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证各个语句的执行顺序同代码中的顺序一致,但是它会保证程序最终执行结果和代码顺序执行的结果是一致的。2、该变量没有包含在具有其它变量的不变式中。

2023-05-01 18:13:39 153

原创 JVM常用垃圾收集器及GC算法

G1 收集器避免全区域垃圾收集,它把堆内存划分为大小固定的几个独立区域,并且跟踪这些区域的垃圾收集进度,同时在后台维护一个优先级列表,每次根据所允许的收集时间,优先回收垃圾最多的区域。(与Serial Old不同,这里的整理是Summary(汇总)和Compact(压缩),汇总的意思就是将幸存的对象复制到预先准备好的区域,而不是像Sweep(清理)那样清理废弃的对象)算法,在Parallel Old执行时,仍然需要。串行收集器是最古老,最稳定以及效率高的收集器,使用停止复制方法,只使用一个线程去串行回收;

2023-04-29 18:49:26 548

原创 Java对象内存布局

创建一个User对象,内存分配在堆上Object obj;创建一个引用,内存分配在栈上= 将Object 对象地址赋值给引用- XX : + UseCompressedOops 开启指针压缩 - XX : - UseCompressedOops 关闭指针压缩未开启指针压缩 占用大小为:8(Mark Word)+8(Class Pointer)=16字节。

2023-04-28 21:30:08 72

原创 JVM 运行时内存之堆的内存分布

指内存的永久保存区域,主要存放 Class 和 Meta(元数据)的信息,Class 在被加载的时候被放入永久区域,它和和存放实例的区域不同,GC 不会在主程序运行期对永久区域进行清理。所以这也导致了永久代的区域会随着加载的 Class 的增多而胀满,最终抛出 OOM 异常。首先,把Eden和ServivorFrom区域中存活的对象复制到ServicorTo区域(如果有对象的年龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果 ServicorTo 不够位置了就放到老年区);

2023-04-27 21:26:46 117

原创 数据结构之数组理论基础及常用算法

问题描述:给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]输入:nums = [], target = 0。

2023-04-26 22:04:50 133

原创 JVM内存模型以及 Java对象内存分配策略

在JDK1.8时方法区(Method Area)被替换JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、 Execution engine(执行引擎);两个组件为Runtime data area(运行时数据 区)、Native Interface(本地接口)。

2023-04-26 11:10:38 248

原创 线程同步之读写者问题Java代码实现

读者写者问题:存在一个多个进程共享的数据区(临界资源),该数据区可以是一个文件或者一块内存空间,甚至可以是一组寄存器;有些进程reader只读取这个数据区的数据,有些进程writer只往数据区中写数据。也即是说,读进程不排斥其它读进程,而写进程排斥其它所有进程,包括读进程和写进程。3.若一个写进程正在写文件,则禁止任何读进程读文件。4.读者优先:必须等所有读进程读完才可以写。1.任意数量的读进程可以同时读这个文件。2.一次只能有一个写进程可以写这个文件。

2023-04-25 17:20:41 120

原创 线程同步之生产者-消费者模式Java代码实现

生产者-消费者模式Java代码实现,消费队列可以用来平衡生产和消费的线程资源。

2023-04-25 16:05:55 391

原创 操作系统中死锁的定义、产生原因、必要条件、死锁的处理策略(死锁预防和避免、死锁的检测和解除)

死锁(deadlock):如果一组进程中每个进程都在等待一个事件,而这个事件只有该集合中的另一个进程才能引起,那么该集合就是死锁的。(都占有资源,然后互相等待)或者两个或以上的进程因为争夺资源而造成互相等待的现象,并且若无外力作用,它们都将无法继续推进下去。

2023-04-24 16:50:08 4467

原创 mysql锁的类型有哪些及InnoDB引擎锁的类型?

记录锁(Record lock):记录锁也属于行锁中的一种,只不过记录锁的范围只是表中的某一条记录,记录锁是说事务在加锁后锁住的只是表的某一条记录,加了记录锁之后数据可以避免数据在查询的时候被修改的重复读问题,也避免了在修改的事务未提交前被其他事务读取的脏读问题。临键锁(Next-Key lock):也属于行锁的一种,并且它是INNODB的行锁默认算法,总结来说它就是记录锁和间隙锁的组合,临键锁会把查询出来的记录锁住,同时也会把该范围查询内的所有间隙空间也会锁住,再之它会把相邻的下一个区间也会锁住。

2023-04-23 11:13:30 122

原创 AQS抽象队列同步器理解及设计原理

AQS的设计是基于模板方法模式,该模式是基于继承的,主要是为了在不改变模板结构的前提下在子类中重新定义模板中的内容以实现复用代码。使用者继承并重写指定的方法将 AQS 组合在自定义同步组件的实现中,并调用其模板方法,这些模板方法会调用使用者重写的方法AQS 使用了模板方法模式,自定义同步器时需要重写下面几个 AQS 提供的模板方法:isHeldExclusively() //该线程是否正在独占资源。只有用到condition才需要去实现它 tryAcquire(int) //独占方式。

2023-04-22 16:10:44 108

原创 JVM的类加载机制及双亲委派模型

JVM的类加载机制和双亲委派模型

2023-04-21 17:02:32 164 1

原创 Redis集群的三种部署方式及三种应用问题和解决

穿透:缓存不存在,数据库不存在,高并发,少量key击穿:缓存不存在,数据库存在,高并发,少量key雪崩:缓存不存在,数据库存在,高并发,大量key。

2023-04-20 22:50:15 590 1

原创 HashMap在JDK1.7和JDK1.8中有哪些不同? HashMap的put()底层实现

put()操作流程及图解

2023-04-19 22:13:06 118 1

原创 ConcurrentHashMap的put()流程

2.调用putVal()方法。3.putVal()图解。1.调用put()方法。

2023-04-19 19:53:23 816 1

空空如也

空空如也

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

TA关注的人

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