Model checking Part I

2023-11-08

Model Checking

序言

可靠系统开发过程中的主要挑战—设计验证问题(design validation)

定义:在早期阶段尽可能的确保设计的正确性。

现有实践方法—模拟和测试(simulation and tesing)

缺陷

  1. 当bug过多,系统设计简明耗时太长。
  2. 无法评估潜在的bug。
本书主题:取代现有的方法—形式验证(formal verification)

特点:尽可能详尽的探讨系统所有可能的行为。

本书焦点:形式验证方法中的其中一种—模型检测(model checking)

定义:通过穷举(显示或隐式)给定系统的所有可达状态,并遍历它们的行为,验证该模型反应系统的期望行为属性。

优点

  1. 全自动。无需监督,也无需专业的数理知识。
  2. 当设计不能满足所需属性,模型检测会产生一个反例,演示一个伪造属性的行为,为理解失败的原因以及修复问题提供了无价的线索。

意义:使形式验证领域发生彻底的变革,将其从一种纯学术学科转变为一种可行的实用技术,并可能·作为一种额外的有价值的附加设计验证方法整合到工业开发过程中(例如:内部模型检查器的开发以及在先进半导体和处理器制造商中的应用)。


第一章

模型检测的历史
  • 模型检测于1999年取得重大突破—符号模型检查(symbolicmodel checking)和部分降阶(partial order reduction),使得验证大的有限状态机成为可能,也引起了硬件行业的关注。于同年发行了本书的第一版,虽有不足但对该领域有重大的意义。
  • 过去广泛使用的SMV和SPIN(范式工具)现在仍然在使用,其简洁性一直广受讨论。
模型检测的现状

20年后,模型检测已经成为一个成熟的学科。它从众多领域(软件工程、编程语言、抽象解释、SAT和SMT解决器、理论证明、自动化理论等等)学习扩充并对做出贡献。模型检测取得巨大成功,内容甚多,需要一个共同的基础来学习这一领域。

第二章

模型检测

概念:一种检验有限状态并发系统的自动化技术。

优点:与传统方法(模拟、测试、演绎推理等)相比有大量优势 。

挑战:状态空间爆炸(state space exposion)—在能够交互的大量组件或能假定许多不同值的数据结构系统中发生。

实践:在复杂时序电路设计和通信协议等众多领域中得以成功运用。

本章主要内容
  • 将模型检测与其他验证硬件和软件的形式化方法进行了比较(2.2)
  • 描述模型检测如何用于验证复杂系统的设计(2.3)
  • 探寻了不同模型检测算法的发展,讨论了已提出的处理状态空间爆炸问题的不同方法
2.1 形式化方法的必要性

从两个层面说明:

现实层面:随着物联网及许多技术的发展,软硬件系统应用广泛,系统出错的代价太大(例如由于软件故障,阿里安5号火箭发射失败),普通的规避错误的方法(直接关闭故障系统)并不可靠,因而对提高系统可靠性方法的需求很大。

未来层面:变革不断进行,物联网技术在未来将快速发展,对计算机设备的可靠性要求将越来越高。

2.2 硬件和软件检测

本节主要内容:列举常用的形式化方法,并与模型检测作比较。

1. 模拟和测试

相同点:都需在实地部署系统前进行实验。

不同点:模拟在系统的抽象或模型上进行;测试在实际产品上进行。

用法:通常上是在系统的某些点注入信号,并在其他点观察产生的结果信号(例如在软件上提供特定输入,并观察输出结果)。

缺点:无法检验所有可能的交互和潜在的缺陷。

2. 演绎推理

用法:通常使用公理和证明规则来证明系统的正确性。

发展历程:早期主要用于确保关键系统的正确性,且证明完全由手工构造;后期研究人员意识到可以开发软件工具来强制正确使用公理和证明规则,并且也能用于系统搜索,以提出从现阶段证明中取得进展的各种方法。

意义:在软件开发领域有着重大的影响(例如:演绎证明研究中的不变量概念)。

