网络基础(协议,地址,OSI模型、Socket编程......)
目录
一、计算机网络发展
二、协议
1.认识协议
2.OSI七层模型
3.TCP/IP 五层(或四层)模型
4.协议本质
三、网络传输流程
1.MAC地址
2.协议栈
3.IP地址
IP地址 vs MAC地址
1. 核心区别
2. 具体通信过程类比
3. 关键总结
为什么需要两者?
4.协议栈图解
Socket编程
1.端口号
2.TCP/UDP协议
3.网络字节序
4.sockaddr 结构
一、计算机网络发展
计算机作为人类协作的重要工具,其互联需求天然催生了网络技术的发展。最初,局部范围内的连接需求推动了局域网(LAN)的诞生,这些网络如同散落世界各地的数字节点,满足着特定区域内的资源共享需求。随着协作范围的扩大,跨地域的局域网间产生了交互需求,这种拓扑扩展最终催生了覆盖更广域的广域网(WAN)技术。网络技术从LAN到WAN的演进,本质上映射着人类协作边界不断突破物理空间限制的过程。
所谓“局域网”(LAN)和“广域网”(WAN)只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网。
二、协议
1.认识协议
“协议”是一种约定,计算机要进行交流就需要有协议,就像人与人之间要进行交流就需要有语言,而语言、手语、摩斯密码等这些都是人们的一种约定。
计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息, 要想传递各种不同的信息, 就需要约定好双方的数据格式。
但是只要两台主机约定好协议就可以了吗?
并不是的,如果你用频率表示 01, 我用强弱表示 01, 就好比我用中国话, 你用葡萄牙语一样, 虽然大家可能遵守的一套通信规则, 但是语言不同, 即是订好了基本的协议, 也是无法正常通信的。这就需要我们定制一个统一的协议或标准,通常是业界公认或者具有江湖地位的组织或者公司来做这件事情。比如有国际标准化组织IEEE,ISO等。
IEEE(电气和电子工程师协会) :这是一个由计算机和工程领域专家组成的庞大技术组织, 在通信协议领域贡献突出。 IEEE 制定了全世界电子、 电气和计算机科学领域 30%左右的标准, 包括 IEEE 802 系列标准, 这些标准涵盖了从局域网(LAN) 到广域网(WAN) 等多种网络技术。
ISO(国际标准化组织): ISO 是由多个国家的标准化团体组成的国际组织, 它在开放系统互连(OSI) 模型方面的工作尤为著名。 OSI 模型定义了网络通信的七层协议结构, 尽管在实际应用中, TCP/IP 协议族更为普遍, 但 OSI 模型仍然在学术和理论研究中占有重要地位。
2.OSI七层模型
协议分层好处
协议本质也是软件, 在设计上为了更好地进行模块化, 解耦合, 也是被设计成为层状结构的。
这样的话,层与层之间互不干扰,一层的改变不会牵扯另一层,可以随意切换。
事实上计算机内部的设备与设备之间也需要交互,同样需要协议。那么现在开启你的想象力,计算机之间的通信可以这样理解:把你的计算机硬件拆成各个小零件,然后你的内存在海南,CPU在东北,磁盘在新疆,它们之间用长长的线连接组成了你的计算机。
我的意思是,计算机内部冯·诺伊曼体系本身就是一个网络结构,网络通信和本地计算机硬件之间的交互没本质区别,无非就是从非常短的距离变成了超长距离而已。然而距离一旦变长就会遇到很多新的问题,而协议就是用来解决这些问题的。
如何处理数据? | 应用层... |
数据丢了怎么办? | 传输层 |
怎么定位目标主机? | 网络层 |
怎么解决当下要去哪里? | 数据链路层... |
3.TCP/IP 五层(或四层)模型
TCP/IP 是一组协议的代名词, 它还包括许多协议, 组成了 TCP/IP 协议簇。
TCP/IP 通讯协议采用了 5 层的层级结构, 每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、 早期以太网采用的的同轴电缆(现在主要用于有线电视)、 光纤, 现在的 wifi 无线网使用电磁波等都属于物理层的概念。 物理层的能力决定了最大传输速率、 传输距离、 抗干扰性等. 集线器(Hub)工作在物理层。
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、 帧同步(就是说从网线上检测到什么信号算作新帧的开始)、 冲突检测(如果检测到冲突就自动重发)、 数据差错校验等工作. 有以太网、 令牌环网, 无线 LAN 等标准.,交换机(Switch)工作在数据链路层。
- 网络层: 负责地址管理和路由选择. 例如在 IP 协议中, 通过 IP 地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层。
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。
- 应用层: 负责应用程序间沟通, 如简单电子邮件传输(SMTP) 、 文件传输协议(FTP) 、 网络远程访问协议(Telnet) 等. 我们的网络编程主要就是针对应用层。
在传输层最出名的协议是TCP,网络层最出名的协议是IP,所以把这个模型叫作TCP/IP模型。
4.协议本质
主机之间虽然系统可能不同,但它们的协议栈都是严格按标准实现的,所以它们可以互相通信。
协议的本质是结构体,系统之间使用相同的结构体,约定好各个字段的含义,那么数据从哪里来到哪里去,要怎么用,它们都能看懂。这就像一个快递单。
注:网络通信贯穿了整个操作系统。
三、网络传输流程
局域网(Local Area Network, LAN)是指覆盖范围较小(如家庭、办公室、校园等)的网络,其核心特点是高带宽、低延迟和私有管理。
局域网发展是从计算机之间在小区域上的合作,最初几乎每个区都有自己的协议,随着网络的发展很多区域之间也需要合作,那就需要统一的协议,所以有很多的协议都被淘汰,只有少部分被保留下来,如以太网,令牌环网,无线LAN等。
这里所指的协议都是在数据链路层的,接下来以以太网为例,给大家讲解数据的传输。
以太网这个名字的由来
19世纪,科学家们觉得宇宙里必须有一种介质叫“以太”,光才得以传播,就像声音传播必须有介质一样。结果后来一群科学家一拍大腿:“这玩意儿根本不存在!”(迈克耳逊-莫雷实验室锤打脸)。但“以太”这词儿没退休,反而被程序员薅走了羊毛,计算机科学家弄出来局域网通信标准后给它起名为以太网,内涵一下物理圈。
1.MAC地址
MAC地址是用来标识计算机的唯一性,用48比特位储存,被写死在计算机网卡中,是全球唯一的。
如上是主机之间在数据链路层的通信,在一个局域网内主机A给主机E发数据,这个过程所有的主机都能看到(叫泛洪),但只有跟目标MAC值相同的才会去接收,其他主机相当于吃瓜群众。一个主机去接收不是发给自己的数据,这个过程就叫抓包。
那么试想一下如果很多台主机一起发数据会发生什么?所以
- 以太网中,任何时刻,只允许一台机器向网络发送数据。
- 如果多台同时发送,会发生数据干扰,称之为数据碰撞。
- 没有交换机的情况下,一个以太网就是一个碰撞域。
- 所有发送数据的主机要进行碰撞检测和碰撞避免。
所以这也是一个网用的人越多就越卡的原因。以太网本质就是共享资源,具有互斥属性。
2.协议栈
主机之间通信本质是协议栈在通信,我们把各主机都看做协议栈。
数据在走过每一层时都需要添加当层特有的字段,称为报头,除报头外的称为有效载荷,即
- 报文=报头+有效载荷。
注意:有效载荷是指该层的报头除外的部分,因为该层并不关心前面几层加了什么报头,都看做一块数据。
如下:
在不同层报文有不同的名称:
- 数据链路层:数据帧。
- 网络层:数据报。
- 传输层:数据段。
- 应用层:请求与应答。
细节1:
对于应用层协议除外的所有协议,要满足以下两点:
- 报头要能做到和有效载荷分离的能力。
- 报头中必须包含如何将自己的有效载荷交付给上一层的具体协议。
细节2:
- 主机在数据链路层判断报文是否发给自己,不是就直接丢弃。
细节3:
- 如上,整个数据的封装与解包的过程,相当于入栈与出栈。所以我想大家知道为什么叫协议栈了吧!
3.IP地址
IP地址分为IPv4和IPv6,用来标识计算机的唯一性,同样是全球唯一的,IPV4是4字节的空间,即2^32次方,随着全球的人数不断增加,IP地址开始不够用,后来我国推出了IPV6为16字节空间,但要推广的全世界仍然是一个难题。
我想大家现在会很疑惑,刚才不是讲了一个MAC地址是标识计算机的唯一性吗,现在怎么又来一个IP地址标识计算机的唯一性?
IP地址 vs MAC地址
1. 核心区别
-
IP地址:负责全局寻址,标识通信的起点(源)和终点(目标),类似“出发地”和“最终目的地”。
-
例子:唐僧从东土大唐(源IP)出发,最终目标是西天(目标IP),这两个地址在整个旅程中不变。
-
-
MAC地址:负责局部寻址,标识每一段路程的直接上一站和下一站,类似“当前驿站”和“下一个驿站”。
-
例子:从东土大唐到高老庄,再到流沙河……每一段的起点和终点MAC地址都会变化。
-
2. 具体通信过程类比
假设唐僧取经的路线是:
东土大唐 → 高老庄 → 流沙河 → 火焰山 → 西天
通信阶段 | IP地址 | MAC地址(当前跳) | 解释 |
---|---|---|---|
出发时 | 源:东土大唐 目标:西天 | 源MAC:大唐 目标MAC:高老庄 | 唐僧离开大唐时,只需知道第一站是高老庄(MAC地址指向直接下一站)。 |
到达高老庄后 | 源:东土大唐 目标:西天 | 源MAC:高老庄 目标MAC:流沙河 | 高老庄的人告诉他下一站是流沙河,MAC地址更新为新的“局部起点和终点”。 |
到达流沙河后 | 源:东土大唐 目标:西天 | 源MAC:流沙河 目标MAC:火焰山 | 流沙河的河神指引他去火焰山,MAC地址再次更新。 |
…… | (IP始终不变) | (MAC逐段更新) | 直到最终抵达西天。 |
3. 关键总结
-
IP地址:像“终极目标”,全程不变(唐僧始终牢记要去西天)。
-
MAC地址:像“路标”,每到一个新地方就问:“下一站怎么走?”(MAC地址动态更新,确保每一步不迷路)。
-
网络通信:数据包像唐僧,IP决定最终去向,MAC决定如何走到下一跳(路由器或交换机)。
MAC地址 | IP地址 |
---|---|
物理地址,固化在硬件中 | 逻辑地址,可动态分配 |
用于同一局域网内的直接通信 | 用于跨网络的路由通信 |
数据链路层(OSI第二层) | 网络层(OSI第三层) |
为什么需要两者?
-
IP地址是逻辑上的全局定位,但实际网络中数据包需要经过多个设备(路由器、交换机),这些设备之间需要通过MAC地址在本地网络中准确传递数据。
-
就像唐僧不能直接“瞬移”到西天,必须依赖每一站的指引(MAC地址),而IP地址保证他最终不会走偏。
4.协议栈图解
如上图,数据在网络层添加报头时带有源IP和目标IP,在数据链路层发现目标IP不是不是局域网内IP,然后添加MAC目标地址为路由器。传输到路由器后,路由器解包,分析目标IP后重新封装,即加报头,此时传到另一个局域网,注意它封装的这个报头的协议已经不是原来局域网用的协议了,而是新局域网用的协议。
所以局域网之间尽管用不同的协议也无所谓,在路由器这里会进行重新封装。从另一层面也说明了为什么有MAC地址还要在网络层加IP地址好处,它让世界的所有网络都是 IP 网络
,屏蔽最底层网络的差异。
Socket编程
1.端口号
我们上网本质就是做两台主机的交互,一个是本地,一个是远端,即客户端与服务器。但是一个主机上客户端是有很多的,比如:QQ,微信,抖音,爱奇艺等。服务器同样有很多,QQ,微信,王者荣耀等。
所以一个数据传输到目标主机还不够,还要把数据送入正确的服务器或客户端。
服务器和客户端的本质是什么?是一个程序,即进程。所以数据发送除了需要目标主机还需要目标进程。也就有了端口号用来标记一个主机内的唯一进程,端口号即port。
总结:IP+port可以确定全球唯一的进程。
- 细节1:一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定。。
- 细节2:虽然进程里面有进程ID标识进程唯一性,但进程 ID 属于系统概念, 用它来标识唯一性会让系统进程管理和网络强耦合, 实际设计的时候,并没有选择这样做。
端口号是多少字节,怎么分配的?
端口号在TCP/IP协议中是一个16位无符号整数,占用2字节,取值范围为 0~65535(即 12^16−1)
一个主机内的进程是有生命周期的,这也决定了端口号是动态绑定的。可以由系统随机分配和绑定,也可以有程序员自己绑定。但端口号0~1023是知名端口,不可以由我们把它绑定到进程,就像我们不能把110、120、119作自己的电话号码一样。只有1023以后才能有我们绑定。
2.TCP/UDP协议
在传输层有TCP/UDP协议,我们先做简单了解,它们的特性如下:
特性 | TCP | UDP |
---|---|---|
连接性 | 面向连接(需三次握手建立连接) | 无连接(直接发送数据) |
可靠性 | 数据可靠传输(确认、重传、校验) | 不保证可靠性(可能丢包、乱序) |
传输效率 | 低(因额外控制机制) | 高(无复杂控制流程) |
数据边界 | 字节流(无固定边界) | 数据报(保留发送边界) |
3.网络字节序
在计算机中并没有规定在储存一个数据时是把高位储存在地址还是低地址,所以就有了大端机和小端机,小端是低地址存放低位,巧记“小”“小”“小”,其他情况为大端机。
在网络通信,即计算机之间要进行交互,就需要解决一个存储方式不一致问题,统一规定使用大端存储,即网络字节序,在计算机把数据丢入网络前要把数据转化为大端模式。
网络字节序=大端模式。
4.sockaddr 结构
sockaddr 结构是网络编程中用于表示套接字地址的通用数据结构。
它既可以用做网络通信,可以用作本地通信。它的实现具有多态的性质。如下:
sockarr_in是网络通信的套接字,socket_un是本地通信的套接字。类型转化为sockaddr后通过头16位地址判断出类型。
相关文章:
网络基础(协议,地址,OSI模型、Socket编程......)
目录 一、计算机网络发展 二、协议 1.认识协议 2.OSI七层模型 3.TCP/IP 五层(或四层)模型 4.协议本质 三、网络传输流程 1.MAC地址 2.协议栈 3.IP地址 IP地址 vs MAC地址 1. 核心区别 2. 具体通信过程类比 3. 关键总结 为什么需要两者? 4.协议栈图解…...
产品经理学习过程
一:扫盲篇(初始产品经理) 阶段1:了解产品经理 了解产品经理是做什么的、产品经理的分类、产品经理在实际工作中都会接触什么样的岗位、以及产品经理在实际工作中具体要做什么事情。 二:准备篇 阶段2:工…...
深入理解Java包装类:自动装箱拆箱与缓存池机制
深入理解Java包装类:自动装箱拆箱与缓存池机制 对象包装器 Java中的数据类型可以分为两类:基本类型和引用类型。作为一门面向对象编程语言, 一切皆对象是Java语言的设计理念之一。但基本类型不是对象,无法直接参与面向对象操作&…...
Linux中的信号量
目录 信号量概念 定义 操作 类型 应用 信号量封装 一、创建信号量 头文件 函数原型 参数说明 返回值 示例 二、设置信号量初始值 头文件 函数原型 参数解释 返回值 示例 三、信号量的P操作 头文件 函数原型 参数解释 返回值 示例 四、信号量的V操作 示…...
深入理解linux操作系统---第15讲 Web 服务器 Nginx
15.1 Nginx 概述 核心特性与历史背景 Nginx由俄罗斯工程师Igor Sysoev于2002年开发,2004年正式发布,旨在解决传统服务器(如Apache)的C10K问题(即单机万级并发连接处理)。其采用事件驱动(Event…...
深度解析算法之前缀和
25.【模版】一维前缀和 题目链接 描述 输入描述 输出描述 输出q行,每行代表一次查询的结果. 示例 输入: 3 2 1 2 4 1 2 2 3 复制 输出: 3 6 这个题的话就是下面的样子,我们第一行输入 3 2的意思即是这个数组是3个元素大小的数组&…...
混合精度训练中的算力浪费分析:FP16/FP8/BF16的隐藏成本
在大模型训练场景中,混合精度训练已成为降低显存占用的标准方案。然而,通过NVIDIA Nsight Compute深度剖析发现,精度转换的隐藏成本可能使理论算力利用率下降40%以上。本文基于真实硬件测试数据,揭示不同精度格式的计算陷阱。…...
6.8 Python定时任务实战:APScheduler+Cron实现每日/每周自动化调度
Python定时任务实战:APScheduler+Cron实现每日/每周自动化调度 实现每日和每周定时任务 关键词:定时任务调度、Python 原生调度器、Cron 脚本、异常重试机制、任务队列管理 1. 定时任务架构设计 采用 分层调度架构 实现灵活的任务管理: #mermaid-svg-PnZcDOgOklVieQ8X {f…...
[Android] 豆包爱学v4.5.0小学到研究生 题目Ai解析
[Android] 豆包爱学 链接:https://pan.xunlei.com/s/VOODT6IclGPsC7leCzDFz521A1?pwdjxd8# 拍照解析答案 【应用名称】豆包爱学 【应用版本】4.5.0 【软件大小】95mb 【适用平台】安卓 【应用简介】豆包爱学,一般又称河马爱学教育平台app,河马爱学。 关…...
swift-12-Error处理、关联类型、assert、泛型_
一、错误类型 开发过程常见的错误 语法错误(编译报错) 逻辑错误 运行时错误(可能会导致闪退,一般也叫做异常) 2.1 通过结构体 第一步 struct MyError : Errort { var msg: String } 第二步 func divide(_ …...
每日定投40刀BTC(14)20250409 - 20250419
定投 坚持 《磨剑篇》浮生多坎壈,志业久盘桓。松柏凌霜易,骅骝涉险难。砺锋临刃缺,淬火取金残。但使精魂在,重开万象端。...
【刷题Day20】TCP和UDP(浅)
TCP 和 UDP 有什么区别? TCP提供了可靠、面向连接的传输,适用于需要数据完整性和顺序的场景。 UDP提供了更轻量、面向报文的传输,适用于实时性要求高的场景。 特性TCPUDP连接方式面向连接无连接可靠性提供可靠性,保证数据按顺序…...
大数据建模与评估
文章目录 实战案例:电商用户分群与价值预测核心工具与库总结一、常见数据挖掘模型原理及应用(一)决策树模型(二)随机森林模型(三)支持向量机(SVM)模型(四)K - Means聚类模型(五)K - Nearest Neighbors(KNN)模型二、运用Python机器学习知识实现数据建模与评估(一…...
Python语法系列博客 · 第6期[特殊字符] 文件读写与文本处理基础
上一期小练习解答(第5期回顾) ✅ 练习1:字符串反转模块 string_tools.py # string_tools.py def reverse_string(s):return s[::-1]调用: import string_tools print(string_tools.reverse_string("Hello")) # 输出…...
Pandas取代Excel?
有人在知乎上提问:为什么大公司不用pandas取代excel? 而且列出了几个理由:Pandas功能比Excel强大,运行速度更快,Excel除了简单和可视化界面外,没有其他更多的优势。 有个可怕的现实是,对比Exce…...
《解锁图像“高清密码”:超分辨率重建之路》
在图像的世界里,高分辨率意味着更多细节、更清晰的画面,就像用高清望远镜眺望远方,一切都纤毫毕现。可现实中,我们常被低分辨率图像困扰,模糊的监控画面、老旧照片里难以辨认的面容……不过别担心,图像超分…...
杨校老师课堂之C++入门练习题梳理
采用C完成下列题目,要求每题目的时间限制:1秒 内存限制:128M 1. 交换个位与十位的数字 时间限制:1秒 内存限制:128M 题目描述 试编写一个程序,输入一个两位数,交换十位与个位上的数字并输出。 …...
基于springboot的老年医疗保健系统
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言࿰…...
数据分析与挖掘
一 Python 基本语法 变量与数据类型 : Python 中变量无需声明,直接赋值即可。 常见的数据类型有数值型(整型 int、浮点型 float、复数型 complex)、字符串型(str,用单引号、双引号或三引号括起来ÿ…...
RoBoflow数据集的介绍
https://public.roboflow.com/object-detection(该数据集的网址) 可以看到一些基本情况 如果我们想要下载,直接点击 点击图像可以看到一些基本情况 可以点击红色箭头所指,右边是可供选择的一些yolo模型的格式 如果你想下载…...
大模型Rag - 两大检索技术
一、稀疏检索:关键词匹配的经典代表 稀疏检索是一种基于关键词统计的传统检索方法。其基本思想是:通过词频和文档频率来衡量一个文档与查询的相关性。 核心原理 文档和查询都被表示为稀疏向量(如词袋模型),只有在词…...
【T型三电平仿真】SVPWM调制
目录 仿真模型分析 克拉克变换 大扇区判断编辑 小区域判断 计算基本电压矢量作用时间 确定基本电压矢量的作用顺序 作用时间和矢量作用顺序对应 七段式化生成阶梯图 矢量状态分布 本人学习过程中提出的问题和解释 SVPWM调制实现了什么功能 SVPWM的算法步骤是什么…...
树莓派5-开发应用笔记
0.树莓派系统目录 /home:用户目录。 除了root用户外,其他所有的使用者的数据都存放在这个目录下,在树莓派的系统中,/home目录中有一个pi的子目录,这个就是pi用户的默认目录。 /bin: 主要放置系统的必备执行文件目录。 …...
[Java实战经验]异常处理最佳实践
一些好的异常处理实践。 目录 异常设计自定义异常为异常设计错误代码(状态码)设计粒度全局异常处理异常日志信息保留 异常处理时机资源管理try-with-resources异常中的事务 异常设计 自定义异常 自定义异常设计,如业务异常定义BusinessExce…...
AOSP的Doze模式-LightIdle初识
前言 从Android 6.0开始,谷歌引入了Doze模式(打盹模式)的省电技术延长电池使用时间。根据第三方测试显示,两台同样的Nexus 5,开启的Doze的一台待机能达到533小时,而未开启Doze的一台待机只能达到200小时。Doze省电效果十分明显。…...
QML动画--ParticleSystem
ParticleSystem 是 QML 中用于创建和管理粒子系统的组件,可以制作各种粒子效果如火焰、烟雾、爆炸等。 基本用法 qml import QtQuick.Particles 2.15ParticleSystem {id: particleSystemImageParticle {source: "particle.png"color: "red"a…...
Win 11 重装 Ubuntu 双系统方法
有时候 Ubuntu 环境崩溃了,或者版本过低,需要卸载重装。本文介绍重装的方法,默认已经有一个双系统。 1. 删除原先 Ubuntu 分区 首先打开 Win 的磁盘管理,找到 Ubuntu 的分区,右键删除分区(注意不要错删 wi…...
单例模式:懒汉式的两种优化写法
单例模式:全局唯一实例 懒汉式:获取时才初始化 ①静态局部变量实现(Meyer’s Singleton)【推荐】 /* 类内创建自身实例的可行性分析:在C中,类可以通过静态成员函数创建自身实例。这种机制的核心在于&…...
详细解释浏览器是如何渲染页面的?
渲染流程概述 渲染的目标:将HTML文本转化为可以看到的像素点 当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务࿰…...
高速系统设计简介
1.1 PCB 设计技术回顾 1981 年 8 月 12 日,IBM 正式发布了历史上第一台个人电脑,自此之后,个人电脑融入了人们生活和工作的各个角落,人类从此进入了个人电脑时代。个人电脑的出现,不仅促进了电子产品在消费领域的发展…...
不规则曲面上两点距离求取
背景 在CT中求皮肤上两点间的弧长。由于人体表面并不是规则的曲面,不可能用圆的弧长求取方法来计算出两点间的弧长。 而在不规则的曲面上求两点的距离,都可以用类似测地线距离求取的方式来求取(积分),而转化为搜索路…...
用usb网卡 虚拟机无法开到全双工的解决办法
今天突发奇想 给unraid宿主机插了两个一摸一样的usb网卡 2.5g的 直通给不同的虚拟机 这里unraid需要安装"USB Manager" 请给unraid自备环境 直通的时候 第一次还没生效 看不到网卡 我又在unraid的管理界面 顶部可以看到多出来一个 "usb"页面 打开可…...
webpack 中 chunks详解
webpack 中 chunks详解 在 Webpack 项目中,webpack.config.js 是核心配置文件,而非 webpack.json。chunks 的概念与 Webpack 的代码分割(Code Splitting)功能密切相关,通过 optimization.splitChunks 配置项可以实现对…...
Java @Serial 注解深度解析
Java Serial 注解深度解析 1. 注解本质 Serial 是 Java 14 引入的编译时校验注解,用于标记序列化相关成员,帮助开发者避免常见的序列化错误。 2. 核心作用 (1) 主要用途 标记序列化相关的特殊方法/字段 提供编译时检查 替代传统的命名约定验证 (…...
齐次坐标变换+Unity矩阵变换
矩阵变换 变换(transform):指的是我们把一些数据,如点,方向向量甚至是颜色,通过某种方式(矩阵运算),进行转换的过程。 变换类型 线性变换:保留矢量加和标量乘的计算 f(x)…...
Python语法系列博客 · 第9期[特殊字符] 函数参数进阶:*args、**kwargs 与参数解包技巧
上一期小练习解答(第8期回顾) ✅ 练习1:整数转字符串列表 nums [1, 2, 3, 4, 5] str_list list(map(str, nums))✅ 练习2:筛选回文字符串 words ["madam", "hello", "noon", "python&qu…...
Python语法系列博客 · 第4期[特殊字符] 函数的定义与使用:构建可复用的模块
上一期小练习解答(第3期回顾) ✅ 练习1:创建一个列表,添加5个名字,并用循环打印 names ["Alice", "Bob", "Charlie", "David", "Eva"] for name in names:print…...
6547网:2025年3月 Python编程等级考试一级真题试卷
2025年3月青少年软件编程Python等级考试(一级)真题试卷 题目总数:37 总分数:100 选择题 第 1 题 单选题 下列哪个软件不能运行Python程序?( ) A.JupyterNotebook B.Pycharm C.原版…...
微前端框架Module Federation
以下是 Module Federation 的核心知识点,并结合微前端架构的设计思想,帮助我们构建完整的知识体系: 一、Module Federation 基础概念 1. 什么是 Module Federation? 定义:Webpack 5 引入的一项革命性功能,允许在运行时动态加载其他独立构建的应用模块(微前端),实现跨…...
AUTOSAR图解==>AUTOSAR_SWS_IntrusionDetectionSystemManager
AUTOSAR 入侵检测系统管理器 (IdsM) 详解 AUTOSAR安全框架的核心组件 1. 概述 AUTOSAR 入侵检测系统管理器(Intrusion Detection System Manager, IdsM)是AUTOSAR标准中安全防护框架的关键组成部分,专门负责处理车载安全事件。IdsM模块提供了…...
Alan AI - 面向Web的生成式AI SDK
本文翻译整理自:https://github.com/alan-ai/alan-sdk-web 文章目录 一、关于 Alan AI相关链接资源关键功能特性Alan AI StudioAlan AI SDKAlan AI Cloud 二、为什么选择Alan AI?三、快速开始四、下载安装五、示例应用六、其他平台SDK七、获取帮助 一、关…...
递归下降 ll(1) 型文法 识别二元组文法分析
#include <stdio.h> #include <string.h>FILE* fp; FILE* fa2;char* str new char[1200]; // 循环读取文件,分200字节读取char* peek;// 表格 typedef struct table {char* sign;char* kind;char* message; } signtable;signtable* list; // 数…...
Qt unknown module(s) in qt:serialport解决方法
在Ubuntu和CentOS系统中,若使用Qt时遇到Unknown module(s) in QT: serialport错误,通常是由于未正确安装Qt的串口模块(QSerialPort)或项目配置不当导致。以下是针对两种系统的解决方案: 一、安装Qt串口模块 1. Ubuntu/Debian系列 安装开发包: 执行以下命令安装Qt5串口模…...
金融数学专题6 证券问题与资本利得税
一、固定利息证券 特点:利息固定,且可以在证券名字中体现。 发行价格:公司公开发行证券的价格。 固定利率证券通常在其名称中包括应付利率,例如,8% Treasury Stock 2021 或 5% Treasury Gilt 2018。每位持有人应得的年利息是通…...
XGBoost
XGBoost 假设一共有 m m m个基模型,分别为 f 1 ( x ) , f 2 ( x ) , … , f m ( x ) f_1(x),f_2(x),\dots,f_m(x) f1(x),f2(x),…,fm(x), n n n个样本, x 1 , x 2 , … , x n x_1,x_2,\dots,x_n x1,x2,…,xn,则XGBoo…...
Kubernetes 多主多从集群部署完整文档
好久不见呀!今天给大家整点干货尝尝(其实是自己的总结),主打的就是全程无尿点。 Kubernetes 多主多从集群部署完整文档 1. 机器列表 PS: master,lb,nfs机器均为CentOS 7,其他为Ubuntu 22.04 L…...
使用Spring Validation实现参数校验
引入Spring Validation 起步依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>参数校验失败异常处理 所有的http请求异常都会被拦截处理 exception…...
用思维导图解锁计算机科学导论的知识宝库
引言 在计算机科学的浩瀚海洋中,“计算机科学导论” 如同开启宝藏的钥匙,是众多学习者踏入这片领域的第一步。今天,我将借助思维导图这一强大工具,带大家梳理计算机科学导论的关键知识点,同时也希望能为大家在学习的道…...
软件架构分层策略对比及Go项目实践
一、水平分层 vs 功能划分 vs 组件划分 维度水平分层功能划分组件划分核心思想按垂直层次划分职责(如表示层、业务层、数据层)按业务功能模块划分(如用户管理、订单服务、支付模块)按技术或业务能力划分独立组件(如数…...
Python学习之Seaborn
Python学习之Seaborn 如果说Matplotlib试图让简单的事情变得容易,让困难的事情成为可能,那么Seaborn试图让一组定义明确的复杂的事情变得简单. Seaborn是在Matplotlib的基础上开发的高级可视化库, 它更专注于数据可视化的美学设计和统计图形的绘制. Matplotlib需要大量的代码创…...