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

实战优化公司线上系统JVM:从基础到高级

引言

Java虚拟机(JVM)是Java语言的核心组件,它使得Java程序能够实现“一次编写,到处运行”的跨平台特性。在现代应用程序中,JVM的性能和稳定性直接影响到系统的整体表现。本文将深入探讨JVM的基础知识、基本特点、定义、发展历史、主要概念、调试工具、内存管理、垃圾回收、性能调优等方面,并提供一个实际的问题demo,使用IntelliJ IDEA工具进行调试演示。

一、JVM基础知识
1. 定义与发展历史

定义:JVM(Java Virtual Machine)是Java Virtual Machine的缩写,它是一种抽象的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现。JVM是Java语言的核心组件,它使得Java程序能够实现跨平台性。

发展历史

  • 1991年4月,由James Gosling主导的团队创造了Oak语言,即Java的前身。
  • 1995年5月23日,Oak语言更名Java,并提出“Write Once, Run Anywhere”的口号。
  • 1996年1月23日,JDK1.0发布,Java语言开始快速发展。
2. 基本特点
  • 跨平台性:JVM的运行环境是独立于操作系统的,只要在目标平台上安装了对应的JVM,就可以运行相同的Java程序。
  • 自动内存管理:JVM负责管理Java程序的内存空间,包括内存的分配、释放和垃圾回收,开发者无需手动管理内存。
  • 异常处理:JVM提供了异常处理机制,能够捕获和处理程序中的异常,确保程序的稳定性。
  • 安全性:JVM通过字节码校验器来检查Java程序的安全性,防止恶意代码的执行。
  • 高性能:JVM通过即时编译(JIT)等优化技术提高Java程序的执行效率。
  • 动态性:JVM支持动态加载和卸载Java类,可以在运行时动态扩展和修改程序。
二、JVM主要概念
1. 类加载器(Class Loader)

类加载器负责加载Java类文件。JVM中主要有三种类加载器:

  • 启动类加载器(BootstrapClassLoader):由C++编写,负责加载Java核心类库。
  • 扩展类加载器(Extension Class Loader):用Java编写,负责加载扩展目录下的类文件。
  • 应用程序类加载器(Application Class Loader):用Java编写,负责加载应用程序的类文件。
2. 运行时数据区(Runtime Data Areas)

运行时数据区是JVM在执行Java程序时管理的内存区域,主要包括以下几个部分:

  • 程序计数器(Program Counter Register):记录当前线程执行的字节码行号指示器。
  • 虚拟机栈(Java Virtual Machine Stack):每个线程都有一个私有的栈,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
  • 本地方法栈(Native Method Stack):用于支持native方法的执行。
  • 堆(Heap):用于存放对象实例和数组,是JVM管理的最大一块内存区域。
  • 方法区(Method Area):用于存储已被虚拟机加载的类信息、运行时常量池、即时编译器编译后的代码等数据。在JDK 1.8之前,方法区由永久代(PermGen)实现,而在JDK 1.8及之后,方法区由元空间(Meta Space)实现,并直接放到了本地内存中。
3. 执行引擎(Execution Engine)

执行引擎负责执行字节码,它包括解释器和即时编译器(JIT)。解释器逐条解释字节码指令,而JIT编译器将热点代码动态编译成本地机器码,以提高执行效率。

4. 本地接口(Native Interface)

本地接口用于与本地代码(如C/C++)交互,它允许Java程序调用本地库中的方法。

三、JVM调试工具
1. JDB(Java Debugger)

JDB是JDK自带的命令行调试工具,支持设置断点、单步执行、查看变量等基本调试功能。

2. 集成开发环境(IDE)调试器

如IntelliJ IDEA、Eclipse、NetBeans等IDE都提供了强大的调试器,支持图形化界面调试,提供断点管理、变量查看、表达式求值等高级功能。

3. VisualVM

VisualVM是JDK自带的高级监控和分析工具,支持飞行记录(Flight Recorder)和实时调试,提供详细的性能数据和分析报告。

4. YourKit和JProfiler

这些是商业化的性能分析和调试工具,支持内存分析、CPU分析、线程分析等。

四、JVM内存管理与垃圾回收
1. 内存模型

在JDK 1.8及之后,JVM的内存结构主要由堆内存、元空间和栈组成。

  • 堆内存:由年轻代和年老代组成,年轻代又分为Eden区、From Survivor区和To Survivor区。
  • 元空间:用于存储类信息、运行时常量池等数据,它直接放到本地内存中,不受JVM参数的限制。
  • :包括虚拟机栈和本地方法栈,用于存储局部变量表、操作数栈等信息。
