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

【Vim Masterclass 笔记16】S07L32 + L33:同步练习09 —— 掌握 Vim 宏操作的六个典型案例(含点评课内容)

文章目录

  • S07L32 Exercise 09 - Macros
    • 1 训练目标
    • 2 操作指令
      • 2.1. 打开 macros-practice.txt 文件
      • 2.2. 练习1:将旧版 Python 代码转换为新版写法
      • 2.3. 练习2:根据列表内容批量创建 Shell 脚本
      • 2.4. 练习3:对电话号码作格式化处理
      • 2.5. 练习4:从日志文件中提取重要数据
      • 2.6. 练习5:将多行数据压缩为一行
      • 2.7. 练习6:从 HTML 中提取数据
    • 3 退出 Vim
  • S07L33 Exercise 09 - Macros - Walkthrough

写在前面
Vim 宏这部分知识点不仅讲解起来篇幅最长,同步练习环节的作业量也是全套课程中最多的。宏在 Vim 操作中不可撼动的核心地位由此可见一般。虽然今天有事耽搁了笔记整理,到家后的第一件事仍然是一步一个脚印地先在本地做一遍所有习题,然后再对照讲义完成翻译。这个过程不可能很快,但也是掌握 Vim 宏相关要点不可或缺的重要环节。我用自己的亲身经历奉劝各位,切忌急于求成,尤其不要在该筑牢基础的地方吝惜自己的时间和精力。要相信水滴石穿的力量,相信玉汝于成,功不唐捐。同步练习中列举的几个典型案例值得大家反复琢磨与演练。

S07L32 Exercise 09 - Macros


1 训练目标

练习 Vim 中的宏(macro)的创建与使用。1

2 操作指令

2.1. 打开 macros-practice.txt 文件

Vim 打开源码包内的练习文件 macros-practice.txt(默认解压到 Downloads 文件夹下):

cd Downloads
cd vimclass
vim macros-practice.txt

2.2. 练习1:将旧版 Python 代码转换为新版写法

给定一组旧版 Python 代码(v2.6 及以前版本),试将其改为新版写法(v3.0 即以上版本):将 print 语句改为 print() 函数。也就是说,需要对以下各行作如下处理——

由修改前的:

print "Macros are very fun!"

统一改为:

print("Macros are very fun!")

下面用 Vim 宏来实现。顺便提一下,本练习无需了解 Python 语法,本例旨在提供一个实际案例来练习 Vim 宏的相关操作。

其中一种参考方案实现如下:

  • 光标定位到这一行:print "Macros are very fun!"
  • QA 启动宏录制并将其存入寄存器 "a
  • 0 对光标作标准化处理,统一定位到行首;
  • FSpace 将光标定位到下一处空格位置;
  • R( 将当前空格替换为左小括号;
  • ShiftA) 在行尾添加一个右小括号,再按 Escape 切回正常模式;
  • J 将光标下移一行,以便 Vim 宏快速重复操作;
  • 最后,按 Q 停止宏录制。

要查看寄存器 "a 中的录制内容,可输入命令 :reg a + Enter。内容如下:

"a 0f r(A)^[j

键入 @A 即可对下一行运行录好的宏;若要重复执行上一次宏操作,按 @@ 即可。余下各行均可使用 @@ 重复宏的运行。

注意

上述实现仅供参考,并非唯一的解决方案。例如将 FSpace 改为 T",也能将光标定位到同一处空格。只要能实现最终的效果就行。


2.3. 练习2:根据列表内容批量创建 Shell 脚本

给定一个用户列表,要求对列表中的每个用户分别执行一组相同的操作。为此,可以将某个用户的一系列操作录制为一个 Vim 宏,然后对其余用户执行这个宏即可。最终目标是将如下这段文本:

jason
sophia
jack
emma
ava

统一改为以下形式:

passwd -l jason && echo jason >> locked_users.txt
passwd -l sophia && echo sophia >> locked_users.txt
passwd -l jack && echo jack >> locked_users.txt
passwd -l emma && echo emma >> locked_users.txt
passwd -l ava && echo ava >> locked_users.txt

这组命令用户锁定 Linux 系统中的指定用户帐号,并将其帐号名追加到一个 locked_users.txt 文件中。命令的含义无关紧要,关键在于 Vim 的用法。本练习旨在提供一个实际的应用场景。

