- 博客(30)
- 收藏
- 关注
原创 java中的线程安全(Threadsafe)及其四种策略
1. 线程安全: 线程之间存在“竞争条件”,作用于同一个mutable数据上的多个线程,彼此之间存在对该数据的访问竞争并导致interleaving,导致post-condition可能被违反,这是不安全的。 线程安全:ADT或方法在多线程中要执行正确。 要做到:不违反spec,保持RI。与多少处理器,如何调度线程无关,不需要在spec中强制要求client满足某种“线程安...
2018-06-22 11:05:57
6392
原创 设计模式(四):代码调优的设计模式
1. 概述: 本文将介绍四种面向代码调优的设计模式: (1)Singleton Pattern(单例模式) (2)Flyweight Pattern(轻量模式) (3)Prototype Pattern(原型模式) (4)Object Pool Pattern(对象池模式)2. Singleton Pattern(单例模式) 某些类在应用运行期间只需...
2018-06-21 22:12:49
398
原创 黑盒测试用例的设计:等价类划分与边界值分析
1. 白盒测试:对程序内部代码结构的测试 黑盒测试:对程序外部表现出来的行为的测试 用于检查代码的功能,不关心内部实现细节。 即检查程序是否符合规约。 下面介绍用例设计的两种方法: 等价类划分与边界值分析。2. 等价类划分定义:基于等价类划分的测试,将被测函数的输入域划分为等价类,从等价类中导...
2018-06-21 10:37:37
2436
原创 java中的Error 与 Exception
1. 综述 java中有java.lang.Throwable,以及其子类 java.lang.Exception和java.lang.Error Error:描述内部系统错误或资源枯竭的状态。(例如VirtualMachineError, LinkageError)程序员通常对此无能为力,一旦发生,想办法令其优雅地结束 Exception:自己程序...
2018-06-21 00:01:26
335
原创 设计模式(二):基于状态的设计模式:State与Memento
1. 基于状态的编程: 使用有限状态机来定义程序的行为、使用状态来控制程序的执行。 根据当前状态,决定下一 步要执行什么操作、执行操作之后要转移到什么新的状态 。2. State Pattern状态模式(一个行为类模式) 思想: 最好不要使用if/else结构在ADT内部实现状态转换(考虑将来的扩展与修改) 使用delegation,将状态转换的行为委...
2018-06-20 16:25:29
602
原创 设计模式(一)面向可维护性的,基于委派和继承的设计模式
1. 概述(1)Creational patterns(创建型模式) a. Factory method pattern(工厂方法模式) b. Abstract factory pattern(抽象工厂模式) c. Builder pattern(构造器模式)(2)Structural patterns(结构型模式) a. Bridge pat...
2018-06-20 15:56:05
565
原创 面向对象的五个设计原则:SOLID
1. SOLID(1)SRP(The Single Responsibility Principle)单一责任原则(2)OCP(The Open-Closed Principle)开放-封闭原则(3)LSP(The Liskov Substitution Principle)Liskov替换原则(4)ISP (The Interface Segregation Principle)接口聚合原...
2018-06-19 15:02:27
1507
原创 设计模式(三):面向复用的设计模式
1. 设计模式的分类: (1)Creational patterns(创建型模式) 关注于对象的创建 (2)Structural patterns(结构型模式) 处理类和对象的组成。 本文介绍Adapter,Decorator,Facade三种关于可复用的模式。 (3)Behavioral patterns(...
2018-06-19 13:58:10
1582
原创 复用形式之:委派(delegation)
1. 委派/委托:一个对象请求另一个对象的功能 委派是复用的一种常见形式 一个简单例子: 正如一下所示: Receiver 对象将操作委派给Delegate对象执行。 Client调用Receiver,而不使用Delegate对象 2. 利用委派可以扩展功能: 例如:我们要建立一个LoggingList,功能与...
2018-06-18 20:45:14
2178
原创 Liskov Substitution Principle (LSP)与子类型多态
1. 子类型多态: 客户端可用统一的方式处理同类型的对象 2. LSP:例如: (1)java编译器的规则(静态类型检查): a. 子类型可以增加方法,但不可删 b. 子类型需要实现抽象类型中的所有未实现方法 c. 子类型中重写的方法必须有相同或子类型的返回值 d. 子类型中重写的方法必须使用同样类型的参数 ...
2018-06-18 15:46:23
611
原创 java的参数多态与泛型
1. 类型变量:是一个无条件的标识符 泛型类:其定义中包含了类型变量2. 如果一个接口/方法声明了类型变量,则其是泛型的。3. 类型变量位于<>中,方便识别: 例如: 类型变量也是一种特殊的参数。 例1: 例2: 泛型只出现在编译阶段,运行时是没有泛型的 4. 泛型接口的两种...
2018-06-18 13:32:35
2328
原创 Overriding与Overloading(重写与重载)
1. (Override)重写的函数:在继承时使用,需要完全同样的signature 在实际执行时调用哪个方法,在run-time时决定,因此其是动态的 若在子类中调用父类的方法,可采用super关键字2. (Overload)重载:多个方法具有相同的名字,但有不同的参数列表或返回值类型 方便client调用,client可用不同的参数列表,...
2018-06-18 13:18:26
672
原创 ADT中的等价性:== VS equals,equals()与hashCode()的重写
1. ADT是对数据的抽象,体现为一组对数据的操作 抽象函数AF:内部表示->外部表示 因此要基于抽象函数AF定义ADT的等价操作2. ADT的等价性: (1)现实中每个对象实体都是独特的 (2)所以无法完全相等,但有“相似性” (3)而在数学中,绝对相等是存在的3. 保证等价性的三条方式: (1)通过AF:AF若映射到同样的...
2018-06-18 13:02:50
351
原创 ADT的表示独立性,测试ADT的方法,不变量,RI与AF
1. 表示独立性 client使用ADT时无需考虑内部如何实现,ADT内部表示的变化不应影响外部spec与client 除非ADT的操作指明了具体的pre-condition和post-condition,否则不能改变ADT的内部 表示,因为spec规定了client和和implementer之间的契约。2. 测试ADT的方法: (1)测试creators,pr...
2018-06-17 17:37:01
2079
原创 ADT操作的四种类型
1. ADT操作分为: a. creators(构造器) b. producers(生产器),从旧的对象中创造新的对象 c. observers(观察器),获得对象中的各种属性 d. mutators(变值器),改变对象属性的方法2. 操作符的含义举例:3. creator的特征:可以为构造函数或静态函数,而静态函数又被称为工厂方法...
2018-06-17 16:20:54
2800
原创 ADT与OOP:设计规约(specifications)
1. 前言 本文章的内容: (1)理解方法的规约,理解其前置/后置条件与开发者和使用者的关系。
2018-06-17 12:42:11
939
原创 java随着遍历list,从中移除元素的方法
1. 在java中,若在使用for遍历的同时,对list进行remove操作,会由于各元素标号的变化,而跳过几个元素。 从而未达到“遍历”的目的。因此有两种解决方案: (1)从list的尾部向前遍历,这样就避免了移除元素导致的标号的变化。 (2)利用java提供的迭代器Iterator类进行遍历。 由于该迭代器...
2018-06-16 11:30:46
508
原创 Snapshot diagram:以code-level,run-time,moment的视角看软件构造
1. Snapshot diagrams: 用于描述程序运行时内部状态的快照图。 其作用: (1)便于程序员之间的交流 (2)便于刻画各类变量随时间变化的过程 (3)便于解释设计思路2. Snapshot diagrams的具体画法: (1)基本类型的值:通过常数来表示,其箭头为变量或object域对其的引用。 ...
2018-06-16 11:17:33
690
原创 java数据类型的Mutability与Immutability
1. 前言: (1) 改变一个变量、改变一个变量的值,二者有何区别? 改变一个变量:将该变量指向另一个值的存储空间。 改变一个变量的值:将该变量当前指向的值的存储空间中写入一个新的值。 (2)“Change is a necessary evil.”变化是“罪恶”,但程序不能没有变化, 要尽量避免变化,来避免程序中的副作用 (3...
2018-06-16 10:41:58
773
原创 Java中的数据类型简介
1. 数据类型: (1)基本数据类型(primitive types): 例如: (2)对象数据类型(object types): 例如: (3)其间的区别: (4)对象类型形成层次结构: 所有非基本数据类型都是由object继承而来的: 所有除了object的类都有一个父类,特别是带有extend...
2018-06-15 16:25:44
315
原创 图解Git:一个软件配置管理工具(简介)
1. Git 是由linux内核的开发者linus Torvalds于2005年发行的软件配置管理工具,用于管 理软件进化过程中的变化。 2. Git 仓库: (1)由三个部分组成: a. .git 目录:为本地的CMDB b. 工作目录:为本地的文件系统 c. 暂存区(staging are...
2018-06-15 15:37:15
9447
原创 软件配置管理SCM和版本控制系统(VCS)
1. 几个基本概念 SCM:软件配置管理,用来追踪和控制软件的变化的任务。 SCI:软件配置项,软件中发生变化的基本单元(例如:文件)。 Baseline:基线,软件持续变化过程中的“稳定时刻”(例如:对外发布的版本) CMDB:配置管理数据库,存储软件的各配置项随时间发生变化的信息+基线。 Version:版本,为软件的任一特定时刻(Monment)...
2018-06-14 21:20:59
4491
原创 软件的生命周期与开发过程模型
1. 软件开发的生命周期(SDLC)(1)From 0 to 1:从无到有 Software Development Life Cycle (SDLC): (2)From 1 to n:从有到好 软件在其生命周期中会有多个版本。2. 传统的软件开发过程模型(1)两个基本种类:线性过程(Linear)和迭代过程(Iterative) 存在的模型: ...
2018-06-14 20:19:55
3995
原创 软件构造的质量指标
1. 软件系统的质量指标包括:外部质量因素和内部质量因素。 外部质量因素:使用是否简易,速度性能是否优秀等,其影响到 的是用户。而内部质量因素影响到的是软件本身和开发者。虽然 在结果上看,只有外部质量因素重要,但外部质量因素是取决于 内部质量的。2. 外部质量因素的种类:(1) 正确性(correctness)。关注有关软件是否按照预先定义 的“规约”执行...
2018-06-14 18:04:55
722
原创 软件构造的多维度构图
1. 从三个维度看软件系统的构成。2. 从八个视图看软件系统的构成。(1)Build-time Views Build-time,即构造阶段,有以下流程 idea->requirement->design->code->installable/executable package. 包括以下视角: (a)Code-level view:即...
2018-06-13 22:56:47
480
原创 Java中创建Thread的方式-Java中Thread类的使用
1. 前言线程与进程的理解详见:https://blog.youkuaiyun.com/qq_38969070/article/details/80424079多线程处理(Multithreaded execution)是Java平台的基本特征:(1) 每个应用至少有一个线程。(2) 从程序员的角度来看,你在应用中开始时,应该只有一个线程, 称之为主线程(main t...
2018-05-23 22:02:31
3450
原创 理解Process(进程)与Thread(线程)的特点,以及之间的联系。
1. Process的一些特点:(1) 进程是一个运行程序的实例,是一个私有空间,与相同机器上的其他进程来说,是彼此隔离的。(2)
2018-05-23 21:13:32
3531
转载 各种度中心性的定义与区别
作者:何燕杰 链接:https://www.zhihu.com/question/22610633/answer/143644471 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。ps:知识储备度中心性(degree)设想一下,你在微信上有个账号,那么是不是意味着微信好友数量越多,那么你的社交圈子越广?(假设都是真实好友,不考虑微商神马的奇葩情况)比如我有20个好...
2018-04-16 15:04:56
8097
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人