2. 垃圾回收(GC)

JVM提供了多种垃圾回收器,如串行垃圾回收器、并行垃圾回收器、并发标记清除(CMS)垃圾回收器、G1垃圾回收器等。每种垃圾回收器都有其特点和适用场景。

五、JVM性能调优
1. GC调优

GC调优是JVM性能优化的重要部分。可以通过调整GC算法、堆大小、GC线程数量等参数来优化GC性能。例如,对于低延迟要求的应用,可以使用G1垃圾回收器,并调整堆大小以减少GC停顿时间。

2. 内存调优

内存泄漏会导致应用程序的内存使用不断增加,最终导致OutOfMemoryError。可以通过调整JVM参数、优化代码结构、使用合适的集合类等方式来优化内存使用。

3. 线程调优

线程池的配置直接影响到应用的并发性能。可以通过调整线程池大小、优化任务粒度、避免频繁的线程上下文切换等方式来优化线程性能。

4. JIT调优

JIT编译器将热点代码动态编译成本地机器码,以提高执行效率。可以通过调整JIT编译阈值、启用/禁用JIT编译等方式来优化JIT性能。

六、问题Demo与调试演示
1. 问题Demo

假设我们有一个简单的Java程序,它存在一个数组越界的问题。

java复制代码
public class ArrayExample {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
for (int i = 0; i <= array.length; i++) {System.out.println(array[i]);}}
}

这个程序在循环条件中使用了i <= array.length,这会导致数组越界异常。

2. 使用IntelliJ IDEA进行调试演示
  1. 打开IntelliJ IDEA并创建新项目
    在IntelliJ IDEA中创建一个新的Java项目,并将上述代码粘贴到主类中。
  2. 设置断点
    在代码行System.out.println(array[i]);左侧的行号区域点击,设置一个断点。
  3. 运行调试配置
    点击IntelliJ IDEA右上角的调试按钮(小虫子图标),程序会在断点处暂停。
  4. 查看变量值和执行状态
    在调试窗口中,可以看到变量iarray的值。此时,i的值已经超过了数组的长度,导致数组越界。
  5. 单步执行
    使用单步执行功能(Step Over),逐行执行代码,观察变量值的变化。可以发现循环条件i <= array.length是导致数组越界的原因。
  6. 修改代码并重新运行
    将循环条件修改为i < array.length,重新运行程序,确认问题已解决。
七、总结

通过本文的探讨,我们深入了解了JVM的基础知识、基本特点、定义、发展历史、主要概念、调试工具、内存管理、垃圾回收、性能调优等方面。同时,通过一个实际的问题demo,我们演示了如何使用IntelliJ IDEA工具进行调试。作为一名资深的Java技术专家,掌握JVM的优化技术对于提升系统性能和稳定性至关重要。希望本文能为广大Java开发者提供一些有益的参考和帮助。

相关文章:

实战优化公司线上系统JVM:从基础到高级

引言 Java虚拟机&#xff08;JVM&#xff09;是Java语言的核心组件&#xff0c;它使得Java程序能够实现“一次编写&#xff0c;到处运行”的跨平台特性。在现代应用程序中&#xff0c;JVM的性能和稳定性直接影响到系统的整体表现。本文将深入探讨JVM的基础知识、基本特点、定义…...

实时数据开发 | 一文理解Flink窗口机制

窗口操作在流处理和批处理之间起到了桥梁的作用。 Flink引擎本质上是流式引擎&#xff0c;认为批处理是流处理的一个特例。因此&#xff0c;通过窗口将流数据划分为有限大小的集合&#xff0c;使得在这些有界的数据集上可以进行批处理风格的计算。 通过配置窗口的参数&#xf…...

【云原生系列】迁移云上需要考虑哪些问题

云计算已经成为现代企业架构中不可或缺的一部分。越来越多的公司正在将他们的应用、数据和基础设施迁移到云平台上&#xff0c;以便更好地应对快速变化的市场需求、提高运营效率并降低成本。然而&#xff0c;迁移到云端并不是一件轻松的事情。涉及到多个技术、业务和管理层面的…...

1、Three.js开端准备环境

准备工作 从 CDN 导入 1.安装 VSCode 2.安装 Node.js 3.查看Three.js最新版本 4.如何cdn引入&#xff1a; https://cdn.jsdelivr.net/npm/threev版本号/build/three.module.js 例如&#xff1a;https://cdn.jsdelivr.net/npm/threev0.170.0/build/three.module.js 我们需要…...

