上一页 1 ··· 70 71 72 73 74 75 76 77 78 ··· 91 下一页
  2013年11月15日
摘要: 一、对可共享数据的同步访问 synchronized关键字可以保证在同一时刻,只有一个线程在执行一条语句,或者一段代码块。正确地使用同步可以保证其他任何方法都不会看到对象处于不一致的状态中,还能保证通过一系列看似顺序执行的状态转变序列,对象从一种一致的状态变迁到另一种一致的状态。迟缓初始化(lazy initialization)的双重检查模式(double-check idiom)://The double-check idiom for lazy initializaation -broken!private static Foo foo = null;public statc Foo g 阅读全文
posted @ 2013-11-15 19:16 duanxz 阅读(498) 评论(0) 推荐(0)
摘要: 充分发挥异常的优点,可以提高一个程序的可读性、可靠性和可维护性。如果使用不当的话,它们也会带来负面影响。一、只针对不正常的条件才使用异常先看一段代码://Horrible abuse of exceptions. Don't ever do this!try{ int i = 0; while(true) a[i++].f();}catch(ArrayIndexOutOfBoundException e){}通过用抛出(throw)、捕获(catch)、忽略ArrayIndexOutOfBoundException的手段来达到终止无限循环的目的。如下面... 阅读全文
posted @ 2013-11-15 19:15 duanxz 阅读(581) 评论(0) 推荐(0)
摘要: 一、将局部变量的作用域最小化 本条目与前面(使类和成员的可访问能力最小化)本质上是类似的。将局部变量的作用域最小化,可以增加代码的可读性和可维护性,并降低出错的可能性。使一个局部变量的作用域最小化,最有力的技术是在第一次使用它的地方声明。几乎每一个局部变量的声明都应该包含一个初始化表达式。在循环中经常要用到最小化变量作用域这一个规则。for循环使你可以声明循环变量(loop varialbe),它们的作用域被限定在正好需要的范围值内(这个范围包括循环体,以及循环体之前的初始化、测试、更新部分)。因此,如果在循环终止之后循环变量的内容不再被需要的话,则for循环优于while循环。例如,下面是. 阅读全文
posted @ 2013-11-15 13:24 duanxz 阅读(467) 评论(0) 推荐(0)
摘要: 一、序言程序设计的几条基本原则:1、清晰性和简洁性最为重要,模块的用户永远也不应该被模块的行为所迷惑,所以写良好的注释是必需的。2、模块要竟可能小,但也不能太小,好一个深奥的哲学问题。3、代码应该被重用,而不是应该被拷贝,拷贝的代码哪天就是你的灾难。4、模块的依赖性应该尽可能地降到最小,低耦合是必须... 阅读全文
posted @ 2013-11-15 11:14 duanxz 阅读(365) 评论(0) 推荐(0)
  2013年11月14日
摘要: 最近项目中遇到一个业务场景,就是在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象,第一个想到的是ApplicationContextAware,在setApplicationContext中去通过ctx获取所有的bean,后来发现好像逻辑不对,这个方法不是在所有bean初始化完成 阅读全文
posted @ 2013-11-14 15:41 duanxz 阅读(13365) 评论(0) 推荐(1)
摘要: 1、 条件断点 断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。 在断点处点击鼠标右键,选择最后一个"Breakpoint Properti 阅读全文
posted @ 2013-11-14 09:27 duanxz 阅读(638) 评论(0) 推荐(1)
  2013年11月13日
