iptables 是 Linux 内核集成的防火墙系统, 几乎所有 Linux 发行版都会内置 iptables。
iptables 对进出的 IP 数据报进行处理和过滤, 过滤规则(rule)存储在4个表(table)中, 表中的规则又组成了数条完整的规则链(chain)。
iptables 可以追踪数据包所属的连接(TCP/UCP/ICMP协议)及其状态,允许根据连接状态进行处理和过滤。
表与规则链
iptables 中有四张表, 优先级从高到低是:
raw: 某个链上一旦使用了raw表将会跳过 NAT 和连接跟踪处理。
mangle: 用于修改数据包的内容
nat: 用于网络地址转换,可以修改数据包的源地址或目标地址
filter: iptables 的默认表, 可以抛弃或接受数据包
表中的规则构成了链:
PREROUTING: 来自网络接口(网卡)的数据包首先会经过 PREROUTING 链,经过 raw, mangle, nat 表中规则的处理然后进行路由判断。
若数据包的目的地址为本机则会进入INPUT链
若数据包的目的地址为其它地址则进入FORWARD链进行转发
INPUT: 处理目标为本机的数据包, 经过 mangle,filter 表中规则的处理然后发给 nginx、mysql等上层进程处理 (此处存疑: nat 表中似乎也包括INPUT链, 望大佬指正)
FORWARD: 处理转发的数据包,经过 mangle, filter 表中规则处理后进入POSTROUTING链
OUTPUT: 处理本地进程发出的数据包, 经过 raw, mangle, nat, filter 表中规则的处理然后进入POSTROUTING链
POSTROUTING: 处理来自 FORWARD 和 OUTPUT 链的数据包并发送给网络接口发出,可在 raw, mangle, nat 表中配置规则
在运行中 iptables 可能处理三种场景:
入站数据流: 网络接口 -> PREROUTING -> INPUT -> 本地
转发数据流: 网络接口 -> PREROUTING -> FORWARD -> POSTROUTING -> 网络接口
出站数据流: 本地 -> OUTPUT -> POSTROUTING -> 网络接口
虽然我们通常将 iptables 视为单个实体, 但实际上它由两部分组成: 执行数据包过滤处理的内核模块 netfilter 和运行于用户空间的过滤规则配置工具 iptables。
连接跟踪
iptables 是有状态的防火墙,使用 ip_conntrack 模块进行连接跟踪。ip_conntrack 可以实时追踪本机的 ICMP/TCP/UDP 流并保存在内存中。
根据数据包在连接中的角色,将数据包分为四种状态:
NEW: 连接的第一个包比如TCP的SYN包
ESTABLISHED: 只要连接被回复那么连接的状态就是 ESTABLISHED, 比如TCP中第一个回答 ACK/SYN 包
RELATED: 当包和某个 ESTABLISHED 状态有关系时即处于 RELATED 状态。 比如 FTP-Data 会被标记为与 FTP-control 有关。
INVALID: 无法识别包所属的连接或没有任何状态,通常会丢弃这些包
连接追踪允许我们根据包的连接状态进行过滤。比如我们只允许本地 80 端口的 HTTP 服务器进行响应而不允许通过 80 端口主动向外请求,那么在本地 80 端口的出方向上只允许 ESTABLISHED 状态的包不允许 NEW 状态数据包即可。(通常情况下 HTTP 服务器进程是可以主动向外请求的,但是本地地址不会是 80 端口)
入站数据流和转发数据流是在 PREROUTING 链中进行连接追踪的(即标记所属连接和状态), 出站数据流在 OUTPUT 链中进行状态追踪。使用 RAW 表可以配置数据流绕过状态追踪。
配置规则
iptables -h
可以查看 iptables 自带的帮助手册。
我们将 iptables 命令分解为几部分:
iptables -t
-t 或 --table 选项用来指定要查看或修改的表(raw, mangle, nat, filter)。
常用的 iptables 命令选项(上文中的
部分)包括:
-L
/ --list
: 列出某条规则链中所有规则, 不指定 chain
参数则列出指定表中所有链上的规则。iptables 会按照列出的顺序依次尝试匹配规则并执行匹配的动作。规则可用链上的序号来描述,第一条规则的序号为1(不是编程语言常见的0)。
-L -V
/ -L --verbose
会显示更详细的内容
-A
/ --append
: 在规则链的末尾添加规则, 规则的内容由后面的匹配选项
和动作
两部分来描述
-I
/ --insert
: 在规则链的指定位置插入规则。-i INPUT 2
会在INPUT链第2个位置插入一条规则,原第2条及以后的规则均后移一位
- R /
/ --replace
: 替换规则链指定位置上的规则
-D
/ --delete
: 删除链上某条规则,可以使用序号指定某条规则或者使用匹配和动作完整描述规则进行删除
-F
/ --flush
: 删除链上的全部规则
-P
/ --policy
: 修改某条链的默认策略, 示例iptables -P filter ACCEPT
iptables 的规则(
)包含匹配条件和动作两部分。可以根据网络接口、地址、协议等进行匹配:
-i
/ --in-interface
: 进入的网络接口,如以太网eth, 本地回环lo。
-o
/ --out-interface
: 输出的网络接口
-s
/ --source
: 输入IP地址, 格式为 address[/mask]
, 如192.168.1.1
, 192.168.1.0/24
-d
/ --destination
: 目标IP地址
-p
/ ---proto
: 协议类型, 包括TCP/UCP/ICMP等
--sport
: 源端口号
--dport
: 目标端口号
–-state
: 连接跟踪状态, 需要-m state
启动连接跟踪模块。示例: --state NEW,ESTABLISHED
ifconfig
命令可以查看本机可用的网络接口
iptables 常用规则的动作(
)包括:
ACCEPT: 允许数据包通过,进入下一条规则
REJECT: 拦截数据包并发送回执数据包通知发送方,可用的回执有: ICMP port-unreachable
, ICMP echo-reply
, tcp-reset
示例: iptables -A INPUT -p TCP --dport 22 -j REJECT --reject-with tcp-reset
拒绝22端口的tcp连接
DROP: 丢弃数据包不返回回执,不继续执行过滤
SNAT: 源地址转换(Source Network Address Translation), 将包的源地址改写为指定地址。完成此动作后将直接跳往下一条规则链(如POSTROUTING) 示例: iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.1-192.168.1.100:2000-3000
连接跟踪功能会使连接后续的应答数据包送达发送者
MASQUERADE: 将数据包的源地址改写为防火墙的地址但可以指定端口号, 与SNAT相比更适合防火墙工作在 DHCP 等动态地址网络环境中的情况。完成此动作后将直接跳往下一条规则链(如POSTROUTING) 示例: iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE --to-ports 2000-3000
DNAT: 目的地址转换, 将包目的地址改写到指定地址,完成此动作后将直接跳往下一条规则链。此功能可以为其它服务进行反向代理 示例: iptables -t nat -A PREROUTING -s 192.168.1.10 --sport 80 -j DNAT --to-destination 192.168.1.11:80
REDIRECT: 重定向到另一个端口,可以为本地服务提供反向代理 示例: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
将对本地80端口的数据包重定向到8080
MIRROR: 回声, 将源地址与目的地址对换位置后发送给原发送者
保存规则
iptables 命令修改后规则只存在于内存中, 使用service iptables save
保存规则到配置文件。
默认配置文件地址一般为/etc/sysconfig/iptables
。
修改/etc/sysconfig/iptables-config
中的配置项: IPTABLES_SAVE_ON_STOP=yes
在 iptables 服务停止时存储规则。
iptables-save
iptables -L
只能逐表查看规则,iptables-save
命令将 netfilter 内核模块中的规则导出到标准输出。
我们可以使用 iptables-save 查看所有规则, 或将其备份到文件中。
iptables-save 命令执行读取操作,不会更改 iptables 配置请放心使用。
iptables-save -t 仅导出指定表的内容。
iptables-save -c
将会导出字节计数器和包计数器的值。
示例
查看规则:
iptables -L
列出默认表 filter 所有链上的规则。
iptables -t nat -L
列出 nat 表中所有链上的规则
iptables -t nat -L PREROUTING
列出 nat 表中 PREROUTING 链上的规则
拦截特定流量:
iptables -t filter -A INPUT -s 11.11.11.11 -j DROP
拦截来自特定 IP 地址(11.11.11.11)对本地服务全部流量
iptables -t filter -D INPUT -s 11.11.11.11 -j DROP
删除上一条拦截规则
iptables -t filter -A INPUT -p tcp -sport 445 -j DROP
封锁特定端口(TCP 445)
iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j REJECT ---reject-with icmp-host-prohibited
禁止 ICMP (ping)
iptables -t filter -A OUTPUT -p tcp --dport 80 -m state --state NEW -j DROP
禁止从80端口发起新的TCP连接但允许80端口响应TCP连接
作为网关提供NAT服务:
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.1
将来自192.168.2.0/24子网数据包源地址改写为192.168.1.1
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
将来自192.168.2.0/24子网数据包源地址改写为防火墙地址
iptables -t nat -A PREROUTING -d 192.168.1.1/24 --dport 80 -j DNAT --to-destination 192.168.1.11:80
将对192.168.1.1:80的数据包发送到192.168.1.11:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
将对本地80端口的数据包重定向到8080
你可能感兴趣的:(iptables 指南)
Go项目上线部署最佳实践:Docker容器化从入门到进阶
程序员爱钓鱼
qt 开发语言 golang 后端 数据库
在《Go语言实战指南》的“构建与部署”章节中,Docker容器化部署是现代Go应用发布与运维的重要方式之一。通过将Go应用打包进Docker容器,我们可以实现“构建一次,处处运行”,无论目标服务器操作系统如何,都可以保持一致的运行环境。一、为什么使用Docker容器部署Go应用?Go原生编译出的可执行文件已具备高度可移植性,但在实际部署中仍会面临以下挑战:•不同环境存在依赖不一致•需要运维脚本或部
踏上C++游戏开发之旅:初学者指南与实战代码
游戏开发是一个充满挑战和创造力的领域,而C++作为其中的一种强大工具,为开发者提供了实现他们最狂野游戏创意的能力。如果你是一个初学者,想要开始学习C++游戏开发,那么这篇文章将为你提供一条清晰的学习路径和实用的代码示例,帮助你迈出第一步。1.基础知识:C++和计算机科学在开始游戏开发之前,你需要确保自己已经掌握了C++的基本语法和一些计算机科学的基础知识。这包括但不限于:变量和数据类型控制结构(i
Mock数据
bemyrunningdog
ant design pro ubuntu linux 运维
目录AntDesignProMock使用指南一、基础配置1.创建Mock文件⚡二、高级功能1.动态数据生成(Mock.js)2.网络延迟模拟3.跨域处理三、联调切换至真实接口1.关闭Mock2.代理到真实后端⚠️四、常见问题解决1.线上部署Mock2.页面刷新404五、最佳实践六、完整示例用户管理模块MockService层调用组件中使用总结流程图AntDesignProMock使用指南基于Umi
AntDesignPro动态路由配置全攻略
bemyrunningdog
前后端
目录AntDesignPro前后端动态路由配置指南(TypeScript+Java)一、整体架构二、Java后端实现1.数据库设计(MySQL)2.实体类定义3.DTO对象4.服务层实现5.控制器三、前端实现(TypeScript)1.定义路由类型2.路由转换器3.应用配置(app.tsx)4.路由加载优化四、权限控制整合1.Java端权限检查2.前端权限整合五、部署优化方案六、生产环境建议七、完
Python编程菜鸟教程:从入门到精通的完全指南_python菜鸟教程
2401_89285717
python 开发语言
我们将介绍Python在数据科学、机器学习、Web开发等方面的应用,并带你了解Python社区和生态系统。基础入门Python安装:在官方网站下载安装包,根据不同操作系统进行安装。Mac用户可直接使用Homebrew进行安装Windows用户需下载安装包后进行手动安装Linux用户可使用apt-get或yum进行安装基础语法:Python是一种解释型语言,支持面向对象、函数式和面向过程等多种编程范
Python Pandas库超详细教程:从入门到精通实战指南
stormsha
Python python pandas 开发语言 python3.11 数据分析
欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:「stormsha的主页」,「stormsha的知识库」持续学习,不断总结,共同进步,为了踏实,做好当下事儿~非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。✨✨欢迎订阅本专栏✨✨TheStart点点关注,收藏不迷路文章目录Pyt
PHP/Laravel + Vue3 + MySQL + Docker 项目搭建全流程指南(Al总结版未测试未编辑)
野生yumeko
php laravel mysql
PHP/Laravel+Vue3+MySQL+Docker项目搭建全流程指南一、环境准备(仅需Docker)安装DockerDesktopWindows/macOS:下载DockerDesktop并安装。Linux:安装docker-ce和docker-compose-plugin。#Ubuntu示例sudoaptupdate&&sudoaptinstalldocker-cedocker-comp
【Go语言-Day 7】循环控制全解析:从 for 基础到 for-range 遍历与高级控制
Langchain系列文章目录01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南02-玩转LangChainMemory模块:四种记忆类型详解及应用场景全覆盖03-全面掌握LangChain:从核心链条构建到动态任务分配的实战指南04-玩转LangChain:从文档加载到高效问答系统构建的全程实战05-玩转LangChain:深度评估问答系统的三种高效方法(示例生成、手
【Go语言-Day 5】掌握Go的运算脉络:算术、逻辑到位的全方位指南
吴师兄大模型
Go 语言从入门到精通 golang 开发语言 后端 人工智能 python go语言 LLM
Langchain系列文章目录01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南02-玩转LangChainMemory模块:四种记忆类型详解及应用场景全覆盖03-全面掌握LangChain:从核心链条构建到动态任务分配的实战指南04-玩转LangChain:从文档加载到高效问答系统构建的全程实战05-玩转LangChain:深度评估问答系统的三种高效方法(示例生成、手
Python os库完全指南:文件操作必备
晨曦543210
Python启航之路 python 开发语言
一、简介Python的os库。这个库主要用于和操作系统交互,比如管理文件、目录、运行系统命令等。二、导入库importos三、基础操作获取当前工作目录current_dir=os.getcwd()print("当前目录:",current_dir)切换目录os.chdir("/path/to/new/directory")列出目录内容files=os.listdir()#不传参数则默认当前目录pr
Python JSON操作完全指南
目录一、简介二、JSON和Python的对应关系三、核心函数1.json.dumps():将Python对象→JSON字符串2.json.loads():将JSON字符串→Python对象3.json.dump():将Python对象→JSON文件4.json.load():从JSON文件→Python对象四、常见错误处理1.JSON解析错误2.类型不支持错误五、总结六、常用函数1️⃣json.d
FTP太不安全了?SFTP 替代方案构建企业级文件传输服务全指南
你有没有遇到过这种事?某天凌晨,公司官网突然崩了,运维排查一整圈,最后发现是某个FTP用户密码泄露被人植入了木马网页。那一刻你可能才突然意识到,FTP这玩意儿,居然还在你们系统里悄悄跑着,而且还是“裸奔”。不夸张地说,FTP在今天的互联网环境下已经是“古董级危险品”了。所以,我们今天不讲理论,不聊历史,只聊一件事:用SFTP替换FTP,怎么一步步在企业环境里真正落地?为什么FTP是“老虎凳”,而不
2025上半年最新华为OD机试与面试指南,最新2025B卷独家总结上岸技巧,答读者问!必看!【万字长文,建议收藏】(Python/JS/C/C++)
专栏导读本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。2025年5月12日,华为官方已经将华为OD机试(A卷)切换为B卷。目前正在考的是B卷,按照华为OD往常的操作,B卷题目是由往
Sa-Token完全学习指南
目录1.Sa-Token简介1.1什么是Sa-Token?1.2Sa-Token架构图1.3Sa-Tokenvs其他框架1.4适用场景2.环境搭建与快速开始2.1Maven依赖SpringBoot环境WebFlux环境2.2基础配置application.yml配置2.3创建启动类2.4第一个登录接口2.5统一响应类2.6全局异常处理3.核心API详解3.1StpUtil核心方法登录相关APITo
Nginx完全指南 - 从入门到精通(加强版)
目录1.Nginx简介与架构原理1.1什么是Nginx?1.2Nginx的核心优势1.2.1高并发处理能力1.2.2内存占用极低1.2.3模块化架构1.3Nginx工作原理详解1.3.1Master-Worker模型1.3.2事件驱动模型1.4Nginxvs其他Web服务器2.Nginx安装与环境准备2.1安装前准备2.1.1系统要求2.1.2依赖包安装2.2安装方式详解2.2.1包管理器安装(推
Linux部署MinIO与Spring Boot整合实战指南
luoqinqin
linux spring boot 运维
一、MinIO简介与核心概念MinIO是一款高性能的分布式对象存储服务,兼容AmazonS3API,适用于存储图片、文档等非结构化数据。核心术语:Bucket:存储对象的容器(类似文件夹)Object:存储的基本单元(文件+元数据)AccessKey/SecretKey:身份验证凭证二、Linux环境MinIO部署1.单节点安装#下载二进制文件wgethttps://dl.min.io/serve
SpringBoot多数据源动态切换方案:AbstractRoutingDataSource详解
fanxbl957
Web spring boot 后端 java
博主介绍:Java、Python、js全栈开发“多面手”,精通多种编程语言和技术,痴迷于人工智能领域。秉持着对技术的热爱与执着,持续探索创新,愿在此分享交流和学习,与大家共进步。DeepSeek-行业融合之万象视界(附实战案例详解100+)全栈开发环境搭建运行攻略:多语言一站式指南(环境搭建+运行+调试+发布+保姆级详解)感兴趣的可以先收藏起来,希望帮助更多的人SpringBoot多数据源动态切换
单调栈通关指南:从力扣 84 到力扣 42
无聊的小坏坏
算法 leetcode 算法 C++
文章目录问题描述:柱状图中最大的矩形(力扣84)暴力解法思路分析代码实现暴力解法痛点分析关键观察:边界的单调性单调栈的引入:用栈维护有效边界双遍遍历解法:单调栈的基础应用常数优化:一次遍历完成边界计算优化的关键依据:出栈元素与当前元素的关系右边界的默认值设定一次遍历的完整逻辑代码实现优化后的复杂度分析总结:从暴力到单调栈的核心转变扩展:接雨水问题中的单调栈应用力扣42:接雨水接雨水问题中单调栈的使
企业级多模型服务架构(MaaS)私有部署实战指南:统一调度、模型隔离与服务编排全路径解析
观熵
架构 人工智能 私有化部署
企业级多模型服务架构(MaaS)私有部署实战指南:统一调度、模型隔离与服务编排全路径解析关键词:多模型服务架构、MaaS、私有化部署、模型管理、推理调度、模型编排、TritonInferenceServer、DeepSeek、模型隔离、企业级AI平台摘要:随着企业对多任务、多模型能力的需求日益增长,MaaS(Model-as-a-Service)架构已成为私有部署中的关键支撑技术之一。该文聚焦当前
Git Submodule的使用指南
一、GitSubmodule核心概念作用:将外部Git仓库作为子模块嵌入主项目,保持独立版本控制。关键文件:.gitmodules:记录子模块路径与远程URL(首次添加时自动生成)。.git/config:本地子模块配置信息(通过gitsubmoduleinit同步)。指针机制:主仓库仅记录子模块的CommitID,不跟踪其文件变化。二、分步操作详解1.添加子模块#语法gitsubmodulead
Git 子模块 (Submodule) 完全使用指南
BIBI2049
版本托管 Git Windows git TortoiseGit 子模块
Git子模块(Submodule)完全使用指南核心原理解析:子模块是什么?想象一下,你在开发一个大项目(父项目),需要用到另一个独立的项目(例如一个公共库、一个UI组件库)。你不想直接复制粘贴它的代码,因为那样就无法方便地获取那个库的后续更新。Git子模块就是来解决这个问题的。它允许你将一个Git仓库作为另一个Git仓库的子目录。最重要的核心原理:父项目不存储子模块的所有文件内容。它只存储一个“指
深入剖析F5、DNS、LVS、Nginx、Tomcat:Java架构师的流量分发指南(一)
呢喃coding
系统架构设计 java lvs nginx
深入剖析F5、DNS、LVS、Nginx、Tomcat:Java架构师的流量分发指南在Java架构设计中,流量分发是保障系统高性能、高可用的关键环节。F5、DNS、LVS、Nginx和Tomcat在流量分发处理中各自扮演着独特的角色,深入理解它们对于Java架构师来说至关重要。一、F5:企业级的应用交付利器(一)功能与特性F5是一款企业级的应用交付网络(ADN)设备,它集负载均衡、应用安全、SSL
C#读取文件夹和文件列表:全面指南
阿蒙Armon
C#工作中的应用 c# 开发语言 服务器
C#读取文件夹和文件列表:全面指南在C#开发中,经常需要获取文件夹中的文件列表或子文件夹结构,例如文件管理器、批量处理工具、备份程序等场景。本文将详细介绍C#中读取文件夹和文件列表的各种方法,包括基础操作、递归遍历、过滤搜索、高级属性获取等,帮助开发者根据实际需求选择最合适的实现方式。一、基础方法:使用Directory类的静态方法System.IO.Directory类提供了一系列静态方法,可快
鸿蒙分布式开发实战指南:让设备协同像操作本地一样简单
harmonyos
摘要在如今设备高度互联的时代,一个用户往往会同时使用手机、平板、电视、手表等多个设备。鸿蒙系统基于“分布式能力”,让多个设备协同工作变得更简单,比如手机控制电视播放、手表调节空调,甚至多设备之间自动分工协作。这篇文章就带你从开发者角度出发,手把手了解鸿蒙分布式能力的实现方式。引言:为什么要用鸿蒙的分布式能力?随着物联网的发展,单设备运行逻辑已经难以满足日常复杂场景。鸿蒙系统设计了独特的分布式架构,
Ubuntu下搜狗输入法安装记录(解决安装好后仍旧无法输入中文的问题)
主要参考为博客https://blog.csdn.net/fangshuo_light/article/details/123634224以及搜狗官方给到的安装指南https://shurufa.sogou.com/linux/guide遇到问题使用dpkg安装在搜狗官网下载的Linuxdeb安装包sudodpkg-isogoupinyin_4.2.1.145_amd64.deb此时,按照官方的安
AI初学者如何对大模型进行微调?——零基础保姆级实战指南
仅需8GB显存,三步完成个人专属大模型训练四步实战:从环境配置到模型发布步骤1:云端环境搭建(10分钟)推荐使用阿里魔塔ModelScope免费GPU资源:#注册后执行环境初始化pip3install--upgradepippip3installbitsandbytes>=0.39.0gitclone--depth1https://github.com/hiyouga/LLaMA-Factory.
MCP客户端请求MCP服务器资源的Python SDK实现
AI天才研究院
计算 AI人工智能与大数据 Python实战 python 开发语言 ai 服务器
我将为您提供一个详细的指南,说明如何使用PythonSDK让MCP客户端请求MCP服务器的资源。MCP客户端请求MCP服务器资源的PythonSDK实现核心概念ModelContextProtocol(MCP)是一个标准化协议,允许应用程序以标准化的方式为大语言模型(LLM)提供上下文,将提供上下文的关注点与实际的LLM交互分离。MCP中的资源(Resources)是一种核心原语,允许服务器暴露数
Python Set() 完全指南:从入门到精通
2501_91537435
python python 开发语言
PythonSet()完全指南:从入门到精通Set(集合)是Python中一种非常有用的内置数据类型,它提供了高效的成员检测和消除重复元素的功能。本文将带你全面了解Python中的set(),从基础概念到高级用法。一、什么是Set?Set是Python中的一种无序、可变、不重复元素的集合数据类型。它类似于数学中的集合概念,支持并集、交集、差集等操作。#创建一个setfruits={'apple',
Apache SeaTunnel × Hive 深度集成指南:原理、配置与实践
数据库
在大数据处理的复杂生态中,数据的高效流转与整合是实现数据价值的关键。ApacheSeaTunnel作为一款高性能、分布式、易扩展的数据集成框架,能够快速实现海量数据的实时采集、转换和加载;而ApacheHive作为经典的数据仓库工具,为结构化数据的存储、查询和分析提供了坚实的基础。将ApacheSeaTunnel与Hive进行集成,能够充分发挥两者的优势,构建起高效的数据处理链路,满足企业多样化的
鸿蒙分布式开发实战指南:让设备协同像操作本地一样简单
前端世界
harmonyos harmonyos 分布式 华为
摘要在如今设备高度互联的时代,一个用户往往会同时使用手机、平板、电视、手表等多个设备。鸿蒙系统基于“分布式能力”,让多个设备协同工作变得更简单,比如手机控制电视播放、手表调节空调,甚至多设备之间自动分工协作。这篇文章就带你从开发者角度出发,手把手了解鸿蒙分布式能力的实现方式。引言:为什么要用鸿蒙的分布式能力?随着物联网的发展,单设备运行逻辑已经难以满足日常复杂场景。鸿蒙系统设计了独特的分布式架构,
遍历dom 并且存储(将每一层的DOM元素存在数组中)
换个号韩国红果果
JavaScript html
数组从0开始!!
var a=[],i=0;
for(var j=0;j<30;j++){
a[j]=[];//数组里套数组,且第i层存储在第a[i]中
}
function walkDOM(n){
do{
if(n.nodeType!==3)//筛选去除#text类型
a[i].push(n);
//con
Android+Jquery Mobile学习系列(9)-总结和代码分享
白糖_
JQuery Mobile
目录导航
经过一个多月的边学习边练手,学会了Android基于Web开发的毛皮,其实开发过程中用Android原生API不是很多,更多的是HTML/Javascript/Css。
个人觉得基于WebView的Jquery Mobile开发有以下优点:
1、对于刚从Java Web转型过来的同学非常适合,只要懂得HTML开发就可以上手做事。
2、jquerym
impala参考资料
dayutianfei
impala
记录一些有用的Impala资料
1. 入门资料
>>官网翻译:
http://my.oschina.net/weiqingbin/blog?catalog=423691
2. 实用进阶
>>代码&架构分析:
Impala/Hive现状分析与前景展望:http
JAVA 静态变量与非静态变量初始化顺序之新解
周凡杨
java 静态 非静态 顺序
今天和同事争论一问题,关于静态变量与非静态变量的初始化顺序,谁先谁后,最终想整理出来!测试代码:
import java.util.Map;
public class T {
public static T t = new T();
private Map map = new HashMap();
public T(){
System.out.println(&quo
跳出iframe返回外层页面
g21121
iframe
在web开发过程中难免要用到iframe,但当连接超时或跳转到公共页面时就会出现超时页面显示在iframe中,这时我们就需要跳出这个iframe到达一个公共页面去。
首先跳转到一个中间页,这个页面用于判断是否在iframe中,在页面加载的过程中调用如下代码:
<script type="text/javascript">
//<!--
function
JAVA多线程监听JMS、MQ队列
510888780
java多线程
背景:消息队列中有非常多的消息需要处理,并且监听器onMessage()方法中的业务逻辑也相对比较复杂,为了加快队列消息的读取、处理速度。可以通过加快读取速度和加快处理速度来考虑。因此从这两个方面都使用多线程来处理。对于消息处理的业务处理逻辑用线程池来做。对于加快消息监听读取速度可以使用1.使用多个监听器监听一个队列;2.使用一个监听器开启多线程监听。
对于上面提到的方法2使用一个监听器开启多线
第一个SpringMvc例子
布衣凌宇
spring mvc
第一步:导入需要的包;
第二步:配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi=
我的spring学习笔记15-容器扩展点之PropertyOverrideConfigurer
aijuans
Spring3
PropertyOverrideConfigurer类似于PropertyPlaceholderConfigurer,但是与后者相比,前者对于bean属性可以有缺省值或者根本没有值。也就是说如果properties文件中没有某个bean属性的内容,那么将使用上下文(配置的xml文件)中相应定义的值。如果properties文件中有bean属性的内容,那么就用properties文件中的值来代替上下
通过XSD验证XML
antlove
xml schema xsd validation SchemaFactory
1. XmlValidation.java
package xml.validation;
import java.io.InputStream;
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schem
文本流与字符集
百合不是茶
PrintWrite()的使用 字符集名字 别名获取
文本数据的输入输出;
输入;数据流,缓冲流
输出;介绍向文本打印格式化的输出PrintWrite();
package 文本流;
import java.io.FileNotFound
ibatis模糊查询sqlmap-mapping-**.xml配置
bijian1013
ibatis
正常我们写ibatis的sqlmap-mapping-*.xml文件时,传入的参数都用##标识,如下所示:
<resultMap id="personInfo" class="com.bijian.study.dto.PersonDTO">
<res
java jvm常用命令工具——jdb命令(The Java Debugger)
bijian1013
java jvm jdb
用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。
现在应该说日常的开发中很少用到JDB了,因为现在的IDE已经帮我们封装好了,如使用ECLI
【Spring框架二】Spring常用注解之Component、Repository、Service和Controller注解
bit1129
controller
在Spring常用注解第一步部分【Spring框架一】Spring常用注解之Autowired和Resource注解(http://bit1129.iteye.com/blog/2114084)中介绍了Autowired和Resource两个注解的功能,它们用于将依赖根据名称或者类型进行自动的注入,这简化了在XML中,依赖注入部分的XML的编写,但是UserDao和UserService两个bea
cxf wsdl2java生成代码super出错,构造函数不匹配
bitray
super
由于过去对于soap协议的cxf接触的不是很多,所以遇到了也是迷糊了一会.后来经过查找资料才得以解决. 初始原因一般是由于jaxws2.2规范和jdk6及以上不兼容导致的.所以要强制降为jaxws2.1进行编译生成.我们需要少量的修改:
我们原来的代码
wsdl2java com.test.xxx -client http://.....
修改后的代
动态页面正文部分中文乱码排障一例
ronin47
公司网站一部分动态页面,早先使用apache+resin的架构运行,考虑到高并发访问下的响应性能问题,在前不久逐步开始用nginx替换掉了apache。 不过随后发现了一个问题,随意进入某一有分页的网页,第一页是正常的(因为静态化过了);点“下一页”,出来的页面两边正常,中间部分的标题、关键字等也正常,唯独每个标题下的正文无法正常显示。 因为有做过系统调整,所以第一反应就是新上
java-54- 调整数组顺序使奇数位于偶数前面
bylijinnan
java
import java.util.Arrays;
import java.util.Random;
import ljn.help.Helper;
public class OddBeforeEven {
/**
* Q 54 调整数组顺序使奇数位于偶数前面
* 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半
从100PV到1亿级PV网站架构演变
cfyme
网站架构
一个网站就像一个人,存在一个从小到大的过程。养一个网站和养一个人一样,不同时期需要不同的方法,不同的方法下有共同的原则。本文结合我自已14年网站人的经历记录一些架构演变中的体会。 1:积累是必不可少的
架构师不是一天练成的。
1999年,我作了一个个人主页,在学校内的虚拟空间,参加了一次主页大赛,几个DREAMWEAVER的页面,几个TABLE作布局,一个DB连接,几行PHP的代码嵌入在HTM
[宇宙时代]宇宙时代的GIS是什么?
comsci
Gis
我们都知道一个事实,在行星内部的时候,因为地理信息的坐标都是相对固定的,所以我们获取一组GIS数据之后,就可以存储到硬盘中,长久使用。。。但是,请注意,这种经验在宇宙时代是不能够被继续使用的
宇宙是一个高维时空
详解create database命令
czmmiao
database
完整命令
CREATE DATABASE mynewdb USER SYS IDENTIFIED BY sys_password USER SYSTEM IDENTIFIED BY system_password LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/m
几句不中听却不得不认可的话
datageek
1、人丑就该多读书。
2、你不快乐是因为:你可以像猪一样懒,却无法像只猪一样懒得心安理得。
3、如果你太在意别人的看法,那么你的生活将变成一件裤衩,别人放什么屁,你都得接着。
4、你的问题主要在于:读书不多而买书太多,读书太少又特爱思考,还他妈话痨。
5、与禽兽搏斗的三种结局:(1)、赢了,比禽兽还禽兽。(2)、输了,禽兽不如。(3)、平了,跟禽兽没两样。结论:选择正确的对手很重要。
6
1 14:00 PHP中的“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误
dcj3sjt126com
PHP
原文地址:http://www.kafka0102.com/2010/08/281.html
因为需要,今天晚些在本机使用PHP做些测试,PHP脚本依赖了一堆我也不清楚做什么用的库。结果一跑起来,就报出类似下面的错误:“Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /home/kafka/test/
xcode6 Auto layout and size classes
dcj3sjt126com
ios
官方GUI
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/Introduction/Introduction.html
iOS中使用自动布局(一)
http://www.cocoachina.com/ind
通过PreparedStatement批量执行sql语句【sql语句相同,值不同】
梦见x光
sql 事务 批量执行
比如说:我有一个List需要添加到数据库中,那么我该如何通过PreparedStatement来操作呢?
public void addCustomerByCommit(Connection conn , List<Customer> customerList)
{
String sql = "inseret into customer(id
程序员必知必会----linux常用命令之十【系统相关】
hanqunfeng
Linux常用命令
一.linux快捷键
Ctrl+C : 终止当前命令
Ctrl+S : 暂停屏幕输出
Ctrl+Q : 恢复屏幕输出
Ctrl+U : 删除当前行光标前的所有字符
Ctrl+Z : 挂起当前正在执行的进程
Ctrl+L : 清除终端屏幕,相当于clear
二.终端命令
clear : 清除终端屏幕
reset : 重置视窗,当屏幕编码混乱时使用
time com
NGINX
IXHONG
nginx
pcre 编译安装 nginx
conf/vhost/test.conf
upstream admin {
server 127.0.0.1:8080;
}
server {
listen 80;
&
设计模式--工厂模式
kerryg
设计模式
工厂方式模式分为三种:
1、普通工厂模式:建立一个工厂类,对实现了同一个接口的一些类进行实例的创建。
2、多个工厂方法的模式:就是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式就是提供多个工厂方法,分别创建对象。
3、静态工厂方法模式:就是将上面的多个工厂方法模式里的方法置为静态,
Spring InitializingBean/init-method和DisposableBean/destroy-method
mx_xiehd
java spring bean xml
1.initializingBean/init-method
实现org.springframework.beans.factory.InitializingBean接口允许一个bean在它的所有必须属性被BeanFactory设置后,来执行初始化的工作,InitialzingBean仅仅指定了一个方法。
通常InitializingBean接口的使用是能够被避免的,(不鼓励使用,因为没有必要
解决Centos下vim粘贴内容格式混乱问题
qindongliang1922
centos vim
有时候,我们在向vim打开的一个xml,或者任意文件中,拷贝粘贴的代码时,格式莫名其毛的就混乱了,然后自己一个个再重新,把格式排列好,非常耗时,而且很不爽,那么有没有办法避免呢? 答案是肯定的,设置下缩进格式就可以了,非常简单: 在用户的根目录下 直接vi ~/.vimrc文件 然后将set pastetoggle=<F9> 写入这个文件中,保存退出,重新登录,
netty大并发请求问题
tianzhihehe
netty
多线程并发使用同一个channel
java.nio.BufferOverflowException: null
at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:183) ~[na:1.7.0_60-ea]
at java.nio.ByteBuffer.put(ByteBuffer.java:832) ~[na:1.7.0_60-ea]
Hadoop NameNode单点问题解决方案之一 AvatarNode
wyz2009107220
NameNode
我们遇到的情况
Hadoop NameNode存在单点问题。这个问题会影响分布式平台24*7运行。先说说我们的情况吧。
我们的团队负责管理一个1200节点的集群(总大小12PB),目前是运行版本为Hadoop 0.20,transaction logs写入一个共享的NFS filer(注:NetApp NFS Filer)。
经常遇到需要中断服务的问题是给hadoop打补丁。 DataNod