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

JVM常量池(class文件常量池,运行时常量池,字符串常量池)

文章目录

  • 问题
  • JVM运行时数据区
  • JVM中的常量池
    • Class文件常量池
    • 运行时常量池
    • 字符串常量池
      • 创建了几个对象
      • String的定义
      • intern()
      • 问题

超过1W字深度剖析JVM常量池(全网最详细最有深度) - 跟着Mic学架构 - 博客园

问题

jdk1.8之后

  • 元空间是独立存在的?还是位于方法区?
  • 字符串常量池在堆中还是独立存在?

在 JDK 1.8 及之后版本:

  1. 元空间与方法区关系元空间可以理解为是方法区的一种实现 。JDK 1.8 移除了永久代,引入元空间来替代。元空间使用本地内存(Native Memory ),不再像永久代那样在 JVM 堆内存中划分一块固定区域。此时方法区的功能由元空间来承担,运行时常量池等原本在方法区的部分也存在于元空间中,但元空间和传统意义上方法区概念并非完全等同,只是功能上有继承关系。 所以说元空间是方法区新的实现形式,它不是独立于方法区概念存在,而是改变了方法区的实现方式
  2. 字符串常量池位置字符串常量池在堆中。JDK 1.7 时,字符串常量池从方法区(永久代 )迁移到堆中,JDK 1.8 延续了这一做法。在堆中的字符串常量池,用于存储字符串字面量以及通过String.intern()方法添加进去的字符串 。其物理位置位于堆中,逻辑归属于方法区,从 Java 虚拟机规范角度,它是方法区相关概念的一部分,承担着存储字符串字面量等常量的功能,和方法区其他组成部分(如运行时常量池等)有紧密逻辑关联。

JVM运行时数据区

从类加载,到JVM运行时数据区的整体结构画出来,如下图所示(元空间位于本地内存)。Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途。

JVM运行时数据区在物理内存上并不是单一的连续内存块,而是由多个不同物理来源的内存区域组合而成的逻辑概念

在这里插入图片描述

JVM中的常量池

JVM中的常量池可以分成以下几类:

  1. Class文件常量池/静态常量池
  2. (全局)字符串常量池
  3. 运行时常量池

Class文件常量池

程序编译后可以通过javap -c 类名.class查看该类的字节码文件。或者使用jclasslib插件。

在这里插入图片描述

  1. 位置:存在于编译后的.class文件中,是.class文件的一部分。

    • 在编译阶段,静态常量池在.class文件中,此时还未加载到JVM内存,纯属磁盘上的文件内容。
    • 当类被JVM加载时,静态常量池的内容会被解析并存入运行时常量池(Runtime Constant Pool)。
  2. 作用:存储编译期生成的各种字面量和符号引用。

    • 字面量:指的是在源代码中直接给出的数据值,在源代码中直接写出的数值,字符串,布尔等。比如文本字符串(String a = “Hello World”);声明为final的常量值(private int value = 1);基本数据类型的值。

    • 符号引用

      • 类和接口的全限定名。也就是Ljava/lang/String;,主要用于在运行时解析得到类的直接引用。

          #23 = Utf8               ([Ljava/lang/String;)V#25 = Utf8               [Ljava/lang/String;#27 = Utf8               Ljava/lang/String;
        
      • 字段的名称和描述符。字段也就是类或者接口中声明的变量,包括类级别变量(static)实例级的变量

      • 方法的名称和描述符。方法的描述类似于JNI动态注册时的“方法签名”,也就是参数类型+返回值类型,比如下面的这种字节码,表示main方法和String返回类型。

          #19 = Utf8               main#20 = Utf8               ([Ljava/lang/String;)V
        

运行时常量池

运行时常量池就是每一个类或接口的常量池(constant pool)在运行时的表现形式。

