2014年12月14日
摘要: 开发高性能并发应用不是一件容易的事情。这类应用的例子包括高性能Web服务器、游戏服务器和搜索引擎爬虫等。这样的应用可能需要同时处理成千上万个请求。对于这样的应用,一般采用多线程或事件驱动的架构。对于Java来说,在语言内部提供了线程的支持。但是Java的多线程应用开发会遇到很多问题。首先是很难编写正... 阅读全文
posted @ 2014-12-14 22:03 zoucaitou 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 在应用程序中,通常会涉及到两种类型的计算:CPU计算和I/O计算。对于大多数应用来说,花费在等待I/O上的时间是占较大比重的。通常需要等待速度较慢的磁盘或是网络连接完成I/O请求,才能继续后面的CPU计算任务。因此提高I/O操作的效率对应用的性能有较大的帮助。本文将介绍Java语言中与I/O操作相关... 阅读全文
posted @ 2014-12-14 21:59 zoucaitou 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 不远处新开了一条商业街,沿街的门面是形形色色的商铺。晚上我回家的时候,都会经过那里。每天,我都看见同样的情景:空无一人的小超市里,收银机旁的女孩无聊地打着游戏机;穿着旗袍的迎宾小姐僵硬地站在饭馆门口;保安穿着一身不干净的制服,点着香烟,在停车的车位旁踱来踱去;卖彩票的小铺子里挤满了人,他们手里拿着纸... 阅读全文
posted @ 2014-12-14 14:42 zoucaitou 阅读(266) 评论(0) 推荐(1) 编辑
摘要: 安全性是Java应用程序的非功能性需求的重要组成部分,如同其它的非功能性需求一样,安全性很容易被开发人员所忽略。当然,对于Java EE的开发人员来说,安全性的话题可能没那么陌生,用户认证和授权可能是绝大部分Web应用都有的功能。类似Spring Security这样的框架,也使得开发变得更加简单。... 阅读全文
posted @ 2014-12-14 13:23 zoucaitou 阅读(2398) 评论(0) 推荐(0) 编辑
  2014年12月13日
摘要: 在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API。与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构。反射API中提供的动态代理也是非常强大的功能,可以原生实现AOP中 的方法拦截功能。正如英文单词reflection的含义一样,使用反射A... 阅读全文
posted @ 2014-12-13 17:15 zoucaitou 阅读(271) 评论(0) 推荐(0) 编辑
  2014年12月12日
摘要: Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。泛型最主要的应用是在JDK 5中的新集合类框架中。对于泛型概念的引入,开发社区的观点是褒贬不一。从好的方面来说,泛型的引入可... 阅读全文
posted @ 2014-12-12 23:58 zoucaitou 阅读(236) 评论(0) 推荐(0) 编辑
摘要: AngularJS 是制作 SPA(单页面应用程序)和其它动态Web应用最广泛使用的框架之一。我认为程序员在使用AngularJS编码时有一个大的列表点应该记住,它会以这样或那样的方式帮助到你。下面是一些我遵守的最佳实践建议,同时也想推荐给你们。 我坚信有更多的功能也应该是这份列表的一部分,我邀请你... 阅读全文
posted @ 2014-12-12 13:54 zoucaitou 阅读(370) 评论(0) 推荐(0) 编辑
摘要: AngularJS是Google开源的一款JavaScript MVC框架,弥补了HTML在构建应用方面的不足。源码托管在Github上,其通过使用指令(directives)结构来扩展HTML词汇,使开发者可以使用HTML来声明动态内容,从而使得Web开发和测试工作变得更加容易。目前,使用Angu... 阅读全文
posted @ 2014-12-12 13:37 zoucaitou 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 本篇的话题,讨论Java类的加载、链接和初始化。Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象。一个Java类从字节代码到能够在JVM中被使用,需要经过加载、链接和初始化这三个步骤。这三个步骤中,对开发人员直接可见的是J... 阅读全文
posted @ 2014-12-12 11:58 zoucaitou 阅读(338) 评论(0) 推荐(0) 编辑
  2014年12月11日
摘要: MESI协议及RFO请求典型的CPU微架构有3级缓存, 每个核都有自己私有的L1, L2缓存. 那么多线程编程时, 另外一个核的线程想要访问当前核内L1, L2 缓存行的数据, 该怎么办呢?有人说可以通过第2个核直接访问第1个核的缓存行. 这是可行的, 但这种方法不够快. 跨核访问需要通过Memor... 阅读全文
posted @ 2014-12-11 20:47 zoucaitou 阅读(443) 评论(0) 推荐(0) 编辑