热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

汽车UDS诊断之诊断会话控制服务(0x10)深度剖析

DiagnosticSessionControl就是诊断会话控制服务,它是最为基础的一个诊断服务。诊断会话控制服务描述DiagnosticSessionControl

DiagnosticSessionControl就是诊断会话控制服务,它是最为基础的一个诊断服务。


诊断会话控制
服务描述
DiagnosticSessionControl客户端向服务端请求启用不同的诊断会话。

目录

1.英文术语

2.缩写表

3.服务描述

3.1.诊断会话

3.2.诊断会话间的转换

3.3.易失性存储器和非易失性存储器

3.3.1.易失性存储器

3.3.2.非易失性存储器

3.4.在默认会话或非默认会话下允许的服务

 4.请求消息定义

4.1.请求消息子功能定义

4.2.请求消息数据参数定义

5.肯定响应消息定义

5.1.肯定响应消息数据参数定义

5.1.1.会话参数记录定义

5.1.2.会话层计时参数定义

6.否定响应消息定义

6.1.否定响应码

7.服务使用示例

7.1.示例#1- 启动编程会话

7.1.1.步骤1:请求启动编程会话

7.1.2.操作汇总




1.英文术语


英文术语翻译
DiagnosticSessionControl诊断会话控制
diagnostic session诊断会话也可以称为诊断模式
non-volatile memory非易失性存储器(缩写为NVM)
diagnostic session timer诊断会话计时器(在ISO15765-3中定义为S3_{server}
DiagnosticSessionControl Request SID

诊断会话控制请求SID

ISO14229定义此值为0x10

sub-function子功能
diagnosticSessionType诊断会话类型

DiagnosticSessionControl Response SID

诊断会话控制响应SID

ISO14229定义此值为(0x10+0x40)

sessionParameterRecord会话参数记录
defaultSession默认会话
non-defaultSession非默认会话
ProgrammingSession程序会话,又称编程会话
extendedDiagnosticSession扩展会话
safetySystemDiagnosticSession安全系统会话


2.缩写表


缩写解释
SID服务标识符
NVM非易失性存储器
DTC故障码
Cvt

约定值

M 强制的

C 有条件的

U 用户选项

NRC否定响应码


3.服务描述


3.1.诊断会话

        诊断会话也可以称为诊断模式,服务端在同一时刻必然会处于某一种诊断会话下,且只能处于唯一一种诊断会话下,其实我们可以当诊断会话是UDS的“环境条件”,不同的诊断会话下所支持的诊断服务是不同的。譬如:请求某种诊断服务,但是当前的诊断会话是不支持此请求的服务,所以服务器就会去给服务器发一个否定响应。同时也记录着当前会话下数据链路层关于诊断服务的特定参数值(例如,计时参数值也就是诊断定时参数(如诊断响应的最大允许时间))。

        诊断会话总体上分为默认会话(也可称为默认会话模式)和非默认会话也可称为非默认会话模式)两种,非默认会话还可以进一步分为多个具体的诊断会话(如:程序会话、扩展会话等)。

注意:


  1. 服务端在上电时应进入默认诊断会话(简称默认会话),如果没有启动其他诊断会话,那么服务端应保持默认诊断会话。
  2. 服务端需要在进入请求的会话之后发肯定响应。


3.2.诊断会话间的转换

1、如果客户端请求了一个正在运行的诊断会话,那么服务端应该发送一个肯定响应。

例如:服务端当前处于默认会话下,客户端再去请求服务端进入默认会话,不要误以为此时我们服务端已经在默认模式下了,我们服务端就不需进行切换,服务端只需要发送一个肯定响应给客户端就可以了,这个考虑方式有点想当然了。此时我们要发的并不是一个肯定响应就够了,服务端还需要做的事情是完全初始化这个会话模式,如:将这个当前会话模式重新赋默认模式;这时也不需要定时器来定时;当这个会话模式重新赋值时(会话模式初始化也是会话模式变化的一种),服务端要重新上锁,还有一些就是跟UDS诊断状态和控制状态有关的都需要变回此服务端刚上电时的预定状态。

