自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?

有了 namespace,自然 id 就可以重复,namespace 不同,namespace+id 自然。不同的 Xml 映射文件,如果配置了 namespace,那么 id 可以重复;使用的,如果没有 namespace,就剩下 id,那么,id 重复会导致数据互相覆盖。原因就是 namespace+id 是作为 Map。置 namespace,那么 id 不能重复;

2024-09-13 17:29:37 209

原创 mybatis 中Xml 映射文件中,除了常见的 select|insert|updae|delete标签之外,还有哪些标签?

加上动态 sql 的 9 个标签,其中。为不支持自增的主键生成策略标。为 sql 片段标签,通过。标签引入 sql 片段,

2024-09-13 17:29:11 197

原创 Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql?

Mybatis 动态 sql 可以在 Xml 映射文件内,以标签的形式编写动态 sql,执行原理。是根据表达式的值 完成逻辑判断并动态拼接 sql 的功能。

2024-09-13 17:27:44 186

原创 Dubbo Provider服务提供者要控制执行并发请求上限,具体怎么做?

限制 com.foo.BarService 的 sayHello 方法,服务器端并发执行(或占用线程池线程数)不能。限制 com.foo.BarService 的 sayHello 方法,每客户端并发执行(或占用连接的请求数)不能。限制 com.foo.BarService 的每个方法,服务器端并发执行(或占用线程池线程数)不能超过 10。限制 com.foo.BarService 的每个方法,每客户端并发执行(或占用连接的请求数)不能超过 10。客户端并发限流:actives。

2024-09-11 10:48:33 151

原创 Dubbo支持几种负载均衡策略?

在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有。存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。一致性 Hash,相同参数的请求总是发到同一提供者。那,久而久之,所有请求都卡在调到第二台上。轮询,按公约后的权重设置轮询比率。

2024-09-11 10:47:50 181

原创 spring事务

PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务。PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务。不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致.虚幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰。脏读 :一个事务读到了另一个事务的未提交的数据。

2024-09-11 10:47:02 225

原创 Mysql的锁你了解哪些

1. 共享锁:也就是读锁,⼀个事务给某⾏数据加了读锁,其他事务也可以读,但是不能写。2. 排它锁:也就是写锁,⼀个事务给某⾏数据加了写锁,其他事务不能读,也不能写。1. 乐观锁:并不会真正的去锁某⾏记录,⽽是通过⼀个版本号来实现的。在事务的隔离级别实现中,就需要利⽤所来解决幻读。1. ⾏锁:锁某⾏数据,锁粒度最⼩,并发度⾼。2. 悲观锁:上⾯所的⾏锁、表锁等都是悲观锁。2. 表锁:锁整张表,锁粒度最⼤,并发度低。3. 间隙锁:锁的是⼀个区间。

2024-09-11 10:44:54 149

原创 Tomcat双亲委派机制

嘿嘿,有了线程上下文加载器,JNDI服务使用这个线程上下文加载器去加载所需要的SPI代码,也就是父类加载器请求子类加载器去完成类加载的动作,这种行为实际上就是打通了双亲委派模型的层次结构来逆向使用类加载器,实际上已经违背了双亲委派模型的一般性原则。我们说,双亲委派模型很好的解决了各个类加载器的基础类的统一问题(越基础的类由越上层的加载器进行加载),基础类之所以称为“基础”,是因为它们总是作为被用户代码调用的API, 但没有绝对,如果基础类调用会用户的代码怎么办呢?实现这动作的代码模块成为“类加载器”。

2024-09-11 09:24:56 828

原创 如何设计兼容多个数据库

实现数据库适配器的方法有很多,可以手动编写适配器类,也可以使用现有的框架和库,如Java中的JDBC、Python中的DB-API等。实现抽象层的方法有很多,可以使用现有的框架和库,如Java中的JDBC、Python中的SQLAlchemy等。不同的数据库系统有各自的特性和优势,如MySQL的高性能、PostgreSQL的丰富功能、SQLite的轻量级等。使用通用的数据类型:选择通用的数据类型,如INTEGER、VARCHAR等,避免使用数据库特有的数据类型。

