每日十题八股-2024年12月16日

server/2024/12/18 0:43:55/

1.垃圾回收算法哪些阶段会stop the world?
2.minorGC、majorGC、fullGC的区别,什么场景触发full GC
3.垃圾回收器 CMS 和 G1的区别?
4.什么情况下使用CMS,什么情况使用G1?
5.G1回收器的特色是什么?
6.GC只会对堆进行GC吗?
7.说一下你对 Spring 的理解
8.Spring IoC和AOP 介绍一下
9.Spring的aop介绍一下
10.IOC和AOP是通过什么机制来实现的?

1.垃圾回收算法哪些阶段会stop the world?

STW,即Stop-The-World的缩写,指的是系统在执行特定操作时需暂停(停止)所有应用程序线程。
标记阶段和再标记阶段会stop the world来避免错标,漏标。为了缩短stop the world时间,会采用并发算法,多个GC线程来。
复制/压缩阶段(Copy/Compact Phase)这一过程涉及对象的内存地址变化,因此需要暂停应用线程,避免引用被修改导致的数据不一致。此阶段一般是Stop-the-World中耗时较长的部分。

2.minorGC、majorGC、fullGC的区别,什么场景触发full GC?

最大的区别是其作用范围和触发频率。
minorGC,是作用在年轻代的,当eden区无法再创建新对象时,会触发minorGC,将eden区和一个survivor区的存活对象移至另外一个survivor区。
majorGC发生老年代。当老年代无法再新增对象时,会指向GC算法进行回收。
fullGCN是堆整个堆内存,以及永久代元空间的GC。一般调用System.gc()或者Runtime.getRuntime().gc()后,尝试执行。或者永久代或元空间内存不足。

3.垃圾回收器 CMS 和 G1的区别?

CMS:concurrent mark sweep 并发标记清除算法,是分代的老年代垃圾回收器,也是第一个关注到STW的垃圾回收器。 通过三色标记法:初始标记(stw,探索被GCRoots引用的对象),并发标记,重新标记(stw对并发标记进行校验),最后再并发清除。只清除,不整理,会造成大量内存碎片,触发Full GC。

G1:Garbage-First Garbage Collector 垃圾第一算法,是分区的可用于年轻代合老年的回收器。 G1 有五个属性:分代、增量、并行、标记整理、STW。把堆分为固定大小的region,每个region可以是eden,survivor,old,humongous或者空白。G1根据,每个region的垃圾回收情况决定下一次GC处理哪些region,是增量的一点一点GC。并且回收的时候是并行的。对于老年代的region,执行标记-整理算法。
在这里插入图片描述
在这里插入图片描述

4.什么情况下使用CMS,什么情况使用G1?

在这里插入图片描述

5.G1回收器的特色是什么?

G1最大的特点是引入分区的思路,弱化了分代的概念。
G1可以通过设置预期停顿时间(Pause Time)来控制垃圾收集时间避免应用雪崩现象。
G1 能更充分的利用 CPU 多核环境下的硬件优势,来缩短 stop the world 的停顿时间。

6.GC只会对堆进行GC吗?

JVM 的垃圾回收器不仅仅会对堆进行垃圾回收,它还会对方法区进行垃圾回收。
方法区是用于存储类信息、常量、静态变量等数据的区域。虽然方法区中的垃圾回收与堆有所不同,但是同样存在对不再需要的常量、无用的类信息等进行清理的过程。

7.说一下你对 Spring 的理解

Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
其核心特性分别为IoC控制反转,AOP面向切面编程,事务管理和MVC框架。
在这里插入图片描述
在这里插入图片描述

(基于注解的方式用得多了,都忘记当初基于xml配置的依赖注入等等了)。

8.Spring IoC和AOP 介绍一下

这部分看javaguide比较好。

9.Spring的aop介绍一下

10.IOC和AOP是通过什么机制来实现的?

在这里插入图片描述
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib 生成一个被代理对象的子类来作为代理

IoC

