JVM client模式和Server模式

JVM Server模式与client模式启动,最主要的差别在于:-server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升。JVM如果不显式指定是-server模式还是-client模式,JVM能够根据下列原则进行自动判断(适用于Java5版本或者Java以上版本)。

前段时间有个同事给我发了个java跟c++性能比较的文章,其中有个对比图引起了我的兴趣,意外的是,我感兴趣的不是java和c++的对比,而是java -server模式和java -client模式的对比。从来没想到两者间的性能有如此巨大的差别。而在后来自己的亲身测试中发现确实如此。

继续阅读

PHP5.6关于CURL上传文件的改动

PHP5.5版本之前,使用CURL上传文件时采用@+文件路径的方式。但在5.5开始,上传文件引入了新的CURLFile类进行更多的处理。好在5.5时传统办法还是可以用的,可是在5.6版本中,必须使用新的方式,老方法不再兼容。从而可能导致老代码出现文件上传不成功的错误。

判断PHP版本从而进行不同的操作是应对这一改变的有效办法。但是不建议使用版本号进行判断,这样在后续修改中很难看出这步操作到底为了解决什么问题。推荐使用class_exists进行判断。

if (class_exists ( 'CURLFile' )) {
	new CURLFile ( $path );
} else {
	'@' . $path;
}

以上写法应用于PHP5.3及以上,5.2版本由于没有命名空间,所以写的时候去掉可。

深入理解SetUID

在Linux系统中每个普通用户都可以更改自己的密码,这是合理的设置。问题是:用户的信息保存在文件/etc/passwd中,用户的密码保存在文件/etc/shadow中,也就是说用户更改自己密码时是修改了/etc/shadow文件中的加密密码,但是,LOOK——
-rw-r--r-- 1 root root 1787 Oct 27 2009 /etc/passwd
-r-------- 1 root root 1187 Oct 27 2009 /etc/shadow
/etc/passwd文件每个用户都有读权限但是只有root有写权限,/etc/shadow文件只有超级用户root有读写权限,也就是说普通用户对这两个文件都没有写权限无法写入新密码,为什么普通用户可以更改密码呢?
PS:Linux中设置或更改用户密码,是先写入到/etc/passwd文件然后通过pwconv命令转换到/etc/shadow文件,执行pwunconv命令可观察到转换前效果,会观察到/etc/shadow文件神奇的消失掉了,而/etc/passwd文件中原来打xx的地方变成了真正的加密密码。

继续阅读