NR HARQ(三) semi-static HARQ-ACK codebook

news2024/10/7 6:40:41
微信同步更新,欢迎关注同名modem协议笔记
UE在一个PUCCH(或PUSCH)上发送HARQ-ACK信息时,信息bit很可能是多个bits位数,这个多bits位数的HARQ-ACK信息,也称为HARQ-ACK codebook码本
UE物理层在以下几种情况下,需要产生对应的HARQ-ACK 信息bit:UE收到PDCCH调度的PDSCH,动态调度;UE接收的PDSCH没有对应的PDCCH,即DL SPS PDSCH调度; UE接收到PDCCH指示的SPS release,并没有PDSCH。
影响HARQ-ACK 码本长度的因素包括:接收到的PDSCH的个数,在一个PUCCH/PUSCH上反馈;下行是否空分复用,即下行传输是1个或2个TB;PDSCH 是否进行CBG码块组传输;载波聚合CA时,服务小区(即下行载波)的个数;其他参数和开关,例如 harq-ACK-SpatialBundlingPUCCH/PUSCH;因为在生成码本时都会考虑到上述参数。
 
091a72de67944b50a8397e00c8034c88.png
UE成功检测到SPS PDSCH release或相关的TB ,要生成ACK,对应HARQ-ACK bit  =1;UE没有正确接收TB时,要生成NACK,对应HARQ-ACK bit  =0。有关SPS PDSCH介绍详见 NR PDSCH (七)DL SPS。
 
 
在R16版本中NR中支持3种HARQ-ACK 码本类型,基站根据UE的能力,通过高层RRC信令配置
  1 semi-Static:半静态码本,Type-1 HARQ-ACK codebook(pdsch-HARQ-ACK-Codebook = semi-static)。即UE根据RRC层PDSCH 相关半静态配置,生成需要发送的HARQ-ACK 码本。
2  dynamic:动态码本,Type-2 HARQ-ACK codebook(pdsch-HARQ-ACK-Codebook = dynamic), 即UE根据DCI下行动态调度的情况,生成需要发送的动态HARQ-ACK码本。
3 针对NR-U场景新增的type-3 HARQ-ACK codebook,根据RRC层有配置pdsch-HARQ-ACK-OneShotFeedback且UE检测到DCI 1_1 带有One-shotHARQ-ACK request field=1,才会用type-3 HARQ-ACK codebook。本篇主要看下semi-static 码本即Type-1 HARQ-ACK codebook的内容。
 
Type-1 HARQ-ACK codebook determination
12eba13d6bcd468dbef71cb813ac85c4.png
所谓Type-1 HARQ-ACK codebook 就是指pdsch-HARQ-ACK-Codebook=semi-static的情况,配置结构如上,一般在RRC setup或RRC Reconfiguration中配置。收到PDSCH data或SPS PDSCH release后UE要根据DCI 中的PDSCH-to-HARQ_feedback timing indicator 确定的位置report相应的HARQ-ACK info;其他DCI format并未用的到的PDSCH-to-HARQ_feedback timing indicator的位置,UE要报HARQ-ACK NACK,这句话与semi-static码本的生成相关,可以先行忽略,后面会提及什么情况下要报NACK。
 
semi-static码本的生成概括的说,当UE被配置为semi-static HARQ-ACK codebook时,UE要根据HARQ-ACK反馈时序(K1)、时隙结构和PDSCH候选时域资源分配信息确定每个载波c上对应在同一时隙n中进行HARQ-ACK反馈的PDSCH时域位置集合M_A,c 。
然后根据M_A,c,将在PDSCH候选位置集合中接收到的PDSCH和SPS PDSCH释放的HARQ-ACK映射到HARQ-ACK反馈序列中的对应位置,从而得到时隙n中传输的HARQ-ACK码本。
具体来说,首先,UE基于RRC层信令配置的HARQ反馈时序(dl-DataToUL-ACK),确定该载波上在同一个时隙中需要进行HARQ-ACK反馈的时隙个数,其次,确定每个需要进行HARQ-ACK反馈的时隙中可以传输的最大PDSCH个数。
如果UE能够在同一个载波的同一个时隙中接收大于一个unicast PDSCH传输,则基于RRC层信令配置的PDSCH时域资源分配表格中的候选时域资源分配信息,确定每个时隙中可以传输的最大PDSCH个数。还要根据配置的时隙结构,将不满足PDSCH传输条件的候选PDSCH去掉。
特别地,如果PDSCH和PUCCH的SCS配置不同,当PDSCH的SCS大于或者等于PUCCH的SCS时,每一个K1值都对应X个下行传输时隙;当PDSCH的SCS小于PUCCH的SCS时,连续的1/X个K1值只有一个对应的下行传输时隙,其中X为PDSCH SCS相对于PUCCH SCS的倍数。
当存在CA时,每个载波上的HARQ-ACK码本需要分别按照上述过程进行确定,最后将不同载波的HARQ-ACK码本按照载波顺序进行级联得到最终的HARQ-ACK码本。
 
