2014年9月

2014.09书单

下载地址:百度云

开发:

Thinking In Java第四版中文版.pdf
悟透JavaScript.pdf
了不起的NodeJS.pdf
看日记学git.pdf
Spring MVC 教程,快速入门,深入分析.pdf
跟我学SpringMVC.pdf
大话设计模式(带目录完整版).pdf
MyBatis中文教程.pdf
mybatis3与Spring整合官方中文版.pdf
Java事务设计策略.pdf
Java并发编程的艺术.pdf
hadoop新手学习路线指导.pdf
Android应用开发详解pdf清晰版.pdf

互联网:

失控(中文版).pdf
科技想要什么.pdf
大数据时代(维克托·迈尔·舍恩伯格).pdf
粘住:为什么我们记住了这些,忘掉了哪些?(美)奇普·希思等著.pdf
人人都是产品经理.文字完整版.pdf

生活:

人人都爱经济学(第二版).pdf
文明的冲突与世界秩序的重建.pdf
无器械健身.pdf
囚徒健身(中文完整版).pdf
囚徒健身2翻译版.pdf
清醒思考的艺术.pdf
明智行动的艺术.pdf

Java缓存这点事

  1. 什么是缓存
    缓存,它介于应用程序和永久性数据存储源(如硬盘文件、数据库等)之间,其作用是降低应用程序读写永久性数据存储源的频率,从而提高应用的运行性能。

缓存中的数据是数据存储源中的拷贝,应用程序在运行时直接读写缓存中的数据,在某些特定的时刻按照缓存中的数据来同步更新数据存储源。

  1. 为什么要用缓存,哪些场景会用到缓存
    缓存中的介质通常是内存,永久性数据存储源一般是硬盘、磁盘或者数据库,应用程序读写内存的速度显然比读写磁盘快,访问数据库也是比较耗资源的,速度也比较慢的。正确有效的使用缓存能大大提高应用程序的性能。

常用的缓存场景:

  • 内存缓存,如类中的static Map静态变量
  • 应用程序,如页面缓存,动态页面静态化、Servlet缓存等,如Hibernate框架的对象缓存
  • session、request等,如session中保存登录用户的认证权限。
  • 浏览器缓存,如cookie
  • 数据库缓存,如Query Cache、Data Buffer
  1. Java缓存的类型,以及它们的特点和用法
    Java缓存有两种:

一、内存缓存,如一个类中的static Map静态变量,优点是使用简单,缺点是对象的有效性和生命周期无法控制,容易导致内存使用的急剧上升。

生命周期的控制可以通过SoftReference、WeakReference、PhantomReference这三个对象来执行,即软引用,弱引用,虚引用。

参考:深入探讨 java.lang.ref 包

二、文件缓存,是指把数据存储到磁盘上,如XML格式文件,也可以序列化文件DAT文件格式或者其他。

内存级别的缓存很多情况下是满足不了企业级应用的,大数据量的缓存肯定还是要保存到文件,这个时候光用JDK就比较复杂了, 需要用到第三方开源框架来实现了。

  1. Java缓存框架
    常用的Java缓存框架有Oscache、Ehcache、Jcache、Jbosscache等,推荐使用Ehcache和Oscache,Hibernate采用了Ehcache作为其缓存机制默认实现,Oscache是iBatis推荐的缓存框架。

常用框架简介:

OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。 OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)。

EHCache 是一个纯java的在进程中的缓存,它具有以下特性:快速,简单,为Hibernate2.1充当可插入的缓存,最小的依赖性,全面的文档和测试。

Ehcache详细解读Ehcache 整合Spring 使用页面、对象缓存

JCache是个开源程序,正在努力成为JSR-107开源规范,JSR-107规范已经很多年没改变了。这个版本仍然是构建在最初的功能定义上。官方网站 http://jcache.sourceforge.net/

JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能。缓存数据被自动复制,让你轻松进行JBoss服务器之间的集群工作。JBossCache能够通过JBoss应用服务或其他J2EE容器来运行一个MBean服务,当然,它也能独立运行。 JBossCache包括两个模块:TreeCache和TreeCacheAOP。 TreeCache --是一个树形结构复制的事务处理缓存。 TreeCacheAOP --是一个“面向对象”缓存,它使用AOP来动态管理POJO(Plain Old Java Objects) 注:AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。

Java Caching system JSC(Java Caching system)是一个用分布式的缓存系统,是基于服务器的java应用程序。它是通过提供管理各种动态缓存数据来加速动态web应用。 JCS和其他缓存系统一样,也是一个用于高速读取,低速写入的应用程序。动态内容和报表系统能够获得更好的性能。如果一个网站,有重复的网站结构,使用间歇性更新方式的数据库(而不是连续不断的更新数据库),被重复搜索出相同结果的,就能够通过执行缓存方式改进其性能和伸缩性。

ShiftOne Java Object Cache是一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架。官方网站 http://jocache.sourceforge.net/

