看完此文还不懂NB-IoT,你就过来掐死我吧.......
1
1G-2G-3G-4G-5G
不解释,看图,看看NB-IoT在哪里?
2
NB-IoT标准化历程
3GPP NB-IoT的标准化始于2015年9月,于2016年7月R13 NB-IoT标准完成。
3
NB-IoT设计目标和用例
NB-IoT主要面向大规模物联网连接应用,其设计目标:
•低成本、低复杂性:模块成本小于5美元,2020年目标2-3美元
•增强覆盖:164 dB MCL,比GPRS强20dB
•电池寿命:10年
•容量:约55000连接设备/小区
•上行报告时延:小于10S
4
NB-IoT关键技术
如何增强覆盖?
什么叫覆盖?就是最大耦合损耗(Maximum Coupling Loss,MCL),从基站天线端口到终端天线端口的路径损耗。
简单定义:
上行MCL=上行最大发射功率-基站接收灵敏度。
下行MCL=下行最大发射功率-终端接收灵敏度。
NB-IoT的MCL为164 dB。
①提升上行功率谱密度
上下行控制信息与业务信息在更窄的LTE带宽中发送,相同发射功率下的PSD(Power Spectrum Density)增益更大,降低接收方的解调要求。
NB-IoT上行功率谱密度增强17dB,考虑GSM终端发射功率最大可以到33dBm,NB-IoT发射功率最大23dBm,所以实 际NB-IoT终端比GSM终端功率谱密度高7dB。
②重传
重传就是在多个子帧传送一个传输块。Repetition Gain=10log Repetition Times,也就是说重传2次,就可以提升3dB啊。NB-IoT最大可支持下行2048次重传,上行128次重传。
另:接收端无需译码处理增益(约 3-4dB)。
如何降低成本?
①减少协议栈处理开销
如上图所示,NB-IoT舍弃了LTE物理层的上行共享信道(Physical Uplink Control Channel, PUCCH)、物理混合自动重传请求或指示信道(Physical Hybrid ARQ Indicator Channel, PHICH)等。
②减少不必要的硬件
单天线和FDD半双工模式,降低RF成本。
Release 13 NB-IoT仅支持FDD 半双工模式,意味着不必同时处理发送和接收,比起全双工成本更低廉,更省电。
另:低速率和低带宽本身意味着芯片处理复杂度降低。
如何省电?
①PSM(power saving mode)
怎样最省电?当然是“关机”最省电啊。
手机需要时刻待命,不然有人打电话给你找不到怎么办?但这意味着手机需不时监听网络,这是要耗电的。
但物联网终端不同于手机,绝大部分时间在睡觉,每天甚至每周就上报一两条消息,完事后就睡觉。所以它不必随时监听网络,PSM就是让物联网终端发完数据就进入休眠状态,类似于关机,不进行任何通信活动。
②eDRX
DRX(Discontinuous Reception),即不连续接收。eDRX就是扩展的不连续接收。
手机可以断断续续的接收信号以达到省电的目的。NB-IoT扩展了这个断续间隔,可扩展至2.91小时,更加省电。
此外,NB-IoT只支持小区重选,不支持切换,这减少了测量开销;对空口信令简化, 减小了单次数传功耗。
5
NB-IoT与LTE有什么不同?
先来简单回忆一下LTE...
无线帧长10ms,子帧1ms,时隙0.5ms,每无线帧内10个子帧,一个子帧2时隙,下行采用正交频分多址(OFDMA)技术,子载波间隔15kHz...多么熟悉的身影。
NB-IoT也是一样的。NB-IoT是基于FDD LTE技术改造而来,包括帧结构、下行OFDMA、上行SC-FDMA、信道编码、交织等大部分沿用LTE技术,可以理解为一种简化版的FDD LTE技术。
这正是NB-IoT被号称为史上最快完成的通信标准的主要原因(半年多就完成),这带来的另一个好处是与现有LTE相容,减少NB-IoT的设备和软件投入,以快速抢占物联网风口。
但也有不同之处。以下章节我们一边介绍NB-IoT,一边对比LTE。
5.1 传输方案
下行传输方案
NB-IoT下行与LTE一致,采用正交频分多址(OFDMA)技术,子载波间隔15kHz,时隙、子帧和无线帧长分别为0.5ms、1ms和10ms,包括每时隙的OFDM符号数和循环前缀(cyclic prefix)都是与LTE一样的。
NB-IoT载波带宽为180KHz,相当于LTE一个PRB(Physical Resource Block)的频宽,即12个子载波*15KHz/子载波=180KHz,这确保了下行与LTE的相容性。比如,在采用LTE载波带内部署时,可保持下行NB-IoT PRB与其它LTE PRB的正交性。
上行传输方案
NB-IoT上行支持多频传输(multi-tone)和单频(single- tone)传输。
多频传输基于SC-FDMA,子载波间隔为15kHz,0.5ms时隙,1ms子帧(与LTE一样)。单频传输子载波间隔可为15KHz以及3.75KHz,其中15KHz与LTE一样,以保持两者在上行的相容性;其中当子载波为3.75KHz时,其帧结构中一个时隙为2ms长(包含7个符号),15KHz为3.75KHz的整数倍,所以对LTE系统有较小的干扰。
与下行一样,NB-IoT上行总系统带宽为180KHz。
5.2 部署方式
众所周知,NB-IoT分为三种部署方式:独立部署(Stand alone)、保护带部署(Guard band)和带内部署(In-band)。独立部署适用于重耕GSM频段,GSM的信道带宽为200KHz,这刚好为NB-IoT 180KHz带宽辟出空间,且两边还有10KHz的保护间隔。保护带部署利用LTE边缘保护频带中未使用的180KHz带宽的资源块。带内部署利用LTE载波中间的任何资源块。
不过,上一段的最后一句话是错误的。在带内部署模式下,有些PRB,NB-IoT是不能占用的。
与LTE一样,NB-IoT终端在开机并搜索载波(小区)时,会在可能的频率范围内重复PSS/SSS的搜索和检测过程,直至搜索到相应的载波(NB-IoT锚定载波),频率扫描的栅格(raster)大小为100kHz。
所谓栅格(raster)也是用于调整LTE载波频率位置的最小单位,表示各个频点间的间隔应该是100KHz的整数倍,相当于一条高速路划分为若干车道,两个车道之间的中心距离为100KHz的整数倍。手机终端在频率扫描是就是按100KHz整数倍来扫描的。
这个100KHz的频率扫描栅格(raster)意味着在带内部署时,NB-IoT锚定载波必须位于确定的PRB中。例如,对于10MHz带宽的LTE,NB-IOT既不能占用同步和广播信道所在的PRB,又要满足100kHz raster要求, 因此其带内NB-IoT只能位于4, 9, 14, 19, 30, 35, 40, 45号PRB。
另外,还要做2.5kHz offset。(还真特么麻烦)
如上图,以NB-IoT带内部署于10MHz LTE带宽为例,DC子载波右边的PRB为#25,其中心频率为97.5kHz(相当于6个子载波),这就与最近的100KHz栅格有2.5KHz的偏差。
由于DC子载波之上的两个相邻PRB的中心频率间隔为180KHz,因此,#30、#35、#40和#45 PRB的中心频率均为离最近的100KHz栅格有2.5KHz的偏差。(只要做了2.5KHz偏差,就可以满足100KHz栅格要求)。
再看上图,对于10MHz和20MHz LTE载波,有一些PRB满足离最近的100KHz栅格有2.5KHz偏差。然而,对于3MHz,5MHz和15MHz的LTE载波带宽,这些PRB离最近的100KHz栅格偏差至少为7.5kHz。
所以,这里留一道作业题,像联通900M只有6M带宽这种情况,怎么办?
与带内部署模式相似,保护带部署模式下,NB-IoT的锚定载波也需满足其中心频率与最近的100KHz栅格不超过7.5KHz偏差,因为终端在小区搜索时,其栅格偏差需满足7.5KHz以下,才能完成网络同步。
NB-IoT支持多载波配置,其载波可分为两类:Anchor Carrier(锚定载波)和Non-Anchor Carrier(非锚定载波),对于非锚定载波,不必满足100KHz栅格偏差。
可是,有些PRB(比如#25)也满足离最近的100KHz栅格有2.5KHz偏差,为啥就不能部署带内NB-IoT的PRB呢?
答案是,NB-IoT不能使用LTE载波中间的6个PRB,这些PRB要用于LTE同步和广播信道。
5.3 物理信道
NB-IoT物理信道的设计在很大程度上也是基于LTE,本文我们主要介绍两者之间的差别。
1)下行
对于下行链路,NB-IoT定义了三种物理信道:
①NPBCH,窄带物理广播信道
②NPDCCH,窄带物理下行控制信道
③NPDSCH,窄带物理下行共享信道
还定义了两种物理信号:
①NRS,窄带参考信号
②NPSS和NSSS,主同步信号和辅同步信号
与LTE不同,由于NB-IoT频率带宽最多只有1个PRB,因此,这些下行物理信道间采用时分复用模式,也就是在不同的时间上轮流出现。
▲NB-IoT下行物理信道和信号之间的时分复用
如上图,NB-IoT子帧被分配给了不同的物理信道和信号,每一个NB-IoT子帧在频域上是一个PRB(12个子载波),在时域上为1ms。
NPSS和NSSS
NPSS和NSSS用于NB-IoT终端执行小区搜索,包括时间、频率同步和侦测Cell ID。因为LTE的同步序列占用6个PRB,NB-IoT不能占用这6个PRB。为避免冲突,NB-IoT需要重新设计。
NPSS位于每10ms无线帧中5号子帧(#5),周期为10ms,使用每子帧中的最后11个OFDM符号(如下图)。
对于NB-IoT终端来讲,执行NPSS检测是一项计算复杂的过程,有违于其设计简单化的目标,因此,NPSS的设计为短的ZC(Zadoff-Chu)序列。
NSSS位于子帧#9,周期为20ms,仅出现于偶数帧,同样使用每子帧中的最后11个OFDM符号。
NPSS为NB-IoT终端提供时间和频率同步参考信号,与LTE不同的是,NPSS中不携带任何小区信息,NSSS带有PCI。
NPBCH
NPBCH位于每无线帧中的子帧#0,TTI为640ms,承载MIB-NB(Narrowband Master Information Block),其余系统信息如SIB1-NB等承载于NPDSCH中。
NPDCCH和NPDSCH
NPDCCH承载上行和下行数据信道的调度信息,包括上行数据信道的HARQ确认信息、寻呼指示和随机接入响应调度信息、来自更高层的数据信息、寻呼消息、系统消息和随机接入响应消息等。
如以上NB-IoT物理信道时分复用图所示,很多子帧被分配给NPDCCH和NPDSCH。
为降低终端复杂性,所有下行信道采用LTE的TBCC码。另外,NPDSCH的最大传输块大小(TBS)为680 bits,而无空间复用的LTE支持的最大TBS大于70000 bits。
NRS
NRS(窄带参考信号),也称为导频信号,主要作用是下行信道质量测量估计,用于终端的相干检测和解调。在用于广播和下行专用信道时,所有下行子帧都要传输NRS,无论有无数据传送。
NRS与承载NPBCH、NPDCCH和NPDSCH的子帧中的信息承载符号时频复用,每天线端口每子帧使用8个RE。
上行
对于上行链路,NB-IoT定义了两种物理信道:
①NPUSCH,窄带物理上行共享信道。
②NPRACH,窄带物理随机接入信道。
还有DMRS,上行解调参考信号。
NPRACH
由于LTE的PRACH信道带宽为1.08MHz,这远远高于NB-IoT上行带宽,因此需重新设计。
和LTE的Random Access Preamble使用ZC序列不同,NB-IoT的Random Access Preamble是单频传输(3.75KHz子载波),且使用的Symbol为一定值。一次的Random Access Preamble传送包含四个Symbol Group,一个Symbol Group是5个Symbol加上一CP(如下图)。
一个NPRACH preamble(前导码)由四个Symbol Group组成。每个Symbol Group之间会有跳频。选择传送的Random Access Preamble即是选择起始的子载波。
▲NPRACH跳频
当CP长度为66.67s (Format 0) 时,小区覆盖半径达10公里。当CP长度为266.7s (Format 1) ,覆盖半径达40公里。为了扩展覆盖,NPRACH preamble可重复128次。
NPUSCH
NPUSCH用来传送上行数据以及上行控制信息,传输可使用单频或多频传输(前面介绍过)。
NPUSCH定义了两种格式:Format 1和Format 2。
Format 1为UL-SCH上的上行信道数据而设计,使用与LTE相同的Turbo码纠错,其资源块大小远低于LTE,不大于1000 bits。
Format 2用于NPDSCH的HARQ确认信令,传送上行控制信息(UCI),使用重复码来纠错。
映射到传输快的最小单元叫资源单元(RU,resource unit),它由NPUSCH格式和子载波空间决定。
有别于LTE系统中的资源分配的基本单位为子帧,NB-IoT根据子载波和时隙数目来作为资源分配的基本单位,如下表所示:
对于NPUSCH format 1,当子载波空间为3.75 kHz时,只支持单频传输,一个RU在频域上包含1个子载波,在时域上包含16个时隙,所以,一个RU的长度为32ms。
当子载波空间为15kHz时,支持单频传输和多频传输,一个RU包含1个子载波和16个时隙,长度为8ms;当一个RU包含12个子载波时,则有2个时隙的时间长度,即1ms,此资源单位刚好是LTE系统中的一个子帧。资源单位的时间长度设计为2的幂次方,是为了更有效的运用资源,避免产生资源空隙而造成资源浪费。
对于NPUSCH format 2,RU总是由1个子载波和4个时隙组成,所以,当子载波空间为3.75 kHz时,一个RU时长为8ms;当子载波空间为15kHz时,一个RU时长为2ms。
NPUSCH format 2调制方式为BPSK。
NPUSCH format 1调制方式分为以下两种情况:
●包含一个子载波的RU,采用BPSK和QPSK。
●其它情况下,采用QPSK。
这地方有点绕,换句话来理解:
①NPUSCH支持15 kHz或3.75 kHz单频传输,为了降低峰均功率比(PAPR),单频传输则使用π/2 BPSK或π/4 QPSK。
②NPUSCH若支持多频传输,则使用QPSK。
(补充:NB-IoT下行调制采用QPSK,下行信道编码采用TBCC,上行信道编码为Turbo码)
DMRS
DMRS用于信道估计。NPUSCH Format 1格式与LTE PUSCH时隙结构相同,每时隙7个OFDM符号,中间一个符号作为DMRS。Format 2格式同样为每时隙7个OFDM符号,但将中间3个符号用作DMRS。
5.4 资源映射
在本节中,我们将描述NB-IoT资源映射如何部署在LTE载波中,以确保与LTE的最佳共存性能。实质上,通过避免将NB-IoT信号映射到已经由传统LTE信号已经使用的资源元素来保持与LTE信号的正交性。
为了确保与LTE系统共存,必须避免NB-IoT信号映射到LTE已使用的RE(Resource Element,LTE物理资源中最小的资源单位),以保持两者间的正交性。
如上图所示,每一列表明一个OFDM符号中的RE,每个OFDM符号有12个RE(对应12个子载波)。
对于独立部署和保护带部署模式,不需要保护LTE资源。因此,NPDCCH, NPDSCH和NRS可以使用PRB中的所有资源。
对于带内部署模式,NPDCCH, NPDSCH和NRS不能映射到已被LTE CRS和PDCCH占用的RE上。
NB-IoT终端通过小区搜索来获知部署模式(带内/保护带/独立部署)和CI,然后确定哪些RE被LTE使用,终端再映射NPDCCH和NPDSCH符号到可用RE。NPSS,NSSS和NPBCH在初始同步和获取主系统信息时,并不知道部署模式,为此,NPSS,NSSS和NPBCH避免使用每一子帧的前三个OFDM符号,因为这些资源可能会被LTE PDCCH使用。
5.5 同步
同步是蜂窝通信系统中一个重要环节。当终端第一次开机后,需要检测一个"合适的小区"(suitable cell)来驻留,然后获取符号、子帧、帧定时以及与载波频率同步。为了频率同步,终端需要从基站获取同步信息,同步调校,以纠正因本地振荡器不精准而引起的频率偏差。另外,由于存在多个小区,终端需基于NB-PCID识别其指定小区。
因此,整个同步过程实际包括时间同步校准,频偏校正,获取CI和子帧和帧号参考。
NB-IoT的特点是低成本和强覆盖。低成本意味着NB-IoT终端配置低成本的晶振,其初始载波频偏可高达20 ppm。加之我们前文所述的带内和保护带部署模式下会引入额外的2.5KHz或7.5KHz栅格偏移,这会进一步加大载波频偏。对于NB-IoT的另一个特点———增强覆盖,意味着很多终端位于地下室一类的非常低的SNR网络环境。
如何在载波频偏和低SNR环境下完成精准的同步呢?尽管NB-IoT的同步过程和LTE相似,但为了解决上述两个问题,NB-IoT对同步序列进行了改动。
如前所述,NPSS和NSSS被用来完成同步,NPSS占用每帧的子帧#5,NSSS占用每个偶数帧的子帧#9。 NPSS用于获取符号定时和载波频偏,NSSS用于获取NB-PCID,时长为80ms块。对于超低SNR环境下的终端,要完成检测,单个10ms时间是不够的,需要一个累计的过程,多个10ms才行。NPSS就是基于这样的时间累计来设计的,其原理就是用时间来换精确性,用加权累积过程来纠正频偏。覆盖信号越差的终端,需要的累加次数越高。
NPSS和NSSS同步完成后,终端获取了符号定时、载波频偏和NB-PCID等信息。然后,终端获取MIB信息,其通过位于每帧中的子帧#0的NPBCH信道广播。NPBCH由8个自解码子块组成,每个子块重复8次,每个子块占用8个连续帧的子帧#0,这样设计的目的就是为了让处于深度覆盖的终端成功获取信息。
通过以上设计,NB-IoT有效的补偿了载波频偏,并完成NPSS和NSSS同步、获取MIB信息。至于栅格偏移,尤其是7.5KHz的偏移,有点不好解决。
7.5kHz栅格偏移会导致5.33秒(假设载波频率为900 MHz)的符号定时漂移,这大于了循环前缀的持续时间,会破坏OFDM的下行链路的正交性。唯一的办法就是牺牲成本,提升计算复杂度,以提高检测性能。
所以,这里解决了那道作业题“联通900M只有6M带宽这种情况,怎么办?”。
至于较小的栅格偏移,由于每10个子帧中只有一个NPBCH子帧,是可实现的。
5.6 随机接入
当需建立无线链路和调度请求时,NB-IoT会执行随机接入。随机接入的一个主要目的是实现上行链路同步,以保持上行正交性。
类似于LTE,NB-IoT基于竞争的随机接入包括四个步骤:
(1)UE发送随机接入前导码
(2)网络发送随机接入响应(包含TA命令和将在第三步使用的上行链路资源调度)
(3)UE使用调度资源,并向网络回应身份标识
(4)网络发送消息,解决多UE竞争接入问题。
为了满足不同的覆盖范围,系统可以在小区内配置最多三个NPRACH资源配置,每个配置指定随机接入前导码的重复值。终端会根据其测量的下行信号强度来估计覆盖水平(CE Level),并使用根据覆盖水平配置的NPRACH资源来发送发送随机接入前导码。
NB-IoT允许使用以下参数在时、频上灵活配置NPRACH资源:
时域:NPRACH资源的周期性,NPRACH资源的开始时间。
频域:频率位置(基于子载波偏移)和子载波数。
总之,终端通过测量下行信号强度来决定CE Level,并使用该CE Level指定的NPRACH资源,发送随机接入前导码。一旦随机接入前导码传送失败,NB-IoT终端会在升级CE Level重新尝试,直到尝试完所有CE Level的NPRACH资源为止(如下图)。
NB-IoT的随机接入过程和LTE非常相似,不再多述。
5.7 调度和HARQ
由于资源有限且支持重复传送,若上行采用同步自适应HARQ会导致上行资源运用更加困难,因此,NB-IoT的上下行都采用异步自适应HARQ,即根据新接收到的DCI(Downlink Control Information)来决定重传。另外,为了降低终端的复杂度,NB-IoT只支持一个HARQ过程,并且允许NPDCCH和NPDSCH更长的UE解码时间。
以上图为例,调度命令通过承载于NPDCH的DCI传送,NPDCH使用AL(aggregation levels)1或AL2传送DCI。对于AL1,两个DCI复用于一个子帧,否则一个子帧仅携带一个DCI(即AL-2),以降低编码率和提升覆盖。通过重传增强覆盖,每次重传占用一个子帧。
DCI可以用于调度下行数据或上行数据。
对于调度下行数据,在DCI中指示NPDCCH与相关联的NPDSCH之间的精确时间偏移。考虑物联网设备有限的计算能力,NPDCCH结束与相关NPDSCH的开始之间的时间偏移至少为4ms。
在接收到NPDSCH之后,终端需使用NPUSCH Format 2反馈HARQ确认。DCI中指示携带HARQ确认消息的NPUSCH的资源。考虑物联网设备有限的计算能力,NPDSCH结束与相关HARQ确认开始之间的时间偏移至少为12ms。
对于上行链路调度和HARQ操作,NPDCCH结束与相关NPUSCH开始之间的时间偏移至少为8ms。在完成NPUSCH传送之后,UE监视NPDCCH,以确认基站是否正确接收到NPUSCH,还是需要进行重传。
6
总结
最后,我们再总结一下NB-IoT的一些性能。
1)峰值数据速率
一个最大的TBS为680bits,时长为3ms,因此,NDSCH峰值物理层速率为680bits/3ms=226.7 kbps。同理,NPUSCH峰值数据速率为1000 bits/4ms=250kbps。然而,考虑DCI,NPDSCH / NPUSCH和HARQ确认之间的时间偏移,下行和上行的峰值吞吐量都低于上述数值。
2)覆盖
NB-IoT达到比LTE Rel-12高20 dB的最大耦合损耗(MCL)。覆盖范围的增强是通过增加重传次数来减少数据速率而实现的。通过引入单个子载波NPUSCH传输和 π/2-BPSK调制来保持接近于0dB的PAPR,从而减小由于功率放大器(PA)功率回退引起的覆盖影响,确保覆盖增强。15kHz单频NPUSCH若配置最大重传(128)和最低调制和编码方案时,物理层速率约20bps。而NPDSCH配置最大重传(512)和最低调制和编码方案时,物理层速率可到35bps。这些配置接近170dB耦合损耗,而LTE R12最高约142dB。
3)设备复杂性
为了降低终端复杂性,NB-IoT设计如下:
●下行和上行的传输块大小明显减少
●下行只支持一个冗余版本
●上下行仅支持单流传输
●终端仅需单天线
●上下行仅支持单HARQ过程
●终端无需turbo解码器
●无连接模式下的移动性测量,终端只需执行空闲模式下的移动性测量
●低带宽,低采样率
●仅支持FDD半双工
4)时延和电池寿命
NB-IoT主要针对时延不敏感的应用,不过,对于像发送告警信号等应用,NB-IoT支持10秒以下时延。对于164dB耦合损耗,终端平均每天传送200字节数据,电池寿命可达10年。
5)容量
仅有一个PRB资源的NB-IoT单小区支持连接52500终端。此外,NB-IoT支持多载波操作。因此,可以通过添加NB-IoT载波的方式来增加容量。
好了,来吧,掐死我....
参考文献:
NB-IOT,Antti Ratilainen
A Primer on 3GPP Narrowband Internet of Things (NB-IoT),Y.-P. Eric Wang, Xingqin Lin, Ansuman Adhikary, Asbjörn Grövlen, Yutao Sui, Yufei Blankenship, Johan Bergman, and Hazhir S. Razaghi,Ericsson Research, Ericsson AB
LoRa and NB-IoT,Gagan Gupta, Darshan Patil
NB-IoT解决方案,华为
LTE Signaling for IoT,Anhar Al-Ansi
部分图片来源:ROHDE&SCHWARZ,中国移动,华为,Intel,AT&T,NTT
网优雇佣军投稿邮箱:wywd11@126.com
看完此文还不懂NB-IoT,你就过来掐死我吧...的更多相关文章
-
看完此文还不懂NB-IoT,你就过来掐死我吧...【转】
转自:https://www.cnblogs.com/pangguoming/p/9755916.html 看完此文还不懂NB-IoT,你就过来掐死我吧....... 1 1G-2G-3G-4G-5G ...
-
新鲜出炉!JAVA线程池精华篇深度讲解,看完你还怕面试被问到吗?
前言 前两天趁着假期在整理粉丝私信的时候看到一个粉丝朋友的私信跟我说自己现在正在复习准备面试,自己在复习到线程池这一块的时候有点卡壳,总感觉自己差了点什么.想要我帮他指导一下.这不趁着假期我也有时间我 ...
-
看完此文,妈妈还会担心你docker入不了门?
本文在个人技术博客不同步发布,详情可猛戳 亦可扫描屏幕右侧二维码关注个人公众号,公众号内有个人联系方式,等你来撩... 上周对象突然心血来潮说想养个小宠物,我问想养啥她又说随便,你看着办!!!这我 ...
-
Java 8新的时间日期库,这二十个案例看完你还学不会算我的!!!
Java对日期,日历及时间的处理一直以来都饱受诟病,尤其是它决定将java.util.Date定义为可修改的以及将SimpleDateFormat实现成非线程安全的.看来Java已经意识到需要为时间及 ...
-
还不懂java类加载机制的,建议看下这份阿里技术官总结的笔记!
类加载机制 把class文件加载到内存,并对数据进行校验,准备,解析,初始化,形成可以被虚拟机直接使用的字节码 类加载的时机(触发类的初始化) 使用new关键字实例化对象 读取一个类的静态代码块 使用 ...
-
深度分析:java8的新特性lambda和stream流,看完你学会了吗?
1. lambda表达式 1.1 什么是lambda 以java为例,可以对一个java变量赋一个值,比如int a = 1,而对于一个方法,一块代码也是赋予给一个变量的,对于这块代码,或者说被赋给变 ...
-
面试阿里,字节跳动99%会被问到的java线程和线程池,看完这篇你就懂了!
前言: 最近也是在后台收到很多小伙伴私信问我线程和线程池这一块的问题,说自己在面试的时候老是被问到这一块的问题,被问的很头疼.前几天看到后帮几个小伙伴解决了问题,但是问的人有点多我一个个回答也回答不过 ...
-
深度解析:如何替换掉代码中的ifelse,我女朋友看完都会了!
平时我们在写代码时,需要针对不同情况处理不同的业务逻辑,用得最多的就是if和else. 但是如果情况太多,就会出现一大堆的"if else",这就是为什么很多遗留系统中,一个函数可 ...
-
【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?
简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以 ...
随机推荐
-
怎么修改与设置.java文件属性?
1.首先 打开 >> Myeclipse或Eclipse.(我用的是Myeclipse) 2.打开 >> Window >> Preferences ...
-
POJ 1947Rebuilding Roads(树形DP + 01背包)
题目链接 题意:给出一个树形结构,求P个节点的子树最少要去掉几条边 分析:DP[root][j] 表示 以第 root 个为根节点, 包含j 个节点需要去掉几条边.那么对于 root 这个根节点来说, ...
-
iOS-UITextField-常用方法
一.textField的常用设置 // 创建文本框 UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(60, 10 ...
-
20145211 《Java程序设计》第10周学习总结——昨夜星辰昨夜风
教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴. 在发送和接收 ...
-
SecureCRT使用Vim出现中文乱码问题的解决
1. 首先保证securecrt本身显示中文是ok的.如果不是,就先解决这一个问题. 2. vi ~/.vimrc 添加set encoding=utf-8 fileencodings=ucs-bom ...
-
MongoDB基础教程系列--第六篇 MongoDB 索引
使用索引可以大大提高文档的查询效率.如果没有索引,会遍历集合中所有文档,才能找到匹配查询语句的文档.这样遍历集合中整个文档的方式是非常耗时的,特别是处理大数据时,耗时几十秒甚至几分钟都是有可能的. 创 ...
-
【搬运工】之——Selenium+IDEA+Maven+TestNG环境搭建(转)
Selenium+IDEA+Maven+TestNG环境搭建 第一 安装java环境. 1. 下载并安装Jdk1.7或Jdk1.8 http://www.oracle.com/technetwork/ ...
-
python 二叉树实现带括号的四则运算
#!/usr/bin/python #* encoding=utf-8 s = "20-5*(0+1)*5^(6-2^2)" c = 0 top = [0,s[c],0] op = ...
-
JavaScript document open() 方法:打开一个新文档
<html> <head> <script type="text/javascript"> function createNewDoc() { ...
-
winform窗体 小程序【进程】
进程 一个应用程序就是一个进程,我的理解是,只要是打开应用程序,就会创建进程. 在.NET框架在using.System.Diagnostics名称空间中,有一个类Process,用来创建一个新的进程 ...