下面根据上面的内容具体来看下每一步的处理方式。
20305b3c4d7b4cc699e469b9d74d3cfe.png
对于服务小区C,一个激活的DL BWP和UL BWP中,UE要确定接收PDSCH的候选位置集合,候选PDSCH位置对应的HARQ-ACK信息要在之后PUCCH时隙n_v发送;
UE根据PUCCH slot n_v的位置,要确定一个PDSCH候选位置集合,集合中对应M_A,c 个pdsch候选位置,如下图,PDSCH 候选位置有3个,UE要根据这3个候选位置生成对应的semi-static harq-ack codebook。
0045f2d47b8c4ea5817541251ef8486c.png 
 
如果服务小区c 被deactive,那UE将 firstActiveDownlinkBWP-Id 提供的 DL BWP 用作acitve 的DL BWP,以确定用于候选 PDSCH 接收的 M_(A,c) 时机集合。
 
PDSCH reception candidated occasion的确定
cd60ef2c37ed4c6ca4aae5b6a83bdc4f.png 
对于PUCCH 时隙n_v,确定PDSCH接收位置候选集的因素包括:
1 PDSCH 到HARQ-ACK时隙的K1配置集合:
UE只收到监听DCI 1_0 PDCCH配置(没有配置DCI1_1/1_2),K1对应的slot偏移值为1~8;
UE只收到监听DCI 1_1 PDCCH配置(没有配置DCI1_2),K1对应的slot偏移值由RRC层的参数dl-DataToUL-ACK 提供;
UE只收到监听DCI 1_2 PDCCH配置(没有配置DCI1_1),K1对应的slot偏移值由RRC层的参数dl-DataToUL-ACK-ForDCIFormat1_2提供;
UE收到监听DCI 1_1/1_2 PDCCH配置,K1对应的slot偏移值分别由RRC层的参数dl-DataToUL-ACK和dl-DataToUL-ACK-ForDCIFormat1_2提供;
266afe6c61d0484face5e10358856a5d.png 
2 PDSCH 时域资源分配表,pdsch-TimeDomainAllocationList,包括pdsch-ConfigCommon和pdsch-Config中配置的两个表,或两个表的并集。在UE获取时域资源分配表之前,要按照spec定义的PDSCH 默认时域资源分配表A,这个内容在 NR PDSCH (一)时域资源中有具体描述。
186eb070dcfc4ca09ed7cfedda43886c.png 
 
对于DCI 1_2 如果有配置referenceOfSLIVDCI-1-2时,如果确定完K0=0(同时隙调度)且是PDSCH mapping Type B的情况,例如上图SLIV=54的情况,对应S=1,,L=12,S0是检测到DCI format 1_2的PDCCH监听时机的起始符号,此时配置时要满足S0+1+12<=14(normal cyclic prefix) 或S0+1+12<=12(extended cycloc prefix)的关系,其他情况不考虑S0。
f8a91e724c364540b209ede9a0146023.png
   3 上下行BWP有可能是不同的SCS子载波间隔(u_UL由激活的上行BWP获得,u_DL由激活的下行BWP获得),也要考虑到不同子载波间隔时隙换算关系。
   4 还要考虑高层配置的上下行时隙结构tdd-UL-DL-ConfigurationCommon and tdd-UL-DL-ConfigurationDedecated.
   5 配置ca-SlotOffset 的情况