优点:可以用于无限状态系统的推理,这能在一定程度上实现自动化。

缺点
(1)演绎验证是一个耗时的过程,只能由在逻辑推理方面受过教育并具有相当丰富经验的专家执行。所以演绎推理主要用于高度敏感的系统,例如安全协议。
(2)一些数学任务不能由一个算法来执行,可计算性理论表明程序的正确终止在一般情况下不能自动验证,这限制了可以自动验证的内容。因此,大多数证明系统不能完全自动化。
(3)虽然演绎验证可以在一定程度上实现自动化,但即使要验证的属性为真,也不能限制为找到证据所需的时间或内存。

3. 模型检测

概念:验证有限(使自动验证成为可能)状态并发系统的一种技术。

用法:该过程通常使用对系统状态空间的彻底搜索来确定某些规范是否正确。

优点
(1)通过一些算法可以在中型机器上以合理的效率实现。
(2)模型检测适用于几类非常重要的系统(例如硬件控制器和通信协议)。
(3)非有限状态的系统可以使用模型检查结合各种抽象和归纳原则进行验证。
(4)在许多情况下,可以通过将无界数据结构限制为有限状态的特定实例来发现错误(例如可将程序的无界消息队列限制为小数量再进行调试)。
(5)无论何时可以应用,它都比演绎验证更可取。

2.3 模型检测过程
  • 模型化:第一项任务是将设计转换为模型检查工具所接受的形式主义。在许多情况下,这只是一个编译任务。在其他情况下,由于时间和内存的限制,设计建模可能需要使用抽象来消除不相关或不重要的细节。
  • 规范:在验证之前,必须说明设计必须满足的属性。规范通常是以某种逻辑形式给出的(对软硬件系统而言,通常使用时态逻辑)。

规范中存在的问题:完整性。模型检测能为一个满足给定规范的设计模型提供检验方法,却无法确定所给定的规范能否覆盖系统应当满足的所有属性。

  • 验证:理想情况下,验证是完全自动的。然而,在实践中,它往往涉及到人力援助。这样的人工活动之一是对验证结果的分析。在出现负面结果的情况下,通常会给用户提供一个错误跟踪。这可用作检验属性的反例,并可帮助设计人员跟踪错误发生的位置。在这种情况下,分析错误跟踪可能需要对系统进行修改并重新应用模型检测算法。错误跟踪也可能是由于系统建模不正确或规范不正确(通常称为假负数)造成的,它可用于识别和修复。最后一种可能性是,由于模型的大小,验证任务将无法正常终止,因为该模型太大,无法适应计算机内存。在这种情况下,可能需要在更改模型检查器的一些参数或调整模型(例如使用额外的抽象)之后重新进行验证。
2.4 时态逻辑与模型检测

在这本书中,时态逻辑公式的意义将总是根据一个有标记的状态转换图来确定,这样的结构被称为克里普克(kripke)结构。

起源:最初由哲学家开发出来,为了观察时间在自然语言争论中的使用。

表达方式:大多数带有Gf操作符,表示如果f在未来为真,那么现在也为真。若表示时间e1和e2不会同时发生,那么书写为G(¬e1∨¬e2)。

使用:由于能在不显示引入时间的情况下描述事件发生的时间顺序,对特定并发系统的检测很有帮助。

分类标准:时间具有线性结构还是分支结构。

