当前位置: 首页 > news >正文

JAVA EE_网络原理_UDP与TCP

人海中未遇见时,我将独自前行...

                                                                                                                                   ----------陳長生.


1.UDP协议

1.1.UDP协议端格式

  • UDP(用户数据报协议)是由 源端口,目标端口,长度,校验和,数据 5种结构组成。
  • 16位是UDP报文中字段的长度,这种设计在大多数都适用,同时保持了简洁性和效率
  • 报文头一共8字节,源端口,目标端口,长度,校验和各2字节
  • 源端口:标识发送方的端口号
  • 目标端口:标识接收方的端口号
  • 长度:表示整个UDP报文的长度,包括报文头和数据
  • 校验和:用来检验数据是否出错,错误数据会直接丢弃,例如:比特翻转等..
  • 单位:段

1.2.UDP的特点

  • 无连接:UDP不需要与对方建立连接,只需要知道对端的IP的端口号直接传输数据包。
  • 不可靠:因为没有建立连接直接传输数据,没有确认机制和重传机制,所以不知道对方有没有接收到数据,如果因为网络故障导致数据包没法成功发送,UDP协议也不会报错。
  • 传输速率高:因为不知道对方有没有接收到数据,没有确认机制和重传机制,所以UDP就不管对方有没有接收数据,直接发送该段数据,大大提高传输速率。
  • 面向数据报:不能够灵活控制数据的发送数量与次数,只能作为整体进行发送。
  • 不保证顺序:因为数据报独立于路由,所以每段数据都有自己的路径,这就导致了数据不能按顺序抵达终点。

1.3.理解UDP的“不可靠”

        可以将UDP协议理解成为快递卸货,卸货人员不管三七二十一,只要是该目的地的快递包裹随便拿一个就直接往后丢,不管后面的人有没有接(无连接,速率高,不保证顺序)。

1.4.校验和

        发送方构造UDP数据报,将数据的每个字节进行相加,最后组成一个16位的数据,此时得到的结果就为校验和check1,等接收方收到UDP数据报之后,就会按照相同的算法,计算一遍校验和check2,这时将check1和check2进行比较,如果相等则正确,不相等则错误。   

1.5.面向数据报

        应用层发送多少数据给UDP,就按多少数据发送出去,不能拆分也不能合并

        当接收到100字节的数据时,不能分10次10字节或2次50字节发送,只能一次性发送100字节

1.6.UDP使用注意事项

        因为一段UDP数据的长度最多为64K(65535字节)[1K=1024字节],这对于现在来说,是个很小的长度,所以传输大量数据的时候要在应用层进行切片和重组(即当我们使用UDP的时候要分多次数发送,并在接收端手动拼装)。

        一般用于可以接受数据丢失的场景,例如学校机房...

        那按理来说,将每个结构的两个字节改为四个字节不久能提高数据长度了吗,为什么不扩展一下呢? 

        因为这个操作很难,世界上任意两台设备都会可能使用UDP进行通信,如果一旦进行升级,那么就会又一部分设备为更新过的,另一部分则为旧的,新旧设备无法正常通信,可能会造成很大的事故~~

2.TCP协议

2.1.TCP协议格式

  • 16位源端口:发送端的端口号
  • 16位确认端口:接受方的端口号
  • 32位序列号:用于标记发送数据的顺序
  • 32位确认号:用于标记应答发送数据的顺序
  • 4位首部长度:32位字(即4字节),如果有一段值为5,那么该首部长度就为4*5=20字节 
  • 保留6位:用于未来扩展,例如:窗口扩大因子,时间戳...
  • 16位窗口大小:用于流量控制
  • 16位校验和:使用CRC算法检查数据是否正确
  • 16位紧急指针:用于存储紧急数据
  • 选项:提供一些额外的功能,例如:窗口扩大因子,时间戳...
  • 数据:用于存储发送内容
  • 6个序列号:
  1. URG:紧急报文(紧急报文可插队传输)
  2. ACK:应答报文
  3. FIN:结束报文
  4. SYN:同步报文
  5. PSH:催促报文(就像老师催作业)
  6. RST:复位报文(单方面断开连接)

