当前位置: 首页 > news >正文

JVM知识点梳理

目录标题

  • 1.类加载机制
    • 1.1 Java 运行时一个类是什么时候被加载的?
    • 1.2 JVM 一个类的加载过程?
    • 1.3 一个类被初始化的过程?
    • 1.4 继承时父子类的初始化顺序是怎样的?
    • 1.5 究竟什么是类加载器?
    • 1.6 JVM 有哪些类加载器?
    • 1.7 JVM 中不同的类加载器加载哪些文件?
    • 1.8 JVM 三层类加载器之间的关系是继承吗?
    • 1.9 你了解 JVM 类加载的双亲委派模型吗?
    • 1.10 JDK 为什么要设计双亲委派模型,有什么好处?
    • 1.11 可以打破JVM 双亲委派模型吗?如何打破JVM 双亲委派模型?
    • 1.12 如何自定义自己的类加载器?
    • 1.13 ClassLoader 中的 loadClass()、findClass()、defineClass()区别?
    • 1.14 Tomcat 的类加载机制吗?
    • 1.15 为什么 Tomcat 要破坏双亲委派模型?
    • 1.16 有没有听说过热加载和热部署,如何自己实现一个热加载?
    • 1.17 加载一个类采用 Class.forName()和 ClassLoader 有什么区别?
  • 2.深入剖析 JVM 内存管理
    • 1.画一下 JVM 整个运行原理图?
    • 2. 请介绍一下 JVM 的内存结构划分?
    • 3.JVM 哪些区域是线程私有的,哪些区域是线程共享的?
    • 4.JVM 运行时数据区 程序计数器 的特点及作用?
    • 5.JVM 运行时数据区 虚拟机栈的特点及作用?
    • 6.JVM 运行时数据区 本地方法栈的特点及作用?
    • 7 JVM 运行时数据区 Java 堆的特点及作用?
    • 8.JVM 中对象如何在堆内存分配?
    • 9.JVM 堆内存中的对象布局?
    • 10.JVM 什么情况下会发生堆内存溢出?
    • 11.JVM 如何判断对象可以被回收?
    • 12.谈谈 Java 中不同的引用类型?
    • 13.JVM 堆内存分代模型?
    • 14.请介绍一下 JVM 堆中新生代的垃圾回收过程?
    • 15.JVM 对象动态年龄判断是怎么回事?
    • 16.什么是老年代空间分配担保机制
    • 16.什么情况下对象会进入老年代?
    • 17.JVM 运行时数据区元空间的特点及作用?
    • 18.JVM 本机直接内存的特点及作用?
    • 19.JVM 本机直接内存溢出问题?
    • 20.说几个与 JVM 内存相关的核心参数?
  • 3.垃圾回收器
    • 1.堆为什么要分成年轻代和老年代?
    • 2.JVM 堆的年轻代为什么要有两个 Survivor 区?
    • 3.Eden 区与 Survivor 区的空间大小比值为什么默认是 8:1:1?
    • 4 请介绍下 JVM 中的垃圾回收算法?
      • 1.标记-清除算法
          • 标记
          • 清除
      • 2.复制算法
      • 3.标记整理算法
      • 4 分代收集算法
    • 5.请介绍一下 JVM 垃圾收集器?
      • 1.Serial 收集器
      • 2. ParNew 收集器
      • 3.Parallel Scavenge 收集器
      • 4.Serial Old 收集器
      • 5.Parallel Old 收集器
      • 6.CMS 收集器
      • 7.G1 收集器
        • 1.G1 垃圾收集器的基本原理
        • 2.G1 垃圾收集器如何做到可预测的停顿时间?
        • 3.G1 垃圾收集器是否还有年代的划分?
        • 4.G1 垃圾收集器中的大对象?
        • 5.G1 垃圾收集器内存大小如何设置?
        • 6.G1 垃圾收集器新生代还有 Eden 和 Survivor 吗?
        • 7.G1 垃圾收集器的新生代垃圾回收
        • 8.G1 垃圾收集器的老年代垃圾回收
        • 9.G1 垃圾收集器的混合垃圾回收?
        • 10.G1 回收失败时的 Full GC
        • 11.什么时候使用 G1 垃圾收集器?
      • 8. ZGC 收集器
      • 9.Shenandoah 收集器
      • 10.项目所用jvm实例
  • 6.JVM 故障诊断性能调优实战
    • 1.什么是内存泄漏?什么是内存溢出?
    • 2.线上环境的 JVM 都设置多大?
    • 3.线上 Java 服务器内存飙升怎么回事?
    • 4.线上 Java 项目 CPU 飙到 100%怎么排查?
    • 5 JVM 堆溢出后,其他线程是否可以继续工作?
    • 6. 线上 Java 项目 OOM 了,怎么回事?
    • 7. 某一天晚上,线上 Java 服务器宕机了,怎么 回事?
    • 8.jvm调优?

