应用层之网络应用模型,HTTP/HTTPS协议
应用层是网络协议栈的最顶层,直接为应用程序提供通信服务,定义了不同主机间应用进程交互的规则,包括报文类型、语法、语义及通信时序
一、网络应用模型
1.定义及特点
模型 | 定义 | 核心特点 | 典型应用场景 |
---|---|---|---|
C/S | 客户端向服务器发起请求,服务器集中处理并响应资源,依赖中心化架构 | 1. 角色明确(客户端与服务器分离)2. 资源集中在服务器端 3. 依赖网络稳定性与服务器性能 4. 易于管理和维护 | Web服务(HTTP)、邮件系统(SMTP)、数据库管理、在线支付 |
P2P | 节点间直接通信,无中心服务器,每个节点既是客户端又是服务器 | 1. 去中心化,节点对等 2. 资源共享与分布式存储 3. 高扩展性与容错性 4. 依赖节点贡献资源 | 文件共享(BitTorrent)、流媒体(PPLive)、区块链(比特币)、即时通信(Skype) |
- 架构与通信方式
- C/S架构:
- 分层结构:客户端仅负责请求与展示,服务器处理逻辑与数据存储。
- 通信流程:单向请求-响应模式,客户端通过TCP/IP协议连接服务器端口(如HTTP的80端口)
- 局限性:单点故障风险(服务器宕机导致服务中断);扩展需依赖负载均衡或集群技术 。
- P2P架构
- 覆盖网络(Overlay):
覆盖网络是P2P架构的逻辑核心,通过在物理网络(Underlay)之上构建虚拟拓扑结构,实现节点的自组织与资源定位。其核心形式包括:-
结构化覆盖网络
- DHT(分布式哈希表): 将资源标识(哈希值)与节点逻辑地址绑定,通过一致性哈希算法(如SHA-3)将资源均匀分布到网络中。例如,Chord协议将节点和资源ID映射到环形拓扑中,每个节点维护一个Finger表(记录距离指数级递增的邻居),实现O(log N)复杂度的资源定位。应用场景 :以太坊节点发现(基于Kademlia DHT)、BitTorrent无Tracker种子分发
- Chord原理: 节点通过查询Finger表中的“最近但不超过目标ID”的节点,逐步逼近目标资源(如资源ID=54的查找路径:N8→N42→N51→N56)
-
非结构化覆盖网络:
- 泛洪广播机制:节点随机连接邻居,通过TTL(生存时间)和跳数控制查询范围。例如,Gnutella节点收到查询请求后广播至所有邻居,直到找到匹配资源或TTL耗尽。
- 超级节点优化: 引入高带宽节点作为超级节点(如KaZaA),缓存热门资源索引,减少广播开销
-
- 通信流程:
P2P通信通过直接节点交互实现高效分发,典型案例如BitTorrent:- 资源分片与分发逻辑:
- 种子文件(.torrent): 包含文件元数据(分片哈希、Tracker/DHT信息)。种子文件通过哈希校验(如SHA-1)确保数据完整性。
- 分片交换(Piece Exchange): 节点并行下载不同分片,同时为其他节点上传已下载分片。下载优先级策略(如“最稀缺优先”)优化全局分发效率。
- 传输优化技术
- 并行连接: 单个节点同时与多个Peer建立TCP/UDP连接(如BitTorrent客户端默认连接50个Peer)。
- 本地Peer交换(PEX): 节点交换已知Peer列表,加速资源定位(如Transmission客户端支持PEX)。
- WebTorrent扩展: 基于WebRTC实现浏览器内P2P传输,兼容传统BitTorrent协议。
- 资源分片与分发逻辑:
- . 穿透技术:
P2P节点常位于私有网络(NAT后),需NAT穿透(如STUN/TURN协议)解决私有网络节点连接问题.
- 覆盖网络(Overlay):
- 优缺点
模型 | 优点 | 缺点 |
---|---|---|
C/S | - 集中管理,安全性高(如权限控制)- 数据一致性易维护- 适合复杂业务逻辑处理 | - 服务器压力大,扩展成本高- 单点故障风险- 客户端依赖服务器响应速度 |
P2P | - 高扩展性(节点越多性能越优)- 容错性强(部分节点故障不影响整体)- 节省服务器成本 | - 管理复杂(节点自治性强)- 安全性挑战(如DDoS攻击、版权问题)- 依赖节点资源贡献(可能“搭便车”现象) |
二、HTTP/HTTPS
一、核心定义与特点
特性 | HTTP | HTTPS |
---|---|---|
基础定义 | 基于TCP/IP的无状态协议,用于客户端与服务器间明文传输超文本资源(如HTML、图片) | HTTP的安全扩展,通过SSL/TLS加密层实现数据加密传输及身份认证 |
默认端口 | 80 | 443 |
数据传输方式 | 明文(未加密),易被中间人窃听或篡改 | 加密传输(结合对称加密与非对称加密),防止数据泄露 |
身份验证 | 无验证机制,服务器身份无法保证 | 需CA签发数字证书验证服务器身份,防止钓鱼攻击 |
性能开销 | 低(无加密流程) | 较高(TLS握手延迟),但现代优化技术(如TLS 1.3)显著降低影响 |
安全性保障 | 无完整性校验与防篡改机制 | 通过消息认证码(MAC)和数字签名确保数据完整性 |
二、HTTPS安全机制
- 加密技术
- 非对称加密(RSA/ECC):用于握手阶段交换密钥。客户端用服务器公钥加密随机生成的对称密钥(预主密钥),服务器用私钥解密
- 对称加密(AES):后续数据传输使用共享的对称密钥加密(对数据加密),效率高且适合大数据量.
- 身份验证与数字证书:
- 数字证书作用:验证服务器身份,防止中间人攻击。证书包含公钥、域名、颁发机构(CA)及签名
- 证书验证流程:
a. 客户端检查证书有效期、颁发机构可信度。
b. 验证证书链(根证书→中间证书→服务器证书)。
c. 检查域名匹配性(如访问www.example.com的证书需包含该域名)
- 完整性保护:
消息认证码(MAC):通过HMAC算法生成校验值,确保数据未被篡改。
三、 HTTPS握手流程与通信流程
一、HTTP握手阶段(TCP三次握手)
三次握手确保双方具备双向通信能力,为后续HTTP/TLS数据传输提供可靠通道。
-
SYN(客户端 → 服务器)
- 客户端发送带有初始序列号的SYN包(如Seq=100),发起连接请求。
- 作用:告知服务器客户端准备通信,并同步初始序列号。
-
SYN + ACK(服务器 → 客户端)
-
服务器响应SYN包,返回SYN+ACK包(Seq=300,ACK=101)。
-
作用 :
- 确认客户端的SYN(ACK=101表示已收到Seq=100);
- 发送服务器自身的初始序列号(Seq=300)。
-
-
ACK(客户端 → 服务器)
- 客户端回复ACK包(Seq=101,ACK=301),确认服务器响应。
- 作用:双方确认序列号同步,TCP连接正式建立。
二、TLS握手阶段(加密参数协商与密钥交换)
协商加密算法、验证身份、生成会话密钥,建立安全通信通道。
- ClientHello(客户端 → 服务器)
- 发送支持的TLS版本(如TLS 1.3)、加密套件列表(如AES-GCM)、随机数(Client Random)。
- 作用:告知服务器客户端支持的加密能力。
- ServerHello(服务器 → 客户端)
- 返回选定的TLS版本、加密套件(如ECDHE-RSA-AES128-GCM)、随机数(Server Random)。
- 作用:确定双方使用的加密参数。
- Certificate(服务器 → 客户端)
- 发送服务器的数字证书(含公钥),由CA签发。
- 作用:客户端验证服务器身份(防止中间人攻击)。
- ServerHelloDone(服务器 → 客户端)
- 通知客户端服务器参数发送完毕,等待客户端响应。
- ClientKeyExchange(客户端 → 服务器)
- 客户端生成预主密钥(Pre-Master Secret),用服务器公钥加密后发送。
- 作用:结合Client Random和Server Random生成主密钥(Master Secret),用于派生会话密钥。
- ChangeCipherSpec(客户端 → 服务器)
- 客户端通知服务器:后续消息将使用协商的加密套件和密钥加密。
- Finished(客户端 → 服务器)
- 发送加密的验证消息,确保握手过程未被篡改。
- ChangeCipherSpec(服务器 → 客户端)
- 服务器确认切换到加密通信模式。
- Finished(服务器 → 客户端)
- 服务器发送加密验证消息,双方确认握手完成。
TLS握手通过非对称加密交换密钥 + 对称加密传输数据,实现以下安全目标:
- 机密性:数据加密传输(如AES-GCM);
- 完整性:HMAC校验防篡改;
- 身份认证:CA证书验证服务器身份。
相关文章:
应用层之网络应用模型,HTTP/HTTPS协议
应用层是网络协议栈的最顶层,直接为应用程序提供通信服务,定义了不同主机间应用进程交互的规则,包括报文类型、语法、语义及通信时序 一、网络应用模型 1.定义及特点 模型定义核心特点典型应用场景C/S客户端向服务器发起请求,服…...
(七)Spring Boot学习——Redis使用
有部分内容是常用的,为了避免每次都查询数据库,将部分数据存入Redis。 一、 下载并安装 Redis Windows 版的 Redis 官方已不再维护,你可以使用 微软提供的 Redis for Windows 版本 或者 使用 WSL(Windows Subsystem for Linux&a…...
11 | 给 Gin 服务器添加中间件
提示: 所有体系课见专栏:Go 项目开发极速入门实战课;欢迎加入 云原生 AI 实战 星球,12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力(聚焦于 Go、云原生、AI Infra);本节课最终…...
selenium等待
通常代码执行的速度⽐页⾯渲染的速度要快,如果避免因为渲染过慢出现的⾃动化误报的问题呢?可以使⽤selenium中提供的三种等待⽅法: 1. 隐式等待(Implicit Wait) 隐式等待适用于全局,它告诉 WebDriver 在查找元素时等待一定的时间,直到元素出现。 如果超时,WebDriver 不…...
为什么List、Set集合无法在遍历的时候修改内部元素
以常用集合ArrayList为例,ArrayList 在遍历过程中无法直接修改内部元素的结构(例如通过 remove() 或 add() 方法修改元素),是因为 遍历的过程中修改结构 可能会导致 不一致的行为、并发修改异常 或 逻辑错误。 注意:和…...
使用 Elasticsearch 构建多模式 RAG 系统:哥谭市的故事
作者:来自 Elastic Alex Salgado 学习如何构建一个多模态检索增强生成 (RAG) 系统,该系统集成文本、音频、视频和图像数据,以提供更丰富的、具有上下文的信息检索。 在这篇博客中,你将学习如何使用 Elasticsearch 构建一个多模态 …...
单一责任原则在Java设计模式中的深度解析
在软件开发中,设计模式提供了一种解决特定问题的思路。在众多的设计原则中,单一责任原则(Single Responsibility Principle,SRP)是一个非常重要的概念。它主要强调一个类应该只有一个责任,也就是说…...
设计模式学习记录
设计模式23种 创建型抽象工厂模式工厂模式生成器模式原型模式单例模式 结构型适配器模式桥接模式组合模式装饰模式外观模式享元模式代理模式 行为型责任链模式命令模式解释器模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式模版方法模式访问者模式 创建型 与对…...
set_clock_groups
一、命令参数与工具处理逻辑 核心参数定义 参数定义工具行为工具兼容性-asynchronous完全异步时钟组,无任何相位或频率关系(如独立晶振、不同时钟树)工具完全禁用组间路径的时序分析,但需用户自行处理跨时钟域(CDC&a…...
QT创建项目(项目模板、构建系统、选择类、构建套件)
1. 项目模版 项目类型界面技术适用场景核心依赖模块开发语言Qt Widget ApplicationC Widgets传统桌面应用(复杂控件)Qt WidgetsCQt Console Application无 GUI命令行工具、服务Qt CoreCQt Quick ApplicationQML/Quick现代跨平台应用(动画/触…...
麒麟系统利用pycharm生成deb文件
在麒麟系统(Kylin OS)上使用 PyCharm 进行 Python 开发并生成 .deb 可安装软件包,可以按照以下步骤进行操作: 1. 准备工作 安装 PyCharm:确保已经在麒麟系统上安装了 PyCharm,可以使用官方提供的安装包进…...
超声重建,3D重建 超声三维重建,三维可视化平台 UR 3D Reconstruction
1. 超声波3D重建技术的实现方法与算法 技术概述 3D超声重建是一种基于2D超声图像生成3D体积数据的技术,广泛应用于医学影像领域。通过重建和可视化三维结构,3D超声能够显著提高诊断精度和效率,同时减少医生的脑力负担。本技术文档将详细阐述…...
Qt 信号与槽
目录 Qt信号和槽 connect函数 connect使用方法 自定义信号 与 自定义槽 Qt界面化工具自动生成的槽 自定义信号 带参数的信号和槽 信号与槽的断开 Qt信号和槽 谈到信号,设计3个要素 信号源:谁发出了信号 信号触发条件:哪个控件的哪个…...
卷积神经网络 - 卷积的变种、数学性质
本文我们来学习卷积的变种和相关的数学性质,为后面学习卷积神经网络做准备,有些概念可能不好理解,可以先了解其概念,然后慢慢理解、逐步深入。 在卷积的标准定义基础上,还可以引入卷积核的滑动步长和零填充来增加卷积…...
ubuntu 和 RV1126 交叉编译Mosqutiio-1.6.9
最近需要交叉编译mosquitto,遇到一些小问题记录一下。 1.众所周知使用它自带的Makefile编译的时候,只需要在编译前,指定它config.mk中的变量:CFLAGS头文件路径 和 LDFLAGS库文件路径就ok,例子如下: expor…...
从零开始学习机器人---如何高效学习机械原理
如何高效学习机械原理 1. 理解课程的核心概念2. 结合图形和模型学习3. 掌握公式和计算方法4. 理论与实践相结合5. 总结和复习6. 保持好奇心和探索精神 总结 机械原理是一门理论性和实践性都很强的课程,涉及到机械系统的运动、动力传递、机构设计等内容。快速学习机械…...
STM32 RS232通信开发全解析 | 零基础入门STM32第五十九步
主题内容教学目的/扩展视频RS232串口电路原理,跳线设置,驱动程序。与超级终端通信。了解电路原理和RS232协议。 师从洋桃电子,杜洋老师 📑文章目录 一、RS232通信系统架构二、RS232核心原理与硬件设计2.1 电气特性对比2.2 典型电路…...
文献分享: 对ColBERT段落多向量的剪枝——基于学习的方法
原论文 1. 导论 & \textbf{\&} &方法 1️⃣要干啥:在 ColBERT \text{ColBERT} ColBERT方法中,限制每个段落要保留的 Token \text{Token} Token的数量,或者说对段落 Token \text{Token} Token进行剪枝 2️⃣怎么干:注…...
(已解决)aws 上 部署Splunk 负载均衡unhealthy
在AWS 部署Splunk 服务,instance 是后端的EC2, 我把splunk 服务起好后,发现port : 8000 是listening: #netstat -an | grep 80 tcp 0 0 127.0.0.1:8065 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:8089 0.0.0.0:* …...
C# 异步编程
概述 同步:指必须等待前一个操作完成,后续操作才能继续。同步操作会阻塞线程直到任务完成。 异步:异步操作不会阻塞线程,允许程序在等待某个任务完成的同时,继续执行其他任务。 异步编程适用场景: 1、从…...
缓存之美:Guava Cache 相比于 Caffeine 差在哪里?
大家好,我是 方圆。本文将结合 Guava Cache 的源码来分析它的实现原理,并阐述它相比于 Caffeine Cache 在性能上的劣势。为了让大家对 Guava Cache 理解起来更容易,我们还是在开篇介绍它的原理: Guava Cache 通过分段(…...
Go string 字符串底层逻辑
在 Go 语言中,string 类型的底层结构是一个结构体,包含两个字段:一个指向字节数组的指针和该字节数组的长度。以下是其在 Go 源码中的大致定义:type stringStruct struct {str unsafe.Pointerlen int } str:这是一个指…...
高效集成聚水潭采购退货数据到MySQL的最佳实践
聚水潭数据集成到MySQL:采购退货单的高效对接方案 在企业的数据管理和分析过程中,数据的准确性和实时性至关重要。本文将分享一个具体的系统对接集成案例:如何通过轻易云数据集成平台,将聚水潭中的采购退货单数据高效地集成到MyS…...
STM32步进电机S型与T型加减速算法
目录 一、基本原理 二、常见类型 三、算法详解 四、应用场合 五、代码实现 1、main...
centos操作系统上传和下载百度网盘内容
探序基因 整理 进入百度网盘官网百度网盘 客户端下载 下载linux的rpm格式的安装包 在linux命令行中输入:rpm -ivh baidunetdisk_4.17.7_x86_64.rpm 出现报错: 错误:依赖检测失败: libXScrnSaver 被 baidunetdisk-4.17.7-1.x8…...
深入 Python 网络爬虫开发:从入门到实战
一、为什么需要爬虫? 在数据驱动的时代,网络爬虫是获取公开数据的重要工具。它可以帮助我们: 监控电商价格变化抓取学术文献构建数据分析样本自动化信息收集 二、基础环境搭建 1. 核心库安装 pip install requests beautifulsoup4 lxml …...
网络爬虫【简介】
我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲爬虫 一、网络爬虫的定义 网络爬虫(Web Crawler),又称为网络蜘蛛、网络机器人等,是一种按照一定规则自动抓取互联网信息的程序或脚本。它…...
Linux:Ubuntu server 24.02 上搭建 ollama + dify
一、安装Ubuntu 具体的安装过程可以参见此链接:链接:Ubuntu Server 20.04详细安装教程,这里主要记录一下过程中遇到的问题。 安装时subnet如何填写 在Ubuntu中subnet填写255.255.255.0是错误的,其格式为 xx.xx.xx.xx/yy &#…...
【生日蛋糕——DFS剪枝优化】
题目 分析 代码 #include <bits/stdc.h> using namespace std;const int N 24; const int inf 0x3f3f3f3f;int mins[N], minv[N]; int R[N], H[N]; int n, m, ans inf;void dfs(int u, int v, int s) {if(v minv[u] > n) return;if(s mins[u] > ans) return;…...
RabbitMq C++客户端的使用
1.RabbitMq介绍 RabbitMQ 是一款开源的消息队列中间件,基于 AMQP(高级消息队列协议)实现,支持多种编程语言和平台。以下是其核心特点和介绍: 核心特点 多语言支持 提供 Java、Python、C#、Go、JavaScript 等语言的客…...
入门基础项目-前端Vue_02
文章目录 1. 用户信息1.1 整体设计1.2 完整代码 User.vue1.2.1 数据加载1.2.2 表格 el-table1.2.2.1 多选1.2.2.2 自定义列的内容 Slot1.2.2.3 图片 el-image1.2.2.4 分页 el-pagination 1.2.3 编辑1.2.3.1 弹出框 el-dialog1.2.3.2 上传 el-upload 1.2.4 新增1.2.5 删除1.2.6 …...
C#中SerialPort 的使用
最近在学习C#的SerialPort ,关于SerialPort 的使用,做如下总结: 1.可以通过函数System.IO.Ports.SerialPort.GetPortNames() 将获得系统所有的串口名称。C#代码如下: string[] sPorts SerialPort.GetPortNames(); foreach(stri…...
使用py-ffmpeg批量合成视频的脚本
我有一个小米摄像头,用它录出来的视频全部都是3s一段3s一段的。其中有几个小时的视频我需要保存,当初直接把摄像头的卡文件导出来重命名掉了,那时候没有注意,之后想剪辑/发送给别人的时候发现疯了: 1.剪辑的话&#x…...
mac安装navicat及使用
0.删除旧的 sudo rm -Rf /Applications/Navicat\ Premium.app sudo rm -Rf /private/var/db/BootCaches/CB6F12B3-2C14-461E-B5A7-A8621B7FF130/app.com.prect.NavicatPremium.playlist sudo rm -Rf ~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexF…...
织梦dedecmsV5.7提示信息提示框美化(带安装教程和效果展示)
一、效果展示 1、安装前效果 2、安装后效果 二、安装说明 1、安装测试版本:DedeCMS-V5.7.117-UTF8; 2、必须在修改代码之前请做好文件备份,以免误操无法恢复; 3、为了兼容其他版本,请在安装时,最好将替…...
【知识迁移的底层逻辑:从符号到语义的升维】
大语言模型(LLMs)能够通过有限语料库实现广泛知识迁移并回答多样化问题,其核心机制在于抽象模式学习、上下文推理能力及知识组合泛化,而非简单的数据记忆。以下是具体实现路径与技术原理: 一、知识迁移的底层逻辑&…...
Windows根据文件名批量在文件夹里查找文件并复制出来,用WPF实现的详细步骤
项目前言 在日常工作和生活中,我们常常会遇到需要从大量文件中根据文件名批量查找特定文件并复制到指定位置的情况。手动一个个查找和复制文件不仅效率低下,还容易出错。使用 Windows Presentation Foundation (WPF) 可以创建一个用户友好的图形界面应用…...
Certbot实现SSL免费证书自动续签(CentOS 7版 + Docker部署的nginx)
前置安装,可参考Certbot实现SSL免费证书自动续签(CentOS 7 nginx/apache) 如果是通过 Docker 运行 Nginx, certbot 无法直接检测到本地的 Nginx 配置。解决方案是 使用 standalone 模式 或 挂载 Webroot 方式获取 SSL 证书&…...
一周学会Flask3 Python Web开发-SQLAlchemy查询所有数据操作-班级模块
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们来新建一个的蓝图模块-班级模块,后面可以和学生模块,实现一对多的数据库操作。 blueprint下新建g…...
工程实践:如何使用SU17无人机来实现室内巡检任务
阿木实验室最近发布了科研开发者版本的无人机SU17,该无人机上集成了四目视觉,三维激光雷达,云台吊舱,高算力的机载计算机,是一个非常合适的平台用于室内外巡检场景。同时阿木实验室维护了多个和无人机相关的开源项目。…...
14.使用各种读写包操作 Excel 文件:辅助模块
一 各种读写包 这些是 pandas 在底层使用的各种读写包。无须安装 pandas,直接使用这些读写包就能够读写 Excel 工作簿。可以尽可能地使用 pandas 来解决这类问题,只在 pandas 没有提供你所需要的功能时才用到读写包。 表中没有 xlwings ,因为…...
深入理解 Maven BOM 及其继承特性
深入理解 Maven BOM 及其继承特性 一、什么是 Maven BOM? Maven BOM(Bill Of Materials,物料清单)是一种特殊的 Maven 项目,用于集中管理依赖项的版本信息。BOM 项目本身并不包含实际的代码或资源,而仅仅…...
责任链模式如何减少模块之间的耦合
责任链模式如何减少模块之间的耦合 在复杂的软件系统中,模块之间的耦合是一个常见的问题。高耦合的代码不仅增加了维护成本,还会导致系统的扩展性和灵活性受限。当我们需要为不同的请求设计灵活的处理逻辑时,传统的硬编码方式会将请求的发送…...
Java面试:集合框架体系
一、ArrayList 1.数组(Array) 是一种用连续的内存空间存储相同数据类型数据的线性数据结构 数组如何获取其他元素的地址值? 寻址公式:a[i] baseAddress i * dataTypeSize baseAddress:数组的首地址dataTypeSize&am…...
【八股文】ArrayList和LinkedList的区别
先讲讲两者是如何实现的 ArrayList public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable {transient Object[] elementData; private int size; } 通过源码可以看出,ArrayLis…...
sentinel限流算法
限流算法:固定窗口算法、滑动时间窗口、令牌桶和漏桶这四种常见限流算法的原理: 限流算法原理 固定窗口: 固定窗口算法将时间划分为固定大小的窗口,并在每个窗口内限制请求的数量。在每个窗口开始时,计数器重置&#…...
Spring生态下的中台架构设计:如何构建可扩展业务系统?
一、中台战略的架构觉醒 在数字化转型的浪潮中,企业面临的核心矛盾日益凸显:前端业务的快速迭代需求与后端系统刚性架构之间的矛盾。中台架构的提出,本质上是对传统单体架构和过度微服务化的辩证扬弃。Spring生态以其模块化设计理念,恰好为中台建设提供了绝佳的技术土壤。…...
Project回调函数qsort②进阶应用
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h>//库函数strcmp头文件 //使用qsort排序结构体 struct Stu { char name[20]; int age; }; //按照年龄排序 int cmp_stu_by_age(const void* e1,const void* e2) { return ((struc…...
【推荐项目】052-用水监控管理系统
052-用水监控管理系统 介绍 用水监控管理系统 springboot java vuejs jdk1.8 当然,以下是一个简洁的用水监控管理系统的功能模块划分,基于Spring Boot(JDK 1.8)后端和Vue.js前端: 用水监控管理系统功能模块 后端&…...
Hive SQL 精进系列:PERCENTILE_APPROX 搞定分位数
目录 一、引言二、percentile_approx 函数基础2.1 基本语法参数解释返回值简单示例 三、应用场景3.1 数据分析与报告3.2 数据清洗与异常值检测3.3 性能监控与优化 四、使用注意事项4.1 数据类型要求4.2 精度与性能平衡4.3 空值处理 五、总结 一、引言 百分位数作为一种常用的统…...