主要根据以上1~5的配置参数,确定PDSCH接收位置候选集。
 
 
UE要在时隙n_u通过PUCCH发送HARQ-ACK info,那就要根据dl-DataToUL-ACK提供的K1集合,结合pdsch-TimeDomainAllocationList K0和时隙配置,确定M_A,c ;如果UE支持一个时隙内多次PDSCH调度,还要再根据SLIV 进一步确定和n_u相关的PDSCH候选集,38.213 中用一大段伪代码表示M_A,c的具体确定方式,这里简单看下。
a704e09db0bd41e38e1e4ed332ccb634.png
对应于单个SPS PDSCH release的HARQ-ACK info 在Type-1 HARQ-ACK码本中的位置与对应的SPS PDSCH reception相同;single DCI format 调度的多个SPS PDSCH release的HARQ-ACK信息在Type-1 HARQ-ACK码本中的位置与多个SPS PDSCH release中具有最小SPS configuration index的SPS PDSCH reception相同(这段话好像很绕,但是好像又能理解...)
e9e38decd8c04608aa9b4fac25e71d17.png 
M_A,c 代表PDSCH 候选集(PDSCH receptions or SPS PDSCH releases),初始为空集;j代表PDSCH候选集的index,初始为0;B 代表UE支持一个时隙内调度多个PDSCH接收时使用的集合,初始为空集 ;C(k1)代表k1集合的基数;k代表k1集合中的index,初始为0,k1集合中按照slot timing value 降序排列,例如C(k1) 有3个值,k1,0   k1,1  k1,2 在集合内降序排列{5,3,1}。
先看不配置ca-SlotOffset的情况,即R15 版本中的情况。
f9ed5b0620d348b0a8753fe4497aa6c4.png
橙色while k<C(K1)代表对k1集合进行遍历,C(k1)是按照降序排列,第一个元素k1,0是数字最大的,即代表的是与PUCCH HARQ-ACK时隙n_u间隔最大那个PDCCH候选 时隙n_D。黄色框中的内容代表开始对C(k1)遍历后,首先考虑上下行SCS 是否一样。先看下mod(n_u-K1,k+1,max(2^(u_dl-u_ul),1))=0 成立的场景,即u_dl<=u_ul时,上述求模运算才成立,为简化伪代码过程,直接考虑上下行SCS相同的情况即u_dl=u_ul,目前实网环境下也都是这种情况,这时候下面绿色while n_D<max(2^(u_dl-u_ul),1) ->while n_D<1,即后面部分只考虑n_D=0的情况即可
ba2ebf52ec164a4a98ca6611e0b0f297.png
红色if 部分,毫无疑问slot n_u是在n_D之后的时隙,如果在n_u和n_D之间有发生DL/UL BWP 变化(假如说在slot n_c),此时n_u>=n_c,n_u-K1,k+n_D<n_c的话,n_D++,上下行SCS相同,n_D++后,直接跳出while 循环,k++,进行C(k1)中下一个k的判断。
没有发生BWP切换时,跳入蓝色if else的判断,这里会对PDSCH时域资源分配表中的每一行元素(K0,SLIV)进行遍历,k0是DCI至PDSCH data间的时隙偏移,毫无疑问,n_u-K1,k+n_D+k0 对应的时隙应该是DL ,如果判断完是UL slot,则要从时域资源分配表中剔除这样的组合,针对这步看个例子。
78fdbefd9dcd40c99a7e567f380f30e1.png
pdsch-TimeDomainAllocationList
{k0=2.....
 k0=5....
 k0=3....
 k0=4...}
