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

awk命令进阶

1.连接文件

awk 'NR==FNR{a[$1]=$0;next} NR!=FNR{ if(($5) in a) print a[$1],$0 }' file1 file2

命令详解:

这个命令的目的是将 file1 和 file2 基于某个共同字段进行连接(类似于 SQL 中的 JOIN 操作)。下面我们逐步解析它的工作原理。


1. NR==FNR{a[$1]=$0;next}

  • NR==FNR:

    • NR 是当前处理的总行号(包括所有文件)。

    • FNR 是当前文件的行号(只针对当前文件)。

    • 当 NR==FNR 时,表示正在处理第一个文件(file1)。

  • a[$1]=$0:

    • 将 file1 的每一行的内容($0)存储到关联数组 a 中,键是第一个字段($1)。

    • 例如,如果 file1 的一行是 1 Alice,那么 a[1]="1 Alice"

  • next:

    • 跳过后续的命令,直接处理下一行。这意味着只有 file1 会被处理,file2 暂时不会被处理。


2. NR!=FNR{ if(($5) in a) print a[$1],$0 }

  • NR!=FNR:

    • 当 NR!=FNR 时,表示正在处理第二个文件(file2)。

  • if(($5) in a):

    • 检查 file2 的第五个字段($5)是否存在于数组 a 中(即是否与 file1 的第一个字段匹配)。

  • print a[$1],$0:

    • 如果匹配成功,打印 file1 中对应的行(a[$1])和 file2 的当前行($0)。


3. 问题分析

你的命令逻辑基本正确,但有一个小问题:

  • 在 print a[$1],$0 中,$1 应该是 $5,因为你是用 file2 的第五个字段($5)来匹配 file1 的第一个字段($1)。

  • 正确的写法应该是:print a[$5],$0


4. 修正后的命令

awk 'NR==FNR{a[$1]=$0;next} ($5 in a) {print a[$5],$0}' file1 file2

5. 示例

假设有两个文件:

file1:

1 Alice
2 Bob
3 Charlie

file2:

10 20 30 40 1
11 21 31 41 2
12 22 32 42 4

运行命令后的输出:

1 Alice 10 20 30 40 1
2 Bob 11 21 31 41 2

解释:

  • file2 的第一行第五个字段是 1,与 file1 的第一行匹配,因此输出 1 Alice 10 20 30 40 1

  • file2 的第二行第五个字段是 2,与 file1 的第二行匹配,因此输出 2 Bob 11 21 31 41 2

  • file2 的第三行第五个字段是 4,在 file1 中没有匹配,因此不输出。


6. 总结

  • 你的命令逻辑是正确的,但需要将 print a[$1],$0 改为 print a[$5],$0

  • 修正后的命令可以正确实现基于字段的 JOIN 操作。

  • 如果还有其他需求(例如输出格式调整),可以进一步修改 print 部分。

awk 是一种强大的文本处理工具,支持各种进阶操作,包括条件判断、循环、数组、函数等。以下是一些常见的 awk 进阶操作及其示例:


1. 条件判断

awk 支持 if-else 条件判断,可以根据条件执行不同的操作。

示例:

awk '{if ($1 > 50) print $1, "High"; else print $1, "Low"}' file.txt
  • 如果第一个字段大于 50,输出 High,否则输出 Low

 扩展用法

示例 1:多条件判断
awk '{if ($1 > 50) print $1, "High"; else if ($1 > 30) print $1, "Medium"; else print $1, "Low"}' file.txt
  • 如果第一个字段大于 50,输出 High

  • 如果第一个字段大于 30 但小于等于 50,输出 Medium

  • 否则,输出 Low

示例 2:结合正则表达式
awk '{if ($1 ~ /^[0-9]+$/) print $1, "Number"; else print $1, "Not a number"}' file.txt
  • 如果第一个字段是纯数字,输出 Number

  • 否则,输出 Not a number

示例 3:统计数量
awk '{if ($1 > 50) count++} END {print "High count:", count}' file.txt
awk '{if ($1 > 50) {count++; print $1, "big"} else {print $1, "small"}} END {print "High count:", count > "result.txt"}' file.txt
  • 统计第一个字段大于 50 的行数,并在最后输出结果。


