06 2018 档案
摘要:Outline 动态规划原理 编号动态规划:最大不下降子序列 划分动态规划:矩阵链乘、凸多边形三角剖分 数轴动态规划:0-1背包 前缀动态规划:最长公共子序列 树形动态规划:最优二分搜索树 Notes ## 动态规划原理 基本思想:问题的最优解如果可以由子问题的最优解推导得到,则可以先求解子问题的最
阅读全文
摘要:为了方便阅读和复习,转载至此,原地址:温布利往事的博客 阅读目录 一、Comparable简介 二、Comparator简介 三、Comparable和Comparator区别比较 为了方便阅读和复习,转载至此,原地址:温布利往事的博客 阅读目录 一、Comparable简介 二、Comparato
阅读全文
摘要:【考点 Equals】 ==是引用等价性 ;而equals()是对象等价性。 == 比较的是索引。更准确的说,它测试的是指向相等(referential equality)。如果两个索引指向同一块存储区域,那它们就是==的。对于我们之前提到过的快照图来说,==就意味着它们的箭头指向同一个对象。 eq
阅读全文
摘要:设计模式 在课程中,我们陆续学习了全部的24种设计模式,在实验中也用到了工厂模式、抽象工厂模式、策略模式等内容;在课程的考试中,我们也将使用制定的设计模式对代码进行优化,为了更好的理解设计模式,转发本篇斯认为质量较好的博文,希望能对设计模式有更明晰的认识。 转自: 设计模式大杂烩(24种设计模式的总
阅读全文
摘要:VCS SCM Git的不同工作区域,版本分支、版本图
阅读全文
摘要:Outline 分治思想和递归表达式 大整数乘法 矩阵乘法的Strassen算法 快速傅里叶变化 基于分治的排序 merge-sort排序 快速排序 排序的下界问题 中位数和顺序统计量 最邻近点对 凸包 merge-sort排序 快速排序 排序的下界问题 Notes ## 分治思想和递归表达式 【分
阅读全文
摘要:Message passing
进程和线程
线程的创建和启动,runable
时间分片、交错执行、竞争条件
线程的休眠、中断
线程安全的四种策略
约束(Confinement)
不变性
使用线程安全的数据类型
同步与锁
死锁
以注释的形式撰写线程安全策略
阅读全文
摘要:Java代码调优的设计模式:
singleton, prototype/cloneable,
flyweight, pool
常见的Java I/O方法
阅读全文
摘要:第八章第二节 动态程序分析方法与工具 Outline Java性能调优工具: jstat jmap jhat Vistual VM MAT Memory dump Stack trace jstat jmap jhat Vistual VM MAT Notes ## Java性能调优工具 Jstat
阅读全文
摘要:第八章第一节 软件构造性能的度量原理 本章是课程覆盖的第5个质量指标:时空性能 这是大家最熟悉的指标,虽然很重要,但并非软件构造中最重要的指标,当其他指标得以优化之后,再去考虑性能问题。 Outline 性能度量指标 存储性能 内存管理: 对象管理模型:静态、堆、栈 内存管理模型: Java垃圾回收
阅读全文
摘要:求解递归式的方法 【代入法】 代入法求解分为两步: 猜测解的形式 用数学归纳法求出解的常数C,并证明正确性,关键步骤是用猜测的解代入到递归式中。 做出好的猜测(没有一般方法,只能凭经验) 与见过的解类似,则猜测之。 先证较宽松的上、下界,减小猜测范围。我们可以从下界Ω(n)开始,上界O(n^2),然
阅读全文
摘要:第七章第五节 测试与测试优先编程 确保程序正确性/健壮性的最普遍的手段:测试 设计测试用例 用JUnit写测试程序 自动化测试过程 设计测试用例 用JUnit写测试程序 自动化测试过程 Outline 测试和测试优先编程 黑盒测试 等价类划分 边界值分析 代码覆盖度 用注释形式撰写测试策略 JUni
阅读全文
摘要:第七章第四节 调试 防不胜防的bug引入了代码,如何发现并消除之? Outline 什么是bug 调试的基本过程 调试的技术与工具 Notes ## 什么是bug bug即程序中的错误,导致程序以非预期或未预料到的方式执行。 一个包含大量bug和/或严重干扰其功能的bug的程序被称为buggy。 报
阅读全文
摘要:第七章第三节 断言和防御性编程 本节:第2种技术——断言、防御式编程 Outline 断言 什么是断言 断言的应用场景 防御式编程(不是考点,不加叙述) 什么是断言 断言的应用场景 Notes: ## 断言 【什么是断言】 作用:允许程序在运行时检查自己,测试有关程序逻辑的假设,如前置条件、后置条件
阅读全文
摘要:第七章第二节 错误与异常处理 本节关注:Java中错误和异常处理的典 型技术——把原理落实到代码上! Outline: Java中的错误和异常(java.lang.throwable) 异常 Runtime异常与其他异常(Exception) Checked异常和unchecked异常 checke
阅读全文
摘要:第七章第一节 健壮性和正确性的区别 第七章:进入软件构造最关键的质量特性 ——健壮性和正确性。 本节在1-2节的基础上,重申了Robustness and Correctness的重要性,澄清了二者之 间的差异,并指明了在软件构造中处理二 者的典型技术(防御式编程、异常处理、 测试、调试等) Out
阅读全文
摘要:第六章第三节 面向可维护的构造技术 学了这么多OO设计模式,不外乎都是 delegation + subtying,万变不离其宗。 除了OO,还有什么其他能够提升软件可维护性的构造技术?——本节从委派+子类型跳出来,学习以下三个方面: (1) 基于状态的构造技术 (2) 表驱动的构造技术 (3) 基
阅读全文
摘要:第六章第二节 可维护的设计模式 Outline 创造性模式:Creational patterns 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern) 结构化模式:Structural patte
阅读全文
摘要:第六章第一节 可维护性的度量与构造原则 本章面向另一个质量指标:可维护性——软件发生变化时,是否可以以很小的代价适应变化? 本节是宏观介绍:(1)什么是软件维护;(2)可维护性如何度量;(3)实现高可维护性的设计原则——很抽象。 Outline 软件的维护和演化 可维护性的常见度量指标 聚合度与耦合
阅读全文
摘要:第五章第三节 可复用的设计模式 除了Framework,5-2节所讨论的其他技术都过于“基础”和“细小”,有没有办法做更大规模的复用设计? 本节将介绍几种典型的“面向复用”的设计模式,设计模式更强调多个类/对象之间的关系和交互过程—比接口/类复用的粒度更大。 Outline 结构型模式:Struct
阅读全文
摘要:第五章第二节 设计可复用的软件 5-1节学习了可复用的层次、形态、表现;本节从类、API、框架三个层面学习如何设计可复用软件实体的具体技术。 Outline 设计可复用的类——LSP 行为子结构 协变与逆变 Liskov替换原则(LSP) 各种应用中的LSP 数组是协变的 泛型中的LSP 为了解决类
阅读全文
摘要:第五章第一节 可复用性的度量、形态和外部观察 本节探讨可复用软件的形态与特征,下一节学习“如何构造”。 Outline 什么是软件复用 可复用实现的级别 源代码级别的复用 模块级别的复用:类、抽象类、接口 库级别的复用:API、包 系统级别的复用:框架 对可复用性的外部观察 白盒框架和黑盒框架 源代
阅读全文
摘要:第三章第五节 ADT和OOP中的等价性 在很多场景下,需要判定两个对象是否 “相等”,例如:判断某个Collection 中是否包含特定元素。 ==和equals()有和区别?如何为自定义 ADT正确实现equals()? OutLine 等价性equals() 和 == equals()的判断方法
阅读全文
摘要:第三章第四节 面向对象编程OOP 本节讲学习ADT的具体实现技术:OOP Outline OOP的基本概念 对象 类 接口 抽象类 OOP的不同特征 封装 继承与重写(override) 多态与重载(overload) 重写与重载的区别 泛型 设计好的类 对象 类 接口 抽象类 封装 继承与重写(o
阅读全文
摘要:第三章第三节 抽象数据型(ADT) 3-1节研究了“数据类型”及其特性 ; 3-2节研究了方法和操作的“规约”及其特性;在本节中,我们将数据和操作复合起来,构成ADT,学习ADT的核心特征,以及如何设计“好的”ADT。 Outline ADT及其四种类型 ADT的基本概念 ADT的四种类型 设计一个
阅读全文
摘要:第三章第二节 软件规约 这一节我们转向关注“方法/函数/操作”是如何定义的,即讨论编程中的动词,规约。 Outline 一个完整的方法 什么是设计规约,我们为什么需要他 行为等价性 规约的结构:前置条件与后置条件 规约的结构 可变方法的规约 规约的评价 规约的确定性 规约的陈述性 规约的强度 如何设
阅读全文