SwarmCache是一个简单且有效的分布式缓存,它使用IP multicast与同一个局域网的其他主机进行通讯,是特别为集群和数据驱动web应用程序而设计的。SwarmCache能够让典型的读操作大大超过写操作的这类应用提供更好的性能支持。 SwarmCache使用JavaGroups来管理从属关系和分布式缓存的通讯。官方网站 http://swarmcache.sourceforge.net

Whirlycache是一个快速的、可配置的、存在于内存中的对象的缓存。它能够通过缓存对象来加快网站或应用程序的速度,否则就必须通过查询数据库或其他代价较高的处理程序来建立。

  1. Hibernate的两级缓存
    一级缓存是session级别的缓存,属于进程范围内的缓存,由Hibernate自行管理一般无需进行干预。

二级缓存是SessionFactory级别的缓存,属于集群范围与进程范围的缓存,它可以进行配置和更改,可以动态加载和卸载。

Hibernate两级缓存详细解析,请参考:

对Hibernate一级缓存与二级缓存的解析
Hibernate3缓存总结
hibernate二级缓存攻略

  1. 缓存存在的几个问题
    在Web应用中,正确使用缓存能大大提供程序的运行效率,但是使用中有这么几个问题还需注意:

缓存数据的有效时间控制
缓存数据的同步更新
缓存数据的多线程并发控制

  1. 缓存的几种误区
    有这么几种常见的误区:
  • 太过于依赖默认的序列化机制
  • 缓存大对象
  • 使用缓存机制在线程间进行数据的共享
  • 认为调用缓存API之后,数据会被立刻缓存起来
  • 缓存大量的数据集合,而读取其中一部分
  • 缓存大量具有图结构的对象导致内存浪费
  • 缓存应用程序的配置信息
  • 使用很多不同的键指向相同的缓存项
  • 没有及时的更新或者删除再缓存中已经过期或者失效的数据

闲话有三

1. 少负些东西,慢下来

这几年,一直很功利,追求快,定宏大不可实现的目标,刷海量但是对自己没多少用处的新闻,总是觉得自己很弱,需要大力追赶,然而实际上执行力却没那么高,总是被生活中的各种琐事和诱惑所绊,想象中的美好事情一件都没有实现过。

最近看了些书,当中的有些话点醒了我,仿佛突然从梦中醒来,原来如此。将有些话记录在案,以便以后时时警醒自己:

妄念:如果你有一个期望,这个期望长期挥之不去,而且需要别人来满足,那么这个期望就是妄念。
如果你想做某件事情却一直找不到时间,那多半是你其实不想做。
你之所以即使疲劳了也不肯睡觉,是因为你没有勇气结束这一天,也没有勇气迎接新的一天。
多么深刻,直至人心,普通人想要变强大想要变得不平凡,不是想想就可以。那些天赋比你好,条件比你好的人,都在拼命努力,你却总是拿自己和一些SB相比。

所以少去勾划那些美好的未来,那种想象出来的成功的快感,在班车抵达公司之后就会烟消云散,所以踏实一点。活在当下,永远聚焦当下最重要的事情,然后把它做好。如果连这最主要的事情都无法完成,其他的小事做好了又有什么意义,学生时代老师说从容易的题做起,长大了可不能从容易的事做起,时间和精力有限,必须在状态最好的时候做最重要的事情。

2. 同一时刻只做一件事

很早很早就知道了这句话,亦如知道天下没有白费的午餐一样,道理谁都知道,就是做不到。同时处理多件事情,只有在做简单事情的时候才能将效率最大化,在做专业性,知识性,设计性,构建性比较强的事情时,效率都很低。不能长久集中注意力,不能深入思考,被打断,都会让在做这些事情的时候效率大大折扣。

必须要很用心很用心的去理解和实践这句话,有时候也曾有过明悟,知道很多年的话突然间在思考的某个刹那恍然大悟。跟一般的理解不同,不是知道它的来龙去脉,也不是知道它的深刻含义,而是知道了为什么会有这句话,说不出来的领悟。

多思考,专注,深入,大道至简,做到极致一切便好。

3. 以完成目标为导向的生活

在回首往事的时候,总是发现,原来这几年好像什么都没干,没什么所得。在纷繁杂乱中不停的忙碌,却忘了自己想要的是什么。杂事做太多,也不及做一件漂亮的事情。

那么什么是漂亮的事情?

学会一项新的技术或者对技术的理解得到大大提升
写一些文章,并得到他人的大力赞同:豆瓣100个喜欢/知乎100个赞
让家人或者朋友特别开心
得到很多money
囚徒健身之路跨入新的层次
完成一项工作上很艰巨的任务
对于互联网,对于商业,有新的认识
坚持一个好的习惯100天:早睡早起,饮食八分饱,每天锻炼,每日小结
And so on…
每天写下要做的事,然后漂亮的完成它。

积极的面对一切,人生应该如此:往前走心中充满了喜悦,而不是进入未知的恐惧。