假设有4行,从k1=7开始遍历pdsch-TimeDomainAllocationList,k0=2时对应的slot为UL 不符号要求删除k0=2
针对K1=5遍历pdsch-TimeDomainAllocationList,此时k1对应的符号就是UL,在遍历时所有的row都不会保留。
b875cb618b4949d3ac0904e23f5b5e62.png
对PDSCH时域资源分配表遍历完成后,下一步根据UE是否支持一个时隙内多次PDSCH调度,进行不同的操作;如果UE仅支持一个时隙内进行一次PDSCH 调度且PDSCH时域资源分配表不为空集(即有对应的k0  SLIV组合),M_A,c (PDSCH 候选集)就多一个j,这个j 与C(K1,k)中的k1有对应关系。
如果UE支持一个时隙内多次PDSCH调度时,根据PDSCH时域资源分配表中的SLIV,找到最小的"last OFDM symbol index",作为m, 根据m继续确定PDSCH候选位置;再次从第一行开始,如果S<=m,剔除对应的行,B 集合中多一个PDSCH候选 index j,直到R成为空集,针对这步看个例子。
59514e19c52d4a1589e52845902d18ce.png
例如 上面的SLIV分配情况
r=0  SLIV =S+L=2+4
r=1  SLIV=S+L=4+3
r=2 SLIV=S+L=8+2
r=3 SLIV=S+L=3+2
r=4 SLIV=S+L=5+3
r=5 SLIV=S+L=11+2
假设j=0,第一步m=5,从r=0开始遍历,r=0/1/3/4 的S<=5,删除r=0/1/3/4,将j=0并入m_A,c;j++,R不是空集,此时m=9,r=2 的S<=m,删除r=2,将j=1并入m_A,c; j++,R不是空集,m=12,r=5的S<=m,删除r=5,将j=2并入m_A,c,R为空集,结束,此时得到M_A,c={0,1,2}。
 
M_A,c的确定过程大概就是上面的内容,R16中还针对配置ca-SlotOffset的情况,列了一段伪代码,但其实也是类似的判断逻辑,不再多说。
 
semi-static codebook的生成
PDSCH reception位置候选集和M_A,c确定后,UE就要生成对应的semi-static HARQ-ACK codebook,再看下生成codebook的相关规定。
f9114893c523415fb9e6b3326e6a9623.png
UE如果由于没有收到DCI 导致没有收到调度的TB或CBG,那UE要对TB或CBG生成NACK,这个考虑的是DCI漏检情况,即网络侧调度了DCI,但是UE没有检测到对应的DCI,反馈NACK后,网络侧会再次重传,防止漏检。
7b933481825945edb29afd1395d7673b.png
semi-static的码本生成同样对应一段伪代码,其中UE由M_A,c得到服务小区包含的候选PDSCH 的数量,即下面的Mc,。
 
b1ca4c7dc4f14dba8ceb754ccf62ff9d.png
set c 代表服务小区的index,set j代表HARQ-ACKinfo 的bit index;set N_DL_cells 代表RRC成配置的服务小区个数(CA场景)。
对PDSCH reception候选位置进行遍历
429ab55969ca42768f21c0c964f6754f.png
m代表候选PDSCH 的index,对候选PDSCH进行遍历,不配置  harq-ACK-SpatialBundlingPUCCH 和CBG传输,但是进行2TB传输时, 针对每个TB生成一个HARQ-ACK bit。
 
 
03ecab898133447782a1b59ea7c8f881.png
有配置harq-ACK-SpatialBundlingPUCCH且进行2TB传输时,将2个TB的HARQ-ACK进行位与 AND操作,最后对应1bit;如果只收到1个TB,另一个TB的HARQ-ACK 认为是ACK。harq-ACK-SpatialBundlingPUCCH只有在传输layer 大于4 时才可能配置,大概意思是把两个TB的HARQ-ACK info 进了绑定传输。
05368c4f971a4b52813153e03cf39cf2.png
CBG这部分在上一篇 NR HARQ (二) CBG部分中有提及,这里就不在多说,但是要注意最后一句j=j+N_DL_TB,c *N_CBG/TB,max_HARQ-ACK,后面再说。
912c3e9030814430ac32273fb624ce65.png
其他情况 1个候选PDSCH生成1 bit HARQ-ACK即可;c++代表CA场景时,对其他服务小区的候选PDSCH 也要进行候选PDSCH的遍历。
 
