通信协议:数字世界的隐形语言——从基础认知到工程实践-优雅草卓伊凡
通信协议:数字世界的隐形语言——从基础认知到工程实践-优雅草卓伊凡
一、理解通信协议:数字世界的”隐形语法”
1.1 通信协议的不可见性与现实存在
通信协议如同空气中的无线电波,虽然看不见摸不着,却实实在在支撑着现代数字世界的运转。当我们用手机发送消息、用电脑浏览网页时,背后是数十种通信协议在协同工作。协议(Protocol)一词源自希腊语”protokollon”,原指粘在卷轴上的首张纸,记录重要内容。在数字领域,协议同样扮演着”记录规则”的角色——它定义了设备间通信的语法、语义和时序三大要素:
- 语法:数据格式(如JSON、二进制)
- 语义:指令含义(如HTTP 200表示成功)
- 时序:交互顺序(如TCP三次握手)
这些规则就像人类社会中的交通法规:虽然没有物理形态,但所有驾驶员都默认遵守,从而保证交通有序进行。不同的是,通信协议的”遵守”是通过硬件芯片和软件算法强制实施的,任何偏差都会导致通信失败。
1.2 协议如何建立设备连接
设备间通过协议建立连接的过程,可比拟为两个陌生人建立有效对话的步骤:
- 物理层连接(相当于面对面站立):
-
- 有线:网线插入接口时,PHY芯片自动协商速率(如1000BASE-T)
- 无线:Wi-Fi模块扫描2.4GHz/5GHz频段
- 协议握手(相当于确认共同语言):
sequenceDiagram设备A->>设备B: SYN(序列号=100)设备B->>设备A: SYN-ACK(序列号=300,确认号=101)设备A->>设备B: ACK(确认号=301)
TCP三次握手过程中,双方同步初始序列号,建立可靠连接
- 应用层通信(实际对话):
-
- HTTP协议示例:
GET /index.html HTTP/1.1
Host: www.example.com
-
- 设备B返回HTML文档,完成一次有效交互
这个过程中,各层协议各司其职:物理层解决信号传输,数据链路层处理帧校验,网络层负责路由选择,传输层保证端到端可靠性,而应用层协议(如HTTP)最终呈现为用户可理解的内容。
二、通信协议的生动比喻集
2.1 邮政系统比喻
将网络通信比作邮政系统:
- IP地址=收件人地址(如”北京市海淀区中关村大街1号”)
- 端口号=办公室门牌号(如”301室”)
- TCP=挂号信服务(有签收确认)
- UDP=普通平邮(可能丢失)
- HTTP=标准商务信函格式
- MQTT=明信片(短小精简)
当使用HTTPS时,相当于给信件加了铅封,只有持有密钥的收件人才能拆阅。而WebSocket则像建立了专用电话线,双方可以持续通话而不必反复拨号。
2.2 餐厅点餐比喻
餐厅服务场景类比:
- ARP协议:服务员需要知道厨师的位置(IP→MAC地址解析)
- DHCP协议:新客人入座后自动获得餐具(IP地址分配)
- DNS协议:根据菜单名(域名)找到具体菜品(IP地址)
- 负载均衡:多个服务员轮流为不同区域客人服务
当客人要求”牛排五分熟”时,这相当于应用层协议定义的语义规范。如果服务员回复”代码103:食材不足”,这就是预定义的错误状态码机制。
2.3 国际会议比喻
跨国会议场景映射:
- 翻译人员=编码/解码规则(ASCII/Unicode)
- 轮流发言规则=CSMA/CD冲突检测
- 同声传译耳机=多播协议(IGMP)
- 主席控制议程=QoS优先级标记
这些比喻揭示了协议设计的核心挑战:在无集中控制的环境下,通过预定义规则实现有序协作。正如没有全球政府却能召开国际会议一样,互联网也在没有中心机构的情况下,依靠协议栈实现全球互联。
三、主流通信协议全景图
3.1 协议分类矩阵
按OSI模型分层的主流协议:
层级 | 典型协议 | 特性简述 |
应用层 | HTTP/3, MQTT, gRPC | 直接面向业务逻辑 |
表示层 | JSON, Protobuf, ASN.1 | 数据格式化与加密 |
会话层 | SSL/TLS, NetBIOS | 对话管理与安全上下文 |
传输层 | TCP, UDP, SCTP | 端到端可靠性保障 |
网络层 | IPv6, ICMP, BGP | 路由寻址与拥塞控制 |
数据链路层 | 802.11ac, PPP, MACsec | 帧传输与物理地址管理 |
物理层 | 1000BASE-T, 5G NR, LoRa | 比特流传输与调制解调 |
3.2 关键协议特性对比
物联网领域三大协议对比:
维度 | MQTT | CoAP | AMQP |
传输层 | TCP | UDP | TCP |
消息模型 | 发布/订阅 | 请求/响应 | 点对点+队列 |
头部开销 | 2字节(最小) | 4字节(基本) | 8字节(帧头) |
适用场景 | 云端下行控制 | 受限设备通信 | 金融级消息可靠 |
安全机制 | SASL/TLS | DTLS | SASL/TLS |
工业协议性能指标(数据来源:HMS工业网络2023报告):
协议 | 循环周期 | 确定性 | 节点数上限 |
PROFINET IRT | 31.25μs | ±1μs | 256 |
EtherCAT | 100μs | ±100ns | 65535 |
MCP TCP | 1ms | ±500μs | 247 |
Modbus RTU | 10ms | ±2ms | 32 |
四、卓伊凡视角:MCP协议的独特价值
4.1 工业领域的”文言文”
在其《工业通信简史》中将MCP比作”工业自动化领域的文言文”——虽然诞生较早(1979年),但因其简洁、精确、通用的特性,仍在现代工业系统中占据核心地位。MCP的独特优势体现在:
- 极简主义设计:
-
- 仅支持4种基本操作(读线圈、读寄存器、写单点、写多点)
- 功能码用1字节表示(如0x03=读保持寄存器)
// 典型MCP RTU请求帧结构
typedef struct {uint8_t address; // 从站地址uint8_t function; // 功能码uint16_t regAddr; // 寄存器地址uint16_t regCount; // 寄存器数量uint16_t crc; // CRC校验
} MCP_RTU_Frame;
- 硬件友好性:
-
- 8位单片机即可实现从站协议栈
- 在RS-485总线上,单帧响应时间可预测(典型值5-50ms)
- 垂直兼容性:
-
- 现代MCP TCP设备可与40年前的RTU设备通信
- 施耐德电气统计显示,2023年仍有68%的工业设备支持MCP RTU
4.2 与OPC UA的互补关系
卓伊凡特别指出:”在工业互联网架构中,MCP如同毛细血管,负责现场级数据传输;而OPC UA则是动脉血管,承担系统级信息集成。”二者的典型协作模式:
[现场设备]--MCP RTU-->[网关]--OPC UA-->[MES系统]↳ 协议转换↳ 数据缓存↳ 安全隔离
这种分层架构既保留了MCP的实时性优势,又获得了OPC UA的丰富信息建模能力。
五、鸿蒙分布式软总线协议解析
5.1 分布式通信的新范式
华为鸿蒙系统的分布式软总线协议(以下简称”软总线”)代表了设备互联的新方向。卓伊凡在分析其设计时,总结了三大突破:
- 自发现与自组网:
-
- 基于Wi-Fi P2P和蓝牙Mesh的混合发现机制
- 设备间建立”虚拟总线”,延迟<20ms(实测数据)
- 协议自适应:
# 伪代码:协议选择算法
def select_protocol(device_capabilities):if device.supports("HiLink"):return HiLink_Protocolelif distance < 5m and bandwidth > 100Mbps:return Ultra_HS_Protocol else:return Adaptive_MQTT
- 零拷贝传输:
-
- 应用间直接共享内存引用
- 4K视频流跨设备传输时,CPU占用降低40%
5.2 与MCP的哲学对比
尽管技术实现差异巨大,卓伊凡发现软总线与MCP在设计哲学上存在共鸣:
维度 | MCP协议 | 鸿蒙软总线 |
设计目标 | 设备可互操作 | 设备融合体验 |
核心约束 | 硬件资源受限 | 用户体验一致 |
扩展方式 | 功能码扩展 | 能力矩阵描述 |
成功关键 | 简单到无法被绕开 | 自然到不被用户感知 |
这种对比揭示了一个普适规律:优秀的通信协议都是场景需求的精确映射——工业领域需要确定性,消费电子追求无缝体验。
六、通信协议知识的工程价值
6.1 从bug调试看协议知识的重要性
卓伊凡分享了一个典型案例:某智能工厂系统中,PLC偶尔会”丢失”控制指令。表面看是软件bug,实际排查发现是:
- MCP TCP默认端口502被防火墙间歇性阻断
- 重传机制未考虑工业设备的命令状态机
- 最终解决方案:
// 错误处理逻辑优化前后对比
// 旧方案:简单重试
function sendCommand(cmd) {try { device.write(cmd); }catch { setTimeout(()=>sendCommand(cmd), 100); }
}// 新方案:协议感知型重试
function sendCommand(cmd) {const seq = generateSequence(); // 添加MCP事务IDconst retry = (attempt) => {if(attempt > 3) throw "Max retry reached";const reply = device.writeWithAck(cmd, seq);if(reply.timeout) retry(attempt+1);};retry(0);
}
这个案例印证了卓伊凡的观点:”不理解通信协议的程序员,就像不懂交通规则的司机——短期可能侥幸无事,但遇到复杂情况必然失控。”
6.2 知识体系构建建议
基于多年经验,卓伊凡提出学习通信协议的三维模型:
- 协议栈维度:
-
- 物理层:信号调制/编码(如NRZ、曼彻斯特编码)
- 数据链路层:MAC算法/帧结构(如以太网V2格式)
- 网络层:路由/寻址(如IPv6邻居发现)
- 传输层:可靠性机制(如TCP拥塞控制)
- 应用层:会话管理(如HTTP/2多路复用)
- 时间维度:
-
- 协议历史演变(如从HTTP/1.1到HTTP/3的QUIC)
- 技术生命周期(如RS-232→USB→Type-C的接口演进)
- 行业维度:
-
- 工业协议(MCP、PROFINET)
- 消费电子协议(AirPlay、Miracast)
- 物联网协议(LoRaWAN、NB-IoT)
6.3 给开发者的实践指南
对于不同阶段的开发者,卓伊凡给出差异化建议:
初级开发者:
- 使用Wireshark抓包分析常见协议
- 动手实现简易版TCP客户端(仅需200行Python代码)
- 阅读RFC文档的”Abstract”和”Motivation”部分
中级开发者:
- 对比同一协议的不同实现(如Linux vs Windows的TCP栈)
- 参与开源协议栈开发(如Contiki-NG的6LoWPAN实现)
- 研究协议安全漏洞(如KRACK攻击对WPA2的影响)
架构师:
- 设计领域特定协议(参考Google的Protocol Buffers设计思路)
- 优化协议栈性能(如DPDK加速网络包处理)
- 预判协议演进方向(如后量子密码学对TLS的影响)
结语:通信协议作为软件工程的基石
回望数字技术的发展历程,通信协议始终扮演着基础设施中的基础设施角色。正如卓伊凡在《软件工程的本源思考》中所言:”学习编程语言让你会’说话’,而理解通信协议则让你懂得如何’对话’——前者解决个体表达能力,后者构建协作可能性。”
在万物互联的时代,协议知识的重要性只会增不会减。无论是工业互联网中的MCP,还是消费领域的鸿蒙软总线,亦或是未来量子通信中的新协议,掌握这些”数字世界语法规则”的开发者,将始终站在技术演进的最前沿。这或许正是软件工程教育的真谛:不仅教授工具的使用,更要培养对基础原理的深刻理解——因为今天的边缘知识,可能明天就会成为解决问题的关键钥匙。
相关文章:
通信协议:数字世界的隐形语言——从基础认知到工程实践-优雅草卓伊凡
通信协议:数字世界的隐形语言——从基础认知到工程实践-优雅草卓伊凡 一、理解通信协议:数字世界的”隐形语法” 1.1 通信协议的不可见性与现实存在 通信协议如同空气中的无线电波,虽然看不见摸不着,却实实在在支撑着现代数字世…...
RPC复习
RPC复习 RPC (远程过程调用) 全面解析一、RPC 定义与核心作用1. 什么是RPC?2. 核心作用 二、主流RPC框架对比三、RPC适用场景四、RPC的缺陷五、RPC vs REST vs GraphQL六、Java实现案例:使用Dubbo框架案例描述1. 环境准备2. 定义服务接口3. 服务提供方实…...
Express 文件上传不迷路:req.files 一次性讲明白
前言 在开发后台接口的江湖中,文件上传堪称“隐藏副本”,难度不大但坑点极多。本来只想优雅接收一张图片,结果 undefined、报错、路径错乱轮番登场,逼得人想重拾卖烤红薯的梦想。别慌,本文将用轻松幽默的方式,深入拆解 req.files.file 的每个属性,从前端表单到后台处理…...
Leetcode 3530. Maximum Profit from Valid Topological Order in DAG
Leetcode 3530. Maximum Profit from Valid Topological Order in DAG 1. 解题思路2. 代码实现 题目链接:3530. Maximum Profit from Valid Topological Order in DAG 1. 解题思路 这一题的整体思路就是一个动态规划的思路,我们只需要在当前可以访问的…...
Mysql中索引的知识
Mysql中的索引的定义和种类 核心概念:索引是什么? 想象一下你有一本很厚的书,你想找到其中关于某个特定主题的内容。你有两种方法: 从头到尾翻阅整本书:这就像数据库中的全表扫描 (Full Table Scan)。如果书很长&…...
VSCode Verilog编辑仿真环境搭建
VSCode Verilog环境搭建 下载Iverilog安装Iverilog验证安装VS Code安装插件 下载Iverilog 官网下载Iverilog 安装Iverilog 一定要勾选这两项 建议勾选这两项 验证安装 运行Windows PowerShell输入命令:iverilog输入命令:Get-Command gtkwave …...
linux修改环境变量
添加环境变量注意事项。 vim ~/.bashrc 添加环境变量时,需要source ~/.bashrc后才能有效。同时只对当前shell窗口有效,当打开另外的shell窗口时,需要重新source才能起效。 1.修改bashrc文件后 2.source后打开另一个shell窗口则无效ÿ…...
为什么要学习《金刚经》
《金刚经》作为佛教般若经典的核心,以"缘起性空"为思想根基,通过佛陀与须菩提的对话,揭示了破除执著、见真实相的智慧。 以下从核心要义、精髓段落和现实应用三个维度进行解读: 一、核心思想精髓 1. "凡所有相&am…...
【阿里云大模型高级工程师ACP习题集】2.7 通过微调增强模型能力 (上篇)(⭐️⭐️⭐️ 重点章节!!!)
习题集: 【单选题】在大模型微调中,与提示工程和RAG相比,微调的独特优势在于( ) A. 无需外部工具即可提升模型表现 B. 能让模型学习特定领域知识,提升底层能力 C. 可以更高效地检索知识 D. 能直接提升模型的知识边界,无需训练 【多选题】以下关于机器学习和传统编程的说…...
Docker 容器双网卡访问物理雷达网络教程
作者: 陈梓洋 环境: ubuntu 22.04lts 时间: 2025年4月29日 Docker 容器双网卡访问物理雷达网络教程 这个教程适用于这样的场景:容器保留原有 ROS 通信网络(如 bridge 网络),同时需要访问一个物…...
C++:Lambda表达式
C:Lambda表达式 C中lambda的基本语法1. 捕获列表(Capture List)2. 示例代码示例 1:简单的lambda示例 2:捕获变量示例 3:按引用捕获示例 4:捕获所有变量示例 5:作为函数参数 3. lambd…...
Vim 中替换字符或文本
在 Vim 中替换字符或文本可以使用 替换命令(substitute),其基本语法为: :[range]s/old/new/[flags]1. 基本替换 命令说明:s/foo/bar/替换当前行的第一个 foo 为 bar:s/foo/bar/g替换当前行的 所有 foo 为 bar:%s/foo/bar/g替换 …...
Thinkphp开发自适应职业学生证书查询系统职业资格等级会员证书管理网站
主要功能介绍 1.PHP MYSQL开发,开源,方便二次开发。 2.后台管理界面清新 3.可批量导入导出数据,格式为:JsoN、CSV、 Excel等。 4.自适应手机端,PC端 5.数据修改,添加,删除非常方便,手机上就可以解决 6.可以增加管理员权限等 7.界面可以个性定制开发...
OpenAI Embedding 和密集检索(如 BERT/DPR)进行语义相似度搜索有什么区别和联系
OpenAI Embedding 和密集检索(如 BERT/DPR)其实是“同一种思想的不同实现”,它们都属于Dense Retrieval(密集向量检索),只不过使用的模型、部署方式和调用方式不同。 🧠 首先搞清楚:…...
C语言复习笔记--数据在内存中的存储
今天我们来复习一下数据在内存中的存储方式.话不多说进入正题. 整数在内存中的存储 整数的2进制表⽰⽅法有三种,即原码、反码和补码.三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最⾼位…...
笔试专题(十二)
文章目录 主持人调度题解代码 小红的ABC题解代码 不相邻取数题解代码 空调遥控题解代码 主持人调度 题目链接 题解 1. 排序 2. 先按左端点的大小进行排序,保证时间是连续的,如果后一个点的左端点大于等于前一个点的右端点就是和法的,否则…...
Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用---后台调用Python Matplotlib绘制图形
Rust语言最接近Python Matplotlib绘图库的应该是Plotters,但是试用下来还是没有Matplotlib效果好,所以尝试在Tauri Leptos项目中,后台调用Python Matplotlib绘制图形,并返回给前端Leptos展示。 具体效果如下: 1. 前端…...
Qemu-STM32(十七):STM32F103加入AFIO控制器
概述 本文主要描述了在Qemu平台中,如何添加STM32F103的AFIO控制器模拟代码,AFIO是属于GPIO引脚复用配置的功能。 参考资料 STM32F1XX TRM手册,手册编号:RM0008 添加步骤 1、在hw/arm/Kconfig文件中添加STM32F1XX_AFIO&#x…...
刀客doc:小红书商业技术负责人苍响离职
根据大厂日爆的爆料,小红书商业化再度迎来高层人事变动,原商业平台技术负责人苍响(薯名),职级L2,已于本月正式离职,其下属团队现由电商业务负责人接管。 根据刀客doc获得的资料,苍响…...
CC52.【C++ Cont】滑动窗口
目录 1.题目 2.分析 方法1:暴力枚举 方法2:暴力枚举的优化:"同向双指针",也称滑动窗口 前置知识 核心操作 例子解释 代码 提交结果 1.题目 LCR 008. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target…...
linux中由于编译选项-D_OS64BIT导致的核心已转储问题
linux中由于编译选项-D_OS64BIT导致的核心已转储问题排查解决: 原因: a.so b.so a.so使用b.so 程序1 程序2 使用a.so 程序1运行正常,程序2启动后提示核心已转储。 程序1和程序2运行的代码都一致,只执行创建xApplication app&…...
Ubuntu搭建 Nginx以及Keepalived 实现 主备
目录 前言1. 基本知识2. Keepalived3. 脚本配置4. Nginx前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRU…...
Knife4j 接口文档添加登录验证流程分析
Knife4j 接口文档添加登录验证流程是非常必要的,否则接口文档一旦暴露到外面是很危险的,今天我们详细分析一下。在1.9.6的版本时,作者把swagger-bootstrap-ui项目重命名为Knife4j,今天分析2.0.6版本。 1、pom.xml文件引入 <pa…...
C++之string
string 是C中常见的一个用于处理和操作字符串的类。一直有用它来存储字符串,今天来介绍介绍一下它的定义和一些基本用法吧。 1、头文件 #include <string>2、定义和初始化 #include <iostream> #include <string> using namespace std;int main…...
【含文档+PPT+源码】基于SSM的电影数据挖掘与分析可视化系统设计与实现
项目介绍 本课程演示的是一款基于SSM的电影数据挖掘与分析可视化系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…...
DeepSeek提示词技巧
以下是使用Deepseek等AI工具时提升效果的提示词模式总结,涵盖核心规律、应用场景及效果对比: 规律一:结构化提示(解决模糊性问题) 问题:开放式问题导致回答笼统 模式:角色任务约束输出格式 例子…...
软考高项(信息系统项目管理师)第 4 版全章节核心考点解析(第4版课程精华版)
一、核心输入输出速记体系(力扬老师独家口诀) (一)规划阶段万能输入(4 要素) 口诀:章程计划,组织事业 ✅ 精准对应(ITTO 核心输入): 章程&#…...
【linux网络】网络基础概念
1. 初始协议 1.1 OSI 七层模型 OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范; 把网络从逻辑上分为了 7 层. 每一层都有相关、相对应的物理设备&a…...
【PyTorch动态计算图实战解析】从原理到高效开发
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比二、实战演示环境配置要求核心代码实现案例1:梯度计算可视化案例2:动态控制流案例3:自定义反向传播运行结果验证三、性能对比测试方法论…...
【专题五】位运算(1):常见位运算操作总结
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;ÿ…...
react-native-vector-icons打包报错并且提示:copyReactNativeVectorIconFonts相关信息
使用react-native-vector-icons,打包时会报: FAILURE: Build failed with an exception. * What went wrong: Some problems were found with the configuration of task :app:copyReactNativeVec torIconFonts (type Copy).- Gradle detected a proble…...
【Sqlalchemy Model转换成Pydantic Model示例】
【Sqlalchemy Model转换成Pydantic Model示例】 由于Sqlalchemy和Pydantic的模型字段类型可能有差异, 所以需要一个通用的装换类 def sqlalchemy_to_pydantic_v2(sqlalchemy_model, pydantic_model):"""通用函数,将 SQLAlchemy 模型实例转换为 Pyd…...
探索语音增强中的多尺度时间频率卷积网络(TFCM):代码解析与概念介绍
探索语音增强中的多尺度时间频率卷积网络(TFCM):代码解析与概念介绍 在现代音频处理领域,语音增强技术始终是一个备受关注的研究热点。其主要目标是通过去除背景噪声、回声或其他混杂信号,提升语音通话或录音的质量。…...
私有知识库 Coco AI 实战(四):打造 ES 索引参数小助手
经过前面的实战,我们已经能够快速、准确的检索 ES 官方文档的内容了,但是还是要自己去阅读。既然 Coco AI 能与大模型交互,我们何不直接用大模型来阅读文档,回答我们的问题? 模型配置 我们进入 Coco AI 管理后台&…...
苍穹外卖心得体会
1 登录认证 技术点:JWT令牌技术(JSON Web Token) JWT(JSON Web Token)是一种令牌技术,主要由三部分组成:Header头部、Payload载荷和Signature签名。Header头部存储令牌的类型(如JW…...
Ubuntu上搭建python环境并安装第三方库
Ubuntu上搭建python环境并安装第三方库 更新系统包列表安装Python和pip验证安装创建并使用虚拟环境虚拟环境中安装第三方库编写并测试python脚本运行.py文件 使用Ubuntu 24.04搭建python环境并安装第三方库 更新系统包列表 sudo apt update安装Python和pip sudo apt install…...
redis高阶2 高性能
灵魂拷问: redis 为什么块? 纯内存访问单线程避免上下文切换渐进式ReHash , 缓存时间戳 Redis 的 key 和 value组织结构: 全局哈希表: 为了实现从键到值的快速访问。 redis 使用了一个哈希表 来保存所有键值对。一个哈希表 其实就…...
go编解码json和http请求
1.json概述 json是日常工作中http请求的最重要的数据格式。对比日常使用python中的json,获得http请求后json.loads和json.dumps函数,go中显的非常麻烦,这里结合json和http请求的总结下,便于积累和学习。这里给出一个json的类型&a…...
洛谷题解 | CF1979C Earning on Bets
目录 题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示题目思路AC 代码 题目描述 You have been offered to play a game. In this game, there are $ n $ possible outcomes, and for each of them, you must bet a certain integer amount of coins. In th…...
在线文章系统自动化测试报告
目录 1. 项目简介 1.1. 用户登录页面 1.2. 文章列表页面 1.3. 文章详情页面 1.4. 文章编辑与发布页面 2. 测试计划 3. 测试环境/工具/技术栈 4. 编写自动化测试用例编辑 5. 自动化测试脚本开发 5.1. 项目整体结构 5.2. 配置utils.py 5.2.1. 导入必要的库 5.2.2.…...
C++ 类和对象(3)初始化列表、友元函数、内部类
文章目录 再谈构造函数构造函数体内赋值 初始化列表初始化列表特点 类型转换static成员static特点C11中成员初始化的新用法 友元友元函数友元函数特点 友元类友元类的特点 内部类内部类的特点 再谈构造函数 构造函数体内赋值 当我们创建对象时,编译器会调用构造函…...
CF4C Registration system(哈希实现)
解题思路:因为这道题在每次输入一个字符串后,都需要进行一次查找以判断是否需要按照规则生成新的用户名,故这道题使用STL容器map进行哈希是最合适的(map的查找时间复杂度为log n),在题目描述中,如果用户名已经被注册&a…...
DDI0487--A1.7
Introduction RAS(Reliability,Availability,Serviceability) RAS是衡量一个系统可靠性的三个方面: Reliability——持续提供正确服务的能力。 Availability——正确提供服务的准备状态。 Serviceability——能够进行修改和修复的能力。 R…...
MySQL事务(transaction)(笔记)
事务(Transaction)(必须掌握必须理解) 1.什么是事务? 一个事务是一个完整的业务逻辑单元(一个业务逻辑单元常常涉及到多条DML语句共同执行完成),不可再分(最小的工作单元) 一个事务就是一个业务,完成一个…...
ADS1299模拟前端(AFE)代替芯片——LHE7909
在现代医疗科技的飞速发展中,精确的生物电势测量设备变得越来越重要。领慧立芯推出的LHE7909,是一款专为心电图(ECG)和其他生物电势测量设计的低噪声24位模数转换器(ADC),为医疗设备制造商提供了…...
(三十二)Android开发中AppCompatActivity和Activity之间的详细区别
在 Android 开发中,AppCompatActivity 和 Activity 是两个核心类,用于创建和管理应用程序的用户界面。尽管它们功能上有重叠,但它们之间存在显著的区别。本文将详细讲解 AppCompatActivity 和 Activity 的区别,并结合代码示例和具…...
Neo4j 的 `SET n += $properties` 语法详解
Neo4j 的 SET n $properties 语法详解 SET n $properties 是 Neo4j Cypher 查询语言中的一个非常有用的语法,用于更新节点或关系的属性。让我详细解释它的含义和工作原理: 基本含义 SET:Cypher 中用于修改属性或标签的关键字n࿱…...
springboot 框架把 resources下的zip压缩包, springboot 项目启动后解压到项目根目录工具类
最近有一个需求,在开发的时候 有一些c的扩展文件 需要放到服务器上,如果手动放上去,给用户部署项目就很麻烦,就根据这个需求,先把项目需要的 扩展文件 打包成zip压缩包 然后项目启动的时候 把resources文件夹下的 zip压…...
指针(5)
1.sizeof 和 strlen 的对比 1.1sizeof sizeof 是操作符,sizeof 计算变量所占内存空间的大小,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量所占空间的大小。 sizeof 只关注占用内存的空间的大小,不在…...
机器学习day4-Knn+交叉验证api练习(预测facebook签到位置)
数据集:FackebookV : 预测 row id:签⼊事件的id x y:坐标 accuracy: 准确度,定位精度 time: 时间戳 place_id: 签到的位置,需要预测的内容 具体步骤: # 1.获取数据集 # 2.基本数据处理 # 2.1 缩⼩数据…...