go语言中的strings库
strings库
func EqualFold
func EqualFold(s, t string) bool
判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。
func main() {fmt.Println(strings.EqualFold("hello", "hello")) //truefmt.Println(strings.EqualFold("hello", "HELLO")) //truefmt.Println(strings.EqualFold("hello", "Hello")) //true
}
func HasPrefix
func HasPrefix(s, prefix string) bool
判断s是否有前缀字符串prefix。
func main() {fmt.Println(strings.HasPrefix("golang", "go")) // truefmt.Println(strings.HasPrefix("golang", "lang")) // false
}
func HasSuffix
func HasSuffix(s, suffix string) bool
判断s是否有后缀字符串suffix。
func main() {fmt.Println(strings.HasSuffix("hello.txt", ".txt")) // truefmt.Println(strings.HasSuffix("hello.txt", ".jpg")) // false
}
func Contains
func Contains(s, substr string) bool
判断字符串s是否包含子串subs
func main() {fmt.Println(strings.Contains("hello world", "world")) // truefmt.Println(strings.Contains("golang", "java")) // false
}
func ContainsRune
func ContainsRune(s string, r rune) bool
判断字符串s是否包含utf-8码值r。
func main() {fmt.Println(strings.ContainsRune("你好,世界", '界')) // truefmt.Println(strings.ContainsRune("hello", '你')) // falsefmt.Println(strings.ContainsRune("hello", 'h')) // true
}
//这个是适用于单个Unicode字符检查,而不是子串
//如果输入多个字符的话,报这个错:Too many characters in the rune literal
func ContainsAny
func ContainsAny(s, chars string) bool
判断字符串s是否包含字符串chars中的任一字符。
func main() {fmt.Println(strings.ContainsAny("hello", "aeiou")) // true (包含 'e'、'o')fmt.Println(strings.ContainsAny("golang", "xyz")) // false
}
func Count
func Count(s, sep string) int
返回字符串s中有几个不重复的sep子串。
func main() {fmt.Println(strings.Count("banana", "a")) // 3fmt.Println(strings.Count("hello", "l")) // 2fmt.Println(strings.Count("golang", "go")) // 1fmt.Println(strings.Count("aaaa", "")) //猜一下这个
}
func Index
func Index(s, sep string) int
子串sep在字符串s中第一次出现的位置,不存在则返回-1。
func main() {s := "hello world"fmt.Println(strings.Index(s, "world")) // 6fmt.Println(strings.Index(s, "go")) // -1 (找不到返回 -1)
}
func IndexByte
func IndexByte(s string, c byte) int
字符c在s中第一次出现的位置,不存在则返回-1。
func main() {s := "hello"fmt.Println(strings.IndexByte(s, 'e')) // 1fmt.Println(strings.IndexByte(s, 'x')) // -1
}
IndexByte适合查找**ASCII** 字符,因为byte是单字节,无法直接表示多字节的 UTF-8 字符(例如中文)。
如果你要查找英文或单字节字符,可以用这个函数,性能会比 IndexRune 略好。
func IndexRune
func IndexRune(s string, r rune) int
unicode码值r在s中第一次出现的位置,不存在则返回-1。
func main() {s := "你好,世界"fmt.Println(strings.IndexRune(s, '世')) // 9fmt.Println(strings.IndexRune(s, '界')) // 12fmt.Println(strings.IndexRune(s, '你')) // 0fmt.Println(strings.IndexRune(s, 'x')) // -1
}
对于多字节字符(如中文),IndexRune 可以正确识别并定位索引。
注意索引依旧是以字节为单位计算的。例如 “你好”:
'你'占用 3 个字节,索引从 0~2;'好'索引从 3~5。
所以'好'的开始索引是 3。
func IndexAny
func IndexAny(s, chars string) int
字符串chars中的任一utf-8码值在s中第一次出现的位置,如果不存在或者chars为空字符串则返回-1。
func main() {s := "hello"fmt.Println(strings.IndexAny(s, "jker")) // 1 (因为 'e' 出现在索引 1)fmt.Println(strings.IndexAny(s, "xyz")) // -1 (找不到)//猜一下下面的fmt.Println(strings.IndexAny(s, "loo")) fmt.Println(strings.IndexAny(s, "ollo"))fmt.Println(strings.IndexAny(s, "olloe"))
}
一次性查找多个可能的字符,只要匹配到其中一个字符,就返回首次出现的索引。
func IndexFunc
func IndexFunc(s string, f func(rune) bool) int
在字符串 s 中,从左到右遍历,每次取出一个 Unicode 字符 r 并调用 f(r) 判断是否为 true,如果是,则返回该字符在字符串中的索引。若遍历完都不为 true,返回 -1。
func main() {s := "123abc"// 找到第一个字母的位置index := strings.IndexFunc(s, func(r rune) bool {return unicode.IsLetter(r)})fmt.Println(index) // 3 ("a" 的位置)
}
f 是一个判断函数,通常会使用到 unicode 包的判断方法(如 unicode.IsLetter、unicode.IsDigit、unicode.IsSpace 等)。
适合自定义复杂的匹配条件。
func LastIndex
func LastIndex(s, sep string) int
子串sep在字符串s中最后一次出现的位置,不存在则返回-1。
func main() {s := "hello world world"fmt.Println(strings.LastIndex(s, "world")) // 12fmt.Println(strings.LastIndex(s, "go")) // -1
}
LastIndex 用于反向搜索子串的出现位置。
例如文件路径处理时,需要找最后一个斜杠 / 的位置,可以用 LastIndex 来提取文件名等。
func LastIndexAny
func LastIndexAny(s, chars string) int
在字符串 s 中查找 chars 中任意一个字符最后一次出现的位置,找不到返回 -1。
func main() {s := "hello world"fmt.Println(strings.LastIndexAny(s, "o")) //'0' 7//猜一下fmt.Println(strings.LastIndexAny(s, "hello"))
}
func LastIndexFunc
func LastIndexFunc(s string, f func(rune) bool) int
从右往左遍历字符串 s,每次取出一个 Unicode 字符 r,调用 f(r) 判断是否为 true,
若是,则返回该字符在字符串中的索引,否则 -1
func main() {s := "GoLang 123"// 找到最后一个字母index := strings.LastIndexFunc(s, func(r rune) bool {return unicode.IsLetter(r)})fmt.Println(index) // 5 ('g' 的索引)
}
func Title
func Title(s string) string
返回字符串 s 的拷贝,其中每个“单词”的首字母都被转换为 Title Case(类似首字母大写)。
- 注意:“单词” 的定义基于 Unicode 标准,会按照空格或非字母边界来拆分。
func main() {s := "her royal highness"fmt.Println(strings.Title(s)) // "Her Royal Highness"
}
func ToLower
func ToLower(s string) string
返回将所有字母都转为对应的小写版本的拷贝。
func main() {fmt.Println(strings.ToLower("Hello WORLD!")) // "hello world!"
}
func ToUpper
func ToUpper(s string) string
返回将所有字母都转为对应的大写版本的拷贝。
func main() {fmt.Println(strings.ToUpper("Hello WORLD!")) // "HELLO WORLD!"
}
func ToTitle
func ToTitle(s string) string
返回将所有字母都转为对应的标题版本的拷贝。
func main() {fmt.Println(strings.ToTitle("loud noises")) //LOUD NOISESs := "lj dz dž hello"fmt.Println(strings.ToUpper(s)) // "LJ DZ DŽ HELLO"fmt.Println(strings.ToTitle(s)) // "LJ Dz Dž HELLO"
}
区别于 strings.ToUpper:
ToTitle对普通字母的效果等同于ToUpper- 但对于某些特殊的 Unicode 字母(如
lj、dž),ToTitle会转换成Titlecase而不是Uppercase
func Repeat
func Repeat(s string, count int) string
返回一个新字符串,由 s 重复 count 次拼接而成。
func main() {fmt.Println(strings.Repeat("ha", 3)) // "hahaha"
}
func Replace
func Replace(s, old, new string, n int) string
在字符串 s 中,把 old 替换成 new,共替换 n 次,返回新字符串。若 n < 0,则替换所有出现。
package mainimport ("fmt""strings"
)func main() {s := "hello world world"fmt.Println(strings.Replace(s, "world", "Go", 1)) // "hello Go world"fmt.Println(strings.Replace(s, "world", "Go", -1)) // "hello Go Go"//ReplaceAll(s, old, new string) stringfmt.Println(strings.ReplaceAll(s, "world", "Go")) //类似于 strings.Replace(s, "world", "Go", -1)
}
func Map
func Map(mapping func(rune) rune, s string) string
对字符串 s 中的每个 Unicode 字符 r 调用 mapping(r),返回映射后的字符,并组成新字符串。
若 mapping 返回 -1,则会丢弃该字符。
func main() {s := "Hello 123"// 将所有数字去掉result := strings.Map(func(r rune) rune {if unicode.IsDigit(r) {return -1 // -1 表示丢弃这个字符}return r}, s)fmt.Println(result) // "Hello "//大小写转化result = strings.Map(func(r rune) rune {return unicode.ToUpper(r)}, s)fmt.Println(result) //HELLO 123str := "Go@lang! is #awesome$"// 替换 @, !, #, $ 为 *result = strings.Map(func(r rune) rune {switch r {case '@', '!', '#', '$':return '*'default:return r}}, str)fmt.Println(result) // "Go*lang* is *awesome*"
}
Map 适合对字符串做逐字符的自定义转换或过滤。
func Trim
func Trim(s string, cutset string) string
用于去除字符串两端的指定字符集(cutset)中的字符。
func main() {s := " !hello world! "cutset := " !"// 去除两端的空格和感叹号result := strings.Trim(s, cutset)fmt.Println(result) // "hello world"
}
func TrimSpace
func TrimSpace(s string) string
去除字符串 s 开头和结尾的空白字符(包括空格、制表符、换行等)。
func main() {s := " Hello Golang \n "fmt.Println(strings.TrimSpace(s)) // "Hello Golang"
}
func TrimFunc
func TrimFunc(s string, f func(rune) bool) string
根据自定义的判定函数(函数类型为 func(rune) bool)去除字符串两端的字符。
func main() {s := "123!Hello, Go!?!456"// 定义判定函数:如果字符不是字母,则返回 true,表示该字符需要被移除trimFunc := func(r rune) bool {return !unicode.IsLetter(r)}// 使用 TrimFunc 去除两端非字母字符result := strings.TrimFunc(s, trimFunc)fmt.Println(result) // 输出 "Hello, Go!?"//去除两端的的数字trimFunc = func(r rune) bool {return unicode.IsDigit(r)}result = strings.TrimFunc(s, trimFunc)fmt.Println(result) // 输出 "!Hello, Go!?!"}
func TrimLeft
func TrimLeft(s string, cutset string) string
从字符串 左侧(即开头)开始移除所有出现在 cutset 中的字符,直到遇到第一个不在 cutset 中的字符为止。
仅对字符串开头部分进行处理,中间和结尾的字符不会受影响。
func main() {s := "!!!Hello, World!!!"cutset := "!"// 去除左侧所有感叹号leftTrimmed := strings.TrimLeft(s, cutset)fmt.Println(leftTrimmed) // 输出: "Hello, World!!!"
}
func TrimLeftFunc
func TrimLeftFunc(s string, f func(rune) bool) string
从左侧开始,移除连续满足 f(rune) == true 的字符,直到遇到不满足的字符后停止。
func main() {s := " Hello 123"// 移除左侧空白result := strings.TrimLeftFunc(s, unicode.IsSpace)fmt.Println(result) // "Hello 123"
}
func TrimPrefix
func TrimPrefix(s, prefix string) string
若字符串 s 以 prefix 开头,则去除该前缀并返回剩余部分;否则返回 s 本身。
func main() {s := "HelloWorld"fmt.Println(strings.TrimPrefix(s, "Hello")) // "World"fmt.Println(strings.TrimPrefix(s, "Go")) // "HelloWorld" (无变化)
}
func TrimRight
func TrimRight(s string, cutset string) string
TrimRight 从字符串 右侧(即结尾)开始移除所有出现在 cutset 中的字符,直到遇到第一个不在 cutset 中的字符为止。
仅对字符串末尾部分进行处理,左侧和中间的字符不会受影响。
func main() {s := "!!!Hello, World!!!"cutset := "!"// 去除右侧所有感叹号rightTrimmed := strings.TrimRight(s, cutset)fmt.Println(rightTrimmed) // 输出: "!!!Hello, World"
}
func TrimRightFunc
func TrimRightFunc(s string, f func(rune) bool) string
从右侧开始,移除连续满足 f(rune) == true 的字符,直到遇到不满足的字符后停止。
func main() {s := "Hello 123 "result := strings.TrimRightFunc(s, unicode.IsSpace)fmt.Println(result) // "Hello 123"
}
func TrimSuffix
func TrimSuffix(s, suffix string) string
若字符串 s 以 suffix 结尾,则去除该后缀并返回剩余部分;否则返回 s 本身。
func main() {s := "HelloWorld"fmt.Println(strings.TrimSuffix(s, "World")) // "Hello"fmt.Println(strings.TrimSuffix(s, "Go")) // "HelloWorld"
}
func Fields
func Fields(s string) []string
strings.Fields 根据 Unicode 空白字符将字符串分割成多个字段。空白字符包括空格、制表符、换行符等,函数会把连续的空白字符看作一个分隔符。
func main() {s := " hello\tworld\n Go 语言 "fields := strings.Fields(s)fmt.Println(fields) // 输出: ["hello" "world" "Go" "语言"]
}
func FieldsFunc
func TrimSuffix(s, suffix string) string
strings.FieldsFunc 根据用户提供的判定函数来分割字符串。这个函数接受一个 rune 参数,并返回 true 或 false。当判定函数返回 true 时,该字符被视为分隔符。
// 定义一个函数,将所有非字母和非汉字的字符作为分隔符
func isNotLetter(r rune) bool {return !unicode.IsLetter(r) && !unicode.Is(unicode.Han, r)
}func main() {s := "hello,world!欢迎来到-Go语言."// 根据自定义规则分割字符串fields := strings.FieldsFunc(s, isNotLetter)fmt.Println(fields) // 输出: ["hello" "world" "欢迎" "来到" "Go语言"]
}
func Split
func Split(s, sep string) []string
按分隔符 sep 拆分字符串 s,返回 []string。
- 若
sep为空字符串"",则将s按单个字符拆分。 - 若
sep在s中不存在,则返回[s]。
func main() {s := "a,b,c"fmt.Println(strings.Split(s, ",")) // ["a" "b" "c"]fmt.Println(strings.Split(s, "")) //[a , b , c]
}
func SplitN
func SplitN(s, sep string, n int) []string
按分隔符 sep 拆分字符串 s,最多拆分 n 个部分,返回 []string。
- 如果
n> 0,则最多返回n个子串。 - 如果
n< 0,则拆分所有可能的子串。
func main() {s := "a,b,c,d"fmt.Println(strings.SplitN(s, ",", 2)) // ["a" "b,c,d"]fmt.Println(strings.SplitN(s, ",", -1)) //[a b c d]
}
func SplitAfter/func SplitAfterN
func SplitAfter(s, sep string) []string
func SplitAfterN(s, sep string, n int) []string
与 Split / SplitN 类似,但保留分隔符在拆分后的结果里。
func main() {s := "a,b,c"fmt.Println(strings.SplitAfter(s, ",")) // ["a," "b," "c"]fmt.Println(strings.SplitAfterN(s, ",", 2)) // ["a," "b,c"]
}
func Join
func Join(a []string, sep string) string
将 []string 用分隔符 sep 拼接成一个字符串。
func main() {words := []string{"Go", "is", "awesome"}fmt.Println(strings.Join(words, " ")) // "Go is awesome"
}
适用于把切片合并成一行文本,比如生成 CSV 行、命令行参数等。
总结:常见字符串操作的思维导图
- 判断/搜索
Contains/ContainsRune/ContainsAny:是否包含子串或字符HasPrefix/HasSuffix:是否以某前缀/后缀开头或结尾Index/LastIndex系列:查找子串或字符的第一次/最后一次出现位置Count:统计子串出现次数EqualFold:忽略大小写判断是否相等
- 大小写转换
ToLower/ToUpper/ToTitle:将字符串全部转为小写/大写/标题形式Title:对每个单词首字母做大写处理
- 替换/映射
Replace/ReplaceAll:将子串替换为新字符串Map:对每个字符做自定义转换,返回新字符串(可丢弃字符)
- 修剪(Trim)
Trim/TrimLeft/TrimRight:去除指定字符集TrimSpace:去除首尾空白字符TrimPrefix/TrimSuffix:仅去除指定前缀/后缀TrimFunc/TrimLeftFunc/TrimRightFunc:用自定义函数判断是否需要修剪
- 拆分/拼接
Split/SplitN/SplitAfter/SplitAfterN:按分隔符拆分字符串Fields/FieldsFunc:按空白或自定义条件拆分Join:将[]string用分隔符拼接为一个字符串
- 重复
Repeat:将字符串重复n次
相关文章:
go语言中的strings库
strings库 func EqualFold func EqualFold(s, t string) bool判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。 func main() {fmt.Println(strings.EqualFold("hello", "hello")) //truefmt.…...
【嵌入式硬件】三款DCDC调试笔记
关于开关电源芯片,重点关注输入电源范围、输出电流、最低压降。 1.MP9943: 以MP9943为例,输入电压范围4-36V,输出最大电流3A,最低压降为0.3V 调整FB使正常输出为5.06V 给定6V空载、5V空载、5V带2A负载的情况: 6V带2A…...
Cannot find module @rollup/rollup-win32-x64-msvc
方法1 在package.json中添加postinstall: "scripts": {"postinstall": "node -e \"const { platform } process; if (platform win32) { require(child_process).execSync(npm install rollup/rollup-win32-x64-msvc, { stdio: inherit });…...
Linux中修改文件的权限用什么命令?
一、核心语法 chmod [选项] [权限模式] 文件名二、权限模式详解 1. 数字模式(推荐使用) 通过rwx权限对应的数值组合: r(读)→ 4w(写)→ 2x(执行)→ 1无权限 → 0 组合规…...
【FPGA开发】FPGA点亮LED灯(增加按键暂停恢复/复位操作)
目录 一、VScode下载安装 1.1 官网下载 1.2 安装插件 二、LED流水灯点亮 2.1 任务说明 2.2 新建项目 2.3 创建Verilog文件添加至顶层实体 2.4 引脚分配 2.5 选择烧录器 2.6 添加烧录文件&下载 2.7 烧录结果 三、增加按键操作 3.1 按键暂停和恢复功能&…...
companion object和object 从kotlin转java分析
说明 companion object 中 companion类中的方法是普通的方法 在外部类中生成静态变量,静态companion 对象 object MyClass2 中 类中方法是普通方法 在MyClass2中生成静态变量,静态MyClass2对象, 一 companion object 使用 kotlin转java pa…...
Spring MVC 执行流程:一个请求在 Spring MVC 中是如何执行的?
当用户发送一个 HTTP 向 Spring MVC 应用,该请求在 Spring MVC 的执行流程如下: 当用户向 Spring MVC 发起一个 HTTP 请求,该请求会被 Dispatcher Servlet(前端控制器)拦截;DispatcherServlet 调用 Handler…...
三主热备架构
1.要求 角色主机名软件IP地址用户client192.168.72.90keepalivedvip192.168.72.100masterserverAkeepalived, nginx192.168.72.30backupserverBkeepalived, nginx192.168.72.31backupserverCkeepalived, nginx192.168.72.32webtomcat1tomcat192.168.72.41webtomcat2tomcat192.1…...
HTML 表单处理进阶:验证与提交机制的学习心得与进度(二)
步步为营:表单提交机制全面解析 提交方式详解 GET 与 POST 对比 在 HTML 表单提交中,GET 和 POST 是最为常用的两种提交方式,它们在诸多方面存在显著差异。 安全性:GET 方式将表单数据附加在 URL 的查询字符串中,数…...
JavaScript | 爬虫逆向 | 语法基础| 01
一、摘要 实践是最好的导师 二、环境配置 在开始之前,需要确保你的计算机上已经安装了 Node.js。Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许你在服务器端运行 JavaScript 代码。 1. 下载 安装地址:https://nodejs.org…...
python解决多个矢量点图层合并为一个点图层
1、解决矢量点图层的合并 2、解决多个点图层分别合并为不同图层(一个文件夹下所有点图层合并为一个图层,以下代码为两个文件夹,分别合并为两个总的图层) import geopandas as gpd import os import pandas as pddef merge_shapef…...
VL开源模型实现文本生成图片
一、 基础知识 根据描述生成图片的视觉-语言模型(Vision-Language Models, VL 模型)是近年来多模态生成领域的热点研究方向。这些模型能够根据自然语言描述生成高质量的图像,广泛应用于艺术创作、设计辅助、虚拟场景构建等领域。 1 根据描述…...
字节跳动实习生主导开发强化学习算法,助力大语言模型性能突破
目录 禹棋赢的背景与成就 主要成就 DAPO算法的技术细节 算法优势 禹棋赢的研究历程 关键时间节点 字节跳动的“Top Seed人才计划” 计划特点 小编总结 在大模型时代,经验不再是唯一的衡量标准,好奇心、执行力和对新技术的敏锐洞察力成为推动技术…...
九、JavaScript作用域、预解析
一、JavaScript作用域 1.JavaScript作用域 ①代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性更重要的是减少命名冲突 ②js的作用域(es6)之前:全局作用域 局部作用域 ③全局作用域:整…...
前后端+数据库的项目实战:hbu迎新网-较复杂(下)javaweb
目录 十一、实现对内容的富文本编辑(换行、图片颜色等等样式) (1)下载富文本编辑器,引入资源 (2)将原项目的内容部分替换为富文本编辑器 1、替换添加页面 2、替换修改页面(和添…...
Java-模块二-2
整数类型 byte:在 Java 中占用8位(1字节),因此它的取值范围是从 -128 到 127。这是最小的整数类型,适合用于节省空间的情况。 short:这种类型的大小是16位(2字节),允许的…...
Redis、Memcached应用场景对比
环境 Redis官方网站: Redis - The Real-time Data Platform Redis社区版本下载地址:Install Redis | Docs Memcached官方网站:memcached - a distributed memory object caching system Memcached下载地址:memcached - a dis…...
【单片机通信技术应用——学习笔记三】液晶屏显示技术,取模软件的应用
一、液晶显示技术简介 1.RGB信号线 RGB是一种色彩模式,是工业界的一种颜色标准,是通过红(R)、绿(G)、蓝(B)三个颜色通道的变化,以及它们相互之间的叠加来得到各式各样的…...
MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)上篇
文章目录 前言一、窗口函数(Window Functions)1.1 窗口函数概念1.2 常见的窗口函数 二、公用表表达式(Common Table Expressions, CTEs)2.1 公用表表达式的概念2.2 常见的公用表表达式 三、JSON增强3.1 JSON增强的概念3.2 常见的J…...
MySQL 调优:查询慢除了索引还能因为什么?
文章目录 情况一:连接数过小情况二:Buffer Pool 太小 MySQL 查询慢除了索引还能因为什么?MySQL 查询慢,我们一般也会想到是因为索引,但除了索引还有哪些原因会导致数据库查询变慢呢? 以下以 MySQL 中一条 S…...
Java实习生面试题(2025.3.23 be)
一、v-if与v-show的区别 v-show 和 v-if 都是 Vue 中的条件渲染指令,它们的主要区别在于渲染策略:v-if 会根据条件决定是否编译元素,而 v-show 则始终编译元素,只是通过改变 CSS 的 display 属性来控制显示与隐藏。 二、mybatis-…...
如何在百度搜索上删除与自己名字相关的资料
个人信息的网络足迹如同一张无形的网,将我们与世界的每一个角落紧密相连。然而,当某些与自己名字相关的资料不再希望被公众轻易检索到时,如何在百度搜索中有效“隐身”,成为了一个亟待解决的问题。面对复杂多变的网络环境…...
【C语言】C语言使用随机数srand,rand
C语言使用随机数srand,rand 可直接编译使用: #include <stdio.h> #include <time.h> #include <stdlib.h> #include <unistd.h>/* c语言提供的跟随机数有关的函数:int rand(void);返回值:产生的随机数void srand(unsiqned int seed);参数…...
为容器指定固定IP地址
文章目录 为容器指定固定IP地址可以通过以下步骤实现,适用于Docker环境:**方法一:使用Docker自定义桥接网络****方法二:Docker Compose配置****关键注意事项** 为容器指定固定IP地址可以通过以下步骤实现,适用于Docker…...
kube-score K8S Yaml静态代码分析工具详解
kube-score 是一款专注于 Kubernetes 配置文件的静态代码分析工具,旨在通过自动化检查帮助用户识别资源配置中的潜在问题,并遵循最佳实践以提升集群的安全性、稳定性和性能。以下是其核心功能、使用方法和应用场景的详细解析: 一、核心功能与…...
Spring Boot 整合 Elasticsearch 实践:从入门到上手
引言 Elasticsearch 是一个开源的分布式搜索引擎,广泛用于日志分析、搜索引擎、数据分析等场景。本文将带你通过一步步的教程,在 Spring Boot 项目中整合 Elasticsearch,轻松实现数据存储与查询。 1. 创建 Spring Boot 项目 首先ÿ…...
使用外部事件检测接入 CDH 大数据管理平台告警
CDH 大数据管理平台 CDH(Cloudera Distribution Hadoop)是一个企业级的大数据平台,由 Cloudera 公司提供,它包含了 Apache Hadoop 生态系统中的多种开源组件,并对其进行了优化和集成,以支持大规模数据存储…...
RabbitMQ八股文
RabbitMQ RabbitMQ 核心概念与组件1. RabbitMQ 核心组件及其作用1.1 生产者(Producer)1.2 交换机(Exchange)1.3 队列(Queue)1.4 绑定(Binding)1.5 消费者(Consumer&#…...
MongoDB(五) - Studio 3T 下载与安装教程
文章目录 前言一、Studio 3T 简介二、下载及安装1. 下载2. 安装 三、使用Studio 3T连接MongoDB 前言 本文旨在全面且深入地为你介绍 Studio 3T。从其丰富的功能特性、跨平台使用的便捷性,到详细的下载安装步骤,以及关键的连接 MongoDB 操作,…...
2025高频面试算法总结篇【链表堆栈队列】
文章目录 直接刷题链接直达反转链表环形链表判断一个序列是否为合理的出栈顺序最长有效括号旋转链表复杂链表的复制约瑟夫环问题滑动窗口最大值 直接刷题链接直达 反转链表 206. 反转链表 环形链表 141. 环形链表142. 环形链表 II 判断一个序列是否为合理的出栈顺序 946.…...