一个类在加载的过程,会经历加载连接(验证、准备、解析)初始化,而在类加载这个阶段,需要做以下几件事情:

  1. 通过一个类的全类限定名获取此类的二进制字节流。
  2. 在堆内存生成一个java.lang.Class对象,代表加载这个类,做为这个类的入口。
  3. class字节流的静态存储结构转化成方法区(元空间)的运行时数据结构。

而第三点就包含了class文件常量池进入运行时常量池的过程。

所以,运行时常量池的作用是存储class文件常量池中的符号信息,在类的解析阶段会把这些符号引用转换成直接引用(实例对象的内存地址),翻译出来的直接引用也是存储在运行时常量池中。class文件常量池的大部分数据会被加载到运行时常量池。

虽然方法区(或元空间)是全局共享的内存区域,但每个类都有自己独立的运行时常量池

运行时常量池是 动态的符号引用解析中心,其核心行为可归纳为:

  1. 存储:承载 Class 文件常量池的原始符号信息
  2. 转换:在解析阶段将符号引用替换为直接引用
  3. 扩展:支持运行时动态添加新常量
  4. 协同:与字符串常量池、方法区元数据紧密交互

字符串常量池

位置

虽然从物理位置上看,它在堆空间内,但它是一个逻辑上独立的区域。

存在意义

JVM之所以单独设计字符串常量池,是JVM为了提高性能以及减少内存开销的一些优化:

  1. String对象作为Java语言中重要的数据类型,是内存中占据空间最大的一个对象。高效地使用字符串,可以提升系统的整体性能。
  2. 创建字符串常量时,首先检查字符串常量池是否存在该字符串,如果有,则直接返回该引用实例,不存在,则实例化该字符串放入常量池中。

举例

String a="Hello";String b=new String("Mic");
  1. a这个变量,是在编译期间就已经确定的,会进入到字符串常量池。
  2. b这个变量,是通过new关键字实例化,new是创建一个对象实例并初始化该实例,因此这个字符串对象是在运行时才能确定的,创建的实例在堆空间上。

在这里插入图片描述

创建了几个对象

深入理解Java字符串常量池 | 二哥的Java进阶之路

String s = new String("二哥");

使用 new 关键字创建一个字符串对象时,Java 虚拟机会先在字符串常量池中查找有没有‘二哥’这个字符串对象,如果有,就不会在字符串常量池中创建‘二哥’这个对象了,直接在堆中创建一个‘二哥’的字符串对象,然后将堆中这个‘二哥’的对象地址返回赋值给变量 s。

如果没有,先在字符串常量池中创建一个‘二哥’的字符串对象,然后再在堆中创建一个‘二哥’的字符串对象,然后将堆中这个‘二哥’的字符串对象地址返回赋值给变量 s。

对于这行代码 String s = new String("二哥");,它创建了两个对象:一个是字符串对象 “二哥”,它被添加到了字符串常量池中,另一个是通过 new String() 构造方法创建的字符串对象 “二哥”,它被分配在堆内存中,同时引用变量 s 存储在栈上,它指向堆内存中的字符串对象 “二哥”。

在这里插入图片描述

String的定义

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character storage. */private final char value[];/** Cache the hash code for the string */private int hash; // Default to 0}

从上述源码中可以发现。

  1. String这个类是被final修饰的,代表该类无法被继承。
  2. String这个类的成员属性value[]也是被final修饰,代表该成员属性不可被修改。

因此String具有不可变的特性,也就是说String一旦被创建,就无法更改。这么设计的好处有几个。

  1. 方便实现字符串常量池: 在Java中,由于会大量的使用String常量,如果每一次声明一个String都创建一个String对象,那将会造成极大的空间资源的浪费。Java提出了String pool的概念,在堆中开辟一块存储空间String pool,当初始化一个String变量时,如果该字符串已经存在了,就不会去创建一个新的字符串变量,而是会返回已经存在了的字符串的引用。如果字符串是可变的,某一个字符串变量改变了其值,那么其指向的变量的值也会改变,String pool将不能够实现!
  2. 线程安全性,在并发场景下,多个线程同时读一个资源,是安全的,不会引发竞争,但对资源进行写操作时是不安全的,不可变对象不能被写,所以保证了多线程的安全。
  3. 保证 hash 属性值不会频繁变更。确保了唯一性,使得类似HashMap容器才能实现相应的key-value缓存功能,于是在创建对象时其hashcode就可以放心的缓存了,不需要重新计算。这也就是Map喜欢将String作为Key的原因,处理速度要快过其它的键对象。所以HashMap中的键往往都使用String。

