07 2020 档案
摘要:6.1 Extract Method(提炼函数) 你有一段代码可以被组织在一起并独立出来。将这段代码放进一个独立函数中,并让函数名称解释该函数的用途。 动机: 如果每个函数的粒度都很小,那么函数被复用的机会就更大;这会使高层函数读起来就像一系列注释;如果函数都是细粒度,那么函数的覆写也会更容易些。
阅读全文
摘要:5.1 重构的记录格式 名称 简短概要 动机 做法 范例 5.2 寻找引用点 编译器无法找到通过反射机制而得到的引用点 5.3 这些重构手法有多成熟。 重构的基本技巧-小步前进、频繁测试-已经得到多年的实践检验。 参考资料: 《重构-改善既有代码的设计》
阅读全文
摘要:4.1 自测试代码的价值 编写代码其实只占非常小的一部分。有些时间用来决定下一步干什么,另外一些时间花在设计上,最多的时间则是用来调试。 类应该包含它们自己的测试代码。 确保所有测试都完全自动化,让它们检查自己的测试结果。 一套测试就是一个强大的bug侦测器,能够大大缩减查找bug所需要的时间。 编
阅读全文
摘要:3.1 Duplicated Code(重复代码) 3.2 Long Method(过长函数) 让小函数容易理解的真正关键在于一个好名字。 每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)命名。 条件表达式和循环常常也是提炼的信号。 3.3
阅读全文
摘要:2.1 何谓重构 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。 使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。 添加新功能时,你不应该修改既有代码,只管添加新功能。重构时就不能再添加功能,只管改进程序结构。 2.2 为何重构 重构
阅读全文
摘要:算法: 1、堆的定义:当一棵二叉树的每个结点都大于等于它的两个子节点时,它被称为堆有序。 2、堆排序可以分为两个阶段。在堆的构造阶段中,我们将原始数组重新组织安排进一个堆中;然后在下沉排序阶段,我们从堆中按递减顺序取出所有元素并得到排序结果。 复杂度: 用下沉操作由N个元素构造堆只需少于2N次比较以
阅读全文
摘要:1.1、你的态度也许倾向于尽量少修改程序,但是 如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。 1.2 重构第一步:为即将修改的代码建立一组可靠的测试环境 重构之前,首先检查自己是否有一套可靠的测试机制。这些测
阅读全文
摘要:代码很难一次尽如人意 在代码能运行后,早期是懒得修改 后来是没有时间修改 但有时间重构的话,还是能改善代码结构,提升可读性的 因此以重构这本书为主,摘抄一些点来指导重构
阅读全文
摘要:算法: 快速排序是一种分治的排序算法。它将一个数组分成两个子数组,将两部分独立地排序。快速排序和归并排序是互补的;归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序;而快速排序将数组排序的方式则是当两个子数组都有序时整个数组也就自然有序了。在第一种情况中,递归调用发生在处理整
阅读全文
摘要:算法: 要将一个数组排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来。 归并排序最吸引人的性质是它能够保证将任意长度为N的数组排序所需时间和NlogN成正比;它的主要缺点则是它所需的额外空间和N成正比。 复杂度: 对于长度为N的任意数组,自顶向下的归并排序需要1/2NlgN至NlgN次
阅读全文
摘要:算法: 希尔排序的思想是使数组中任意间隔为h的元素都是有序的。这样的数组被称为h有序数组。换句话说,一个h有序数组就是h个互相独立的有序数组编织在一起组成的一个数组。在进行排序时,如果h很大,我们就能将元素移动到很远的地方,为实现更小的h有序创造方便。用这种方式,对于任意以1结尾的h序列,我们都能够
阅读全文
摘要:算法: 像整理牌一样,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机实现中,为了给要插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。这种算法叫做插入排序。 与选择排序一样,当前索引左边的所有元素都是有序的,但它们的最终位置还不确定,为了给更小的元素腾出空间,它们可能会被移
阅读全文
摘要:算法: 1、首先,找到数组中最小的那个元素。 2、其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素,那么它就和自己交换)。 3、再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。 这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最
阅读全文
摘要:大学有门课程,数据结构 那时对这课不够重视 考研时,因为是专业课,翻书学了点 后来写程序,发现很多时候,高性能还是得靠算法来解决 对于平时工作来讲,有些算法可能是屠龙技,不过,有时候,还是得做点浪费时间的事情。
阅读全文
摘要:名称: 解释器模式(Interpreter Pattern)-类行为模式 问题: The Interpreter pattern interprets a language to define a representation for its grammar along with an interp
阅读全文
摘要:名称: 备忘录模式(Memento Pattern)-对象行为模式 问题: The Memento pattern contains a snapshot of the state of an object, so that the object can return to its original
阅读全文
摘要:名称: 访问者模式(Visitor Pattern)-对象行为模式 问题: The Visitor pattern provides a maintainable, easy way to represent an operation to be performed on the elements
阅读全文
摘要:名称: 迭代器模式(Iterator Pattern)-对象行为模式 问题: The iterator pattern provides a consistent way to sequentially access items in a collection that is independent
阅读全文