序列化和反序列化:从理论到实践的全方位指南
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:
- 了解大厂经验
- 拥有和大厂相匹配的技术等
希望看什么,评论或者私信告诉我!
文章目录
- 一、 背景
- 二、什么是序列化 和 反序列化
- 三、序列化和普通的字符编码转换的区别:
- 三、 为什么需要序列化
- 3.1 序列化的核心价值
- 3.2、不序列化网络传输的核心问题
- 四、常见的序列化对比
- 五、总结
一、 背景
上一篇文章,我们了解了网络模型 OSI 和 TCP/IP的联系和区别,今天结合TCP/IP 聊一下 序列化的应用过程
二、什么是序列化 和 反序列化
简单来说,序列化就是把一个Java对象转换成一系列字节的过程,这些字节可以被存储到文件、数据库,或者通过网络传输。反过来,反序列化则是把这些字节重新转换成Java对象的过程。
想象一下,你有一个手机应用中的用户对象(比如用户的名字、年龄等信息)。如果你想将这个用户对象存储起来,或者发送给服务器,你就需要先序列化它。等到需要使用的时候,再通过反序列化把它恢复成原来的对象。
三、序列化和普通的字符编码转换的区别:
- 序列化(Serialization):
- 是将整个对象的状态(包括其属性、关系等)转换为字节序列
- 目的是保存/传输对象的完整状态,以便之后可以重建对象
- 包含对象的类型信息、属性结构等元数据
- 字符编码转换
- 仅是将字符按照编码规则转换为字节
- 不包含任何元数据或类型信息
- 只是一种字符到字节的映射转换
三、 为什么需要序列化
从网络层来说的话,数据在网络中传输都是以二进制的形式,所以要么你自己手动序列化,要么框架帮你序列化,比如 Flink 在分布式计算中对 java 对象的序列化
3.1 序列化的核心价值
1. 跨平台与跨语言兼容性
序列化通过将对象状态转换为与架构无关的标准化格式(如二进制流或JSON),解决了不同硬件架构、操作系统和编程语言之间的兼容性问题。例如:
• 内存布局差异:直接传输内存指针会因32位/64位系统对齐方式不同导致解析错误。
• 数据表示统一:二进制协议(如Protobuf)通过TLV编码消除字节顺序(大端/小端)影响,确保跨平台数据一致性。
2. 数据完整性与持久化
序列化能完整保存对象状态(包括私有字段和嵌套对象),而不仅仅是基础数据。例如:
• 复杂对象持久化:Java的Serializable
接口通过递归序列化对象及其引用的所有对象,实现深复制。
• 恢复能力:将用户会话数据序列化后存入Redis,重启服务时可精确重建状态。
3. 网络传输效率优化
序列化通过压缩数据体积和减少冗余提升传输效率:
• 体积对比:Protobuf的二进制编码体积仅为JSON的1/3,节省带宽。
• 性能优势:Spark使用Kryo序列化将内存占用减少50%,反序列化速度提升2倍。
3.2、不序列化网络传输的核心问题
1. 数据解析失败与结构混乱
• 内存布局不可控:直接传输结构体可能导致不同平台的内存对齐差异(如C++结构体在32位/64位系统下占用不同空间)。
• 私有字段丢失:未序列化的对象可能因语言特性(如Java反射机制未启用)无法访问私有字段。
2. 性能与资源浪费
• 冗余数据开销:未压缩的内存对象包含元数据(如类名、方法签名),导致带宽浪费。例如,Java原生序列化体积比Protobuf大30%以上。
• 解析效率低下:文本格式(如XML)需逐字符解析,耗时是二进制协议的5-10倍。
3. 安全与稳定性风险
• 反序列化攻击:未经验证的字节流可能触发恶意代码(如Java的readObject()
漏洞)。
• 版本兼容性崩溃:未定义serialVersionUID
的类在字段增减后,反序列化会因版本不匹配抛出异常。
三、典型场景对比
场景 | 使用序列化 | 不使用序列化 |
---|---|---|
分布式服务调用 | 通过gRPC + Protobuf实现跨语言通信,延迟低于5ms | 需手动拼接字符串或结构体,易因平台差异解析失败(如C++结构体在Python端无法读取) |
数据库存储 | 对象序列化为BLOB字段(如Java的Serializable ),支持嵌套对象持久化 | 仅能存储基础类型字段,复杂对象需拆分为多表,维护成本高 |
缓存系统 | Redis通过MessagePack存储会话对象,反序列化速度比JSON快2倍 | 缓存仅支持字符串键值,复杂对象需多次查询拼接,增加I/O压力 |
四、如何选择序列化方案?
- 性能敏感场景:选择二进制协议(如Protobuf、FlatBuffers),适用于高并发微服务。
- 可读性优先场景:使用JSON/XML,适合API调试或配置文件。
- 跨语言需求:Thrift、Avro提供多语言IDL支持,适合混合技术栈。
- 安全性要求:避免Java原生序列化,采用加密协议(如Protobuf + TLS)。
四、常见的序列化对比
常见序列化协议全面对比与应用场景选择指南
一、核心协议特性对比
协议 | 核心优势 | 主要缺陷 | 适用场景 |
---|---|---|---|
JSON | 可读性强、全语言原生支持、动态扩展性好 | 体积大(比Protobuf大2-3倍)、性能较低(解析速度约5us/次) | 前后端API交互、移动端通信、配置文件 |
Protobuf | 性能顶级(序列化速度比JSON快8倍)、体积最小(比JSON小25%)、版本兼容性强 | 需预编译.proto文件、调试困难(二进制不可读)、动态类型支持弱 | 高并发微服务(如gRPC)、大数据存储(Hadoop/Spark)、跨防火墙通信 |
Thrift | 内置RPC框架、支持30+语言、字段增删兼容性好 | 开发复杂(需生成代码)、不支持HTTP协议集成、线程安全性差 | 跨语言服务网格(如Java-PHP混合架构)、金融交易系统 |
MessagePack | 二进制体积比JSON小50%、解析速度比JSON快3倍、兼容JSON数据结构 | 不支持复杂嵌套模型、依赖字段顺序维护、跨语言模型同步困难 | Redis缓存会话、移动端数据传输、IoT设备通信 |
XML | 树形结构清晰、支持命名空间、企业级标准兼容 | 体积最大(比JSON大20%)、解析速度最慢(100us/次)、冗余标签多 | 传统银行系统、Office文档格式(如Word/Excel)、遗留系统集成 |
二、应用场景
-
性能优先场景
• 选择Protobuf:适用于要求<50ms响应时间的微服务调用(如电商秒杀系统)• 备选MessagePack:适合简单数据结构的实时传输(如智能家居设备状态上报)
-
跨语言RPC需求
• 选择Thrift:提供完整的服务发现、负载均衡等RPC生态(如跨Java/Python的支付系统)• 备选gRPC+Protobuf:需要HTTP/2协议支持时优先考虑(如Kubernetes服务通信)
-
可读性优先场景
• 选择JSON:前后端联调、第三方开放API(如天气预报接口)• 备选XML:需严格数据校验时使用(如银行SWIFT报文)
-
存储优化场景
• 列式存储选Protobuf:HDFS中存储PB级日志(如用户行为分析数据)• 文档存储选Avro:Hive表结构动态扩展时更优(如数据仓库分层存储)
三、协议扩展性设计原则
-
版本兼容策略
• Protobuf采用字段编号机制(新增字段用optional
,删除字段标记reserved
)
• JSON通过@version
元数据字段实现多版本共存(需手动处理废弃字段) -
安全加固方案
• 敏感字段加密:对Protobuf的bytes
类型使用AES-GCM加密
• 完整性校验:Thrift数据包末尾追加HMAC签名
四、典型错误规避建议
-
Java原生序列化陷阱
• 避免直接使用Serializable
接口:存在远程代码执行漏洞(如Log4j反序列化攻击)
• 替代方案:改用Kryo(性能提升3倍)或FST(零拷贝优化) -
MessagePack使用误区
• 禁止嵌套复杂对象:如订单含用户画像数据时改用Protobuf
• 字段顺序强制约定:跨语言场景需同步.msg
定义文件
五、总结
• 新项目:微服务优先Protobuf,Web应用主用JSON,IoT设备选MessagePack
• 遗留系统:Java序列化迁移至Kryo,XML逐步替换为JSON Schema
• 大数据场景:Hadoop生态用Avro,实时计算用Protobuf
五、总结
序列化是将对象转换为字节序列的过程,用于数据存储、网络传输和跨平台通信。它与字符编码转换不同,包含对象的完整状态和元数据。序列化的重要性体现在跨平台兼容性、数据完整性和网络传输效率等方面。文章对比了多种序列化协议,提供了选择建议和应用场景指南,帮助开发者根据需求选择合适的序列化方案。同时,还介绍了协议扩展性设计原则和常见错误的规避方法,为实际应用提供了参考。
相关文章:
序列化和反序列化:从理论到实践的全方位指南
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
Leetcode (力扣)做题记录 hot100(62,64,287,108)
力扣第62题:不同路径 62. 不同路径 - 力扣(LeetCode) class Solution {public int uniquePaths(int m, int n) {int[][] array new int[m][n];for(int i 0;i<n;i){array[0][i] 1;}for(int i 0;i<m;i){array[i][0] 1;}for(int i …...
【Linux】shell内置命令fg,bg和jobs
Shell 内置命令 fg(foreground 的缩写)。它用于将后台挂起的任务恢复到前台运行。 例如: 假设你运行了一个耗时的 SVN 操作(如 svn update 或 svn checkout)。按下 CtrlZ 将该进程挂起到后台。输入 fg…...
鸿蒙OSUniApp 制作动态加载的瀑布流布局#三方框架 #Uniapp
使用 UniApp 制作动态加载的瀑布流布局 前言 最近在开发一个小程序项目时,遇到了需要实现瀑布流布局的需求。众所周知,瀑布流布局在展示不规则尺寸内容(如图片、商品卡片等)时非常美观和实用。但在实际开发过程中,我…...
通用软件项目技术报告 - 导读II
现在,我们正式进入报告的第三个主要领域:3. 领域三:核心业务逻辑与算法实现。 连接: 我们已经讨论了如何存储数据(领域一)和如何设计 API 让外部或内部服务可以访问这些数据或触发操作(领域二)。现在,我们将深入应用程序的“心脏”——实际执行业务规则、进行计算和(…...
新能源汽车三电质量护盾:蓝光三维扫描技术显身手
在绿色低碳的潮流下,新能源汽车行业快速发展,车企们纷纷加速电气化转型。由于电动汽车动力系统构造与内燃机车辆的构造有很大不同,制造商及其供应商必须加快工程研发设计及生产,而这对质量保证过程提出了新的挑战。 对于新能源汽…...
针对已训练好的YOLOv8模型的优化策略
以下是针对已训练好的YOLOv8模型的优化策略,结合模型微调、结构改进、训练策略调整等方法,可进一步提升检测性能或适应特定场景需求: 一、超参数调优 学习率动态调整 初始学习率(lr0):若模型收敛后仍有优化…...
AI 产业化浪潮:从生成智能到星载计算,中国如何重塑全球竞争格局
2025 年的科技版图上,人工智能正经历着从技术奇点到产业爆点的历史性跨越。当生成式 AI 突破实验室围墙走进千行百业,当智能体开始在数字世界自主决策,当卫星搭载的大模型在太空展开计算,一场由技术创新驱动的产业革命正在重塑全球…...
Python如何解决中文乱码
Python文件头部声明 # -*- coding: utf-8 -*- # 必须放在文件第一行或第二行中文字符串定义方式 # Python 3 chinese_str "中文" # 默认就是Unicode# Python 2 chinese_str u"中文" # 必须加u前缀字符串编码转换黄金法则 # 解码:字节串 …...
android studio导入项目
如果 gradle-8.0-bin.zip 没有下载成功 可以点击进入这个网站:https://services.gradle.org/distributions/ 找到和自己本版相同的gradle-8.0-bin.zip文件找到自己版本进行下载; 如果下载依赖失败, 可以手动下载依赖编译过程中的jar https://repo.maven.apache.org/…...
Android Studio Meerkat与Gradle构建工具升级实战指南
简介 Android Studio Meerkat和Gradle构建工具的升级将带来显著的性能提升和开发体验优化。在Android生态快速演进的2025年,开发者亟需掌握这些新特性以提升工作效率。本指南将从零开始,详细讲解如何升级Android Studio和Gradle构建工具,配置新特性,并提供实际应用场景的代…...
TCP/IP参考模型详解:从理论架构到实战应用
一、参考模型基础概念与分类 计算机网络参考模型是为解决网络通信标准化问题而设计的逻辑框架。在众多模型中,TCP/IP参考模型以其高实用性和广泛应用,成为现代网络架构的基石。该模型采用分层设计思想,将复杂的网络通信功能划分为多个层次&am…...
【Linux网络】网络层
网络层 在复杂的网络环境中确定一个合适的路径 IP 协议 IPV4 点分十进制[0,255].[0,255].[0,255].[0,255]IPV6 IP地址目标网格目标主机 基本概念 主机:配有IP地址,但是不进行路由控制的设备;路由器:即配有IP地址,又能进行路由控制;节点:主机和路由器的统称。 两个问题 路…...
FastAPI + OpenAI 模型 的 GitHub 项目结构模板
FastAPI OpenAI 模型 的 GitHub 项目结构模板,适合用作大模型(如 GPT-4) API 服务的基础框架。该模板包括了基本的项目结构、配置、文档以及与 OpenAI API 的交互方式。 项目结构 fastapi-openai-api/ ├── app/ │ ├── __init__.p…...
基于EFISH-SCB-RK3576/SAIL-RK3576的无人快递柜控制器技术方案
国产化替代J1900的智能化升级方案 一、硬件架构设计 多模态感知模块 智能识别单元: 双MIPI-CSI接口接入4K摄像头,NPU加速包裹条码识别(速度>5件/秒,准确率>99.99%),支持破损检测&…...
Centos 上安装Klish(clish)的编译和测试总结
1,介绍 clish是一个类思科命令行补全与执行程序,它可以帮助程序员在nix操作系统上实现功能导引、命令补全、命令执行的程序。支持?,help, Tab按键。本文基于klish-2.2.0介绍编译和测试。 2,klish的编译 需要安装的库&…...
Android学习总结之Glide自定义三级缓存(面试篇)
一、三级缓存核心原理与设计 问题 1:为什么需要三级缓存?各层缓存的核心作用是什么? 回答核心 内存缓存:毫秒级快速响应,存储近期浏览的图片(如滑动列表来回切换的图片),通过 LRU…...
管理Oracle Data Guard的最佳实践
Oracle Data Guard的中文名字叫数据卫士,顾名思义,它是生产库的一道保障。所以管理Data Guard是DBA的一项重要工作之一,管理Data Guard时主要有以下几个注意点需要引起重视。 备份库的归档日志积压 一般情况下,生产库的归档日志是…...
iOS WebView和WKWebView怎么调试?
iOS WebView调试 本教程将指导您如何使用WebDebugX调试iOS应用中的WebView内容,包括WKWebView和UIWebView。通过本教程,您将学习如何检查WebView中的HTML、CSS和JavaScript,以及如何解决常见的WebView调试问题。 准备工作 在开始调试iOS W…...
笔记本电脑打开网页很慢,一查ip地址网段不对怎么处理
我有一个笔记本,在家里连WIFI后获取到的ip地址网段不对,那么常规做法是手动去配置个静态IP和DNS,要知道笔记本IP地址默认采用的是DHCP,也就是动态获取ip地址。如果手动设置静态IP,也就是固定IP的话,你换个场…...
【更新】全国省市县-公开手机基站数据集(2006-2025.3)
手机基站是现代通信网络中的重要组成部分,它们为广泛的通信服务提供基础设施。随着数字化进程的不断推进,手机基站的建设与布局对优化网络质量和提升通信服务水平起着至关重要的作用,本分享数据可帮助分析移动通信网络的发展和优化。本次数据…...
iOS视频编码详细步骤(视频编码器,基于 VideoToolbox,支持硬件编码 H264/H265)
iOS视频编码详细步骤流程 1. 视频采集阶段 视频采集所使用的代码和之前的相同,所以不再过多进行赘述 初始化配置: 通过VideoCaptureConfig设置分辨率1920x1080、帧率30fps、像素格式kCVPixelFormatType_420YpCbCr8BiPlanarFullRange设置摄像头位置&am…...
行项目违反范围截止值
把允许负值打钩就可以,如果没有此字段,按照下面截图把屏幕格式放字段出来;字段放出来以后如果是灰色的话,就用SE16N调试模式修改字段值;...
Linux wlan 单频段 dual wifi创建
环境基础 TP LINK WN722N V1网卡linux 主机 查看设备是否支持双ap managed:客户端模式(连接路由器/AP)AP:接入点模式(创建热点)AP/VLAN:支持带VLAN标签的虚拟AP{ AP, mesh point, P2P-GO } &l…...
STC32G12K12实战:串口通信
STC32G12K128芯片写一个按键通过串口1发送字符串的程序。首先,确认芯片的串口1配置。STC32G系列通常使用UART1,相关的寄存器是P_SW1来选择引脚。默认情况下,UART1的TX是P3.1。 接下来是设置定时器作为波特率发生器。通常用定时器2,…...
unity 鼠标更换指定图标
1.准备两张图 要求图片导入设置如下 将 Texture Type 改为 Cursor 确保 Read/Write Enabled 已勾选 取消勾选 Generate Mip Maps 将 Filter Mode 设为 Point (保持清晰边缘) 将 Compression 设为 None (无压缩) 2.创建脚本,把脚本挂到场景中 ,该…...
会话管理中的cookie,以及浏览器操作cookie,在express中设置,删除,和获取cookie
会话管理中的 Cookie以及在浏览器和 Express 中操作 Cookie: 🍪 一、Cookie 在会话管理中的作用 ✅ Cookie 的定义: Cookie 是服务器发送到浏览器并保存在本地的小段文本数据,浏览器会在之后的请求中将这些数据回传给服务器。 …...
Mac的web服务器
最近用了个人觉得比较好用的集成环境。Flyenv - FlyEnv | 一体化全栈环境管理工具. 支持macOS / Windows / Linux 链接放在这了。 mac上安装: brew install flyenv 等着安装成功就好了 给个图。ollama也有...
数据可视化大屏——南方草牧商品交易所
代码综述 整体结构与用途 这是一段用于构建网页的 HTML 代码,结合引入的 JavaScript 和 CSS 文件,初步推测该网页是南方草牧商品交易所的相关页面,主要展示了与草牧商品交易相关的各类数据,包括产品挂牌数、成交量、会员信息等&…...
AIGC与数字媒体实验室解决方案分享
第1部分 概述 1.1 建设目标 1.深度融合AIGC技术,培养能够驾驭新质生产力的数字媒体人才 通过引入前沿的AIGC技术,确保学生能够接触到最先进的人工智能应用。教学内容理论和实践结合,让学生在实际操作中熟练掌握AIGC工具,生成高…...
Qwen3模型架构、训练方法梳理
qwen3炼丹真是全是技巧,下面来看看,仅供参考。 https://huggingface.co/Qwen https://modelscope.cn/organization/qwen https://github.com/QwenLM/Qwen3 模型架构 Dense 模型结构改进: GQA、SwiGLU、RoPE、RMSNorm with pre-normalization…...
MySQL 学习(九)bin log 与 redo log 的区别有哪些,为什么快速恢复使用 redo log 而不用 bin log?
目录 一、bin log 与 redo log 的区别1)实现方式不同:2)日志内容不同:3)记录方式不同:4)使用场合不同: 二、为什么快速恢复使用 redo log 而不用 bin log? 面试题&#x…...
【消息队列】RabbitMQ基本认识
目录 一、基本概念 1. 生产者(Producer) 2. 消费者(Consumer) 3. 队列(Queue) 4. 交换器(Exchange) 5. 绑定(Binding) 6. 路由键(Routing …...
RabbitMQ 快速上手:安装配置与 HelloWorld 实践(二)
四、RabbitMQ 配置 4.1 用户及权限管理 在 RabbitMQ 中,用户管理是保障系统安全和正常运行的重要环节。通过合理的用户及权限设置,可以确保不同的应用或服务在使用 RabbitMQ 时,只能访问其被授权的资源,避免非法操作和数据泄露。…...
蓝桥杯 17. 修改数组
修改数组 原题目链接 题目描述 给定一个长度为 N 的数组 A [A1, A2, …, AN],数组中可能包含重复的整数。 现在小明要按以下方法将其修改为没有重复整数的数组: 小明会依次修改 A2, A3, …, AN。 当修改 Ai 时,小明会检查 Ai 是否在 A…...
Redis内存淘汰策略和过期键删除策略有哪些?
Redis 提供 8 种内存淘汰策略,以下是详细解析及场景建议: 一、核心策略解析 noeviction (默认策略) 机制:内存满时拒绝新写入操作,返回错误优势:绝对数据安全场景:金融交易系统、医疗数据存储 allkeys-lr…...
基于 NanoDet 的工厂巡检机器人目标识别系统研究与实现
摘要 本论文旨在设计并实现一个基于 NanoDet 模型的工厂巡检机器人目标识别系统。通过详细阐述数据集准备、模型训练、UI 界面构建以及系统部署的全过程,展示如何利用 NanoDet 模型的高效性和轻量化特点,结合合理的 UI 设计与数据集优化,使…...
深入解析Spring Security:JWT认证与授权实践
深入解析Spring Security:JWT认证与授权实践 引言 在现代Web应用中,安全性是至关重要的。Spring Security作为Spring生态中的安全框架,提供了强大的认证和授权功能。本文将重点介绍如何使用Spring Security结合JWT(JSON Web Tok…...
《隐私计算:数据安全与隐私保护的新希望》
一、引言 在数字化时代,数据已成为企业和组织的核心资产。然而,数据的收集、存储和使用过程中面临着诸多隐私和安全挑战。隐私计算作为一种新兴技术,旨在解决数据隐私保护和数据共享之间的矛盾。本文将深入探讨隐私计算的基本概念、技术原理、…...
Elasticsearch索引设计与调优
一、分片策略设计 1.分片容量规划 单分片容量建议30GB(日志场景可放宽至100GB),避免超大分片引发查询延迟。分片总数计算公式:总数据量 / 30GB 1.2(20%余量应对未来增长)。主分片数创建后不可修改,副本分片数支持动态调整。2.分片分布优化 PUT logs-2025 { &qu…...
什么是im即时通讯?私有化im即时通讯软件优势是什么?
在当前企业高度关注数据主权的背景下,私有化IM即时通讯软件(如BeeWorks)的部署模式成为企业实现数据自主控制、规避外部风险的核心解决方案。以下是针对企业数据主权诉求的私有化IM软件优势深度解析: 一、数据主权诉求下的私有化I…...
【unity游戏开发——编辑器扩展】EditorWindow自定义unity窗口拓展
注意:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言一、自定义窗口1、创建窗口类2、创建窗口对象3、显示窗…...
深入理解Java HotSpot中的即时编译
即时编译(Just-In-Time Compilation,简称JIT)是Java虚拟机(JVM)的核心技术之一,通过在运行时将字节码转换为本地机器码,显著提升了Java应用程序的性能。本文基于HotSpot JVM,详细探讨了JIT编译的工作原理、优化技术、日志分析以及最新的编译器发展,旨在帮助开发者更好…...
【教程】Docker方式本地部署Overleaf
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 背景说明 下载仓库 初始化配置 修改监听IP和端口 自定义网站名称 修改数据存放位置 更换Docker源 更换Docker存储位置 启动Overleaf 创…...
解决docker alpine缺少字体的问题 Could not initialize class sun.awt.X11FontManager
制作的springboot项目镜像,缺少字体报错Could not initialize class sun.awt.X11FontManager 原因镜像中缺少字体 解决: 制作镜像时,添加字体库,Dockerfile文件 中添加如下内容 注意: jdk版本一定要使用࿰…...
深度解析智能体:从概念到应用的全方位洞察
在科技日新月异的当下,智能体已从人工智能的前沿概念逐渐走进大众视野,成为备受瞩目的焦点。那么,究竟何为智能体呢? 一、智能体的概念 智能体,简单来讲,可看作是“大模型 超级工具人”的有机融合。它能够…...
python 异步执行多个 python 命令
前提说明: 1. 有N套用 python 爬取客户不同网站上的评论的程序 2. 有一套用 python 将评论出成 Excel 报表的程序 新需求: 做一个总入口,异步同时爬不同网站评论,或同时出不同月份报表,或爬虫做报表同时做的 # -…...
Keil5 MDK 安装教程
## 简介 Keil MDK(Microcontroller Development Kit)是ARM开发的一款集成开发环境(IDE),主要用于ARM Cortex-M系列微控制器的开发。MDK包含了μVision IDE和调试器、ARM C/C编译器、中间件组件等工具。本教程将指导您完…...
Doris与ClickHouse深度比较
一、核心架构差异 分布式管理 Doris 采用 FE(前端)与 BE(后端)分离的 MPP 架构,FE 负责元数据管理和查询规划,BE 处理存储与计算,支持自动扩缩容和故障恢复。这种设计简化了集群管理,…...
插入排序希尔排序
插入排序&希尔排序 插入排序:将数据整体当做一组,从头开始遍历,确保遍历完的子序列都是有序的; 希尔排序:基于插入排序,增加新的分组思想,对数据进行分组的插入排序。 平均时间复杂度、最快…...