发展情况
(1)Pnueli(普努利)是第一个使用时态逻辑进行并发推理的人。他的方法包括从一组描述程序中单个语句的行为的公理来证明所考虑的程序的属性。该方法由Bochmann、Malachi和Owicki推广到时序电路。由于证据是手工制作的,这种技术在实践中往往难以使用。
(2)早在1980年,Clarke和Emerson的时序逻辑模型检验算法介绍使得这种推理能够自动化。由于检验单个模型满足公式比证明公式对所有模型的有效性容易得多,因此可以非常有效地实现这一技术。由Clarke和Emerson为分支时间逻辑CTL开发的算法在所考虑的程序所确定的模型的大小和时间逻辑中其规格的长度上都是多项式的。他们还展示了在不改变算法复杂度的情况下如何处理公平性,这是一个重要的步骤因为许多并发程序的正确性取决于某种类型的公平假设(例如:在互斥算法中不存在饥饿可能取决于这样一个假设,即每个进程都会无限频繁地取得进展)。
(3)在同一时期,Quille和Sifakis给出了一个CTL子集的模型检测算法,但是他们没有分析它的复杂性。后来Clarke、Emerson和Sistla提出了一种改进的算法,该算法在公式的长度和状态转换图的大小的乘积上是线性的。该算法是在EMC模型检查器中实现的,该算法被广泛分布并用于检查多个网络协议和时序电路。早期的模型检查系统能够以每秒大约100状态的速度检查状态转换图中的10的4次方到10的5次方状态之间的典型公式。尽管有这些限制,模型检查系统被成功地用于在几个已发表的电路设计中发现以前未知的错误。
(4)Sistla和Clarke分析了各种时态逻辑的模型检验问题,特别是线性时序逻辑(LTL)的模型检验问题是PSPACE-完全的。Pnueli和Lichtenstein重新分析了检验线性时间公式的复杂性,并发现,虽然复杂度在公式的长度上是指数的,但它在全局状态图的大小上是线性的。基于这一观察,他们认为线性时间模型检查的高度复杂性对于短公式仍然是可以接受的。同年,Fujita实现了一个基于表格的LTL公式验证系统,并说明了它如何用于硬件验证。
(5)CTL* 是一个非常有表现力的逻辑,它将分支时间和线性时间运算符结合在一起。这个逻辑的模型检查问题在中首次被考虑,其中,它被证明是PSPACE-完全的,且与LTL的模型检查问题处于相同的一般复杂性类中。这一结果可以进一步验证CTL* 和LTL模型在状态图的大小和公式的大小上具有相同的算法复杂度(不超过常数因子)。因此,为了模型检查的目的,将自己限制在线性时态逻辑上没有实际的复杂性优势。
(6)其他一些研究人员已经提出了用于验证并发系统的替代技术,这些方法中有许多使用自动机作为规范和实现,检查实施情况,以查看其行为是否符合本规范的要求。由于同一类型的模型同时用于实现和规范,因此在一个级别上的实现也可以用作下一级精化的规范。Kurshan的工作中隐含了语言限制的使用,这最终导致了一个名为COSPAN的强大验证器的开发。Vardi和Wolper首次提出使用ω-自动机(无限词自动机)进行自动验证。他们展示了如何根据ω自动机之间的语言控制来制定线性时序逻辑模型检验问题。还考虑了自动机之间一致性的其他概念,包括观察等价和各种细化关系。

2.5 符号算法

起源:1987年McMillan发现通过使用状态转换图的符号表示,可以验证大得多的系统。这种新的符号表示是基于布莱恩特的排序二进制决策图(OBDD)。

OBDD提供了布尔公式的规范形式,其通常比合取或析取范式更紧凑,并且已经开发出了用于操纵它们的非常有效的算法。这种符号表示由于捕捉了由电路和协议确定的状态空间中的一些规律性,因此可验证的状态数量级大大提升。

表达方式:通过将布尔值赋值给与电路或协议相关联的状态变量集来编码每个状态,转换关系可以用两组变量表示为布尔公式,一组用于编码旧状态,另一组用于编码新状态,该公式由二元决策图表示。由于谓词变换器(基于过渡关系)和固定点(表示并发系统的各种时间属性的状态集)都用OBDD表示。因此,可以避免显式构造并发系统的状态图。

工具:McMillan开发的模型检查系统SMV。

SMV基于用于描述分层有限状态并发系统的语言。语言中的程序可以通过在时间逻辑中表达的规范来注释。模型检查器从SMV语言的程序中提取表示为OBDD的转换系统,并使用基于OBDD的搜索算法来确定系统是否满足其规范。如果转换系统不满足某些规范,则验证程序将生成执行踪,以显示规范错误的原因。