注意:上面的诊断会话如果是非默认会话,那么服务端初始化这个会话模式时,需要做的事情是


  • 将当前会话模式重新赋这个非默认会话;
  • 开启S3定时器(也称为诊断会话计时器),在ISO15765-3中参数名:S3Server ECU,这个用在非默认会话模式下,做自动跳转到默认会话的定时,标准建议5000ms,所以任何非默认会话都与诊断会话计时器相关联,服务端应在非默认会话模式下让诊断会话计时器保持活动状态,就是让它计
  • 服务端要重新上锁;
  • 还有跟此非默认会话模式下设置会回原先预定的状态(软件工程师内部确定的),譬如:设置回原先默认的UDS诊断状态和控制状态已提供给其他在此会话模式下支持的诊断服务。

2、服务器在上电时会处于默认会话下,我们可以通过给服务端发送诊断会话控制请求指令,使服务端切换到非默认会话。如果想要服务端保持在非默认会话,就需要在服务端自动跳转回默认会话之前这段时间给服务端发送诊断指令注意不要发默认会话指令,不然服务端会直接跳回默认会话模式),如果在这段时间没有发送诊断指令,那么服务端就会自动跳回默认会话

注意:


  1. 标准建议这段时间5000ms,在ISO15765中有详细描述,这个5000ms的计时时间是在服务端接收到诊断会话控制请求指令之后开始计时的。
  2. 这种从非默认会话模式自动跳回到默认会话模式的情况也会影响某些已经执行的服务行为而在默认模式下是不支持的,譬如:运行一段例程,如果超过5000ms没有给请求,就会自动回到默认会话下,相应的例程也要停止,因为例程控制服务在默认会话下是不支持的。

    这样就有了一个疑问就是我们超过5000ms的例程就不能完整执行了吗?
    注意我们有一个可以维持会话的服务就是诊断设备在线服务
    (0x3E)
     
  3. 这种从非默认会话模式自动跳回到默认会话模式的情况,我们也需要去考虑一些状态的重置即:当前会话模式重新赋默认会话默认,服务端要重新上锁,涉及到UDS诊断状态和控制状态有关的都需要变回此服务端刚上电时的预定状态(譬如:在非默认会话模式下控制通信报文不发出,我们在跳回到默认会话模式下时,需要恢复原来的通信,以免使用诊断仪的操作员忘记恢复通信

会话定时参数定义
定时参数说明类型推荐超时ms
S3_{Server}服务器在非默认会话模式下,没有接收到任何请求信息,服务器保持在此会话模式的时间,如果超出这个时间,服务端就会从非默认会话模式下跳转到默认会话模式下。时间重置值5000ms

服务端诊断会话状态图

服务端在默认会话和非默认会话间转换的时候遵循如下规则:


  • 默认-默认:当服务端当前处于默认会话时,如果收到切换默认会话的指令,服务端应完全初始化默认会话,涉及到有关UDS诊断状态和控制状态参数需要重置。这不包括编程到非易失性存储器中的长期变化譬如:我们不要是对一些EEPROM等外设进行重置,这样可能会给我们接下来的诊断操作带来一定的问题。             
    注:下面3.3中我们会着重讲一下非易失性存储器和易失性存储器的概念。
  • 默认-非默认:当服务端从默认会话切换到非默认会话时,只会停止ResponseOnEvent(0x86)服务在默认会话下的功能和配置。
  • 非默认-非默认:当ECU从非默认会话切换到非默认会话时(包含当前会话,譬如:扩展会话切换至工厂会话(一般供应商制定的会话模式,用于下线配置),或者是扩展会话切换至扩展会话。),服务端需要重新初始化诊断会话,总结以下三条初始化规则:
    1、停止ResponseOnEvent(0x86)服务在当前会话下的功能和配置。
    2、服务端安全访问状态重新上锁,即使切换到当前会话也要重新上锁。依赖于安全访问解锁的服务和功能要停止及相关的参数状态要重置,避免下次请求相关服务时,无法正常执行服务请求。
    譬如:例程控制服务涉及了一些状态啥,要恢复成原来未去执行此服务的有关的状态参量。
    3、在前后两个非默认会话下都支持的且不依赖于解锁状态的服务应该被保持,如通信控制和控制DTC设置 (这一块还么有看懂啊)                                                      
  • 非默认-默认:当服务端从非默认会话切换到默认会话时,要停止ResponseOnEvent(0x86)服务在当前会话(当前的非默认会话)下的功能和配置,安全访问状态重新上锁,在非默认会话下支持在默认会话下不支持的服务要停止,如:通信控制、输入输出控制等。但不要重置或改变非易失性存储器中的内容,如:使用2E写数据服务写入的参数。

    注意:以上一切的操作都要保证在新的会话模式下,所支持的所有服务在下一次请求开始都能够正常工作。

3、服务端在非默认会话下,也可以通过向服务端发送非诊断会话控制的诊断指令,以实现向默认会话的切换。

譬如:客户端向服务器发送ECU软件复位或者硬件复位后,如果服务端执行此服务诊断指令,系统就会重新开始,这样服务端又会回到默认会话。


3.3.易失性存储器和非易失性存储器


3.3.1.易失性存储器

易失性存储器就是指RAM,也叫主存,是CPU直接交换数据的内部存储器,它可以随时读写,而且速度很快,通常作操作系统其他正在运行中的程序的临时数据存储介质。RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。它的易失性表现在一旦断电所储存的数据将随之丢失。


3.3.2.非易失性存储器

非易失性存储器指断电后存储的数据没有丢失的存储器。

根据存储器内的数据是否能够在使用电脑时随时被改写为标准,可以将其分为两大类产品,即ROMFlash memory。

非易失性存储器主要有以下类型:

1、ROM  (Read-only memory,只读内存) 


  • PROM(Programmable read-only memory,可编程只读内存)  
  • EAROM(Electrically alterable read only memory,电可改写只读内存)   
  • EPROM(Erasable programmable read only memory,可擦可编程只读内存)
  • EEPROM(Electrically erasable programmable read only memory,电可擦可编程只读内存)

2、Flash memory(闪存)         

                                                                      


3.4.在默认会话或非默认会话下允许的服务


在默认会话或非默认会话下允许的服务
服务默认会话非默认会话
诊断会话控制(0x10)允许允许
ECU复位(0x11)允许允许
安全访问(0x27)不适用允许
通信控制(0x28)不适用允许
待机握手(0x3E)允许允许
访问计时参数(0x83)不适用允许
安全数据传输(0x84)不适用允许
DTC设置控制(0x85)不适用允许
事件响应(0x86)允许^a允许
链路控制(0x87)不适用允许
通过标识符读数据(0x22)允许^b允许
通过地址读取内存(0x23)允许^c允许
通过标识符读取比例数据(0x24)允许^b允许
通过周期标识符读取数据(0x2A)不适用允许
动态定义数据标识符(0x2C)允许^d允许
通过标识符写数据(0x2E)允许^b允许
通过地址写内存(0x3D)允许^c允许
清除诊断信息(0x14)允许允许
读取DTC信息(0x19)允许允许
通过ID控制输入输出(0x2F)不适用允许
例程控制(0x31)允许^e允许
请求下载(0x34)不适用允许
请求上传(0x35)不适用允许
传输数据(0x36)不适用允许
请求退出传输(0x37)不适用允许
请求文件传输(0x38)不适用允许

a:在默认会话下是否允许事件响应服务由具体实施情况(车辆制造商内部内部决定即可)而定。

b:在默认会话下,对于数据标识符的操作可以说是不支持的,因为他加了安全访问等级,而我们在默认模式下是不支持安全访问服务的,就只能切换至非默认会话下请求安全访问服务才可解锁,再去请求此服务才可响应。

c:在默认会话下,对于内存地址的操作可以说是不支持的,因为他加了安全访问等级,而我们在默认模式下是不支持安全访问服务的,就只能切换至非默认会话下请求安全访问服务才可解锁,再去请求此服务才可响应。

d:数据标识符能够在默认会话和非默认会话下被动态定义

e:例程控制需要使用安全访问服务,因此需要非默认会话,客户端主动停止的例程程序也需要在非默认会话下。

这里的允许^b、允许^c、允许^e并不是说此服务在当前会话中需要去请求安全访问服务进行解锁,而这里的安全访问服务必须在非默认会话下进行的,所以我们在此默认会话下,需用诊断会话服务切换至非默认会话,再去请求安全访问服务进行解锁,当进入此解锁状态,我们就可以在此非默认会话模式下请求可支持的服务。

所以我们如果已经是非默认会话服务,标有b、c、e的服务也就需要服务端先解锁后才能支持这些服务。其他服务可由车辆制造商定义安全访问等级或者不支持安全访问。

从表中可以看出,在默认会话下支持的服务由诊断会话控制、服务端复位、数据读取、故障码读取和清除等服务,而写入数据、通讯控制、输入输出控制、等服务都需要在非默认会话下执行,原因可以归纳为以下几点:


  • 有的服务会改变服务端的功能状态,例如:通信控制会关闭服务端通信报文,这种状态如果一直持续就会影响服务端的正常功能,所以保证服务端总是能够返回的正常状态。
    只依靠诊断仪发送诊断指令重新开启通信报文时不安全的,因为有的时候操作人员用诊断仪执行完必须的操作后直接就把诊断仪拔掉了,并不能保证操作人员每次都能手动恢复默认状态。所以我们要求这一类服务要在非默认会话下执行,我们前文中说过,非默认会话下服务端如果一段时间收不到这段指令就自动返回默认会话,服务端的状态会按上文所述的规则进行重置,就包括把通信报文重新打开。这样,我们就可以保证服务端总能返回默认的正常状态。这一类服务主要包括通信控制、控制DTC设置、以及输入输出控制等。
  • 还有的服务具有一定的危险性,或会对服务端的功能 产生永久性的改变,比如输入输出控制会操作服务端外部的一些执行器,如果操作不当造成部件损坏或人身危险;写参数服务会通过改变服务端内部的一些标定参数来永久性的改变服务端功能,如改写发送机扭矩限值来提高车辆动力。这一类的服务不允许随便执行,需要经过一个安全访问(0x27服务),就好比拿一把钥匙后才可以执行,这个安全访问其实也是通过诊断指令来使服务端进入一种允许的更高级别操作的解锁状态,这种解锁状态就像上一种情况所说的非默认状态一样,服务端不能一直处于这种状态,所以安全访问0x27服务也要放在非默认会话下执行,当服务端返回默认会话时,ECU重新上锁。因此,需要在解锁模式下执行的服务就也就只能在非默认会话下去执行。


     

 4.请求消息定义


请求消息定义
A_Data字节参数名称Cvt字节值助记符
#1诊断会话控制请求SIDM0x10DSC
#2子功能=[诊断会话类型]M0x00-0xFFLEV_DS_

4.1.请求消息子功能定义

该服务使用子功能参数诊断会话类型”选择服务端的特定行为。(此字节的bit7表示抑制肯定响应位,下表并没有介绍此位)。


请求消息子功能参数定义 
位6-0描述Cvt助记符
0x00

ISOSAEReserved

该值为本文件为未来定义预留。

MISOSAERESRVD
0x01

默认会话

此诊断会话启用服务端中的默认会话,在此会话下不存在超时,就是说不存在有自动跳转到某个会话模式的情况,它也不需要诊断设备在线服务(0x3E)来维持这种模式。

如果服务端处于非默认会话时,再次启动默认会话,应遵循以下实施规则:

1、当客户端发送默认会话请求时,停止当前的非默认会话,并启动默认会话后,向客户端发送肯定响应。

2、在服务端发送肯定响应之前,重新对服务器上锁(把门关起来,把锁锁上,在门里面服务,不解锁就享受不了)。

3、如果服务端发送带有诊断会话控制请求服务标识符的否定响应,则应继续保持非默认会话模式,时长是建议的5000ms,也就是在发送否定响应之后开始重新计时5000ms。

4、在非诊断会话下,其他非诊断会话控制服务(除ECU复位服务之外,这也是一种特殊情况)请求,服务端无论发送的是肯定响应还是否定响应之后,可继续保持非默认会话模式,时长是建议的5000ms,即继续保持在非默认会话5000ms。

MDS
0x02

编程会话

此诊断会话启用服务端中的编程会话,在此会话下用于支持所有有关服务端内存编程的诊断服务。

经验总结在非引导程序(应用程序)中,编程会话一般都是不用的,所以在默认会话下,请求跳转到编程会话下一般都设为不支持。

如果服务端在引导软件(bootloader)中运行编程会话,则只能通过三种方式退出编程会话:

1、客户端向服务端请求ECU复位(0x11)服务;

2、客户端向服务端请求会话类型等于默认会话的诊断会话控制(0x10)服务;

3、服务端中的会话层超时(就是设定的5000ms的计时超时了,就直接跳回到默认会话模式

如果服务端在引导软件运行时接收到默认诊断会话控制(0x10)服务会话层超时时,且存在有效的应用程序软件,则服务端应重新启动应用程序软件。

本标准并没有明确如何去实现有效应用程序重新启动的方法。

这个我们在做bootloader的UDS的时候,再去深入研究吧

UPRGS
0x03

扩展会话

此诊断会话可用于启用支持与调整服务端内存中诸如“怠速、CO值等”功能所需的所有诊断服务。

也可以用于在此会话模式下,进入新非默认会话,譬如:有些系统功能供应商定义了一些其他的非默认会话模式,需要先进入扩展模式后才能根据相应的会话指令进入新的非默认会话模式。

(这也就是我们为什么叫它扩展会话的原因。)

UEXTDS
0x04

安全系统诊断会话

此诊断会话启用支持与安全系统相关功能(例如,安全气囊展开)所需的所有诊断服务。

USSDS
0x05-0x3F

ISOSAEReserved

该值为本文件为未来定义预留。

MISOSAERESRVD
0x40-0x5F

车辆制造商特定

此值范围保留以供车辆制造商特定使用

UVMS
0x60-0x7E

系统供应商特定

此值范围保留以供系统供应商特定使用

USSS
0x7F

ISOSAEReserved

该值为本文件为未来定义预留。

MISOSAERESRVD

4.2.请求消息数据参数定义

此服务不支持请求消息中的数据参数。(所以我们请求报文只有2个字节数据,一个是SID,另一个是子功能


5.肯定响应消息定义


肯定响应消息定义
A_Data字节参数名称Cvt字节值助记符
#1诊断会话控制响应SIDM0x50DSCPR
#2子功能 = [诊断会话类型]M0x00 - 0xFFLEV_DS_

#3

#6

会话参数记录[] = [

                          数据#1

                            :

                          数据#4]

M

M

0x00 - 0xFF

       :

0x00 - 0xFF

SPREC_

    DATA_1

        :

    DATA_4


5.1.肯定响应消息数据参数定义


肯定响应消息数据参数定义
定义

诊断会话类型

此参数与请求消息子功能参数的位6~0相同。

会话参数记录

此参数记录包含服务端报告的会话特定参数值。(此会话特定参数在下面表格中有明确定义)


5.1.1.会话参数记录定义


会话参数记录定义
记录中的字节位置描述Cvt字节值助记符

#1

#2

#3

#4

会话参数记录[] = [

                             P2Server_max(高字节)

                             P2Server_max(低字节)

                             P2*Server_max(高字节)

                             P2*Server_max(低字节)]

M

M

M

M

0x00 - 0xFF

0x00 - 0xFF

0x00 - 0xFF

0x00 - 0xFF

SPREC_

   P2SMH

   P2SML

   P2ESMH

   P2ESML


会话参数记录内容定义
参数描述字节数分辨率最小值最大值
P2Server_max

服务端支持的默认P2Server_max计时,用于当前诊断会话。

车辆制造商可定义此最大值

21ms0ms65535ms
P2*Server_max

服务端支持的增强(NRC0x78)P2Server_max,用于当前诊断会话

车辆制造商可定义此最大值

210ms0ms655350ms

5.1.2.会话层计时参数定义


会话层计时参数定义
计时参数描述类型
P2Server服务端在接收到请求消息后从响应消息开始的性能要求(通过T_Data.ind指示)。性能要求
P2*Server在传输带有否定响应代码0x78的否定响应消息(通过T_Data.con指示)后,服务器从响应消息开始的性能要求 (增强的响应时间)。性能要求


6.否定响应消息定义


否定响应消息定义
A_Data字节参数名称字节值Cvt助记符
#1否定响应SID0x7FMSIDNR
#2诊断会话控制请求SID0x10MSIDRQ
#3否定响应码0xXXMNRC_

6.1.否定响应码


此服务支持的否定响应码
NRC描述助记符
0x12

不支持该子功能

如果不支持该子功能参数,则应发送此否定响应码。

SFNS
0x13

不正确的消息长度或无效格式

如果消息长度错误,则应发送此否定响应码。

IMLOIF
0x22

条件不正确

如果未满足请求诊断会话控制的条件,则应返回此否定响应码。

CNC


7.服务使用示例


7.1.示例#1- 启动编程会话


7.1.1.步骤1:请求启动编程会话

假定P2Server_max 等于50ms并且P2*Server_max 等于5000ms


诊断会话控制请求

消息方向

客户端→服务端

消息类型

请求

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

诊断会话控制请求SID

0x10

DSC

#2

子功能 = 编程会话

               抑制肯定响应位 = 假

0x02

DS_ECUPRGS


肯定响应消息

消息方向

服务端→客户端

消息类型

响应

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

诊断会话控制响应SID

0x50

DSCPR

#2

子功能 = 编程会话

0x02

DS_ECUPRGS
#3会话参数记录[P2Server_max(高字节)]0x00SPREC_1
#4会话参数记录[P2Server_max(低字节)]0x32SPREC_2
#5会话参数记录[P2*Server_max(高字节)]0x01SPREC_3
#6会话参数记录[P2*Server_max(低字节)]0xF4SPREC_4


7.1.2.操作汇总

步骤1:请求启动编程会话

图解:


操作CAN报文实体
01234567
请求启动编程会话0x020x100x02     客户端
肯定响应0x060x500x020x000x320x010xF4 服务端

到这里我们的0x10服务基本学完了。

以上解释有没有解决大家的疑惑,如果还是觉得有疑惑的地方,欢迎大家踊跃提出,一起分享,共同进步!!!

有CSDN号的也可以帮忙点个关注,我会陆续更新其它UDS服务


推荐阅读
  • 在2022年,随着信息化时代的发展,手机市场上出现了越来越多的机型选择。如何挑选一部适合自己的手机成为了许多人的困扰。本文提供了一些配置及性价比较高的手机推荐,并总结了选择手机时需要考虑的因素,如性能、屏幕素质、拍照水平、充电续航、颜值质感等。不同人的需求不同,因此在预算范围内找到适合自己的手机才是最重要的。通过本文的指南和技巧,希望能够帮助读者节省选购手机的时间。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文记录了作者对x265开源代码的实现与框架进行学习与探索的过程,包括x265的下载地址与参考资料,以及在Win7 32 bit PC、VS2010平台上的安装与配置步骤。 ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 在C#/ .NET中,处理基督面前的日期没有内置支持,需要编写自己的代码。本文介绍了在处理此类日期时的最佳方法,并提供了一个示例链接,可以参考编码的解决方案。 ... [详细]
author-avatar
粉奈訫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有