由上述伪代码可见,semi-static codebook 在CA场景下,PDSCH reception 候选位置多以及CBG 传输场景,会有很大的开销;即使网络侧的PDSCH 调度并不多的情况下,也需要整个走一边流程,网络侧即使没有调度,也会带有很多NACK位,处理流程复杂。
 
 
有时候UE RRC配置的CBG传输,但是实际的DCI format却没有进行用CBG进行调度(仅DCI0_1和DCI 1_1支持CBG传输,在配置CBG时,对于其他DCI,只能进行基于TB 的传输);这时候semi-static码本的生成有相应的规定,如下。
21cbb7974d954a808643a6e40d39cd8f.png 
如果UE收到SPS PDSCH/SPS PDSCH release/PDSCH,此时只有一个服务小区,且C(M_A,c)=1,即只有一个PDSCH候选位置,配置了CBG,实际DCI调度时没有进行CBG传输,这时候UE根据收到的TB 生成1 bit HARQ-ACK 即可。
7cb8c675dcfc41a4b91d96f024ce5ecc.png
如果UE收到SPS PDSCH/SPS PDSCH release/PDSCH,此时有多个服务小区,且C(M_A,c)>1,配置了CBG,实际DCI调度时没有进行CBG传输,这时候UE对应收到的TB 生成HARQ-ACK 时,要重复N_CBG/TB,max_HARQ-ACK 次,N_CBG/TB,max_HARQ-ACK由RRC层参数maxCodeBlockGroupsPerTransportBlock确定。
 
就如上面生成CBG HARQ-ACK伪代码的最后一句j=j+N_DL_TB,c *N_CBG/TB,max_HARQ-ACK,就是说对于配置CBG传输的服务小区的PDSCH 候选位置,无论DCI是否有使用CBG传输,UE都要生成N_DL_TB,c *N_CBG/TB,max_HARQ-ACK bit HARQ-ACK反馈,这里也进一步说明了semi-static 的开销大的问题,如下图的例子。
90dea00b1d6d49fe97640735de0392d0.png
例如上图中的serving cell 1中的绿色和seving cell 2的黄色部分,虽然没有收到任何data,但是在生成codebook时,同样要根据设定生成对应bits的码本,进一步的如果每个serving cell 都只一个位置收到data,例如serving cell 0只收到第一个TB1/TB2, serving cell 1和2只收到一个PDSCH CBG传输,正常只要生成10bits 码本,但是按照semi-static 码本的设计,总共要反馈30bits的信息,开销确实很大。
 
245976bfb0de4df1a0e90928da0b3fde.png
因而某些场景网络侧不希望UE反馈完整的semi-static码本,只想收到1个简单的HARQ-ACK应答,例如DCI 1_0 counter DAI=1时的SPS PDSCH release;Pcell 收到DCI 1_0 counter DAI =1 的PDSCH reception或者SPS PDSCH reception,这三种场景,UE只要针对其产生应答即可,不用生成完整的semi-static码本。
015de6bc9d7f4b66ab8c49f7469260dd.png
在配置了pdsch-AggregationFactor时,PDSCH 发送时隙n_D-N_repeat_PDSCH+1 到时隙n_D,或时隙n_D-repetitionNumber+1 到时隙n_D 或n_D,其HARQ-ACK 要在slot n+k反馈;如果其他semi-statci码本中也包含上述PDSCH 接收情况,要将其相关的HARQ-ACK 置为NACK,即在n+k slot正常上报PDSCH reception 的HARQ-ACK info,其他时隙的码本与n+k 时隙的码本重合时,要将其他时隙码本中PDSCH接收相关的HARQ-ACK 置为NACK。
6c6e4cc8a25b4d72a5406e5aadc34d2e.png
例如上图,根据算法生成HARQ-ACK codebook显示,紫色DL 中的PDSCH 要在绿色的UL slot 上报HARQ-ACK;但是红色的UL slot 的HARQ-ACK codebook 也包含紫色DL 中的PDSCH且根据要求UE要在红色UL slot 上报 紫色DL PDSCH 的HARQ-ACK,那绿色UL HARQ-ACK codebook中的相应bit 要置为NACK,红色UL HARQ-ACK codebook根据实际情况上报NACK/ACK。
 
 
PUSCH
a46413bd7de742429d2d09466c5a4fe6.png
PUSCH也可能用于HARQ-ACK,首先看V_UL_T-DAI 的确定,当UL DCI format 带有DAI field 且DAI=0时,V_UL_T-DAI=0,否则V_UL_T-DAI=1。
具体的当 UL DCI 包含DAI field 且V_UL_T-DAI=1时,UE要按照上面的方式生成semi-static 码本,在生成码本时要用harq-ACK-SpatialBundlingPUSCH替换harq-ACK-SpatialBundlingPUCCH;  当UL_T-DAI=0时就不用生成码本,除非UE 只收到由DCI 1_0 调度的SPS PDSCH release/SPS PDSCH/PDSCH,且DCI 1_0 DAI=1,这时候UE也要生成对应的码本。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 CNN 检测一个人是否戴了口罩

