Java 性能调优全解析:从设计模式到 JVM 的 7 大核心方向实践
引言
在高并发、低延迟的技术场景中,Java 性能优化需要系统化的方法论支撑。本文基于7 大核心优化方向(复用优化、计算优化、结果集优化、资源冲突优化、算法优化、高效实现、JVM 优化),结合权威框架与真实案例,构建从代码逻辑到运行时环境的全链路优化体系,确保每个技术点可落地、可验证。
一、复用优化:减少重复的 “资源重生术”
通过缓冲、缓存、对象池化等技术,避免重复创建高成本资源,实现 “一次生成,多次复用”。
1. 缓冲(Buffer)与缓存(Cache)的本质区别
- 缓冲:暂存数据以批量操作,缓解慢速设备压力(如 I/O 缓冲)。
java
// 缓冲流批量写磁盘(减少随机I/O) try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("data.txt"))) { bos.write(data); // 先写入内存缓冲区,再批量刷盘 }
- 缓存:高频数据存储在高速区域(如内存),减少低速访问(如 Guava Cache)。
java
// Guava本地缓存(缓存用户信息,有效期10分钟) LoadingCache<String, UserEntity> cache = CacheBuilder.newBuilder() .expireAfterWrite(10, TimeUnit.MINUTES) .build(key -> userDAO.getUserById(key));
2. 对象池化:复用高成本对象
数据库连接池(HikariCP)将连接创建成本从 10ms 级降至 1ms 级:
java
// HikariCP连接池配置(最大连接数20,复用已有连接)
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost/test");
config.setMaximumPoolSize(20);
DataSource dataSource = new HikariDataSource(config);
二、计算优化:释放多核潜力的 “并行哲学”
利用多核 CPU、异步化、惰性加载提升计算效率,核心是 “让合适的任务跑在合适的资源上”。
1. 并行执行的三种模式
- 多机分布式:Hadoop MapReduce 拆分任务到集群节点并行计算。
- 多进程:Nginx Worker 进程模型充分利用 CPU 核(
worker_processes auto;
)。 - 多线程:Java 线程池调优(CPU 密集型用
FixedThreadPool
,IO 密集型用CachedThreadPool
):java
// CPU密集型线程池(线程数=CPU核心数) ExecutorService cpuPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
2. 异步化:从阻塞到非阻塞的范式转变
Spring 通过@Async
实现异步调用,提升突发流量处理能力:
java
@Service
public class AsyncService { @Async("taskExecutor") // 绑定自定义线程池 public CompletableFuture<Void> processAsync() { // 异步业务逻辑 return CompletableFuture.completedFuture(null); }
}
3. 惰性加载:延迟非必要资源初始化
单例模式延迟初始化(双重检查锁定):
java
public class LazySingleton { private static volatile LazySingleton instance; private LazySingleton() {} public static LazySingleton getInstance() { if (instance == null) { synchronized (LazySingleton.class) { if (instance == null) instance = new LazySingleton(); } } return instance; }
}
三、结果集优化:数据传输的 “瘦身与加速”
通过精简字段、压缩编码、批量处理,减少数据体积与解析成本。
1. 数据格式优化
- Protobuf 替代 JSON:体积减少 30%-50%,解析速度提升 2 倍(电商订单接口案例):
protobuf
// Protobuf定义(比JSON更紧凑) message Order { string order_id = 1; int32 total_amount = 2; }
- 字段精简:SQL 避免
SELECT *
,仅返回必要字段:sql
SELECT user_id, username FROM users WHERE status = 'ACTIVE'; // 拒绝冗余字段
2. 批量处理减少交互
JDBC 批量插入性能比单条插入提升 10 倍:
java
// 批量插入(减少网络交互次数)
PreparedStatement stmt = conn.prepareStatement("INSERT INTO orders VALUES (?, ?)");
for (Order order : orderList) { stmt.setLong(1, order.getId()); stmt.setString(2, order.getName()); stmt.addBatch();
}
stmt.executeBatch();
四、资源冲突优化:锁与无锁的 “平衡艺术”
解决共享资源竞争问题,核心是 “能无锁则无锁,必用锁则优化”。
1. 锁优化策略
- 乐观锁(CAS):适用于读多写少场景(如
AtomicInteger
自增):java
private AtomicInteger counter = new AtomicInteger(0); counter.incrementAndGet(); // 无锁自增,底层CAS实现
- 公平锁 vs 非公平锁:
ReentrantLock
默认非公平锁(吞吐量更高):java
Lock lock = new ReentrantLock(true); // true=公平锁,false=非公平锁(默认)
2. 无锁数据结构
ConcurrentHashMap
通过分段锁 + CAS 实现高并发写入,吞吐量比Hashtable
高 3 倍:
java
// ConcurrentHashMap无锁写入(CAS操作避免全表锁)
map.computeIfAbsent(key, k -> new Value());
3. 熔断机制:分布式锁竞争终极方案
Resilience4J 熔断第三方接口,避免级联阻塞(失败率超 40% 触发熔断):
java
@CircuitBreaker(name = "payment", fallbackMethod = "fallback")
public PaymentResult callThirdParty(PaymentRequest req) { // 调用易超时的第三方接口
}
五、算法优化:代码级性能的 “基因改造”
通过数据结构选择与算法重构,从根本上降低时间 / 空间复杂度。
1. 数据结构选择
- 随机访问:
ArrayList
(O (1))远优于LinkedList
(O(n))。 - 读多写少:
CopyOnWriteArrayList
(写时复制,无锁读)。 - 高并发:
ConcurrentHashMap
(分段锁,吞吐量提升 5 倍)。
2. 算法复杂度优化
斐波那契数列从递归(O (2ⁿ))到动态规划(O (n))的质变:
java
// 动态规划(时间复杂度O(n))
public int fib(int n) { if (n <= 1) return n; int[] dp = new int[n+1]; dp[0] = 0; dp[1] = 1; for (int i=2; i<=n; i++) dp[i] = dp[i-1] + dp[i-2]; return dp[n];
}
六、高效实现:组件与协议的 “择优而用”
通过适配器模式屏蔽底层差异,选择高性能组件 / 协议,实现 “无缝切换,上层无感知”。
1. 适配器模式实战
数据库切换案例(MySQL→PostgreSQL,Spring 动态注入):
java
// 统一接口
public interface UserDAO { UserEntity getById(String id); }
// MySQL适配器
@Repository("mysqlDAO")
public class MySQLDAO implements UserDAO { /* MySQL实现 */ }
// PostgreSQL适配器
@Repository("postgresqlDAO")
public class PostgreSQLDAO implements UserDAO { /* PostgreSQL实现 */ }
2. 组件替换提升性能
- 语法解析:JavaCC 解析复杂 SQL 比正则表达式快 5 倍(避免回溯导致的指数级耗时)。
- 网络框架:Netty(NIO)比传统 BIO 框架 QPS 提升 10 倍(Reactor 模型多线程并行)。
七、JVM 优化:运行时环境的 “深度调优”
通过 GC 参数、JIT 编译、内存分配策略,释放 JVM 底层性能潜力。
1. 垃圾回收器选择
- G1(JDK 9 + 默认):分代回收,停顿时间 < 100ms,适合混合工作负载。
- ZGC(JDK 11+):并发标记整理,停顿时间 < 1ms,适合低延迟场景(实时风控配置):
bash
-XX:+UseZGC -Xms32G -Xmx32G -XX:ZAllocationSpikeTolerance=8
2. JIT 编译优化
- 预热机制:通过 JMH 强制预热(
@Warmup(iterations=5)
),消除 JIT 初始化影响。 - 分层编译:
-XX:TieredCompilation=on
先快速生成低级代码,再逐步优化为高效代码。
总结:7 大方向的落地闭环
优化方向 | 核心目标 | 典型技术 / 案例 | 性能提升参考 |
---|---|---|---|
复用优化 | 减少资源重复创建 | 缓冲流、Guava Cache、HikariCP 连接池 | 连接创建时间降低 90% |
计算优化 | 释放多核潜力 | 线程池、Netty 异步模型、JMH 预热 | 并行任务耗时减少 50% |
结果集优化 | 降低数据传输成本 | Protobuf、批量处理、字段精简 | 接口响应时间缩短 40% |
资源冲突优化 | 解决共享资源竞争 | CAS 无锁、熔断机制、ConcurrentHashMap | 并发写入 QPS 提升 3 倍 |
算法优化 | 降低时间 / 空间复杂度 | 动态规划、二分查找、数据结构选择 | 复杂计算耗时减少 70% |
高效实现 | 组件替换与接口解耦 | 适配器模式、JavaCC、Netty | 底层切换成本降为 0 |
JVM 优化 | 释放运行时性能潜力 | ZGC、JIT 编译、内存参数调优 | GC 停顿时间 < 5ms |
通过 “理论分类→技术选型→案例落地→性能验证” 的闭环,开发者可针对具体业务场景组合使用 7 大方向,实现从代码逻辑到系统架构的全方位性能提升。后续将围绕每个方向展开深度案例剖析,提供可复用的优化模板与最佳实践。
相关文章:
Java 性能调优全解析:从设计模式到 JVM 的 7 大核心方向实践
引言 在高并发、低延迟的技术场景中,Java 性能优化需要系统化的方法论支撑。本文基于7 大核心优化方向(复用优化、计算优化、结果集优化、资源冲突优化、算法优化、高效实现、JVM 优化),结合权威框架与真实案例,构建从…...
“海外滴滴”Uber的Arm迁移实录:重构大规模基础设施
云工作负载在性价比上的自然演进路径: Intel ➜ AMD ➜ ARM 不信?来看看 Uber 的做法: 01/Arm架构:云计算新时代 2023 年 2 月,Uber 正式开启了一项战略性迁移:将从本地数据中心迁移至云端,…...
java加强 -File
File类的对象可以代表文件/文件夹,并可以调用其提供的方法对象文件进行操作。 File对象既可以代表文件,也可以代表文件夹。 创建File对象,获取某个文件的信息 语法: File 对象名 new File("需要访问文件的绝对路径&…...
SQL注入 ---04
1 简单的sql注入 要求: 要有sql注入: 1,变量 2,变量要带入数据库进行查询 3,没有对变量进行过滤或者过滤不严谨 mysql> select * from users where id2 limit 0,1; 当我的语句这样写时查寻到的结果 当我修改为&…...
MySQL知识点总结(持续更新)
聚合函数通常用于对数据进行统计和聚合操作。以下是一些常见数据库系统(如 MySQL、PostgreSQL、Oracle、SQL Server 等)中常用的聚合函数: 常见的数据库聚合函数: COUNT():计算指定列中非空值的数量 SELECT COUNT(*) …...
数字信号处理-大实验1.1
MATLAB仿真实验目录 验证实验:常见离散信号产生和实现验证实验:离散系统的时域分析应用实验:语音信号的基音周期(频率)测定 目录 一、常见离散信号产生和实现 1.1 实验目的 1.2 实验要求与内容 1.3 实验…...
Qt操作SQLite数据库教程
Qt 中操作 SQLite 数据库的步骤如下: 1. 添加 SQLite 驱动并打开数据库 #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery>// 创建数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QSQLITE"); db.setData…...
【PSINS工具箱】基于工具箱的单独GNSS导航、单独INS导航、两者结合组合导航,三种导航的对比程序。附完整的代码
本文给出基于PSINS工具箱的单独GNSS导航、单独INS导航、两者结合组合导航(153EKF)的程序。并提供三者的轨迹对比、误差对比。 文章目录 运行结果MATLAB代码代码的简单介绍简介2. 平均绝对误差 (MAE)主要模块运行结果 三轴轨迹图: 各轴误差曲线: 命令行窗口的结果输出: …...
开发者的测试复盘:架构分层测试策略与工具链闭环设计实战
摘要 针对测试复盘流于形式、覆盖率虚高等行业痛点,本文提出一套结合架构分层与工具链闭环的解决方案: 分层测试策略精准化:通过单元测试精准狙击核心逻辑、契约测试驱动接口稳定性、黄金链路固化端到端场景,实现缺陷拦截率…...
手写CString类
学习和理解字符串处理机制:手写 CString 类是深入学习字符串处理和内存管理的有效方式。通过实现构造函数、析构函数、赋值运算符等,能够理解字符串在内存中的存储方式、动态内存分配和释放的原理,以及如何处理字符串的复制、拼接、查找等操作…...
electron结合vue,直接访问静态文件如何跳转访问路径
在最外的app.vue或者index.vue的js模块编写 let refdade ref(1);//刷新,获得请求// 获取完整的查询字符串(例如: "?dade/myms")const searchParams new URLSearchParams(window.location.search);// 获取 dade 参数的值…...
解读RTOS 第七篇 · 驱动框架与中间件集成
1. 引言 在面向生产环境的 RTOS 系统中,硬件驱动框架与中间件层是连接底层外设与上层应用的桥梁。一个模块化、可扩展的驱动框架能够简化外设管理,提升代码可维护性;而丰富的中间件生态则为网络通信、文件系统、图形界面、安全加密等功能提供开箱即用的支持。本章将从驱动模…...
Java GUI开发全攻略:Swing、JavaFX与AWT
Swing 界面开发 Swing 是 Java 中用于创建图形用户界面(GUI)的库。它提供了丰富的组件,如按钮、文本框、标签等。 import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class SwingExa…...
Cursor 0.5版本发布,新功能介绍
Cursor,这款流行的AI编程平台,刚刚在其v0.50更新中推出了一系列新功能。 首先,请将您的Cursor IDE更新到最新版本。当您打开Cursor时,您应该会在屏幕左下方收到关于最新版本发布的通知。 更多上下文控制: 对上下文的精细可见性,以及最新模型的MAX模式。 聊天升级: 导出…...
Android学习总结之Glide自定义三级缓存(实战篇)
一、为什么需要三级缓存 内存缓存(Memory Cache) 内存缓存旨在快速显示刚浏览过的图片,例如在滑动列表时来回切换的图片。在 Glide 中,内存缓存使用 LruCache 算法(最近最少使用),能自动清理长…...
Maven 下载安装与配置教程
## 1. Maven 简介 Maven 是一个项目管理和构建自动化工具,主要用于 Java 项目。Maven 可以帮助开发者管理项目的构建、报告和文档,简化项目依赖管理。 ## 2. 下载 Maven 1. 访问 Maven 官方网站 [https://maven.apache.org/download.cgi](https://maven.…...
一篇解决Redis:持久化机制
目录 认识持久化 持久化方案 RDB(Redis DataBase) 手动触发 自动触发 小结 AOF(Append-Only File) AOF缓冲区刷新机制 AOF重写机制 AOF重写流程 编辑 混合持久化 认识持久化 我们都知道Mysql有四大特征,原子性,持久…...
使用IDEA创建Maven版本的web项目以及lombok的使用
1.新建项目 2.修改pom.xml 3.修改项目结构 4.在main/java下面写一个Servlet测试一下 然后当前页面往下滑 -Dfile.encodingUTF-8编写一句输出语句,测试是否成功部署配置,并选择到正确的位置: 回车以后 再回到idea里面,发现控…...
2025年AI开发者在开发者占比?
AI开发者在全球开发者中的占比目前没有一个统一且精确的数值,但根据行业报告和调研数据,可以给出以下大致的范围和趋势分析: 1. 综合估算范围 全球范围:AI/ML(机器学习)开发者约占开发者总数的 5%-15%&…...
SpringBoot整合MQTT实战:基于EMQX构建高可靠物联网通信,从零到一实现设备云端双向对话
一、引言 随着物联网(IoT)技术的快速发展,MQTT(Message Queuing Telemetry Transport)协议因其轻量级、低功耗和高效的特点,已成为物联网设备通信的事实标准。本文将详细介绍如何使用SpringBoot框架整合MQTT协议,基于开源MQTT代理EMQX实现设…...
Windows更新暂停七天关键注册表
环境:windows10 工具:procmon 下载地址:https://learn.microsoft.com/zh-cn/sysinternals/downloads/procmon 监控截图: 界面截图: 注: 1.北京时间差8小时 2.至少是从第二天恢复,即至少暂停…...
小白学习java第18天(上):spring
Spring :是一个轻量级(一个小依赖就可以实现还不是轻量级)的控制反转(IOC)和面向切面编程(AOP)的框架! 优点: 1.Spring 是一个开源免费的框架(容器…...
用Array.from实现创建一个1-100的数组
一、代码实现 let arr Array.from({length: 100}, (_, i) > i 1); 二、代码分析 1、Array.from(arrayLike, mapFn) (1)arrayLike 类数组对象(如 { length: 100 })本身没有索引属性(如 0: undefined, 1: undefi…...
什么是物联网 IoT 平台?
目录 物联网IoT平台的定义 物联网 IoT 平台发展历程 物联网IoT平台数据的特征 物联网IoT平台的处理流程 专为物联网 IoT 平台处理而生的时序数据库 物联网 IoT 平台时序数据处理面临的挑战及解决方案 收益与价值 物联网 IoT 平台企业案例 至数摇光 x TDengine 华自科技…...
PostgREST:无需后端 快速构建RESTful API服务
在现代 Web 开发中,API 已成为连接前后端的核心桥梁,传统的做法是通过后端框架来构建API接口,然后由前后端人员进行联调。 PostgREST是基于无服务器的一种实现方案,允许开发者将PostgreSQL数据库直接暴露为RESTful API࿰…...
3天北京旅游规划
北京 第一天应该集中在故宫和市中心区域,比如天安门、人民广场。这样可以体验到北京的历史和政治文化。午餐推荐烤鸭,因为这可是北京的特色。下午可以安排南锣鼓巷,既有古色古香的胡同,又有丰富的美食选择。 第二天的话࿰…...
MySQL--day1--数据库概述
(以下内容全部来自上述课程) 概述 1. 为什么要用数据库 持久化:内存中的数据断电之后就不存在了,所以需要持久化–>需要相关介质。 其中的一个介质就是数据库:存储数据量大、存储数据类型多 2. 数据库与数据库…...
[思维模式-38]:看透事物的关系:什么是事物的关系?事物之间的关系的种类?什么是因果关系?如何通过数学的方式表达因果关系?
一、什么是事物的关系? 事物的关系是指不同事物之间存在的各种联系和相互作用,它反映了事物之间的相互依存、相互影响、相互制约等特性。以下从不同维度为你详细阐述: 1、关系的类型 因果关系 定义:一个事件(原因&a…...
图像识别与 OCR 应用实践
图像识别是一种让计算机具备“看”与“理解”图像能力的人工智能技术,其目标是从图像或视频中提取有意义的信息,如物体、人物、场景或文字。在现实生活中,这项技术被广泛应用于面部识别、自动驾驶、安防监控、医疗诊断、图像搜索等多个领域。…...
深入理解卷积神经网络:从基础原理到实战应用
在人工智能领域,卷积神经网络(Convolutional Neural Network,简称 CNN)凭借其强大的图像识别、处理能力,成为深度学习中不可或缺的技术。无论是自动驾驶汽车识别道路标志,还是医学影像分析辅助疾病诊断&…...
51单片机——交通指示灯控制器设计
设计目标 1、设计一交通灯控制,控制东西方向的红、黄、绿灯和南北方向的红、黄、绿灯。 2、可手动控制和自动控制,设置两个输入控制开关。 手动/自动开关,通过P11的按键输入控制 3、手动:设置开关P11,两种情况&#x…...
vue2 头像上传+裁剪组件封装
背景:最近在进行公司业务开发时,遇到了头像上传限制尺寸的需求,即限制为一寸证件照(宽295像素,高413像素)。 用到的第三方库: "vue-cropper": "^0.5.5" 完整组件代码&…...
面向对象设计模式之代理模式详解
文章目录 面向对象设计模式之代理模式详解面向对象思想:现代软件开发的基石代理模式:巧妙的中间层设计JavaScript 语法点与代理模式的结合JavaScript 实现代理模式示例代理模式的应用场景 面向对象设计模式之代理模式详解 在现代软件开发的浩瀚领域中&a…...
Leetcode209做题笔记
力扣209 题目分析:想象一个窗口遍历着这个数组,不断扩大右边界,让r。往窗口中添加数字: 此时我们找到了这个窗口,它的和满足了大于等于target的条件,题目让我求最短的,那么我们就尝试来缩短它&…...
SVG 知识详解:从入门到精通
SVG 知识详解:从入门到精通 作为一名前端开发者,我经常会被SVG的魅力所折服。这种基于XML的矢量图形格式,不仅能完美适配各种屏幕分辨率,还能通过CSS和JavaScript进行灵活控制。今天,就让我们一起来深入探索SVG的世界…...
编译openssl源码
openssl版本 1.1.1c windows 安装环境 perl 先安装perl,生成makefile需要 https://strawberryperl.com/releases.html nasm nasm 也是生成makefile需要 https://www.nasm.us/ 安装完perl输入一下nasm,看看能不能找到,找不到的话需要配…...
土壤温湿盐分传感器用于节水农业灌溉引领者三针设计原理便于安装维护
土壤温度部分是由精密铂电阻和高精度变送器两部分组成。变送器部分由电源模块、温度传感模块、变送模块、温度补偿模块及数据处理模块等组成,彻底解决铂电阻因自身特点导入的测量误差,变送器内有零漂电路和温度补偿电路,对使用环境有较高的适…...
Kotlin Compose 与传统 Android UI 开发对比
在移动应用开发领域,Android 开发一直是技术演进的前沿阵地,而 UI 开发作为用户与应用交互的核心环节,其技术体系的变革更是备受瞩目。 技术演进背景 Android UI 开发体系发展脉络 原生 View 体系阶段 在早期的 Android 开发中,原生 View 体系占据了主导地位。开发者通…...
docker-compose——安装redis
文章目录 一、编写docker-compose.yaml文件二、编写redis.conf文件三、启动docker-compose 一、编写docker-compose.yaml文件 version: 3.3 services:redis:image: redis:latestcontainer_name: redisrestart: alwaysports:- 6379:6379volumes:- ./redis/data:/data- ./redis/…...
MFC 调用海康相机进行软触发
初始化相机类文件 #pragma once #include "MvCameraControl.h" class CMvCamera { public:CMvCamera();~CMvCamera();//初始化相机int InitCamera();int SaveCurrentImage(CString filePath);//关闭相机void CloseCamera();//设置int SetEnumValue(IN const char* s…...
第二章 变量和运算符
主要内容 关键字和标识符变量和常量八大基本数据类型Scanner键盘输入基本数据类型的类型转换算术运算符赋值运算符扩展赋值运算符比较运算符逻辑运算符三目运算符运算符的优先级别 学习目标 知识点要求关键字和标识符理解变量和常量掌握八大基本数据类型掌握Scanner键盘输入…...
【starrocks】StarRocks 常见 HTTP 操作与导入错误排查指南
文章目录 一、Stream Load:通过 HTTP 导入数据二、导入状态查询三、取消导入任务四、节点状态监控查看所有 Backend 状态:查看所有 Frontend 状态: 五、导入失败的排查方式1. 查询导入任务状态2. 下载详细错误日志3. 查看 FE/BE 节点日志FE 日…...
网络协议分析 实验七 FTP、HTTP、DHCP
文章目录 实验7.1 FTP协议练习二 使用浏览器登入FTP练习三 在窗口模式下,上传/下传数据文件实验7.2 HTTP(Hyper Text Transfer Protocol)练习二 页面提交练习三 访问比较复杂的主页实验7.3 DHCP(Dynamic Host Configuration Protocol) 实验7.1 FTP协议 dir LIST&…...
ET ProcessInnerSender类(实体) 分析
ProcessInnerSender 作用是进程内部发送Actor消息 字段 TIMEOUT_TIME 超时时间RpcId 用来累加requestCallback 存储RPC的回调事件list 用来获取MessageQueue中的Actor消息 方法 Awake 初始化在MessageQueue中注册待处理的消息队列Destroy 移除在MessageQueue中的消息队列U…...
远程连接工具
绿色轻便ToDesk https://www.todesk.com/download.html 向日葵 https://sunlogin.oray.com/download...
MySQL库级管理:数据库管理与存储引擎剖析
引言 各位数据库爱好者们好!今天我们要深入探讨MySQL数据库的基本操作,这是每位开发者必须掌握的"内功心法" 💪。无论你是刚接触MySQL的小白,还是需要复习基础的老手,这篇教程都将带你系统学习数据库的核心…...
MongoDB 的核心概念(文档、集合、数据库、BSON)是什么?
MongoDB 是一个面向文档的数据库,它的核心概念与传统的关系型数据库(RDBMS)有所不同。以下是它的四个主要核心概念: 文档 (Document) 定义: 文档是 MongoDB 中的基本数据单元。它类似于关系型数据库中的一行记录&#…...
占位符读取标准输入缓冲区规则
1、如果标准输入缓冲区中的前若干个字符都是空白字符,%s,%d,%f都能直接跳过并且从第一个非空白字符开始读取,但%c不能,而是直接读取。 2、%s遇到空白字符时停止,不会读取遇到的空白字符。 3、%d遇到非数字…...
使用Docker部署MongoDB
使用Docker部署MongoDB 使用Docker部署MongoDB是一种快速、便捷的方式,以下是详细步骤: 1. 基本部署 拉取MongoDB镜像 docker pull mongo:latest运行MongoDB容器(最简单方式) docker run --name mongodb -d -p 27017:27017 m…...
如何通过命令提示符(CMD)检查虚拟化是否已启用
想确认 Windows 11 或 10 电脑或笔记本上的虚拟化是否已启用,可以使用命令提示符或 PowerShell 中的 systeminfo 命令。之前已经介绍过使用图形界面的检查方法。在大多数现代系统中,虚拟化默认在 BIOS 中启用,但我们无需打开 BIOS/UEFI 固件菜单即可确认这一点。 虚拟化是一…...