intern()

  1. JDK文档中关于intern()方法的说明:当调用intern方法时,如果常量池(内置在 JVM 中的)中已经包含相同的字符串,则返回池中的字符串。否则,将此String对象添加到池中,并返回对该String对象的引用。‘
  2. 注意,所有字符串字面量在初始化时,会默认调用intern()方法。
  3. intern() 方法的核心逻辑
    • 检查常量池:JVM 会通过内容匹配(而非引用相等)查找常量池中是否已有该字符串。
    • 处理结果
      • 若存在:返回常量池中的引用(可能指向堆中的对象)。
      • 若不存在:JDK 7 及以后直接在常量池中记录堆中对象的引用,而非复制内容(节省内存),并返回该引用。

问题

public static void main(String[] args) {String a = new String(new char[]{'a', 'b', 'c'});  // 堆中创建新对象,常量池未变化String b = a.intern();                              // 将a的内容放入常量池(如果不存在),并返回池中的引用System.out.println(a == b);                         // true:此时常量池中的引用就是a本身
}

1. 为什么 new String(char[]) 不会自动调用 intern()

当使用 new String(char[]) 构造函数时,JVM 会创建一个全新的String对象,但不会自动将其放入常量池。这是因为:

  • 常量池的设计初衷:常量池主要用于存储编译期已知的字符串字面量(如 "abc")或显式调用 intern() 的字符串。
  • 性能考量:如果每次通过字符数组创建字符串都自动入池,会导致常量池膨胀,影响性能和内存占用。
  • 语义一致性new 关键字的语义是 “强制创建新对象”,即使常量池中已有相同内容的字符串,new String(char[]) 也会创建独立的对象。

3. 总结:何时字符串会进入常量池?

  • 编译期已知的字面量(如 "abc")会在类加载时自动进入常量池。
  • 运行时动态创建的字符串(如通过字符数组、substring() 等方法)不会自动入池,除非显式调用 intern()

相关文章:

JVM常量池(class文件常量池,运行时常量池,字符串常量池)

文章目录 问题JVM运行时数据区JVM中的常量池Class文件常量池运行时常量池字符串常量池创建了几个对象String的定义intern()问题 超过1W字深度剖析JVM常量池&#xff08;全网最详细最有深度&#xff09; - 跟着Mic学架构 - 博客园 问题 jdk1.8之后 元空间是独立存在的&#xf…...

Java 大视界 -- 基于 Java 的大数据分布式存储在视频会议系统海量视频数据存储与回放中的应用(263)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

光谱相机在地质勘测中的应用

一、‌矿物识别与蚀变带分析‌ ‌光谱特征捕捉‌ 通过可见光至近红外&#xff08;400-1000nm&#xff09;的高光谱分辨率&#xff08;可达3.5nm&#xff09;&#xff0c;精确识别矿物的“光谱指纹”。例如&#xff1a; ‌铜矿‌&#xff1a;在400-500nm波段反射率显著低于围…...

深入解析Java泛型:从定义到实战应用

目录 &#x1f680;前言&#x1f914;泛型的定义&#x1f427;泛型类&#x1f31f;泛型接口✍️泛型方法、通配符、上下限&#x1f4af;泛型方法&#x1f4af; 通配符与上下限⚙️通配符&#xff08;Wildcard&#xff09;⚙️泛型上下限⚙️应用场景 &#x1f99c;泛型支持的类…...

数据结构:绪论之时间复杂度与空间复杂度