2024-09-11 09:18:58 860

原创 线程池重点知识点

实现RejectedExecutionHandler,并自己定义策略模式下我们以ThreadPoolExecutor为例展示下线程池的工作流程图1、如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(注意,执行这一步骤需要获取全局锁)。2、如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQueue。3、如果无法将任务加入BlockingQueue(队列已满),则在非corePool中创建新的线程来处理任务(注意,执行这一步骤需要获取全局锁)。

2024-09-11 09:14:11 389

原创 dubbo确定服务⽀持的协议

确定服务所⽀持的协议还是⽐较简单的,就是看⽤户配了多少个Protocol。和服务参数意义,Protocol也。1. ⾸先在SpringBoot的application.properties⽂件中就可能配置了协议。所以在服务导出时,需要从以上⼏个地⽅获取协议,结果可能是⼀个协议,也可能是多个协议,从⽽确定。2. 也可能在dubbo.properties⽂件中配置了协议。4. 也可能通过-D的⽅式也配置了协议。3. 也可能在配置中⼼中也配置了协议。是可以在各个配置点进⾏配置的。

2024-09-10 14:46:48 221

原创 dubbo服务导出思路

6. 因为Dubbo⽀持动态配置服务参数,所以服务导出时还需要绑定⼀个监听器Listener来监听服务的参数。5. 根据服务⽀持的不同协议,启动不同的Server,⽤来接收和处理请求。是否有修改,如果发现有修改,则需要重新进⾏导出。4. 将服务URL注册到注册中⼼去。3. 构造服务最终的URL。2. 确定服务⽀持的协议。1. 确定服务的参数。

2024-09-10 14:45:15 214

原创 dubbo服务导出⼤概原理

服务导出的⼊⼝为ServiceBean中的export()⽅法,当Spring启动完之后,通过接收Spring的。⼀个ServiceBean对象就表示⼀个Dubbo服务,ServiceBean对象中的参数就表示服务的参数,⽐如。但是在做这两件事情之前得先把服务的参数确定好,因为⼀个Dubbo服务的参数,除开可以在@Service注。确定好服务参数之后,就根据所配置的协议启动对应的⽹络服务器。中去配置某个服务的参数,所以⾸先要做的是确定好当前服务最终的(优先级最⾼)的参数值。中的动态配置信息变更。

2024-09-10 14:43:24 347

原创 为什么说CAS是乐观锁?底层对应那个类?

这与悲观锁(如传统的数据库锁)形成对比,悲观锁总是假设最坏的情况,即在数据被处理时总是会有其他线程来修改它,因此需要在整个数据处理过程中锁定数据。此外,CAS也存在一些潜在的问题,如ABA问题(即在CAS操作期间,一个值可能被其他线程多次修改后又改回原来的值,导致CAS操作无法正确感知数据的实际变动)。在CAS的底层实现中,Unsafe类起到了核心作用。综上所述,CAS之所以被称为乐观锁,是因为它在处理并发数据时持有一种乐观的态度,并通过底层的Unsafe类实现无锁操作,从而提高了程序的并发性能。

2024-09-09 21:47:24 249

原创 什么情况下需要对对象进行序列化?

为了在网络中有效地传输对象,需要将对象序列化为字节流,以便在接收端进行反序列化并恢复为原始对象。持久化存储:序列化是实现对象持久化存储的一种常见方法。通过将对象序列化为字节流并保存到文件中,可以确保对象状态的长期保存,即使程序关闭或重启后也能恢复对象状态。数据备份和恢复:当需要将对象状态保存在计算机中以备将来使用时,序列化是一种有效的手段。通过序列化,可以方便地将对象保存到文件或数据库中,以便在需要时进行恢复。对象序列化是一个将对象状态转换为字节流的过程,主要用于实现对象的完全保存或网络传输。