强大性能表现

  • 对IEEEFuturebus +标准(IEEE标准896.1-1991)中描述的高速缓存一致性协议的验证。

Carnegie Mellon的研究人员用SMV语言构建了一个精确的协议模型,然后使用SMV表明所得到的过渡系统满足了缓存一致性的正式规范,并找到一些以前未被发现的错误和潜在的错误协议的设计。

  • 验证所需的CPU时间如何随着电路或协议的越来越大而逐渐增长的研究中发现,这种增长率是电路元件数量的一个低阶多项式。

应用

1、Coudert,Berthet和Madre开发了一种算法,通过对产品自动机的状态空间进行广度优先搜索来显示两个确定性有限状态自动机之间的等价性。他们使用OBDD来表示算法中两个自动机的转换函数。Pixley也已经开发了类似的算法。此外,包括Bose和Fisher,Pixley和Coudert等人在内的几个小组已经尝试了使用OBDD的模型检查算法。

2、Bryant,Seger和Beatty开发了一种基于符号模拟的算法,用于限制线性时间逻辑中的模型检查。规范包括逻辑中表示的前置条件 - 后置条件对。前提条件用于限制电路的输入和初始状态,后置条件给出了用户希望检查的属性。

形式:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DOqs2wZk-1583138946981)(en-resource://database/1187:1)]

与用于指定程序和电路的大多数其他时间逻辑相比,该公式的语法受到高度限制。唯一允许的逻辑运算符是连接,唯一的时间运算符是下一次(X)。通过限制可以处理的公式类别,可以非常有效地检查某些属性。

2.6 偏序约简

背景:以往由于软件的结构往往不如硬件,且软件通常是异步的(进程相互独立,无全局同步时钟),模型检测在软件验证中使用较少。基于偏序约简的验证技术的提出使软件状态空间爆炸问题取得了很大的进展。这些技术利用并发执行事件的独立性。当按任意顺序执行时,两个事件是相互独立的,从而导致相同的全局状态。

使用:偏序约简技术使得减少必须考虑的交错序列数成为可能。因此,减少了模型检查所需的状态数。当规范不能区分仅根据并发执行事件的顺序不同的两个交错序列时,只分析其中一个就足够了。这些方法与程序执行的偏序模型有关,根据这个模型,并发执行的事件不会被排序。每个部分有序的执行可以对应于多个交错序列,如果不可能区分这些序列,则为每个事件的偏序选择一个交错序列就足够了。

补充:交错模型是并发软件的一个常见模型。在这个模型中,单个执行中的所有事件都以一个称为交错序列的线性顺序排列。并发执行的事件相对于彼此任意排列,并且大多数用于指定并发系统属性的逻辑都能区分两个独立事件以不同顺序执行的交错序列。因此,通常会考虑这些事件的所有可能交织,这可能导致非常大的状态空间。

发展:许多研究人员已经研究了通过仅选择可以交错独立执行的转换方式中的一个子集来减小状态空间的想法。

例如:Overman考虑了一种并发的受限模型,该模型不包括循环和非确定关系;
Katz和Ped的证明系统建议使用对应于相同偏序执行的交错序列之间的等价关系;
Valmari的固执集、Godefroid的持久集、Peled的样本集也采用偏序约简思想;

2.7 处理状态空间爆炸问题的其他方法

虽然符号表示和部分顺序减少大大增加了可以验证的系统的大小,但是许多现实系统仍然太大而无法处理。因此,重要的是找到可以与符号方法结合使用的技术,以扩展可以验证的系统的大小。四种这样的技术是组合推理,抽象,对称和归纳。

组合推理

方法基础:利用复杂电路和协议的模块化结构。

使用:许多有限状态系统由并行运行的多个进程组成,这类系统的规范通常可以分解为描述系统小部分行为的属性,组合推理只使用其描述的系统部分来检查每个本地属性。
引申:当系统各组件之间相互依赖时,采用假设保证推理(在验证一个组件的属性时,须加上对其他组件的行为进行假设这一前提,若其他组件正确,假设取消)。

抽象

方法基础:基于包含数据元素的系统的规范通常涉及系统中的数据值之间的相当简单的关系。

使用:通过将映射扩展到状态和转换,可生成抽象系统。由于抽象系统通常比实际系统小得多,属性的验证也相对比较简单。

对称

方法基础:具有对称性的系统意味着存在保留状态转移图的非平凡置换组,这样的组可用于定义系统状态空间的等价关系,并减少状态空间。

使用:有限状态并发系统通常包括复制组件,由此可得系统的简化模型,简化模型可用于简化由时间逻辑公式表示的原始模型的属性的验证。

归纳

方法基础:对整个有限族系统的自动推理。

使用:检查给定家族中的每个系统是否满足某种时间逻辑性质时,使用归纳论证来验证不变量(表示族中任意成员的行为的不变过程)是否是适当的代表,使用此不变量,我们可以立即检查族中所有成员的此类属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Model checking Part I 的相关文章

  • 解决smplayer中文字幕乱码

    首先 打开选项 gt 首选项 选择字幕选项卡 找到 默认字符编码 选项 在下拉框中选择 简体中文 cp936 再打开 字体和颜色 页卡 上边 选择 系统字体 在下拉选框中选择一种简体中文字体 转载于 https www cnblogs co
  • 追忆我那为之奋斗了5年的地方

    虽然已经下定决心离开 但是当邮件发出那一刻 我的手还是忍不住的发抖 心跳在不停的加速 这毕竟是我工作了5年的地方 这里有我熟悉的面孔 直到过了几分钟 Boss回了个信息 过来下 我才深吸一口气 缓缓的走向他的办公室 追忆 初入职顺利过关斩将
  • Linux 编译安装 openssl库

    Linux 编译安装 openssl库 如果是不需要特定版本的openssl库的安装非常简单 直接sudo apt install opensll即可 而且像Ubuntu这种应该是自带了openssl库的 运行openssl version
  • vmware启动虚拟机黑屏解决办法

    以管理员身份在命令提示符窗口中输入 netsh winsock reset 然后重启计算机即可解决
  • stm32每周学习报告2.0

    STM32 通用定时器简介 STM32 的通用定时器是一个通过可编程预分频器 PSC 驱动的 16 位自动装载计数器 CNT 构成 STM32 的通用定时器可以被用于 测量输入信号的脉冲长度 输入捕获 或者产生输出波 形 输出比较和 PWM
  • SQL之视图、变量、存储过程、函数

    视图 虚拟表 和正常表一样使用 视图的好处 修改视图 方式一 视图不存在就创建 存在就替换 create or replace view name as select 方式二 alter view name as select 删除视图 d
  • 简单运行C程序的步骤和方法

    1 安装C Free程序 如下图可见 2 新建一个源程序 点击左上角 文件 然后选择新建 进行命名 3 开始编译程序 以This is a C program 为例 4 点击编译 并开始运行 如出现错误和警告 系统会给予提醒 改正后就可以运
  • C语言函数大全-- v 开头的函数

    v 开头的函数 1 va start 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 va arg 2 1 函数说明 2 2 演示示例 3 va copy 3 1 函数说明 3 2 演示示例 4 va end 4 1 函数说明 4
  • 【Clion+CubeMX开发STM32】(三)为你的工程创建GIT远程仓库

    目录 下载安装git 链接github远程仓库 上传 下载安装git 网上已经有很多git的安装教程 本文就不再赘述了 推荐一个链接 下载安装Git链接 链接github远程仓库 一 注册你的Git账号并登录 二 创建远程仓库 填写仓库名
  • 小程序云开发多表查询

    原文链接 https juejin im post 5baadb086fb9a05ce2740968 关联表学习 文中代码并不是实际代码 伪代码不可直接运行 功能 用户 喜欢 文章 表 用户表 users id username 唯一标识
  • Java常用配置项和命令行

    JVM配置项说明 1 java虚拟机可配置参数整理 java参数配置参数分成三类 标准参数 开头 如 version 非标准参数 X开头 非稳定参数 XX开头 第一部分 JMM配置参数 Xmn 新生代大小 Xms 初始内存大小 Xmx 堆最
  • 【Gale Shapley 婚姻稳定匹配算法实现】

    原理 所有男性按照好感的高低向对应女性求婚 每个女性在所有的向她发出求婚的男性和其丈夫 如果暂无丈夫则不做比较 选择一个最喜欢的 如果这个最喜欢的是当前的丈夫 则婚姻关系不变 否则与当前丈夫离婚 并与向她发出求婚请求的男性结婚 在每个女性处
  • facebook NLP 自然语言处理框架 Pytext 简介

    自然语言处理 NLP 在现代深度学习生态中越来越常见 从流行的深度学习框架到云端API的支持 例如Google云 Azure AWS或Bluemix NLP是深度学习平台不可或缺的部分 尽管已经取得了令人难以置信的进步 但构建大规模的NLP
  • 开源OLAP引擎测评报告(SparkSql、Presto、Impala、HAWQ、ClickHouse、GreenPlum) ...

    本文为博主公司原创文章 仿冒必究 转载请回复留言 开源OLAP引擎测评报告 SparkSql Presto Impala HAWQ ClickHouse GreenPlum 易观CTO 郭炜 序现在大数据组件非常多 众说不一 在每个企业不同
  • 大语言模型(LLM)及使用方法

    大语言模型 LLM Large Language Model 是一种基于深度学习的自然语言处理技术 它使用深度神经网络来学习自然语言的统计规律 以便能够自动地生成 理解和处理自然语言 LLM通常具有数亿个参数和数十亿个标记 能够处理大规模的
  • spring websocket 利用注解接收和发送消息

    websocket只定义了文字和字节俩种形式的消息格式 没有像http协议那样子有那么丰富的协议规范 我们看看http的协议格式 websocket之所以没有自己定义那么多的协议格式 是希望有框架自己来实现定义这些格式 我们称之为webso
  • RAC+Dataguard环境中JDBC Failover配置

    在rac dataguard的环境中 为了减少应用宕机时间及改动 提高业务的可用性 要求jdbc客户端配置failover 同时为了很好地做应用分割 又不能load balance 即在第一个实例不行时 去偿试第二个实例 两个实例都不行时
  • 安卓调试

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 花开堪折直须折 莫待无花空折枝 作者主页 https www weiyigeek top 博客 https b
  • python中一个函数调用另一个函数中的变量

    我们在一个函数func2 中想使用另一个函数func1 中的变量 通常会使用返回值的方法 但是在调用的时候 也会将func2 整体运行一遍 如果func2 函数体的运行对于func1 取返回值没有影响则完全可以 但是如果func2 函数体的

随机推荐

  • linux操作分析lab3

    内核准备 内核和相关环境 wget https raw github com mengning mykernel master mykernel 2 0 for linux 5 4 34 patch sudo apt install axe
  • 浅谈TCP/IP协议

    一 TCP IP协议 TCP 传输控制协议 IP 因特网互联协议 TCP IP 合称网络通讯协议 是Internet最基本的协议 Internet国际互联网络的基础 由网络层的IP协议和传输层的TCP协议组成 TCP IP 定义了电子设备如
  • c++链表对应节点相加

    题目 给定两个链表 分别表示两个非负整数 它们的数字逆序存储在链表中 并且每个节点只存储一个数字 计 算两个数的和 并且返回和的链表头指针 如 输入 3 gt 6 gt 9 2 gt 5 gt 7 输出 5 gt 1 gt 7 gt 1 思
  • 自己动手写线程池——向JDK线程池进发

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • Java七大设计原则

    文章目录 一 单一职责原则 1 不遵守单一职责原则 2 遵守单一职责原则 二 接口隔离原则 编辑 三 依赖倒转原则 1 改进前 2 改进后 四 里氏替换原则 五 开闭原则OCP 六 迪米特法则 七 合成复用原则 八 UML类图 一 单一职责
  • form-group 两种常用使用

    用法一 运行结果如下 form group 增加盒子的下边界 form control 充满整个父元素 并且有换行作用 用法二 运行结果如下 control label 元素内实现包含内容右对齐 FR 海涛高软 QQ技术交流群 386476
  • java的反射

    一 反射的定义 基于 JDK8 Oracle官网对反射的解释是本文基于 JDK8 Oracle官网对反射的解释是 反射使 Java 代码可以发现有关已加载类的字段 方法和构造函数的信息 并在安全性限制内使用反射对这些字段 方法和构造函数进行
  • 熵,信息熵,香农熵,微分熵,交叉熵,相对熵

    2019 07 13 https blog csdn net landstream article details 82383503 https blog csdn net pipisorry article details 5169528
  • Java 实现二分法查找

    二分法 public class BinarySearch public static void main String args int array 1 5 8 11 19 22 31 35 40 45 48 49 50 int targ
  • Java面向对象,你真的会用吗?

    就在今天 自己写的一个C 项目 同事说用面向对象的思想写比较好 其实面向对象思想 感觉这个东西谁不知道啊 但是 确实这个程序没有使用 使用的好处是什么呢 又要如何使用呢 这是很值得思考的问题 面向对象简称OO Object Oriented
  • OpenWrt的学习和总结

    OpenWrt的学习和总结 内容目录 1OpenWrt背景知识 2 2OpenWrt 基础知识 2 2 1目录结构 2 2 2扩展软件包feeds 3 2 3OpenWrt SDK 4 2 4固件升级 8 3OpenWrt内部机制 8 3
  • c++涉及继承和虚继承时的内存布局

    原文地址 c 涉及继承和虚继承时的内存布局 作者 风箫夜吟 今天是清明节假期的第二天 天气阴沉 无心于游玩 遂决定宅于实验室 现在来说每天拜读一下大牛的博客已成生活中不可或缺之乐趣 但是俗话说的好 光说不练假把式 今天拜读了浩哥的博客 感触
  • java中filereader使用

    package dadeo import java io FileNotFoundException import java io FileReader import java io FileWriter import java io IO
  • jmeter压测监控服务器

    安装步骤可参考 Windows https www cnblogs com zjn 20161215 p 8652623 html Linux https blog csdn net liuqiuxiu article details 10
  • springboot集成zipkin

    1 下载zipkin 的jar 后台启动 比如127 0 0 1 9411 2 所有的springboot项目 pom xml添加依赖
  • 笔记——输出信息

    Input sensor was set to Monocular Loading ORB Vocabulary This could take a while Vocabulary loaded Camera Parameters fx
  • SpringBoot启动时忽略某些自动配置类

    SpringBoot启动时忽略某些自动配置类 最近业务要求对接数据 需要连接第三方的数据库 但是他们的都是内网 只能通过前置机上部署我们的项目 由于 我们与第三方对接的处理都写在单独的服务里 如果来一个第三方 单独再写一个服务会很麻烦 不好
  • OpenGL 学习笔记(四) 基础纹理

    一 载入纹理 1 从磁盘中载入Targa 文件 GLbyte gltReadTGABits const szFileName GLint iWidth GLint iHeight GLint iComponents GLenum eForm
  • 实测—fft IP核使用(包括ifft的配置使用)

    Vivado xilinx fft9 0 使用笔记 注 仿真实测1024点的转换需要经过1148个时钟周期才能得到转换结果 模块配置信号含义请参考pg109文档手册 写的贼烂会看晕 不详细说明 一 查找fft IP核按如下几图配置可实现正确
  • Model checking Part I

    Model Checking 文章目录 Model Checking 序言 可靠系统开发过程中的主要挑战 设计验证问题 design validation 现有实践方法 模拟和测试 simulation and tesing 本书主题 取代