自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring是怎么判断一个类是否创建代理对象的

Spring判断一个类是否需要创建代理对象主要基于以下几个条件:

2023-12-05 10:18:10 360

原创 系统短时间不可用问题排查

可以看到约为20M 同时发现系统垃圾回收器使用的是Mark Sweep Compact GC 也就是默认垃圾回收器:串行GC(Serial GC)查询相关资料发现,Metaspace满之后会进行扩容,扩容会进行触发FGC。查看启动参数发现并没有设置Metasapce的大小。借助Arthas查看当前Metaspace大小。发现当前大小为231M,远远大于默认值20M。查询默认Metaspace大小(单位B)由此可见,系统短时不可用原因已经定位到。查看监控,发现 GC、FGC都比较高。

2023-12-03 17:23:44 84

原创 java程序中自定义异常如何选择使用RunTimeException还是其他异常

受检查的异常是在编译时期就能被检测到的异常,例如IOException,SQLException等,这些异常通常表示程序可以预见的、正常的、可恢复的错误情况。而未受检查的异常是运行时期异常,例如NullPointerException,NumberFormatException等,这些异常通常表示程序运行过程中的错误。所以,选择使用RuntimeException还是其他异常,主要取决于你的程序需要处理的是哪一类错误。然而,对于一些特定的、程序可以预见的、需要特殊处理的错误情况,应该使用受检查的异常。

2023-12-02 15:58:19 133

原创 Redo Log的刷盘策略

注意,Redo Log Buffer刷盘到Redo Log File的过程并不是真正的刷到磁盘中去,只是刷入到文件系统缓存(page cache)中去(这是现代操作系统为了提高文件写入效率做的一个优化),真正的写入会交给系统自己来决定(比如 page cache 足够大了)。针对这种情况,InnoDB给出 innodb_flush_log_at_trx_commit 参数,该参数控制 commit 提交事务时,如何将 Redo Log Buffer 中的日志刷新到 Redo Log File 中。

2023-11-27 19:19:08 117

原创 Redis基础数据类型

2023-11-24 13:18:38 24

原创 B 树& B+树两者有何异同

B 树& B+树两者有何异同呢?

2023-11-23 15:41:27 35

原创 AQS独占式同步状态获取流程acquire(int arg)

AQS独占式同步状态获取流程acquire(int arg)

2023-11-22 19:58:51 29

原创 Springboot+MybatisPlus实现多数据源切换

多数据源切换详解

2022-06-21 20:15:17 393 1

原创 Linux基础

查看进程ps -ef|grep java 查看正在运行的进程ps -aux|grep javakill-9 [PID] 杀死一个进程端口号netstat -anp|grep 3306 查看端口号是否被占用(如果状态是LISTEN说明已经被占用)netstate -nultp 查看所有已经使用的端口情况查看内存topfreecat /proc/meminfo压缩解压缩命令tar 解包 tar xvf filename.tartar

2021-04-11 21:38:27 95

原创 JAVA基础面试

抽象类和接口的区别1.抽象类可以有构造方法,接口中不能有构造方法。2.抽象类中可以有普通成员变量,接口中没有普通成员变量3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。4.抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。5.抽象类中可以包含静态方法,接口中不能包含静态方法6.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问

2021-04-08 20:49:08 123

原创 常见的垃圾回收器

GCRoot的对象包括以下几种:a. java虚拟机栈(栈帧中的本地变量表)中的引用的对象。b.方法区中的类静态属性引用的对象。c.方法区中的常量引用的对象。d.本地方法栈中JNI本地方法的引用对象。...

2021-04-07 13:29:16 79

原创 方法的重写

方法的重写(override)两同两小一大原则方法名相同,参数类型相同子类返回类型小于等于父类方法返回类型,子类抛出异常小于等于父类方法抛出异常,子类访问权限大于等于父类方法访问权限...

2021-03-27 09:53:25 48

原创 服务器端和客户端之间TCP连接的建立和释放

TCP连接的建立过程TCP连接的释放过程

2020-11-22 09:36:45 767

原创 socket服务端开启的过程

socket服务端开启的过程使用socket()函数指定通信的协议号(socket())给socket绑定ip地址和端口号(bind())开始监听这个socket(listen())如果有别的socket连接到这里就是用accept函数获取(accept())获取到连接之后在一个while循环里读socket客户端发来的数据(read())...

2020-11-01 16:46:43 1715

原创 JAVA中的线程池原理

大部分的JVM都是用的KLT模型为什么要使用线程池?线程的创建涉及到用户态到内核态的转换,线程的创建和销毁都是比较耗资源的操作

2020-10-30 21:04:22 62

原创 单例模式(饿汉式单例和懒汉式单例以及内部类实现)

