iptables防火墙
目录
一 Linux防火墙基础
1 iptables的表,链结构
(1)规则表
filter 表
nat 表
mangle 表
raw 表
(2)规则链
2 数据包过滤的匹配流程
(1)规则表之间的顺序
(2)规则链之间的顺序
(3)规则链内部各条防火墙规则之间的顺序
二 编写防火墙规则
1 iptables的安装
2 基本语法,数据包控制类型
3 添加,查看,删除规则等基本操作
(1)添加新的规则
(2)查看规则列表
(3)删除,清空规则
(4)设置默认策略
三 规则的匹配条件
1 通用匹配
(1)协议匹配
(2)地址匹配
(3)网络接口匹配
2 隐含匹配
(1)端口匹配
(2)ICMP类型匹配
3 显示匹配
(1)多端口匹配
(2)IP范围匹配
(3)MAC地址匹配
(4)状态匹配
一 Linux防火墙基础
Linux 防火墙是一种用于保护 Linux 系统网络安全的机制,通过对网络数据包进行过滤和控制,来实现对系统的访问控制和安全防护。
Linux系统中防火墙的类型包括netfilter和iptables的区别:
- Netfilter:它是 Linux 内核里的一个框架,处于内核层面。其功能是提供数据包过滤、网络地址转换(NAT)以及数据包修改等基础功能,为防火墙的实现奠定了基础,是 Linux 系统进行网络数据包处理的核心机制。
- iptables:作为一个用户空间的工具,iptables 主要用于和 Netfilter 框架进行交互。用户通过它可以方便地定义和管理防火墙规则,这些规则最终会被传递给 Netfilter 框架,由 Netfilter 在数据包处理过程中执行。
1 iptables的表,链结构
(1)规则表
在 iptables
中,规则表是规则的集合,不同的表用于实现不同的功能。以下是常见的规则表及其功能:
filter 表
- 功能:这是最常用的表,主要用于进行数据包过滤,决定是否允许数据包通过。例如,你可以使用它来控制哪些 IP 地址可以访问你的服务器,或者限制对特定端口的访问。
nat 表
- 功能:主要用于网络地址转换(NAT),包括源地址转换(SNAT)和目的地址转换(DNAT)。SNAT 用于将内部网络的私有 IP 地址转换为公共 IP 地址,使得内部网络中的设备能够访问外部网络;DNAT 用于将外部网络的请求转发到内部网络的特定设备上。
mangle 表
- 功能:用于对数据包进行更细致的修改,如修改数据包的 TOS(服务类型)、TTL(生存时间)等字段。通过修改这些字段,可以影响数据包在网络中的传输行为。
raw 表
- 功能:主要用于决定数据包是否要进行状态跟踪。在
iptables
中,默认会对数据包进行状态跟踪,以实现更智能的过滤规则。但在某些情况下,你可能不希望对某些数据包进行状态跟踪,这时就可以使用 raw 表来禁用状态跟踪。
(2)规则链
规则链是规则的有序集合,每个规则链负责处理特定类型或方向的数据包。以下是常见的规则链及其功能:
名称 | 功能 |
INPUT链 | 处理进入本机的数据包。当外部网络的数据包到达服务器时,首先会经过 INPUT 链的检查,根据链中的规则决定是否允许该数据包进入服务器。 |
OUTPUT链 | 处理从本机发出的数据包。当服务器内部的程序向外发送数据包时,会经过 OUTPUT 链的检查,根据链中的规则决定是否允许该数据包发出。 |
FORWARD链 | 处理经过本机转发的数据包。当服务器作为网关或路由器时,会有一些数据包需要从一个网络接口转发到另一个网络接口,这些数据包会经过 FORWARD 链的检查。 |
PREROUTING链 | 在数据包进行路由选择之前对其进行处理。通常用于进行目的地址转换(DNAT),可以根据规则将数据包的目的地址修改为其他地址。 |
POSTROUTING链 | 在数据包进行路由选择之后对其进行处理。通常用于进行源地址转换(SNAT),可以根据规则将数据包的源地址修改为其他地址。 |
2 数据包过滤的匹配流程
(1)规则表之间的顺序
当数据包进入系统时,会按照 raw
、mangle
、nat
、filter
这样的顺序依次经过各个表。
(2)规则链之间的顺序
- 入站数据流:数据包首先到达
PREROUTING
链,在这个链中主要进行目的地址转换(DNAT)操作,能够根据规则修改数据包的目的地址。经过PREROUTING
链处理后,数据包会进入INPUT
链,该链会根据规则决定是否允许数据包进入本机。 - 转发数据流向:数据包首先进入
OUTPUT
链,此链会对从本机发出的数据包进行过滤,决定是否允许数据包发出。经过OUTPUT
链处理后,数据包会进入POSTROUTING
链,在这个链中主要进行源地址转换(SNAT)操作,可根据规则修改数据包的源地址。 - 出战数据流向:当数据包是经过本机进行转发时,会依次经过
PREROUTING
链、FORWARD
链、POSTROUTING
链。
(3)规则链内部各条防火墙规则之间的顺序
规则链内规则按从上到下顺序匹配。数据包进入规则链后,先检查首条规则,若匹配则执行对应动作(如允许、拒绝、丢弃),不再检查后续规则;若不匹配则继续检查下一条,直至找到匹配规则或遍历完链。配置时应将常用或严格规则放前面以提高匹配效率。
二 编写防火墙规则
1 iptables的安装
安装iptables
sudo yum install iptables 或
sudo dnf install iptables
启动iptables防火墙并设置开机启动
systemctl start iptables
systemctl enable iptables
2 基本语法,数据包控制类型
iptables 的基本语法结构
iptables [选项] [链名] [条件匹配] [动作]
- 选项用于指定操作类型(如添加、删除、查看等);
- 链名包括 INPUT(处理进入本机的数据包)、OUTPUT(处理本机发出的数据包)、FORWARD(处理转发的数据包)等;
- 条件匹配可根据源 IP、目的 IP、端口号、协议类型(如 TCP、UDP 等)等进行设置;
- 动作常见的有 ACCEPT(允许通过)、DROP(丢弃数据包)、REJECT(拒绝并返回错误信息)、LOG(记录日志信息并传递给下一条)。
示例:
3 添加,查看,删除规则等基本操作
类别 | 选项 | 用途 |
增加 | -A | 追加到最后一行 |
-i | 插入到第一行(或指定序号) | |
查看 | -L | 列出所有规则 |
-n | 以数字形式显示 | |
-v | 详细信息 | |
--line(--line-numbers) | 显示序号 | |
删除 | -D | 删除一条(指定序号或内容) |
-F | 清空所有 | |
修改 | -R | 替换某条规则 |
设置默认 | -P | 设置默认规则 |
(1)添加新的规则
允许来自特定 IP(如 192.168.1.100)的主机通过 SSH(默认端口 22)访问本机,命令为
iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT
- 其中 “-A” 表示追加规则到指定链(这里是 INPUT 链)。
(2)查看规则列表
使用 “iptables -L” 命令可以列出当前 iptables 的规则列表。若要查看更详细的信息,可使用 “iptables -L -n -v”,“-n” 表示以数字形式显示 IP 地址和端口号,“-v” 表示显示详细信息。
(3)删除,清空规则
- 删除指定规则,比如要删除刚才添加的允许 SSH 访问的规则,可先使用 “iptables -L --line-numbers” 查看规则的序号,然后使用 “iptables -D INPUT [规则序号]” 进行删除。
- 清空所有规则,可使用 “iptables -F” 命令,该命令会清空所有链中的规则。
iptables -D INPUT 3 //删除序列3
iptables -n -L INPUT //查看规则的序号
iptables -F INPUT
(4)设置默认策略
设置 INPUT 链的默认策略为 DROP,命令为 “iptables -P INPUT DROP”;设置 OUTPUT 链的默认策略为 ACCEPT,命令为 “iptables -P OUTPUT ACCEPT”。“-P” 选项用于设置默认策略。
三 规则的匹配条件
1 通用匹配
(1)协议匹配
协议匹配是防火墙规则中常用的匹配方式,用于根据数据包所使用的协议类型来进行筛选和控制。常见的协议类型包括:
- TCP(传输控制协议):是一种面向连接的、可靠的传输层协议,常用于需要数据可靠传输的应用,如 HTTP(80 端口)、HTTPS(443 端口)、SSH(22 端口)、SMTP(25 端口)、POP3(110 端口)等服务。在 iptables 中,可使用 “-p tcp” 来匹配 TCP 协议的数据包。
- UDP(用户数据报协议):是一种无连接的、不可靠的传输层协议,常用于对实时性要求较高、允许少量数据丢失的应用,如 DNS(53 端口)、DHCP(67/68 端口)、TFTP(69 端口)、SNMP(161 端口)等服务。使用 “-p udp” 可匹配 UDP 协议的数据包。
- ICMP(互联网控制报文协议):主要用于在 IP 主机、路由器之间传递控制消息,如 ping 命令使用的就是 ICMP 协议。通过 “-p icmp” 来匹配 ICMP 协议的数据包。此外,还可以进一步根据 ICMP 的类型和代码进行更精细的匹配。
iptables -I INPUT -p icmp -j DROP #"-p 协议名"
iptables -A FORWARD ! -p icmp -j ACCEPT
(2)地址匹配
地址匹配用于根据数据包的源 IP 地址或目的 IP 地址来进行筛选和控制,以便允许或阻止特定 IP 地址的设备与本地系统进行通信。
- 源地址匹配:使用 “-s” 选项指定源 IP 地址,例如 “iptables -A INPUT -s 192.168.1.100 -j ACCEPT” 表示允许来自 IP 地址为 192.168.1.100 的设备的数据包进入 INPUT 链。也可以指定一个 IP 地址段,如 “iptables -A INPUT -s 192.168.1.0/24 -j DROP” 表示丢弃来自 192.168.1.0 到 192.168.1.255 这个网段的所有数据包。
- 目的地址匹配:使用 “-d” 选项指定目的 IP 地址,例如 “iptables -A OUTPUT -d 10.0.0.10 -j ACCEPT” 表示允许发往 IP 地址为 10.0.0.10 的数据包从 OUTPUT 链发出。同样可以指定目的 IP 地址段进行匹配。
iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT
iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -I FORWARD -s 10.20.30.0/24 -j DROP
(3)网络接口匹配
网络接口匹配是根据数据包进出的网络接口来进行筛选和控制,有助于更精确地管理不同网络连接上的流量。
- 输入接口匹配:使用 “-i” 选项指定输入接口,例如 “iptables -A INPUT -i eth0 -j ACCEPT” 表示只允许从 eth0 网络接口进入的数据包通过 INPUT 链。常用于区分不同网络连接(如内网、外网接口),对进入的流量进行不同的处理。
- 输出接口匹配:使用 “-o” 选项指定输出接口,例如 “iptables -A OUTPUT -o wlan0 -j DROP” 表示丢弃从 wlan0 网络接口发出的数据包。可以根据实际的网络拓扑和安全需求,对从特定接口发出的流量进行控制。
iptables -A INPUT -i ens33 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i ens33 -s 172.16.0.0/16 -j DROP
iptables -A INPUT -i ens33 -s 192.186.0.0/16 -j DROP
2 隐含匹配
(1)端口匹配
- 原理:端口是网络通信中用于区分不同应用程序或服务的逻辑标识。在 TCP 和 UDP 协议中,每个数据包都包含源端口和目的端口信息。端口匹配通过检查数据包中的端口号,来决定是否应用相应的规则。
- 示例:在
iptables
中,使用--sport
指定源端口,--dport
指定目的端口。- 允许外部主机访问本地的 HTTP 服务(默认端口 80):
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- 允许本地主机访问外部的 DNS 服务(UDP 端口 53):
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
(2)ICMP类型匹配
- 原理:ICMP(Internet Control Message Protocol,互联网控制报文协议)用于在 IP 主机、路由器之间传递控制消息,不同类型的 ICMP 消息用于不同的目的。ICMP 类型匹配通过检查数据包中的 ICMP 类型字段,对不同类型的 ICMP 消息进行不同的处理。
- 示例:在
iptables
中,使用--icmp-type
指定 ICMP 类型。- 允许本地主机接收外部的
ping
请求(ICMP 类型为 8):
- 允许本地主机接收外部的
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
- 允许本地主机发送
ping
响应(ICMP 类型为 0):
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
3 显示匹配
(1)多端口匹配
- 原理:同时指定多个源或目的端口,通过特定语法参数列出端口号供防火墙识别。
- 用途:统一管理多种服务端口,简化规则设置。
- 示例:iptables 中用 “--multiport”,如
- “iptables -A INPUT -p tcp --dport --multiport 22,80,443 -j ACCEPT”。
(2)IP范围匹配
- 原理:IP 范围匹配通过指定源 IP 地址或目的 IP 地址的范围来筛选数据包。可以使用 CIDR 表示法或指定起始和结束 IP 地址来定义范围。
- 示例:在
iptables
中,使用-s
选项指定源 IP 范围,-d
选项指定目的 IP 范围。- 允许来自 192.168.1.0/24 子网的主机访问本地服务器:
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
- 阻止发往 10.0.0.0/8 子网的数据包:
iptables -A OUTPUT -d 10.0.0.0/8 -j DROP
(3)MAC地址匹配
- 原理:MAC 地址匹配是根据数据包的源 MAC 地址来进行匹配。MAC 地址是网络设备的物理地址,在局域网内具有唯一性。
- 示例:在
iptables
中,使用-m mac
模块和--mac-source
选项进行 MAC 地址匹配。- 允许 MAC 地址为 00:11:22:33:44:55 的设备访问本地网络:
iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
- 阻止 MAC 地址为 66:77:88:99:AA:BB 的设备访问本地网络:
iptables -A INPUT -m mac --mac-source 66:77:88:99:AA:BB -j DROP
(4)状态匹配
- 原理:状态匹配基于连接的状态信息进行数据包的筛选。防火墙会跟踪网络连接的状态,如新建连接(NEW)、已建立连接(ESTABLISHED)、相关连接(RELATED)和无效连接(INVALID)等。
- 示例:在
iptables
中,使用-m state
模块和--state
选项进行状态匹配。- 允许已建立连接和相关连接的数据包进入:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- 拒绝新建连接的数据包(除非有特定规则允许):
iptables -A INPUT -m state --state NEW -j DROP
相关文章:
iptables防火墙
目录 一 Linux防火墙基础 1 iptables的表,链结构 (1)规则表 filter 表 nat 表 mangle 表 raw 表 (2)规则链 2 数据包过滤的匹配流程 (1)规则表之间的顺序 (2)…...
【JavaWeb】详细讲解 HTTP 协议
文章目录 一、HTTP简介1.1 概念1.2 特点 二、协议2.1 HTTP-请求协议(1)GET方式(2)POST方式(3)GET和POST的区别: 2.2 HTTP-响应协议(1)格式(2)响应…...
非阻塞I/O操作
非阻塞I/O操作是一种I/O操作模式,在这种模式下,应用程序在发出I/O请求后不会立即等待操作完成,而是继续执行其他任务。当I/O操作完成或可以进行时,系统会通知应用程序。这种操作模式可以提高程序的效率和响应能力,因为…...
Redis面试问题详解2
Redis面试问题详解2 一、分布式锁 分布式锁主要用于解决多服务器之间的并发问题。Redis通过SETNX命令实现分布式锁,确保同一时间只有一个线程可以获取锁。 1. 基本实现 获取锁 使用SETNX命令设置锁,并设置一个过期时间,避免死锁。 Stri…...
【软件测试】性能测试概念篇
1. 性能测试的定义 性能测试是通过模拟真实用户行为、系统负载或极端条件,评估软件系统在特定场景下的响应能力、稳定性、资源消耗及扩展性的过程。其核心目标是: 验证系统容量:确保系统在预期负载下(如…...
在Pycharm配置stable diffusion环境(使用conda虚拟环境)
自己配环境的时候也没个指南,少安装包或者包之间版本冲突是再按正常不过的事了,真的令人不胜其烦。 下面记录一下自己在conda虚拟环境配置stable diffusion的代码环境,希望能帮大家少踩几个坑。 虚拟环境配置 默认你已经安装了annaconda&am…...
Uniapp微信小程序:轻松获取用户头像和昵称
参考文献:Uniapp微信小程序:轻松获取用户头像和昵称-百度开发者中心 (baidu.com) uni.login({ provider: weixin, success: function (loginRes) { console.log(loginRes.authResult); // 打印登录凭证 // 使用登录凭证获取用户信息 uni.getUserInfo({ …...
Qt核心知识总结
Qt核心知识总结 Qt 是一个功能强大、跨平台的 C 应用程序开发框架,广泛应用于图形用户界面(GUI)应用程序的开发,同时也支持非 GUI 应用程序的开发。本文将从入门到精通的角度,详细解析 Qt 的核心知识点,帮…...
Doris的向量化执行如何支撑分布式架构和复杂查询
Doris 的向量化执行能力与其 分布式架构 和 复杂查询优化 深度结合,通过 批处理 列式计算 分布式调度 的协同设计,解决传统分布式数据库在复杂查询场景下的性能瓶颈。以下是具体原理展开: 一、向量化如何适配分布式架构? Doris…...
无源蓝牙技术与传统RFID(射频识别)对比
百事可乐的无源蓝牙技术与传统RFID(射频识别)虽然都属无线通信技术,但在工作原理、应用场景和技术性能上存在显著差异。以下是深度对比分析: 一、核心技术差异 维度无源蓝牙(如百事方案)R…...
Operator 开发入门系列(一):Hello World
背景 我们公司最近计划将产品迁移到 Kubernetes 环境。 为了更好地管理和自动化我们的应用程序,我们决定使用 Kubernetes Operator。 本系列博客将记录我们学习和开发 Operator 的过程,希望能帮助更多的人入门 Operator 开发。 目标读者 对 Kubernete…...
Immich图库本地部署与远程管理:打造你的专属照片云服务
文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 小伙伴们,你们好呀!今天要给大家带来一个超炫的技能——让你家的电脑秒变私人云相册,并且…...
OpenShift AI + DeepSeek+IBM CP4BA:实现AI业务自动化中台
一、OpenShift AI DeepSeek 1、什么是 OpenShift AI? OpenShift AI(前身为 Red Hat Open Data Hub)是 Red Hat OpenShift 平台上的一套 AI/ML 工具集,基于 Kubernetes,为企业提供可扩展的机器学习平台,可…...
游戏引擎学习第229天
仓库:https://gitee.com/mrxiao_com/2d_game_5 回顾上次内容并介绍今天的主题 上次留下的是一个非常简单的任务,至少第一步是非常简单的。我们需要在渲染器中加入排序功能,这样我们的精灵(sprites)才能以正确的顺序显示。为此我…...
genhtml 工具使用说明
genhtml 工具使用说明 简介 genhtml 是一个用于生成 HTML 格式代码覆盖率报告的工具,基于 lcov 生成的覆盖数据文件(如 lcov.info)生成交互式 HTML 报告。它支持多种自定义选项,可控制报告内容、样式、输出格式等。 基本用法 ge…...
C++11_2
文章目录 前言一、新的类功能——新的默认成员函数1. 编译器默认生成的移动构造与移动赋值2. 手动提供移动构造或移动赋值的影响 二、可变参数模板1. 多参数1. 可变参数模板的基础 2. 可变参数模板的展开(1)递归展开参数包(2)使用…...
HTML语义化与无障碍设计
HTML 语义化与无障碍设计:构建包容且高效的网页体验 引言 在我的前端开发学习旅程中,起初将 HTML 仅视为页面布局的工具,大量使用无语义的 <div> 和 <span>。直到在一篇技术博客当中了解到,作者在一次团队项目中&am…...
Ubuntu多用户VNC远程桌面环境搭建:从零开始的完整指南
引言: 在当今远程工作盛行的时代,搭建一个安全、高效的多用户远程桌面环境变得越来越重要。本文将为您提供一个从零开始的完整指南,教您如何在Ubuntu系统上搭建多用户VNC远程桌面环境。无论您是系统管理员、开发团队负责人,还是想要为家庭成员提供远程访问的技术爱好者,这…...
Electron 中引入MessageChannel 大大缩短不同渲染进程和 Webview 各组件 1o1的通信链路
背景 在 electron 开发中,也不可避免地遇到端到端的通信问题,Electron 已经内置一些通信 API,但是实际用下来会发现,在引入 Webview 之后,通信链路会很长,参考 利用本地 Express Web 服务解决复杂的 Elec…...
Vscode开发Vue项目NodeJs启动报错处理
文章目录 背景一、npm启动报错报错信息定位原因处理方案第一步、下载安装高版本 二、node 无法识别报错信息处理方案定位原因第一步、检测环境变量第二步、重新开启界面 背景 使用Vscode开发Vue项目,使用到NodeJs,记录出现的问题及处理方案,…...
AI agents系列之AI工作流和AI智能体对比
在人工智能(AI)快速发展的今天,理解AI工作流和AI智能体之间的区别对于有效利用这些技术至关重要。本文将深入探讨AI工作流的类型,解析AI智能体的概念,并重点比较二者的关键差异。 1. 智能体 vs 工作流 关于“智能体”的定义众说纷纭。有些客户将其视为完全自主的系统,能…...
如何恢复极狐GitLab?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 恢复极狐GitLab (BASIC SELF) 极狐GitLab 提供了一个命令行界面来恢复整个安装,足够灵活以满足您的需求。 恢复…...
基于X86/Nvidia+FPGA大模型具身智能机器人控制器解决方案,同时拥有算力与实时的便利
2025年成为人形机器人产业化元年,行业已突破早期实验室研发阶段,进入"场景验证量产爬坡"新周期,预计2031年具身智能市场规模有望突破万亿元。这一进程的背后,是硬件算力、实时控制、环境适应等底层技术的系统性突破——…...
MATLAB项目实战(一)
题目: 某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系a,b表示,距离单位:km)及水泥日用量d(t)由下表给出.目前有两个临时料场位于A(5,1),B(2,7),日储…...
PyCharm Flask 使用 Tailwind CSS 配置
使用 Tailwind CSS 步骤 1:初始化项目 在 PyCharm 终端运行:npm init -y安装 Tailwind CSS:npm install -D tailwindcss postcss autoprefixer初始化 Tailwind 配置文件:npx tailwindcss init这会生成 tailwind.config.js。 步…...
Mybtis和Mybatis-Plus区别
MyBatis 和 MyBatis-Plus 是 Java 中常用的持久层框架,MyBatis-Plus 是在 MyBatis 基础上增强的工具包,让开发更便捷、高效。下面是两者主要的区别: ✅ 核心区别总结: 特性MyBatisMyBatis-Plus配置复杂度需要手写大量 XML 或注解…...
《Learning Langchain》阅读笔记2-基于 Gemini 的 Langchain PromptTemplate 实现方式
本文将使用Gemini实现《Learning Langchain》中的PromptTemplate 实现方式,替代书中的调用openai API,白嫖太香了! 调试步骤 我们首先还是先在本地调试是否可以调用Gemini API: import getpass import osif "GOOGLE_API_K…...
LVS+keepalived搭建高可用架构
背景:最近在搭建LVSkeepalived的高可用架构,中间遇到了一些坑比较让人头疼,此处重要就安装部署的步骤进行记录,特别是遇到坑进行说明,希望能对有需要的同学提供给帮助! 坑点1: 在部署LVSkeepalived并且使用…...
【天梯赛练习】L2-035 完全二叉树的层序遍历
后序遍历转层序遍历 后序遍历:左——右——根层序遍历:数组形式存储的完全二叉树的顺序遍历序列其实就正好是其层序遍历序列。 子树根若是 i d id id,左子树 i d ∗ 2 id*2 id∗2,右子树 2 ∗ i d 1 2*id1 2∗id1 所以就是dfs递…...
2025.4.20机器学习笔记:文献阅读
2025.4.20周报 题目信息摘要创新点网络架构实验生成性能对比预测性能对比 结论不足以及展望 题目信息 题目: A novel flood forecasting model based on TimeGAN for data-sparse basins期刊: Stochastic Environmental Research and Risk Assessment作…...
Leetcode 3359. 查找最大元素不超过 K 的有序子矩阵【Plus题】
1.题目基本信息 1.1.题目描述 给定一个大小为 m x n 的二维矩阵 grid。同时给定一个 非负整数 k。 返回满足下列条件的 grid 的子矩阵数量: 子矩阵中最大的元素 小于等于 k。 子矩阵的每一行都以 非递增 顺序排序。 矩阵的子矩阵 (x1, y1, x2, y2) 是通过选择…...
Redis面试——事务
一、Redis原子性是什么? (1)单个命令的原子性 原子性是指一组操作,要么全部执行成功,要么全部失败。Redis 中的单个命令是天然原子性的,因为 Redis 的命令执行采用单线程模型,同一时间只会执行…...
【远程管理绿联NAS】家庭云存储无公网IP解决方案:绿联NAS安装内网穿透
文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 大家好,今天要带给大家一个超级酷炫的技能——如何让绿联NAS秒变‘千里眼’,通过简单的几步操作就能轻松实现内网穿透。想象一下,无论你身处何地&a…...
AI写程序:用 AI 实现一个递归批量转化 GBK/GB2312 转 UTF-8 工具:轻松解决文本编码转换难题
用 AI 实现一个递归批量转化 GBK/GB2312 转 UTF-8 工具 在处理历史文件或与不同系统交互时,我们经常会遇到 GBK 或 GB2312 编码的文本文件。虽然现在 UTF-8 是主流,但手动转换这些旧编码文件既繁琐又容易出错。为了解决这个问题,我开发了一个…...
首席人工智能官(Chief Artificial Intelligence Officer,CAIO)的详细解析
以下是**首席人工智能官(Chief Artificial Intelligence Officer,CAIO)**的详细解析: 1. 职责与核心职能 制定AI战略 制定公司AI技术的长期战略,明确AI在业务中的应用场景和优先级,推动AI与核心业务的深度…...
uview1.0 tabs组件放到u-popup中在微信小程序中滑块样式错乱
解决思路 重新计算布局信息:在弹窗显示后重新调用 init 方法来计算组件的布局信息。使用 nextTick:保证在视图更新之后再进行布局信息的计算。 <u-tabs ref"tabsRef" ></u-tabs> makeClick(){this.makeShowtruethis.$nextTick…...
私人笔记:动手学大模型应用开发llm-universe项目环境创建
项目代码:datawhalechina/llm-universe: 本项目是一个面向小白开发者的大模型应用开发教程,在线阅读地址:https://datawhalechina.github.io/llm-universe/ 项目书:动手学大模型应用开发 一、初始化项目 uv init llm-universe-te…...
基于Django框架的图书索引智能排序系统设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,图书管理系统当然不能排除在外。图书索引智能排序系统是在实际应用和软件工程的开发原理之上,运用Python语言以及Django框架进…...
网络类型学习
网络类型的分类依据-----基于二层(数据链路层)使用的协议不同而导致数据包的封装方式不同,工作方式也不同。 OSPF协议根据链路层协议类型将网络分为四种类型:广播型网络(BMA)、非广播多路访问(…...
ubuntu24.04离线安装deb格式的mysql-community-8.4.4
1,下载解压 参考: https://blog.csdn.net/2202_76101487/article/details/145967039 下载: wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-server_8.4.4-1ubuntu24.04_amd64.deb-bundle.tar 建议个目录mysql8然后把安装包移过去&…...
电控---printf重定向输出
在嵌入式系统开发中,printf 重定向输出是将标准输出(stdout)从默认设备(如主机终端)重新映射到嵌入式设备的特定硬件接口(如串口、LCD、USB等)的过程。 一、核心原理:标准IO库的底层…...
uniapp使用createSelectorQuery,boundingClientRect获取宽度和高度不准确的可用的解决方案
场景展示: uniapp使用createSelectorQuery,boundingClientRect获取宽度和高度不准确的可用的解决方案,正常来说,使用下面的代码是可以正确获得宽高的,但是里面含有图片,在图片没有加载完的情况下,我们可以…...
DSO:牛津大学推出的物理一致性3D模型优化框架
在数字内容创作和制造领域,将2D图像转换为高质量、物理上稳定的3D模型一直是一个挑战。传统的3D建模方法往往需要大量的手动调整以确保生成的物体不仅美观而且符合物理定律,能够在现实世界中稳定存在。牛津大学近期推出了一款名为DSO(Direct Sparse Odometry)的项目,它不仅…...
Delphi Ini文件对UTF8支持不爽的极简替代方案
如题,没太多废话,直接复制走即可。 unit uConfig;interfaceuses classes, Sysutils;typeTConfig class privateFFileName: String;FConfig:TStringList; protectedpublicconstructor Create(ConfigFile:String);destructor Destroy;property FileName…...
Windows平台使用Docker部署Neo4j
✅ Docker 安装 Neo4j 前提条件:安装docker 打开docker desktop docker run \--name neo4j \-p7474:7474 -p7687:7687 \-d \-e NEO4J_AUTHneo4j/password123 \neo4j:5默认用户名是 neo4j,密码是你设置的,比如上面是 password123 ✅用 Pyt…...
FreeRTOS二值信号量详解与实战教程
FreeRTOS二值信号量详解与实战教程 📚 作者推荐:想系统学习FreeRTOS嵌入式开发?请访问我的FreeRTOS开源学习库,内含从入门到精通的完整教程和实例代码! 1. 二值信号量核心概念解析 二值信号量(Binary Semaphore)是Fre…...
数据结构与算法[零基础]---6.算法概况
六、算法概述 (一)算法的概述 任何解决问题的过程都是由一定的步骤组成的,把解决问题的方法和有限的步骤称作算法 (二)算法的基本特征 1.有穷性 算法必须在执行有限个操作之后终止,且每一步都可在有限时间内完成。 2.确定性 算…...
STL简介(了解)
1.什么是STL STL(standard template libaray)是标准模板库,它是C标准库的一部分。C标准库中还有一些其它东西,比如之前用的IO流。它主要是数据结构和算法的库。 2.STL的版本 C3.0出来后就有了模板,此时大家已经深受没有数据结构算法库的痛苦…...
使用 Oh My Posh 自定义 PowerShell 提示符
使用 Oh My Posh 自定义 PowerShell 提示符 由于ai生图,ai视频这方面mac太差了,买N卡,转windows了,这里也记录一下 PowerShell 配置Oh My Posh 先上效果图 一、下载 PowerShell7 默认的 PowerShell5 太差了,下载地…...
4月17号
//1.编码 String str "ai你哟"; byte[] bytes1 str.getBytes(); System.out.println(Arrays.toString(bytes1)); byte[] bytes2 str.getBytes(charsetName: "GBK"); System.out.println(Arrays.toString(bytes2));//2.解码 String str2 new String(byt…...