自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 合并K个升序链表

给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。链表数组如下:1->4->5,1->3->4,2->6将它们合并到一个有序链表中得到。

2024-04-24 23:07:27 880

原创 二叉树的层序遍历,翻转二叉树,对称二叉树讲解

(每次在小循环内,操作就是弹出父节点,然后加入父节点的孩子节点,知道这一行的父节点都弹出,size就是这个行节点的个数,所以有限制条件了,然后每一个小循环都会添加孩子节点,所以提前在大循环中小循环之外定义size=队列的个数)。中序时:遍历顺序是左中右,当我们先遍历左时,左部分的节点交换后,中间交换,那我们继续遍历右半部分节点使之交换时,因为我们已经交换过中间节点了,所以相当于原先的左半部分节点交换了两次,而右半部分节点没有交换,所以中序不可以。(后序代码只是将交换那一行的代码写到最后面。

2024-04-24 22:58:28 273

原创 JVM--Java对象到底存在哪?

Java对象存放在堆中,但堆又分为新生代和老年代,新生代又细分为 Eden、From Survivor、To Survivor。?堆分为新生代和老年代,新生代用于存放使用后就要被回收的对象(朝生夕死),老年代用于存放生命周期比较长的对象。我们创建的大部分对象,都属于生命周期较短的对象,所以会存放在新生代。新生代又细分 Eden、From Survivor、To Survivor,那我们创建的对象会优先在 Eden 区分配,见下图。

2024-04-23 21:17:24 905

原创 JVM垃圾收集器--分区收集器

ZGC 的两个关键技术:指针染色和读屏障,不仅应用在并发转移阶段,还应用在并发标记阶段:将对象设置为已标记,传统的垃圾回收器需要进行一次内存访问,并将对象存活信息放在对象头中;G1收集器在垃圾回收的时候仍然需要STW,因为Young GC、Mixed GC 都是基于标记复制,标记复制算法有个转移的过程,这个过程是需要STW,而Full GC基于标记整理,标记整理的过程也需要STW。在G1中,有专门分配大对象的区域,叫做大对象区,当对象的大小超过设定大小的百分之五十时,这个时候,就可以将对象放入大对象区域。

2024-04-23 21:08:34 1261

原创 JVM垃圾收集器--分代收集器

垃圾收集器主要分为两大类:分区收集器和分代收集器。分代收集器的代表是CMS,分区收集器的代表是G1和和ZGC。

2024-04-22 23:11:04 725

原创 leetcode135 --分发糖果

n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。1请你给每个孩子分发糖果,计算并返回需要准备的。5你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。4你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。

2024-04-22 15:34:07 284

原创 JVM的运行时数据区

之前的文章有讲过,Java 源代码文件经过编译器编译后会生成字节码文件,并且经过类加载器加载之后会交给执行引擎执行,并在执行过程中,Java会划出一片空间去存储执行期间所用到的数据,这片空间成为运行时数据区。

2024-04-21 17:02:33 1308

原创 StringBuffer和StringBuilder

在 StringBuilder 对象的实现中,value 数组的长度是可以动态扩展,像ArrayList。

2024-04-19 23:27:29 742

原创 JVM 讲解 (主要类加载其以及流程和机制(双亲委派))

继承类,重写findClass()方法如果没有太复杂的需求,可以直接继承类,重写loadClass方法,具体可参考和。

2024-04-19 23:13:39 1190

原创 MySQL事务的实现

本文讲述了事务的四大特性的实现,原子性与持久性是通过日志去实现的,比较好理解。关于隔离性,我们需要根据实际情况需要的隔离级别去调整,不可以直接使用最高级别,这样会导致效率过低。至于隔离性,本文讲的是ACID的隔离性,实际问答中,要确认是ACID还是CAP中的一致性,两者有根本性的不同,如果要看CAP隔离性,可以去看 javabetter.cn 大佬的网站。

2024-04-18 16:12:20 902

原创 MySQL 的事务概念

所谓的数据库对象,指的就是数据库、表、视图、存储过程等等这些东西。当我们使用CREATE、ALTER、DROP等语句去修改这些所谓的数据库对象时,就会隐式的提交前边语句所属于的事务。BEGIN;SELECT ... # 事务中的一条语句UPDATE ... # 事务中的一条语句... # 事务中的其它语句CREATE TABLE ... # 此语句会隐式的提交前边语句所属于的事务。

2024-04-18 00:38:58 1192

原创 Leetcode5--最长回文子串(双指针中心扩散法)

给你一个字符串s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。"bab""aba" 同样是符合题意的答案。

2024-04-17 13:40:06 608

原创 leetcode--3 无重复最长字串

给定一个字符串s,请你找出其中不含有重复字符的的长度。3因为无重复字符的最长子串是"abc",所以其长度为 3。1因为无重复字符的最长子串是"b",所以其长度为 1。3因为无重复字符的最长子串是"wke",所以其长度为 3。请注意,你的答案必须是的长度,"pwke"是一个子序列,不是子串。

2024-04-15 16:39:16 904 1

原创 TCP协议--传输机制

TCP协议是对数据传输提供的一个管控机制,主要体现在可靠和效率两个方面,即在保证数据可靠传输的情况下尽可能的提高效率。

2024-04-14 12:57:11 1035

原创 数据结构,算法(一)--排序

两次for循环 一次循环可以将一个数据排好序,那两次for循环叠加就可以将整个数组的数据排好序。游标 i 从左到右遍历数组,找到数组中最小值。让最小值和待排序数组中的第一位进行交换。

2024-04-14 12:30:06 613

原创 Java并发--内存结构图及线程安全

Class。

2024-04-14 12:22:54 1023

原创 Java并发--锁

同步语句块的实现使用的是和指令,其中指令指向同步代码块的开始位置,指令则指明同步代码块的结束位置。修饰的方法并没有指令和指令,取得代之的确实是标识,该标识指明了该方法是一个同步方法。不过两者的本质都是对对象监视器 monitor 的获取。

2024-04-14 10:30:00 1261

原创 Linux常用命令介绍

cd命令可以进入某 个目录中,例如 cd opt, 意思就是进入opt目录中,但是opt 必须在你现在的目录中是可见的,例如m 1文件夹包括opt文件夹,而不能m 1包括m 2包括opt文件夹。这个需要一个一个删,先进入文件夹里,然后再删除文件夹里的文件,一层一层的问你是否删除,如果删除按y, 如果不删除按n。cd /是进入根目录,当我们有文件夹opt在根目录中的文件夹var中的时候,我们此时在根目录下的一个文件夹中,我们可以cd /var/opt.w是保存的意思,q是退出的意思。

2024-04-13 18:30:16 803

原创 leetcode46--全排列

给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以返回答案。

2024-04-13 18:26:26 846

原创 Java集合(一)--Map(2)

在JDK1.7时,底层采用的是分段数组+链表的形式,在JDK1.8之后,采用的是与HashMap相同的形式,数组+链表/红黑树。只锁定当前链表或红黑二叉树的首节点,这样只要 hash 不冲突,就不会产生并发,就不会影响其他 Node 的读写,效率大幅提升。o(n)->o(logn),ConcurrentHashMap利用的是node数组+链表+红黑树的方式去实现,并且并发控制使用synchronized和CAS去实现操作。当冲突链表达到一定程度的时候,链表会转换成红黑树,一般来说阈值是8,多个线程访问时,

2024-04-13 14:59:54 931 2

原创 Java集合(一)Map(1)

HashSet 底层是由 HashMap 实现的,它可以实现重复元素的去重功能,如果存储的是自定义对象必须重写 hashCode 和 equals 方法。HashSet 保证元素不重复是利用 HashMap 的 put 方法实现的,在存储之前先根据 key 的 hashCode 和 equals 判断是否已存在,如果存在就不在重复插入了,这样就保证了元素的不重复。

2024-04-13 11:52:42 1480

原创 Java并发(2)--内存模型

主内存:所有线程创建的实例对象都存放在主内存中,不管该实例对象是成员变量,还是局部变量,类信息、常量、静态变量都是放在主内存中。为了获取更好的运行速度,虚拟机及硬件系统可能会让工作内存优先存储于寄存器和高速缓存中。本地内存:每个线程都有一个私有的本地内存,本地内存存储了该线程以读 / 写共享变量的副本。每个线程只能操作自己本地内存中的变量,无法直接访问其他线程的本地内存。如果线程间需要通信,必须通过主内存来进行。

2024-04-12 23:12:12 1032

原创 Java并发(1)--线程,进程,以及缓存

而创建多个线程,这些线程可以被映射到底层多个 CPU 上执行,在任务中的多个线程没有资源竞争的情况下,任务执行的效率会有显著性的提高,约等于(单核时执行时间/CPU 核心数)。,如果数据处理量很大的话,多线程可能会发生覆盖的问题,例如两个线程都给a累加5000次,那么a的极端情况可能会是2,可能导致线程1和线程2的累加操作互相覆盖,第一个线程刚累加第一次,a变成2,然后进程切换,返回给内存,a又变成1。线程与进程相似,但线程是一个比进程更小的执行单位。新建,就绪,运行,等待,阻塞,死亡。

2024-04-12 21:29:31 1287

原创 Redis缓存穿透、击穿、雪崩

Redis是一个流行的内存数据库,但在使用过程中,确实需要注意一些缓存相关的问题,比如缓存穿透、缓存击穿和缓存雪崩。

2024-04-11 23:11:40 741

原创 leetcode142 环形链表2

给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(如果pos是-1,则在该链表中没有环。pos,仅仅是为了标识链表的实际情况。链表。返回索引为 1 的链表节点链表中有一个环,其尾部连接到第二个节点。返回索引为 0 的链表节点链表中有一个环,其尾部连接到第一个节点。返回 null链表中没有环。

2024-04-11 19:13:38 959

原创 Java异常

Java异常

2024-04-10 23:33:25 734 1

原创 TCP三次握手和四次挥手

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议,常用于互联网中的数据传输。TCP连接的建立和终止都采用了一些固定的步骤,其中包括了三次握手和四次挥手。

2024-04-09 00:00:44 1395

原创 面试--leetcode-572-另一棵树的子树

给你两棵二叉树root和subRoot。检验root中是否包含和subRoot具有相同结构和节点值的子树。如果存在,返回true;否则,返回false。二叉树tree的一棵子树包括tree的某个节点和这个节点的所有后代节点。tree也可以看做它自身的一棵子树。true大家一开始的想法肯定都是需要遍历root树,也需要遍历subRoot树,一个一个暴力搜索,才能去找到是否是子树关系。

2024-04-08 21:40:48 706

原创 事务隔离级别(图文详解)

事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。

2024-04-07 14:43:57 582

原创 BigDecimal 详解 清晰版

本文较为清晰的说明了BigDecimal的原理和等值比较问题,其中原理部分解释为什么BigDecimal可以解决精度丢失问题,等值比较部分,也放出源码,从源头上解决了equals和compareTo()的不同的原因。

2024-04-03 17:22:54 857 1

原创 Java代理(手写板)

cglib详细内容可以 参考javaguide。

2024-04-03 14:46:22 402 1

原创 Java反射

简单来说:反射是可以帮助程序员去获取类的详细信息的一种机制。Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,

2024-04-02 20:37:47 383 1

原创 LeetCode 1115. 交替打印 FooBar

如果foo线程想执行,就必须获取fooSema信号量,如果bar线程像执行,就必须获取barSema信号量。

2024-03-28 15:43:42 738

原创 Redis持久化

Redis持久化就是将Redis中的数据写入磁盘内,用于保证数据安全,或是为了保证数据同步。

2024-03-27 22:02:43 1121 1

原创 Java面试 之 值传递(独家版本)最清晰

这些局部变量引用是方法参数的副本,它们指向相同的对象,但它们本身的交换不会影响方法外部的原始引用。修改对象状态:另一方面,当你传递一个对象到方法中,并在该方法内部修改对象的状态(例如,改变一个数组对象的元素),这个改变会影响到原始对象,因为对象的引用指向的是同一个对象。简而言之,方法内部的引用交换不会影响外部的引用,但是对对象状态的修改会影响到所有指向该对象的引用。可以看到,在swap函数中,两个变量的值发生交换,但是在main函数中,未发生交换。值传递:方法接收的是实参值的拷贝。

2024-03-26 21:25:43 538

原创 Java面试题之128陷阱与装箱拆箱

在Java中,基本数据类型的比较使用的是值比较,而对象的比较默认使用的是引用比较。但是,Java对于值从-128到127之间的Integer对象做了特殊处理,它们会被自动缓存,所以当你创建这个范围内的Integer对象时,实际上会返回相同的引用。当比较的值超出这个范围,或者使用new Integer()创建对象时,相同值的Integer对象可能会有不同的引用,那么使用==进行比较就会返回false。如果Integer的值是1280,那么即使两个Integer对象的值相同,使用==比较也会返回false。

2024-03-25 23:09:38 431

原创 Redis的五种数据类型详解(一) 最清晰版本String List

Redis 共有 5 种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。Redis中的数据都是以键值对的形式出现。

2024-03-24 21:21:41 437

原创 延迟双删策略为什么会存在?最简洁清晰

延迟双删策略是为了保持数据库与redis中数据一致的一种策略。

2024-03-21 15:50:48 311 1

原创 synchronized与锁(手写版)方便初学者理解

第二张图是锁如何升级的!!

2024-03-18 17:20:14 317

原创 SpringBoot如何读取配置文件以及application.properties和yml的区别

一看就懂型,SpringBoot配置文件相关内容

2024-03-13 17:06:28 371 1

空空如也

空空如也

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

TA关注的人

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