Python实现网络通信:Socket模块与TCP/IP协议全解析
Langchain系列文章目录
01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南
02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖
03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南
04-玩转 LangChain:从文档加载到高效问答系统构建的全程实战
05-玩转 LangChain:深度评估问答系统的三种高效方法(示例生成、手动评估与LLM辅助评估)
06-从 0 到 1 掌握 LangChain Agents:自定义工具 + LLM 打造智能工作流!
python系列文章目录
01-Python 基础语法入门:从变量到输入输出,零基础也能学会!
02-Python 流程控制终极指南:if-else 和 for-while深度解析
03-Python 列表与元组全攻略:从新手到高手的必备指南
04-Python 字典与集合:从入门到精通的全面解析
05-Python函数入门指南:从定义到应用
06-Python 函数高级特性:从默认参数到闭包的全面解析
07-Python 模块与包:从零到自定义的全面指南
08-Python异常处理:从入门到精通的实用指南
09-Python 文件操作:从零基础到日志记录实战
10-Python面向对象编程入门:从类与对象到方法与属性
11-Python类的方法与属性:从入门到进阶的全面解析
12-Python继承与多态:提升代码复用与灵活性的关键技术
13-掌握Python魔法方法:如何用__add__和__len__自定义类的行为
14-python面向对象编程总结:从基础到进阶的 OOP 核心思想与设计技巧
15-掌握 Python 高级特性:深入理解迭代器与生成器
16-用 Python 装饰器提升效率:日志与权限验证案例
17-再也不怕资源泄漏!Python 上下文管理器,with语句全攻略
18-Python 标准库必备模块:math、random、os、json 全解析
19-Python 性能优化:从入门到精通的实用指南
20-Python内存管理与垃圾回收全解析
21-Python 代码调试与测试:从 pdb 到 TDD 的全面指南
22-Python 代码风格终极指南:从 PEP 8 到最佳实践全解析
23-Python实现网络通信:Socket模块与TCP/IP协议全解析
文章目录
- Langchain系列文章目录
- python系列文章目录
- 前言
- 一、TCP/IP协议概述
- 1.1 什么是TCP/IP协议
- 1.2 TCP/IP协议的分层结构
- 1.2.1 应用层
- 1.2.2 传输层
- 1.2.3 网络层
- 1.2.4 链路层
- 二、使用`socket`模块实现网络通信
- 2.1 什么是`socket`
- 2.2 创建`socket`对象
- 2.3 `socket`的基本方法
- 2.3.1 绑定地址和端口
- 2.3.2 监听连接
- 2.3.3 接受连接
- 2.3.4 发送和接收数据
- 三、客户端与服务器端程序
- 3.1 服务器端程序
- 3.1.1 创建服务器`socket`
- 3.1.2 绑定地址和端口
- 3.1.3 监听连接
- 3.1.4 接受客户端连接
- 3.1.5 处理客户端请求
- 3.2 客户端程序
- 3.2.1 创建客户端`socket`
- 3.2.2 连接服务器
- 3.2.3 发送数据
- 3.2.4 接收数据
- 四、总结
前言
在互联网时代,网络编程是每个开发者都值得掌握的核心技能之一。从网页浏览到即时聊天,再到物联网设备之间的通信,网络编程无处不在。作为Python学习旅程的第23天,我们将迈入网络编程的世界,探索其基础知识。本文将从TCP/IP协议的基本概念讲起,逐步深入到使用Python的socket
模块实现网络通信,并通过实际代码带你编写客户端和服务器端程序。
无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供清晰的知识框架和实用的代码示例。让我们一起开启这场网络编程的探索之旅吧!
一、TCP/IP协议概述
网络编程的核心在于理解通信协议,而TCP/IP协议是互联网的基石。本节将带你了解它的基本概念和分层结构,帮助你建立网络通信的整体认知。
1.1 什么是TCP/IP协议
TCP/IP协议全称“传输控制协议/网际协议”,是一组用于实现网络通信的协议集合。它定义了设备如何连接到网络,以及数据如何在设备间传输。简单来说,TCP/IP就像网络世界的“交通规则”,确保数据能够准确、高效地到达目的地。
- TCP(传输控制协议):负责数据的可靠传输,保证数据按顺序到达且不丢失。
- IP(网际协议):负责数据的寻址和路由,决定数据从哪里发到哪里。
1.2 TCP/IP协议的分层结构
TCP/IP协议采用四层模型,每一层都有明确的功能。通过分层设计,网络通信变得模块化且易于理解。
1.2.1 应用层
应用层是用户直接接触的部分,负责处理应用程序的通信需求。例如:
- HTTP:浏览网页时使用。
- FTP:传输文件时使用。
- SMTP:发送邮件时使用。
1.2.2 传输层
传输层确保数据的端到端传输,提供可靠性或高效性两种选择:
- TCP:面向连接,保证数据完整,适用于需要高可靠性的场景(如文件下载)。
- UDP:无连接,速度快但不保证数据到达,适用于实时性要求高的场景(如视频直播)。
1.2.3 网络层
网络层负责数据的路由和转发,核心协议是IP。它为每台设备分配一个IP地址,并决定数据包的传输路径。
1.2.4 链路层
链路层是最底层,负责将数据封装成帧并通过物理网络(如以太网或Wi-Fi)传输。它处理硬件相关的工作,如MAC地址。
通过这四层的协作,TCP/IP协议让网络通信变得井然有序。如下图展示了其分层结构:
二、使用socket
模块实现网络通信
Python提供了强大的socket
模块,让我们能够轻松实现网络通信。本节将从socket
的基本概念入手,逐步讲解它的用法。
2.1 什么是socket
socket
(套接字)是网络通信的桥梁,可以看作是应用程序与网络之间的“插座”。通过socket
,程序可以发送和接收数据,实现设备间的通信。
- 应用场景:聊天软件、文件传输工具、Web服务器等都离不开
socket
。 - 类型:常见的有TCP socket(可靠传输)和UDP socket(快速传输)。
2.2 创建socket
对象
在Python中,使用socket
模块的socket()
函数创建socket
对象。需要指定地址族和套接字类型:
import socket# 创建TCP socket (AF_INET表示IPv4,SOCK_STREAM表示TCP)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- 地址族:
AF_INET
表示IPv4,AF_INET6
表示IPv6。 - 类型:
SOCK_STREAM
用于TCP,SOCK_DGRAM
用于UDP。
2.3 socket
的基本方法
创建socket
后,我们可以通过一系列方法实现通信。以下是常用的操作步骤:
2.3.1 绑定地址和端口
服务器端需要将socket
绑定到特定的IP地址和端口号,以便客户端可以找到它:
# 绑定到本机IP (127.0.0.1) 和端口8080
sock.bind(('127.0.0.1', 8080))
- 参数:一个元组,包含IP地址(字符串)和端口号(整数)。
- 常见问题:如果端口被占用,会抛出
OSError
,可以尝试换一个端口。
2.3.2 监听连接
绑定后,服务器端需要调用listen()
开始监听客户端连接:
# 监听连接,5表示最大等待连接数
sock.listen(5)
2.3.3 接受连接
当客户端发起连接时,服务器使用accept()
接受连接,返回一个新的socket
对象和客户端地址:
# 接受连接
client_sock, client_addr = sock.accept()
print(f"连接来自:{client_addr}")
- 返回值:
client_sock
用于与该客户端通信,client_addr
是客户端的IP和端口。
2.3.4 发送和接收数据
通信的核心是数据的发送和接收,使用send()
和recv()
方法:
# 发送数据 (数据需为字节类型)
client_sock.send(b"Hello, client!")# 接收数据 (1024表示最大接收字节数)
data = client_sock.recv(1024)
print(f"收到数据:{data.decode()}")
- 注意:发送数据前需编码(如
encode()
),接收后需解码(如decode()
)。
三、客户端与服务器端程序
掌握了socket
的基本用法后,我们通过实际代码实现一个简单的客户端-服务器通信系统。服务器端接收消息并回显,客户端发送消息并显示响应。
3.1 服务器端程序
服务器端程序负责监听连接并处理客户端请求。以下是完整实现:
3.1.1 创建服务器socket
import socket# 创建TCP socket
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3.1.2 绑定地址和端口
# 绑定到本机8080端口
server_sock.bind(('127.0.0.1', 8080))
3.1.3 监听连接
# 开始监听
server_sock.listen(5)
print("服务器启动,监听端口8080...")
3.1.4 接受客户端连接
while True:# 接受连接client_sock, client_addr = server_sock.accept()print(f"客户端 {client_addr} 已连接")
3.1.5 处理客户端请求
# 处理请求while True:data = client_sock.recv(1024)if not data: # 客户端断开时data为空breakprint(f"收到消息:{data.decode()}")client_sock.send(data) # 回显消息client_sock.close()
完整代码:
import socketserver_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.bind(('127.0.0.1', 8080))
server_sock.listen(5)
print("服务器启动,监听端口8080...")while True:client_sock, client_addr = server_sock.accept()print(f"客户端 {client_addr} 已连接")while True:data = client_sock.recv(1024)if not data:breakprint(f"收到消息:{data.decode()}")client_sock.send(data)client_sock.close()
运行结果:启动后,服务器会等待客户端连接,并回显收到的消息。
3.2 客户端程序
客户端程序主动连接服务器,发送消息并接收响应。
3.2.1 创建客户端socket
import socket# 创建TCP socket
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3.2.2 连接服务器
# 连接服务器
client_sock.connect(('127.0.0.1', 8080))
3.2.3 发送数据
# 发送消息
client_sock.send(b"Hello, server!")
3.2.4 接收数据
# 接收响应
data = client_sock.recv(1024)
print(f"服务器响应:{data.decode()}")
client_sock.close()
完整代码:
import socketclient_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_sock.connect(('127.0.0.1', 8080))
client_sock.send(b"Hello, server!")
data = client_sock.recv(1024)
print(f"服务器响应:{data.decode()}")
client_sock.close()
运行步骤:
- 先运行服务器端代码。
- 再运行客户端代码,观察服务器端的输出和客户端的响应。
常见问题排查:
- 连接失败:检查服务器是否已启动,IP和端口是否正确。
- 数据乱码:确保发送和接收时编码一致(如都用UTF-8)。
四、总结
通过本篇文章,我们从TCP/IP协议的基础知识入手,了解了网络通信的原理;接着通过socket
模块掌握了Python网络编程的基本方法;最后通过代码示例实现了客户端与服务器端的通信。这为你后续学习更复杂的网络编程奠定了基础。
相关文章:
Python实现网络通信:Socket模块与TCP/IP协议全解析
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
信奥赛CSP-J复赛集训(模拟算法专题)(1):P8813 [CSP-J 2022] 乘方
信奥赛CSP-J复赛集训(模拟算法专题)(1):P8813 [CSP-J 2022] 乘方 题目描述 小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 a a a 和 b b b,求 a b a^b ab …...
MongoDB学习笔记
MongoDB https://www.mongodb.com/download-center/community 打开客户端 mongo.exe 注意6.0版本不一样需要自行安装Mongoshell MongoDB Shell Download | MongoDB 创建数据库 use go_db; 创建集合 db.createCollection("student"); 添加MongoDB依赖 go get …...
C#模拟鼠标点击,模拟鼠标双击,模拟鼠标恒定速度移动,可以看到轨迹
C#模拟鼠标点击,模拟鼠标双击,模拟鼠标恒定速度移动,可以看到轨迹 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks;namespa…...
时间复杂度空间复杂度
一、时间复杂度 时间复杂度(Time Complexity)表示算法运行时间随输入规模增长的变化趋势。通常用大 O 表示法(Big O Notation)来描述。 常见时间复杂度 复杂度名称例子O(1)常数时间复杂度访问数组中的某个元素。O(log n)对数时间复…...
【科研绘图系列】R语言绘制组合箱线图(grouped boxplot)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据画图输出图片系统信息介绍 【科研绘图系列】R语言绘制组合箱线图(grouped boxplot) 加载R包 library(tidyverse) library(lemon) library(ggnewscale)…...
【前缀和与差分 C/C++】洛谷 P8218 求区间和
2025 - 03 - 09 - 第 72 篇 Author: 郑龙浩 / 仟濹 【前缀和与差分 C/C】 文章目录 洛谷 P8218 求区间和题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示思路代码 洛谷 P8218 求区间和 题目描述 给定 n n n 个正整数组成的数列 a 1 , a 2 , ⋯ , a n a_…...
数据库二三事(14)
备份与恢复数据库 备份具体内容包括数据库结构,对象与数据,造成数据丢失的原因有: 存储介质故障(硬件损耗) 用户操作错误(人工) 服务器故障(软硬都可能) 病毒侵害 …...
C++之list
list是链表的意思,由一个个节点组成 一、基本接口使用: (1)与vector相同,有个尾插,也可以使用迭代器遍历: void test_list1() {list<int> lt;lt.push_back(1);lt.push_back(2);lt.push…...
数据增强术:如何利用大模型(LLMs)来模拟不同的扰动类型以增强信息提取任务的鲁棒性
一、对抗样本库构建 1. 基于LLMs的领域针对性扰动设计对抗样本生成 替换实体、三元组和触发器(Replace Entity, Triple, and Trigger) 使用LLMs(如GPT-4)来替换句子中的实体、关系三元组或事件触发器,同时保持其类型不变,并确保其他内容不受影响: xxx名称(如“x方” →…...
《Gradio : AI awesome-demos》
《Gradio : AI awesome-demos》 This is a list of some wonderful demos & applications built with Gradio. Heres how to contribute yours! 🖊️ Natural language processing Demo name (link to demo)input type(s)output type(s)status badgeruDALL-ET…...
物联网中如何增加其可扩展性 协议 网络 设备 还包括软件层面上的
物联网(IoT)系统的可扩展性是指系统能够随着设备数量、数据流量和业务需求的增长而灵活扩展的能力。为了增加物联网的可扩展性,需要从协议、网络、设备和软件等多个层面进行优化和设计。以下是一些具体的策略和方法: 1. 协议层面的可扩展性 1.1 采用轻量级协议 轻量级协议…...
【每日学点HarmonyOS Next知识】对话框去掉圆角、数组拼接、自定义对话框依附某个控件、平移动画、页面栈管理
1、 HarmonyOS CustomDialog怎么去掉左右和底部的透明以及圆角? CustomDialog怎么去掉左右和底部的透明以及圆角 设置customStyle为true即可开启使用自定义样式。设置borderRadius为0去掉圆角属性。 属性用法参考文档:https://developer.huawei.com/c…...
Unity 通用UI界面逻辑总结
概述 在游戏开发中,常常会遇到一些通用的界面逻辑,它不论在什么类型的游戏中都会出现。为了避免重复造轮子,本文总结并提供了一些常用UI界面的实现逻辑。希望可以帮助大家快速开发通用界面模块,也可以在次基础上进行扩展修改&…...
【网络】HTTP协议、HTTPS协议
HTTP与HTTPS HTTP协议概述 HTTP(超文本传输协议):工作在OSI顶层应用层,用于客户端(浏览器)与服务器之间的通信,B/S模式 无状态:每次请求独立,服务器不保存客户端状态(通过Cookie/Session扩展状态管理)。基于TCP:默认端口80(HTTP)、443(HTTPS),保证可靠传输。请…...
计算机网络——交换机
一、什么是交换机? 交换机(Switch)是局域网(LAN)中的核心设备,负责在 数据链路层(OSI第二层)高效转发数据帧。它像一位“智能交通警察”,根据设备的 MAC地址 精准引导数…...
机器学习:愚者未完成的诗篇(零)
当算法在数据海洋中打捞支离破碎的韵律时,机器学习系统展现出的智慧如同断臂的维纳斯雕像——完美与残缺构成令人战栗的美学悖论。愚者,在词语的混沌中编织逻辑经纬,却总在即将触及诗性本质的瞬间,暴露出认知维度的致命裂隙。 一…...
解锁DeepSpeek-R1大模型微调:从训练到部署,打造定制化AI会话系统
目录 1. 前言 2.大模型微调概念简述 2.1. 按学习范式分类 2.2. 按参数更新范围分类 2.3. 大模型微调框架简介 3. DeepSpeek R1大模型微调实战 3.1.LLaMA-Factory基础环境安装 3.1大模型下载 3.2. 大模型训练 3.3. 大模型部署 3.4. 微调大模型融合基于SpirngBootVue2…...
性能测试和Jmeter
文章目录 前言性能测试理论知识什么是性能?什么是性能测试?性能测试的作用性能测试与功能测试的区别性能测试常见术语性能测试的策略基准测试负载测试稳定性测试压力测试并发测试 常见性能测试指标响应时间并发数吞吐量点击数和错误率资源使用率 性能测试…...
Linux网络之数据链路层协议
目录 数据链路层 MAC地址与IP地址 数据帧 ARP协议 NAT技术 代理服务器 正向代理 反向代理 上期我们学习了网络层中的相关协议,为IP协议。IP协议通过报头中的目的IP地址告知了数据最终要传送的目的主机的IP地址,从而指引了数据在网络中的一步…...
数据结构第八节:红黑树(初阶)
【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 ,是一种 二叉搜索树 ,但 在每个结点上增加一个存储位表示结点的颜色,可以是 Red和 Black 。 通过对 任何…...
【大模型知识点】位置编码——绝对位置编码,相对位置编码,旋转位置编码RoPE
由于Transformer 中的自注意模块具有置换不变性(不关心输入序列的顺序),因此需要使用位置编码来注入位置信息以建模序列,使模型能够区分不同位置的 token,并捕捉序列的顺序关系。 在介绍一些位置编码方法前࿰…...
【大模型篇】推理模型大作战(QwQ-32B vs DeepSeek-R1)
大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 写在前面 当我让QwQ-32B vs DeepSeek-R1 写一封未来自己的信 大家更喜欢哪种风格? QwQ-32B 模…...
【汇编语言】单片机程序执行过程
一、任务需求 指示灯LED4闪烁,亮0.5秒,灭0.5秒,无限循环 二、针对硬件的编程 1、确定原理图2、确定硬件的物理关系 三、设计步骤 1.用自己的语言描述工作流程 1.1指示灯LED4亮1.2延时0.5秒1.3指示灯LED4灭1.4延时0.5秒1.5跳转到1.1步 …...
MYSQL之创建数据库和表
创建数据库db_ck (下面的创建是最好的创建方法,如果数据库存在也不会报错,并且指定使用utf8mb4) show databases命令可以查看所有的数据库名,可以找到刚刚创建的db_ck数据库 使用该数据库时,发现里面没有…...
MybatisPlus
1.增删改查入门案例: 首先导入依赖: <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency> 然后这些增删改查…...
HCIE云计算学什么?怎么学?未来职业发展如何?
随着云计算成为IT行业发展的主流方向,HCIE云计算(华为认证云计算专家)作为华为认证体系中的高端认证之一,逐渐成为了许多网络工程师和IT从业者提升职业竞争力的重要途径。 那么,HCIE云计算究竟学什么内容,如…...
小程序 -- uni-app开发微信小程序环境搭建(HBuilder X+微信开发者工具)
目录 前言 一 软件部分 1. 微信开发者工具 2. HBuilder X 开发工具 二 配置部分 1. 关于 HBuilder X 配置 2. 关于 微信开发工具 配置 三 运行项目 1. 新建项目 2. 代码编写 3. 内置浏览器 编译 4. 配置小程序 AppID获取 注意 四 实现效果 前言 uni-app开发小程…...
多线程-线程本地变量ThreadLocal
简介 ThreadLocal是线程本地变量,用于存储独属于线程的变量,这些变量可以在同一个线程内跨方法、跨类传递。每一个ThreadLocal对象,只能为当前线程关联一个数据,如果要为当前线程关联多个数据,就需要使用多个ThreadLo…...
MuBlE:为机器人操作任务规划提供了逼真的视觉观察和精确的物理建模
2025-03-05,由华为诺亚方舟实验室、捷克技术大学和帝国理工学院联合开发的MuBlE(MuJoCo and Blender simulation Environment)模拟环境和基准测试。通过结合MuJoCo物理引擎和Blender高质量渲染,为机器人操作任务规划提供了逼真的视…...
计算机网络笔记(一)——1.1计算机网络在信息时代中的作用
21世纪的一些重要特征是数字化、网络化和信息化,它是一个以网络为核心的信息时代。要实现信息化就必须依靠完善的网络,因为网络可以迅速地传递信息。网络现在已经成为信息社会的命脉和发展知识经济的重要基础。 有三大类网络大家应该很熟悉,即…...
第十五届蓝桥杯省赛电子类单片机学习过程记录(客观题)
客观试题: 01.典型的BUCK电源电路包含哪些关键器件(ABCD) A. 电容 B. 二极管 C. 电感 D. MOSFET 解析: 典型的 BUCK 电源电路是一种降压型的直流-直流转换电路,它包含以下关键器件: A.电容:电容在电路中起到滤波的作用。输入电容用于平滑输入电压的波动,减少电源噪声对…...
计算机组成与体系结构-存储系统
主存编址 存储单元:最小存储单元,一般为4bit。每个存储单元有自己的二进制编号 存储器:多个存储单元排布而成。常见的有8*4存储器(8个4bit的存储单元) 编址内容: 按字编址:存储体的最小存储单…...
better-sqlite3之exec方法
在 better-sqlite3 中,.exec() 方法用于执行包含多个 SQL 语句的字符串。与预编译语句相比,这种方法性能较差且安全性较低,但有时它是必要的,特别是当你需要从外部文件(如 SQL 脚本)中执行多个 SQL 语句时。…...
WinUI 3 支持的三种窗口 及 受限的窗口透明
我的目标 希望能够熟悉 WinUI 3 窗口的基本使用方式,了解可能出现的问题 。 WinUI 3 支持三种窗口模式,分别为:常规窗口模式、画中画模式、全屏模式。 窗口模式:常规 即我们最常见的普通窗口。 支持:显示最大化按钮…...
【运维笔记】Navicat中删除mongo 某个时间之前的数据
【运维笔记】Navicat中删除mongo 某个时间之前的数据 一、场景与需求1.1、场景1.2、需求 二、解决方案三、实战3.1、【Navicat】使用sql语句 (推荐)Step 1:使用查询窗口 - 查询Step 2:确认第一步的数据是否是需要删除的数据Step 3…...
java2025年常见设计模式面试题
1. 请解释建造者模式(Builder Pattern)及其应用场景。 答案: 建造者模式用于创建一个复杂的对象,同时允许用户只通过指定复杂对象的类型和内容就能构建它们,隐藏了复杂的构建逻辑。 示例: public class C…...
Docker部署Ragflow(完美解决502 bad gateway)
Docker快速启动Ragflow:Dev 系统准备 ubuntu server 24.04 CPU ≥ 4 cores (x86);RAM ≥ 16 GB;Disk ≥ 100 GB; 更新系统 sudo apt update 下载源码 git clone https://github.com/infiniflow/ragflow.git cd ragflow/docker # 切换稳定版本分支 git checkout -f v0.17.…...
算法中的背包问题详解:部分背包与0-1背包
1. 背包问题概述 背包问题是组合优化中的经典问题,其核心目标是:在给定容量的背包中装入一组物品,使得物品的总价值最大化。根据物品是否可分割或重复选择,背包问题分为多个变种,其中最常见的两种是: 部分…...
Stream特性(踩坑):惰性执行、不修改原始数据源
在日常开发中,Stream API 提供了一种高效且易于使用的工具集来处理集合数据。 本文主要讲解 Stream 的两个特性:惰性执行,不修改原始数据源。 为什么说这两个、而不讲下其他的特性呢?主要是因为在开发中如果忽略这两个特性的话&…...
Varlens(手机上的单反)Ver.1.9.3 高级版.apk
Varlens 是一款专业级手机摄影软件,旨在通过丰富的功能和高自由度参数调节,让手机拍摄效果媲美微单相机。以下是核心功能总结: 一、核心功能 专业拍摄模式 支持手动/自动/程序模式,可调节ISO、快门速度、EV、白平衡等参数27 提供…...
【无监督学习】层次聚类步骤及matlab实现
层次聚类 (四)层次聚类1.算法步骤2.MATLAB 实现参考资料 (四)层次聚类 层次聚类是一种通过逐层合并或分裂数据点构建树状结构(树状图,Dendrogram)的聚类方法。它分为两种类型: 凝聚…...
uploadlabs通关思路
目录 靶场准备 复现 pass-01 代码审计 执行逻辑 文件上传 方法一:直接修改或删除js脚本 方法二:修改文件后缀 pass-02 代码审计 文件上传 1. 思路 2. 实操 pass-03 代码审计 过程: 文件上传 pass-04 代码审计 文件上传 p…...
doris:Elasticsearch
Elasticsearch Catalog 除了支持自动映射 ES 元数据外,也可以利用 Doris 的分布式查询规划能力和 ES(Elasticsearch) 的全文检索能力相结合,提供更完善的 OLAP 分析场景解决方案: ES 中的多 index 分布式 Join 查询。 Doris 和 ES 中的表联合…...
JetBrains学生申请
目录 JetBrains学生免费授权申请 IDEA安装与使用 第一个JAVA代码 1.利用txt文件和cmd命令运行 2.使用IDEA新建项目 JetBrains学生免费授权申请 本教程采用学生校园邮箱申请,所以要先去自己的学校申请校园邮箱。 进入JetBrains官网 点击立即申请,然…...
PDFMathTranslate安装使用
PDF全文翻译!!!! PDFMathTranslate安装使用 它是个啥 PDFMathTranslate 可能是一个用于 PDF 文件的数学公式翻译 工具。它可能包含以下功能: 提取 PDF 内的数学公式 将数学公式转换成 LaTeX 代码 翻译数学公式的内…...
清华北大推出的 DeepSeek 教程(附 PDF 下载链接)
清华和北大分别都有关于DeepSeek的分享文档,内容非常全面,从原理和具体的应用,大家可以认真看看。 北大 DeepSeek 系列 1:提示词工程和落地场景.pdf 北大 DeepSeek 系列 2:DeepSeek 与 AIGC 应用.pdf 清华 Deep…...
2025-03-09 学习记录--C/C++-PTA 练习11-4 字符定位(最后一次找到的字符)
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 裁判测试程序样例: #include <stdio.h> char *match(char *s, char ch); int main(void …...
C语言数据结构之顺序表
目录 1.线性表 2.顺序表 2.1.静态顺序表 2.2.动态顺序表 2.2.1.初始化 2.2.2.清空顺序表 2.2.3.扩容+尾插 2.2.4.尾出函数 2.2.5.头插函数 2.2.6.头出函数 2.2.7.在中间位置插入 2.2.8.删除中间位置数据 2.2.9.查找函数 2.2.10.总结 3.OJ例题 3.1.合…...
【Git】合并冲突
合并冲突 可是,在实际分支合并的时候,并不是想合并就能合并成功的,有时候可能会遇到代码冲突的问题。 为了演示这问题,创建一个新的分支 dev1 ,并切换至目标分支,我们可以使用 git checkout -b dev1 一步…...