go 和java 编写方式的理解

1. go 推荐写流水账式的代码&#xff08;非贬义&#xff09;&#xff0c;自己管自己。java喜欢封装各种接口供外部调用&#xff0c;让别人来管自己。 2. 因为协程的存在&#xff0c; go的变量作用域聚集在方法内部&#xff0c;即函数不可重入&#xff0c;而java线程的限制&…...

华为ENSP--BGP路由协议实验详解

项目背景 随着A公司网络规模的增长和新业务对互联网接入速度及稳定性需求的提升,公司决定升级其网络设施。为此,A公司向运营商B租用了两条线路以接入网络,旨在提高网络资源的利用率,并增强网络的安全性、稳定性和可靠性,从而为用户提供更优质的服务和体验 在这一背景下,正…...

LLM*:路径规划的大型语言模型增强增量启发式搜索

路径规划是机器人技术和自主导航中的一个基本科学问题&#xff0c;需要从起点到目的地推导出有效的路线&#xff0c;同时避开障碍物。A* 及其变体等传统算法能够确保路径有效性&#xff0c;但随着状态空间的增长&#xff0c;计算和内存效率会严重降低。相反&#xff0c;大型语言…...

UE5 MakeSlateBrush 节点的作用

在 Unreal Engine 5 (UE5) 中&#xff0c;MakeSlateBrush 节点是用于 创建或设置一个 Slate Brush 的节点。Slate 是 Unreal Engine 中的 UI 框架&#xff0c;用于构建编辑器界面以及游戏中的用户界面&#xff08;UI&#xff09;。Slate Brush 是 Slate UI 中的一种资源类型&am…...

机载视频流回传+编解码方案

无线网络&#xff0c;低带宽场景。不能直接转发ROS raw image&#xff08;10MB/s&#xff09;&#xff0c;而要压缩&#xff08;编码&#xff09;后再传输。可以用rtsp的udp传输或者直接传输话题&#xff0c;压缩方法有theora&#xff08;ROS image_transport默认支持&#xff…...

小程序 - 婚礼邀请函

小程序页面和样式练习 - 婚礼邀请函小程序开发笔记 目录 婚礼邀请函 准备工作 加载静态资源 项目初始化 标签栏的配置 各页面导航栏标题配置 全局导航栏样式配置 公共样式的编写 项目内容 邀请函页面内容 邀请函页面样式 照片页面内容 照片墙页面样式 美好时光页…...

命令行使用ssh隧道连接远程mysql

本地电脑A 跳板机B 主机2.2.2.2 用户名 B ssh端口号22 登录密码bbb 远程mysql C 地址 3.3.3.3 端口号3306 用户名C 密码ccc A需要通过跳板机B才能访问C; navicat中配置ssh可以实现在A电脑上访问C 如何实现本地代码中访问C呢? # 假设本地使…...

深度学习:完整的模型训练流程

深度学习&#xff1a;完整的模型训练流程 为了确保我们提供一个彻底和清晰的指导&#xff0c;让我们深入分析在model.py和train.py文件中定义的模型训练和验证流程。以下部分将详细讨论模型结构的定义、数据的加载与预处理、训练参数的配置、训练与测试循环&#xff0c;以及模…...

【数据结构】ArrayList与顺序表

ArrayList与顺序表 1.线性表2.顺序表2.1 接口的实现 3. ArrayList简介4. ArrayList使用4.2 ArrayList常见操作4.3 ArrayList的遍历4.4 ArrayList的扩容机制 5. ArrayList的具体使用5.1 杨辉三角5.2 简单的洗牌算法 6. ArrayList的问题及思考 【本节目标】 线性表顺序表ArrayLis…...

如何使用 python 中 pandas 进行数据分析?

使用Python中的pandas进行数据分析主要有以下几个步骤&#xff1a; 导入pandas库和数据文件 首先需要导入pandas库和数据文件&#xff0c;可以使用pandas的read_csv()函数读取CSV格式的数据文件&#xff0c;并将其存储为DataFrame格式。 pythonCopy code import pandas as p…...

WordPress文章目录插件,LuckyWP Table of Contents自动生成文章插件