1.类加载机制

1.1 Java 运行时一个类是什么时候被加载的?

一个类在什么时候开始被加载,《Java 虚拟机规范》中并没有进行强制约束,交给了虚拟机自己去自由实现HotSpot 虚拟机是按需加载,在需要用到该类的时候加载这个类
1、Sun 公司最早的 Classic 虚拟机;
2、Sun/Oracle 公司的 HotSpot 虚拟机; 3、BEA 公司的 JRockit 虚拟机;
4、IBM 公司的 IBM J9 虚拟机;
官方:https://docs.oracle.com/javase/8/
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
-XX:+TraceClassLoading

Java虚拟机(JVM)在以下几个关键时刻会加载一个类:

  1. 使用类的静态成员:当首次访问类的静态变量或调用静态方法时。
  2. 实例化类:当使用new关键字创建类的实例时。
  3. 反射:当使用反射机制,如调用Class.forName或ClassLoader.loadClass时。
  4. 初始化子类:在初始化子类时,如果父类还没有被加载,会首先加载父类。
  5. 启动类:JVM启动时,会加载启动类,即包含main方法的类。

1.2 JVM 一个类的加载过程?

一个类从加载到 jvm 内存,到从 jvm 内存卸载,它的整个生命周期会经历 7 个阶段:
1、加载(Loading)
2、验证(Verification) 3、准备(Preparation) 4、解析(Resolution)
5、初始化(Initialization) 6、使用(Using)
7、卸载(Unloading)
其中验证、准备、解析三个阶段统称为连接(Linking);
在这里插入图片描述
加载:classpath、jar 包、网络、某个磁盘位置下的类的 class 二进制字节流读进来,在内存中生成一个代表这个类的 java.lang.Class 对象放入元空间,此阶段我们程序员可以干预,我们可以自定义类加载器来实现类的加载;

验证:验证 Class 文件的字节流中包含的信息符合《Java 虚拟机规范》的全部约束要求,保证虚拟机的安全;

准备:类变量赋默认初始值,int 为 0,long 为 0L,boolean 为 false,引用类型为 null;常量赋正式值;

解析:把符号引用翻译为直接引用;

初始化:当我们 new 一个类的对象,访问一个类的静态属性,修改一个类的静态属性,调用一个类的静态方法,用反射 API 对一个类进行调用,初始化当前类,其父类也会被初始化 那么这些都会触发类的初始化;

使用:使用这个类;

卸载

  1. 该类所有的实例都已经被 GC,也就是 JVM 中不存在该 Class 的任何实例;
  2. 加载该类的 ClassLoader 已经被 GC;
  3. 该类的 java.lang.Class 对象没有在任何地方被引用,如不能在任何地方通过反射访问该类的方法;

1.3 一个类被初始化的过程?

在这里插入图片描述
类的初始化阶段,Java 虚拟机才真正开始执行类中编写的 Java 程序代码;

进行准备阶段时,变量已经赋过一次系统要求的初始零值,而在初始化阶段,才真正初始化类变量和其他资源;

1.4 继承时父子类的初始化顺序是怎样的?

父类–静态变量
父类–静态初始化块子类–静态变量
子类–静态初始化块父类–变量
父类–初始化块父类–构造器 子类–变量
子类–初始化块子类–构造器
(静态代码块或静态变量其实按照代码顺序加载)

1.5 究竟什么是类加载器?

在这里插入图片描述
在类"加载"阶段,通过一个类的全限定名来获取描述该类的二进制字节流的这个动作的“代码”被称为“类加载器(Class Loader)”,这个动作是可以自定义实现的;

1.6 JVM 有哪些类加载器?

站在 Java 虚拟机的角度来看,只存在两种不同的类加载器:
1、启动类加载器(Bootstrap ClassLoader),使用 C++语言实现,是虚拟机自身的一部分;
2、其他所有的类加载器,由 Java 语言实现,独立存在于虚拟机外部,并且全都继承自抽象类 java.lang.ClassLoader;站在 Java 开发者的角度来看,自 JDK 1.2 开始,Java 一直保持着三层类加载器架构;