2. 循环

awk 支持 for 和 while 循环,可以遍历数组或重复执行某些操作。

示例 1:for 循环

awk '{for (i=1; i<=NF; i++) print $i}' file.txt
  • 遍历每一行的所有字段并打印。

实际应用场景

这种结合循环和字段处理的功能在实际工作中有很多应用场景。以下是一些常见的例子:


1. 字段拆分与提取
  • 场景

    • 文件中的每一行包含多个字段,需要将每个字段提取出来单独处理。

  • 示例

    • 提取日志文件中的特定字段(如时间戳、错误码等)。

    • 提取 CSV 文件中的某一列数据。


2. 数据清洗
  • 场景

    • 文件中的数据格式不规范,需要对每个字段进行清洗(如去除空格、转换大小写等)。

  • 示例

    • 将字段中的空格替换为下划线:

      awk '{for (i=1; i<=NF; i++) gsub(/ /, "_", $i); print $0}' file.txt

3. 字段统计
  • 场景

    • 统计每个字段的某些特征(如长度、是否包含特定字符等)。

  • 示例

    • 统计每个字段的长度:

      awk '{for (i=1; i<=NF; i++) print "Field", i, "length:", length($i)}' file.txt

4. 数据转换
  • 场景

    • 将文件中的数据转换为另一种格式(如 JSON、SQL 等)。

  • 示例

    • 将每一行转换为 JSON 格式:

      awk '{printf "{\n"; for (i=1; i<=NF; i++) printf "  \"field%d\": \"%s\"", i, $i, (i<NF ? ",\n" : "\n"); print "}"}' file.txt
      awk '{printf "{\n"; for (i=1; i<=NF; i++) {printf "  \"field%d\": \"%s\"",i,$i;if (i<NF) {printf ",\n" else {printf "\n"}};print "}"}' file

这是一个 awk 命令,用于将文件 file.txt 中的每一行数据转换为 JSON 格式。

{printf "{\n";...; print "}" }:对于文件 file.txt 中的每一行,先打印一个左花括号 {  作为 JSON 对象的开始,然后执行中间的循环和打印操作,最后打印一个右花括号 } 作为 JSON 对象的结束。

for (i=1; i<=NF; i++):该循环从 1 开始,到 NF 结束。NF 表示当前行的字段数量。对于每一行,该循环会遍历该行的每个字段。

printf " \"field%d\": \"%s\"", i, $i, (i<NF? ",\n" : "\n"):在循环中,对于每个字段,将其打印为 JSON 格式的键值对。

"field%d":使用 printf 的格式化功能,将当前字段的编号 i 作为键的一部分,格式为 "field1""field2" 等。

"%s":将当前字段的内容 $i 作为键对应的值。

(i<NF? ",\n" : "\n"):根据当前字段是否为该行的最后一个字段,决定是否打印逗号。如果 i 小于 NF,即不是最后一个字段,打印逗号和换行符 ,\n;如果是最后一个字段,只打印换行符 \n

示例
假设 file.txt 的内容如下

Alice 25 Female
Bob 30 Male

运行该 awk 命令后,输出如下:

{"field1": "Alice","field2": "25","field3": "Female"
}
{"field1": "Bob","field2": "30","field3": "Male"
}

使用说明

将上述 awk 命令在终端中运行,确保文件 file.txt 存在。例如,如果你在 Linux 或 macOS 系统的终端中,可以直接输入:

awk '{printf "{\n"; for (i=1; i<=NF; i++) printf "  \"field%d\": \"%s\"", i, $i, (i<NF? ",\n" : "\n"); print "}" }' file.txt

此命令会逐行读取 file.txt 的内容,将每行转换为一个 JSON 对象。

