【第6章 字符串】Python 字符串常用操作完全教程(含代码演示)

news/2025/11/17 22:23:47/文章来源:https://www.cnblogs.com/wangya216/p/19234654

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Python 字符串常用操作完全教程(含代码演示)\n",
"> 基于《Python字符串常用操作速查表》v1.0 编写,配套可运行代码示例,适合边学边练\n",
"\n",
"📌 核心须知:\n",
"- 字符串(str)是不可变类型:所有修改操作均返回新字符串,原字符串不变\n",
"- 时间复杂度说明:O(1)=常数级(快),O(n)=线性级(随长度增长),O(k)=取决于参数长度\n",
"- 通用警告:避免索引越界、空字符串无效访问、编码字符集不匹配"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 一、字符串核心特性与字符串比大小\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 1. 不可变性演示(修改操作返回新串)\n",
"s = "hello"\n",
"s_upper = s.upper() # 转为大写,返回新串\n",
"print("\n原字符串:", s) # 原串不变,不可变性\n",
"print("新字符串:", s_upper) # 新串生效"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 2. 长度获取(O(1) 高效)\n",
"s1 = "hello"\n",
"print("\n字符串长度:", len(s1)) # 内置函数 len()\n",
"s2=""\n",
"print("空串长度:", len(s2))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 3. 字母大小写比较(大写字母编码 < 小写字母编码)\n",
"print("Apple" < "banana") # True('A'=65 < 'b'=98,首字符已决定结果)\n",
"print("abc" > "abd") # False(前2个字符相同,第3个 'c'=99 < 'd'=100)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 4. 数字与字母比较(数字编码 < 字母编码)\n",
"print("123" < "abc") # True('1'=49 < 'a'=97)\n",
"print("999" > "a") # False('9'=57 < 'a'=97)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"True\n"
]
}
],
"source": [
"# 5. 长度不同的情况(前N字符相同,长度长的更大)\n",
"print("hello" < "helloworld") # True(前5个字符相同,后者更长)\n",
"print("abc" > "ab") # True(前2个字符相同,前者更长)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 6. 中文比较(按 Unicode 编码顺序)\n",
"print("北京" < "上海") # True('北'=21271 < '上'=19978?不,实际运行:'北'=21271,'上'=19978 → 21271>19978,所以输出 False)\n",
"# 验证中文编码\n",
"print(ord('北')) # 21271\n",
"print(ord('上')) # 19978\n",
"print("北京" > "上海") # True(首字符 '北' 编码更大)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 7. 链式比较\n",
"print("a" < "b" < "c") # True(等价于 ("a"<"b") and ("b"<"c"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 二、字符串核心操作(含代码演示)\n",
"按「增/删/改/查/进阶」分类,对应速查表核心操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### (一)增/拼接操作"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 1. 直接拼接(+ 运算符)\n",
"s1 = "Hello"\n",
"s2 = "World"\n",
"s_concat = s1 + " " + s2\n",
"print("直接拼接:", s_concat) # 输出:Hello World\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 2. 批量拼接(join() 高效,推荐!)\n",
"str_list = ["Python", "Java", "C++"]\n",
"s_join = "-".join(str_list) # 用 "-" 分隔\n",
"s_join_empty = "".join(str_list) # 无分隔符拼接\n",
"print("\njoin() 批量拼接:", s_join)\n",
"print("无分隔符拼接:", s_join_empty)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 3. 重复拼接(* 运算符)\n",
"s_repeat = "ab" * 3\n",
"print("\n重复拼接:", s_repeat) # 输出:ababab\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 4. 格式化拼接(3种方式)\n",
"name = "张三"\n",
"age = 25\n",
"score = 98.5\n",
"\n",
"# f-string(3.6+ 推荐,简洁高效)\n",
"s_f = f"姓名:{name},年龄:{age},分数:{score:.1f}" # :.1f 保留1位小数\n",
"# format()(兼容所有版本)\n",
"s_format = "姓名:{},年龄:{},分数:{:.2f}".format(name, age, score)\n",
"# % 格式化(旧式,兼容旧代码)\n",
"s_percent = "姓名:%s,年龄:%d,分数:%.2f" % (name, age, score)\n",
"\n",
"print("\nf-string:", s_f)\n",
"print("format():", s_format)\n",
"print("% 格式化:", s_percent)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### (二)删/截取操作"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 1. 切片截取(左闭右开,支持步长)\n",
"s = "Python字符串操作"\n",
"# 基础切片:[start🔚step]\n",
"print("原字符串:", s)\n",
"print("截取前6个字符:", s[:6]) # 从开头到索引5(Python)\n",
"print("截取第7-10个字符:", s[6:10]) # 索引6到9(字符串)\n",
"print("反转字符串:", s[::-1]) # step=-1 反转\n",
"print("隔1个字符截取:", s[::2]) # 0,2,4...索引\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 2. 删除首尾字符(strip/lstrip/rstrip)\n",
"s_strip = " ,Python! "\n",
"print("\n原字符串:", repr(s_strip)) # repr() 显示空白字符\n",
"print("删除首尾空格和逗号:", s_strip.strip(" ,")) # 删除指定字符\n",
"print("仅删开头空格:", s_strip.lstrip())\n",
"print("仅删结尾感叹号和空格:", s_strip.rstrip(" !"))\n",
"\n",
"# 例1:移除字符串两端的多种标点符号\n",
"txt = "!!!Hello, World!!!"\n",
"cleaned = txt.strip("!.,")\n",
"print(cleaned) # 输出: "Hello, World"\n",
"\n",
"# 例2:移除字符串两端的括号和引号\n",
"txt = '''(["Hello"])'''\n",
"cleaned = txt.strip('''()"[]''')\n",
"print(cleaned) # 输出: "Hello"\n",
"\n",
"# 例3:移除字符串两端的数字和符号\n",
"txt = "123-ABC-456"\n",
"cleaned = txt.strip("0123456789-")\n",
"print(cleaned) # 输出: "ABC"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 3. 过滤字符(推导式+join())\n",
"s_filter = "Python123字符串456"\n",
"# 保留字母\n",
"s_alpha = ''.join([c for c in s_filter if c.isalpha()])\n",
"# 保留数字\n",
"s_digit = ''.join([c for c in s_filter if c.isdigit()])\n",
"print("\n保留字母:", s_alpha)\n",
"print("保留数字:", s_digit)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 4. 替换删除(replace() 替换为空串)\n",
"s_replace = "abacadae"\n",
"s_del = s_replace.replace("a", "", 2) # 删除前2个"a"\n",
"print("\n删除前2个'a':", s_del) # 输出:bcadae"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### (三)改/转换操作"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 1. 大小写转换\n",
"s_case = "Python 字符串 OPERATIONS"\n",
"print("原字符串:", s_case)\n",
"print("全大写:", s_case.upper())\n",
"print("全小写:", s_case.lower())\n",
"print("标题格式(首字母大写):", s_case.title())\n",
"print("字符串首字母大写:", s_case.capitalize())\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 2. 字符替换(replace())\n",
"s_replace = "I love Python, Python is easy!"\n",
"s_new = s_replace.replace("Python", "Java", 1) # 仅替换第1个\n",
"print("\n替换后:", s_new)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 3. 编码与解码\n",
"s_encode = "中文编码测试"\n",
"# 编码为 bytes\n",
"b_utf8 = s_encode.encode("utf-8")\n",
"b_gbk = s_encode.encode("gbk")\n",
"print("\nUTF-8编码:", b_utf8)\n",
"print("GBK编码:", b_gbk)\n",
"# 解码为字符串\n",
"s_decode_utf8 = b_utf8.decode("utf-8")\n",
"print("UTF-8解码:", s_decode_utf8)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 4. 对齐填充\n",
"s_align = "Python"\n",
"print("\n左对齐(10位,'-'填充):", s_align.ljust(10, "-"))\n",
"print("右对齐(10位,''填充):", s_align.rjust(10, ""))\n",
"print("居中对齐(10位,'='填充):", s_align.center(10, "="))\n",
"print("数字左补0(5位):", "123".zfill(5)) # 适合数字字符串"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### (四)查/判断操作"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 1. 索引访问(O(1) 高效)\n",
"s = "Python"\n",
"print("第1个字符(索引0):", s[0])\n",
"print("最后1个字符(负索引-1):", s[-1])\n",
"print("第3-5个字符:", s[2:5]) # 索引2-4(左闭右开)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 2. 查找子串(find/index)\n",
"s_find = "Python is powerful, Python is easy"\n",
"print("\n'Python'首次出现索引:", s_find.find("Python"))\n",
"print("'Python'从索引10开始查找:", s_find.find("Python", 10))\n",
"print("'Java'未找到返回-1:", s_find.find("Java"))\n",
"\n",
"# index() 未找到会报错,适合确定子串存在的场景\n",
"# print(s_find.index("Java")) # 抛出 ValueError\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 3. 统计子串次数(count())\n",
"print("'Python'出现次数:", s_find.count("Python"))\n",
"print("'is'从索引5开始统计:", s_find.count("is", 5))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 4. 包含判断(in/not in)\n",
"print("\n是否包含'powerful':", "powerful" in s_find)\n",
"print("是否包含'Java':", "Java" not in s_find)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 5. 开头/结尾判断(startswith/endswith)\n",
"s_prefix = "https://www.python.org"\n",
"print("是否以'https'开头:", s_prefix.startswith("https"))\n",
"print("是否以'.org'结尾:", s_prefix.endswith(".org"))\n",
"# 支持多个前缀/后缀(元组形式)\n",
"print("是否以'http'或'https'开头:", s_prefix.startswith(("http", "https")))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 6. 字符类型判断\n",
"s_type = "Python123 测试"\n",
"print("\n是否全为字母:", s_type.isalpha())\n",
"print("是否全为数字:", "123456".isdigit())\n",
"print("是否为字母或数字:", "Python123".isalnum())\n",
"print("是否为空白字符:", " \t\n".isspace())\n",
"print("是否为标题格式:", "Python Is Easy".istitle())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### (五)进阶操作"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 1. 分割字符串(split/splitlines)\n",
"s_split = "Python,Java,C++,Go"\n",
"# 按逗号分割,默认分割所有\n",
"print("按逗号分割:", s_split.split(","))\n",
"# 最多分割2次\n",
"print("最多分割2次:", s_split.split(",", maxsplit=2))\n",
"\n",
"# 按换行符分割(支持 \n/\r/\r\n)\n",
"s_lines = "第一行\n第二行\r第三行\r\n第四行"\n",
"print("\n按换行符分割:", s_lines.splitlines())\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 2. partition 分割(返回三元组)\n",
"s_part = "name:张三,age:25"\n",
"print("\n按':'分割(首次出现):", s_part.partition("😊)\n",
"print("按','分割(从右首次出现):", s_part.rpartition(","))\n",
"\n",
"# 3. 字符翻译(translate + maketrans)\n",
"# 创建映射表:a→x, b→y, c→z\n",
"trans_table = str.maketrans({"a": "x", "b": "y", "c": "z"})\n",
"s_trans = "abc123cba"\n",
"print("\n字符翻译后:", s_trans.translate(trans_table))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 4. 遍历字符(for 循环/enumerate)\n",
"s_iter = "Python"\n",
"print("\n遍历字符:")\n",
"for c in s_iter:\n",
" print(c, end=" ")\n",
"\n",
"# 枚举遍历(索引+字符)\n",
"print("\n\n枚举遍历(索引起始为1):")\n",
"for i, c in enumerate(s_iter, start=1):\n",
" print(f"第{i}个字符:{c}")\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 5. 字符去重(保留顺序)\n",
"s_duplicate = "abacadaeaf"\n",
"# 利用字典3.7+有序性去重(键唯一且保留插入顺序)\n",
"s_unique = ''.join(dict.fromkeys(s_duplicate))\n",
"print("字符去重(保留顺序):", s_unique) # 输出:abcedf\n",
"\n",
"# 6. 制表符替换(expandtabs)\n",
"s_tab = "Name\tAge\tCity\tScore"\n",
"print("\n原字符串(含制表符):", s_tab)\n",
"print("制表符替换为4个空格:", s_tab.expandtabs(4))\n",
"print("制表符替换为8个空格(默认):", s_tab.expandtabs())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 三、实战案例(综合应用)\n",
"结合多个字符串操作,解决实际开发中的常见问题"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 案例1:用户输入格式化(去除无效字符+统一格式)\n",
"def format_user_input(input_str):\n",
" """\n",
" 功能:处理用户输入,去除首尾空格、特殊字符,首字母大写\n",
" 参数:input_str - 用户原始输入\n",
" 返回:格式化后的字符串\n",
" """\n",
" # 1. 去除首尾空格和标点符号\n",
" cleaned = input_str.strip(""" !@#$%^&*()_+-=[]{{}}|;':",./<>?)""")\n",
" # 2. 首字母大写,其余小写(统一格式)\n",
" formatted = cleaned.capitalize()\n",
" return formatted\n",
"\n",
"# 测试案例1\n",
"user_inputs = [" zhang san! ", "LI SI@", " wang wu123 ", ""]\n",
"print("用户输入格式化结果:")\n",
"for idx, input_str in enumerate(user_inputs, 1):\n",
" result = format_user_input(input_str)\n",
" print(f"{idx}. 原始输入:{repr(input_str)} → 格式化后:{repr(result)}")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 四、核心知识点总结\n",
"### 1. 不可变类型核心原则\n",
"- 所有修改操作(upper()replace()strip() 等)均返回新字符串,原字符串不变\n",
"- 示例:s = \"hello\"s.upper() 生成新串 \"HELLO\"s 仍为 \"hello\"\n",
"- 优化建议:避免频繁用 + 拼接字符串(多次创建新对象),优先用 str.join()\n",
"\n",
"### 2. 高效操作推荐\n",
"| 操作场景 | 推荐方法 | 时间复杂度 | 避免用法 |\n",
"|----------|----------|------------|----------|\n",
"| 批量拼接 | str.join(iterable) | O(k) | 多次 s1 + s2 + s3 |\n",
"| 索引访问 | s[i] / s[-1] | O(1) | 转换为列表后访问(多此一举) |\n",
"| 空串判断 | if not s | O(1) | if len(s) == 0(等价但繁琐) |\n",
"| 多字符替换 | str.translate() | O(n) | 多次 str.replace() |\n",
"\n",
"### 3. 常见坑点提醒\n",
"- 索引越界:字符串索引范围 0 ≤ i < len(s),负索引 -len(s) ≤ i ≤ -1,超出会抛 IndexError\n",
"- 编码问题:encode()decode() 字符集需一致(如均用 UTF-8),否则抛 UnicodeDecodeError\n",
"- strip() 误区:s.strip(\"ab\") 是删除首尾所有 'a''b',而非删除 \"ab\" 子串\n",
"- 字符类型判断:isdigit() 仅匹配数字字符(0-9/全角数字),不包含小数点和正负号(如 \"123.45\" 返回 False)\n",
"\n",
"### 4. 实用工具推荐\n",
"- 正则表达式:复杂文本提取(如手机号、邮箱)用 re 模块(需额外学习)\n",
"- collections.Counter:更简洁的字符计数(from collections import Counter; Counter(s))\n",
"- textwrap 模块:文本换行、缩进格式化(适合长文本处理)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 五、课后练习(巩固提升)\n",
"1. 编写函数,判断一个字符串是否是回文(正读和反读一致,如 "abcba"、"12321")\n",
"2. 提取字符串中所有的邮箱地址(邮箱规则:包含 @ 和 .,如 "test@example.com")\n",
"3. 将字符串 "hello world python is easy" 转换为 "Hello World Python Is Easy"(每个单词首字母大写)\n",
"4. 统计字符串中出现次数最多的字符(如果有多个,返回所有最多的字符)\n",
"\n",
"💡 提示:可结合本教程中的操作方法,尝试独立实现;遇到问题可查看代码示例或查阅速查表。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.9"
}
},
"nbformat": 4,
"nbformat_minor": 4
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/968362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DAG-有向无环图-拓扑排序

1. 场景 通过当前节点与依赖节点列表描述一个有向无环图DAG节点依赖问题,适合流程图中节点依赖关系的定义,适合存在明确的依赖关系并且按依赖顺序执行的领域项目管理与任务调度 工作流与审批流程2. 数据描叙name:描…

MySQL EXPLAIN中的key_len:精准掌握索引使用情况

深入解析MySQL执行计划中最关键的指标之一,助你快速定位索引优化点,提升查询性能!同时介绍了key_len计算的核心规则。MySQL系列文章 深入解析MySQL执行计划中最关键的指标之一,助你快速定位索引优化点,提升查询性…

1090 : 分解因数 25-11-17

|DFS|递归| 本题的dfs特点在于搜索的空间是动态的,因此需要找到可以利用到限制下一步递归的条件来进行空 间范围的缩小与框定。本题利用的是分解的最小因数,可以对下一步的遍历框定范围 #include<iostream> #i…

NOIP 模拟赛 9

NOIP 模拟赛总结 NOIP 模拟赛 9调了一整场的 T2,样例全过!只有 40 pts。QxQT1 卡门连续两场 T1 放数据结构了欸数据结构题,直接分块就行。 赛时没算时间复杂度,导致打了个暴力交上去以为是正解。 赛后半小时改完,…

Sora 2 Cameo多角色上传+Remix二创功能API接入教程,史低0.08/条

​ 你还记得Sora2推出的Cameo和Remix功能吗? Cameo(客串)是 Sora 2 推出的官方真人出镜功能,允许用户通过录制验证视频,将自己的面部、体型、声音特征提取并融合到 AI 生成的任意场景中,实现"真人演员+虚拟场景…

info linux

当然可以!你提到的 + #引号 + info linux + #引号 + 是一个在 Linux 系统中常用的命令,用于查看 Linux 内核的文档。它属于 info 命令集,是 man 命令的替代品,主要用于查看系统级的文档。 一、info 命令简介…

AWS云服务深度集成

第一部分:素材管理系统 - 分片上传与断点续传架构 在海量素材上传场景下,网络不稳定、文件巨大(数GB的视频/设计稿)是常态。直接简单上传会导致频繁失败且难以恢复。我们基于 AWS S3 Pre-signed URLs 和 Multipart…

httpd linux 启动

在 Linux 系统中,httpd 通常指的是 Apache HTTP Server,它是一个常用的 Web 服务器软件。如果你想要启动 Apache HTTP Server,可以使用以下几种常见方法:方法一:使用 systemd(适用于大多数现代 Linux 发行版) s…

浅谈 Manacher

问题引入 给定一个长度为 \(n\) 的字符串 \(s\),保证 \(s\) 只由小写字母组成,要求计算出 \(s\) 中最长的连续回文子串的长度。 乍一看,诶我会 \(O(n^3)\) 做法!枚举左右端点然后暴力判断就行。 但是这也太慢了吧!…

第28天(简单题中等题 二分查找)

打卡第二十八天 1道简单题+2道中等题题目:思路:双指针+二分查找 代码: class Solution { public:vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) {const int n = (int)arr.size();//…

基于MIMO系统的SCMA稀疏码多址接入和MPA消息传递算法matlab仿真

1.算法运行效果图预览2.算法运行软件版本 matlab2022a/matlab2024b 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)................................................................r = de2bi(X, l…

Node.js服务稳定性保障:从热更新到高可用体系

好的,这些问题深入到了Node.js后端架构的核心。下面我将为您系统地拆解这些挑战和我们的解决方案。Node.js服务稳定性保障:从热更新到高可用体系 第一部分:渲染服务的热更新原理与高并发保障 我们的官网/商城渲染服…

一次尝试,3个小时90元的主机游玩和F1电影

一次尝试,3个小时90元的主机游玩和F1电影2025年11月16日 星期日 早上去中影烽禾影城泛悦奥莱店(马房山店),花了90块钱,在PS5上面玩了将近三个小时的风之旅人,比我想象之中的还要可怕,我的忘性大的吓人,除了那个红…

NOIP 模拟赛 8

呜呜呜,直接叫 T1 模拟赛吧。NOIP 模拟赛总结 NOIP 模拟赛 8呜呜呜,直接叫 T1 模拟赛吧。T1 王哥与荷塘(fish) 发现要求的是曼哈顿距离的最远点对。 根据 HZ战神 王战普老师的教导可知。 任意两点的曼哈顿距离可以…

静态路由的配置

11.17配置静态路由实验1、拓扑结构:两台PC机,两台交换机Router 2、连线:PC与Router交叉线连接FastEthernet0/0 Router之间DCE串口线连接Serial2/0口 3、打开接口 Router0和Router1 enable //进入特权模式 config…

读书笔记:“外部表”的进阶使用,它主要解决了三个核心问题:如何切换文件、多用户怎么办,以及一个非常酷的玩法——把系统命令变成表。

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

[CF 2166D] Marble Council

思路 肯定是在值域上处理, 类似今年 S T4 的将与未扫描部分相关的部分单独统计 定义 \(c_x\) 为 \(a_i = x\) 的数量 考虑 \(f_{i, j, k}\) 表示考虑到数字 \(i\), 当前要求容量到 \(j\), 当前容量为 \(k\) 的方案数 \…

DP 复习

背包 DP 背包 dp 解决形如用一些物品,有一些限制,装满这个容量的方案/最小代价。 四种板子01背包,循环从高到低 完全背包,循环从低到高 多重背包,二进制分组(低到高)然后01背包 分组背包,每组在最内层,外层跑…

一段话 UOJ

UOJ 比赛胡做UOJ Test Round #1 开始了。 vfk的数据 除了编号的前后缀都一样,长度为第一关键字,字典序为第二关键字排序即可。 这样不需要进行字符串的处理。 record pyx的难题 假定 \(p_x=-1\) 是从 \(S\) 开始考虑…

PG系列:在 ​​psql​​ 客户端中定义参数与动态赋值

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。作为一名长期…