在这里插入图片描述

1.7 JVM 中不同的类加载器加载哪些文件?

1、启动类加载器(Bootstrap ClassLoader):(根的类加载器)C++语言实现的
<JAVA_HOME>\jre\lib\rt.jar,resources.jar、charsets.jar被-Xbootclasspath 参数所指定的路径中存放的类库;

2、扩展类加载器(Extension ClassLoader):
sun.misc.Launcher$ExtClassLoader,<JAVA_HOME>\jre\lib\ext,
被 java.ext.dirs 系统变量所指定的路径中所有的类库;

3、应用程序类加载器(Application ClassLoader):系统的类加载器
sun.misc.Launcher$AppClassLoader
加载用户类路径(ClassPath)上所有的类库;

1.8 JVM 三层类加载器之间的关系是继承吗?

在这里插入图片描述
JVM的三层类加载器之间的关系不是继承关系,而是通过委托模型实现的。这种设计确保了类加载的顺序和安全性,避免类重复加载和冲突。通过委托模型,类加载请求从下到上逐层委托,直到找到合适的类加载器来加载指定的类

1.9 你了解 JVM 类加载的双亲委派模型吗?

在这里插入图片描述
双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当上一层类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到这个类)时,下一层类加载器才会尝试自己去加载;

1.10 JDK 为什么要设计双亲委派模型,有什么好处?

1. 确保安全,避免 Java 核心类库被修改;

2、避免重复加载;

3、保证类的唯一性;

如果你写一个 java.lang.String 的类去运行,发现会抛出如下异常;
在这里插入图片描述

1.11 可以打破JVM 双亲委派模型吗?如何打破JVM 双亲委派模型?

可以;
想要打破这种模型,那么就自定义一个类加载器,重写其中的 loadClass 方法,使其不进行双亲委派即可;

1.12 如何自定义自己的类加载器?

1、继承 ClassLoader

2、覆盖 findClass(String name)方法 或者 loadClass() 方法; findClass(String name)方法 不会打破双亲委派;
loadClass() 方法 可以打破双亲委派;

1.13 ClassLoader 中的 loadClass()、findClass()、defineClass()区别?

loadClass() 就是主要进行类加载的方法,默认的双亲委派机制就实现在这个方法中;

findClass() 根据名称或位置加载.class 字节码;

definclass() 把字节码转化为 java.lang.Class;

1、当我们想要自定义一个类加载器的时候,并且想破坏双亲委派模型时,我们会重写 loadClass()方法;

2、如果我们想定义一个类加载器,但是不想破坏双亲委派模型的时候呢?可以可以重写 findClass 方法(),findClass()方法是 JDK1.2 之后的 ClassLoader 新添加的一个方法,这个方法只抛出了一个异常,没有默认实现;
JDK1.2 之后已不再提倡用户直接覆盖 loadClass()方法,而是建议把自己的类加载逻辑实现到 findClass()方法中;
所以, 如果你想定义一个自己的类加载器, 并且要遵守双亲委派模型, 那么可以继承 ClassLoader,并且在 findClass()中实现你自己的加载逻辑即可;

1.14 Tomcat 的类加载机制吗?

在这里插入图片描述
可以看到,在原来的 Java 的类加载机制基础上,Tomcat 新增了 3 个基础类加载器和每个 Web 应用的类加载器+JSP 类加载器;
3 个基础类加载器在 conf/catalina.properties 中进行配置:
common.loader=“ c a t a l i n a . b a s e / l i b " , " {catalina.base}/lib"," catalina.base/lib","{catalina.base}/lib/.jar"," c a t a l i n a . h o m e / l i b " , " {catalina.hom e}/lib"," catalina.home/lib","{catalina.home}/lib/.jar”
server.loader= shared.loader=
Tomcat 自定义了 WebAppClassLoader 类加载器,打破了双亲委派的机制,即如果收到类加载的请求,首先会尝试自己去加载,如果找不到再交给父加载器去加载,目的就是为了优先加载 Web 应用自己定义的类,我们知道 ClassLoader 默认的 loadClass 方法是以双亲委派的模型进行加载类的,那么 Tomcat 打破了这个规则,重写了 loadClass 方法,我们可以看到

WebAppClassLoader 类中重写了 loadClass 方法;

1.15 为什么 Tomcat 要破坏双亲委派模型?

