读书笔记
文章平均质量分 51
belllsky
这个作者很懒,什么都没留下…
展开
-
2015071902 - 测试驱动开发 - 01
测试驱动开发(TDD),经典步骤是: 1.写测试用例; 2.让测试用例编译通过; 3.运行所有的测试用例,新添加的测试用例不通过; 4.让新添加的测试用例快速通过; 5.对新添加的功能进行重构,代码和设计上的重构. 注意:测试驱动开发,第二版白某某翻译的实在太烂,如果想看可以看第一版的翻译,但是第一版已经不再出售了,可以上网下载电子版的!原创 2015-07-19 22:59:01 · 360 阅读 · 0 评论 -
2015070409 - EffactiveJava笔记 - 第61条 抛出与抽象对应的异常(1)
20150704 星期六 北京 如果方法抛出的异常与它执行任务没有明显联系,这种情况令人不知所措.情景就是方法传递由底层抽象抛出的异常,就会发生此情况. 结果就是使人困惑,并且污染高层的API.如果高层API在后续版本发生改变,所抛出的异常可能随之变化,潜在地破坏现有的客户端程序. 如何处理上述情景下的问题呢? 更高层的而实现应该捕获低层的异常,同时抛出可原创 2015-07-04 18:36:47 · 389 阅读 · 0 评论 -
2015070302 - EffactiveJava笔记 - 第52条 通过接口引用对象(2)
如果没有合适的接口存在,完全可以使用类而不是接口来引用对象. (即可以使用父类,基类做引用对象,和接口做引用对象的本质是相同的,都是利用多态,达到方便扩展的目的) 1.值类,比如String和BigInteger.记住值类很少会用多个实现编写,它们通常是final,并且很少有对应的接口.使用值类做参数,变量,域或者返回值类型是再合适不过的. 2.不存在适当接口类型,对象属于原创 2015-07-03 23:17:19 · 422 阅读 · 0 评论 -
2015070408 - EffactiveJava笔记 - 第60条 优先使用标准异常
20150704 星期六 北京 专家程序员和普通程序员主要区别在于专家程序员追求并且通常能够实现高度的代码复用.代码复用的通用的规则,异常亦是. 重用现有异常最重要的好处是使你的API容易学习和使用;其次可读性好;最后是异常类越少,意味内存印记越少,装载这些类的开销少(最不重要的一点). 传递参数不合适的时候,使用IllegalArgumentException.比如需要传原创 2015-07-04 18:11:21 · 454 阅读 · 0 评论 -
2015070404 - EffactiveJava笔记 - 第57条 只对异常使用异常(1)
20150704 星期六 北京 猜测下面的代码意图是什么呢? try { int i =0; while (true){ range[i++].climb(); } } catch(ArrayIndexOutOfBoundsException e) { } 意图是遍历数组或者列表.原创 2015-07-04 11:30:58 · 439 阅读 · 0 评论 -
2015070506 - EffactiveJava笔记 - 第65条 不要忽略异常
20150705 星期日 北京 建议很明显,但是总违反.当API设计者声明方法抛出某个异常,他们等于正在试图说明某件事情,所以请不要忽略它.只需要将方法调用try语句包围起来,并好汉一个空的catch块. try{ //…… }catch(SomeException e){ //do nothing } 空的catch块会使异常达不到原创 2015-07-05 19:23:17 · 545 阅读 · 0 评论 -
2015070307 - EffactiveJava笔记 - 第55条 谨慎地进行优化(3)
3.要考虑API设计决策的性能后果 使公有类型成为可变类型,会导致太多不必要的保护性拷贝(看39条,但是没搞懂). 在适合使用组合模式的公有类中使用继承,会把这个类与它的父类永远地捆绑在一起,从而人为地限制子类的性能. 在API中使用实现类型而不是接口,会把你约束在具体的实现上,即使将来更快地实现你也无法使用. 幸运地是,好的API设计会带来好的性能.原创 2015-07-04 00:32:39 · 391 阅读 · 0 评论 -
2015070306 - EffactiveJava笔记 - 第55条 谨慎地进行优化(2)
讲诉优化的深刻真理:优化弊大于利,特别是不成熟的优化! 在优化过程中可能既不快速,又不正确,而且不容易修正. 1.不要因为性能而牺牲合理的结构.要努力编写好的程序而非快的程序.如果好的程序不够快,它的结构将会使它可以得到优化.好的程序体现在信息隐藏原则(个人认为封装性好):只要有可能,他们会把设计决策集中在某个模块中.根据单一职责原则,可以改变单个决策,而不会影原创 2015-07-04 00:20:39 · 552 阅读 · 0 评论 -
2015070301 - EffactiveJava笔记 - 第52条 通过接口引用对象(1)
20150703 星期五 早晨 第40条建议,应该使用接口而不是类作为参数的类型; 一般而言,应该优先使用接口而不是类来引用对象.如果有合适的接口类型,那么参数,返回值,变量,域来说,都应该使用接口类型声明. 只有当利用构造器创建某个对象的时候,才真正需要利用对象的类. 比如声明Vector类,它是List接口的实现,在声明变量的时候应该养成这样的习惯. L原创 2015-07-03 22:13:18 · 354 阅读 · 0 评论 -
2015070412 - EffactiveJava笔记 - 第62条 每个抛出的异常都要有文档
20150704 星期六 北京 花时间仔细为每个方法抛出的异常建立文档非常重要,让开发人员了解错误可以避免犯错误. 始终要单独地声明检查时异常(checked exception),并且使用javadoc的@throws标记,准确地记录下抛出每个异常的条件. 如果方法抛出多个异常类,不要使用它抛出异常类的父类.永远不要声明方法”throwsException”,或更糟糕的声原创 2015-07-04 21:36:58 · 585 阅读 · 0 评论 -
2015070411 - EffactiveJava笔记 - 第61条 抛出与抽象对应的异常(3)
尽管异常转换与不加选择地从低层传递异常的做法有所改进,但是不能滥用.如有可能,处理来自低层异常的最好做法是,在调用低层方法之前,确定参数的有效性,确保会成功执行,从而避免异常. 如果无法避免低层异常,次选方案是,让更高层来悄悄绕过这些异常,从而将高层方法的调用与低层的问题隔离开来.这种情况,可以用某种恰当的记录机制将异常记录下来.有利于管理员调查问题,同时将客户端代码和最终用户与问题隔离开原创 2015-07-04 19:01:37 · 472 阅读 · 0 评论 -
2015070305 - EffactiveJava笔记 - 第55条 谨慎地进行优化(1)
20150703 星期五 北京 优化三条格言,请深刻体会! 1.很多计算上的过失都归咎于效率(没有必要达到的效率),而不是任何其他的原因,包括盲目地做傻事. 2.不要去计较效率上的小小得失,在97%的情况下,不成熟的优化才是一切问题的根源 3.优化方面我们遵守两条原则: a.不要进行优化 b.针对于专家,还是不要进行优化,也就是说,在你还原创 2015-07-04 00:07:27 · 486 阅读 · 0 评论 -
2015070406 - EffactiveJava笔记 - 第58条 异常使用原则
20150704 星期六 北京 Java程序提供三种可抛出结果,检查异常(checked Exception),运行时异常(RuntimeException),和错误(error). 那么什么情景下使用不同的异常呢? 使用checked Exception的原则是:如果期望调用者能够恰当地恢复(本身程序继续正常运行). 抛出checked Exception,强迫A原创 2015-07-04 12:41:59 · 430 阅读 · 0 评论 -
2015070402 - EffactiveJava笔记 - 第56条 遵守普遍命名规范(1)
20150704 星期六 北京 Java建立一套完整的命名规范,字面的和语法的规范. 包的命名应该是层次的,使用句号”.”分隔每个部分.任何将你组织之外的使用的包,命名规范是你组织的internet域名开头,并且顶级域名放在前面.例如edu.cmu,com.sun等.标准类库和可选包以java或者javax开头,这属于规则的例外. 但是用户创建的包决不能以java或者jav原创 2015-07-04 10:24:03 · 424 阅读 · 0 评论 -
2015070410 - EffactiveJava笔记 - 第61条 抛出与抽象对应的异常(2)
异常链,是异常转化特殊形式. 使用情景:如果低层异常对于调试导致高层异常的问题有帮助,那么就使用异常链.将低层的异常原因传给高层异常,高层异常提供获取方法来获取低层的异常. try { //use low-levelabstraction to do our bidding} catch (LowerLevelException cause) { throw n原创 2015-07-04 18:52:17 · 464 阅读 · 0 评论 -
2015071402 - 淘宝技术这十年
我用将近两天看完. 对于从事网站的开发人员,这本书可读性不是很大,然而对于从软件开发转向网站开发的开发人员,或者是小网站发展成大网站而言,这本书的可读性蛮强的! 因为业务不断拓展,导致技术上必须跟进,以业务促进技术的不断发展,一步一步来看淘宝的发展! 牛人,一定有值得你学习的地方,所以他才会很牛的! 这本书值得读上三遍!原创 2015-07-14 23:46:31 · 398 阅读 · 0 评论 -
2015070701 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(3)
成员属性绝对不能公有的.为什么呢?如果此属性是非final,或者执行可变对象的final引用,一旦使属性公开,就等于放弃了对存储在这个属性中数据进行限制的能力,放弃了强制此属性不可变的能力;当属性被修改时,失去了对它采取任何行动的能力. 因此包含共有可变属性的类不是线程安全的,即使属性是final的,并且引用不可变对象.当属性变成公有,就放弃了切换到”一种新的内部数据表示法”的灵活性.原创 2015-07-07 06:18:17 · 384 阅读 · 0 评论 -
2015070702 - EffactiveJava笔记 - 第14条 共有类使用访问方法而非共有属性
20150707 星期二 北京 对于可变类来说,应用私有属性和公有set和get方法.从而保持封装数据. 如果类在它所在的包的外部进行访问,那么提供访问方法,以保留将来改变该类的内部表示法的灵活性. 如果共有类暴露它的属性,要想将来改变其内部表示法是不可能的,因为共有类的客户端代码已经遍布各处.然而如果类是包级私有,或者是内部类,直接暴露它的属性并没有本质上的错误.为什么原创 2015-07-07 06:42:08 · 518 阅读 · 0 评论 -
2015070705 - EffactiveJava笔记 - 第15条 使可变性最小(2)
函数做法,不改变对象本身; 过程或命令做法,改变对象本身数据. 不可变对象比较简单,因为其只有初始化时的状态,如果你能确保所有的构造器都建立这个类的约束关系,就可以确保约束关系在对象整个生命过程中不变. 不可变对象本质上是线程安全的,它们不要求同步,不可变对象可以被自由地共享.鼓励客户端尽可能重用现有对象. 如何做到这一点呢? 1.频繁用到的值,提供公有静态原创 2015-07-07 08:17:24 · 320 阅读 · 0 评论 -
2015070704 - EffactiveJava笔记 - 第15条 使可变性最小(1)
20150707 星期二 北京 不可变类只是对象不能被修改的类,每个对象包含的信息必须在类创建实例的时候提供,并且在对象生命周期内不变. 为什么要存在不可变的类呢?不可变的类比可变类更加容易设计,实现和使用,不易出错,更加安全. 使类不可变遵循五条原则: 1.不要提供修改对象属性的方法.(只有get没有set) 2.保证类不会被扩展.目的在于防止原创 2015-07-07 07:43:10 · 446 阅读 · 0 评论 -
2015070601 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(2)
公有类的属性,访问级别从包级变成保护级别(protected,private),增加可访问性的同时,受保护成员变成API一部分,必须永远得到支持.导出的类的受保护成员代表该类某个实现细节的公开承诺. 有条规则限制降低方法的可访问性,子类重写父类的方法,子类方法的可访问级别不允许低于父类方法的访问级别.目的在于确保任何可使用父类对象的地方都可以使用子类的对象 当类实现接口,接口的方法原创 2015-07-06 08:25:56 · 328 阅读 · 0 评论 -
2015070405 - EffactiveJava笔记 - 第57条 只对异常使用异常(2)
异常只应该使用在异常情况下,它们永远不应该用于正常的控制流中.对API设计的启发. 设计良好的API不应该强迫它的客户端为了正常控制流而使用异常. 如果类具有”状态相关”的方法,即只有特定的不可预知的条件下才可以被调用的方法.那么这个类一般具有单独”状态测试”的方法,即指示是否可以调用这个状态的方法. 比如Iterator接口有状态相关的next方法,和对应状态的hasNe原创 2015-07-04 11:55:30 · 416 阅读 · 0 评论 -
2015070505 - EffactiveJava笔记 - 第64条 努力保持失败原子性
20150705 星期日 北京 当对象抛出异常后,通常期望这个对象仍然保持在一种定义良好的可用状态,即使异常发生在执行某个操作的过程中间.这对于检查时异常尤为重要.因为调用者期望能从异常中进行恢复. 一般而言,失败的方法调用应该使对象保持在被调用之前的状态.具有这种属性的方法被称为具有是失败原子性. 如何实现失败原子性呢? 第一种最简单的方法设计不可变对象,如果对象原创 2015-07-05 19:05:53 · 672 阅读 · 0 评论 -
2015070407 - EffactiveJava笔记 - 第59条 避免不必要地使用受检异常
20150704 星期六 北京 使用异常可以增加可靠性,但是过分使用异常就会导致问题不断. (异常的设计原则是在不正常的的情况下处理,如果可以把不正常的情况改变为正常思路下的部分,那么可以减少异常处理.不正常是特例,正常才是主流.) 一个方法抛出过多受检异常,调用此方法就必须处理这些异常或者抛出继续传播,不论何种处理,都增加程序开发的负担. 如果方法只抛出一个受检原创 2015-07-04 13:27:54 · 458 阅读 · 0 评论 -
2015070401 - EffactiveJava笔记 - 第55条 谨慎地进行优化(4)
谨慎地设计程序后,有清晰,简明,结构良好的实现,那么可以考虑优化问题. 在每次视图做优化前后,要对性能进行评估.可能惊讶的发现优化前后对性能没有影响,或者性能下降. 原因在于什么呢?要猜出程序把时间花费在哪些地方并不容易.你认为程序慢的地方可能并没有问题.此刻优化等于浪费时间. 大多数人认为,程序把80%的时间花费在20%的代码上. 性能剖析工具有助于原创 2015-07-04 09:22:51 · 391 阅读 · 0 评论 -
2015070503 - EffactiveJava笔记 - 第63条 细节消息中捕获失败的信息
20150704 星期六 北京 程序为捕获的异常而失败,系统会自动打印该异常的堆栈轨迹,在堆栈中包含该异常的字符串表示法(它的toString方法结果,包含类名,消息细节) 因此对于程序开发者或者运维人员,异常类型的toString方法应该尽可能返回有关联失败原因的信息,即异常的细节消息应该捕获住失败,便于以后分析. 为了捕获失败,异常的细节信息应该包括所有”对该异常有贡献原创 2015-07-05 09:25:27 · 528 阅读 · 0 评论 -
2015070403 - EffactiveJava笔记 - 第56条 遵守普遍命名规范(2)
语法命名规范,对于包没有语法命名规范. 类通常用一个名字或者名词短语.比如,Timer,BufferWriter 接口和类类似,比如Collection,Comparator或者以-able或者-ible结尾的形容词来命名,比如Runneable,Iterable,或者Accessible 执行动作的方法通常使用动词或者动词短语命名,比如append或者drawImage.原创 2015-07-04 10:56:15 · 402 阅读 · 0 评论 -
2015070304 - EffactiveJava笔记 - 第54条 谨慎使用本地方法
20150703 星期五 北京 本地方法,是指本地程序设计语言(c,或者c++)来编写的特殊方法. 本地方法在本地语言中可移植性任意的计算任务,并且返回到java程序语言. 为什么说谨慎使用本地方法? 个人认为,在window开发调用本地方法,跨平台在mac上开发那么本地方法是否能用,再到linux系统中,本地方法还能用不?所以本地方法制约跨平台使用的能力.可原创 2015-07-04 00:01:20 · 581 阅读 · 0 评论 -
2015070303 - EffactiveJava笔记 - 第53条 接口优于反射机制
20150703 星期五 北京 反射机制,提供通过运行程序访问关于已经装载的类的信息的能力. 反射机制,允许一个类使用另外一个类,即使当前者被编译的时候后者还根本不存在. 反射付出的代价: 1.丧失了编译时类型检查的好处.包括异常检查,程序调用不存在的类或者不可访问的方法,在运行时会失败.除非采取特殊的预防措施. 2.执行反射访问所需要的代码非常笨拙和冗长.原创 2015-07-03 23:47:57 · 575 阅读 · 0 评论 -
2015062906 - EffactiveJava笔记 - 第46条 foreach优先传统for循环(2)
对多个集合嵌套迭代,for-each比for优势更明显. enum Suit { CLUB,DIAMOND,HEART,SPADE } enum Rank { ACE, DEUCE, THREE, FORE, FIVE, SIX,SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING} class Card { pu原创 2015-06-29 23:44:42 · 307 阅读 · 0 评论 -
2015062706 - EffactiveJava笔记 - 第39条 必要时进行保护性拷贝
第39条 必要时进行保护性拷贝 --------->01.保护性拷贝发生的背景 假设类的客户端会及其所能地破坏类的约束条件,因此你必须保护性地设计程序.实际上,只有当有人试图破坏系统的安全性时,才可能发生这种情况. 更加可能的是,对你的API产生误解的程序员,导致各种不可预期的行为,那么只好由类处理.无论何种情况,编写一些面对客户端的不良行为时仍能保持健壮性的类,这是非常原创 2015-06-27 21:15:59 · 332 阅读 · 0 评论 -
2015062805 - EffactiveJava笔记 - 第41条 慎用重载(1)
20150628 星期日 北京 下面程序的意图是好的,它视图根据一个集合collection是Set,List,还是其他集合类型,进行分类. import java.math.BigInteger; import java.util.ArrayList; import java.util.Collection; import java.util.HashMa原创 2015-06-28 10:11:18 · 382 阅读 · 0 评论 -
2015062812 - EffactiveJava笔记 - 第45条 将局部变量的作用域最小化
第八章 通用程序设计 本章讨论Java语言的具体细节,讨论局部变量的处理,控制结构,类库的用法,各种数据类型的用法,以及两种不是语言本身提供的机制(反射机制和本地方法),最后讨论优化和命名惯例. 第45条 将局部变量的作用域最小化 本条目和第13条(使类和成员的可访问性最小化)本质上是类似的,将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并且降低出错的可能性.原创 2015-06-28 22:50:33 · 544 阅读 · 0 评论 -
2015062808 - EffactiveJava笔记 - 第43条 返回零长度的数组或者集合,而非null
20150628 星期日 北京 对下面编程情景是否很熟悉呢? privatefinal List cheeseInStock = ...; public Cheese[] getCheeses () { if(cheeseInStock.size() == 0) { return null; }原创 2015-06-28 16:12:04 · 472 阅读 · 0 评论 -
2015062807 - EffactiveJava笔记 - 第42条 慎用可变参数
第42条 慎用可变参数 20150628 星期日 北京 java1.5版本之后,增加可变参数的方法,一般称为可匹配不同长度的变量的方法.可变参数方法接受0个或者多个指定类型的参数. 可变参数机制通过先创建一个数组,数组的大小在调用位置所传递的参数数量,然后将参数值传到数组中,最后将数组传给方法. ------>01.0个或者多个指定类型的参数 例子[复习使用原创 2015-06-28 14:44:25 · 324 阅读 · 0 评论 -
2015062806 - EffactiveJava笔记 - 第41条 慎用重载(2)
----->02.基本类型和包装类导致的重载问题 java1.5之前,所有基本类型根本不同于所有的引用类型,但是引入自动拆箱和装箱,导致了真正的麻烦. import java.util.*; public class SetList { publicstatic void main(String[] args) {原创 2015-06-28 11:55:51 · 475 阅读 · 0 评论 -
2015062705 - EffactiveJava笔记 - 第38条 检查参数的有效性
第七章 方法 主要涉及方法的以下方面:如何处理参数和返回值,如何设计方法签名,如何为方法编写文档.适合普通方法和构造方法. 焦点集中在可用性,健壮性和灵活性上. 第38条 检查参数的有效性 20150627 星期六 北京 ----->01. 参数检查的必要性 绝大多数方法和构造方法对于传递给它们的参数都会有某些限制,比如对象引用不能为null原创 2015-06-27 18:48:13 · 832 阅读 · 0 评论 -
2015062802 - EffactiveJava笔记 - 第40条 谨慎设计方法签名
第40条 谨慎设计方法签名 20150628 星期日 北京 本条目是若干API设计技巧的总结,这些设计技巧有助于使你的API更容易学习和使用,并且比较不容易出错. 谨慎地选择方法名称.方法的名称应该始终遵循标准的命名习惯.首要目标应该是选择易于理解的,并且与同一个包中的其他名称风格一致的名称;第二个目标应该是选择与大众认可的名称(如果存在的话)相一致的名称.如果还有疑问,原创 2015-06-28 06:23:08 · 537 阅读 · 0 评论 -
2015062206 - 编程大师访谈录(4)
20150412 周日 北京 04.加里.基尔代尔 学习的收获是什么? 解决问题以及如何学习.(说的太对了,如果从小学习输入的观念就是这样,那么一定会学以致用,理论联系实际的) 20150412 周日 北京 03.约翰.沃诺克 你写代码的方式? 动手做任何事情之前,我哦都会深思熟虑.但是一旦开始做事,我就会把它扔到一边.程序员看待一段原创 2015-06-22 22:27:45 · 480 阅读 · 0 评论 -
2015062203 - 编程大师访谈录(1)
编程大师访谈录 20150418 周六 南京 19.迈克尔.霍利 为什么外国的程序人员都是多才多艺生活地如此多姿多彩,而我们却累得如同一只死狗呢? 20150418 周六 南京 18.加隆.兰尼尔 25岁兰尼尔创办自己的公司,25岁的我才大二无所事事,浑浑噩噩. 优秀的人会有前瞻性的想法,大胆的想象和预言.一直在想,计算机原创 2015-06-22 22:17:32 · 529 阅读 · 0 评论