随笔分类 -  Java Tips

摘要:Hystrix最初是由Netflix的API team研发的,用于提高API的弹性和性能,2012年在公司内部广受好评。 如果你的应用是一个单独的应用,那几乎不用在意断路的问题。 但在分布式环境中,各个应用错综复杂的依赖关系,一个不稳定的服务会拖累依赖它的服务。 简单来说,就是将服务之间的访问隔离开 阅读全文
posted @ 2017-05-13 20:04 Jinkora 阅读(2276) 评论(5) 推荐(2) 编辑
摘要:延迟初始化(lazy initialization),也就是在真正被使用的时候才开始初始化的技巧。 不论是静态还是实例,都可以进行延迟初始化。 其本质是初始化开销和访问开销之间的权衡。 毕竟是一种优化技巧,使用不当会起反效果。 尤其是在多线程场景中这种反效果会尤为明显,因为我们要对这个进行延迟初始化 阅读全文
posted @ 2015-03-25 16:12 Jinkora 阅读(4015) 评论(0) 推荐(1) 编辑
摘要:给方法的参数加上限制是很常见的,比如参数代表索引时不能为负数、对于某个关键对象引用不能为null,否则会进行一些处理,比如抛出相应的异常信息。 对于这些参数限制,方法的提供者必须在文档中注明,并且在方法开头时检查参数,并在失败时提供明确的信息,即: detect errors as soon as 阅读全文
posted @ 2015-02-06 20:58 Jinkora 阅读(1954) 评论(0) 推荐(0) 编辑
摘要:于Java 1.5增加的enum type... enum type是由一组固定的常量组成的类型,比如四个季节、扑克花色。 在出现enum type之前,通常用一组int常量表示枚举类型。 比如这样: 如果只是想用作枚举,感觉这样也没什么。 但如果把上面的苹果和橘子互作比较,或者写成.... 虽合法 阅读全文
posted @ 2015-02-02 20:37 Jinkora 阅读(1700) 评论(0) 推荐(0) 编辑
摘要:自Java 1.5开始使用的泛型,泛型给人比较直观的印象是..."尖括号里写了类型我就不用检查类型也不用强转了"。 确实,那先从API的使用者的角度上想问题,泛型还有什么意义? Discover errors as soon as possible after they are made, idea 阅读全文
posted @ 2015-01-30 20:29 Jinkora 阅读(743) 评论(2) 推荐(0) 编辑
摘要:作者的原标题是<Prefer class hierarchies to tagged classes>,即用类层次优于tagged class。 我不知道有没有tagged class这么一说,其实作者指的tagged class的是一个类描述了多种抽象,可以根据某个field决定不同的实例。 下面 阅读全文
posted @ 2015-01-26 20:36 Jinkora 阅读(1333) 评论(0) 推荐(0) 编辑
摘要:不可变类,即实例不能被修改的类,实例中包含的所有信息在对象的生命周期内固定不变。 常见的比如String、基本类型的封装类、BigDecimal、BigInteger。 相对与可变类,不可变更易于设计、实现、使用,且更稳定(less prone to error)更安全。 比如,不可变类本质上就是线 阅读全文
posted @ 2015-01-26 20:33 Jinkora 阅读(630) 评论(0) 推荐(0) 编辑
摘要:继承是实现代码重用的方法之一,但使用不当则会导致诸多问题。 继承会破坏封装性,对一个具体类进行跨包访问级别的继承很危险。 即,子类依赖父类的实现细节。 如果父类的实现细节发生变化,子类则可能遭到破坏。 举个例子,扩展HashSet,记录HashSet实例创建以来一共进行了多少次添加元素的操作。 Ha 阅读全文
posted @ 2015-01-23 18:35 Jinkora 阅读(2342) 评论(0) 推荐(0) 编辑
摘要:Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例: 相对公有的构造器,静态工厂方法有以下几大优势。 优势1.静态工厂方法的名称,因此比构造器更准确地描述返回的实例。 比如BigInteger.probablePrime方法: 顺便也贴出其调用的lar 阅读全文
posted @ 2015-01-14 20:43 Jinkora 阅读(1647) 评论(0) 推荐(0) 编辑
摘要:Java有两种机制可以为某个抽象提供多种实现——Interface和abstract class。 Interface 和 abstract class, 除了比较明显的区别(也就是能否提供基本实现), 比较重要的区别是—— 接口的实现类可以处于类层次的任何一个位置,而抽象类的子类则受到这一限制。 阅读全文
posted @ 2015-01-05 20:50 Jinkora 阅读(1028) 评论(0) 推荐(1) 编辑
摘要:模块设计是否良好,有个重要的因素在于,相对外部模块是否隐藏内部数据以及实现细节。 设计良好的模块会隐藏实现细节,并将API与其实现隔离开来。 模块之间通过API进行通信,对于内部工作情况互不可见。 即,封装(encapsulation)——软件设计的基本原则之一。 为什么要封装? 通过封装可以有效地 阅读全文
posted @ 2015-01-02 21:07 Jinkora 阅读(935) 评论(0) 推荐(0) 编辑
摘要:类实现了Comparable接口就表明类的实例本身具有内在的排序关系(natural ordering)。 因此,该类可以与很多泛型算法和集合实现进行协作。 而我们之需要实现Comparable接口唯一的方法——compareTo。 以下是相关规则: 第四条并不是必须的,但值得了解一下。 一些有序结 阅读全文
posted @ 2014-12-30 20:42 Jinkora 阅读(514) 评论(0) 推荐(0) 编辑
摘要:覆盖clone时需要实现Cloneable接口,Cloneable并没有定义任何方法。 那Cloneable的意义是什么? 如果一个类实现了Clonable,Object的clone方法就可以返回该对象的逐域拷贝,否则会抛出CloneNotSupportedException。 通常,实现接口是为了 阅读全文
posted @ 2014-12-30 20:38 Jinkora 阅读(1387) 评论(0) 推荐(0) 编辑
摘要:平时很难遇到需要覆盖equals的情况。 什么时候不需要覆盖equals? 类的每个实例本质上是唯一的,我们不需要用特殊的逻辑值来表述,Object提供的equals方法正好是正确的。 超类已经覆盖了equals,且从超类继承过来的行为对于子类也是合适的。 当确定该类的equals方法不会被调用时, 阅读全文
posted @ 2014-12-25 20:42 Jinkora 阅读(1296) 评论(0) 推荐(0) 编辑
摘要:Finalizers are unpredictable ,often dangerous ,and generally unnecessary. 在Java中,GC会自动回收不可达对象相关的空间,而不需要程序员做相关的工作。 对于非内存资源,我们通常使用try-finally语句块进行释放。 fi 阅读全文
posted @ 2014-12-25 20:31 Jinkora 阅读(2021) 评论(0) 推荐(0) 编辑
摘要:使用JRebel启动工程时加上VM参数时有一个参数是"-javaagent:D:\jrebel_5.6.0\jrebel.jar"。javaagent是什么? java -help后看到如下信息:Java代理不是应用程序中的一部分,instrument支持Java以代理的形式监控或重新定义运行中的服... 阅读全文
posted @ 2014-11-04 20:22 Jinkora 阅读(3361) 评论(0) 推荐(2) 编辑
摘要:通常,我们更喜欢重用一个对象而不是重新创建一个。如果对象是不可变的,它就始终可以被重用。 下面是一个反面例子: 该语句每次执行时都创建一个新的实例。String构造器中的参数"stringette"本身是一个实例,功能方面等同于那些通过构造器创建的对象。如果这种语句放到循环里,效果会变得更糟。 于是 阅读全文
posted @ 2014-11-04 20:05 Jinkora 阅读(565) 评论(0) 推荐(0) 编辑
摘要:静态工厂和够构造器有一个共同的局限性:遇到大量的参数时无法很好的扩展。 先说说构造器。 其实field不多时重叠构造器(telescoping constructor)是个不错的方法,易于编写也易于调用,这种方式在参数数量较少时也很常见。 但问题是参数很多(可能越来越多)时,比如(现在已经很难找到对 阅读全文
posted @ 2014-11-04 20:00 Jinkora 阅读(1496) 评论(0) 推荐(1) 编辑
摘要:之所以把Latch与Barrier放在一起比较是因为他们给人一种相似的感觉。 他们都是阻塞一些行为直至某个事件发生,但Latch是等待某个事件发生,而Barrier是等待线程。 先比较一下JCIP中对二者的描述: Latch A latch is a synchronizer that can de 阅读全文
posted @ 2014-11-04 19:48 Jinkora 阅读(2484) 评论(0) 推荐(1) 编辑
摘要:有个需求,说要在生成PDF文件时加上signature。操作PDF容易,用: com.itextpdf itextpdf 5.1.3加个signature可以用这个方法:public static PdfStamper createSignature(final PdfReader... 阅读全文
posted @ 2014-10-30 22:34 Jinkora 阅读(3547) 评论(0) 推荐(2) 编辑

visit:click tracking
点击右上角即可分享
微信分享提示