- 博客(30)
- 收藏
- 关注
原创 哈尔滨工业大学2020春软件构造、形式语言与自动机及算法设计与分析期末试题
详见https://github.com/Itaaaachi/The-final-exams-of-HIT-2nd-spring因为属于疫情期间,所以软件构造、形式语言与自动机难度较低,软件构造的复习一定注意设计模式的记忆以及英文专有名词的记忆。算法考试堪称史上最难,大家参考一下就好,算法考试要想高分还是要平时多练习昂。...
2020-07-27 19:11:13
1348
原创 Git基本指令
一、Git的原理Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git的原理如图所示:workplace是指工作区,即本地文件系统staging是指暂存区,用以隔离工作区和Git仓库local repository是本地仓库remote repository是远程仓库我们的目的是通过git,一层层把代码推送到远程仓库中去,用以记录代码的不同版本及其变化二、常见Git指令新建代码库# 在当前目录新建一个Git代码库`在这里插入代码片`$ git init
2020-07-11 10:56:01
194
原创 哈尔滨工业大学软件构造课程笔记第七章第三节
7.3锁与同步1.同步回忆数据类型或函数的线程安全:从多个线程使用时行为正确,而不考虑这些线程是如何执行的,无需额外的协调。线程安全不应依赖于偶然原理:并发程序的正确性不应该依赖于时间上的意外前三种策略的核心思想:– 避免共享 ➔ 即使共享,也只能读/不可写(immutable) ➔ 即使可写(mutable),共享的可写数据应自己具备在多线程之间协调的能力,即“使用线程安全的mutable ADT” – 缺陷:不能用全局rep共享数据➔只能“读”共享数据,不能写➔可以共享“读写”,但只有
2020-07-04 11:32:10
286
原创 哈尔滨工业大学软件构造课程笔记第七章第二节
7.2 线程安全1.什么是线程安全线程安全竞争条件:多个线程共享同一个可变变量,但不协调它们正在做的事情。这是不安全的,因为程序的正确性可能依赖于低级操作的定时事故。线程之间的“竞争条件”:作用于同一个mutable数据上的多个线程,彼此之间存在对该数据的访问竞争并导致interleaving,导致postcondition可能被违反,这是不安全的。threadsafe是什么意思线程安全:ADT或方法在多线程中要执行正确如何抓住这个想法?不违反spec、保持RI与多少处理器、OS如何调
2020-07-02 13:04:09
311
原创 哈尔滨工业大学软件构造课程笔记第七章第一节
7.1并发1.什么是并发编程?并发并发:多个计算同时发生。并发性在现代编程中无处不在:网络上的多台计算机一台计算机上的多个应用一个CPU上的多核处理器并发在现代编程中是必不可少的:多用户并发请求服务器的计算资源App在手机端和在云端都有计算GUI的前端用户操作和后台的计算同时进行为什么“并发”?摩尔定律失效了“核”变得越来越多为了充分利用多核和多处理器,需要将程序转化为并行执行并发编程的两个模型共享内存:并发模块在内存中读写共享数据消息传递:并发模块通过channel交换
2020-07-01 12:34:16
284
原创 哈尔滨工业大学软件构造课程笔记第六章第四节
6.4 代码调试1.什么是Bug,什么是Bug调试什么是Bug▪什么是Bug?-程序中的一种错误,它导致程序以一种非预期或非预期的方式执行。一个程序包含大量bug,或者严重干扰其功能的bug,被称为bug。-详细描述程序缺陷的报告通常称为缺陷报告、故障报告、问题报告、故障报告、缺陷报告等。▪为什么会发生错误?-代码错误-未完成的要求或不够详细-误解用户需求-设计文件中的逻辑错误-缺少文件-测试不够充分防御性编程→测试→调试防御性编程:在设计时避免出现bug;测试:发现程序中的问
2020-06-24 12:47:39
470
原创 哈尔滨工业大学软件构造课程笔记第六章第三节
6.3 断言与防御式编程1.回忆:设计ADT第一个防御:让bug不可能出现最好的防御就是不要引入bug静态检查:通过在编译时捕获bug来消除许多bug。动态检查:Java使数组溢出错误不可能捕获他们动态。如果尝试在数组或列表的边界之外使用索引,那么Java会自动产生错误。——未检查的异常/运行时错误不可变:不可变类型是一种类型,它的值一旦创建就永远不会改变。不可变值:由final,它可以被分配一次,但从来没有重新分配。不可变的引用:通过final,这使得引用不可重新分配,但是引用指向的对象可
2020-06-21 12:06:49
334
原创 Java中的通配符
1.分类1.<? extends E>代表上边界限定通配符2.<? super E>代表下边界限定通配符2.用法上边界限定通配符用于当对应子类型未知时,例如:puclic void print(List<? extends Animal> l){ for(int i=0;i<l.size();i++) System.out.println(l.get(i).getname();}以上例子为打印动物列表,
2020-06-16 18:01:48
188
原创 哈尔滨工业大学软件构造课程笔记第六章第二节
6.2 错误与异常处理1.Java中的错误和异常Java中的Abnormals所有异常对象的基类都是 java.lang.Throwable以及它的两个子类java.lang.Exception异常和java.lang.Error。错误和异常Error类描述内部系统错误和资源,Java运行时系统中的耗尽情况(例如VirtualMachineError, LinkageError)很少发生。-不应该抛出这种类型的对象。-如果发生这样的内部错误,除了通知用户并试图优雅地终止程序,你几乎不能做什么。
2020-06-13 14:49:12
248
原创 类的等价性
在写代码的时候,我们经常会遇到需要判断两个类是否等价的情况,这篇博文将对几种等价性以及判断等价的方法进行讲解。1. 不可变对象对于不可变对象,有两种等价性:引用等价性和对象等价性。引用等价性:通俗的讲,引用等价性就是判断两个对象的地址是否相同;即使两个对象内容完全相同,但是保存在不同的地址,两者依旧不等价。判断引用等价性通常用==对象等价性:对象等价性就是判断两个对象的内容是否相同,通常用equals方法;而对于我们自己定义的类,通常需要重写equals方法以及hashCode方法。equals方法
2020-06-12 18:30:02
390
1
原创 健壮性和正确性的辨析
在评价一个软件的功能好坏时,我们首先看重的指标就是健壮性和正确性,由于这两个性质的定义过于相似,所以难于辨析。在这片博客中,我来辨析一下健壮性与正确性的异同。1.正确性正确性是指软件产品执行其规范所定义的精确任务的能力,需要软件可以按照预先定义的“规约”执行,正确性是最重要的质量指标2.健壮性健壮性指的是软件针对异常情况的处理的能力,健壮性是对正确性的补充,希望出现异常时不要“崩溃”3.二者区分正确性:软件的行为要严格的符合规约中定义的行为健壮性:出现规约定义之外情形的时候,软件要做出恰当的反
2020-06-12 10:48:17
2156
原创 哈尔滨工业大学软件构造课程笔记第六章第一节
6.1 健壮性与正确性1. 什么是健壮性&正确性?健壮性:系统在不正常输入或不正常外部环境下仍能够表现正常的程度面向健壮性的编程:处理未期望的行为和错误终止即使终止执行,也要准确/无歧义的向用户展示全面的错误信息错误信息有助于进行debug健壮性原则(Postel定律)Paranoia (偏执狂):总是假定用户恶意、假定自己的代码可能失败Stupidity:把用户想象成白痴,可能输入任何东西返回给用户的错误提示信息要详细、准确、无歧义健壮性原则(Postel定律):对别人宽容点
2020-06-12 10:26:25
261
原创 设计规约Spec
1.为什么要写Spec没规约,没法分派任务,无法写程序;即使写出来,也不知道对错程序与客户端之间达成的一致:明确双方的责任,定义正确实现的含义Spec给“供需双方”都确定了责任,在调用的时候双方都要遵守2.怎么写SpecSpec的作用是告诉程序员以及客户函数的功能,所以只讲“能做什么”,不讲“怎么实现“,如何实现代码需要程序员自己设计。在设计Spec的时候,我们首先要说明函数的功能用“requires:”标明输入函数的数据的类型以及其意义,即前置条件用“effects“标明返回值的类型以及其
2020-06-08 20:58:08
393
原创 哈尔滨工业大学软件构造课程笔记第五章第二节
5.2面向可维护性的设计模式1.关于如何“创建类的新实例”的模式(1)工厂方法模式工厂方法也称为虚拟构造器目的:-定义创建对象的接口,但让子类决定实例化哪个类。-Factory方法让类延迟实例化到子类。当client不知道/不确定要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。常规情况下,client直接创建具体对象Product p = new
2020-06-04 22:51:45
252
原创 哈尔滨工业大学软件构造课程笔记第五章第一节
5.1可维护性的度量与构造原则1.软件维护和软件演化什么是软件维护?软件工程中的软件维护是指在软件产品交付后对其进行修改,以纠正错误,提高性能或其他属性。运维工程师运维是软件开发中最困难的工作之一,涉及到其他所有环节处理来自用户报告的故障/问题运维工程师必须有高超的调试技巧修复代码之后更多步骤:测试所做的修改回归测试记录变化除了修复问题,修改中不能引入新的故障最大的问题:修改后没有足够的文档记录和测试软件维护的类型25% 纠错性:对交付后执行的软件产品进行反应性修改,以纠正发
2020-06-03 14:54:45
376
原创 哈工大软件构造课程笔记第四章第三节
4.3 面向复用的设计模式为什么要使用可重用的设计模式?设计……使灵活性能够更改(可重用性)在修复旧问题时尽量减少引入新问题(可维护性)允许在初始交付之后交付更多的功能(可扩展)。设计模式:对软件设计中给定上下文中经常出现的问题的通用的、可重用的解决方案。OO设计模式通常显示类或对象之间的关系和交互,而不指定涉及的最终应用程序类或对象。除了类本身,设计模式更强调多个类/对象之间的关系和交互过程—比接口/类复用的粒度更大设计模式分类法创建型模式:关注对象创建的过程结构型模式:处理类或对象
2020-05-29 11:16:20
259
原创 哈尔滨工业大学软件构造课程笔记第四章第二节
4.2 面向复用的软件构造技术1. 设计可重用的类在OOP中设计可重用的类▪封装和信息隐藏▪继承与超越▪多态、子类型和重载▪泛型编程▪行为分型和利斯科夫替代原理(LSP)▪授权和组成(1)行为分型和利斯科夫替代原理(LSP)行为分型子类型多态:客户端可用统一的方式处理不同类型的对象如果对于类型T的对象x,q(x) 成立,那么对于类型T的子类型S的对象y,q(y) 也成立。Java中编译器强制的规则(静态类型检查)子类型可以增加方法,但不可删子类型需要实现抽象类型 (接口、抽象
2020-05-27 15:19:32
466
原创 哈尔滨工业大学软件构造课程笔记第四章第一节
4.1 可复用性的度量、形态与外部表现1.什么是软件复用?软件复用/重用软件重用是使用现有软件组件实现或更新软件系统的过程。软件重用的两种观点:面向复用编程:开发出可复用的软件基于复用编程:利用已有的可复用软件搭建应用系统)为什么重用?降低成本和开发时间经过充分测试,可靠、稳定标准化,在不同应用中保持一致复用成本不仅program for reuse代价高,某些情况下program with reuse代价也高可复用组件:被复用到的产品规模越大,数量越多,开发可复用组件的成本越低
2020-05-22 12:04:13
335
原创 哈尔滨工业大学软件构造课程笔记第三章第五节
3.5 ADT和OOP中的“等价性”1. 等价关系数据类型中的值是否相等?现实中的每个对象实体都是独特的, 所以无法完全相等,但有“相似性”在数学中,“绝对相等”是存在的等价关系等价关系:自反、对称、传递自反 E(t,t) ∀t∈T对称 E(t,u) ⇒ E(u,t)传递 E(t,u) ∧ E(u,v) ⇒ E(t,v)2.看待等价的三种方式在ADT上的相等操作ADT是...
2020-05-06 15:58:59
335
原创 哈尔滨工业大学软件构造课程笔记第三章第四节
3.4 面向对象的编程(OOP)1. 基本概念:对象、类、属性和方法对象现实世界中的对象有两个共同特征:它们都有状态和行为。识别现实对象的状态和行为是开始考虑面向对象编程的好方法。对于你看到的每一个对象,问你自己两个问题,这些现实世界的观察都转化为OOP的世界:状态有哪些?行为有哪些?对象是状态和行为的集合状态——对象中包含的数据。-在Java中,这些是对象的字段行为——对...
2020-05-04 18:07:51
543
原创 哈尔滨工业大学软件构造课程笔记第三章第三节
3.3 抽象数据类型 (ADT)1. 抽象和用户定义类型用户定义类型一种编程语言具有内置类型(如整数、布尔值、字符串等)和内置过程(如用于输入和输出)。用户可以定义他们自己的数据类型和过程——用户定义的类型。除了编程语言所提供的基本数据类型和对象数据类型,程序员可定义自己的数据类型数据抽象数据抽象:由一组操作所刻画的数据类型传统的类型定义:关注数据的具体表示抽象类型:强调“作用于...
2020-05-01 22:58:55
686
原创 哈尔滨工业大学软件构造课程笔记第三章第二节
3.2 设计规约1.编程语言中的函数和方法[…] NAME (TYPE NAME, TYPE NAME) { STATEMENTS } To call: NAME(arg1, arg2);参数类型是否匹配,在静态类型检查阶段完成public static TYPE NAME() { STATEMENTS; return EXPRESSION; }void means “n...
2020-04-20 23:01:03
528
原创 哈尔滨工业大学软件构造课程笔记第三章第一节
3.1 数据类型与类型检验1.编程语言中的数据类型类型和变量类型是一组值,以及可以对这些值执行的操作。例如:boolean,int,double,string…变量:存储特定类型值的指定位置形式:类型+名称Java有几种基本类型int(对于5和-200这样的整数,但限制在±2^31范围内,或大约±20亿)long(适用于±2^63以下的较大整数)boolean(true, fa...
2020-04-19 11:46:13
370
原创 哈尔滨工业大学软件构造课程笔记第二章第二节
2.2 软件构造的过程、系统和工具1.软件建设的一般流程(1)编程建筑语言从用途上划分编程语言 (e.g., C, C++, Java, Python),建模语言(e.g., UML), 配置语言(e.g., XML),构建语言 (e.g., XML, YAML, JSON)从形态上划分基于语言学的构造语言,基于数学的形式化构造语言,基于图形的可视化构造语言<1>编程...
2020-04-18 15:28:24
471
原创 哈尔滨工业大学软件构造课程笔记第二章第一节
2.1 软件生命周期与配置管理1.软件开发生命周期(SDLC)软件开发生命周期:从无到有软件生命周期中的多个版本:从有到好2.传统软件过程模型传统的软件过程模型两种基本类型:线性过程、迭代过程已有模型:瀑布过程、增量过程、V字模型、原型过程、螺旋模型选择合适的过程模型的依据:1.用户参与程度有多大?–适应变化的能力2.开发效率/管理复杂度3.开发出的软件的质量瀑布过程(连续...
2020-04-15 12:02:12
385
原创 哈尔滨工业大学软件构造课程笔记第六章第五节
6.5 软件测试与测试优先的编程一、软件测试软件测试的作用:提高软件质量的重要手段;确认是否达到可用级别(用户需求);关注系统的某一侧面的质量特性。即使是最好的测试,也无法达到100%的无错误。残留缺陷率:1-10缺陷/kloc:典型的工业软件;0.1-1缺陷/kloc:高质量验证,Java库可以达到这种程度的正确性;0.1缺陷/kloc:最好的、安全关键的验证。NASA和Pr...
2020-03-18 12:00:19
270
原创 哈尔滨工业大学软件构造课程学习笔记第一章第一节
1.1 软件构造过程中的多维度视图一、多维软件视图1.构建阶段构建阶段:观点—>需求—>设计—>代码—>可安装/可执行包代码角度:源代码——源代码的逻辑组织方式通过基本程序块,如函数、类、方法、接口等等,以及它们之间的依赖关系(代码的逻辑组织)成分角度:架构——源代码在物理上是如何的按文件、目录、包、库和依赖项组织 (代码的物理组织)时刻角度:特定时刻的软...
2020-03-12 19:46:53
444
原创 程序人生-Hello’s P2P
计算机系统大作业题 目 程序人生-Hello’s P2P 专 业 计算机科学与技术学 号 1180300317班 级 1803003学 生 杨铭涛 指 导 教 师 史先俊计算机科学与技术学院2019年12月摘 要“Hello world!”应该是每一个学习写程序的人写...
2020-01-05 23:33:33
198
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人