Lightweight Machine to Machine Technical Specification: Core(LwM2M 技术规范:核心)v1.1
1、范围
本文档LwM2M CORE技术规范描述了LwM2M消息传递层。 随附规范LwM2M TRANSPORT规范[LwM2M-TRANSPORT]详细描述了消息传递层到所选传输的映射。 传输层和消息传递层之间的分离提高了可读性,并简化了将来将LwM2M扩展到其他传输的过程。 LwM2M消息层使用具有多个接口和简单数据模型的RESTful设计。
1.1 LwM2M版本1.1
该规范定义了LwM2M协议的1.1版,并具有以下新功能:
- LwM2M自举功能的增强,允许进行增量升级
- 改进了对公钥基础设施(PKI)部署的支持
- LwM2M客户端将增强的注册序列机制引入LwM2M服务器
- LwM2M 支持 TCP/TLS,以更好地支持防火墙和NAT穿越
- 支持基于OSCORE的LwM2M的应用程序层安全性
- LwM2M 更好地支持低功耗WAN,包括3GPP CIoT和LoRaWAN
- 扩展的LwM2M操作以启用资源实例级别的访问。
- 检索和更新多个对象资源的性能改进
- 使用CBOR序列化的SenML支持JSON,以实现压缩的有效负载实现高效的传输。
- 添加新的数据类型。
有关LwM2M v1.1中其他传输和安全性增强的信息,请参考[LwM2M-TRANSPORT]
1.2 LwM2M v1.0
本文档增强了LwM2M 1.0版。 1.1版在强制性方面向后兼容v1.0 功能。 LwM2M v1.0提供以下功能:
- 具有本规范中定义的核心对象和资源集的简单资源模型。 可以在OMNA上找到已注册对象的完整列表。
- 创建,更新,删除和检索资源的操作。
- 资源更改的异步通知。
- 支持多种序列化格式,即TLV,JSON,纯文本和二进制数据格式以及LightweightM2M对象的核心集。
- UDP和SMS传输支持。
- 基于DTLS协议的安全性通信,支持不同类型的证书。
- 队列模式为LwM2M客户端提供通知LwM2M服务器可能会断开很长时间的连接以及何时可以再次访问的功能。
- 支持使用多个LwM2M服务器。
- 通过专用LwM2M引导服务器提供安全凭证和访问控制列表
3、术语和约定
对象 | 对象是逻辑相关资源的集合。 |
对象实例 | 对象实例是一个对象的一次出现 |
资源 | 资源是信息的原子单位。 |
资源实例 | 资源实例是资源的一次出现。 |
LwM2M 客服端 | 实现LwM2M协议以与LwM2M Server和LwM2M Bootstrap-Server交互的设备上运行的组件。 LwM2M客户端通常在IoT设备和网关中实现。 |
LwM2M 服务器 | 实现LwM2M协议的服务器端功能以与LwM2M客户端进行交互的组件。 通常,LwM2M Server软件在非IoT设备(例如本地服务器)或基于云的基础架构中运行。 |
LwM2M引导服务器 | LwM2M引导服务器(Bootstrap-Server)是负责向LwM2M客户端提供基本信息(包括证书)的服务器,以使LwM2M客户端能够对一个或多个LwM2M服务器执行“注册”操作。 通常,LwM2M引导服务器是LwM2M客户端与之交互的第一个LwM2M实体。 引导程序接口是LwM2M客户端和LwM2M引导程序服务器之间使用的唯一接口。 |
LwM2M引导服务器帐户 | 具有引导服务器资源的LwM2M安全对象实例为true |
LwM2M服务器帐户 | 具有Bootstrap-Server资源为false的LwM2M安全对象实例以及关联的LwM2M Server对象实例 |
请注意,无论哪里有LwM2M安全对象实例,都可能有关联的LwM2M OSCORE对象实例。 请参考[OMADICT]以获取本文档中使用的更多定义。
3.3缩略语
kB | Kilobyte; one kilobyte is 1000 bytes |
CoAP | Constrained Application Protocol |
DTLS | Datagram Transport Layer Security |
LoRaWAN | LOng RAnge Wide Area Network |
NB-IoT | NarrowBand Internet of Things |
OCSP | Online Certificate Status Protocol |
SMS | Short Message Service |
TCP | Transmission Control Protocol |
TLS | Transport Layer Security |
UDP | User Datagram Protocol |
OSCORE | Object Security for Constrained RESTful Environments |
4、简介
此使能器(enabler)定义了LwM2M服务器与LwM2M客户端之间以及LwM2M引导服务器与LwM2M客户端之间的应用程序层通信协议。 LwM2M设备包括一个LwM2M客户端组件。 OMA轻量级M2M支持器包括LwM2M设备的设备管理和服务支持。 此使能器的目标LwM2M设备主要是资源受限的设备。 因此,此启动器利用了轻量级和紧凑的协议机制以及有效的资源数据模型
LwM2M消息层受到基于[CoAP]的RESTful设计模型的启发。 交互是使用请求/响应模型的客户端和服务器之间的交互。 统一资源标识符(URI)用于标识对象和资源并与对象和资源进行交互,而协议则允许无状态和分层体系结构。
三个实体之间设计了四个接口,如图所示的体系结构:4.-1 LwM2M Enabler的总体体系结构:
- 引导程序
- 客户注册
- 设备管理和服务启用
- 信息报告
4.1. Version 1.1
LwM2M的1.1版引入了以下对象,它们是核心规范的一部分:
21. OSCORE对象
LwM2M的1.1版修改了以下对象,它们是核心规范的一部分:
0.安全对象
1.服务器对象
4.2. Version 1.0
LwM2M的1.0版引入了以下对象,它们是核心规范的一部分:
0.安全对象
1.服务器对象
2.访问控制对象
3.设备对象
4.连接监控对象
5.固件更新对象
6.位置对象
7.连接统计对象
5.基本注意事项
5.1 属性
5.1.1 属性定义和规则
属性是可以附加到对象,对象实例或资源的元数据。 属性的值是和LwM2M Server 相关特定的。这些属性可以发挥各种作用, 从仅携带信息(例如,发现)到携带用于在LwM2M客户端上设置某些操作的参数(例如,通知)。
附加到对象,对象实例,资源的属性分别称为O属性,OI属性,R属性(O-Attribute, OI-Attribute, R-Attribute)。
这些属性可以携带在注册和发现操作(Registration and Discover operations)的消息有效载荷中。 它们也可以通过“写入属性”操作(可写)进行更新。
无论给定属性附加到哪个LwM2M实体,此类属性的值都可以在各个级别上分配:对象,对象实例,资源级别。 此外,当同一属性在不同级别接收值时,将应用优先规则。
以下规则控制LwM2M属性的使用:
- O属性(O-Attribute)的值只能在对象级别设置。
- OI-属性( OI-Attribute )的值可以在对象实例级别和对象级别设置。
优先规则:
规则1:在两个级别上都设置时,OI属性的值将以在对象实例级别上设置为准。
规则2:在对象级别设置属性值时,只要遵守规则1,OI-属性值的范围就会扩展到该对象的所有实例
- 可以在4个不同的级别上设置R属性:资源实例级别,资源级别,对象实例级别和对象级别。 通常,附加到多实例资源的r属性可以用单个值设置为这种多实例资源的任何实例
优先规则:
规则3:当在资源级别设置时,该资源的 R 属性的值优先,无论是否在较高级别(对象或对象实例级别)也为该资源指定 R属性的值。
规则3a:在特定情况下,该资源是多实例资源,在资源实例级别设置的R属性的值将优先于在资源级别设置的相同属性的 值。
规则4:在对象实例级别设置时,只要遵守规则3,R属性值的范围就会扩展到该对象实例的所有资源。
规则5:在对象级别设置时,只要遵守规则4,R属性值的范围就会扩展到该对象的任何实例的所有资源。
5.1.2 属性分类
<PROPERTIES> Class Attributes
这些属性的作用是提供元数据,该元数据可以将有用的信息传达给LwM2M服务器,例如简化数据管理。
LwM2M服务器和LwM2M客户端应支持表:5.1.2.-1属性类别,除非特别说明不必要。
<NOTIFICATION> Class Attributes
这些R属性的作用是为“ Notify”操作提供参数。 任何可读的资源都可以具有此类R属性。
在LwM2M客户端发送的响应“观察”操作的消息中,报告了当前资源值。 此事件可以视为初始通知。
每次发送资源通知时,与该资源关联的“最小周期”和“最大周期”计时器将重新启动。
通知条件:在以下情况下将发送资源值的通知:
- a valid Change Value Condition ("Greater Than", "Less Than", OR "Step") - if any is defined - AND the "MinimumPeriod" Timing Conditions are both fulfilled for that Resource OR
- the "Maximum Period" Timing Condition is fulfilled.
6.接口(Interfaces)
根据图:4.-1 LwM2M启动器的总体体系结构那里有四个接口:1)引导程序(Bootstrap),2)客户端注册(Client Registration),3)设备管理和服务启用(Device Management and Service Enablement),以及4)信息报告(Information Reporting)。 四个接口的操作可以分为上行(uplink )操作和下行(downlink )操作。 在本节中定义了每个接口的操作,然后将其映射到LwM2M传输规范[LwM2MTRANSPORT]中的协议机制。
图:6.1-1 Bootstrap接口 显示了“ Bootstrap”接口的操作模型。 对于此接口,这些操作是名为“ Bootstrap-Request”的上行链路操作和名为“ BootstrapDiscover”,“ Bootstrap-Write”,“ Bootstrap-Read”,“ Bootstrap-Delete”和“ Bootstrap-Finish”的下行链路操作。 这些操作是用于初始化LwM2M客户端向一个或多个LwM2M Server注册所需的对象。 一旦LwM2M服务器在“ Bootstrap”接口上启动了“ Bootstrap-Write”操作,LwM2M客户端务必写入有效负载中包含的值,而不管是否存在目标对象实例或资源以及访问权限 权利。 在LwM2M引导服务器正在将引导信息寻址到LwM2M客户端的模式下,当此传输结束时,LwM2M引导服务器必须通过发送"Bootstrap-Finish"命令通知LwM2M客户端。
除了引导接口之外,还可以在制造期间(所谓的Factory Bootstrap)或通过智能卡(所谓的Smartcard Bootstrap)来配置LwM2M客户端与LwM2M Server一起运行所需的信息。
图:6.2.2客户端注册 显示了“客户端注册”接口的操作模型。 对于此接口,这些操作是名为“注册(Registration)”,“更新(Update)”和“注销(De-register)”的上行链路操作。
图:6.3-3 设备管理和服务启用( Device Management and Service Enablement) 显示了“设备管理和服务启用”接口的操作模型。 对于此接口,下行链路操作为“读取(Read)”,“读取复合(Read-Composite)”,“创建(Create)”,“删除(Delete)”,“写入(Write)”,“写入复合(Write-Composite)”,“执行(Execute)”,“写入属性(Write-Attributes)”和“发现(Discover)” 。 这些操作用于与LwM2M客户端公开的资源,资源实例,对象,对象实例和/或其属性进行交互。 “读取”和“读取复合”操作用于读取当前值。 “发现”操作用于发现属性和发现在某个对象中实现了哪些资源。 “写”和“写复合”操作用于更新值。 “写入属性”操作用于更改属性值。 “执行”操作用于启动功能。 “创建”和“删除”操作用于创建和分别删除实例
图:6.4-4信息报告( Information Reporting) 显示了“信息报告”接口的操作模型。 对于此接口,下行链路操作为“观察(Observe)”,“复合观察(Observe-Composite)”,“取消观察(Cancel Observation)”和“复合取消观察(Cancel Observation-Composite)”。 “通知(Notify)”是一个上行链路操作,用于从LwM2M客户端发送新的资源值到LwM2M服务器。 “发送(Send)”操作是LwM2M客户端用来向LwM2M服务器发送数据的另一种上行链路操作。
操作和接口之间的关系列于表:6.-1操作和接口之间的关系 中:
6.1 引导接口(Bootstrap Interface)
引导接口用于向LwM2M客户端提供基本信息,以使LwM2M客户端能够对一个或多个LwM2M服务器执行“注册(Register)”操作。
LwM2M启动( LwM2M Enabler)器支持四种引导程序模式:
- 工厂引导
- 从智能卡引导
- 客户端启动的引导程序服
- 务器启动的引导程序
最后两种引导模式需要LwM2M引导服务器的帮助才能实现将LwM2M客户端连接到其LwM2M服务器的最终目标。 如"6.1.3.4节服务器启动的引导程序"所述,“服务器启动的引导程序”模式是一种调用“客户端启动的引导程序”模式的方法。
LwM2M客户端务必支持引导接口中指定的至少一种引导模式。
LwM2M引导服务器(Bootstrap-Server)必须支持引导接口中指定的“客户端启动的引导(Client Initiated Bootstrap)”模式。
6.1.1 LwM2M引导服务器( LwM2M Bootstrap-Server)
LwM2M引导服务器用于为LwM2M客户端提供连接LwM2M服务器所需的信息。
为了使LwM2M客户端和LwM2M引导服务器在客户端启动的引导模式下或在服务器启动的引导模式下在引导接口( Bootstrap Interface)上建立连接,LwM2M客户端必须预先设置一个LwM2M引导服务器帐户。
注意:在引导阶段,LwM2M客户端可以忽略请求并刷新所有与引导序列无关的未决响应。
6.1.2 引导信息
本节阐明了为LwM2M客户端连接到LwM2M服务器或LwM2M引导服务器所需的配置信息。
该引导信息可以在执行第“6.1.4节引导序列”中所述的引导序列之前获得,也可以作为引导序列的结果而获得。
Bootstrap信息可以分为两种类型:
- LwM2M服务器引导信息
- LwM2M引导服务器引导程序信息
在6.1.4节中指定的引导程序顺序之后,LwM2M客户端务必具有LwM2M服务器引导程序信息。 LwM2M客户端使用LwM2M Server引导程序信息注册并连接到LwM2M Server。
LwM2M客户端应具有LwM2M引导服务器引导信息。 LwM2M服务器引导信息必须至少包含一个LwM2M服务器帐户。
请注意,根据LwM2M服务器帐户定义,通常的LwM2M服务器帐户由安全对象实例和服务器对象实例组成,它们通过共享(分别在该对象的资源10和资源0中)同一短服务ID(Short Server ID)配对。在LwM2M客户端中短服务ID(Short Server ID)是唯一的。还请注意,一个安全对象实例可能通过对象链接(安全对象实例的资源17)潜在地与OSCORE对象实例相关联。
LwM2M服务器引导信息可能还包含其他对象实例(例如访问控制,连接监视对象)。
LwM2M客户端可以配置为使用一个或多个LwM2M服务器帐户。
LwM2M客户端最多必须拥有一个LwM2M引导服务器帐户。
LwM2M客户端使用LwM2M引导服务器引导信息来联系LwM2M引导服务器以获取LwM2M服务器引导信息。
LwM2M引导服务器引导信息必须是LwM2M引导服务器帐户。
(*)完成第6.1.4节中指定的引导程序顺序后,LwM2M客户端必须至少拥有一个LwM2M服务器帐户。
请注意,LwM2M客户端必须接受通过Bootstrap接口发送的Bootstrap信息,而不应用第"8.2节 授权"中指定的访问控制。
6.1.3 引导模式( Bootstrap Modes)
以下小节提供了四种Bootstrap模式的更多信息。
6.1.3.1 工厂引导
在此模式下,LwM2M客户端已在设备部署之前配置了必要的引导程序信息。 所配置的信息可以是LwM2M引导服务器引导信息和(或)LwM2M服务器引导信息。
6.1.3.2 从智能卡引导
当设备支持智能卡时,LwM2M客户端务必如附录G中所述检索和处理智能卡中包含的引导数据。成功完成引导数据检索后,LwM2M客户端必须处理来自智能卡的引导数据,并应将引导信息应用于其配置,以增强安全性。
由于引导程序信息的敏感性,应该在智能卡和LwM2M设备之间建立安全通道。
当在智能卡和LwM2M设备之间建立了这样的安全通道时,该安全通道必须基于[GLOBALPLATFORM]程序,主要在附录H“智能卡和LwM2M设备存储之间的安全通道,用于安全引导数据供应(规范)”部分中进行描述。
在此引导模式下,LwM2M客户端必须确保先前从智能卡检索的引导程序数据在智能卡内保持不变。 如果引导程序数据更改了,并且LwM2M客户端应用了先前的从智能卡获取的引导程序信息,则LwM2M客户端必须将之前从智能卡获取的引导信息作废,并且LwM2M客户端应重新从自智能卡获取新的引导信息应用于其配置。
如果禁用了智能卡(例如,移除智能卡),则必须删除从前一个智能卡的引导数据创建的引导信息。
LwM2M 客户端和由智能卡配置的LwM2M服务器之间,每次执行“注册”或“更新”操作时,LwM2M客户端都必须检查智能卡更改和是否被禁用。 像往常一样,然后应用Bootstrap安全规则(请参见第6.1.5节“ Bootstrap安全”)
注意:可以通过使用[ETSI TS 102.225] / [ETSI TS 102 226]中指定的智能卡OTA协议以及诸如 [3GPP TS 31.115] / [3GPP TS 1.116] and [3GPP2 C.S0078-0] / [3GPP2C.S0079-0].之类的扩展名来更新智能卡中的引导程序信息。
6.1.3.3 客户端启动引导程序
“客户端启动的引导”模式为LwM2M客户端提供了一种从LwM2M引导服务器检索引导程序信息的机制。 “客户端启动的引导”模式需要在LwM2M客户端中预加载的LwM2M引导服务器帐户。
LwM2M客户端至少需要预先装载DTLS/TLS和(或)OSCORE [OSCORE]安全凭证才能对LwM2M引导服务器进行身份验证。
Figure: 6.1.3.3.-1 Client Initiated Bootstrap 以图形方式描述协议交换
Step #0::Bootstrap-Request获取引导URI
LwM2M客户端将“ Bootstrap-Request”操作发送到已预先配置的LwM2M Bootstrap-Server URI。 请求引导时,LwM2M客户端应发送LwM2M客户端的“终端客户端名称”作为参数,以允许LwM2M引导服务器为LwM2M客户端提供正确的引导信息。 如果“终端客户名称”等于安全协议中使用的标识符,则LwM2M客户端可以省略该名称。
Step #1: 配置引导程序信息
LwM2M引导服务器使用“Write”和/或“Delete”操作为LwM2M客户端配置引导信息。
初始引导后,此引导模式可用于在LwM2M客户端中配置一些引导信息资源,用以更新引导信息。 在这种情况下,所有引导信息都是OPTIONAL.
Step #2: Bootstrap-Finish(引导完成)
当LwM2M服务器完成了向LwM2M客户端发送引导信息时,服务器必须向客户端发送“Bootstrap-Finish”操作以正确结束此阶段。
当EXCHANGE_LIFETIME时间段到期后LwM2M客户端未收到“ Bootstrap-Finish”操作时,引导过程失败。 EXCHANGE_LIFETIME参数在RFC 7252 [CoAP]中定义.
Step #3: Clean-up after successful Bootstrapping(成功引导后进行清理)
引导成功意味着LwM2M客户端已收到“ Bootstrap-Finish”操作,并且LwM2M客户端认为加载的配置是一致的。 在这种情况下,发送到LwM2M Bootstrap-Server的Bootstrap-Finish响应代码为2.04(Changed)。 如果引导程序不成功,引导服务器帐户必须保留在引导程序不成功之前所拥有的值,并且以下第3步中的进一步说明不再适用。
如果在BootstrapServer的安全对象实例中实例化了Bootstrap服务器帐户超时资源(Account Timeout Resource),则LwM2M客户端务必在此资源的值所提供的到期时间之后清除LwM2M Bootstrap服务器帐户。 如果未实例化此资源或将其值设置为0,则引导服务器帐户的生存期是无限的(第E.1节LwM2M对象:LwM2M安全)。
每个设备唯一的高熵密钥应用于LwM2M引导服务器帐户。 在这种情况下,应该在引导后保留LwM2M引导服务器帐户,即引导服务器帐户超时资源可以设置为0,或者可以不进行实例化。
如果必须更换Bootstrap服务器帐户,则必须在客户端将Bootstrap-Finish响应消息发送回Bootstrap服务器之前,正确地进行替换和清除以前的BootstrapServer帐户。 否则,必须返回“Not Acceptable”的响应,并且以前的Bootstrap服务器帐户仍然是唯一的激活帐户。
注意:如果从设备中清除了原始LwM2M Bootstrap服务器帐户,并且尚未创建新的LwM2M Bootstrap服务器帐户,则将无法再添加或删除LwM2M Server帐户。 此外,例如更新安全凭证比如 X.509 证书也将不再可能。
6.1.3.4 服务器启动引导程序
在此模式下,由授权的LwM2M服务器做出触发引导序列的决定。 LwM2M服务器触发LwM2M客户端进入“Client Initiated Bootstrap”模式,而不是启动配置在LwM2M客户端中的引导程序信息的其他协议。
通过执行可从相关服务器对象实例获得的“Bootstrap-Request Trigger”资源来执行触发机制。 LwM2M客户端和LwM2M服务器之间的连接必须已经存在才能进入此“Server Initiated Bootstrap”模式。
注意:专有机制可用于使LwM2M客户端进入标准的“客户端启动的引导程序(Client Initiated Bootstrap)”模式,但这超出了本规范的范围。
下图描述了由授权的LwM2M服务器启动的“服务器启动的引导(Server Initiated Bootstrap)”流程。
6.1.4 引导序列
LwM2M客户端在尝试引导LwM2M设备时必须遵循以下指定的过程序列:
- 如果LwM2M设备拥有智能卡,则LwM2M客户端应尝试使用智能卡引导模式从智能卡获取引导信息。 LwM2M客户端必须忽略任何服务器启动的引导尝试,直到它尝试通过智能卡或工厂引导模式进行引导。
- 如果LwM2M客户端没有配置从智能卡模式引导,则LwM2M客户端将首先尝试通过使用工厂引导模式来获取引导信息。 LwM2M客户端必须忽略任何服务器启动的引导尝试,直到它尝试通过智能卡或工厂引导模式进行引导。
- 如果LwM2M客户端具有上述步骤中的任何LwM2M服务器对象实例,则LwM2M客户端将尝试注册到LwM2M服务器对象实例中配置的LwM2M服务器。
- 如果LwM2M客户端无法向所有LwM2M服务器注册,或者该客户端没有任何LwM2M服务器对象实例,则LwM2M客户端将执行客户端启动的引导程序。
- 只有在LwM2M客户端保留相应的LwM2M引导服务器帐户的情况下,才可以进行服务器启动的引导尝试(例如,更新LwM2M服务器帐户)。
6.1.5 引导安全
通过Bootstrap接口传达的信息非常敏感,需要使用通信安全。 [LwM2M-TRANSPORT]中讨论了Bootstrap接口的安全要求。
6.2 客户注册接口(Client Registration Interface)
LwM2M服务器务必支持此接口中的所有操作。 LwM2M客户端务必支持“注册”和“更新”操作。 LwM2M客户端应支持“注销”操作。
LwM2M客户端使用客户端注册接口向一个或多个LwM2M服务器注册,维护每个注册以及从LwM2M服务器注销。 该注册基于第7节“标识符和资源”中定义的资源模型和标识符。 注册时,LwM2M客户端执行“注册”操作,并提供LwM2M服务器所需的信息(例如,支持的对象和现有对象实例)以及可选参数(例如,终端客户名称)。 LwM2M客户端根据配置的参数(例如生命周期,队列模式)维护与每个LwM2M服务器的注册和通信会话。 LwM2M客户端通过执行“更新”操作,定期将其注册信息更新到已注册的LwM2M服务器。
如果注册的生存期(lifetime)到期而未收到LwM2M客户端的更新,则LwM2M服务器将认为它已注销:
- LwM2M服务器必须删除该LwM2M客户端的注册和现有观察(observations)。 如果LwM2M客户端不没有意识到到期,则当LwM2M客户端执行注册更新时,LwM2M服务器将以错误响应
- 收到错误消息后,LwM2M客户端应重置其状态并再次注册。 在开始任何进一步的通信之前,LwM2M客户端必须向LwM2M服务器重新注册(“更新”是不够的),以便再次连接。然后再开始任何进一步的通信。
如果LwM2M服务器或LwM2M客户机为服务器对象实例的生存期资源设置了一个值,那么这个值将成为注册的新的生存期.
在“注册”或“更新”操作期间,参数Lifetime(如果存在)必须与LwM2M服务器对象实例的强制性Lifetime Resource的当前值匹配。
最后,当关闭或停止使用LwM2M Server时,LwM2M客户端将执行“注销”(De-register)操作。
Lightweight Machine to Machine Technical Specification: Core(LwM2M 技术规范:核心)v1.1相关推荐
- core 包的核心类JdbcTemplate
JdbcTemplate 是core 包的核心类.它替我们完成了资源的创建以及释放工作,从而简化了我们对JDBC 的使用.它还可以帮助我们避免一些常见的错误,比如忘记关闭数据库连接.JdbcTempl ...
- Machine Learning for Technical Debt Identification
目录 Abstract: 1 INTRODUCTION 2 RELATED WORK 3 METHODOLOGY 3.1 Data Collection 3.1.1 Project Selection ...
- ajax machine tool,Machine Tool
The world's largest Machine Tool Reference Archive - a growing collection of articles about Manufact ...
- littlefs系列:Technical Specification
1.quick notes littlefs是block-based文件系统.flash被划分成多个相同大小的block block pointer是32bits,0xFFFFFFFF表示空指针 除了 ...
- python machine learning_Python Machine Learning
一.Locust工具介绍 1.概述 Locust是一款易于使用的分布式负载测试工具,完全基于事件,使用python开发,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gev ...
- Ubuntu 20 core dumped(核心已转储)问题分析
问题原因: core 指核心(线圈),没有半导体之前,使用线圈内存,指代内存. 可执行文件是分段存储的,加载进内存也是分段的,如代码段.数据段.堆.栈等,段错误的原因往往是碰到了不该碰到的内存位置(如 ...
- hdu 4501(三维背包问题)
小明系列故事--买年货 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Prob ...
- hdu 4501 小明系列故事——买年货 多重背包
小明系列故事--买年货 Time Limit: 500 ...
- hdu 4501 多维0-1背包
小明系列故事--买年货 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tota ...
最新文章
- 2021年大数据ELK(五):Elasticsearch中的核心概念
- 阿里达摩院再造AI抗疫技术:20秒判读CT影像,识别准确率达96%
- 微软亲手盖上IE棺材板:明年6月停用,慢且不安全,还因垄断被罚款170亿
- 最完整的Explain总结,SQL优化不再困难
- Spring-AOP @AspectJ切点函数之@annotation()
- 重磅!花书《深度学习》,这份精炼笔记可能是最全面的
- [每天一个知识点]3-程序员的三大美德(2)
- vsftp 一键安装包
- [转]magento2项目上线注意事项 切换到产品模式
- Navicat Premium 简体中文版 12.0.16 以上版本国外官网下载地址(非国内)
- python win32api sendmessage_win32api win32gui win32con 窗口句柄 发送消息 常用方法
- 一个简单的软件测试流程(附带流程详解)流程图
- 抖音快手免费去水印方法技巧
- LabWindows操作SQL SERVER
- 用css设置多段背景色
- Centos7 下配置Samba服务器---犯二的经历
- 手机幻灯片html代码,html5手机幻灯片制作手指滑动触屏手机幻灯片代码
- OGL纹理之纹理过滤器和多级渐进纹理mipmap
- bootstrap v4 toast轻提示正确用法
- MATLAB绘图合集: 绘制表达式和函数fplot
热门文章
- “互联网+”和跨界当道 大数据解码北京房产市场
- WordPress Gutenberg Block API:扩展块
- python底层与机器底层关系_由Python历史「解密」Python底层逻辑
- Java拖拽控件数据库_java实现鼠标拖放功能代码实例
- JavaScript 框架之jQuery
- 君子务本,本立而道生;敬事而信,直道而事人
- 走出大数据分析误区 寄云多行业工业案例树标杆
- 1000亩盐碱地试验田 国稻种芯-田国庆:拓荒精神荒滩变良田
- Fabric源码流程分析之Orderer篇
- Grafana 实现 clickhouse 监控(linux+mac+windows三种平台详解)