文章带目录不能帮助用户快速获取信息&#xff0c;也能让页面内容更具条例&#xff0c;更加符合搜索引擎收录规范。今天给大家推荐一款免费好用的WordPress文章目录插件LuckyWP Table of Contents。LuckyWP Table of Contents 是一个WordPress插件&#xff0c;它允许你在博客帖…...

Qwen2.5-7B大模型微调记录

Qwen2.5-7B大模型微调记录 研究需要&#xff0c;需要搞一个大模型出来&#xff0c;没有太多的时间自己训练&#xff0c;准备用现成的开源大模型&#xff0c;然后结合研究方向进行微调 前前后后折腾大半个月&#xff0c;总算做完了第一个微调的大模型&#xff0c;模型基于阿里…...

TCP三次握手和四次挥手

三次握手&#xff1a;表示这客户与服务器之间的连接确定。 第一次:由客户端发出连接请求到服务器&#xff0c;服务器收到后可以确定客户的发送与自身的接收没问题 第二次:再由服务器回话个客户&#xff0c;让客户知道自己的发送与接收没问题&#xff0c;这时服务器还不知自己的…...

[Maven]3.5.3配置

MAVEN本地仓库配置&#xff1a; 1.conf 2.settings.xml 3.找到本地仓库配置目录 4.填写路径 5.镜像仓库...

68000汇编实战01-编程基础

文章目录 简介产生背景应用领域 语言学习EASy68K帮助文档IDE使用 编程语言commentslabels开始标签指令标签位置标签 opcode 操作码常用操作码数据传送算术运算逻辑运算控制流分支跳转地址跳转子程序跳转 位操作比较堆栈操作 IO操作码其他操作码 directives 指令DC指令EQU 指令S…...

常见的概念 及 分布式系统的演变过程

文章目录 一. 概念解释1. 应用&#xff08;Application&#xff09;/ 系统&#xff08;System&#xff09;2. 模块&#xff08;Module&#xff09;/ 组件&#xff08;Component&#xff09;3. 分布式&#xff08;Distributed&#xff09;4. 集群&#xff08;Cluster&#xff09…...

torch.is_nonzero(input)

torch.is_nonzero(input) input: 输入张量 若输入是 不等于零的单元素张量 则返回True&#xff0c;否则返回False 不等于零的单元素张量&#xff1a;torch.tensor([0.]) 或 torch.tensor([0]) 或 torch.tensor([False])单元素张量: 只有一个数 的张量 import torch print(t…...

爬虫开发(5)如何写一个CSDN热门榜爬虫小程序

笔者 綦枫Maple 的其他作品&#xff0c;欢迎点击查阅哦~&#xff1a; &#x1f4da;Jmeter性能测试大全&#xff1a;Jmeter性能测试大全系列教程&#xff01;持续更新中&#xff01; &#x1f4da;UI自动化测试系列&#xff1a; SeleniumJava自动化测试系列教程❤ &#x1f4da…...

Rust 组织管理

Rust 组织管理 Rust 是一种系统编程语言,以其安全性、并发性和性能而闻名。随着 Rust 社区的不断壮大,有效的组织管理变得至关重要。本文将探讨 Rust 社区的组织结构、项目管理、社区参与和未来发展方向。 Rust 社区的组织结构 Rust 社区采用了一种去中心化的组织结构。核…...

谈谈微服务的常用组件

由于微服务给系统开发带来了一些问题和挑战&#xff0c;如服务调用的复杂性、分布式事务的处理、服务的动态管理等&#xff0c;为了更好地解决这些问题和挑战&#xff0c;各种微服务治理的组件应运而生&#xff0c;充当微服务架构的基石和支撑&#xff0c;常用组件如下表&#…...

Android11.0默认壁纸缩放

获取壁纸缩放值的代码 //in com.android.server.wm.WallpaperController private final float mMaxWallpaperScale; //construct method WallpaperController(WindowManagerService service, DisplayContent displayContent) {......mMaxWallpaperScale service.mContext.ge…...

git 本地同步远端分支

一、关联远程仓库 本地仓库关联远端仓库 git remote add origin https://github.com/user/repository.git 二、获取远程分支信息 获取远程仓库的最新分支信息 git fetch origin 三、创建或切换到本地分支以跟踪远程分支 1. 创建分支 创建分支并关联到远端分支 git bra…...

数字IC后端设计实现之分段长clock tree经典案例

最近发现很多读者问到分段长clock tree的做法&#xff0c;小编今天给大家分享几个SoC芯片中复杂时钟结构设计的分段长clock tree的应用案例。希望对各位的学习和工作有所助益。 数字后端设计实现之时钟树综合实践篇 数字IC后端实现专家都具备哪些技能&#xff1f;&#xff08…...