其中一种参考方案实现如下:

  • 将光标定位到 jason 这一行;
  • QB 启动宏录制,并将其存入寄存器 "b
  • YAW 将用户名复制(yank)到默认寄存器;
  • ShiftI 从行首进入插入模式,并输入 passwd -l + Escape
  • ShiftA 从行尾进入插入模式,并输入 Space + && + Space + echo + Space + Escape 返回正常模式;
  • 接着,按 P 粘贴未命名寄存器(unnamed register)中的内容;
  • A,并输入 Space + >> + Space + locked_users.txt,再按 Escape 切回正常模式;
  • J 将光标下移一行,以便快速重复宏操作;
  • 最后,按 Q 停止宏录制。

要查看寄存器 "b 中的录制内容,可输入命令 :reg b + Enter。内容如下:

"b yawIpasswd -l ^[A && echo ^[pa >> locked_users.txt^[j

对下一行执行宏操作,输入 @B 即可;后面三个类似的文本行,则可以用 3@B 轻松实现批量修改。


2.4. 练习3:对电话号码作格式化处理

接下来,创建一个 Vim 宏并存入寄存器 "p,实现将如下所示的电话号码:

2798265253

统一转换为符合美国人书写习惯的格式:

(279) 826-5253

其中一种参考方案实现如下:

  • 将光标定位到 2798265253 这一行(即待批量处理的第一行);
  • QP 启动宏录制,并将其存入寄存器 "p
  • ShiftI 从行首进入插入模式;
  • 输入左小括号 (,并按 Escape 回到正常模式;
  • 键入三次 L,让光标定位到 9 处;
  • A 在光标后添加文字,输入 )Space 后,按 Escape 返回正常模式。
  • 按三次 L 将光标移至 6 的下方;
  • A- 插入一个连字符,再按 Escape 回到正常模式;
  • J 将光标下移一行,以便快速重复宏操作;
  • 最后,按 Q 停止宏录制。

要查看寄存器 "p 中的录制内容,可输入命令 :reg p + Enter。内容如下:

"p I(^[llla) ^[llla-^[j

鉴于要处理的电话号码很多,文本行超出了屏幕,难以轻易获知需要重置执行多少次宏;此外,单纯使用 @@ 来重复执行也很费时间。此时应该使用指定具体范围来应用宏操作。先用 :set nu 开启行号,再将光标定位到第 25 行;然后按 Ctrl + F 向下翻页,确定最后一个电话号码的行号为 73。

接着输入 :25,73 normal @p + Enter,通过 normal 命令指定具体范围并批量运行宏操作。之后再通过 Ctrl + B 上翻查看宏的执行情况。


2.5. 练习4:从日志文件中提取重要数据

下一组练习取材自 Linux 服务器的系统日志。这些内容是本地 Linux 防火墙阻止连接请求的日志记录。我们的目标是分别提取出时间戳、尝试连接的源 IP 地址以及目标端口。

其中,SRC= 字样后的内容即为源 IP 地址,例如:SRC=190.18.193.152

目标端口则位于 DPT= 字样后,例如:DPT=23