饿汉式单例package com.hua.DesignPatterns.single;/** 饿汉式单例,一上来就创建对象,浪费内存** */public class Hungry { private byte[] data1=new byte[1024*1024]; private byte[] data2=new byte[1024*1024]; private byte[] data3=new byte[1024*1024]; private byte[

2020-10-30 15:10:23 179 1

原创 Redis为什么是单线程的还这么快

Redis为什么单线程还这么快1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;4、使用多路I/O复用模型,非阻塞IO;5、使用底层模

2020-10-22 15:31:25 96

原创 进程和线程有什么不同?

进程和线程的根本区别是进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。...

2020-10-20 20:25:11 74

原创 Mysql索引面试题

1.聚簇索引和非聚簇索引的区别?聚簇索引是在叶子节点中存的是索引和所有的数据非聚簇索引在叶子节点中存的是索引和主键索引的ID2.为什么非主键索引存的是主键值而不是数据?时间换取空间,假如说数据库中的数据非常多的话,主键索引和非主键索引的叶子结点都存所有的数据的话会占用大量的空间数据一致性的问题,假如非主键索引存的是数据的话,更改了主键索引中数据的值,那么也要更改非主键索引的值3.为什么推荐整型自增主键?在构建索引树的过程中,有一个比较大小的过程,整型自增主键比较时时间复杂度低,相比来说,使用字

2020-10-20 20:20:00 438

原创 代理模式

代理模式代理模式的好处可以使真实角色的操作更加纯粹,不用关注一些公共的业务公共的业务交给代理角色,实现了业务的分工公共业务扩展的时候,方便集中管理缺点一个真实角色就对应一个代理角色,代码量会翻倍,开发效率会变低...

2020-10-20 20:16:53 390

原创 JVM堆中的内存分配策略

首先堆中分为新生区(Young Generation Space)和老年区(Tenure generation space),新生区又分为伊甸区(Eden Space)和幸存者区(Survivor Space),幸存者区又分为幸存者from区和幸存者to区当一个对象被new出来的时候首先被分配到伊甸区,如果伊甸区内存满了就会触发一次Minor GC,进行一次垃圾回收,然后把还存活的对象移动到幸存者to区,并将这个对象的年龄设置为1,再把幸存者from区中存活的对象移动到幸存者to区,将这些对象的年龄加1

2020-10-19 21:38:33 109

原创 java中JVM的垃圾回收算法

GC垃圾回收算法1.复制算法基本思想:将内存分为两块,每当发生垃圾回收的时候就把一块内存中还存活的对象复制到另一块中,然后将原来内存中的对象清空,如此反复。复制算法的优点:不会产生内存碎片复制算法的缺点:浪费了一半的内存空间(有一半的空间是不能存任何对象的)只适合对象存活率低的情况(假如说对象存活率很高的话,进行复制的时候会消耗大量的时间)2.标记清除算法基本思想:垃圾回收时,遍历整个堆,对堆中存活的对象进行标记,然后再重新遍历整个堆,对没有被标记的对象进行垃圾回收缺点:

2020-10-19 20:59:51 59

原创 Minor GC和Full GC有什么不一样?

**新生代GC(Minor GC):**指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝 生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。老年代GC(Major GC/Full GC):指发生在老年代的GC,出现了Major GC,经常会伴 随至少一次的Minor GC(但非绝对的,在Parallel Scavenge收集器的收集策略里就有直接进行 Major GC的策略选择过程)。Major GC的速度一般会比Minor GC慢10倍以上。...

2020-10-19 17:21:13 220

原创 如何判断一个对象是否可以垃圾回收器被回收?

两大算法1.引用计数法每个对象都维护一个引用计数器,每个此对象被引用的时候就将计数器加一,当对象被取消引用的时候就将计数器减一,如果计数器为0,那么认为这个对象是垃圾,可以被回收。引用计数法的缺点:每个对象都有一个引用计数器,维护这个引用计数器有一定的资源消耗无法解决循环引用的问题(假如说A对象中引用了B,B对象中引用了A,其他的所有对象都没有引用A和B对象,这个时候A和B对象其实就是垃圾,可以被回收,但是由于采用引用计数法,A和B对象的引用计数器都为1,所以垃圾回收器认为A和B对象不是垃圾,无

2020-10-19 17:08:08 495

原创 Java中JVM运行时数据区

2020-10-19 16:46:45 63

原创 给定一个数组,给定sizeleft和sizeright,交换左右的内容

思路:1.首先将左右两边部分的数组元素左右互换(逆序)2.然后将数组的整体左右互换(逆序)

2020-10-19 11:31:23 136

原创 基础冒泡、选择、插入排序

冒泡排序:思想:每次都从最左边开始依次比较左右的两个数,如果前面的数大于后面的数,就交换,这样一轮下来最大的数就被放到最后一个,然后重新从最左边的数开始比较,然后把第二大的数放到倒数第二个位置,如此反复。最后总体时间复杂度是O(n)选择排序:思想:0–n-1选出最小的数放在0位置,1–n-1最小的数放在1位置,如此反复。插入排序:思路:默认认为第一个元素的有序的,然后将第二个元素插入前面的“有序”数组中,最后前两个元素就是有序的了,然后将第三个元素插入前面的“有序”数组中,如此反复...

2020-10-19 11:29:01 69

原创 JVM中类的加载顺序

(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)(2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )(3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )(4) 父类构造函数(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )(6) 子类构造函数其中:类中静态块按照声明顺序执行,并且(1)和(2)不需要调用new类实例的时候就执行了(意思就是在类加载到方法区的时候执行的)...

2020-10-19 11:10:32 290

原创 为什么需要基本数据类型的包装类型?

之所以需要包装类型,就是因为java是一个面向对象的语言,然而基本数据类型不具备面向对象的特性,当我们把基本数据类型包装成包装类型之后,它就具有了面向对象的特性。而且,在往ArrayList、HashMap这些容器传数据的时候,基本类型int和double是传输不进去的,因为容器都是装object类型的,所以需要转为包装类型进行传输。每一个基本数据类型都有对应的包装类型....

2020-10-19 11:08:24 754

原创 java多线程的interrupt方法

线程的interrupt方法interrupt方法打断被sleep、wait、join方法阻塞的线程之后,会把线程的打断标记设置成true后重新设置成false。interrupt方法打断正在运行的线程的时候,正在运行的线程会把打断标记设置成true。打断标记的作用:可以判断一个线程是否被打断过可以优雅的结束一个线程(可以在线程的内部做一个判断,如果打断标记是true的话就结束当前线程)...

2020-10-18 21:02:35 86

原创 两个栈实现队列的操作

用栈实现队列思路:使用两个栈实现队列的操作,一个栈作为pop栈,一个栈作为push栈,其中pop栈中只做pop操作,push栈中只做push操作,然后在定义一个dao的函数(作用是将push栈中的数据转移到pop栈中),dao函数中一个要满足以下两个条件:pop栈中不为空,一定不能导(pop栈为空才能导)导的话要一次性导完push栈中的所有数据然后在每次pop和push操作后调用dao函数即可导之前:导之后:不能进行导操作的情况:...

2020-10-18 20:48:36 114

原创 sleep、yield、join

sleep、yield、joinsleepsleep会让当前线程从Running状态转向TimedWaiting状态其他线程可以使用线程的interrupt方法打断正在睡眠的线程,这时sleep方法会抛出InterruptedException,这个时候被打断的线程马上被唤醒睡眠结束的线程不一定马上执行使用TimeUnit的sleep方法有更好的可读性yiled:调用yiled方法会使当前线程由运行状态转变为就绪状态join等待调用join方法的线程结束才继续执行当前线程...

2020-10-18 20:44:43 94

原创 Aop中常用的基本术语

术语连接点:一个类中的哪些方法可以被增强,那这些方法就称为连接点(可以被增强的方法称为连接点),比如上面的 add()、update()、select()、delete()都可以成为连接点切入点:实际上被增强的方法称为切入点,比如说只增强了add(),那么add()就可以称为切入点通知(增强):实际增强的逻辑部分称为通知(增强),比如说要给add()加一个日志功能,那这个日志功能就可以称为通知(增强)切面:是一个动作,指的是把通知应用到切入点的过程通知(增强)有五种类型:1.前置通知2.后

2020-10-17 21:04:46 606

原创 Mysql中的事务和隔离级别

事务的ACID属性原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。隔离性(Isolation) 事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他

2020-10-13 15:28:06 110

原创 Java中Synchronized和lock的区别

Synchronized和lock的区别1.synchronized是java中的关键字,lock是java中的接口2.Synchronized是会自动释放锁,lock锁要手动释放锁,否则有可能死锁3.Synchronized是非公平锁,lock锁默认是非公平锁,也可以在构造函数中设置为公平锁4.Synchronized是不可中断的,lock锁是可中断的...

2020-10-12 09:17:59 93

原创 java多线程中wait()方法和sleep()方法的区别

java中wait()方法和sleep()方法的区别1.wait()方法是object类的方法,而sleep()是Thread类的方法2.wait()方法必须使用在同步代码块synchronized中,而sleep()能在任何地方使用3.wait()方法会释放锁,而sleep()不会释放锁4.使用wait()方法不用抛出异常,而使用sleep()必须抛出InterruptedException异常...

2020-10-11 21:45:51 154

原创 JDK 中线程池ThreadPoolExecutor的使用

JDK 中线程池ThreadPoolExecutor的使用JDK 中线程池的使用DK 中提供的最核心的线程池工具类 ThreadPoolExecutor,在 JDK 1.8 中这个类最复杂的构造方法有 7 个参数。corePoolSize:线程池保有的最小线程数。maximumPoolSize:线程池创建的最大线程数。keepAliveTime:上面提到项目根据忙闲来增减人员,那在编程世界里,如何定义忙和闲呢?很简单,一个线程如果在一段时间内,都没有执行任务,说明很闲,keepAliveTime

2020-10-11 19:41:28 150

空空如也

空空如也

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

TA关注的人

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