2.2.确认应答

        基于TCP是与对方建立连接,并且可靠的协议,所以会有一个确认应答的机制。

        

        客户端每发送一条数据都会产生一个序列号,并且服务端会根据客户端的序列号产生一个确认序号与之对应

        为什么要有序列号来确认应答呢?因为网络中会产生后发先至,在网路中,数据包可能会选择不同的路由路径来传输,那么先发送的路由包可能会选择一个较长且拥塞的路径,而后发的一个数据包可能会选择一个比较通畅的路径,那么这两条数据就会产生后发先至。

        例如: 

正常情况: 

                      

后发先至情况:

        

        就造成了错误的结果,长生就认为小美爱吃香菜,其实小美是不爱吃香菜的~

加了序列号后:

2.3.超时重传        

        在网络中,一些数据包的发送可能会超出最大时间数,而超出最大时间数还没传输成功的数据包会被系统丢弃掉。而在一些网络堵塞的情况下,就很容易导致丢包现象发生,那么TCP就提供了超时重传机制。

        情况一:

        情况二:

        在以上情况中,服务端会接受到重复的数据,那么TCP如果删除这些重复的数据呢?我们前面提到过序列号,TCP根据序列号就很容易进行去重操作,就很容易的解决了这个问题。

特定时间设定:不要太长,也不要太短,设定一个中间值*2即可

        假设长生送妹妹去补习班上课,但是长生忘记了妹妹今天有没有课,到了校门口,就跟妹妹说:你进去看看有没有同学和老师,如果没有就出来跟哥哥回家。随后妹妹就走了进去,那长生肯定也不能在外面死等啊,于是就估计了妹妹从校门口到教室的时间大概是6分钟,那么就计算一个来往路程时间,等个12分钟,如果12分钟后没出来,那么今天就要上课,如果出来了,今天就没上课。

2.4.连接管理

        TCP中重要的便是“三次握手”和“四次挥手”

        正常情况下,TCP要经过“三次握手”来建立连接,“四次挥手”来断开连接

三次挥手:

        客户端和服务端都处于初始状态,服务端等待客户端发来消息,客户端给服务端发送建立请求信息,服务端接收到客户端的请求后,发送应答和建立连接请求消息给客户端,客户端接收到后就发送应答消息返回,此时两端建立连接,可以相互发送数据。

        就类似于军旅电视剧中用对讲机通信:

四次握手:

2.5.滑动窗口

        滑动窗口就是一个固定大小的空间向前滑动,就像现实中的窗户。

        正常的数据包传输是由客户端与服务端进行一发一收的操作,虽然可靠性提高,可是这样速率和性能就大幅,那么我们就可以用滑动窗口来进行批量数据的传输。

  • 固定数量进行传输
  • 接收到一个ACK值,滑动窗口就滑到下一个位置,传输该值,如何继续滑动
  • 系统会为其分配一个“发送缓存区”来确认哪条数据发送完,然后滑动窗口就将哪个值丢弃
  • 窗口越大,吞吐量越大

批量数据的传输肯定会出现丢包的情况

情况一(客户端的应答包丢失):

当客户端接收三次重复数据时,就会重新发送丢包的那条数据

情况二(服务端的数据包丢失):

服务端发送的ACK中,会包含前面所有ACK内容,所以即使前一个ACK丢失,但是后面一个ACK成功发送,也不会影响。

2.6.流量控制

        服务端处理数据的能力是有限的,当客户端发送过多的消息给服务端,就可能导致服务端的缓存区被冲垮,造成大量丢包的现象。

        于是TCP就提供了流量控制的机制,将数据由少量转多量进行发送,当服务端的缓存区到达极限时,就会停止发送ACK返回给客户端,当缓存区中的数据缓解时,就会发送试探窗口给客户端,让客户端继续发送数据给服务端。

2.7.拥塞控制

        虽然流量控制能提高可靠性,但是相对速率来讲还是提升的较少,那么TCP就由“拥塞控制”这个机制,从可靠性和速率取中值来进行数据包传输。

        

慢启动 :

        拥塞窗口从1开始增长,直到达到慢启动阈值

拥塞避免:

        当窗口超过阈值时,增长的方式变为线性增长

TCP Tahoe:

  • 当数据包丢失时,会将拥塞窗口重置为1,并重新进入慢启动阶段
  • 效率低,每次丢包时候都会降低发送速率