2024-09-09 21:46:27 416

原创 spring事务

PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务。PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务。不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致.虚幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰。脏读 :一个事务读到了另一个事务的未提交的数据。

2024-09-08 12:13:01 391

原创 Spring AOP的实现原理和场景;

AspectJ的底层技术是静态代理,即用一种AspectJ支持的特定语言编写切面,通过一个命令来。Spring AOP采用的是动态代理,在运行期间对业务方法进行增强,所以不会生成新类,对于。接口信息(应用Java的反射技术),生成一个实现了代理接口的动态代理类(字节码),再通过。编译,生成一个新的代理类,该代理类增强了业务类,这是在编译时增强,相对于下面说的运行。反射机制获得动态代理类的构造函数,利用构造函数生成动态代理类的实例对象,在调用具体方。时增强,编译时增强的性能更好。包,把被代理对象类的。

2024-09-08 12:11:55 359

原创 synchronized、volatile区别

存屏障,内存屏障指令保证了所有CPU操作结果都会直接刷到主存中(即释放锁前),从而保证。修改可见性和原子性,因为线程获得锁才能进入临界区,从而保证临界区中的所有语句全部得到。主要应用在多个线程对实例变量更改的场合,刷新主内存共享变量的值从而使得各个。了操作的内存可见性,同时也使得先获得这个锁的线程的所有操作。线程可以获得最新的值,线程读取变量的值需要从主存中读取;量,只有当前线程可以访问该变量,其他线程被阻塞住。标记的变量不会被编译器优化,可以禁止进行指令重排;仅能实现变量的修改可见性,不能保证原子性;

2024-09-08 12:09:53 360

原创 Restful API 和其他 API 设计风格的区别

基于资源的设计:Restful API 的设计思想是基于资源的,每一个资源都有一个唯一的标识 URI,并且通过 HTTP 方法来操作这个资源。而其他 API 设计风格通常是基于操作的,例如 SOAP 等。面向状态:Restful API 是基于 HTTP 协议的,HTTP 协议本身是无状态的,因此 Restful API 也是面向状态的设计。轻量级:Restful API 的设计风格非常轻量级,使用简单的 HTTP 请求来进行操作,而其他 API 设计风格通常需要额外的协议和格式来进行通信。

2024-09-07 10:39:13 453

原创 RESTful API 的设计原则

使用 HTTP 协议:RESTful API 使用 HTTP 协议作为通信协议,使用 HTTP 动词来表示请求的方法,比如 GET、POST、PUT、DELETE 等。资源作为核心概念:RESTful API 将资源作为核心概念,每个资源都有一个唯一的标识符(URI),客户端可以通过这个标识符来操作该资源。无状态:RESTful API 是无状态的,即每个请求都是独立的,服务器不会在客户端和服务端之间保留任何状态信息。

2024-09-07 10:38:12 255

原创 SpringBoot的核心注解

(3)@EnableAutoConfiguration和@SpringBootApplication是类级别的注解,根据maven依赖的jar来自动猜测完成正确的spring的对应配置,只要引入了spring-boot-starter-web的依赖,默认会自动配置Spring MVC和tomcat容器。(6)@ImportResource类级别注解,当我们必须使用一个xml的配置时,使用@ImportResource和@Configuration来标识这个文件资源的类。

2024-09-06 07:48:46 598

原创 SpringBoot中配置⽂件的加载顺序是怎样的?

jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置⽂件。jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置⽂件。jar包外部的application.properties或application.yml(不带spring.profile)配置⽂件。所有的配置都可以在命令⾏上进⾏指定;操作系统环境变量;

2024-09-06 07:48:13 450

原创 SpringBoot是如何启动Tomcat的