摘要: 一、检查参数的有效性 极大多数方法和构造函数都会对于传递给它们的参数值有某些限制。 对于公有的方法,使用Javadoc @throws标签(tag)可以使文档中记录下“一旦针对参数值的限制被违反之后将会被抛出的异常”。典型情况下, 这样的异常为IllegalArgumentException、IndexOutOfBoundException或者NullPointException。看一个例子:/** * @param m the modulus,which must be positive. * @return this mod m. * @throws ArithmeticException 阅读全文
posted @ 2013-11-13 21:31 duanxz 阅读(431) 评论(0) 推荐(0)
摘要: 对于很多公司来说,代码审查是开发人员日常工作中的重要环节。通过代码审查,可以及早发现项目中存在的问题、促进同事之间的沟通与交流,并且可以在讨论中迸发出智慧的火花。但要想成功实施代码审查却并不是一件轻松的事情,为什么要进行代码审查、何时做、如何做,这是摆在我们面前的3个重要问题。针对于这3个问题,开发... 阅读全文
posted @ 2013-11-13 11:31 duanxz 阅读(691) 评论(0) 推荐(0)
摘要: 三、接口优于抽象类 java提供两种机制,可以用来定义一个允许多个实现的类型:接口和抽象类。由于java只允许单继承,所以,抽象类作为类型定义受到了极大的限制。 已有的类可以很容易被更新,以实现新的接口。你所需要做的是:增加要求的方法,如果这些方法原先还不存在的话;然后在类的声明上增加一个imple 阅读全文
posted @ 2013-11-13 10:47 duanxz 阅读(464) 评论(0) 推荐(0)
  2013年11月12日
摘要: 问题的本身没有什么难度,但是要想一下子找到一个现成的方法还真不是那么容易,本来以为java.util.Date中会有方法结果找了半天没找到,最后还是在Calendar中找到了,记下别忘了!!核心:使用Calendar的add(int field, int amount)方法Java代码Calenda... 阅读全文
posted @ 2013-11-12 09:33 duanxz 阅读(1345) 评论(0) 推荐(0)
  2013年11月5日
摘要: 一、使类和成员的可访问能力最小化要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是,这个模块对于外部的其他模块而言,是否隐藏了内部的数据和其他的实现细节。一个设计良好的模块会隐藏所有的实现细节,把他的API与实现清晰的隔离开来。模块之间只能通过它们的API进行通信,一个模块不需要知道其他模块的内部工作情况。这个概念被称为信息隐藏(information hiding)或封装(encapsulation),是软件设计的基本原则之一。信息隐藏的优点:1、可以有效地解除一个系统中各个模块之间的耦合关系,使得这些模块可以被独立地开发、测试、优化、使用、理解和修改。可以加速系统的开发速度,因 阅读全文
posted @ 2013-11-05 21:58 duanxz 阅读(437) 评论(0) 推荐(0)
  2013年11月4日
摘要: 一、创建对象的两种方式1、提供公有的构造器。2、提供一个返回类实例的静态方法。二、使用静态方法创建对象优势:1、静态工厂方法的一个好处是,与构造函数不同,静态工厂方法具有名字。产生的客户端代码更易于阅读。//例如,构造函数BigInteger(int,int,Random)返回的BigInteger可能是素数,BigInteger.probalePrime()的静态工厂方法,表达显然更为清楚2、静态工厂方法的第二个好处,与构造函数不同,它们每次被调用的时候,不要求非得创建一个新的对象。对于不可变类,可以预先使用构建好的实例,或将构建好的实例缓存起来,进行重复利用,从而避免创建不必要的重复对象。 阅读全文
posted @ 2013-11-04 11:03 duanxz 阅读(521) 评论(0) 推荐(0)
  2013年11月3日
摘要: 《Thread之一:线程生命周期及五种状态》 《juc线程池原理(四): 线程池状态介绍》 线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。线程池也有5种状态;然而,线程池不同于线程,线程池的5种状态是:Running, SHUTDOWN, STOP, TIDYING,TERMIN 阅读全文
posted @ 2013-11-03 21:32 duanxz 阅读(1039) 评论(0) 推荐(0)
摘要: 一、拒绝策略介绍 二、拒绝策略对比和示例 三、拒绝策略怎么实现的? 3.1、线程池中的拒绝策略用的是策略模式 3.2、 四种拒绝策略的实现,ThreadPoolExecutor的静态内部类 3.2.1、DiscardPolicy 3.2.2、DiscardOldestPolicy 3.2.3、Abo 阅读全文
posted @ 2013-11-03 21:17 duanxz 阅读(1098) 评论(0) 推荐(1)
摘要: 日常开发中接触到的注解有很多,有jdk的@Override、@FunctionInterface等、框架(如spring、mybatis、lombok)的@Controller、@Param、@Slif4j、@Data等,jdk的原生注解除了提供这些注解之外还提供了4种元注解(下面有说明)。 原生类 阅读全文
posted @ 2013-11-03 19:55 duanxz 阅读(735) 评论(0) 推荐(0)
  2013年10月31日
摘要: 一、jdk中默认线程池中的代理模式 代理模式 单例类线程池只有一个线程,无边界队列,适合cpu密集的运算。jdk中创建线程池是通过Executors类中提供的静态的方法来创建的,其中的单例类线程池的方法如下: public static ExecutorService newSingleThread 阅读全文
posted @ 2013-10-31 20:35 duanxz 阅读(2613) 评论(0) 推荐(0)
摘要: 一、阻塞队列介绍二、3种类型的BlockingQueue三、阻塞队列成员介绍四、BlockingQueue 的方法五、Queue中 remove/poll, add/offer, element/peek区别 一、阻塞队列介绍 BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费 阅读全文
posted @ 2013-10-31 20:08 duanxz 阅读(1145) 评论(0) 推荐(0)
摘要: 一、LinkedTransferQueue简介 TransferQueue是一个继承了BlockingQueue的接口,并且增加若干新的方法。LinkedTransferQueue是TransferQueue接口的实现类,其定义为一个无界的队列,具有先进先出(FIFO)的特性。 有人这样评价它:"T 阅读全文
posted @ 2013-10-31 09:11 duanxz 阅读(1490) 评论(0) 推荐(0)
  2013年10月22日
摘要: 在以下四种遍历过程中,前两种会抛出ConcurrentModificationException,而后两种方法是正确的.Department类:packagecom.sitinspring;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;publicclassDepartment{privateStringname;privateListmemberSheet;publicDepartment(Stringname){this.name=name;}publicvoidaddMemer(Member 阅读全文
posted @ 2013-10-22 16:15 duanxz 阅读(2111) 评论(0) 推荐(0)
  2013年10月21日
摘要: 前言 由于在项目中使用Maven打包部署的时候,经常由于配置参数过多(比如Nginx服务器的信息、ZooKeeper的信息、数据库连接、Redis服务器地址等),导致实际现网的配置参数与测试服务器参数混淆,一旦在部署的时候某个参数忘记修改了,那么就必须重新打包部署,这确实让人感到非常头疼。因此就想到 阅读全文
posted @ 2013-10-21 17:21 duanxz 阅读(1907) 评论(0) 推荐(0)
摘要: 一、3种类型的BlockingQueue1.1 无界队列1.2 有界队列1.3 同步移交 一、3种类型的BlockingQueue 1.1 无界队列 队列大小无限制,常用的为无界的LinkedBlockingQueue(最大长度是Integer.Max_Value,相当于无界),使用该队列做为阻塞队 阅读全文
posted @ 2013-10-21 12:32 duanxz 阅读(853) 评论(0) 推荐(0)
  2013年10月19日
摘要: Java有两种Thread:“守护线程Daemon”与“用户线程User”。 我们之前看到的例子都是用户,守护线程是一种“在后台提供通用性支持”的线程,它并不属于程序本体。 从字面上我们很容易将守护线程理解成是由虚拟机(virtual machine)在内部创建的,而用户线程则是自己所创建的。事实并 阅读全文
posted @ 2013-10-19 11:31 duanxz 阅读(551) 评论(0) 推荐(0)
  2013年10月18日
摘要: 一、通过nginx反向代理 通过nginx反向代理后,使得浏览器认为访问的资源都是属于相同协议,域名和端口的。 详细见:《nginx实现跨域访问》 二、jsonp方式请求 v jquery请求跨域: 一、通过nginx反向代理 通过nginx反向代理后,使得浏览器认为访问的资源都是属于相同协议,域名 阅读全文
posted @ 2013-10-18 21:05 duanxz 阅读(2395) 评论(0) 推荐(0)
  2013年10月14日
摘要: ThreadGroup线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。允许线程访问有关自己的线程组的信息,但是不允许它访问有关其线程组的父线程组或其他任何线程组的信息。API构造方法public ThreadGrou... 阅读全文
posted @ 2013-10-14 17:25 duanxz 阅读(1224) 评论(0) 推荐(0)
  2013年9月26日
摘要: 为eclipse设置jdk方法:两个方法:1.设置PATH路径~eclipse自动会查找!2.在快捷方式中加上参数:-VMjava虚拟机路径Eclipse中设置${user}变量在Eclipse启动时加入参数 -vmargs -Duser.name="whateveryouwant"或者:在使用Eclipse编写Java代码时,自动生成的注释信息都是按照预先设置好的格式生成的,例如其中author 的属性值。我们可以在Eclipse中进行设置自己希望显示的信息。 现在看看如何修改我们的用户名即作者信息:点击Windows->Preferences->Java-& 阅读全文
posted @ 2013-09-26 14:10 duanxz 阅读(895) 评论(0) 推荐(0)
上一页 1 ··· 70 71 72 73 74 75 76 77 78 ··· 91 下一页