Tomcat 是 web 容器,那么一个 web 容器可能需要部署多个应用程序;
1、部署在同一个 Tomcat 上的两个 Web 应用所使用的 Java 类库要相互隔离;
2、部署在同一个 Tomcat 上的两个 Web 应用所使用的 Java 类库要互相共享;
3、保证 Tomcat 服务器自身的安全不受部署的 Web 应用程序影响;
4、需要支持 JSP 页面的热部署和热加载;

1.16 有没有听说过热加载和热部署,如何自己实现一个热加载?

热加载 是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般不会用于正式的生产环境;

热部署 是指可以在不重启服务的情况下重新部署整个项目,比如 Tomcat 热部署就是在程序运行时,如果我们修改了 War 包中的内容,那么 Tomcat 就会删除之前的 War 包解压的文件夹,重新解压新的 War 包生成新的文件夹;

1、热加载是在运行时重新加载 class,后台会启动一个线程不断检测你的 class 是否发生改变;
2、热部署是在运行时重新部署整个项目ÿ

相关文章:

JVM知识点梳理

目录标题 1.类加载机制1.1 Java 运行时一个类是什么时候被加载的?1.2 JVM 一个类的加载过程?1.3 一个类被初始化的过程?1.4 继承时父子类的初始化顺序是怎样的?1.5 究竟什么是类加载器?1.6 JVM 有哪些类加载器?1.7 JVM 中不同的类加载器加载哪些文件?1.8 JVM 三层类加载…...

产品经理-一份标准需求文档的8个模块(14)

一份标准优秀的产品需求文档包括&#xff1a; ❑ 封面&#xff1b; ❑ 文档修订记录表&#xff1b; ❑ 目录&#xff1b; ❑ 引言&#xff1b; ❑ 产品概述&#xff1a;产品结构图 ❑ 详细需求说明&#xff1a;产品逻辑图、功能与特性简述列表、交互/视觉设计、需求详细描述&am…...

如何用一个例子向10岁小孩解释高并发实时服务的单线程事件循环架构

I/O密集型进程和CPU密集型进程 聊天应用程序、MMO&#xff08;大型多人在线&#xff09;游戏、金融交易系统、等实时服务需要处理大量并发流量和实时数据。 这些服务是I/O密集型的&#xff0c;因为它们花费大量资源处理输入输出操作&#xff0c;例如高吞吐量、低延迟网络通信…...

如何为帕金森病患者选择合适的步行辅助设备?

选择步行辅助设备的步骤和建议 为帕金森病患者选择合适的步行辅助设备时&#xff0c;应考虑以下几个关键因素&#xff1a; 患者的具体症状和需求&#xff1a;帕金森病患者的步行困难可能包括冻结步态、平衡能力下降和肌肉僵硬。选择设备时&#xff0c;应考虑这些症状&#xff…...

【排序算法】1.冒泡排序-C语言实现

冒泡排序&#xff08;Bubble Sort&#xff09;是最简单和最通用的排序方法&#xff0c;其基本思想是&#xff1a;在待排序的一组数中&#xff0c;将相邻的两个数进行比较&#xff0c;若前面的数比后面的数大就交换两数&#xff0c;否则不交换&#xff1b;如此下去&#xff0c;直…...

Unity最新第三方开源插件《Stateful Component》管理中大型项目MonoBehaviour各种序列化字段 ,的高级解决方案

上文提到了UIState, ObjectRefactor等,还提到了远古的NGUI, KBEngine-UI等 这个算是比较新的解决方法吧,但是抽象出来,问题还是这些个问题 所以你就说做游戏是不是先要解决这些问题? 而不是高大上的UiImage,DoozyUI等 Mono管理引用基本用法 ① 添加Stateful Component …...

Spark SQL----INSERT TABLE

Spark SQL----INSERT TABLE 一、描述二、语法三、参数四、例子4.1 Insert Into4.2 Insert Overwrite 一、描述 INSERT语句将新行插入表中或覆盖表中的现有数据。插入的行可以由值表达式指定&#xff0c;也可以由查询结果指定。 二、语法 INSERT [ INTO | OVERWRITE ] [ TABL…...

socket功能定义和一般模型

1. socket的功能定义 socket是为了使两个应用程序间进行数据交换而存在的一种技术&#xff0c;不仅可以使同一个主机上两个应用程序间可以交换数据&#xff0c;而且可以使网络上的不同主机间上的应用程序间进行通信。 2. 图解socket的服务端/客户端模型...

如何在linux中给vim编辑器添加插件