我粗略的总结一下:控制反转就是把创建和管理 bean 的过程转移给了第三方。而这个第三方,就是 Spring IoC Container,对于 IoC 来说,最重要的就是容器。
Bean 其实就是包装了的 Object,无论是控制反转还是依赖注入,它们的主语都是 object,而 bean 就是由第三方包装好了的 object。
dependency injection - 依赖注入。配置文件把资源从外部注入到内部,容器加载了外部的文件、对象、数据,然后把这些资源注入给程序内的对象,维护了程序内外对象之间的依赖关系。
在这里插入图片描述

AOP

AOP,也就是 Aspect-oriented Programming。通过切面技术为业务主体增加额外的通知(Advice),从而对声明为“切点”(Pointcut)的代码块进行统一管理和装饰。(例如,苍穹外卖插入和更新商品信息,用户信息等等要set修改时间,或者创建时间,就自定义注解,并利用切面类,在执行mapper函数之前进行set操作。

我们可以简单的把 AOP 理解为贯穿于方法之中,在方法执行前、执行时、执行后、返回值后、异常后要执行的操作。
在这里插入图片描述
会用到反射等等。


http://www.ppmy.cn/server/151036.html

相关文章

RabbitMQ中的Work Queues模式

在现代分布式系统中,消息队列(Message Queue)是实现异步通信和解耦系统的关键组件之一。RabbitMQ 是一个广泛使用的开源消息代理软件,支持多种消息传递模式。其中,Work Queues(工作队列)模式是一…

【FFmpeg】FFmpeg 内存结构 ⑥ ( 搭建开发环境 | AVPacket 创建与释放代码分析 | AVPacket 内存使用注意事项 )

文章目录 一、搭建开发环境1、开发环境搭建参考2、项目搭建 二、AVPacket 创建与释放代码分析1、AVPacket 创建与释放代码2、Qt 单步调试方法3、单步调试 - 分析 AVPacket 创建与销毁代码 三、AVPacket 内存使用注意事项1、谨慎使用 av_init_packet 函数2、av_init_packet 函数…

【QT常用技术讲解】使用QMovie+QLabel播放gif动态图片,实现“正在加载”功能(源代码在资源中下载)

前言 界面在实现事件等待时,通过会显示一个转圈圈的动态图片,表示“正在加载”,事件完成之后关闭图片,QT中可以使用QMovieQLabel完成gif动态图片的播放及关闭的效果。 效果图 功能讲解 1、加载动画 void MainWindow::addloadgi…

vue3中的v-model如何自定义修饰符

子组件封装 <script setup lang"ts"> import { defineModel } from "vue"const firstName defineModel("first-name") // 自定义组件修饰符&#xff0c;首字母大写 const [lastName, lastNameModifiers] defineModel("last-name&q…

3D 生成重建036-HyperDiffusion直接生成nerf几何

3D 生成重建036-HyperDiffusion直接生成nerf几何 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 作者提出了一种名为HyperDiffusion的新型方法&#xff0c;用于直接生成隐式神经辐射场&#xff0c;方法是预测其权重空间中的参数。与以往需要对神经网络的单个实例进行优…

FedAdam算法:供给方信用,数据质量;更新一致性

FedAdam算法:供给方信用,数据质量;更新一致性 FedAdam算法概述 FedAdam是一种联邦学习(Federated Learning)算法。联邦学习是一种机器学习技术,它允许在多个设备或数据中心(称为客户端)上训练模型,而无需将数据集中到一个中央服务器,从而保护数据隐私。FedAdam主要用于…

Python+OpenCV系列:图像的运算

文章目录 PythonOpenCV系列&#xff1a;图像的加权和、覆盖1. 图像加权和&#xff08;加权融合&#xff09;2. 图像覆盖&#xff08;区域叠加&#xff09;3. 应用场景4. 总结 PythonOpenCV系列&#xff1a;图像的加权和、覆盖 在图像处理中&#xff0c;图像的加权和与覆盖是两…

Lumos学习王佩丰Excel第二十一讲:经典Excel动态图表实现原理

一、动态图表实现原理 1、理解图表中的数据系列 在Excel图表中&#xff0c;系列指的是图表中的数据集合&#xff0c;它通常代表着一个数据源。每个系列都可以包含多个数据点&#xff0c;这些数据点在图表中以特定的形式展现&#xff0c;如柱状图中的柱子&#xff0c;折线图中…