在创建Spring容器过程中,会利⽤@ConditionalOnClass技术来判断当前classpath中是否存在Tomcat依赖,如果存在则会⽣成⼀个启动Tomcat的Bean。Spring容器创建完之后,就会获取启动Tomcat的Bean,并创建Tomcat对象,并绑定端⼝等,然后启动Tomcat。⾸先,SpringBoot在启动时会先创建⼀个Spring容器。

2024-09-06 07:47:41 336

原创 SpringBoot中常⽤注解及其底层实现

SpringBootConfiguration:这个注解实际就是⼀个@Configuration,表示启动类也是⼀个。@SpringBootApplication注解:这个注解标识了⼀个SpringBoot⼯程,它实际上是另外三个注解。@Bean注解:⽤来定义Bean,类似于XML中的<bean>标签,Spring在启动时,会对加了@Bean注。解的⽅法进⾏解析,将⽅法的名字做为beanName,并通过执⾏⽅法得到bean对象。描的路径是启动类所在的当前⽬录。

2024-09-05 09:05:15 516

原创 SpringBoot中配置⽂件的加载顺序是怎样的?

jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置⽂件 再来加。jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置⽂件。jar包外部的application.properties或application.yml(不带spring.profile)配置⽂件。所有的配置都可以在命令⾏上进⾏指定;操作系统环境变量;

2024-09-05 09:04:16 291

原创 HTTPS是如何保证安全传输的

1. 客户端向服务端发送数据之前,需要先建⽴TCP连接,所以需要先建⽴TCP连接,建⽴完TCP连接后,4. 所以为了安全的传输公钥,需要⽤到数字证书,数字证书是具有公信⼒、⼤家都认可的,服务端向客户。⼒的,某个⽹站如果要⽀持https,都是需要申请数字证书的私钥的,中间⼈如果要⽣成能被客户端解。书,最后把数字证书发送给客户端,客户端收到数字证书后,就会通过数字证书提供的公钥来解密数字。的公钥,但是中间⼈是办法伪造数字证书发给客户端的,因为客户端上内嵌的数字证书是全球具有公信。

2024-09-04 08:45:36 137

原创 JAVA集合宝典

HashSet 是基于 HashMap 实现的,HashSet的值存放于HashMap的key上,HashMap的value统一为present,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层HashMap 的相关方法来完成,HashSet 不允许重复的值。HashMap 的 key 是唯一的,由源码可以看出 HashSet 添加进去的值就是作为HashMap 的key,并且在HashMap中如果K/V相同时,会用新的V覆盖掉旧的V,然后返回旧的V。

2024-09-04 08:43:27 1366

原创 AQS(抽象队列同步器)实现原理

AQS(抽象队列同步器)是一个用来构建锁和同步器的框架,它维护了一个volatile修饰的state(共享资源)和一个CLH(FIFO:先进先出)双向队列。

2024-09-03 14:27:57 857

原创 AQS是什么

而且tryRelease()的返回值代表着该线程是否已经完成资源的释放,因此在自定义同步器的tryRelease()时,需要明确这条件,当已经彻底释放资源(state=0),要返回true,否则返回false。unparkSuccessor用unpark()唤醒等待队列中最前驱的那个未放弃线程,此线程并不一定是当前节点的next节点,而是下一个可以用来唤醒的线程,如果这个节点存在,调用unpark()方法唤醒。当该节点获取到同步状态时,它会清除自己的值,将自己作为head节点,以便唤醒下一个节点。

2024-09-03 11:14:11 966

原创 Sychronized和ReentrantLock的区别

sychronized锁的是对象,锁信息保存在对象头中,ReentrantLock通过代码中int类型的state标识。sychronized会⾃动的加锁与释放锁,ReentrantLock需要程序员⼿动加锁与释放锁。sychronized的底层是JVM层⾯的锁,ReentrantLock是API层⾯的锁。sychronized是⾮公平锁,ReentrantLock可以选择公平锁或⾮公平锁。sychronized是⼀个关键字,ReentrantLock是⼀个类。