作者主页 失踪人口回归&#xff0c;陆续回三中。 开辟文章新专栏——数据结构&#xff0c;恳请各位大佬批评指正&#xff01; 文章目录 作者主页 数据结构的基本知识数据&#xff1a;数据元素&#xff1a;数据对象&#xff1a;数据类型&#xff1a;数据结构&#xff1a;逻辑结…...

ARM Linux远程调试

准备 虚拟机既能ping通开发板,又能ping通外网,还要能ping通Windows主机(如果你有上位机通信(tftp、vsftp、ssh)的需求) VMware 添加网络适配器2用作桥接网卡,原有的网络适配器保持为NAT模式 打开虚拟网络编辑器,配置VMnet0为桥接模式,外部连接设置为Realtek PCIe G…...

PostgreSQL 14 pacemaker 高可用集群

核心架构原理 集群组成&#xff08;典型三节点结构&#xff09;&#xff1a; [Node1] PostgreSQL Pacemaker Corosync pcsd [Node2] PostgreSQL Pacemaker Corosync pcsd [Node3] PostgreSQL Pacemaker Corosync pcsd ↕ ↕ ↕ ← Corosync 多…...

英语学习5.21

Far from sensible 表示“很不明智的”、“离明智相去甚远”。这是一个固定表达&#xff0c;结构是 far from adj.&#xff0c;意思是“根本不……”&#xff0c;常见例子&#xff1a; far from perfect&#xff08;远非完美&#xff09; far from acceptable&#xff08;远…...

实现了TCP的单向通信