也就是利用 Vim 宏(假设录制到寄存器 "l)将下面这样的日志内容:

Jan 13 09:57:01 www1 kernel: [3947771.808744] [BLOCK] IN=eth0 OUT= MAC=e6:e9:2d:04:b6:95:3c:8a:b0:0d:6f:f0:08:00 SRC=190.18.193.152 DST=2.5.9.1 LEN=40 TOS=0x02 PREC=0x00 TTL=51 ID=25120 PROTO=TCP SPT=12502 DPT=23 WINDOW=4078 RES=0x00 SYN URGP=0

批量精简为如下版本,并以逗号分隔:

Jan 13 09:57:01,190.188.193.152,23

其中一种参考方案实现如下:

  • 将光标定位到以 Jan 13 09:57:01 开头的这一行;
  • QL 启动宏录制,并将其存入寄存器 "l
  • 0 对光标作标准化处理,统一定位到行首;
  • TW 将光标定位到时间戳后面的空格为止;
  • 输入 dtS 删除当前光标到 SRC= 之间的所有内容;
  • DW 删除 SRC
  • R,= 替换为逗号 ,
  • FSpace 将光标定位到 IP 地址后的空格处;
  • 输入 d/DPT + Enter 删除当前光标与 DPT= 之间的文字内容;
  • DW 删除 DPT
  • R, 再将 = 替换为逗号 ,
  • FSpace 将光标定位到端口号后面的空格处;
  • ShiftD 删除这一行当前光标及其后面的剩余内容;
  • J 将光标下移一行,以便快速重复宏操作;
  • 最后,按 Q 停止宏录制。

要查看寄存器 "l 中的录制内容,可输入命令 :reg l + Enter。内容如下:

"l 0twdtSdwr,f d/DPT^Mdwr,f Dj

同样,还有其他方式可以实现上述任务。例如,要将 SRC= 改为 ,,除了用上面的 DWR 实现,还可以使用 2CW。不妨停下来思考一下类似的备选方案对录制的宏进行修改,看看能否达到同样的效果。

若要对下一行日志执行录制的宏,输入 @L 即可。如果没问题,就用 @@ 重复执行,直至处理完剩下的日志内容。


2.6. 练习5:将多行数据压缩为一行

再次强调,宏录制的是一系列按键操作。尽管我们一直在单行内容上练习宏的相关操作,宏也可以作用于多行。假如需要将下列三行通过录制的宏(假设存入寄存器 "c)按要求处理为一行,即从之前的:

Country China
1,380,950,000 people

处理为:

1,380,950,000;China

其中一种参考方案实现如下:

  • 将光标定位到以 Country China 开头的这一行;
  • QC 启动宏录制,并将其存入寄存器 "c
  • 0 对光标作标准化处理,统一定位到行首;
  • DW 删除单词 Country
  • J 将光标下移一行;
  • DShiftW 将数字存入未命名寄存器(unnamed register);
  • K 上移光标到刚才那行;
  • ShiftP 将数字粘贴到光标位置的前方;
  • R; 将空格替换为分号;
  • J 将光标下移一行;
  • 2DD 删除当前行与下一行内容;
  • 最后,按 Q 停止宏录制。

要查看寄存器 "c 中的录制内容,可输入命令 :reg c + Enter。内容如下:

"c 0dwjdWkPr;j2dd

接着,可以通过引入数量词,即 4@C,将上述宏操作再重复执行四次,实现该组数据的批量处理。

同样,要在 Vim 中实现上述效果还有很多其他方案可供选择。


2.7. 练习6:从 HTML 中提取数据

下列这行文本为一组 HTML 链接列表(即 <a> 标签):

<a href="#">@armyspy.com</a><a href="#">@cuvox.de</a><a href="#">@dayrep.com</a><a href="#">@einrot.com</a><a href="#">@fleckens.hu</a><a href="#">@gustr.com</a><a href="#">@jourrapide.com</a><a href="#">@rhyta.com</a><a href="#">@superrito.com</a><a href="#">@teleworm.us</a>

最终需要通过 Vim 宏(假设存入寄存器 "q)处理成下列效果:

armyspy.com
cuvox.de
dayrep.com
einrot.com
fleckens.hu
gustr.com
jourrapide.com
rhyta.com
superrito.com
teleworm.us

其中一种参考方案实现如下:

  • 将光标定位到以 <a 开头的文本行;
  • QQ 启动宏录制,并将其存入寄存器 "q
  • DF@ 删除当前光标到 @ 之间(包含 @)的所有内容;
  • F< 将光标定位到下一处 < 位置;
  • CF> + Enter + Escape,将 </a> 替换为一个换行标记;
  • 最后,按 Q 停止宏录制。

要查看寄存器 "q 中的录制内容,可输入命令 :reg q + Enter。内容如下:

"q df@f<cf>^M^[

输入 @Q 即可运行这个宏。继续重复执行,按 @@ 即可,直至处理完其余链接内容。

3 退出 Vim

若要放弃文件变更以便下次重新练习,使用退出命令 :q! + Enter

S07L33 Exercise 09 - Macros - Walkthrough

本节为同步练习点评课,视频本身没有增补知识点。这里仅对实操过程中的几个问题进行复盘:

  • 除了宏录制前后需要注意光标的归一化处理(即回到行首、下移一行之类),还应将运行宏操作前的 内容查看环节 作为另一项最佳实践(上述练习均包含该步骤)。这样做,一来可以直观了解用到的特殊符号的写法;二来可以及时发现操作过程中出现的问题;
  • 在重复运行宏时,如果此前从未执行过宏,使用 @@ 可能会出错。最好先用 @{macro_name} 的形式运行宏;
  • 批量处理最容易出错的地方,往往不在待处理内容中间,而在 最后一个待处理项 上。例如练习 6 中的链接内容提取,第一次尝试录制宏时,在分离 </a><a> 时选择了先删除 </a> 再用 I 键插入一个回车符。处理到最后一个链接时,由于闭标签后没有下一个 <a>,再用 I 键插入回车符会让最后一个字符 s 与前面的内容分离。既然是批量操作,就应当一气呵成,切忌在这样的临界点位置拖泥带水。

  1. 本节练习另附精美排版 PDF 格式,阅读体验更佳,详见:vimclass/Exercise-09-Macros.pdf ↩︎

相关文章:

【Vim Masterclass 笔记16】S07L32 + L33:同步练习09 —— 掌握 Vim 宏操作的六个典型案例(含点评课内容)

文章目录 S07L32 Exercise 09 - Macros1 训练目标2 操作指令2.1. 打开 macros-practice.txt 文件2.2. 练习1&#xff1a;将旧版 Python 代码转换为新版写法2.3. 练习2&#xff1a;根据列表内容批量创建 Shell 脚本2.4. 练习3&#xff1a;对电话号码作格式化处理2.5. 练习4&…...

爬楼梯问题(Leetcode 第70题)

爬楼梯问题&#xff08;Leetcode 第70题&#xff09; 问题描述 假设你正在爬楼梯。每次你可以爬 1 个或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。…...

6.5 正定矩阵

一、正定矩阵 这一节关注的是特征值都是正数的对称矩阵。如果对称使得矩阵很重要&#xff0c;那么这个额外的性质&#xff08;所有的 λ > 0 \lambda>0 λ>0&#xff09;会使得它更加的特殊。我们所说的特殊并不表示它稀有&#xff0c;特征值都是正数的对称矩阵几乎…...

verilog笔记1

1. 阻塞赋值 阻塞赋值&#xff0c;顾名思义即在一个 always 块中&#xff0c;后面的语句会受到前语句的影响&#xff0c;具体来说就是在同一个always 中&#xff0c;一条阻塞赋值语句如果没有执行结束&#xff0c;那么该语句后面的语句就不能被执行&#xff0c;即被“阻塞”。也…...

游戏引擎学习第81天

仓库:https://gitee.com/mrxiao_com/2d_game_2 或许我们应该尝试在地面上添加一些绘图 在这段时间的工作中&#xff0c;讨论了如何改进地面渲染的问题。虽然之前并没有专注于渲染部分&#xff0c;因为当时主要的工作重心不在这里&#xff0c;但在实现过程中&#xff0c;发现地…...

git系列之revert回滚

1. Git 使用cherry-pick“摘樱桃” step 1&#xff1a; 本地切到远程分支&#xff0c;对齐要对齐的base分支&#xff0c;举例子 localmap git pull git reset --hard localmap 对应的commit idstep 2&#xff1a; 执行cherry-pick命令 git cherry-pick abc123这样就会将远程…...

监控与调试:性能优化的利器 — ShardingSphere

在分布式数据库系统中&#xff0c;监控和调试是确保系统高效运行的关键。ShardingSphere 提供了多种监控和调试工具&#xff0c;帮助开发者实时跟踪和优化性能&#xff0c;识别瓶颈&#xff0c;进行故障排查&#xff0c;从而提升系统的稳定性和响应速度。本文将介绍如何使用 Sh…...

LLVM - 编译器前端 - 理解BNF(巴科斯-诺尔范式)

一:概述 BNF(Backus-Naur Form,巴科斯-诺尔范式)是一种用于描述上下文无关文法的形式语言,广泛应用于定义编程语言、协议和文件格式的语法规则。 下面是一小段类Pascal编程语言,这个编程语言就可以用BNF描述。用BNF描述编程语言的语法规则之后,就可以根据这个规则生成抽…...

服务化架构 IM 系统之应用 MQ

在微服务化系统中&#xff0c;存在三个最核心的组件&#xff0c;分别是 RPC、注册中心和MQ。 在前面的两篇文章&#xff08;见《服务化架构 IM 系统之应用 RPC》和《服务化架构 IM 系统之应用注册中心》&#xff09;中&#xff0c;我们站在应用的视角分析了普适性的 RPC 和 注…...

ELF2开发板(飞凌嵌入式)基本使用的搭建

ELF2开发板&#xff08;飞凌嵌入式&#xff09; 开箱包裹内容 打开包装&#xff0c;你可以看到以下物品 一个绿联的usb3.0读卡器、sandisk的32g内存卡(太好了)rk3588 4g32g emmc版本ELF2开发板输出为12v 3A的电源适配器&#xff08;和ipad的充电器外观好像&#xff09; 图1 外…...

Appium(四)

一、app页面元素定位 1、通过id定位元素: resrouce-id2、通过ClassName定位&#xff1a;classname3、通过AccessibilityId定位&#xff1a;content-desc4、通过AndroidUiAutomator定位5、通过xpath定位xpath、id、class、accessibility id、android uiautomatorUI AutomatorUI自…...

简单的sql注入 buuctf

lovesql 这道题是一个非常简单的sql注入 也就是万能密码 我们只需要注意在输入用户名的地方使用 ’ 将语句提前终止 并且or一个为真的条件 这样整个语句的结果就为真 这就是万能密码的原理 这样我们就得到了密码 然后我们发现这只是密码 于是查看一下字段数 尝试下注入 这里我…...

Ubuntu 24.04 LTS 空闲硬盘挂载到 文件管理器的 other locations

Ubuntu 24.04 LTS 确认硬盘是否被识别 使用 lsblk 查看信息&#xff0c;其中sda这个盘是我找不到的&#xff0c;途中是挂在好的。 分区和格式化硬盘 如果新硬盘没有分区&#xff0c;你需要先分区并格式化它。假设新硬盘为 /dev/sdb&#xff0c;使用 fdisk 或 parted 对硬盘…...

<电子幽灵>开发笔记:BAT基础笔记(一)

BAT脚本基础笔记(一) 介绍 费曼学习法最重要的部分&#xff0c;即把知识教给一个完全不懂的孩子——或者小白。 为了更好的自我学习&#xff0c;也为了让第一次接触某个知识范畴的同学快速入门&#xff0c;我会把我的学习笔记整理成电子幽灵系列。 提示&#xff1a;作为低代码…...

PiliPalaX ( 第三方安卓哔哩哔哩)

PiliPalaX 是一款哔哩哔哩第三方客户端。使用 Flutter 开发&#xff0c;基于PiliPala原版基础上创作出来的X升级版&#xff0c;目前支持Android、IOS客户端。 应用特色 目前着重移动端(Android、iOS)和Pad端&#xff0c;暂时没有适配桌面端、手表端等 https://pan.quark.cn/s/…...

在亚马逊云科技上高效蒸馏低成本、高精度的Llama 3.1 405B模型(上篇)

在2024年的亚马逊云科技re:Invent全球云计算春晚里&#xff0c;亚马逊云科技CEO - Matt Garman介绍了亚马逊云科技的AI模型托管平台Amazon Bedrock上的模型蒸馏服务Model Distillation&#xff0c;令小李哥印象十分深刻。该功能可自动化地为特定场景的知识创建一个蒸馏模型。它…...

Amazon MSK 开启 Public 访问 SASL 配置的方法

1. 开启 MSK Public 1.1 配置 MSK 参数 进入 MSK 控制台页面&#xff0c;点击左侧菜单 Cluster configuration。选择已有配置&#xff0c;或者创建新配置。在配置中添加参数 allow.everyone.if.no.acl.foundfalse修改集群配置&#xff0c;选择到新添加的配置。 1.2 开启 Pu…...

LeetCode_438.找到字符串中所有字母异位词

给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 "a…...

一文读懂服务器的HBA卡

什么是 HBA 卡 HBA 卡&#xff0c;全称主机总线适配器&#xff08;Host Bus Adapter&#xff09; &#xff0c;是服务器与存储装置间的关键纽带&#xff0c;承担着输入 / 输出&#xff08;I/O&#xff09;处理及物理连接的重任。作为一种电路板或集成电路适配器&#xff0c;HBA…...

Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化

Debezium日常分享系列之&#xff1a;对于从Oracle数据库进行快照的性能优化 源数据库Kafka Connect监控测试结果 源数据库 Oracle 19c&#xff0c;本地&#xff0c;CDB数据库主机的I/O带宽为6 GB/s&#xff0c;由此主机上运行的所有数据库共享临时表空间由42个文件组成&#x…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...