2024-09-03 11:00:34 275

原创 Sychronized的偏向锁、轻量级锁、重量级锁

偏向锁:在锁对象的对象头中记录⼀下当前获取到该锁的线程ID,该线程下次如果⼜来获取该锁就。轻量级锁:由偏向锁升级⽽来,当⼀个线程获取到锁后,此时这把锁是偏向锁,此时如果有第⼆个。线程来竞争锁,偏向锁就会升级为轻量级锁,之所以叫轻量级锁,是为了和重量级锁区分开来,轻。⾃旋锁:⾃旋锁就是线程在获取锁的过程中,不会去阻塞线程,也就⽆所谓唤醒线程,阻塞和唤醒。记,如果没有获取到,则继续循环获取,如果获取到了则表示获取到了锁,这个过程线程⼀直在运。量级锁底层是通过⾃旋来实现的,并不会阻塞线程。

2024-09-03 10:59:56 376

原创 CountDownLatch和Semaphore的区别和底层原理

过acquire()来获取许可,如果没有许可可⽤则线程阻塞,并通过AQS来排队,可以通过release()CountDownLatch中的数字减⼀,当数字被减成0后,所有await的线程都将被唤醒。Semaphore表示信号量,可以设置许可的个数,表示同时允许最多多少个线程使⽤该信号量,通。⽅法来释放许可,当某个线程释放了某个许可后,会从AQS中正在排队的第⼀个线程开始依次唤。await()⽅法的线程会利⽤AQS排队,⼀旦数字被减为0,则会将AQS中。await()将会阻塞,其他线程可以调⽤。

2024-09-03 10:58:52 348

原创 ReentrantLock中tryLock()和lock()⽅法的区别

tryLock()表示尝试加锁,可能加到,也可能加不到,该⽅法不会阻塞线程,如果加到锁则返回。lock()表示阻塞加锁,线程会阻塞直到加到锁,⽅法也没有返回值。true,没有加到则返回false。

2024-09-03 10:58:18 393

原创 ReentrantLock中的公平锁和⾮公平锁的底层实现

⽤lock()⽅法加锁时,如果是公平锁,会先检查AQS队列中是否存在线程在排队,如果有线程在排队,⾸先不管是公平锁和⾮公平锁,它们的底层实现都会使⽤AQS来进⾏排队,它们的区别在于:线程在使。不管是公平锁还是⾮公平锁,⼀旦没竞争到锁,都会进⾏排队,当锁释放时,都是唤醒排在最前⾯的线。则当前线程也进⾏排队,如果是⾮公平锁,则不会去检查是否有线程在排队,⽽是直接竞争锁。另外,ReentrantLock是可重⼊锁,不管是公平锁还是⾮公平锁都是可重⼊的。

2024-09-03 10:57:44 222

原创 如何理解volatile关键字

在并发领域中,存在三⼤特性:原⼦性、有序性、可⻅性。volatile关键字⽤来修饰对象的属性,在并发。环境下可以保证这个属性的可⻅性,对于加了volatile关键字的属性,在对这个属性进⾏修改时,会直接。将CPU⾼级缓存中的数据写回到主内存,对这个变量的读取也会直接从主内存中读取,从⽽保证了可⻅。性,底层是通过操作系统的内存屏障来实现的,由于使⽤了内存屏障,所以会禁⽌指令重排,所以同时。也就保证了有序性,在很多并发场景下,如果⽤好volatile关键字可以很好的提⾼执⾏效率。

2024-09-03 10:57:04 416

原创 ConcurrentHashMap的扩容机制