TCP Renp:

  • 当检测到数据包丢失时,不会将拥塞窗口置为1,而是将ssthreh值设为拥塞窗口的一半,并将当前拥塞窗口置为新ssthreh值,再进行拥塞避免
  • 效率高,减少了再丢包时产生速率的下降

        我们可以把拥塞控制的过程理解为恋爱,两个相遇相爱,很快到了热恋期,感情直线上升,热恋期过后,感情就缓缓上升,但随着两个人越来越了解,彼此的缺点也放大之后,两个人的感情到了临界点,受不了了,就会吵架(TCP Renp),甚至分手(TCP Tahoe),但过了冷静期之后,两个人又淡化了对方的缺点,甚至包容,又想起了对方的好,于是两人又和好,恢复了之前的感情~~

2.8.延迟应答

  • 如果接收到客户端的数据就立刻返回ACK消息,那么返回的窗口大小就会很小
  • 假设接收缓存区为1M,如果一次收到了500K的数据,那么立即返回的数据就是500K
  • 处理的速度很快,实际上可能5ms就处理完500K的数据
  • 但是500K还没到接收缓存区的极限,即使数据再大些也能处理得过来
  • 那就可以延迟一下,等个10ms,这样窗口的数据可能就为1M
  • 窗口越大,吞吐量就越高,速率也就也高
  • 延迟应答就是为了合理利用窗口大小来提高吞吐量

举个栗子:

        疫情上网课时候,老师会布置线上作业,但是长生落下了8项作业没写,这时候班主任就发消息问长生为什么没做作业,那么长生这时有两个选择

选择一(立即应答):

        直接回答:老师,我会补上的。

选择二(延迟应答):

        先冷落班主任,然后狂补8项作业,补完后跟老师讲:不好意思老师,我写了忘记交了。

2.9.稍带应答

        服务端接收客户端的数据时,正常应该直接发送一个应答ACK数据包,但由于TCP会延迟应答,这个ACK就会延迟一段时间发送,而这一延迟就到了服务端的返回数据包发送给客户端,那就正好两个数据包一起发送。

        稍带应答会将ACK和要返回的数据包一起发送

        长生平时比较懒,中午吃完饭之后,碗就放在水池中没洗(ACK),然后到了晚上时候,又有碗(要返回的数据包),此时水池的碗筷正好快堆满了,那么长生就把两次的碗一起洗了(捎带应答)~~

2.10.面向字节流

  • 由于TCP内容有一个缓存区,所以TCP的读和写不需要一一匹配
  • 当TCP读取一个100个字节的数据,他可以直接写100个字节数据,也可以分100次写1个字节数据
  • 读取100个字节的数据时,即不用考虑如何读也不用考虑如何写,可以一次读所有字节数据,也可以分批次读取其中的字节数据                                                                                                     

2.11.粘包问题

        粘包问题中的”包“是应用层的数据包,是指会将几个小段的数据粘成一给数据包,导致接受端区分不了原来的数据。

        

        

        TCP分批次的传输数据,最后都会到达接收端的”接收缓存区“,”接收缓存区“会将这些数据处理为一整串字符串——”aaaabbbbcccc“,那么到应用层的视角就看不出来原来的数据是怎样的,可能乱解读,一个字节一个字节或者是两个字节两个字节,就会导致传递错误的信息给用户。

解决方法:

  1. 在发送数据的开头规定读取多少个字节数,那么应用层就直到该如何读取
  2. 在每段数据的结尾设定一个分断号
  3. 在数据的开头和结尾设定一个定界符(用的少)

2.12.异常问题

进程奔溃

  • 进程奔溃表示对应的进程被关闭,而TCP不会因为进程的关闭而立即关闭,而是会保留一会,属于正常开关软件的情况。

正常关机

  • 正常流程下的关机,会将所有线程先关闭,然后进入四次挥手状态
  • 如果关机的比较慢,那么四次挥手很可能会执行完
  • 如果关机的比较快,那么四次挥手不会被执行完   
  • 对端会正常放回ack和fin,但是传送的fin并没有得到回应,出发了超时重传之后也如此,那么对端就会直接断开连接

主机掉电(拔电源)

  • 以台式机为例,拔掉电源后直接强制快速关机,根本来不及进入四次挥手状态
  • 如果掉电的是接受端,发送方会反复发送信息,但没有ack返回时,会触发超时重传机制,到一定程度后,就会发送一个复位报文,断开连接。
  • 如果掉电的是发送端,那么接收方会感受到对方突然没法消息,不知道是对端情况,可能是断电,也可能只是短时间内不想发消息,就会进行阻塞等待,那么肯定不能这么死等下去,于是就会触发TCP的”心跳包“,来判断对端是否还在。                
  • 心跳包:发送端会周期性(时间根据实际情况确定)发送一个没有内容的数据包,接受发会返回一个ack表示我还在,如果没有返回则表示接受发挂了~~

