- 浏览: 253790 次
- 性别:
- 来自: 上海
最新评论
-
探索者_技术:
不错 讲解的比较详细
Java 执行过程详解 - JVM 生命周期 -
besterzhao:
学习了
关于 sun.misc.Unsafe -
lliiqiang:
属性变量被设定为不可更改的,外界传递的对象复制一份再保存到对象 ...
不可变类(immutable class) -
xunke515:
有启发.感谢
Java System 类详解 - in, out, err -
bo_hai:
你说没错。问题是:怎么样把ClassA中的事务传播到Class ...
Spring 事务在多线程环境下的传播
文章列表
几乎所有的都用过这个System类吧,因为大家学习的第一个语句大概就是
package jdk.lang;
public class SystemInspection {
public static void main(String[] args) throws Exception {
System.out.println(“Hello World”);
}
}
本文将一一详解这个类的标准输入(in),输出(out)和错误流(err)使用和原理。先看一个更复杂的例子:
package jdk.lang;
public class SystemIOE {
...
今天在看java.util.concurrent.atomic包的源代码的时候看到原来这个包的底层都调用了sun.misc.Unsafe这个类,这个类其实是个native的实现类,他的神奇之处就在于它可以直接访问内存地址。如果你能直接调用它,那么就意味着你可以绕开一切lock而直接操作地址,虽然危险却有相当的性能吸引力。( 源代码
) 它十分高效,因为它的实现基于CAS (Compare And Swap)。之所以名字叫不安全,是因为它可以直接访问内存,必须受信任的类才能使用它。如果你直接在eclipse里面引入他,有可能会报错。你需要修改eclipse里面的 preference-> ...
本文是写给开发人员的建议,不会涉及很多QA方面的讨论。我觉得有三个方法可以提高软件质量,根据重要性和有效性一次为:Code Review, Refactor和Unit Test。这三个方法不是三个阶段,而是同时交叉进行的。
1. Code Review - ...
Java虽然是个面向对象的语言,也声称“Everything is object”- 一切都是对象。但是,我觉得还不够纯粹和彻底,和ruby或者python比较一下就知道了。在Java中,数字和布尔类型就不被看做对象,而是被称为primitive类型。不过也不见的就不好,本文也不是想对此评论和分析。本文是想阐述Java的数据类型。
Java的数据类型
Java的数据类型分为两类:primitive和reference类型。我们可以从hold数据这个角度来说。primitive类型可以hold数字和布尔数据;reference类型可以hold对象,接口和数组类型的数据的指针。可以想象后一种数据 ...
这几个月一直在做性能调优的工作,以前总是进行功能的开发,从来不考虑性能的问题,经过这几个月的工作,发现从性能和扩展性的角度去看软件开发,还真是大不一样。在和朋友聊天的时候,提及Java程序是否能充分利用多核cpu的问题的时候,朋友给我推荐了这本书《Programming Concurrency on the JVM》。几天看下来,还真觉得很应景,建议做Java开发的朋友试着阅读一下。我简单记录下我的读后感。从多线程角度重新检查你的程序
一直习惯于在JavaEE的开源框架下做开发,认为多线程是容器(server)和框架的事情。其实不是的。我们定义的每一个类,如果是在多线程环境下被使用,你 ...
性能测试的目标
性能测试不同于功能测试,不是对与错的检验,而是快与慢的衡量。在进行真正的性能测试之前要先搞清楚目标:
1. 在确定的硬件条件下,可以支持的并发数越大越好,响应时间越快越好。具体需要达到的并发 ...
几乎每个开发者每天都在用版本控制系统,那么为什么我们要用它呢?
为什么需要版本控制系统(VCS)
最基本最重要的原因当然是版本回复reversion。随着开发,代码不断地在演化。如果你在写代码的时候发现一秒钟前错误的删除了一行代码,你会很快的用ctrl+z来撤销修改,从而回复你错删的代码。但是如果你经过一个小时的努力,改了很多的代码文件,你发现这个修改是不可行的,需要倒退回去,你改怎么办?有人有比较好的习惯,当认为目前有里程碑意义的时候就把代码全备份,如果后面发现想倒退回来的时候就删除修改后的,重新启用之前备份的。这样可以解决一些问题,但是这是手工的,很麻烦。只要是麻烦的事情都会容易让你懒于去做 ...
Rails给web应用的结构上强加了很多约束,而正是这些约束使得应用的开发变得很容易。也许是因为无规矩不成方圆,也许是因为规定好了道路是的开发者不用在选择面前纠结和徘徊,也许是从框架上植入了最佳实践,是的新手不那么容易犯前人的错误。。。
Models, Views, and Controllers
MVC是一个web开发中经典的甚至是事实上的标准模式。从struts的使用范围就可见一斑。
Models, 模型,负责维护应用的状态state。这个状态有时候是瞬间的,经过几个用户交互之后就消失了,有时候是持久的,需要存在应用以外的某个地方,比如DB。模型不只是data,它还包含加在data只是的 ...
1. 安装Ruby
1)下载RubyInstaller: http://rubyforge.org/frs/download.php/74298/rubyinstaller-1.9.2-p180.exe
2)运行rubyinstaller-1.9.2-p180.exe,根据向导安装,我是安装到c盘: C:\Ruby192 并且勾选那两个选项: Add Ruby executables to your PATH
Associate...
3) 验证: 打开命令行,输入ruby -v:
C:\Documents and Settings\Administrator>rub ...
引用Ruby on Rails is a framework that makes it easier to develop, deploy, and maintain web applications.
Rails显然是一种基于ruby的web实现框架,原生的MVC模式支持。有着很多奇特的地方:
Rails Simply Feels Right 让你感到简单
相比Java开发web应用而言,rails的简洁高效是显而易见的。
对MVC的支持是无形之中的,渗透到骨子里面的。基于模板应用为起点,而不是让你什么都从头开始。这一点能让你一开始就很容易进入状态。
Easy to test 易于测试
当你 ...
引用Ruby is designed to make programmers happy.
Ruby的设计理念就是让开发者用的舒心。先看看Ruby有什么特别之处,感如此自信。
在学习概念之前,得先准备一个环境,好是我能亲身体验。安装环境似乎不是那么容易,简单起见不如用ruby ...
服务器经常时间不准,运行一段时间后偏差还会很大,这对一些应用来说很不利。Linux提供了ntp,也就是Network Time Protocol。你可以检查是否安装了:
[root@yourhost ~]# rpm -qa | grep ntp
chkfontpath-1.10.1-1.1
ntp-4.2.2p1-9.el5_3.2
确认安装了以后,你可以用下面的命令执行同步:
[root@yourhost ~]# ntpdate 216.244.192.3
28 Mar 13:28:01 ntpdate[10589]: adjust time server 216.244.1 ...
约定大于配置
使用约定,有很多好处:
1. 可以节约很多配置
2. 可以从用best practice
3. 新人可以快速熟悉项目,有家的感觉
Maven的约定
引用
src/main/java Application/Library sources
src/main/resources Application/Library resources
src/main/filters Resource filter files
src/main/assembly Assembly descriptors
src/main/config Configuration files
src/main/we ...
本文是接着前面的一片继续记录maven的学习笔记:[url]http://jackycheng2007.iteye.com/blog/923791
[/url]
法宝2. POM 项目对象模型 - 继续
Project Inheritance - 项目继承
前面说到了项目在maven里被看成是object,既然如此,肯定有继承的功能。这个功能很有用,等于是让我们的项目profile也能被重用。试想,如果你有很多相似的项目,比如采用ssh开发的一系列项目,你的每个项目的pom里面肯定有不少重复的部分。有了继承,你就可以把这些公用的部分都抽取出来,然后每个子项目再继承,从而达到重用的目的。本来嘛, ...
我觉得要清理一下关于进程和线程的基本概念。
首先就是进程。
什么是进程呢?简单的说就是cpu的一个执行过程,在这个过程中,os为它分配独立的内存空间,这样就保证不被别的进程影响。单任务的os就是说多个进程间只能 ...