矩阵重新排列——rot90函数

通过 r o t 90 rot90 rot90函数可以将矩阵进行旋转 用法&#xff1a; r o t 90 ( a , k ) rot90(a,k) rot90(a,k)将矩阵 a a a按逆时针方向旋转 k 9 0 ∘ k\times90^\circ k90∘...

深入解析音视频流媒体SIP协议交互过程

一、引言 在音视频流媒体传输过程中&#xff0c;SIP&#xff08;Session Initiation Protocol&#xff09;协议发挥着举足轻重的作用。本文将详细全面地介绍音视频流媒体传输中的SIP协议&#xff0c;包括其基本概念、交互过程、关键信令以及应用场景 二、SIP协议基本概念 1.…...

【C++】深入解析 cin 和 cout:理解区分输入输出流运算符

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;cin 和 cout 简介&#x1f4af;cin >> 与 cout << 的流运算符&#x1f4af;理解流运算符方向的四种方法1. 符号方向对应数据流动的方向2. 形象比喻3. 记住公式…...

java介绍

Java是一种广泛应用的高级编程语言&#xff0c;具有以下特点和应用场景&#xff1a; 语言特性 简单易学 Java语法相对简洁&#xff0c;去除了一些复杂的指针操作等&#xff0c;使得程序员能够更专注于业务逻辑的实现。例如&#xff0c;Java使用自动内存管理&#xff08;垃圾回…...

1-深度学习干货总结(持续更新)

机器学习核心组件 可以用来学习的数据&#xff08;data&#xff09;&#xff1b; 如何转换数据的模型&#xff08;model&#xff09;&#xff1b; 一个目标函数&#xff08;objective function&#xff09;&#xff0c;用来量化模型的有效性&#xff1b; 调整模型参数以优化…...

《C++搭建神经网络基石:开启智能编程新征程》

在人工智能的璀璨星空中&#xff0c;神经网络无疑是最为耀眼的星座之一。而 C以其卓越的性能和高效的执行效率&#xff0c;成为构建神经网络模型的有力武器。今天&#xff0c;就让我们一同探索如何使用 C构建一个基础的神经网络模型&#xff0c;踏上智能编程的奇妙旅程。 一、…...

小程序 - 本地生活

小程序页面和样式练习 - 本地生活小程序开发笔记 目录 本地生活 准备工作 加载图片素材 页面开发 页面样式开发 功能实现截图 总结 本地生活 本地生活”微信小程序是一个介绍本地美食、装修、工作等信息的微信小程序&#xff0c;该微信小程序的首页包含轮播图区域和九宫…...

docker的joinsunsoft/docker.ui修改密码【未解决】

docker的joinsunsoft/docker.ui修改密码 前言 这个挺遗憾的&#xff0c;个人能力不足。想修改密码是不可能了。 因为&#xff0c;系统的密码加密规则不知道。 目前了解到的内容是&#xff1a; 地址是&#xff1a;https://hub.docker.com/r/joinsunsoft/docker.ui服务是用go语…...

pyspark实现基于协同过滤的电影推荐系统

最近在学一门大数据的课&#xff0c;课程要求很开放&#xff0c;任意做一个大数据相关的项目即可&#xff0c;不知道为什么我就想到推荐算法&#xff0c;一直到着手要做之前还没有新的更好的来代替&#xff0c;那就这个吧。 推荐算法 推荐算法的发展由来已久&#xff0c;但和…...

【VRChat 全身动捕】VIVE 手柄改 tracker 定位器教程,低成本光学动捕解决方案(持续更新中2024.11.26)

更新 0.0.1&#xff08;2024/11/26&#xff09;&#xff1a; 1.解决了内建蓝牙无法识别、“steamVR 蓝牙不可用” 的解决方案 2.解决了 tracker 虽然建立了连接但是在 steamVR 界面上看不到的问题 3.解决了 VIVE 基站1.0 无法被蓝牙识别 && 无法被 steamVR 搜索到 &…...

C++11

C11 C11简介一.列表初始化{ }initializer_list 二.一些关键字三.右值引用和移动语义&#xff08;重要&#xff09;完美转发移动构造和移动赋值重载 四.小知识类成员变量初始化 五.可变参数模板六.lambda表达式&#xff08;又称匿名函数&#xff09;&#xff08;重要&#xff09…...

MySQL - 表的增删查改

