‘ JAVA ’ 目录归档
《Redis官方文档》 redis 虚拟内存
虚拟内存
Redis 虚拟内存这一特性将首次出现在Redis 2.0的一个稳定发布版中。目前Git上Redis 不稳定分支的虚拟内存(从现在起称之为VM)已经可以使用,并且经试验证明足够稳定。
初探设计:Java继承何时用?怎么用?
Writer :BYSocket(泥沙砖瓦浆木匠)
一、回顾继承
常见的如下:
1、依赖(”uses-a“)
2、聚合(”has-a“)
3、继承(”is-a“)类之间关系
也就是UML类图中常见的三种关系,另外常见的还有实现(接口与实现类的关系),组合等。
阅读全文
阿里感悟(十三)降低成本的敏捷设计
作者:方腾飞
最近在参与一个比较大的项目,需要耗费上千人日,而细分设计和设计评审就花掉了几百人日,基本上10几个人写了几周的设计文档,并开了几周的设计评审会。整个过程模式比较重,所以耗费的人力比较大。
为什么模式比较重?
- 参与者众多。设计评审会时,要求与本会相关的人都参与设计评审,一个屋子里可能坐着几十人,哪怕一个小时的会议和你相关的就5分钟,你也要参加。而且这样的公司会议太多,如果每个相关的会议都去参加,那就基本上是白天开会,晚上写代码的节奏,所以现在当有人找我开会时,我会问是否必须要我参加,能否会前或会后找我沟通确认,可能10分钟就能解决的问题。
- 设计文档内容多。系分设计非常全,需要把所有设计场景都写上去,首先需要花大量时间写系分设计文档,其次需要几个小时的会才能评审完。而这样全面的设计文档,可能需要三个月到半年才能开发完成。
- 有的设计评审没有经过小范围初审,有些设计遗漏了,导致要反复评审。
《Groovy官方教程》Grape依赖管理器
1 快速入门
1.1添加一个依赖
Grape是一个内嵌在Groovy里的Jar包依赖管理器。Grape让你可以快速添加maven仓库依赖到你的classpath里,使脚本运行更加简单。最简单的一种用法是只需要在你的脚本里添加一个注解:
[code lang=”groovy”]
@Grab(group=’org.springframework’, module=’spring-orm’, version=’3.2.5.RELEASE’)
import org.springframework.jdbc.core.JdbcTemplate
[/code]
@Grab也支持简洁版:
[code lang=”groovy”]
@Grab(‘org.springframework:spring-orm:3.2.5.RELEASE’)
import org.springframework.jdbc.core.JdbcTemplate
[/code]
注意,这里我们用到了import,这是推荐的做法。当然你也可以在mvnrepository.com搜索到依赖包然后使用@Grab注解形式加到pom.xml实体里。
阅读全文
《Java并发编程的艺术》-Java并发包中的读写锁及其实现分析
作者:魏鹏 本文是《Java并发编程的艺术》的样章
1. 前言
在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。
除了保证写操作对读操作的可见性以及并发性的提升之外,读写锁能够简化读写交互场景的编程方式。假设在程序中定义一个共享的数据结构用作缓存,它大部分时间提供读服务(例如:查询和搜索),而写操作占有的时间很少,但是写操作完成之后的更新需要对后续的读服务可见。
运行时和编译时元编程—编译时元编程
运行时和编译时元编程 第二部分
2 编译时元编程
Groovy的编译时元编程支持编译时生成代码。这些变换(译者注:原文该专有名词是transformations,译者直译为变换,也许不准确。如果有知道准确翻译的读者恳请不吝赐教,待译者修正)叫做程序的抽象语法树(AST),在Groovy里,我们叫做AST变换。AST变换支持在编译过程中植入钩子,修改抽象语法树之后继续编译生成正常的字节码流。和运行时元编程相比,这种转换可以在类文件的修改可见(或者说是字节码流)。如果你想要你的转换成为类协议的一部分(类协议是指实现接口,继承抽象类等等…)甚至你需要你的类可以被Java(或其他JVM语言)调用,在字节码流的修改可见是非常重要的。比如说,一个AST转换可以添加方法到一个类。在运行时元编程里,你需要使你的新方法在Groovy里可见,在编译时元编程要实现同样的功能,这个方法仅仅需要对Java可见即可。最后也同样重要的是,编译时元编程相比运行时元编程能活的更好的性能(因为没有初始化阶段)。
阅读全文
《Java并发性和多线程介绍》-Java TheadLocal
Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作。因此,尽管有两个线程同时执行一段相同的代码,而且这段代码又有一个指向同一个ThreadLocal变量的引用,但是这两个线程依然不能看到彼此的ThreadLocal变量域。