`
swordinhand
  • 浏览: 308859 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
文章列表
    66,同步对共享可变数据的访问。synchronized关键字不仅能保证对对象的互斥访问,还能保证方法对对象的修改可以被其他方法观察到。这第二点挺难理解的,可能是跟JAVA的内存模型有关系,还需要深入了解。感觉就像数据库操作的commit一样,你写了值,但是没commit的时候,你看到的跟别人看到的就是不一样的。另外,书上那个直接利用变量的原子性来控制线程,不加synchronized的例子,在我的机器上可以正常运行,而不会像书上说的那样永不终结。     67,避免过度的同步。在同步块内部,不要调用外来的代码,不要调用可能被覆盖的代码。同步区域内的代码,干的活越少越好。     68, ...
   这一章都是讲异常的,里面很多原则还是要在实践中用到了才有体会啊。有些条目讲的也很简单,除了记一下标题,都不知道还要记什么。异常是有用的东西,但是也给代码带来了相当大的复杂度。用的好,可以让你的程序 ...
   45,最小化局部变量的作用范围。     46,使用for-each循环代替传统的循环方式。当然for-each只能是单向只读的,不能完全代替for循环。记得上次在水木看的有人说这两种循环的语义也是不一样的,生成的虚拟机代码有区别,有机会研究一下。     47,使用标准库。不要自己造轮子。     48,如果需要精确的值,不要使用float和double。嗯,用BigDecimal。     49,基本类型优于包装类型。尤其要注意在比较值的时候,不要一不小心在包装类型上用了==操作符。当在同一个操作中使用了基础类型和包装类型时,包装类型会被自动拆箱。     50,在其他类型更合适的时候 ...
    38,检查参数的正确性。如果方法对传进来的参数有限制,那就对参数进行检查,如果参数不符合要求,那就尽早的抛出异常。如果不这样的话,那造成的错误可能会在很奇怪的地方出现,很难排查。但是如果这个检查比较耗资源,可以考虑不检查,还有种情况,是方法内部有隐含的检查,比如Collections.sort(List<T> list),这个方法并没有在签名里限制参数一定要实现Comparable接口,但是它内部会先把参数cast成Comparable,然后再调用compareTo方法。所以它不需要检查参数是否实现了Comparable接口,最终出错时的提示跟预先检查发现出错给的提示是一样的 ...
    枚举和注解这一章看完了没什么想法,可能是平时用的不多吧。但是也不好直接跳过去,就稍微记一下吧,如果以后有用到的时候,再回来翻翻。     30,使用enum来取代int常量。以前没有enum的时候好多人就这么定义常量, ...
    23,在新代码里不用使用raw type。用了泛型之后,可以提供编译时类型检查,便于及早发现错误,从集合里读取数据的时候也不用手动的cast。如果真的想向集合里插入多种类型的数据,可以使用Object作为参数类型,比如List<Object>这样的。有点要注意的是class literal不能是泛型,只能有List.class,不能有List<String>.class这样的。由于泛型信息在编译时会被擦除,因此,instanceof操作符也不能和泛型进行比较,可以写if(set instanceof Set)或者if(set instanceof Set<? ...
    13,最小化类和成员的可访问性。这也没什么好说的,高内聚,低耦合,暴露出去的东西越少越好。类只有两种访问级别:public和package private。成员有四种访问级别, public, private, protected, package private。以前还没学Java的 ...
    8,在重写equals方法时要遵守一些约定。并不是每个类都需要重写equals方法,但是如果你需要,记得要遵守自反性,对称性,一致性,传递性。如果父类可以被实例化,而子类又增加了值域,那么equals方法肯定会有问题,所以,多用组合,少用继承。Java类库里就有这样的例子,java.sql.Timestamp继承了java.util.Date并增加了一个值域nanos,破坏了对称性。     Date d = new Date(); Timestamp ts1 = new Timestamp(d.getTime()); System ...
    前几天研究了一下,用Ant实现拷贝文件到远程服务器,并控制tomcat重启,其实很简单,只要建几个ant的任务即可,把builder.xml拷贝在下面做个备忘     <?xml version="1.0" encoding="iso-8859-1"?> <project name="remote-deployment" default="remote-deploy" basedir="."> <target name="remo ...
    最近比较闲,就打算找点时间把一直没看的Effective Java第二版给看了,为了督促自己看完,同时为了加深记忆,决定写篇读书笔记,其实也就是记一下里面提到的各项建议,将来回顾时比较方便。     1,用静态工厂方法代 ...
    以前就觉得表示八进制和十进制的oct和dec跟表示十月和十二月的October和December很像,今天在水木的joke版看到有人说古罗马历法里,October是八月,December是10月,顿时觉得恍然大悟啊。然后顺手wiki了一下,October来自拉丁语表示八的octo,而December来自拉丁语表示十的decem。     最后说一句,水木joke不愧是万J版啊,什么都能学得到啊。
netstat -an | grep 80 | awk '{print $6}' | sort | uniq -c | sort -rn 输出结果如下所示        7 CONNECTED       4 LISTEN       2 STREAM       1 ESTABLISHED
    做了一个简单的nginx集群,用nginx 1.0.3做反向代理,后端放两个tomcat,在测试的时候发现了两个问题:     1,调用ab的时候,当指定的测试次数过多时,会报一个“apr_poll: The timeout specified has expired (70007)”的错误,在我的机器上,这个次数大约是33000多次,搜索了一下,参考这个帖子, 调用ab加上了-k参数,果然发起50000次请求也不会出错了,但是测试发起70000次请求时还是出现了同样的错误,不知道如果想发起更多的请求到底该怎么办。StackExchange上有个帖子提到可以修改操作系统的一些参数,有空的 ...
有时候tomcat启动的时候会提示 The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path,这虽然不是错误,不过据说装了apr,能增强tomcat的性能和稳定性,对tomcat还是有好处的,所以就试着装了一下。 1,从http://apr.apache.org下载最新的安装文件,目前的版本是1.4.5 2,用root身份安装       tar zvxf a ...
这不是什么复杂的工作,记在这里做个备忘 1,从http://nginx.org/en/download.html下载nginx的源代码,我用的是1.0.3版本的 2,升级各种基础库和支持软件  yum -y install gcc openssl-devel pcre-devel zlib-devel 3,解压缩, tar zvxf nginx-1.0.3.tar.gz ...
Global site tag (gtag.js) - Google Analytics