如果某个线程put时,发现没有正在进⾏扩容,则将key-value添加到ConcurrentHashMap中,然。当某个线程进⾏put时,如果发现ConcurrentHashMap正在进⾏扩容那么该线程⼀起进⾏扩容。在转移元素时,先将原数组分组,将每组分给不同的线程来进⾏元素的转移,每个线程负责⼀组或。1.7版本的ConcurrentHashMap是基于Segment分段实现的。扩容的判断也是每个Segment内部单独判断的,判断是否超过阈值。先⽣成新的数组,然后转移元素到新数组中。

2024-09-03 10:02:20 391

原创 HashMap的扩容机制原理

如果该位置下的元素个数超过了8,则⽣成⼀个新的红⿊树,并将根节点的添加到新数组的对。如果该位置下的元素个数没有超过8,那么则⽣成⼀个链表,并将链表的头节点添加到新数组。如果是红⿊树,则先遍历红⿊树,先计算出红⿊树中每个元素对应在新数组中的下标位置。取每个元素的key,并基于新数组⻓度,计算出每个元素在新数组中的下标。如果是链表,则直接将链表中的每个元素重新计算下标,并添加到新数组中去。遍历⽼数组中的每个位置上的链表上的每个元素。遍历⽼数组中的每个位置上的链表或红⿊树。统计每个下标位置的元素个数。

2024-09-03 09:58:02 296

原创 ArrayList和LinkedList有哪些区别

2、linkedlist:AbstractSequentialList 实现了get(int index)、set(int index, E element)、add(int index, E element) 和 remove(int index)这些骨干性函数。1、arraylist:提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。⾸先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实。

2024-09-03 09:44:18 344

原创 ThreadLocal的底层原理

强引⽤指向ThreadLocalMap,ThreadLocalMap也是通过强引⽤指向Entry对象,线程不被回收,Entry对象也就不会被回收,从⽽出现内存泄漏,解决办法是,在使⽤了ThreadLocal对象之后,⼿。把设置的key,value,也就是Entry对象进⾏回收,但线程池中的线程不会回收,⽽线程对象是通过。ThreadLocal经典的应⽤场景就是连接管理(⼀个线程持有⼀个连接,该连接对象可以在不同的⽅。ThreadLocal是Java中所提供的线程本地存储机制,可以利⽤该机制将数据。

2024-09-03 09:21:54 256

原创 String、StringBuffer、StringBuilder的区别

String 类实现了 CharSequence 接口。字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。我们来看一下这张对String操作时内存变化的图:我们可以看到,初始String值为“hello”,然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟

2024-09-03 09:10:59 886

K8S部署集群搭建.pdf

K8S部署集群搭建详解,助你起飞

2024-09-02

JVM面试宝典,用30分钟搞明白JVM原理

1、JVM中类加载器分类与核心功能 2、类加载双亲委派机制 3、Tomcat底层类加载是用的双亲委派机制 4、对象完整创建流程 5、对象分配内存时的指针碰撞与空闲列表机制 6、对象分配内存时的并发问题解决CAS与TLAB机制 7、对象头 8、如何计算对象占用内存大小 9、对象指针压缩 10、对象内存分配流程 11、解释下对象栈上分配、逃逸分析与标量替换 12、判断对象是否是垃圾的引用计数法 13、JVM底层可达性分析算法如何找垃圾对象 14、可达性分析算法中不可达的对象还有机会存活吗 15、什么样的类能被回收 16、解释下JVM内部各种垃圾收集算法 17、解释下CMS收集器垃圾收集过程 18、CMS比较严重的问题并发收集阶段再次触发Full gc怎么处理 19、解释下垃圾收集底层三色标记算法 20、解释下对象漏标的处理方案增量更新与原始快照(SATB) 21、CMS、G1与ZGC对于对象漏标问题的处理区别 22、解释下G1收集器垃圾收集过程 23、G1垃圾收集器最大停顿时间是如何实现的 24、内存泄露到底是怎么回事,怎么快速排查与解决 25、GC是什么时候都能做吗?知道GC安全点与安全

2024-08-30

空空如也

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

TA关注的人

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