文章目录 1.新增1.1语法1.2单行插入1.3多行插入1.4插入后更新1.5替换 2.查找2.1语法2.2使用 3.修改3.1语法3.2使用 4.删除4.1语法4.2使用4.3截断表 5.插入查询结果5.1语法5.2使用 1.新增 1.1语法 INSERT [INTO] table_name [(column1, column2, ...)] VALUES (value1, value2…...

Vue3 调用子组件的方法和变量

1. 通过 ref 调用子组件的方法和变量 Vue 3 引入了 ref&#xff0c;你可以通过 ref 获取子组件实例&#xff0c;并调用其方法或访问其数据。 例子 子组件 (Child.vue) <template><div><p>{{ message }}</p><button click"updateMessage&qu…...

蓝桥杯嵌入式再学习(4)led的点亮

led的点亮的话先在cubemx里点一下配置 以下是对应的代码...

CentOS7安装nvm

CentOS7安装nvm 在 CentOS 7 上安装 NVM&#xff08;Node Version Manager&#xff09;可以通过以下步骤进行。NVM 是一个用于管理多个 Node.js 版本的工具&#xff0c;允许你在不同的项目中使用不同的 Node.js 版本。 步骤 1&#xff1a;更新系统 首先&#xff0c;确保你的…...

2024年工信部大数据分析师证书报考条件是怎样的?有什么用

大数据分析师&#xff0c;乃是这样一类专业人才&#xff0c;他们凭借着先进且高效的数据分析技术以及各类实用工具&#xff0c;对规模庞大、纷繁复杂的海量数据展开全面而细致的清洗、处理、分析以及解读工作。其工作的核心目标在于为企业的决策制定提供有力依据&#xff0c;推…...

天锐绿盾加密软件与Ping32联合打造企业级安全保护系统,确保敏感数据防泄密与加密管理

随着信息技术的飞速发展&#xff0c;企业在日常经营过程中产生和处理的大量敏感数据&#xff0c;面临着越来越复杂的安全威胁。尤其是在金融、医疗、法律等领域&#xff0c;数据泄漏不仅会造成企业巨大的经济损失&#xff0c;还可能破坏企业的信誉和客户信任。因此&#xff0c;…...

代码随想录算法训练营第六十天|Day60 图论

Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09; https://www.programmercarl.com/kamacoder/0094.%E5%9F%8E%E5%B8%82%E9%97%B4%E8%B4%A7%E7%89%A9%E8%BF%90%E8%BE%93I-SPFA.html 本题我们来系统讲解 Bellman_ford 队列优化算法 &#xff0c;也叫SPFA算法&#xf…...

Web登录页面设计

记录第一个前端界面&#xff0c;暑假期间写的&#xff0c;用了Lottie动画和canvas标签做动画&#xff0c;登录和注册也连接了数据库。 图片是从网上找的&#xff0c;如有侵权私信我删除&#xff0c;谢谢啦~...

Rust标准库中集合类型用法详解

文章目录 Vec<T> 动态数组创建动态数组增加删除元素访问元素遍历Vec控制容量修改元素元素排序 HashMap<K, V>哈希表创建 HashMap插入和更新元素访问元素删除元素遍历HashMap使用默认值 HashSet<T>哈希集合创建 HashSet插入和删除元素查找元素遍历HashSet使用…...

软件测试面试之数据库部分

1.取第 4 到5 条记录 --按ID从小到大&#xff0c;查询第到第条数据 select top4 *from(select top5 * from qicheorder by ID asc ) as TA order by ID desc--按ID从小到大&#xff0c;查询第到第条数据 select top 2*from(select top 4 *from qicheorder by ID asc )as TA o…...

Gitee markdown 使用方法(持续更新)

IPKISS 获取仿真器件的名称 引言正文标题换行第一种------在行末尾手动键入两个空格第二种------额外换行一次&#xff0c;即两行中间留一个空行 缩进与反缩进代码块行内代码添加图片添加超链接 加粗&#xff0c;倾斜&#xff0c;加粗倾斜 引言 有些保密性的文件或者教程&…...

水库大坝安全监测之量水堰计应用

量水堰计是水库大坝安全监测系统中的一种关键设备&#xff0c;主要用于测量水库水位、流量等水力参数。以下是量水堰计在水库大坝安全监测中的应用及注意事项&#xff1a; 一、量水堰计的工作原理 量水堰计是一种专门用于测量水流流量的仪器&#xff0c;其工作原理主要基于水流…...