2009年3月27日星期五

virtualbox

受不了wine,装个virtual,再架个xp齐活,还有那狗屁网银。

安装,一会就好了:
$sudo apt-get install virtualbox

运行:
$virtualbox
但是运行却报错:
VirtualBox kernel driver not installed. The vboxdrv kernel module was either not loaded or /dev/vboxdrv was not created for some reason. Re-setup the kernel module by executing '/etc/init.d/vboxdrv setup' as root.

VBox status code: -1908 (VERR_VM_DRIVER_NOT_INSTALLED).

还有-1909的错误,网上还不少人出这个错误,搜索一下一把。归结为内核模块未安装,以及权限:
$sudo apt-get install virtualbox-ose virtualbox-ose-modules-$(uname -r)
$sudo chmod ugo+rw /dev/vboxdrv

安装好了,再试试!!

2009年3月20日星期五

SOA架构图

数据库翻页

1.Oracle
select * from ( select rownum idx,* from TableName ) where idx >= ? and idx <= ?

2.SQL Server
select top @pagesize * from tablename where id notin (
select top @pagesize*(@page-1) id from tablenameorder by id
) order by id

3.MySQL
select * from tablename limit position, counter

4.DB2
select * from (
select *,rownumber() over(字段 ASC) as idx from TableName )
where idx >= ? and idx <= ?

公钥私钥SSL

一,公钥私钥
1,公钥和私钥成对出现
2,公开的密钥叫公钥,只有自己知道的叫私钥
3,用公钥加密的数据只有对应的私钥可以解密
4,用私钥加密的数据只有对应的公钥可以解密
5,如果可以用公钥解密,则必然是对应的私钥加的密
6,如果可以用私钥解密,则必然是对应的公钥加的密
明白了?

假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们,然后我告诉大家,1是我的公钥。

我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用数字2,就是我的私钥,来解密。这样我就可以保护数据了。

我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。

现在我们知道用公钥加密,然后用私钥来解密,就可以解决安全传输的问题了。如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知道我的公钥是1,那么这种加密有什么用处呢?

但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他解密看是不是c。他用我的公钥1解密,发现果然是c。这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。

好,我们复习一下:
1,公钥私钥成对出现
2,私钥只有我知道
3,大家可以用我的公钥给我发加密的信了
4,大家用我的公钥解密信的内容,看看能不能解开,能解开,说明是经过我的私钥加密了,就可以确认确实是我发的了。

总结一下结论:
1,用公钥加密数据,用私钥来解密数据
2,用私钥加密数据(数字签名),用公钥来验证数字签名。

在实际的使用中,公钥不会单独出现,总是以数字证书的方式出现,这样是为了公钥的安全性和有效性。

二,SSL
我和我得好朋友x,要进行安全的通信。这种通信可以是QQ聊天,很频繁的。用我的公钥加密数据就不行了,因为:
1,我的好朋友x没有公私钥对,我怎么给他发加密的消息啊? (注:实际情况中,可以双方都有公私钥对)
2,用公私钥加密运算很费时间,很慢,影响QQ效果。

好了,好朋友x,找了一个数字3(注:会话密钥),用我的公钥1,加密后发给我,说,我们以后就用这个数字来加密信息吧。我解开后,得到了数字3。这样,只有我们两个人知道这个秘密的数字3,别的人都不知道,因为他们既不知x挑了一个什么数字,加密后的内容他们也无法解开,我们把这个秘密的数字叫做会话密钥。

然后,我们选择一种对称密钥算法,比如DES,(对称算法是说,加密过程和解密过程是对称的,用一个密钥加密,可以用同一个密钥解密。使用公私钥的算法是非对称加密算法),来加密我们之间的通信内容。别人因为不知道3是我们的会话密钥,因而无法解密。

好,复习一下:
1,SSL实现安全的通信
2,通信双方使用一方或者双方的公钥来传递和约定会话密钥 (这个过程叫做握手)
3,双方使用会话密钥,来加密双方的通信内容
上面说的是原理。大家可能觉得比较复杂了,实际使用中,比这还要复杂。不过庆幸的是,好心的先行者们在操作系统或者相关的软件中实现了这层(Layer),并且起了一个难听的名字叫做SSL,(Secure Socket Layer)。

2009年3月17日星期二

2次出现String.repalce问题

以前遇到类似的问题,今天有来了:
public class Test {
public static void main(String[] args) {
String ss = "aaa $VALUE$ bbb";
System.out.println(ss.replaceAll("$VALUE$", "ccc"));
}
}

说明这个$符号还真不能乱用。结果如下(没变):
================
aaa $VALUE$ bbb

2009年3月15日星期日

js对url编码

在使用中参数值包含"+",传到server总是一个空格的字符串,这就需要编码,但使用encodeURI和escape不能解决问题,g了一下,使用encodeURIComponent才是正解。

查到的信息如下==================================
javascript 常用的编码格式有:escape(), encodeURL(), encodeURIComponent() 区别如下:

escape() 方法:

采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。
不会被此方法编码的字符: @ * / +


encodeURI() 方法:

把URI字符串采用UTF-8编码格式转化成escape格式的字符串。
不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '

encodeURIComponent() 方法:

把URI字符串采用UTF-8编码格式转化成 escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。
不会被此方法编码的字符:! * ( ) '
因此,对于中文字符串来说,如果不希望把字符串编码格式 转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而 接受参数的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。
另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在javascript1.0版本就有。

2009年3月13日星期五

mvn有时让人费解

在运行mvn compile时,总是出错:
The plugin 'org.apache.maven.plugins:maven-resources-plugin' does not exist or no valid version could be found

以前用还好好的,为什么突然报错,配置错了(这期间没有修改)。再使用-U试试,又可以了:
mvn -U compile

-U参数的含义:
-U,--update-snapshots Forces a check for updated releases and
snapshots on remote repositories
呵呵,在编译时需要联到remote服务器上,虽然我在本机上架上一个伺服器,作为maven中心库的代理。在每次编译时,即使不使用到网上的库(本地伺服器中心已经有),但还要使用网络,若网络不通,编译等操作不成功。

2009年3月8日星期日

测试不容易

测试人员提交过来的缺陷:

测试人员不容易:
1. 设计测试场景;
2. 生成测试数据;
3. 人肉少不了,工具不是万能;
4. 跟踪bug状态;
5. 测试的评估及报告;
6. 背黑锅:上线后出现的bug,测试负责(很大部分),心寒。

2009年3月4日星期三

java的一小陀问题

  • 1. 多线程jdk5的线程包
wait和sleep比较,join
同步,线程安全。
  • 2. jvm垃圾回收机制、jvm优化。
  • 3. JVM装载,以及classload,Class.forName
  • 4. ThreadLocal
  • 5. 反射,动态代理
public class BusinessObject implements BusinessInterface {

 private Logger logger = Logger.getLogger(this.getClass().getName());
 public void processBusiness(){
  //business processing
  System.out.println(“here is business logic”);
 }
}

BusinessInterface businessImp = new BusinessObject();

InvocationHandler handler = new LogHandler(businessImp);

BusinessInterface proxy = (BusinessInterface) Proxy.newProxyInstance(
 businessImp.getClass().getClassLoader(),
 businessImp.getClass().getInterfaces(),
 handler);

proxy.processBusiness();

  • 6. 字节码操作CGLIB
  • 7. 系统优化
  • 8.