引言
对于大规模的Java Web应用来说,会有大量的数据和大量的用户,对于如何提升网站的响应速度成为了我们开发人员的一个挑战。对于缓存来说,它可以解决其中的一部分问题。在这篇文章中,我会介绍什么是缓存,它的工作流程是什么样的,被缓存的数据应该具有什么样的特性。最后我会介绍一个非常受欢迎的缓存算法 - LRU,并给出了一个具体的实现。
对于大规模的Java Web应用来说,会有大量的数据和大量的用户,对于如何提升网站的响应速度成为了我们开发人员的一个挑战。对于缓存来说,它可以解决其中的一部分问题。在这篇文章中,我会介绍什么是缓存,它的工作流程是什么样的,被缓存的数据应该具有什么样的特性。最后我会介绍一个非常受欢迎的缓存算法 - LRU,并给出了一个具体的实现。
现在大部分的应用都需要并发,并且这些并发应用变得越来越复杂,因此Java最初给我提供的并发手段(比如:synchronized
volatile
wait()
notify()
)等越来越难以满足我们开发并发应用的需求。如果使用这些原始的并发手段,程序员需要更高的编程能力,增加开发时间,导致我们浪费很多精力在并发应用的正确性上,而不能只专注于我们自己手上的业务。
JSR 166: Concurrency Utilities 框架设计的目的就是减小程序员写并发应用程序的难度,让我们拿出更多的时间去关注我们的业务,同时也降低了开发者写并发应用的门槛。因此,我准备在这一系列文章中为大家介绍这些工具,让大家可以更轻松地去写并发程序。
前一阵公司的项目用到Spring MVC,看了官方文档,跑了几个Demo就可以使用了,很简单。但是,它一直像个黑盒一样,我并不知道它内部是如何工作的,这几天一直在研究它的源码,今天已经把它的工作原理弄清了,因此把我的这个研究过程记录下来。现在让我们进入源码的世界,来看看这个黑盒中到底有什么神奇的东西。
学一门新的知识,首先要大致了解它的全貌,然后在深入自己感兴趣的细节。那么在这一小节中,我不会去深入具体的细节了解spring MVC,而是去了解它大致的流程,它是如何工作起来的。首先,让我们先看看下面这张流程图。
图片来源:我从Google Image中找到的。