网线断开

  • 与主机掉电同理

相关文章:

JAVA EE_网络原理_UDP与TCP

人海中未遇见时,我将独自前行... ----------陳長生. 1.UDP协议 1.1.UDP协议端格式 UDP(用户数据报协议)是由 源端口,目标端口,长度,校验和,数据 5种结构组成。16位是UDP报文中字段的长度&#…...

智能Python开发工具PyCharm v2025.1——AI层级功能重磅升级

JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。 立即获取PyCharm v2025.1正式版 具体更新内容: PyCh…...

15、项目搭建:绘制城堡蓝图——React 19 工程配置

一、魔法结界初始化 1. 召唤项目骨架 npx create-next-applatest hogwarts-castle --ts --tailwind 核心咒语: • --ts:激活预言水晶球(TypeScript类型安全) • --tailwind:注入飞天扫帚级原子样式(…...

docker搭建swarm集群

环境准备 主机名 IP 角色 manger1 192.168.111.47 管理节点 worker1 192.168.111.48 工作节点 worker2 192.168.111.49 工作节点 注:三台主机都已经拉去完swarm和…...

普通IT的股票交易成长史--20250428晚

声明:本文章的内容只是自己学习的总结,不构成投资建议。文中观点基本来自yt站Andylee,美股Alpha姐,综合自己的观点得出。感谢他的无私分享。 仓位就是生命,绝对不能满仓!!!&#xf…...

【React Native】精通 react native

活到老,学到老。 一、基础核心 JavaScript/TypeScript 基础 掌握 ES6+ 语法(箭头函数、解构、Promise、async/await)。熟悉 TypeScript(类型系统、接口、泛型)以提高代码质量。React 核心概念 组件化开发(函数组件、类组件)。状态管理(useState, useEffect, useContex…...

微信小程序-van-uploader的preview-size

preview-size支持数组格式 修改前修改后1、升级微信小程序里面的van版本:2、 重新构建npm3、重启微信开发工具 修改前 引用van组件的上传文件,设置预览图尺寸,刚开始设置的是preview-size“140”,出来的效果就是一个正方形。 修改后 1、升级…...

成员方法的详细说明(结合Oracle官方文档)

在Java的对象创建过程中,成员方法的地址并不存储在对象的堆内存中。Java虚拟机的设计说明(包括Oracle的Java虚拟机规范、OpenJDK文档、以及HotSpot的设计文档)都明确区分了对象的实例数据(存储在堆内存中)和类的元数据…...

[蓝桥杯刷题]---模拟法[2]日期问题

题目如下: 题目的意思是: 给出一个日期(格式是yy mm dd,注意年份只有两位数),要找出所有可能的真实日期(合法的yyyy-mm-dd格式)。 需要考虑: 年份范围在1960到2059。 输入的yy、mm、…...

阿里开源图生动画模型AnimateAnyone2

项目背景 近年来,基于扩散模型(diffusion models)的人物图像动画化方法取得了显著进展,例如 Animate Anyone 在生成一致性和泛化性方面表现优异。然而,这些方法在处理人物与环境之间的空间关系和人-物体交互&#xff0…...

02_使用 AES 算法实现文件加密上传至阿里云、解密下载

02_使用 AES 算法实现文件加密上传至阿里云、解密下载 一、文件上传下载接口 controller 层 RestController RequestMapping("/api/common/file") Api(tags "公共文件上传") AllArgsConstructor Slf4j public class FileV2Controller {private final Os…...

Linux运维——Vim基础

Vim基础 一、移动光标1.1、基础移动1.2、屏幕滚动 二、编辑操作2.1、插入模式2.2、删除与修改2.3、复制粘贴 三、搜索与替换3.1、搜索3.2、替换 4、分屏与窗口管理4.1、分屏操作4.2、窗口调整 五、宏与批量操作六、效率技巧 一、移动光标 1.1、基础移动 快捷键作用h j k l左/…...

从外卖大战看O2O新趋势:上门私厨平台系统架构设计解析

京东高调进军外卖市场,美团全力防守,两大巨头的竞争让整个行业风起云涌。但在这场外卖大战之外,一个更具潜力的细分市场正在悄然兴起——上门私厨服务。 与标准化外卖不同,上门私厨提供的是个性化定制服务。厨师带着新鲜食材上门现…...

【网络编程】ARP协议与主机之间的通信

1. 什么是ARP协议? ARP(地址解析协议,Address Resolution Protocol) 是一种用于在网络中将IP地址转换为MAC地址的协议。它属于TCP/IP协议栈中的网络层协议,通常在局域网(LAN)环境下使用&#x…...

JVM模型、GC、OOM定位

JVM模型 程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来…...

什么是数据链路层的CRC检测以及为什么要放到帧尾?

数据链路层在封装过程中添加CRC(循环冗余校验)帧尾,主要目的是为了检测数据传输过程中可能出现的比特错误,确保数据的完整性和可靠性。具体原因如下: 1. 错误检测 物理层传输的不可靠性:数据在物理介质&am…...

Electron 入门指南

Electron 入门指南 Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用的框架。通过 Electron,你可以利用 Web 技术开发出功能强大的桌面应用程序,并且能够运行在 Windows、Mac 和 Linux 系统上。 本文将带你从零开始构建一个简单的 Ele…...

目标检测YOLO实战应用案例100讲- 无人机平台下露天目标检测与计数

目录 知识储备 基于YOLOv8改进的无人机露天目标检测与计数 一、环境配置与依赖安装 二、核心代码实现(带详细注释) 1. 改进YOLOv8模型定义(添加注意力机制) 2. 无人机视角数据增强(drone_augment.py ) 3. 多目标跟踪与计数(tracking_counter.py ) 4. 完整推理流…...

ArkTS基础实验 (二)

任务一:使用模板字符串相关知识,实现多个变量的拼接。同学们可以把自己的姓名、年纪和爱好这三个变量进行拼接。把代码和日志中console.log的打印结果截图保留。 预期效果: 任务二:使用状态变量和点击事件相关知识实现计数器案例…...

【计算机视觉】Bayer Pattern与Demosaic算法详解:从传感器原始数据到彩色图像

Bayer Pattern与Demosaic算法详解:从传感器原始数据到彩色图像 一、引言 在现代数码相机和手机摄像头中,我们能够拍摄到丰富多彩的彩色图像。然而,你可能不知道的是,图像传感器本身并不能直接感知颜色——它们只能感知光的强度。…...

媒体查询使用

一、引言 为了确保网页在不同设备上都能提供良好的用户体验,响应式设计变得至关重要。而媒体查询(Media Queries)就是前端开发中实现响应式设计的核心技术之一。 二、媒体查询的概念 媒体查询是 CSS3 引入的一项强大功能,它允许开…...

deepseek对IBM MQ SSL 证书算法的建议与解答

在IBM MQ配置SSL TLS的命令中,如果参数SSLCIPH使用TLS_RSA_WITH_AES_128_CBC_SHA256,如下所示: DEFINE CHANNEL(QM1.TO.QM2) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME(QM1.MACH.COM) XMITQ(QM2) SSLCIPH(TLS_RSA_WITH_AES_128_CBC_SHA256) DESCR(S…...

服务器文件同步工具有哪些?

服务器文件同步工具的选择取决于你的具体需求(如实时同步、单向/双向同步、跨平台支持、安全性等)。以下是几款主流的服务器文件同步工具推荐,适用于不同场景: 1. 实时同步工具(适合高频率、低延迟需求) rsync 特点:经典增量同步工具,支持本地/远程同步,高效节省带宽。…...

Numpy数组与矩阵——python学习

我前面提到过Numpy函数,但是不够全,在这里我顺便做一些补充。先说明一下我用的是Notebook。 一、数组的创建与操作 1、把列表转换为数组 np.array([1,2,3,4,5]) 2、把元组转换为数组 np.array((1,2,3,4,5)) 3、把range对象转换为数组 np.array(rang…...

CasaOS上部署1Panel开源运维面板远程在线访问配置实操指南

文章目录 前言1. 添加镜像源2. 部署1Panel3. 本地访问测试4. 安装内网穿透工具5. 配置公网地址6. 配置固定公网地址 前言 很多时候在尝试远程管理服务器时,常常会遇到各种各样的麻烦,尤其是缺乏公网IP或者路由器设置过于复杂时,更是让人感到…...

深入理解缓存淘汰策略:LRU 与 LFU 算法详解及 Java 实现

一、LRU (Least Recently Used - 最近最少使用) LRU 策略的核心思想是:当缓存空间不足时,优先淘汰最近最长时间未被访问的数据。它基于“时间局部性”原理,即最近被访问的数据,在未来被访问的概率也更高。 LeetCode 146. LRU 缓…...

小智项目架构分析

小智代码架构 .github 这就是github项目上拉下来的一些信息 没什么好看的,这跟项目代码无关 .build 编译时生成的文件,没什么可看的,与项目代码无关 .main 主要的代码都在这里面了 .managed_components 这里是小智用到的一些第三方移植…...

基于 SSE 和分块传输的 Uniapp 微信小程序 实现 流式传输 对话

最近的项目是做微信小程序的一个对话框,接入DeepSeek,实现实时对话一个功能。 主要用到的技术点为: 1. Server-Sent Events (SSE) 技术: 在请求头中设置了 ‘X-DashScope-SSE’: ‘enable’,启用了SSE协议 服务器以事…...

[OS] POSIX C库介绍

POSIX C 库可以理解为 Unix/Linux系统的"标准化工具包",用一句话概括就是: 👉 它提供了一套跨Unix系统的统一编程接口,让开发者用同一份代码能在不同系统(如Linux、macOS)中运行。 核心组成&…...

<uniapp><插件><UTS>在uniapp中,创建自己的插件并发布到uni插件市场

前言 本专栏是基于uniapp实现手机端各种小功能的程序,并且基于各种通讯协议如http、websocekt等,实现手机端作为客户端(或者是手持机、PDA等),与服务端进行数据通讯的实例开发。 发文平台 CSDN 环境配置 系统&…...

深度学习前沿探秘:Transformer 模型与多领域应用

技术点目录 注意力(Attention)机制详解自然语言处理(NLP)领域的Transformer模型详解计算视觉(CV)领域的Transformer模型详解时间序列建模与预测的大语言模型目标检测算法详解目标检测的大语言模型语义分割的…...

介绍下Nginx的作用与请求转发机制

引言 最近笔者在业务中遇到了Nginx轮训策略使用不当导致后端服务的压力增加,从而导致容器CPU资源不足,响应超时的问题; 但由于对Nginx的了解仅限与作为反向代理使用,所以借用GPT工具整理了Nginx的作用以及请求转发机制&#xff…...

Sql刷题日志(day6)

一、笔试 1、insert ignore:在插入数据时忽略主键冲突或其他唯一性约束冲突。 如果插入的记录会导致主键冲突(如 actor_id 已存在),该语句不会报错,而是直接忽略插入操作 语法: INSERT IGNORE INTO tab…...

Ajax 提交表单与文件上传

目录 一、Ajax 提交表单1.1 基本原理1.2 HTML 表单示例1.3 JavaScript 示例(使用 fetch API)二、Ajax 文件上传2.1 基本原理2.2 HTML 文件上传表单示例2.3 JavaScript 示例(使用 fetch API)三、后端处理示例(以 Node.js + Express 为例)3.1 安装依赖3.2 创建服务器文件四…...

【零基础入门】ASP.NET Core快速搭建第一个Web应用

一、为什么选择ASP.NET Core? 跨平台支持:可在Windows/macOS/Linux系统运行 高性能:比传统ASP.NET框架快10倍以上 开源生态:活跃的开发者社区和丰富的NuGet包 云原生支持:完美适配Docker和Kubernetes部署 二、开发…...

盒子模型

1.1看透网页布局的本质 1.2盒子模型的组成部分 css盒子模型本质是一个盒子,封装周围的html元素,它包括边框 外边距 内边距和实际内容。 padding:盒子与内容间的距离margin:盒子与盒子间的距离 1.3border边框 1.border-width 边…...

厚铜PCB如何兼顾质量与成本?供应商设计规范执行的黄金平衡点

厚铜电路板供应商需要遵循一系列设计规范,以确保所提供的电路板符合行业标准和客户要求。以下是一些需要遵循的设计规范: 1. 电路板尺寸和形状:厚铜电路板供应商需要按照客户提供的规格和要求来设计电路板的尺寸和形状。一般来说,…...

Kafka 配置参数性能调优建议

文章目录 1、生产者调优batch.size(重要)linger.mscompression.typeacks(重要)buffer.memorymax.in.flight.requests.per.connection(重要)message.max.bytes(重要) 2、消费者调优fe…...

Java读Excel:解析阿里云easyExcel导入文件的行号

文章目录 引言I 解析阿里云easyExcel导入文件的行号声明解析对象的基类判断Excel解析对象类型是否包含继承某个类 isAssignableFromJava 转换list类型并设置下标到元素对象属性II 封装excel 文件读取excel 文件读取用法文件导入上下文III 参数校验工具类校验参数是否合法 (jaka…...

Vuex持续保存数据 页面刷新不丢失 vuex-persistedstate

vuex可以进行全局的状态管理,但刷新后刷新后数据会消失,这是我们不愿意看到的。怎么解决呢,我们可以结合本地存储做到数据状态持久化,但是太麻烦每次都要操作,强烈建议使用插件利用vuex-persistedstate插件. 安装 npm …...

.NET8配置组件

一、组件的概念 含义:用于从配置文件中读取配置的组件,叫做配置组件。简单来说, 就是从xml、json、yaml、txt等文件中读取配置的组件。主要采用微软提供的 Microsoft.Extensions.Configuration 二、组件的使用 1、json配置读取 (1)、在Dunk.Common.Project.Configuratio…...

加密算法:ed25519和RSA

ed25519 和 RSA 是两种不同的非对称加密算法,常用于 SSH 密钥认证。以下是它们的对比和选择建议: 1. 算法对比 特性ed25519RSA (4096-bit)安全性更高(基于椭圆曲线密码学 ECC)高(依赖大数分解难度)密钥长度固定 256 位(公钥/私钥更短)通常 2048/4096 位(公钥较大)性能…...

递归、搜索和回溯算法《递归》

在之前的优选算法当中我们已经学习了一些基本的算法,那么接下来我们就要来学习算法当中的一大重要章节——递归、搜索和回溯算法,其实也就是大家常常听到的dfs、bfs;其实本质就是递归,在学习搜索、回溯等算法的过程当中我们会先来…...

构建“云中”高并发:12306技术改造的系统性启示

作为曾参与12306余票查询系统高并发升级的技术从业者,笔者注意到公众对于12306底层技术常存在认知盲区。为破解这一迷思,特此分享十年前的架构解密文献(该技术之前名叫 gemfire 现已晋升为Apache顶级项目Geode,代码库详见&#xf…...

升级xcode15 报错Error (Xcode): Cycle inside Runner

升级xcode15后报错 Could not build the precompiled application for the device. Error (Xcode): Cycle inside Runner; building could produce unreliable results. This usually can be resolved by moving the shell script phase Thin Binary so that it runs before th…...

gradle-tasks.register(‘classesJar‘, Jar)解析

在使用gradle作为构建工具的android或者java web项目中,我们经常能遇到以下格式 tasks.register(classesJar, Jar) {from "$buildDir/intermediates/javac/release/classes" // 假设使用 release 构建变体 }artifact sourcesJar使用伪代码解释 class Cu…...

深度对比:Objective-C与Swift的RunTime机制与底层原理

1. RunTime简介 RunTime(运行时)是指程序在运行过程中动态管理类型、对象、方法等的机制。Objective-C 和 Swift 都拥有自己的运行时系统,但设计理念和实现方式有很大不同。理解 RunTime 的底层原理,是掌握 iOS 高级开发的关键。…...

升级Xcode16,flutter项目报错

升级xcode16后发现原来的项目运行不了了,flutter的版本是3.3.1 保错:[ 304 ms] Could not build the precompiled application for the device. [ 16 ms] Error (Xcode): linker command failed with exit code 1 (use -v to see invocation) 1、找到本地…...

MCU内存映射技术详解

MCU内存映射技术详解 1. 引言 内存映射是微控制器(MCU)系统设计中的核心概念,它决定了MCU如何访问和管理内存资源。通过内存映射,处理器可以将物理设备的地址空间映射到自己的逻辑地址空间中,实现对各种硬件资源的统一访问。本文将深入探讨…...

Mac搭建Flutter IOS环境详细指南

目录 1. 准备工作 2. 下载Flutter SDK: 2.1 配置环境 2.2 解决环境报错 zsh:command not found:flutter 2.3、再使用source命令重新加载一下:【source ~/.zshrc】,下次再编辑这个文件就可以直接执行:【open ~/.zshrc】 2.4、执行【flut…...