全新552B架构全面超越V4 Pro,闲时缓存命中价降至每百万0.02元。 [..]
Read MoreSingleton(单态 / 单例)保证一个 Class 在 Java 应用里只有一个实例。建目录、拿数据库连接这类希望全局唯一的资源,常用它。 单例可以带状态:多个单态凑在一起就像状态仓库。例如论坛帖子计数器,每次浏览加 1,用 synchronize 保证安全;若要持久化到数据库,可以在不改对外…
JSP 转译成 Servlet 之后,容器会准备好九个隐含对象,页面里不用声明就能直接用。它们分别对应 page、config、request、response、out、session、application、pageContext、exception。 记的时候按作用域想:page 只对当前页,r…
Listener 是 Servlet 规范里的监听器。它可以监听 ServletContext、HttpSession、ServletRequest 等域对象的创建与销毁,以及属性增删改,在事件前后做必要处理。 典型用法是统计在线人数:新建一个 HttpSession 就加一,销毁就减一。监听器写在…
Servlet 初始化时,容器会调用 init(ServletConfig config) 或无参 init()。ServletConfig 是接口,真正的实现类对象由容器实例化后再传进来。 web.xml 里给 Servlet 配的启动参数,也会在初始化时被容器收集,记进这份 ServletCon…
Servlet 是一种独立于平台和协议的服务器端 Java 应用程序,用来生成动态 Web 页面。它不从命令行启动,而是由 Web 服务器加载;这台服务器必须包含支持 Servlet 的 Java 虚拟机。 和 Applet 一样,Servlet 没有 main(),生命周期由容器调用;和 JSP …
abstract class 和 interface 是 Java 里定义抽象类型的两种机制,也因此赋予了语言强大的面向对象能力。二者很像,有时还能互换,所以不少人选型很随意。 其实差别不小:选哪一个,往往反映出你对问题领域本质、对设计意图的理解是否站得住。下面按语法、编程和设计理念三层来拆。 一、…
JDK 1.2 之后,Java 在 java.util 里提供了观察者模式的接口和实现类:观察者实现 Observer,被观察者继承 Observable。 观察者必须实现 void update(Observable o, Object arg)。读者可以很轻易地用这一对类型把推送关系搭起来。 一…
装饰模式 Decorator 常被译成“装饰”,译成油漆工更形象:油漆工(decorator)刷油漆,被刷的对象叫 decoratee。这两种角色在模式里缺一不可。 定义:动态地给一个对象加上额外职责,就像在墙上刷油漆。比起靠生成子类来扩充功能,Decorator 更灵活——功能的种类、时机都可以在…
消息摘要有唯一性和不可逆:同样的输入得到同样的摘要,很难从摘要反推原文。MD5 常被拿来做校验,旧系统里也用来处理用户口令(现代密码存储应使用专门的慢哈希,这里按原文给出一个简洁实现)。 下面这个 StringUtil 把任意字符串编成 32 位十六进制 MD5。 一、实现类 package tes…
应用里常有周期性工作,比如每 5 分钟检查一次新邮件。这类任务用 java.util.Timer 最省事:它自己维护调度线程,不必手写循环休眠。 Timer 也适合延迟执行(类似电视的延时关机)。多个线程可以共用一个 Timer,它内部是同步的,一般不必再包一层锁。 一、周期调度 下面这段每 5 分…