1. 客户端代码:Client.java package com.xie.javase.net1;import java.io.*; import java.net.*;public class Client {public static void main(String[] args) {Socket socket = null;BufferedWriter bw = null;try {// 1. 获取本机IP地址对象InetAddress localHost = Inet…...

华为云Flexus+DeepSeek征文 | 基于ModelArts Studio和Cherry Studio快速构建午餐管家助手

目录 一、前言 二、ModelArts Studio&#xff08;MaaS&#xff09;介绍与应用场景 2.1ModelArts Studio&#xff08;MaaS&#xff09;介绍 2.2 ModelArts Studio&#xff08;MaaS&#xff09;使用场景 2.3 开通MaaS服务 2.4 开通DeepSeek-V3商用服务 三、Cherry Studio简介和安…...

Spring AI 1.0 GA 正式发布

Spring AI 1.0 GA 正式发布 快速入门核心特性1. **增强型 LLM&#xff08;大语言模型&#xff09;**2. **MCP 协议支持**3. **RAG&#xff08;检索增强生成&#xff09;**4. **评估与监控**5. **智能代理&#xff08;Agents&#xff09;** 下一步计划 VMware Spring 团队 Mark …...

【计算机网络 第8版】谢希仁编著 第五章运输层 题型总结1 UDP和TCP报文格式

UDP报文 5.13 这一题可以先问AI&#xff1a; 但是问了AI&#xff0c;肯定想知道&#xff1a;这些知识点在书上哪里&#xff1f;怎么这么难找&#xff1f; 没错这题主要是靠IP地址&#xff0c;所以应该在第四章。 P136 P137 省流&#xff1a; 1.UDP的首部格式是8个字节&…...

华为云Flexus+DeepSeek征文 | 基于ModelArts Studio 的 DeepSeek API 实现行业深度搜索和分析

目录 一、前言 二、ModelArts Studio&#xff08;MaaS&#xff09;介绍与应用场景 2.1ModelArts Studio&#xff08;MaaS&#xff09;介绍 2.2 ModelArts Studio&#xff08;MaaS&#xff09;使用场景 2.3 开通MaaS服务 2.4 开通DeepSeek-V3商用服务 三、Deep Research简介和安…...

计算机网络——Session、Cookie 和 Token

在 Web 开发中&#xff0c;Session、Cookie 和 Token 是实现用户会话管理和身份验证的核心技术。它们既有联系&#xff0c;也有明显区别。以下从定义、原理、联系、区别和应用场景等方面详细解析。 一、基本定义与原理 1. Cookie 定义&#xff1a; 是浏览器存储在客户端的小…...

AAOS系列之----简介

一文讲透AAOS架构&#xff0c;点到为止不藏私 &#x1f4cc; AAOS是以一个系统APP的方式集成进安卓系统中,通过在SystemServer中启动其中的Service &#x1f4da; 1. CarServcie 是如何被启动的&#xff1f; AAOS中的核心服务是CarService,其描述如下: 代码路径如下: android1…...

CTF签到题

1.题目&#xff1a;VmxkMFUxVXhTbkpOU0dSVVZrWktWRlpyVm5kU2JGSnlWbXhhYkdKRlduaFpWVlpoVkcxRmQwMUlhRlpXTTFKUVZXdFZlR05zWkZsaVJrcG9ZbGRvUmxaR1dsZFVhekZIVW14V1lWSlZOVkJVVlZaV1RVWldjbFZzVGxOTlJGWlhWa1pvZDFWdFJuTlRhMVpXVm14YVIxUlVSa2RPYkVweVYyeENWMVpVUlhwV1ZtUjNVMj…...

甲骨文云服务器适合做网站吗

甲骨文云服务器&#xff1a;建网站&#xff0c;它到底是不是“神队友”&#xff1f; 各位想在网上“立门户”的老板、个人创作者们&#xff0c;大家好&#xff01;现在这年头&#xff0c;没个自己的网站&#xff0c;那感觉就像做生意没个店面、搞创作没个画廊一样&#xff0c;…...

性能测试场景题

题目 针对618&#xff0c;双十一活动的&#xff0c;一个电商系统&#xff0c;如何设计压力测试方案&#xff1f; 参考答案 针对618、双十一等高并发电商大促活动&#xff0c;压力测试方案需覆盖全链路性能瓶颈识别、容量评估和极端场景验证。以下为详细设计框架&#xff0c;…...

数智读书笔记系列033《软件设计的哲学(第2版)》:复杂性管理的艺术

《软件设计的哲学》(A Philosophy of Software Design)书籍简介 作者:约翰奥斯特豪特(John Ousterhout) 出版信息:第2版于2024年11月由人民邮电出版社出版,中文版由茹炳晟、王海鹏翻译。 作者背景 奥斯特豪特是斯坦福大学计算机科学教授、美国国家工程院院士,拥有丰…...

MySQL与Redis数据同步实践与优化

一、数据不一致的典型场景 写入顺序不一致 当业务逻辑需要同时更新数据库和缓存时&#xff0c;若出现"先删缓存后更新DB"或"先更新DB后删缓存"操作失败&#xff0c;会导致缓存与数据库数据版本不一致。 并发读写冲突 高并发场景下可能出现&#xff1a; …...

HarmonyOS 鸿蒙应用开发基础:EventHub,优雅解决跨组件通信难题

EventHub是鸿蒙开发中用于线程内通信的事件中心模块&#xff0c;基于发布订阅模式实现组件间的高效通信。它完美解决了传统回调方式在多层嵌套场景下的痛点&#xff0c;使得组件间的通信更加灵活和易于管理。 核心特性 事件中心机制&#xff1a;通过事件名进行通信&#xff0c…...

如何解决鸿蒙应用闪退问题

如何解决鸿蒙应用闪退问题 本文是一份面向 ArkTS&#xff0f;JavaScript&#xff0f;C 多语言开发者的综合性排查与优化手册&#xff0c;覆盖 HarmonyOS/OpenHarmony 5.x 时代 常见闪退根因、诊断流程、调试技巧、CI 监控及线上防护方案&#xff0c;力争帮你把 Crash 数量降到 …...

人民日报社主管媒体深度聚焦珈和科技“遥感+AI”农险精准化突破:首创“四维数据贯通”模式 树行业转型新标杆

近日&#xff0c;由人民日报社主管的《中国城市报》对珈和科技与国寿财险湖南省分公司联合打造的农业保险数字化标杆项目进行了深度报道。 作为"遥感AI"技术在农业风险管理领域的创新实践者&#xff0c;珈和科技依托自主构建的覆盖“天-空-地-人”的全维度智慧农业技…...

(1)深度学习基础知识(八股)——常用名词解释

1. FC FC全称是Fully Connect全连接层&#xff0c;也被称为Linear Layer线性层。 它的核心是&#xff1a;每个输入神经元 与 每个输出神经元 都要通过权重连接&#xff0c;适用于将输入特征映射到高维或者低维空间。 数学表示 对于一个输入向量,FC的计算方式是&#xff1a; 是…...

深度学习零基础入门(2)-实战1:激活函数、前向传播和反向传播

一、激活函数 激活函数的作用 激活函数在神经网络中起着至关重要的作用&#xff0c;主要用于引入非线性因素&#xff0c;使得神经网络能够学习和模拟复杂的非线性关系。如果没有激活函数&#xff0c;无论神经网络有多少层&#xff0c;最终都只能表示线性变换&#xff0c;无法…...

LeRobot的机器人控制系统(下)

目的和范围 机器人控制系统是 LeRobot 框架的核心组件&#xff0c;提供用于操作、标定和记录物理机器人数据的接口。该系统支持远程操作、记录演示数据集、重放动作以及在真实机器人上运行已训练的策略。它充当用户、物理机器人硬件和训练流程之间的桥梁。本文介绍机器人控制系…...

Linux Docker安装【再探完美版教程】

Dokcer安装 文章目录 Dokcer安装安装前准备安装前设置yum网络镜像源【重要】查看服务器系统版本以及内核版本查看服务器内核版本安装依赖包&#xff1a;设置阿里云docker-ce镜像源 安装Dockerdocker-ce安装启动docker并设置开机自启配置阿里云镜像测试&#xff1a; Docker概念&…...

Java-根据路径获取JSON字符串的value值

实现内容 入参: 一串json的字符串,根据传入的字符串路径和想要获取此路径下的key值 出参: 此路径下的key的value值 实现原理 采用一层一层获取的方式,判断第一层并且获取第一层的数据,放入到数组中,将该数组放到下一次循环,再获取下一层的数据 实现方法 /*** 根据路径获取…...

【小呆的随机振动力学笔记】随机过程基础【一】

文章目录 1. 随机过程基础1.1 随机过程的概率分布1.2 随机过程的统计特征1.3 平稳随机过程1.4 遍历过程平稳随机过程 1. 随机过程基础 \quad\quad 上一节&#xff0c;我们主要回顾了概率论知识&#xff0c;接下来我们来回顾随机过程基础理论&#xff08;或者叫随机场&#xff0…...

Java 内存模型中的读、写屏障

目录 1. 基本概念 1.1、读屏障 (Load Barrier) 1.2、写屏障 (Store Barrier) 1.3、咖啡店例子 2. 常见内存屏障 2.1、volatile 1、缓存可见性 2、指令重排序 3、内存屏障 2.2、final 2.3、synchronized关键字 2.4、手动内存屏障 3、不同屏障类型对比 4、实…...

AI 多 Agent 图形化开发深度解析:iVX IDE 与主流产品技术架构对比研究

随着人工智能技术的发展&#xff0c;软件开发正从手工编码向智能辅助开发演进。在 AI 多 Agent 图形化开发领域&#xff0c;iVX IDE 与 GitHub Copilot、Tabnine、CodeGeeX 等主流产品代表了不同的技术路线。本文从技术架构、功能实现、性能表现、生态建设等维度&#xff0c;对…...

微服务中的 AKF 拆分原则:构建可扩展系统的核心方法论

在数字化浪潮的推动下&#xff0c;互联网应用规模呈指数级增长&#xff0c;传统单体架构逐渐暴露出难以扩展、维护成本高等问题&#xff0c;微服务架构应运而生并成为企业应对复杂业务场景的主流选择。然而&#xff0c;随着业务的不断扩张和用户量的持续增加&#xff0c;如何确…...

MySQL迁移SSL报错

文章记录了之前tdsql迁移IDC过程中遇到的小问题 环境 xboss业务&#xff1a; tdsql未启用SSL&#xff0c; IDC-mysql启用了SSL: 原因分析 1&#xff0c; 迁移前&#xff1a; 因为tdsql未启用ssl&#xff0c; 且应用未显式配置ssl JDBC默认使用非SSL连接&#xff0c;因此可以正…...

Mysql的主从同步

一主一从 IP地址主机名master节点192.168.10.200mysql200slave节点192.168.10.201mysql201 master节点操作 配置文件增加两行参数 [rootmysql200 ~]# tail -n 2 /etc/my.cnf.d/mysql-server.cnf log-bin/mylog/mysql200 server-id200 [rootmysql200 ~]# systemctl restart …...

云原生微服务的前世今生

目录 Part1 时代背景 Part2 何为微服务&#xff1f; Part3 微服务出现的意义​ Part4 企业应用 京东&#xff1a;国内电商领域的微服务实践​ 阿里&#xff1a;微服务在复杂业务场景中的应用​ Part5 Istio&#xff1a;服务网格时代的微服务治理中枢​ Istio 的技术定位…...

Python之虚拟环境

文章目录 Python之虚拟环境虚拟环境核心概念为什么需要虚拟环境&#xff1f;虚拟环境注意事项 创建虚拟环境使用 venv (Python 3.3 内置)使用 virtualenv (第三方工具&#xff0c;支持Python 2/3)与 venv创建方式的区别Python 版本支持功能与兼容性依赖关系和性能命令行工具创建…...

【Java高阶面经:数据库篇】15. 零停机数据迁移:从双写到一致性校验

一、迁移架构设计:双写+增量同步的三层防护模型 1.1 核心架构流程图 #mermaid-svg-MfnakvBNrtFScrMe {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MfnakvBNrtFScrMe .error-icon{fill:#552222;}#mermaid-svg-Mf…...

车载以太网网络测试-27【SOME/IP-SD简述】

文章目录 1 摘要2 SOME/IP-SD协议介绍2.1 定义与作用2.2 SOMEIP/SD协议通俗易懂的理解2.2.1 SOMEIP/SD协议是什么&#xff1f;2.2.2 通信流程&#xff08;简化&#xff09;2.2.3 车载功能示例2.2.4 类比理解 2.3 SOME/IP-SD报文结构2.3.1 Flags2.3.1.1 REBOOT (Bit 7)2.3.1.2 U…...

Ubuntu 22.04上升级Node.js版本

在Ubuntu 22.04上升级Node.js版本有几种方法&#xff0c;推荐使用NVM&#xff08;Node Version Manager&#xff09;&#xff0c;因为它可以让你轻松管理多个Node.js版本。 方法1: 使用NVM&#xff08;推荐&#xff09; 1. 安装NVM # 下载并安装NVM curl -o- https://raw.gi…...

软件设计师“面向对象设计”真题考点分析——求三连

一、考点分值占比与趋势分析 综合知识历年考察统计 年份考题数分值占比考察重点2018334%继承类型、设计原则2019445.3%多态实现、类关系2020556.7%设计模式应用、接口隔离2021334%消息通信、封装特性2022668%开闭原则、组合模式2023556.7%模板方法、适配器模式2024445.3%单一…...

flutter dart 函数语法

以下是 Dart 语言中函数语法的 详细实例说明&#xff0c;涵盖了所有常用写法 基本语法参数类型&#xff08;必选、可选、命名、默认值&#xff09;匿名函数、箭头函数高阶函数&#xff08;函数作为参数/返回值&#xff09;异步函数&#xff08;async / await&#xff09; 1. …...

鸿蒙Flutter实战:24-混合开发详解-4-初始化Flutter

概述 将 Flutter 模块添加至宿主鸿蒙项目中后&#xff0c;接下需要实现页面跳转、消息通信等功能&#xff0c;本文重点介绍如何初始化 Flutter。 项目配置 添加依赖 编辑 ohos_app/oh-package.json 文件 如果通过 Har 包方式引入 Flutter 模块&#xff0c;则需要添加如下内…...

微信小程序之Promise-Promise初始用

我们来尝试使用Promise。 1、需求&#xff0c;做个抽奖的按钮&#xff0c; 抽奖规则&#xff1a; 30%的几率中奖&#xff0c;中奖会提示恭喜恭喜&#xff0c;奖品为10万 RMB 劳斯莱斯优惠券&#xff0c;没中奖会提示再接再厉。 2、先搭界面&#xff1a; <view class&qu…...

工业 / 农业 / AR 场景怎么选?Stereolabs ZED 双目3D相机型号对比与选型建议

Stereolabs ZED 相机系列为视觉感知领域提供了多种创新解决方案&#xff0c;适用于不同应用场景。选择合适的 ZED 相机型号&#xff0c;需综合考虑分辨率、深度感知范围、接口类型等因素。 Stereolabs ZED 相机产品系列概览 ZED&#xff1a;首款立体视觉相机&#xff0c;专为高…...

(Git) 稀疏检出(Sparse Checkout) 拉取指定文件

文章目录 &#x1f3ed;作用&#x1f3ed;指令总览&#x1f477;core.sparseCheckout&#x1f477;sparse-checkout 文件 &#x1f3ed;实例演示⭐END&#x1f31f;交流方式 &#x1f3ed;作用 类似于 .gitignore 进行文件的规则匹配。 一般在需要拉取大型项目指定的某些文件…...

Nginx 部署前端项目dist文件到局域网然后ngrok部署到公网

①项目里面 npm run build 生成的dist文件 ②下载nginx: download 将dist文件夹放入html文件夹中 ③conf修改配置 里面有nginx.conf 文本修改④在此目录下 打开cmd 输入 start nginx.exe 启动代理 ⑤http://localhost:90/index.html即可或者域名换成你的ip地址也可以 …...

【sylar-webserver】9 网络模块

目录 Address 类图 知识点 常用结构体 常用函数 Socket 类图 主要功能 初始化 socket 流程&#xff1a; ByteArray 知识点 zigzag 算法 TLV 编码结构 Stream 类图 Stream 流结构&#xff0c;提供字节流读写接口 SocketStream TcpServer 类图 主要功能 Address…...

野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(四)安装RKNN Toolkit2

RKNN Toolkit2是用来将onnx模型转成rknn专用模型&#xff0c;并可通过RKNN Toolkit Lite2或者RKNPU调用NPU进行加速计算的工具。 一开始我安装很多次都无法成功安装。后来跟售后技术对接&#xff0c;必须是PC平台的Linux环境才可以。我的电脑是windows&#xff0c;所以我需要用…...

第六部分:阶段项目 5:构建 NestJS RESTful API 服务器

现在&#xff0c;是时候将你学到的 NestJS 知识付诸实践&#xff0c;构建一个简单的 RESTful API 服务器了。我们将基于第四阶段的项目&#xff08;博客文章 API 或任务管理 API&#xff09;&#xff0c;使用 NestJS 的方式重新实现它。 选择以下一个项目&#xff1a; 项目选…...

【工作流】Fastgpt配置豆包模型-火山引擎

V4.9.7 Fastgpt现在不通过oneapi 来配置模型和渠道了&#xff0c; 可以直接在页面进行设置 首先在账号- 模型提供商里面 填入豆包的信息&#xff1a; 渠道名随便填&#xff0c;厂商选豆包&#xff0c; 然后选3个模型&#xff0c;如图所示 如果没有填入模型映射的话是没办法 …...