在Linux系统中给Vim编辑器添加插件通常通过插件管理器来完成&#xff0c;以下是一般的步骤&#xff1a; 1.使用插件管理器安装插件 安装插件管理器&#xff08;如果尚未安装&#xff09;&#xff1a; 常见的插件管理器包括 Vundle、vim-plug 和 Pathogen 等。你可以根据个人喜…...

Web 中POST为什么会发送两次请求

文章目录 前言一、浏览器的重试机制二、跨域请求与预检请求三、表单的自动提交四、服务器配置问题五、前端代码的重复执行六、同源策略与CORS总结 前言 我们在做Web开发时&#xff0c;经常会使用浏览器F12查看请求参数是否正确&#xff0c;但是会发现POST请求&#xff0c;一个地…...

C语言经典程序100案例

C语言经典程序100题(完整版) 【程序1】题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数都是多少 程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 #include "stdio…...

南京邮电大学统计学课程实验3 用EXCEL进行方差分析 指导

一、实验描述 实验目的 1、学会在计算机上利用EXCEL进行单因素方差分析&#xff1b; 2、学会在计算机上利用EXCEL进行无重复的双因素方差分析。 二、实验环境 实验中使用以下软件和硬件设备 &#xff08;1&#xff09;Windows XP操作系统&#xff1b; &#xff08;2&am…...

2024-07-13 Unity AI状态机2 —— 项目介绍

文章目录 1 项目介绍2 模块介绍2.1 BaseState2.2 ...State2.2.1 PatrolState2.2.2 ChaseState / AttackState / BackState 2.3 StateMachine2.4 Monster 3 其他功能4 类图 项目借鉴 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 项目介绍 ​ 本项目使用 Unity 2…...

shell脚本-linux如何在脚本中远程到一台linux机器并执行命令

需求&#xff1a;我们需要从11.0.1.17远程到11.0.1.16上执行命令 实现&#xff1a; 1.让11.0.1.17 可以免密登录到11.0.1.16 [rootlocalhost ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created d…...

Spring Data Redis + Redis数据缓存学习笔记

文章目录 1 Redis 入门1.1 简介1.2 Redis服务启动与停止&#xff08;Windows&#xff09;1.2.1 服务启动命令1.2.2 客户端连接命令1.2.3 修改Redis配置文件1.2.4 Redis客户端图形工具 2. Redis数据类型2.1 五种常用数据类型介绍 3. Redis常用命令3.1 字符串操作命令3.2 哈希操作…...

在项目中,如何使用springboot+vue+springsecurity+redis缓存+Axios+MySQL数据库+mybatis

要在项目中使用springbootvuespringsecurityredis缓存AxiosMySQL数据库mybatis&#xff0c;可以按照以下步骤进行操作&#xff1a; 创建一个Spring Boot项目&#xff0c;并添加所需的依赖。在pom.xml文件中添加Spring Boot、Spring Security、Redis、MySQL和MyBatis的依赖项。 …...

微调 Florence-2 - 微软的尖端视觉语言模型

Florence-2 是微软于 2024 年 6 月发布的一个基础视觉语言模型。该模型极具吸引力&#xff0c;因为它尺寸很小 (0.2B 及 0.7B) 且在各种计算机视觉和视觉语言任务上表现出色。 Florence 开箱即用支持多种类型的任务&#xff0c;包括: 看图说话、目标检测、OCR 等等。虽然覆盖面…...

【数据结构】二叉树全攻略,从实现到应用详解

​ &#x1f48e;所属专栏&#xff1a;数据结构与算法学习 &#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ ​ &#x1f341;1. 树形结构的介绍 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做…...

微信小程序加载动画文件

最近在做微信小程序的动画&#xff0c;调研了几种方案 PAG 腾讯自家的&#xff0c;分为完整版和lite版&#xff0c;对于矢量动画挺好的&#xff0c;但是位图会有问题 完整版会逐渐卡死&#xff0c;lite虽然不会卡死&#xff0c;但是很模糊&#xff0c;优点是动画文件很的很小。…...

[计算机网络] VPN技术

VPN技术 1. 概述 虚拟专用网络&#xff08;VPN&#xff09;技术利用互联网服务提供商&#xff08;ISP&#xff09;和网络服务提供商&#xff08;NSP&#xff09;的网络基础设备&#xff0c;在公用网络中建立专用的数据通信通道。VPN的主要优点包括节约成本和提供安全保障。 优…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...