Java 字符串分解技术:substring、tokenizing 和 trimming 方法详解
关键点
- Java 字符串处理是开发中不可或缺的一部分,广泛用于数据解析和格式化。
substring()
方法能够精确提取字符串的子串,需注意索引范围以避免异常。String.split()
是分词的首选方法,支持正则表达式,灵活性高。trim()
和strip()
方法用于去除空白,strip()
更适合处理 Unicode 空白字符。- 这些方法简单易用,但在性能敏感场景下需注意内存和效率。
为什么需要分解字符串?
在 Java 编程中,字符串处理是日常开发的核心任务。无论是从用户输入中提取信息、解析文件路径,还是处理网络请求的查询参数,分解字符串都是常见需求。Java 提供了多种方法来实现这一目标,包括提取子串(substring)、分词(tokenizing)和去除空白(trimming)。这些方法简单而强大,能够帮助开发者高效地处理字符串数据。
提取子串:使用 substring()
substring()
方法允许你从字符串中提取特定部分。你可以指定起始索引,或者同时指定起始和结束索引。重要的是,结束索引是不包含的,这遵循 Java 的半开区间规则。
示例:从 URL 中提取协议和域名:
String url = "https://www.example.com";
String protocol = url.substring(0, url.indexOf(":")); // "https"
String domain = url.substring(8); // "www.example.com"
注意:如果索引超出范围,会抛出 StringIndexOutOfBoundsException
。因此,在使用 substring()
前,建议检查索引有效性。
分词:使用 split() 和 StringTokenizer
分词是将字符串分割成多个小块(称为 token)。String.split()
是最常用的方法,它接受正则表达式作为分隔符,灵活性极高。
示例:将句子分割成单词:
String sentence = "Java is\tgreat";
String[] words = sentence.split("\\s+");
for (String word : words) {System.out.println(word);
}
// 输出:
// Java
// is
// great
对于更复杂的场景,如提取数字,可以结合正则表达式:
import java.util.regex.*;String input = "Courses 471 and 472, 570";
Matcher matcher = Pattern.compile("\\d+").matcher(input);
while (matcher.find()) {System.out.println(matcher.group());
}
// 输出:
// 471
// 472
// 570
虽然 StringTokenizer
也可以实现分词,但它已被官方标记为“过时”,建议优先使用 split()
。
去除空白:trim() 和 strip() 系列方法
去除字符串首尾的空白字符是常见需求。Java 提供了以下方法:
trim()
:去除 ASCII 空白字符(字符编码 ≤ 32)。strip()
:去除 Unicode 空白字符(更全面)。stripLeading()
和stripTrailing()
:分别去除首部或尾部空白。stripIndent()
:规范化多行字符串的缩进。
示例:清理用户输入:
String input = " Hello World ";
System.out.println("[" + input.trim() + "]"); // "[Hello World]"
System.out.println("[" + input.strip() + "]"); // "[Hello World]"
Unicode 空白处理:
String unicodeSpace = "\u2000Hello World\u2000";
System.out.println("[" + unicodeSpace.trim() + "]"); // "[\u2000Hello World\u2000]"
System.out.println("[" + unicodeSpace.strip() + "]"); // "[Hello World]"
Java 字符串分解技术:substring、tokenizing 和 trimming 方法详解
引言
字符串处理是 Java 编程的核心技能之一。从解析用户输入到处理复杂的数据格式,字符串分解技术在开发中无处不在。本文将深入探讨 Java 中用于分解字符串的三种关键方法:substring()
用于提取子串,split()
和 StringTokenizer
用于分词,以及 trim()
和 strip()
系列方法用于去除空白。通过详细的代码示例和实用建议,本文旨在帮助开发者掌握这些技术,提升代码效率和可读性。
提取子串:精确截取字符串
substring()
方法是 Java 字符串处理的基础工具,用于从原始字符串中提取特定部分。Java 提供了两种重载形式:
substring(int beginIndex)
:从指定索引开始提取到字符串末尾。substring(int beginIndex, int endIndex)
:提取从beginIndex
到endIndex - 1
的子串。
需要注意的是,Java 采用半开区间规则,即结束索引是不包含的。这种设计在 Java 中非常常见,例如数组切片和集合操作。
示例:解析 URL
假设我们需要从 URL 中提取协议和域名:
String url = "https://www.example.com";
String protocol = url.substring(0, url.indexOf(":")); // "https"
String domain = url.substring(8); // "www.example.com"
System.out.println("协议: " + protocol);
System.out.println("域名: " + domain);
示例:提取文件扩展名
提取文件扩展名是另一个常见场景:
String fileName = "document.txt";
int dotIndex = fileName.lastIndexOf('.');
if (dotIndex != -1) {String extension = fileName.substring(dotIndex + 1); // "txt"System.out.println("扩展名: " + extension);
} else {System.out.println("无扩展名");
}
注意事项
- 索引范围:确保
beginIndex
和endIndex
在有效范围内,否则会抛出StringIndexOutOfBoundsException
。建议使用indexOf()
或lastIndexOf()
动态计算索引。 - 性能:在 Java 7u6 及以上版本中,
substring()
会创建新的字符数组,而不是共享原始字符串的字符数组。这避免了内存泄漏,但可能增加内存使用量。
分词:将字符串拆分为 token
分词(tokenizing)是将字符串分割成多个独立部分(token)的过程。Java 提供了两种主要方法:String.split()
和 StringTokenizer
。其中,split()
是现代开发中的首选,因为它支持正则表达式,灵活性更高。
使用 String.split()
String.split(String regex)
方法根据指定的正则表达式将字符串分割成数组。以下是一些常见用法:
示例:分割句子为单词
String sentence = "Java is\tgreat";
String[] words = sentence.split("\\s+"); // 匹配一个或多个空白字符
for (String word : words) {System.out.println("单词: " + word);
}
// 输出:
// 单词: Java
// 单词: is
// 单词: great
正则表达式 \s+
匹配任何空白字符(空格、制表符、换行等),确保即使有多个连续空白也能正确分割。
示例:解析 URL 查询参数
假设我们需要解析 URL 的查询参数:
String url = "https://example.com?page=1&sort=asc";
int queryStart = url.indexOf('?');
if (queryStart != -1) {String query = url.substring(queryStart + 1); // "page=1&sort=asc"String[] params = query.split("&");for (String param : params) {String[] keyValue = param.split("=");if (keyValue.length == 2) {System.out.println(keyValue[0] + ": " + keyValue[1]);}}
}
// 输出:
// page: 1
// sort: asc
使用正则表达式进行高级分词
对于更复杂的场景,可以结合正则表达式提取特定模式。例如,提取字符串中的所有数字:
import java.util.regex.*;String input = "Courses 471 and 472, 570";
Matcher matcher = Pattern.compile("\\d+").matcher(input);
while (matcher.find()) {String number = matcher.group();System.out.println("课程编号: " + number);
}
// 输出:
// 课程编号: 471
// 课程编号: 472
// 课程编号: 570
正则表达式 \d+
匹配一个或多个数字字符。这种方法非常适合处理格式不固定的输入。
StringTokenizer:过时的替代方案
StringTokenizer
是 Java 早期用于分词的类,尽管仍然可用,但官方已不推荐使用。它默认以空格作为分隔符,但可以指定其他分隔符。
示例:使用 StringTokenizer
import java.util.StringTokenizer;String input = "Hello,World,of,Java";
StringTokenizer st = new StringTokenizer(input, ",");
while (st.hasMoreTokens()) {System.out.println("Token: " + st.nextToken());
}
// 输出:
// Token: Hello
// Token: World
// Token: of
// Token: Java
为什么避免使用 StringTokenizer?
- 功能有限:不支持正则表达式,无法处理复杂分隔模式。
- 维护性差:作为遗留类,未来可能不再更新。
- 替代方案更强大:
String.split()
和正则表达式提供了更高的灵活性和可读性。
分词注意事项
- 正则表达式转义:在
split()
中使用正则表达式时,特殊字符(如.
或|
) 需要转义。例如,分割 CSV 数据时使用split("\\.")
而不是split(".")
。 - 复杂格式:对于 CSV 等复杂数据,建议使用专用库(如 OpenCSV),以处理引号和转义字符。
- 性能:
split()
对于小型字符串非常高效,但在处理超大字符串或频繁调用时,需评估性能影响。
去除空白:trim() 和 strip() 系列方法
去除字符串首尾的空白字符是许多场景的常见需求,例如清理用户输入或格式化输出。Java 提供了以下方法:
方法 | 功能 | 空白定义 |
---|---|---|
trim() | 去除首尾空白字符 | ASCII 字符(≤ U+0020) |
strip() | 去除首尾空白字符 | Unicode 空白字符 |
stripLeading() | 仅去除首部空白字符 | Unicode 空白字符 |
stripTrailing() | 仅去除尾部空白字符 | Unicode 空白字符 |
stripIndent() | 规范化多行字符串缩进 | 基于共同缩进 |
示例:清理用户输入
String input = " Hello World ";
System.out.println("trim: [" + input.trim() + "]"); // "[Hello World]"
System.out.println("strip: [" + input.strip() + "]"); // "[Hello World]"
Unicode 空白处理
trim()
和 strip()
的主要区别在于对空白字符的定义。trim()
只处理 ASCII 空白字符,而 strip()
支持 Unicode 空白字符(如 \u2000
)。
示例:处理 Unicode 空白
String unicodeSpace = "\u2000Hello World\u2000";
System.out.println("trim: [" + unicodeSpace.trim() + "]"); // "[\u2000Hello World\u2000]"
System.out.println("strip: [" + unicodeSpace.strip() + "]"); // "[Hello World]"
示例:处理多行字符串
Java 14 引入的文本块(text blocks)与 stripIndent()
结合使用,可以规范化多行字符串的缩进:
String text = """Line oneLine twoLine three""";
System.out.println(text.stripIndent());
// 输出:
// Line one
// Line two
// Line three
选择合适的 trimming 方法
- 使用
strip()
而非trim()
:在 Java 11 及以上版本中,strip()
是更好的选择,因为它支持 Unicode 空白字符,适用性更广。 - 针对性去除空白:如果只需要去除首部或尾部空白,使用
stripLeading()
或stripTrailing()
。 - 多行字符串:
stripIndent()
专为文本块设计,适合格式化多行内容。
最佳实践与实用建议
为了在字符串分解中获得最佳效果,以下是一些实用建议:
- 验证索引范围:在使用
substring()
时,始终检查索引有效性。例如,使用indexOf()
或lastIndexOf()
动态计算索引,避免硬编码。 - 优先使用
split()
:对于分词任务,split()
结合正则表达式通常是最灵活和可读的选择。避免使用StringTokenizer
。 - 处理 Unicode 空白:在国际化应用中,使用
strip()
系列方法以确保正确处理 Unicode 空白字符。 - 性能优化:对于大量字符串操作,考虑使用
StringBuilder
拼接结果,减少临时字符串对象的创建。 - 异常处理:在生产环境中,添加适当的异常处理代码,例如捕获
StringIndexOutOfBoundsException
或验证正则表达式的有效性。 - 使用专用库:对于复杂数据格式(如 CSV 或 JSON),优先使用成熟的库(如 OpenCSV 或 Jackson),而不是手动解析。
结论
Java 的字符串分解技术——substring()
、split()
和 trim()
/strip()
方法——为开发者提供了强大的工具来处理各种字符串操作需求。通过理解这些方法的工作原理和适用场景,您可以编写更高效、更健壮的代码。无论是提取子串、分词还是清理空白,这些方法都简单易用且功能强大。建议开发者在实践中多加尝试,结合正则表达式和专用库,进一步提升字符串处理的灵活性和效率。
关键引用
- OpenCSV Official Website
- Jackson JSON Processor GitHub
相关文章:
Java 字符串分解技术:substring、tokenizing 和 trimming 方法详解
关键点 Java 字符串处理是开发中不可或缺的一部分,广泛用于数据解析和格式化。substring() 方法能够精确提取字符串的子串,需注意索引范围以避免异常。String.split() 是分词的首选方法,支持正则表达式,灵活性高。trim() 和 stri…...
OpenCV进阶操作:图像金字塔
文章目录 前言一、图像金字塔1、什么是图像金字塔2、金字塔类型1) 高斯金字塔 (Gaussian Pyramid)2)拉普拉斯金字塔 (Laplacian Pyramid) 3、图像金字塔的作用 二、图像金字塔中的操作1、向下采样步骤 2、向上采样步骤 3、拉普拉斯金字塔4、结论 三、代码…...
Rust游戏开发全栈指南:从理论到实践的革新之路
一、Rust游戏开发生态全景 1.1 核心引擎框架 Rust游戏生态已形成多层级工具链,覆盖从轻量级2D到3A级项目的开发需求: Bevy:采用ECS架构的模块化引擎,提供优雅的API设计和活跃社区支持,支持实时热重载和跨平台部署Fy…...
[GXYCTF2019]Ping Ping Ping
解题步骤 1、先使用 内敛执行 查看当前的php文件 执行 命令执行 发现空格被过滤 ?ip127.0.0.1$IFS|$IFSwhomi 还有一个点就是这个 执行的命令是不能进行拼接的 可能就是被过滤了 | 所以我们使用 ; 进行绕过一下 空格过滤代替 $IFS ${IFS} ${IFS}$9 //这里$1到$9都可以 $IFS$1…...
马哥教育Linux云计算运维课程
课程大小:19.1G 课程下载:https://download.csdn.net/download/m0_66047725/90640128 更多资源下载:关注我 你是否找了很多资料看了很多视频聊了很多群友,却发现自己技术仍然原地踏步?本教程联合BAT一线导师倾囊相授…...
科技打头阵,创新赢未来——中科视界携千眼狼超高速摄像机亮相第三届科交会
2025年4月26日,合肥,第三届中国(安徽)科技创新成果转化交易会国际合作板块展区,中科视界及其旗下品牌“千眼狼”高速摄像机成为展会焦点。作为国内科学仪器的领军企业,中科视界以“科技打头阵,创…...
【Flutter】Unity 三端封装方案:Android / iOS / Web
关联文档:【方案分享】Flutter Unity 跨平台三维渲染架构设计全解:插件封装、通信机制与热更新机制—— 支持 Android/iOS/Web 的 3D 内容嵌入与远程资源管理,助力 XR 项目落地 —— 支持 Android/iOS/Web 的 3D 内容嵌入与远程资源管理&…...
高能效计算:破解算力增长与能源约束的科技密码
引言 在人工智能和大模型技术迅猛发展的今天,全球算力需求正以每年50%的速度激增[3]。然而,传统计算范式已逼近物理极限——国际能源署预测,到2030年数据中心的全球电力消耗占比可能突破3%[3]。面对这场"算力革命"与"能源危机…...
【质量管理】TRIZ(萃智)的工程系统进化法则
在文章【质量管理】现代TRIZ(萃智)理论概述-CSDN博客 我们谈到到现代TRIZ的理论、TRIZ与传统创新的差异等。在文章中我们有说到TRIZ的创始人阿奇舒勒发现其实技术的进化是有规律可循的。 那到底技术进步有什么规律呢? 技术进化发展趋势和路径…...
FastAPI系列07:“请求-响应”过程高阶技巧
“请求-响应”过程高阶技巧 1、自定义 Request自定义 Request的用途如何自定义 Request 2、自定义APIRouteAPIRoute的用途自定义 APIRoute的用途如何自定义 APIRoute 3、使用BackgroundTasks(后台任务)BackgroundTasks的用途如何使用BackgroundTasksBack…...
游戏服务器不加防护能活多久?
游戏服务器若不加防护,其存活时间受多种因素影响,但通常面临极高的安全风险,可能在数小时至数天内因攻击或漏洞利用而崩溃。以下是具体分析: 1. DDoS攻击与勒索风险 未加防护的服务器极易成为黑客攻击目标,尤其是DDoS…...
Embedding入门概述
概述 Embedding,嵌入,一种将离散的符号数据(如单词、句子、图像等)映射到连续的向量空间中的技术,这些向量能够捕捉数据之间的语义、结构等关系。就是把原本难以直接处理的符号数据,转换成计算机更容易理解…...
革新桌面自动化:微软UFO²操作系统深度解析与未来展望
一、系统架构:多智能体协同的OS级创新 微软UFO(Unified Framework for Operations)是首个深度集成于Windows底层的多智能体操作系统,其核心架构由HostAgent控制中枢与模块化AppAgent执行单元构成。 HostAgent作为系统级调度器…...
【Java】分布式事务解决方案
分布式事务是指在分布式系统中,为了保证多个节点上的操作要么全部成功提交,要么全部失败回滚,所采取的一系列技术手段和协议。 CAP理论 在一个分布式系统中以下三个基本属性无法被同时满足: C(一致性):一致性是指写…...
es数据导出
有大数据量导出的需求 整体思路:分页查询es,一页查询2000条,下一页查询的截止时间取上一页最后一条记录的创建时间(因为分页是按照创建时间逆序排列的),组装最后导出的list,利用EasyExcel导出到…...
chrony服务器(2)
安装与配置 [rootserver ~]# systemctl status ntp # 查看ntp状态 安装 # 默认已安装,若需要安装则可执行: [rootserver ~]# yum install chrony -y [rootserver ~]# systemctl start chronyd [rootserver ~]# systemctl enable chronyd Chrony配置文…...
C++入门小馆: STL 之queue和stack
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
从零搭建云原生后端系统 —— 一次真实项目实践分享
一、引言:为什么选择云原生技术打造后端? 在当今数字化加速的时代,业务需求变化频繁,应用需要快速开发、快速上线、快速迭代。传统单体应用后端架构在灵活性、扩展性和稳定性方面越来越难以满足需求。 而云原生(Clou…...
东田数码科技前端面经
东田数码科技有限公司前端面经 一个月三次面试,也是逐渐积攒了许多经验,也有遇到面试官问到的重复的问题,也有一些我不懂的问题,以下是4.27东田前端面经,希望给大家做参考。 1-自我介绍 我是ac鸽,就读与…...
【音视频】SDL窗口显示
SDL视频显示函数简介 SDL_Init(): 初始化SDL系统SDL_CreateWindow():创建窗口SDL_WindowSDL_CreateRenderer():创建渲染器SDL_RendererSDL_CreateTexture():创建纹理SDL_TextureSDL_UpdateTexture(): 设置纹理的数据S…...
小球在摆线上下落的物理过程MATLAB代码
物理建模: 使用摆线参数方程定义轨迹:x r(θ - sinθ), y r(1 - cosθ)通过微分方程求解角度θ随时间变化关系,考虑能量守恒定律计算实时速度分量和切向加速度 可视化特性: 灰色虚线显示完整摆线轨迹红色小球实时显示当…...
【设计模式】享元模式
享元模式属于结构型设计模式 核心思想是通过共享技术,实现相似对象的高效复用。用 1%的资源支撑100%的需求——通过对象状态的分离与共享,用最小内存支持海量对象 内部状态:对象中不变的部分共享 外部状态:对象中变化的部分非共享…...
R中实现数值求导的包numDeriv
介绍 numDeriv 是一个用于数值求导的 R 包,它提供了计算函数导数的简单方法,支持一阶导数和高阶导数的计算。 计算一阶导数 grad(func, x, method"Richardson", sideNULL, eps1e-4, method.argslist(), ...) 参数: func&#x…...
常用的多传感器数据融合方法
1. 概述 根据具体需求(实时性、计算资源、噪声特性)选择合适的方法,实际应用中常结合多种方法(如UKF与神经网络结合)。 传统方法 (KF/EKF/UKF/PF)依赖数学模型,适合动态系统&#…...
[Lc_week] 447 | 155 | Q1 | hash | pair {}调用
447_Q1 题解 class Solution {typedef pair<int,int> PII;// 自定义哈希函数struct HashPII {size_t operator()(const PII& p) const {return hash<int>()(p.first) ^ (hash<int>()(p.second) << 1);}};public:int countCoveredBuildings(int n,…...
HTML5 新特性详解:语义化标签、表单与音视频嵌入
前言 HTML5作为当前Web开发的核心技术,为开发者提供了更强大、更语义化的工具集。本文将深入探讨HTML5的三大核心特性:语义化标签、增强的表单功能以及原生的音视频支持,帮助开发者构建更现代化、更易维护的网页应用。 一、HTML5语义化标签…...
关于 React Fiber 架构、Hooks 原理
下面将详细介绍你提到的关于 React Fiber 架构、Hooks 原理等相关知识点: React Fiber 架构概述 1. 架构演变 在 React 16 版本之前,采用的是栈调和(Stack Reconciler),流程是 JSX 经过 render 函数转换为虚拟 DOM&…...
音视频之H.265/HEVC熵编码
H.265/HEVC系列文章: 1、音视频之H.265/HEVC编码框架及编码视频格式 2、音视频之H.265码流分析及解析 3、音视频之H.265/HEVC预测编码 4、音视频之H.265/HEVC变换编码 5、音视频之H.265/HEVC量化 6、音视频之H.265/HEVC环路后处理 7、音视频之H.265/HEVC熵编…...
【视频生成模型】通义万相Wan2.1模型本地部署和LoRA微调
目录 1 简介2 本地部署2.1 配置环境2.2 下载模型 3 文生视频3.1 运行命令3.2 生成结果 4 图生视频4.1 运行命令4.2 生成结果 5 首尾帧生成视频5.1 运行命令5.2 生成结果 6 提示词扩展7 LoRA微调 1 简介 2 本地部署 2.1 配置环境 将Wan2.1工程克隆到本地: git cl…...
Java高频面试之并发编程-09
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:详细说说ThreadLocal ThreadLocal 是 Java 中用于实现线程本地变量的工具类,主要解决多线程环境下共享变量的…...
[Vulfocus解题系列]Apache HugeGraph JWT Token硬编码导致权限绕过(CVE-2024-43441)
[Vulfocus解题系列]Apache HugeGraph JWT Token硬编码导致权限绕过(CVE-2024-43441) Apache HugeGraph 是一款快速、高度可扩展的图数据库。它提供了完整的图数据库功能,具有出色的性能和企业级的可靠性。 Apache HugeGraph 存在一个 JWT t…...
MySQL最新安装、连接、卸载教程(Windows下)
文章目录 MySQL最新安装、连接、卸载教程(Windows下)1.MySQL安装2.MySQL连接2.1 命令行连接2.2 图形化连接(推荐) 3.MySQL卸载参考 MySQL最新安装、连接、卸载教程(Windows下) 1.MySQL安装 MySQL 一共可以…...
Scala 函数柯里化及闭包
一、柯里化 1.1 定义 柯里化是将一个接受多个参数的函数转换为一系列接受单个参数的函数的过程。每个函数返回一个新函数,直到所有参数都被收集完毕,最终返回结果。 1.2 示例 非柯里化函数(普通多参数函数) def add(a: Int, b…...
EasyRTC嵌入式音视频通信SDK助力视频客服,开启智能服务新时代
一、背景 在数字化服务浪潮下,客户对服务体验的要求日益提升,传统语音及文字客服在复杂业务沟通、可视化指导等场景下渐显不足。视频客服虽成为企业服务升级的关键方向,但普遍面临音视频延迟高、画质模糊、多端适配难、功能扩展性差等问题&a…...
OceanBase数据库-学习笔记1-概论
多租户概念 集群和分布式 随着互联网、物联网和大数据技术的发展,数据量呈指数级增长,单机数据库难以存储和处理如此庞大的数据。现代应用通常需要支持大量用户同时访问,单机数据库在高并发场景下容易成为性能瓶颈。单点故障是单机数据库的…...
Android 理清 Gradle、AGP、Groovy 和构建文件之间的关系
在 Android 开发中,我们常常会接触到一系列看似相近却各有分工的名词,比如:Gradle、Groovy、AGP、gradle-wrapper.properties、build.gradle、settings.gradle 等等。 它们彼此之间到底是什么关系?各自又承担了什么角色࿱…...
ubuntu 安装ollama后,如何让外网访问?
官网下载linux版本:https://ollama.com/download/linux 1、一键安装和运行 curl -fsSL https://ollama.com/install.sh | sh 2、下载和启动deepseek-r1大模型 ollama run deepseek-r1 这种方式的ollama是systemd形式的服务,会随即启动。默认开启了 …...
安卓的Launcher 在哪个环节进行启动
安卓Launcher在系统启动过程中的关键环节启动,具体如下: 内核启动:安卓设备开机后,首先由引导加载程序启动Linux内核。内核负责初始化硬件设备、建立内存管理机制、启动系统进程等基础工作,为整个系统的运行提供底层支…...
【银河麒麟高级服务器操作系统】在VMware虚拟机情况下出现软锁处理过程
系统环境及配置 系统环境 物理机/虚拟机/云/容器 VMware虚拟机,宿主机型号是YK SR750 网络环境 外网/私有网络/无网络 私有网络 硬件环境 机型 VMware Virtual Platform 处理器 Intel(R) Xeon(R) Gold 6348 CPU 2.60GHz 内存 64GB 整机类型/架构 x86…...
Ubuntu 22.04.4操作系统初始化详细配置
上一章节,主要讲解了Ubuntu 22.04.4操作系统的安装,但是在实际生产环境中,需要对Ubuntu操作系统初始化,从而提高系统的性能和稳定性。 一、查看Ubuntu系统版本和内核版本 # 查看系统版本 testubuntu:~$ sudo lsb_release -a Rel…...
[ACTF2020 新生赛]Upload
先写一个万能的一句话木马 使用一句话木马 发现这个是有内容过滤的 过滤了 <? 发现这个过滤的很死那就只能使用 不带 ? 的短标签了 使用script 标签 这个的使用只限于对方的php是5版本的 正好是低版本的 所以直接上传 改一下后缀为 phtml 成功上传 但是我们没有…...
Harbor2.0仓库镜像清理策略
背景 在持续集成和持续部署的流程中,频繁的构建和部署会生成大量的镜像版本。这些历史镜像如果不及时清理,会占用大量的存储空间,导致 Harbor 仓库膨胀,影响系统性能。 目前 公司的Harbor存储已经占用1T,好多的repo的…...
从零开始了解数据采集(二十一)——电子制造行业趋势分析案例
这次分享一个偏行业性的趋势分析案例,在项目中为企业实实在在的提高了良品率。不懂什么是趋势分析的同学,可以翻看前面的文章。 在广东某电子制造厂中,管理层发现最近几个月生产良品率有所波动,但无法明确波动原因,也…...
从零开始开发一个简易的五子棋游戏:使用 HTML、CSS 和 JavaScript 实现双人对战
介绍 五子棋,作为一种经典的棋类游戏,不仅考验玩家的策略与判断力,还能在繁忙的生活中带来一丝轻松。今天,我们将用 HTML、CSS 和 JavaScript 来开发一个简易的五子棋游戏,玩家可以在浏览器中与朋友展开一场刺激的对决…...
用Node.js施展文档比对魔法:轻松实现Word文档差异比较小工具,实现Word差异高亮标注(附完整实战代码)
引言:当「找不同」遇上程序员的智慧 你是否经历过这样的场景? 法务同事发来合同第8版修改版,却说不清改了哪里 导师在论文修改稿里标注了十几处调整,需要逐一核对 团队协作文档频繁更新,版本差异让人眼花缭乱 传统…...
计算机基本理论与 ARM 相关概念深度解析
一、计算机基本理论 1. 计算机的组成 计算机硬件系统由五大部件构成: 运算器:负责算术运算(如加减乘除)与逻辑运算(如与、或、非),是数据处理的核心单元。控制器:从存储器中逐条提…...
adb常用的20个命令
ADB(Android Debug Bridge)是Android开发工具中的一个命令行工具,常用于与Android设备进行交互、调试和测试。以下是ADB常用的20个命令: adb devices:列出所有已连接的设备及其状态。adb connect <device_ip…...
C++如何使用调试器(如GDB、LLDB)进行程序调试保姆级教程(2万字长文)
C作为一门高性能、接近底层的编程语言,其复杂性和灵活性为开发者提供了强大的能力,同时也带来了更高的调试难度。与一些高级语言不同,C程序往往直接操作内存,涉及指针、引用、多线程等特性,这些都可能成为错误的温床。…...
【计算机哲学故事1-2】输入输出(I/O):你吸收什么,便成为什么
“我最近,是不是废了……”她瘫在沙发上,手机扣在胸口,盯着天花板自言自语。 我坐在一旁,随手翻着桌上的杂志,没接话,等着她把情绪发泄完。 果然,几秒后,她重重地叹了口气…...
驱动开发硬核特训 · Day 22(上篇): 电源管理体系完整梳理:I2C、Regulator、PMIC与Power-Domain框架
📘 一、电源子系统总览 在现代Linux内核中,电源管理不仅是系统稳定性的保障,也是实现高效能与低功耗运行的核心机制。 系统中涉及电源管理的关键子系统包括: I2C子系统:硬件通信基础Regulator子系统:电源…...