在本文中&#xff0c;我们将使用 CNN &#xff08;卷积神经网络&#xff09;和机器学习分类器创建一个检测一个人是否戴着口罩的分类器。它将检测一个人是否戴着口罩。 我们将从头开始学习&#xff0c;我将对每一步进行解释。我需要你对机器学习和数据科学有基本的了解。我已经…

Bootstrap5 表单

在本章中&#xff0c;我们将学习如何使用 Bootstrap 创建表单。Bootstrap 通过一些简单的 HTML 标签和扩展的类即可创建出不同样式的表单。 表单元素 <input>, <textarea>, 和 <select> elements 在使用 .form-control 类的情况下&#xff0c;宽度都是设置为…

【HAL库】STM32CubeMX开发----delay延时实验----NOP空指令

STM32CubeMX 下载和安装 详细教程 【HAL库】STM32CubeMX开发----STM32F103/F207/F407----目录 前言 HAL库有自带的 ms级 延时函数&#xff1a; HAL_Delay(); 缺点1&#xff1a; 无法实现 us级延时 缺点2&#xff1a; 此延时函数是由SysTick滴答定时器中断产生的&#xff0…

【性能篇】28 # Canvas、SVG与WebGL在性能上的优势与劣势

说明 【跟月影学可视化】学习笔记。 可视化渲染的性能问题有哪些&#xff1f; 渲染效率问题&#xff1a;指的是图形系统在绘图部分所花费的时间计算问题&#xff1a;指绘图之外的其他处理所花费的时间&#xff0c;包括图形数据的计算、正常的程序逻辑处理等等。 在浏览器上…

Leetcode 1760. 袋子里最少数目的球

给你一个整数数组 nums &#xff0c;其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。你可以进行如下操作至多 maxOperations 次&#xff1a;选择任意一个袋子&#xff0c;并将袋子里的球分到 2 个新的袋子中&#xff0c;每个袋子里都有 正整数 个球…

深圳电巢携手东华理工大学“电巢相伴 研职引航” 线上讲座圆满结束

前 言 2022年12月13日下午2时&#xff0c;电巢十日谈——“电巢相伴 研职引航”在电巢app直播间开讲&#xff0c;本次活动由电巢科技与东华理工大学共同举办&#xff0c;为机械与电子工程学院的大一到大四的学生带来了不少启发。 「电巢十日谈」这一系列活动正是受到薄伽丘《…

如何实现冷库冷链远程监控

本解决方案是通过智能物联网技术&#xff0c;实现对冷库温湿度的远程监控管理。 根据冷库内的温湿度数据可以及时掌握冷库内的环境状况&#xff0c;并及时采取相应的措施。 该系统通过实时监测与显示不同冷库的温湿度&#xff0c;将温度数据上传到服务器&#xff0c;并可根据实…

Fully Convolutional Adaptation Networks for Semantic Segmentation

参考 论文解析之《Fully Convolutional Adaptation Networks for Semantic Segmentation》 - 云社区 - 腾讯云 论文网址&#xff1a;Fully Convolutional Adaptation Networks for Semantic Segmentation 摘要 深度神经网络的最新进展令人信服地证明了在大数据集上学习视觉模…

基于MediatR管道的公共业务校验

基于MediatR的管道模式&#xff0c;我们可以在处理业务之前&#xff0c;进行统一验证&#xff0c;记录日志等。 所有命令&#xff08;Command&#xff09;再被处理(Handle)之前&#xff0c;都要经过IRequestPreProcessor处理&#xff0c;我们注入自己的拦截器&#xff0c;执行…

