【LLM开发】Unigram算法
Unigram算法
参考:Unigram算法解释
参考书籍:How Can We Make Language Models Better at Handling the Diversity and Variability of Natural Languages
Unigram 算法是一种基于概率的子词分词方法,与BPE算法、WordPiece算法不同,其核心思想是通过逐步删减初始大词汇表优化分词结果。
核心原理
算法基于Unigram 单语言模型,假设每个子词的出现是独立的。句子的概率是由子词序列的乘积决定的。假设每个子词独立出现,因此词汇(子词序列)可以表示为各个subword出现概率的乘积:
P ( x ) = ∏ i = 1 L p ( x i ) P(x) = \prod_{i=1}^{L} p(x_{i}) P(x)=i=1∏Lp(xi)
其中, x = ( x 1 , x 2 , . . . , x L ) x = (x_{1}, x_{2}, ..., x_{L}) x=(x1,x2,...,xL)是subword序列, p ( x i ) p(x_{i}) p(xi)是subword x i x_{i} xi 出现的概率。
最优分割
假设,我们已经构建好一个Unigram词汇表。现在输入一个句子 X X X,则最优的subword 分割 x ∗ x^{*} x∗ 通过最大化上述概率得到。
x ∗ = arg max x ∈ S ( X ) P ( x ) x^{*} = \arg \max _{x \in S(X)} P(x) x∗=argx∈S(X)maxP(x)
S ( x ) S(x) S(x) 表示输入句子 X X X后,算法给出的所有可能的subword 分割候选方案。
Unigram算法在这一层面,可以对照最大正相匹配、最大逆向匹配等算法来学习,它并不应该完全对照wordPiece算法或BPE算法进行学习,因为wordPiece算法和BPE等算法 更注重如何构建词汇表。
构建词汇表
Unigram算法需要基于一个词汇表(或许我们可以考虑使用BPE算法或者WordPiece算法构建的词汇表,给Unigram算法使用?)。
构建词汇表的流程为:
1.初始化词汇表:从训练语料库中生成一个初始的词汇表,包括所有的字符和一些常见的subword(也可以是所有的subword)。
例如,对于句子hello world!
,可以初始化一个包含所有字符和所有subword的词汇表:
['h', 'e', 'l', 'o', 'w', 'r', 'd', '!', 'he', 'el', 'll', 'lo', 'o ', ' w', 'wo', 'or', 'rl', 'ld', 'd!', 'hel', 'ell', 'llo', 'lo ', 'o w', ' wo', 'wor', 'orl', 'rld', 'ld!', 'hell', 'ello', 'word', 'orld', 'rld!' ...]
包含所有子词字符串数量很多,不过在训练构建词表之前,原始的语料库会进行标准化和预分词。简单地说,标准化会将语料库的编码统一;预分词:对于英文而言,会将语料库先按照空格和特殊字符切分,得到带有空格(也可以不带)的一系列单词;然后再依据这些单词构建初始词汇表。
初始词汇表可以有两种方式构建:一种是数据驱动的方法,如BPE算法或Apriori算法生成一个较大的候选子词集合。穷举法穷举所有可能的子词组合(长度 ≤ \le ≤ 4 的字符序列),穷举法计算成本高。
*穷举法为什么建议要subword长度 ≤ \le ≤ 4?* 我认为有两个主要原因,以hopefully
为例,限制长度,可以减少穷举成本,(如果不限制长度h
、ho
、hop
、hope
、hopef
、hopefu
、hopeful
、hopefull
、hopefully
…会产生45种组合,限制长度后,会产生30种);其次,对于数据量较小的数据库,hopefully
的出现频率可能和ly
的频率一致;这样在后面迭代优化词表的时候会直接选择hopefully
的组合方式,这样进一步降低了ly
的对于似然函数的贡献,而导致ly
被删除。
那么,必定有人问,为什么词汇表尽量不选择hopefully
而是选择ly
,这是因为ly
在真实世界下的分布具有更广泛的分布,是许多副词的组成部分;而hopefully
只能表示自身,而不再具有表示其他词的功能。
下图的例子更加直观:经过迭代在hu
和hug
概率差不多的时候,hug
会保留在词汇表中,而hu
会被删除。(一切的根源在于语料库中hu
和hug
的概率是否差不多,因此,语料库尽可能满足真实世界分布)
词汇表的构建目标是不断从当前词汇表移除一些subword,直到词汇表大小 ∣ V ∣ = M |V|=M ∣V∣=M , M M M 表示词汇表预计大小。
2.迭代优化词表
优化subwrod概率:使用的是EM算法优化subword的概率分布,使得边际似然最大化。
如上所述,给定一个subward序列或word x x x, S ( x ) = ( x 1 , x 2 , . . . , x L ) , ∀ x i ∈ V S(x) = (x_{1}, x_{2}, ..., x_{L}), \forall x_{i} \in V S(x)=(x1,x2,...,xL),∀xi∈V,可以得出:
p ( x ) = ∏ i = 1 L p ( x i ) p(x) = \prod_{i=1}^{L} p(x_{i}) p(x)=i=1∏Lp(xi)
上述公式有一个潜在的假设,及每个子词 x i x_{i} xi的出现都是彼此独立的。
则可以对整个语料库建模其对数似然函数:
L = ∑ x ∈ C l o g ( p ( x ) ) \mathcal{L} = \sum_{x \in C} log(p(x)) L=x∈C∑log(p(x))
目标是最大化这个 L \mathcal{L} L,
Unigram Tokenization算法根据以下两个步骤迭代计算(EM算法 Estimation-Maximization):
- 估计步骤:我们计算整个语料库上的对数似然值 L \mathcal{L} L。
- 最大化似然步骤:我们移除 V V V 中 η \eta η % 的子词。移除的这些子词后,词汇表能够最大化 L \mathcal {L} L。
为了实现估计步骤,我们首先要对语料库中的单词 x x x,计算subword tokenization x 1 , x 2 , . . . , x L x_{1}, x_{2}, ..., x_{L} x1,x2,...,xL 最大化 Unigram 概率。(实现思路可以看HuggingFace Unigram;或者是以下)
语料库中的句子可以被分解为单词、句子、字符;例如
This is the Hugging Face Course.
那么 x x x 可以是句子,This is the Hugging Face Course.
;
x x x 可以是单词,x="This"
、x="is"
…,
x x x 可以是字符,x="T"
、x="h"
、x="i"
、…;
但是,对于字符进行建模丧失了词汇的语义,并且Token数量会显著增大->这是因为没有有效压缩信息;
通常来说, x x x 表示词汇;
Hugging Face对这个进行了一定的更改,可能计算速度更快。
Hugging Face的Unigram算法计算语料库种词汇对当前词汇表的 l o s s loss loss,然后计算删除当前词汇中那些出现概率低的词汇对词汇表 l o s s loss loss的影响,
估计步骤:使用当前子词概率,通过通过 Viterbi 算法为语料库中的每个词找到最优分词路径;
最大化似然步骤:根据所有分词路径统计子词出现的频率,更新每个词的概率;
p ( x i ) = s u b w o r d x i 出现的概率 所有子词出现的总次数 p(x_{i}) = \frac {subword x_{i}出现的概率}{所有子词出现的总次数} p(xi)=所有子词出现的总次数subwordxi出现的概率
这一过程不断迭代,直至概率收敛;
当 ∣ V ∣ = M |V|=M ∣V∣=M 时,停止迭代。
Unigram tokenization 相比BPE分词的关键优势在于,它为给定的分词方式关联了一个概率 p ( x ) p(x) p(x) -> p ( x ) = ∏ i = 1 L p ( x i ) p(x) = \prod_{i=1}^{L} p(x_{i}) p(x)=∏i=1Lp(xi)。
最大化 L = ∑ x ∈ C l o g ( p ( x ) ) \mathcal{L} = \sum_{x \in C} log(p(x)) L=∑x∈Clog(p(x));实际上是最大化每一个单词的概率 p ( x ) p(x) p(x),单词的概率是由构成它的subword描述的 p ( x ) = p ( x 1 ) p ( x 2 ) . . . p ( x L ) p(x) = p(x_{1})p(x_{2})...p(x_{L}) p(x)=p(x1)p(x2)...p(xL),以词汇hug
为例,构成它的子词可以是{"h", "u", "g"} {"hu", "g"} {"h", "ug"}, {"hug"}
,因此:
L = arg max ∑ x ∈ C l o g ( p ( x ) ) L = ∑ x ∈ C arg max l o g ( p ( x ) ) L = ∑ x ∈ C l o g ( arg max p ( x ) ) \begin{align} \mathcal{L} &= \arg\max \sum_{x \in C} log(p(x)) \\ \mathcal{L} &= \sum_{x \in C} \arg\max log(p(x)) \\ \mathcal{L} &= \sum_{x \in C} log(\arg\max p(x)) \\ \end{align} LLL=argmaxx∈C∑log(p(x))=x∈C∑argmaxlog(p(x))=x∈C∑log(argmaxp(x))
所以在编程计算的时候,目标可以是 L = ∑ x ∈ C arg max l o g ( p ( x ) ) \mathcal{L} = \sum_{x \in C} \arg\max log(p(x)) L=∑x∈Cargmaxlog(p(x)) 或 L = ∑ x ∈ C l o g ( arg max p ( x ) ) \mathcal{L} = \sum_{x \in C} log(\arg\max p(x)) L=∑x∈Clog(argmaxp(x))。并且 p ( x ) = p ( x 1 ) p ( x 2 ) . . . p L → log p ( x ) = log p ( x 1 ) + log p 2 + . . . + log p L p(x)=p(x_1)p(x_{2})...p_{L} \rightarrow \log p(x)= \log p(x_{1}) + \log p_{2} + ... +\log p_{L} p(x)=p(x1)p(x2)...pL→logp(x)=logp(x1)+logp2+...+logpL;求取 max l o g ( p ( x ) ) = max ∑ i = 1 L log p ( x i ) \max log(p(x)) = \max \sum_{i=1}^{L} \log p(x_{i}) maxlog(p(x))=max∑i=1Llogp(xi);求这个可以用动态规划法求解。
相关文章:
【LLM开发】Unigram算法
Unigram算法 参考:Unigram算法解释 参考书籍:How Can We Make Language Models Better at Handling the Diversity and Variability of Natural Languages Unigram 算法是一种基于概率的子词分词方法,与BPE算法、WordPiece算法不同ÿ…...
GD32F407单片机开发入门(十六)单片机IAP(在应用编程)详解及实战源码
文章目录 一.概要二.GD32F407VET6单片机IAP介绍1.GD32F407VET6单片机IAP基本原理2.GD32F407VET6单片机IAP基本流程3.Ymodem协议 三.配置一个BOOT工程四.配置一个APP工程五.工程源代码下载六.小结 一.概要 单片机上电或系统复位后,ARM Cortex-M4处理器先从0x0000 00…...
庙算兵棋推演AI开发初探(7-神经网络训练与评估概述)
前面我们提取了特征做了数据集、设计并实现了处理数据集的神经网络,接下来我们需要训练神经网络了,就是把数据对接好灌进去,训练后查看预测的和实际的结果是否一致——也就是训练与评估。 数据解析提取 数据编码为数据集 设计神经网络 -->…...
[实战] IRIG-B协议详解及Verilog实现(完整代码)
目录 IRIG-B(B码)协议详解及Verilog实现一、IRIG-B协议概述二、帧格式详细解析1. 码元类型与索引计数2. 时间编码字段3. 控制功能码元(CF)4. 纯二进制秒码(SBS) 三、编码与信号特性四、时间编码实现1. 时间参数转换2. 帧数据填充规…...
从传统制造到智能工厂:MES如何重塑电子制造业?
在“中国制造2025”战略的引领下,电子制造业正经历深刻变革。多品种小批量、工艺复杂度高、质量追溯严苛等需求日益凸显。由此,如何通过数字化手段实现生产透明化、质量可追溯和资源高效协同,成为行业转型的关键命题。 一、电子制造业转型痛…...
使用Curl进行本地MinIO的操作
前言 最近在做相关的项目中关于本地服务搭建和访问的技术验证,打进来最基本的数据访问,使用了C。可以进行:服务器的可用性检查、Bucket的创建、文件夹的创建、文件的上传、文件的下载、文件夹和Bucket的存在性检查等基本接口,对自…...
uniswap getTickAtSqrtPrice 方法解析
先上代码: function getTickAtSqrtPrice(uint160 sqrtPriceX96) internal pure returns (int24 tick) {unchecked {// Equivalent: if (sqrtPriceX96 < MIN_SQRT_PRICE || sqrtPriceX96 > MAX_SQRT_PRICE) revert InvalidSqrtPrice();// second inequality mu…...
qemu(3) -- qemu-user使用
1. 前言 qemu中有很多的特技,此处记录下qemu-arm的使用方式,简单来说qemu-system-xx用于虚拟整个设备,包括操作系统的运行环境,而qemu-xx仅虚拟Linux应用程序的环境,不涉及操作系统,应用程序的系统调用有宿…...
CMCC RAX3000M使用Tftpd刷写OpenWrt固件的救砖方法
有时候,我们在玩运行 OpenWrt 的 CMCC RAX3000M ,因为一些操作不当,导致无法进入路由器系统,无法正常刷机。此时,如果我们已经刷写了uboot,则可以在uboot模式下通过Tftpd刷写新的OpenWrt固件,实…...
Vue基础(7)_计算属性
计算属性(computed) 一、使用方式: 1.定义计算属性: 在Vue组件中,通过在 computed 对象中定义计算属性名称及对应的计算函数来创建计算属性。计算函数会返回计算属性的值。 2.在模板中使用计算属性: 在Vue的模板中,您…...
1.9多元函数积分学
引言 多元函数积分学是考研数学一的核心内容,涵盖三重积分、曲线积分、曲面积分及空间曲线积分。本文系统梳理4大考点,结合公式速查与典型示例,助你高效攻克积分难题! 考点一:三重积分计算与应用 1️⃣ 对称性 (1) …...
【LINUX操作系统】线程操作
了解了线程的基本原理之后,我们来学习线程在C语言官方库中的写法与用法。 1. 常见pthread接口及其背后逻辑 1.1 pthread_create 与线程有关的函数构成了⼀个完整的系列,绝⼤多数函数的名字都是以“pthread_”打头的 • 要使⽤这些函数库,…...
web技术与nginx网站环境部署
一:web基础 1.域名和DNS 1.1域名的概念 网络是基于TCP/IP协议进行通信和连接的,每一台主机都有一个唯一的标识(固定的IP地址),用以区别在网络上成千上万个用户和计算机。网络在区分所有与之相连的网络和主机时,均采用一种唯一、通用的地址…...
多元复合函数求导的三种情况
1. 一元函数与多元函数复合 1.1 变量关系 1.2 求导公式 因为根据链式法则,先对z求导,z是二元函数,所以说是偏导;再对里面求导,u、v是一元函数,所以说是全导。 2. 多元函数与多元函数复合 2.1 变量关系…...
全面解析DeepSeek算法细节(2) —— 多令牌预测(Multi Token Prediction)
概述 多令牌预测(MTP)技术使DeepSeek-R1能够并行预测多个令牌,显著提升推理速度。 关键特性 并行多令牌预测:DeepSeek-R1通过同时预测多个令牌而非按顺序预测,提升了推理速度。这减少了解码延迟,在不影响…...
如何从大规模点集中筛选出距离不小于指定值的点
一、背景:当点集处理遇见效率挑战 在数字化浪潮席卷各行各业的今天,点集数据处理已成为地理信息系统(GIS)、计算机视觉、粒子物理仿真等领域的核心需求。以自动驾驶场景为例,激光雷达每秒可产生超过10万个点云数据&am…...
单片机-89C51部分:6、数码管
飞书文档https://x509p6c8to.feishu.cn/wiki/WRNLwDd0iiG8OWkyatOcom6knHf 一、数码管简介 通俗解释: 一个数码管等于八个LED组合在一起,想要显示什么形状,就点亮对应LED即可。 一般数码管分为共阴极数码管和共阳极数码管。 共阳极接法&…...
可解释人工智能(XAI):让机器决策透明化
在人工智能(AI)技术飞速发展的今天,AI 系统已经广泛应用于金融、医疗、交通等多个关键领域。然而,随着 AI 系统的复杂性不断增加,尤其是深度学习模型的广泛应用,AI 的“黑箱”问题逐渐凸显。AI 系统的决策过…...
深入理解网络原理:TCP协议详解
在现代计算机网络中,传输控制协议(TCP,Transmission Control Protocol)是最常用的传输层协议之一。TCP被广泛应用于互联网中的许多关键应用,如网页浏览、电子邮件和文件传输等。作为一种面向连接的协议,TCP…...
二极管钳位电路——Multisim电路仿真
目录 二极管钳位电路 2.1 二极管正向钳位电路 二极管压降测试 2.1.1 二极管正向钳位电路图 2.1.2 二极管正向钳位工作原理 2.2 二极管负向钳位电路 2.2.1 二极管负向钳位电路图 2.2.2 二极管负向钳位工作原理 二极管正向反向钳位仿真电路实验结果 2.3 二极管顶部钳位…...
【更新】LLM Interview (2)
字数溢出,不解释 前文:llm interview (1) 文章目录 强化学习专题1 什么是RL?2 RL和监督、非监督、深度学习的区别3 RL中所谓的损失函数与深度学习中的损失函数有何区别?4 RL历史5 RL分类5.1 分类图示5.2 根据智能体动作选取方式分…...
第二节:文件系统
理论知识 文件系统的基本概念:文件系统是操作系统中负责管理持久数据的子系统,它将数据组织成文件和目录的形式,方便用户存储和访问数据。Linux文件系统的类型:常见的 Linux 文件系统类型有 Ext2、Ext3、Ext4、XFS、Btrfs 等。Ex…...
astrbot_plugin_composting_bucket开源程序是一个用于降低AstrBot的deepseek api调用费用的插件
一、软件介绍 文末提供程序和源码下载 astrbot_plugin_composting_bucket开源程序是一个用于降低AstrBot的deepseek api调用费用的插件,让deepseek api调用费用更低! 本插件功能已集成到 AstrBot ,您可以移除此插件,在 AstrBot…...
8.Three.js中的 StereoCamera 立体相机详解+示例代码
✨ 运行效果 👀 左边一幅图、右边一幅图,略微偏移,形成立体感~ (戴上VR眼镜或红蓝3D眼镜体验更明显哦~) 🔥 小球或方块旋转中,左右略微不同步,立体感更强&am…...
MYSQL——时间字段映射Java类型
在 Java 中查询数据库中的【时间字段】时,可以使用以下几种类型来处理: 1. java.sql.Date 适用场景:当数据库中的时间字段是 date 类型时,使用 java.sql.Date 是最合适的选择。示例代码:ResultSet rs statement.exe…...
搭建speak yarn集群:从零开始的详细指南
在大数据处理领域,Apache Spark 是一个高性能的分布式计算框架,而 YARN(Yet Another Resource Negotiator)是 Hadoop 的资源管理器。将 Spark 集成到 YARN 中,不仅可以充分利用 Hadoop 的资源管理能力,还能…...
第十三章-PHP MySQL扩展
第十三章-PHP与MySQL 一,连接数据库 1. 使用 MySQLi(面向对象方式) <?php // 数据库参数 $host localhost; $username root; $password ; $database test_db;// 创建连接 $conn new mysqli($host, $username, $password, $databa…...
在服务器中,搭建FusionCompute,实现集群管理
序:需要自备一台服务器,并安装部署好KVM,自行下载镜像,将所需的CNA和VRM镜像放到服务器中,小编所用的进项版本如下,读者可自行根据需求下载其它版本的镜像。 CNA镜像:FusionCompute_CNA-8.3.0-…...
嵌入式开发学习日志Day11
一、函数的递归调用 在调用一个函数的过程中,又出现直接或者间接的调用函数本身,称之为函数的递归调用; 函数的递归调用是使用大量的内存空间完成程序进行的; 1.间接调用 2.直接调用 注意: 上图仅为示意,…...
【线性规划】对偶问题的实际意义与重要性质 学习笔记
【线性规划】对偶问题的实际意义与重要性质_哔哩哔哩_bilibili...
代码随想录第30天:动态规划3
一、01背包理论基础(Kama coder 46) “01背包”:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 1. 确…...
DSP48E2 的 MAC模式功能仿真
DSP48E2 仿真代码: 测试的功能为 P i ( A D ) ∗ B P i − 1 P_{i} (AD) * B P_{i-1} Pi(AD)∗BPi−1 timescale 1ns / 1nsmodule dsp_tb;// 输入reg CLK;reg CE;reg SCLR;reg signed [26:0] A, D;reg signed [17:0] B;// 输出wire signed [47:0] P;par…...
【环境配置】Mac电脑安装运行R语言教程 2025年
一、安装 Xcode Command Line Tools 打开终端,输入如下命令: xcode-select --install安装完成后,输入如下命令,能看见版本号说明安装成功 gcc --version二、下载安装R语言 https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 点开后…...
常见算法的总结与实现思路
前言 hello,我是Maybe。昨天和今天花了两天左右的时间。把常见的排序算法都学完了,自己也实现了一遍。感觉收获满满,但是过程是艰辛的。下面我将分享代码和思维导图,希望可以帮助到大家。 思维导图(含注意事项,实现思…...
Ethan独立开发产品日报 | 2025-04-27
1. CreateWise AI 旨在提升你工作效率的AI播客编辑器 人工智能播客编辑器,让你的播客制作速度提升10倍!它可以自动去除口头语和沉默,生成节目笔记和精彩片段,还能一键制作适合社交媒体分享的短视频——所有这些功能都只需一次点…...
5G与边缘计算:协同发展,开启智慧世界新篇章
**5G与边缘计算:协同发展,开启智慧世界新篇章 ** 大家好,我是Echo_Wish。今天我们来探讨一个备受关注的技术话题——5G与边缘计算的协同发展。随着5G网络的逐步普及以及边缘计算技术的快速发展,二者的结合为我们带来了前所未有的创…...
AcWing 885:求组合数 I ← 杨辉三角
【题目来源】 https://www.acwing.com/problem/content/887/ 【题目描述】 给定 n 组询问,每组询问给定两个整数 a,b,请你输出 C(a,b) mod (10^97) 的值。 【输入格式】 第一行包含整数 n。 接下来 n 行,每行包含一组 a 和 b。 …...
Python3:Jupyterlab 安装和配置
Python3:Jupyterlab 安装和配置 Jupyter源于Ipython Notebook项目,是使用Python(也有R、Julia、Node等其他语言的内核)进行代码演示、数据分析、机器学习、可视化、教学的非常好的工具。 最新的基于web的交互式开发环境,适用于n…...
如何搭建spark yarn模式的集合集群
一、环境准备 在搭建 Spark on YARN 集群之前,需要确保以下环境已经准备就绪: 操作系统:推荐使用 CentOS、Ubuntu 等 Linux 发行版。 Java 环境:确保安装了 JDK 1.8 或更高版本。 Hadoop 集群:已经搭建并运行的 Had…...
智能座舱架构中芯片算力评估
在智能座舱(Intelligent Cockpit)领域,芯片的算力是决定系统性能、响应速度以及用户体验的关键因素之一。 随着汽车智能化程度的不断提高,智能座舱对芯片的算力、功耗、集成度以及安全性提出了更高的要求。 智能座舱架构中芯片算…...
STM32完整内存地址空间分配详解
在STM32这类基于ARM Cortex-M的32位微控制器中,整个4GB的地址空间(从0x00000000到0xFFFFFFFF)有着非常系统化的分配方案,每个区域都有其特定的用途。下面我将详细介绍这些地址区域的分配及其功能: STM32完整内存地址空间分配详解(0x00000000…...
叉车司机N1考试的实操部分有哪些注意事项?
叉车司机 N1 考试实操部分分为场地考试和场内道路考试,以下是一些注意事项: 场地考试 起步:检查车辆仪表和个人仪容,穿好工作服、戴安全帽,不穿拖鞋等不符规定的鞋。同时检查换挡和换向操纵杆在空档位置,…...
【行业特化篇2】金融行业简历特化指南:合规性要求与风险控制能力的艺术化呈现
写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算有用,大家基本都能拿到想要的offe…...
Linux 定时备份到windows 方案比较
1 传输协议比较 特性SCPRSYNCSFTP基本功能文件传输(本地与远程)文件和目录的同步与传输文件管理(上传、下载、删除等)增量传输不支持增量传输支持增量传输不支持增量传输性能传输速度较慢,效率低高效,适合…...
【网络编程】TCP/IP四层模型、MAC和IP
1. TCP/IP的四层模型 网络模型的目的:规范通信标准,确保不同设备和系统之间能够有效通信 对比OSI模型与TCP/IP模型: OSI模型的七层架构(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)TCP/IP模型的四…...
Java学习手册: IoC 容器与依赖注入
一、IoC 容器概述 IoC(Inversion of Control,控制反转)容器是 Spring 框架的核心组件之一。它负责创建对象、管理对象的生命周期以及对象之间的依赖关系。通过将对象的创建和管理交给 IoC 容器,开发者可以实现代码的松耦合&#…...
Web 基础与Nginx访问统计
目录 Web基础 域名与DNS 域名的结构 网页与HTML 网页概述 HTML 概述 HTML基本标签 1、HTML 语法规则 2、HTML 文件结构 静态网页和动态网页 HTTP协议概述 HTTP方法 HTTP状态码 Nginx访问状态统计 Web基础 域名与DNS 网络是基于 TCP/IP 协议进行通信和连接的,每一台主机都有一…...
了解Android studio 初学者零基础推荐(1)
线上学习课程链接 开发Andorid App 使用的语言有很多,包括java, kotlin,C,等,首先让我们了解kotlin这个热门语言。 kotlin 程序 fun main() {println("hello,xu") } kotlin中的函数定义语法:函数名称在fun关键字后面࿰…...
Android Studio 2024版,前进返回按钮丢失解决
最近升级完AS最新系统后,顶部的前进和返回按钮默认隐藏了 解决方案: 1. 打开settings 2. 找到左侧 Appearance & Behavior 下面点击 Menus and Toolbars 3. 点击 Main Toolar 4. 点击Left,右键选择 Add Actions 5. 弹框中选择 Main Me…...
详解UnityWebRequest类
什么是UnityWebRequest类 UnityWebRequest 是 Unity 引擎中用于处理网络请求的一个强大类,它可以让你在 Unity 项目里方便地与网络资源进行交互,像发送 HTTP 请求、下载文件等操作都能实现。下面会详细介绍 UnityWebRequest 的相关内容。 UnityWebRequ…...