该命令适用于将简单的文本文件中的数据转换为基本的 JSON 格式,但需要注意,如果文件中包含特殊字符(如双引号 "),可能会导致生成的 JSON 格式不规范,需要额外的转义处理。

可能的优化

转义特殊字符

如果输入文件中可能包含特殊字符,如双引号、反斜杠等,需要添加转义逻辑。例如,可以使用 gsub(/"/, "\\\"", $i) 在 printf 之前对 $i 进行转义处理,将双引号替换为 \"。修改后的代码如下:

awk '{printf "{\n"; for (i=1; i<=NF; i++) { gsub(/"/, "\\\"", $i); printf "  \"field%d\": \"%s\"", i, $i, (i<NF? ",\n" : "\n") }; print "}" }' file.txt

处理空字段

如果文件中可能存在空字段,上述代码可能会生成不期望的 JSON 格式,例如 {"field1": "value1", "field2": "", "field3": "value3"}。你可以添加逻辑判断字段是否为空,如果为空,将其值设置为 null。例如:

awk '{printf "{\n"; for (i=1; i<=NF; i++) { if ($i == "") $i = "null"; else gsub(/"/, "\\\"", $i); printf "  \"field%d\": \"%s\"", i, $i, (i<NF? ",\n" : "\n") }; print "}" }' file.txt

提高可读性

可以添加更多的空格或缩进,使生成的 JSON 更具可读性,例如:

awk '{printf "{\n    "; for (i=1; i<=NF; i++) { if ($i == "") $i = "null"; else gsub(/"/, "\\\"", $i); printf "  \"field%d\": \"%s\"", i, $i, (i<NF? ",\n    " : "\n    ") }; print "}" }' file.txt

处理嵌套结构

如果需要处理更复杂的结构,例如嵌套的 JSON 对象或数组,可能需要更复杂的 awk 逻辑或使用其他工具(如 jq)来处理。


5. 字段过滤
  • 场景

    • 根据字段的值过滤数据。

  • 示例

    • 只输出包含数字的字段:

      awk '{for (i=1; i<=NF; i++) if ($i ~ /[0-9]+/) print $i}' file.txt


6. 字段重组
  • 场景

    • 将字段重新组合成新的格式。

  • 示例

    • 将字段逆序输出:

      awk '{for (i=NF; i>=1; i--) printf "%s ", $i; print ""}' file.txt


7. 多文件处理
  • 场景

    • 对多个文件进行相同的字段处理。

  • 示例

    • 对多个文件逐字段输出:

      awk '{for (i=1; i<=NF; i++) print $i}' file1.txt file2.txt


8. 结合正则表达式
  • 场景

    • 对字段进行复杂的模式匹配和替换。

  • 示例

    • 将字段中的邮箱地址提取出来:

      awk '{for (i=1; i<=NF; i++) if ($i ~ /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/) print $i}' file.txt


9. 生成报告
  • 场景

    • 根据字段生成统计报告。

  • 示例

    • 统计每个字段的唯一值:

      awk '{for (i=1; i<=NF; i++) uniq[$i]++} END {for (key in uniq) print key, uniq[key]}' file.txt


10. 结合其他命令

  • 场景

    • 将 awk 的输出传递给其他命令进行进一步处理。

  • 示例

    • 将字段排序后输出:

      awk '{for (i=1; i<=NF; i++) print $i}' file.txt | sort

示例 2:while 循环

awk '{i=1; while (i<=NF) {print $i; i++}}' file.txt
  • 使用 while 循环实现同样的功能。


3. 数组

awk 支持关联数组(类似于字典或哈希表),可以用于统计、分组等操作。

示例 1:统计字段出现次数

bash

复制

awk '{count[$1]++} END {for (key in count) print key, count[key]}' file.txt
  • 统计第一个字段中每个值的出现次数。

示例 2:分组求和

bash

复制

awk '{sum[$1] += $2} END {for (key in sum) print key, sum[key]}' file.txt
  • 按第一个字段分组,对第二个字段求和。


4. 内置函数

awk 提供了许多内置函数,用于字符串处理、数学计算等。

示例 1:字符串长度

bash

复制

awk '{print length($0)}' file.txt
  • 输出每一行的字符数。

示例 2:字符串截取

bash

复制

awk '{print substr($1, 1, 3)}' file.txt
  • 输出第一个字段的前 3 个字符。

示例 3:数学函数

bash

复制

awk '{print sqrt($1)}' file.txt
  • 计算第一个字段的平方根。


5. 多文件处理

awk 可以同时处理多个文件,并通过 NR 和 FNR 区分当前文件。

示例:

bash

复制

awk 'NR==FNR{a[$1]=$0; next} ($1 in a) {print a[$1], $0}' file1.txt file2.txt
  • 将 file1.txt 和 file2.txt 基于第一个字段进行连接。


6. 自定义变量

awk 允许定义和使用自定义变量。

示例:

bash

复制

awk '{total += $1} END {print "Total:", total}' file.txt
  • 计算第一个字段的总和。


7. BEGIN 和 END 块

BEGIN 和 END 是特殊的代码块,分别在处理输入之前和之后执行。

示例:

bash

复制

awk 'BEGIN {print "Start"} {print $0} END {print "End"}' file.txt
  • 在处理文件之前输出 Start,处理完毕后输出 End


8. 正则表达式匹配

awk 支持正则表达式,可以用于模式匹配。

示例:

bash

复制

awk '/error/ {print $0}' file.txt
  • 输出包含 error 的行。

示例 2:字段匹配

bash

复制

awk '$1 ~ /^[0-9]+$/ {print $0}' file.txt
  • 输出第一个字段为纯数字的行。


9. 输出重定向

awk 可以将输出重定向到文件。

示例:

bash

复制

awk '{print $1 > "output.txt"}' file.txt
  • 将第一个字段写入 output.txt 文件。


10. 多条件组合

awk 支持逻辑运算符(&&||!),可以组合多个条件。

示例:

bash

复制

awk '$1 > 50 && $2 < 100 {print $0}' file.txt
  • 输出第一个字段大于 50 且第二个字段小于 100 的行。


11. 自定义字段分隔符

awk 默认使用空格作为字段分隔符,但可以通过 -F 选项或 FS 变量自定义分隔符。

示例:

bash

复制

awk -F',' '{print $1}' file.csv
  • 使用逗号作为分隔符,输出第一个字段。


12. 多行记录处理

awk 默认按行处理,但可以通过设置 RS(记录分隔符)处理多行记录。

示例:

bash

复制

awk 'BEGIN {RS="\n\n"} {print $0}' file.txt
  • 将空行作为记录分隔符,处理多行记录。


13. 自定义输出格式

awk 支持 printf,可以格式化输出。

示例:

bash

复制

awk '{printf "Name: %-10s Age: %d\n", $1, $2}' file.txt
  • 格式化输出,左对齐名称并固定宽度。


14. 调用外部命令

awk 可以通过 system 函数调用外部命令。

示例:

bash

复制

awk '{system("echo " $1)}' file.txt
  • 对每一行的第一个字段调用 echo 命令。


15. 函数定义

awk 允许定义自定义函数。

示例:

bash

复制

awk 'function myfunc(x) {return x*2} {print myfunc($1)}' file.txt
  • 定义一个函数 myfunc,将第一个字段的值乘以 2 并输出。


16. 处理大文件

awk 可以高效处理大文件,因为它逐行处理,不会将整个文件加载到内存中。

示例:

bash

复制

awk '{if ($1 > 1000) print $0}' largefile.txt
  • 从大文件中筛选出第一个字段大于 1000 的行。


17. 处理 CSV 文件

awk 可以方便地处理 CSV 文件。

示例:

bash

复制

awk -F',' '{print $1, $3}' data.csv
  • 输出 CSV 文件的第一列和第三列。


18. 处理 JSON 数据

虽然 awk 不是专门用于处理 JSON 的工具,但可以通过正则表达式提取简单 JSON 数据。

示例:

bash

复制

echo '{"name": "Alice", "age": 25}' | awk -F'"' '{print $4, $8}'
  • 提取 JSON 中的 name 和 age 字段。


19. 性能优化

  • 使用 next 跳过不必要的行。

  • 避免在循环中频繁调用外部命令。

  • 尽量使用内置函数而不是自定义逻辑。


20. 调试技巧

  • 使用 print 输出中间结果。

  • 使用 -d 选项(如 gawk 支持)启用调试模式。


通过掌握这些进阶操作,你可以更高效地使用 awk 处理复杂的文本任务。如果需要更详细的功能,可以参考 awk 的官方文档或使用 man awk 查看手册。

相关文章:

awk命令进阶

1.连接文件 awk NRFNR{a[$1]$0;next} NR!FNR{ if(($5) in a) print a[$1],$0 } file1 file2 命令详解&#xff1a; 这个命令的目的是将 file1 和 file2 基于某个共同字段进行连接&#xff08;类似于 SQL 中的 JOIN 操作&#xff09;。下面我们逐步解析它的工作原理。 1. NRF…...

解锁Java中的国密算法:安全保障的密钥

一、引言 在数字化浪潮席卷全球的当下&#xff0c;信息安全已然成为国家、企业乃至个人无法忽视的重要议题。国密算法&#xff0c;作为我国自主研发的密码算法体系&#xff0c;宛如坚固的盾牌&#xff0c;为国家信息安全筑起了一道坚不可摧的防线。它的诞生&#xff0c;不仅承载…...

基于迁移学习的ResNet50模型实现石榴病害数据集多分类图片预测

完整源码项目包获取→点击文章末尾名片&#xff01; 番石榴病害数据集 背景描述 番石榴 &#xff08;Psidium guajava&#xff09; 是南亚的主要作物&#xff0c;尤其是在孟加拉国。它富含维生素 C 和纤维&#xff0c;支持区域经济和营养。不幸的是&#xff0c;番石榴生产受到降…...

在现有 Docker Desktop 环境下安装与配置独立 Kubernetes环境(Mac)

在现有 Docker Desktop 环境下安装与配置独立 Kubernetes 集群环境 目标 在已安装Docker Desktop自带Kubernetes的情况下&#xff0c;搭建一个独立 Kubernetes 集群环境。配置独立的 kubectl 工具&#xff0c;使其默认管理独立的 Kubernetes 集群。保留 Docker Desktop 的 Ku…...

Linux探秘坊-------3.开发工具详解(1)

1 初识vim编辑器 创建第一个vim编辑的代码 1.新建文件 2.使用vim打开 3.打开默认是命令模式&#xff0c;写代码需要在屏幕上输出“i”字符 1.写完代码后要按Esc键退出到指令模式2.再按shift:wq即可保存并退出vim &#xff08;因为不支持鼠标&#xff0c;通常 使用键盘上的箭…...

Spring Boot整合Thymeleaf、JDBC Template与MyBatis配置详解

本文将详细介绍如何在Spring Boot项目中整合Thymeleaf模板引擎、JDBC Template和MyBatis&#xff0c;涵盖YAML配置、依赖版本匹配、项目结构设计及代码示例。 一、版本兼容性说明 Spring Boot版本与Java版本对应关系 Spring Boot 2.x&#xff1a;支持Java 8、11&#xff08;推…...

白玉微瑕:闲谈 SwiftUI 过渡(Transition)动画的“口是心非”(下)

概述 秃头小码农们都知道&#xff0c;SwiftUI 不仅仅是一个静态 UI 构建框架那么简单&#xff0c;辅以海量默认或自定义的动画和过渡&#xff08;Transition&#xff09;特效&#xff0c;我们可以将 App 界面的绚丽升华到极致。 不过&#xff0c;目前 SwiftUI 中的过渡&#x…...

论文:深度可分离神经网络存内计算处理芯片

引言&#xff1a;SRAM - CIM芯片在处理深度可分离神经网络时面临的挑战 深度可分离卷积&#xff08;Depthwise separable convolution, DSC&#xff09;由逐深度卷积&#xff08;DW&#xff09;和逐点卷积&#xff08;PW)组成&#xff0c;逐深度卷积用于提取空间特征&#xff…...

hdrnet,Deep Bilateral Learning for Real-Time Image Enhancement解读

论文、代码和ppt地址&#xff1a;Deep Bilateral Learning for Real-Time Image Enhancement 论文使用的数据集&#xff1a; HDR: 这是一个复杂的摄影管道&#xff0c;包括色彩校正、自动曝光、去雾和色调映射等操作。 MIT “FiveK” 数据集: 这个数据集由 Bychkovsky 等人 提…...

Android系统开发(十五):从 60Hz 到 120Hz,多刷新率进化简史

引言 欢迎来到“帧率探索实验室”&#xff01;今天&#xff0c;我们要聊聊 Android 11 中对多种刷新率设备的支持。你可能会问&#xff1a;“这和我写代码有什么关系&#xff1f;”别急&#xff0c;高刷新率不仅仅让屏幕更顺滑&#xff0c;还会直接影响用户体验。想象一下&…...

js判断一个数组对象中是否有相同的值

let userTitleLevelList[{title:医生,code:20},{title:老师,code:21}]; 如果一个数组对象格式如上面。如果有一样的对象就提示。即&#xff1a;title和code都是一样的内容、 const hasDuplicate userTitleLevelList.some((item, index, array) > { return array.filter(…...

基于深度学习的视觉检测小项目(十五) 用户的登录界面

用户管理离不开的是消息框&#xff08;QMessageBox&#xff09;和对话框&#xff08;QDialog&#xff09;&#xff0c;比如对话框用于用户名和密码输入&#xff0c;消息框用于提示登录成功、密码错误。 • 基础知识&#xff1a;PySide6&#xff08;PyQT5&#xff09;的常用对话…...

redis-排查命中率降低问题

1.命中率降低带来的问题 高并发系统&#xff0c;当命中率低于平常的的运行情况&#xff0c;或者低于70%时&#xff0c;会产生2个影响。 有大量的请求需要查DB&#xff0c;加大DB的压力&#xff1b;影响redis自身的性能 不同的业务场景&#xff0c;阈值不一样&#xff0c;一般…...

ui文件转py程序的工具

源博客连接&#xff1a; PyCharm中利用外部工具uic转成的py文件&#xff0c;里面全是C代码&#xff0c;并非python类型的代码&#xff0c;导致大量报错。。。_pyside6-uic为什么把ui转为了c-CSDN博客 如果想把ui文件转为py文件&#xff0c;首先设置pycharm的外部工具&#xf…...

Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案

作者&#xff1a;Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商&#xff0c; 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点&#xff0c;能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…...

Oracle 数据库常见字段类型大全及详细解析

在工作期间会遇到数据库建表的业务&#xff0c;经常会使用复制粘帖等操作&#xff0c;而不清楚数据库的字段类型。本文记录了 Oracle 数据库常见字段类型&#xff0c;根据不同的数据需求&#xff0c;可以选择不同的字段类型来存储数据。 文章目录 一、字符类型&#xff08;Char…...

U3D的.Net学习

Mono&#xff1a;这是 Unity 最初采用的方式&#xff0c;它将 C# 代码编译为中间语言 (IL)&#xff0c;然后在目标平台上使用虚拟机 (VM) 将其转换为本地机器码执行。 IL2CPP&#xff1a;这是一种较新的方法&#xff0c;它会将 C# 代码先编译为 C 代码&#xff0c;再由 C 编译器…...

Tomcat下载配置

目录 Win下载安装 Mac下载安装配置 Win 下载 直接从官网下载https://tomcat.apache.org/download-10.cgi 在圈住的位置点击下载自己想要的版本 根据自己电脑下载64位或32位zip版本 安装 Tomcat是绿色版,直接解压到自己想放的位置即可 Mac 下载 官网 https://tomcat.ap…...

adb常用指令(完整版)

1、adb devices 查看是否连接到设备 2、adb install [-r] [-s] 安装app&#xff0c;-r强制&#xff0c;-s安装sd卡上 3、adb uninstall [-k] 卸载app&#xff0c;-k保留配置和参数 4、adb push 把本地文件上传设备 5、adb pull 下载文件到本地 6、cd D:\sdk\platform-tool…...

大数据学习(36)- Hive和YARN

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

C# ASP.NET MVC项目内使用ApiController

1.在App_Start文件夹新建WebApiConfig.cs文件&#xff0c;建立webApi路由的注册方法。 using System.Web.Http;namespace PrivilegeManager {public class WebApiConfig{public static void Register(HttpConfiguration config){config.MapHttpAttributeRoutes();config.Route…...

Kafka 入门与应用实战:吞吐量优化与与 RabbitMQ、RocketMQ 的对比

前言 在现代微服务架构和分布式系统中&#xff0c;消息队列作为解耦组件&#xff0c;承担着重要的职责。它不仅提供了异步处理的能力&#xff0c;还能确保系统的高可用性、容错性和扩展性。常见的消息队列包括 Kafka、RabbitMQ 和 RocketMQ&#xff0c;其中 Kafka 因其高吞吐量…...

“推理”(Inference)在深度学习和机器学习的语境

“推理”&#xff08;Inference&#xff09;在深度学习和机器学习的语境中&#xff0c;是指使用经过训练的模型对新数据进行预测的过程。将其简单地理解为“模型的应用阶段”。在这一阶段&#xff0c;我们不再进行模型训练&#xff0c;而是利用已训练好且保存下来的模型来获取对…...

字节腾讯阿里大厂面经汇总:Java集合(容器)大厂面试题及参考答案

ArrayList 的扩容机制以及删除操作的时间复杂度 ArrayList 是 Java 中非常常用的一个集合类,它是基于数组实现的动态数组。当我们创建一个 ArrayList 时,如果不指定初始容量,它会有一个默认的初始容量(通常是 10)。当我们向 ArrayList 中添加元素时,如果元素的数量达到了…...

数据结构(初阶)(一)----算法复杂度

算法复杂度 算法复杂度数据结构算法算法效率复杂度的概念 数据结构 数据结构(Data Structure)是计算机存储、组织数据的⽅式&#xff0c;指相互之间存在⼀种或多种特定关系的数据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤&#xff0c;所以我们要学各式各样的数据结…...

构建高效稳定的网络环境

概述 网络技术是当今IT行业的重要组成部分&#xff0c;构建高效稳定的网络环境对于企业、个人和互联网发展至关重要。本文将探讨网络技术中的关键要素&#xff0c;包括网络协议、网络架构、网络安全和网络优化&#xff0c;并提供实用的技巧和最佳实践&#xff0c;以帮助您构建…...

使用Edge打开visio文件

使用Edge打开visio文件 打开Edge浏览器搜索‘vsdx edge’ 打开第一个搜索结果 Microsoft Support 根据上述打开的页面进行操作 第一步&#xff1a;安装Visio Viewer 第二步&#xff1a;添加注册表 桌面新增文本文件&#xff0c;将下面的内容放入新建文本中&#xff0c;修…...

ChatGPT Prompt 编写指南

一、第一原则&#xff1a;明确的意图​ 你需要明确地表达你的意图和要求&#xff0c;尽可能具体、描述性、详细地描述所需的上下文、你期望的结果等。你的要求越明确&#xff0c;越有希望获得你想要的答案。​ 糟糕的案例 ❌​ ​ 写一首关于 OpenAI 的诗。​ ​ 更好的案…...

蚁群算法 (Ant Colony Optimization) 算法详解及案例分析

蚁群算法 (Ant Colony Optimization) 算法详解及案例分析 目录 蚁群算法 (Ant Colony Optimization) 算法详解及案例分析1. 引言2. 蚁群算法 (ACO) 算法原理2.1 蚂蚁觅食行为2.2 算法步骤2.3 数学公式3. 蚁群算法的优势与局限性3.1 优势3.2 局限性4. 案例分析4.1 案例1: 旅行商…...

安卓动态设置Unity图形API

命令行方式 Unity图像api设置为自动,安卓动态设置Vulkan、OpenGLES Unity设置 安卓设置 创建自定义活动并将其设置为应用程序入口点。 在自定义活动中,覆盖字符串UnityPlayerActivity。updateunitycommandlineararguments (String cmdLine)方法。 在该方法中,将cmdLine…...