chrome拓展插件开发中使用chrome.storage本地存储

一、描述 在扩展程序中本地存储数据可以通过 chrome.storage API 实现&#xff0c;和 web 中的 localstorage 在某些方面是有区别的&#xff0c;chrome.storage 已经做了优化。 与 localStorage 的区别&#xff1a; 用户数据可以与 chrome 自动同步&#xff08;通过 storage…

【推荐】智能制造工业4.0与MES资料合集

智能制造&#xff0c;源于人工智能的研究&#xff0c;一般认为智能是知识和智力的总和&#xff0c;前者是智能的基础&#xff0c;后者是指获取和运用知识求解的能力。 智能制造应当包含智能制造技术和智能制造系统&#xff0c;智能制造系统不仅能够在实践中不断地充实知识库&a…

请上车MySQL面试必备点:从常见的存储引擎到混淆的锁分类

我们之前的文章InnoDB解决幻读的方案中提到了记录锁&#xff08;行锁&#xff09;、间隙锁和临键锁&#xff0c;后台有小伙伴催我更新一下其他的锁。拖延症又犯了&#xff0c;趁周末&#xff0c;今天我们来总结一下MyISAM和InnoDB引擎下锁的种类及使用方法。 MySQL的四大常见存…

面试题:Linux是如何避免内存碎片的

Linux是如何避免内存碎片的&#xff1f; 在网上看到这个面试题&#xff0c;参考答案是这样的&#xff1a; 伙伴算法&#xff0c;用于管理物理内存&#xff0c;避免内存碎片;高速缓存Slab层用于管理内核分配内存&#xff0c;避免碎片。 故继而去深入了解了一波&#xff0c;做了…

牛客之基础单片机知识_1

✅作者简介&#xff1a;大家好我是 xxx&#xff0c;是一名嵌入式工程师&#xff0c;希望一起努力&#xff0c;一起进步&#xff01; &#x1f4c3;参照主页&#xff1a;嵌入式基地 &#x1f525;系列专栏&#xff1a;硬件基础知识——单片机 习题专栏 &#x1f4ac;网上关于嵌入…

软件测试不常用但是一定要会的测试技术与用例设计

一、认识基本术语 术语一&#xff1a; ◆动态测试&#xff08;dynamic testing&#xff09; 通过运行软件的组件或系统来测试软件(实际运行被测软件/系统)【需要进行操作】 ◆静态测试&#xff08;static testing) 对组件的规格说明书进行评审&#xff0c;对静态代码进行走…

【推荐】700套高端简历模板合集

简历&#xff08;英语&#xff1a;resume&#xff09;&#xff0c;顾名思义&#xff0c;就是对个人学历、经历、特长、爱好及其它有关情况所作的简明扼要的书面介绍。简历是有针对性的自我介绍的一种规范化、逻辑化的书面表达。对应聘者来说&#xff0c;简历是求职的“敲门砖”…

JSP学生宿舍网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 模块划分&#xff1a;通知类型模块、通知信息模块、院系信息、班级信息、宿舍 楼信息、宿舍信息、宿管信息、学生信息、…

three.js之多线条组合

文章目录多线条组合例子专栏目录请点击 多线条组合 我们可以通过CurvePath把多个曲线、直线等合并成一个曲线 例子 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><style>body {margin: 0;overflow: hidde…

CSS习题解答

文章目录1.1 样式定义方式1.2 选择器1.3 颜色1.4 文本1.5 字体1.6 背景1.7 边框1.8 元素展示格式1.9 内边距与外边距1.10 盒子模型1.11 位置1.12 浮动实战&#xff1a;个人名片1.13 flex布局1.14 响应式布局作业01作业02作业03作业04作业05作业06作业07作业08作业09作业10其他1…

正则表达式学习

文章目录入门开始和结束字符组区间特殊字符转义取反快捷匹配数字和字母匹配空白任意字符重复次数和区间或者条件进阶分组非捕获分组分组的引用正向先行断言反向先行断言正向后行断言反向后行断言常用元字符整理相关网站在线测试网站题目练习网站其他笔记入门 开始和结束 正则…