MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Hessian 是由 caucho 提供的一个基于 binary-RPC 实现的远程通讯 library

问题:
服务器端用java,客户端也必须用java吗?

有人说Hessian效率不够高,还说kryo是个高效的Java序列化库,kryonet是一个基于kryo的RPC库,使用TCP和UDP通讯,目前不支持http协议。

参考:
http://blog.sina.com.cn/s/blog_56fd58ab0100o4wv.html
http://otom31.javaeye.com/blog/141043
http://liuwangxia.javaeye.com/blog/761709

posted @ 2011-03-03 00:24 leekiang 阅读(427) | 评论 (0)编辑 收藏

http://blog.sina.com.cn/s/blog_56fd58ab0100mrl6.html
http://java.chinaitlab.com/rcj/791632.html

posted @ 2011-03-03 00:01 leekiang 阅读(240) | 评论 (0)编辑 收藏

OSI是Open System Interconnect的缩写,意为开放式系统互联。国际标准组织(国际标准化组织)制定了OSI模型。这个模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

IP、ARP等在第三层
TCP、UDP在第四层
HTTP、FTP、SMTP、telnet等在第七层

posted @ 2011-03-02 23:42 leekiang 阅读(190) | 评论 (0)编辑 收藏

MongoDB是一个介于关系数据库和非关系数据库之间的产品,MongoDB的数据结构非常松散,他的数据格式类似json的bjson格式,因此可以存储比较复杂的数据类型。
主要功能是解决website的操作性数据存储,session对象的存储,数据缓存,高效率的实时计数(比如统计pv,uv)等

跟mysqld一样,一个mongod服务可以有建立多个数据库,每个数据库可以有多张表,这里的表名叫collection,每个collection 可以存放多个文档(document),每个文档都以BSON(binary json)的形式存放于硬盘中。跟关系型数据库不一样的地方是,它是的以单文档为单位存储的,你可以任意给一个或一批文档新增或删除字段,而不会对其它文 档造成影响,这就是所谓的schema-free,这也是文档型数据库最主要的优点。跟一般的key-value数据库不一样的是,它的value中存储 了结构信息,所以你又可以像关系型数据库那样对某些域进行读写、统计等操作。可以说是兼备了key-value数据库的方便高效与关系型数据库的强大功能。 出处


window下配置运行mongodb:
mongodb压缩包解压缩到目标目录,比如D:\mongodb,在d:\mongodb目录下创建db文件夹
打开cmd窗口,输入:
d:\mongodb\bin>mongod.exe –dbpath d:\mongodb\db
此时mongod进程运行起来,
再打开一个cmd窗口,输入:
d:\mongodb\bin\mongo.exe
进入mongodb命令模式

常用命令:
show dbs              查看有哪些数据库,默认会有admin,local两个数据库
db.serverStatus()     查询服务器状态
use testdb            打开数据库,没有的话立即建一个
db.testc.save({a:10}) 向 collection testc 中保存一条信息,没有collection的话立即建一个
db.testc.find()       检索所有记录
show collections      显示所有collection名字


Mongodb不支持内建的事务(没有内建事务不意味着完全不能有事务的功能),对于某些应用也就不适合,例如银行或会计系统。不过对于大部分的互联网应用来说并不存在这个问题。
适用场景见官方说明 http://www.mongodb.org/display/DOCS/Use+Cases

MongoDB support map/reduce operations

MongoDB中对象的最大尺寸被限制为4MB?

参考:
http://www.fushanlang.com/blog/install-windows-mongodb-302/
http://www.javaeye.com/topic/748322
http://www.jzxue.com/shujuku/shujukuzonghe/201005/19-3807.html
http://database.51cto.com/art/201005/198041.htm
mongodb小结 http://www.wentrue.net/blog/?p=772

posted @ 2011-03-02 04:27 leekiang 阅读(538) | 评论 (0)编辑 收藏

ICE

ICE( Internet Communications Engine)是一个面向对象的中间件平台。从根本上讲,这意味着ICE提供了一些工具、API和库用以开发面向对象的客户端-服务器的应用程序。 ICE应用程序适合于用在各种异构的环境中:客户端和服务器可以用不同的语言编写,能够运行在不同的操作系统、不同体系结构的机器上,可以用不同的网络技 术进行通讯(大概10种以上)。这些程序的源代码可以在不同的开发环境之间移植。


http://www.javaeye.com/topic/599109
http://masterkey.javaeye.com/blog/182954
http://masterkey.javaeye.com/blog/182975

posted @ 2011-03-02 00:15 leekiang 阅读(239) | 评论 (0)编辑 收藏

IBatis 怎样直接执行SQL语句:
<sqlMap namespace="bbs_define">
    <!– selectBySql –>
    <select id="selectBySql" resultClass="java.util.HashMap"
        remapResults="true"
        parameterClass="java.util.HashMap">
        <isNotEmpty property="sql">$sql$</isNotEmpty>
    </select>  
    <!– updateBySql –>
    <update id="updateBySql" parameterClass="java.util.HashMap">
        <isNotEmpty property="sql">$sql$</isNotEmpty>
    </update>  
</sqlMap>

其中最重要的设置是“remapResults="true"”。remapResults设置成true,表示结果字段可以是不定的。也就是说,这次可返回“ID,NAME”两个字段,下次何返回“ID,NAME,TYPE_ID”三个字段,也可以返回“*”

用ibatis实现数据切分:
http://code.google.com/p/shardbatis/
http://code.google.com/p/ibatis-sharding/
阿里开源的CobarClient(http://www.javaeye.com/topic/977224)

参考:
1,Ibatis的动态SQL http://hz.seraph.blog.163.com/blog/static/981677452008111902458957/
2,使用ibatis的一点小技巧 http://qa.taobao.com/?p=7371
3,http://www.ibm.com/developerworks/cn/opensource/os-cn-ibatis/?ca=drs-tp4608
4,http://itnewsvendor.appspot.com/2303004-ibatis_%E6%95%B4%E7%90%86_batis.html
5,http://itnewsvendor.appspot.com/4633016-ibatis_2.x_%E6%97%A5%E5%BF%97.html
6,http://blog.sina.com.cn/s/blog_63f93f510100i16h.html
7,http://lijingyao8206.javaeye.com/blog/840204
8, http://qa.taobao.com/?p=7677
9,http://blog.csdn.net/sunyujia/archive/2008/07/13/2646030.aspx
10,iBATIS不适合使用的四种情况浅析 http://developer.51cto.com/art/200907/136897.htm
11,http://blog.sina.com.cn/s/blog_63f93f510100i16h.html
12,IBatis下DAO单元测试另类思路

posted @ 2011-02-26 22:47 leekiang 阅读(739) | 评论 (0)编辑 收藏

打印Thread.currentThread().getContextClassLoader(),显示如下:
sun.misc.Launcher$AppClassLoader@19821f
这个加载器是系统类加载器。ClassLoader.getSystemResourceAsStream("com/config.xml")使用的就是系统类加载器定位资源的。


    //JDK1.6,java.lang.ClassLoader的loadClass(String name, boolean resolve)方法的源码
protected synchronized Class<?> loadClass(String name, boolean resolve)
    
throws ClassNotFoundException
    {
    
// First, check if the class has already been loaded
    Class c = findLoadedClass(name);
    
if (c == null) {
        
try {
        
if (parent != null) {
           //
如果parent不为null,则调用parent的loadClass进行加载 
            c = parent.loadClass(name, false);
        } 
else {
           //
parent为null,则调用BootstrapClassLoader进行加载
            c = findBootstrapClassOrNull(name);
        }
        } 
catch (ClassNotFoundException e) {
                
// ClassNotFoundException thrown if class not found
                
// from the non-null parent class loader
         }
       
if (c == null) {
            
// If still not found, then invoke findClass in order to find the class.
            //
如果仍然无法加载成功,则调用自身的findClass进行加载
            c = findClass(name);
        }
    }
    
if (resolve) {
        resolveClass(c);
    }
    
return c;
    }

java中共有三种类型的类加载器:
    1、引导(bootstrap)类加载器(用来加载java API类),例如加载java.lang.String类
    2、扩展类加载器(就是sun.misc.Launcher$ExtClassLoader,用来加载jre\lib\ext目录下的jar包)
    3、系统类加载器(就是sun.misc.Launcher$AppClassLoader,主要用来加载CLASSPATH设置目录中的Class)

创建一个URLClassLoader,发现其父加载器(parent,注意不是父类)的类型为sun.misc.Launcher$AppClassLoader,而sun.misc.Launcher$AppClassLoader和sun.misc.Launcher$ExtClassLoader的父类都是URLClassLoader。AppClassLoader的父加载器是ExtClassLoader,ExtClassLoader的父加载器为null,即bootstrap类加载器。

类加载有个双亲委托模式,
AppClassLoader的父加载器是ExtClassLoader ,ExtClassLoader 的父加载器是bootstrap classloader,bootstrap 是C++写的类加载器,会负责加载java核心类库,就是jre/lib/rt.jar
ExtClassLoader会加载扩展类库,就是jre/lib/ext下的库。

双亲委托模式就是子加载器会先委托父加载器加载,父加载器加载不了子加载器才加载,
这样做避免了重复加载,也加强了java的安全了,防止了恶意加载器去加载核心库。

String name = "com.domain.Account";
            
            URL url1 
= new URL("file:/D:/workspace/test/bin/");
            ClassLoader cl 
= new URLClassLoader(new URL[] { url1 });
            Class c1 
= cl.loadClass(name);
            
            URL url2 
= new URL("file:/D:/workspace/test/bin");
            ClassLoader cl2 
= new URLClassLoader(new URL[] { url2 });
            Class c2 
= cl2.loadClass(name);
            
            System.out.println(c1
==c2);//返回true,原因是都是用系统类加载器AppClassLoader加载的

注意:
1,在类A中使用Class.forName加载类B,那么加载类A的类加载器将会用于加载类B,这样两个类的类加载器是同一个。
2,Class.forName("")和classLoader.load("")的区别主要是前者会做初始化,后者不会。见jdk注释:A call to forName("X") causes the class named X to be initialized.  自己分别用两种方式装载一个带静态代码的类就知道了。jdbc需要通过Class.forName("")的方式来装载JDBC驱动程序(例如 Class.forName("com.mysql.jdbc.Driver"),之所以用Class.forName而没有用 ClassLoader.load(),就是因为需要JVM完成Driver的初始化工作,而不仅仅是装载),然后通过一个统一的工厂类 Java.sql.DriverManager来取得数据库连接,并执行各种操作。Class.forName("")不仅load class而且还保证resolve这个class,包括常量池解析,类初始化。。。这样JDBC驱动使用这个方法,才能保证类里的静态方法执行,一般驱动类的静态方法会向DriverManager注册自己,如果用classloader.load("")就不一定会resolve这个class,也就不能保证注册驱动类!
看了com.mysql.jdbc.Driver类的源码,静态代码就一句:java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver())
3,

参考
1)java系统类加载器AppClassLoader之浅谈 http://blog.sina.com.cn/s/blog_4db6a3f101000do1.html
2)java类加载原理分析 http://gongmingwind.javaeye.com/blog/338366
3)解读ClassLoader http://www.javaeye.com/topic/83978
4)http://xyiyy.javaeye.com/blog/362107

Retrotranslator是一个Java字节码转换工具。它能够把用JDK5.0编译的Java Class转换成可运行在JVM1.4

posted @ 2011-02-24 17:58 leekiang 阅读(413) | 评论 (0)编辑 收藏

xp下运行MySQL Workbench 5.2报错:应用程序正常初始化(0xc0000135)失败,原来是要安装.net framework3.5。


MySQL和PostgreSQL的情况就很类似Oracle两种不同的运行方式:MySQL是多线程模型,类似Oracle的MTS,每个数据库线程消 耗很少的资源,数据库服务器能够负载很多的并发连接线程;而PostgreSQL类似Oracle的Dedicate,每个数据库进程消耗比较多的资源, 负载能力比较差,但是复杂查询的执行效果更好。
特别值得一提的是,在以前的Linux操作系统下,传统的多线程程序并不能够表现出比多进程程序优越得多的性能。这是因为Linux操作系统不支持内核级多线程,只支持用户级多线程,在Linux的内核中用轻量级进程来模拟线程,映射到用户级线程上。
但是Linux Kernel 2.6引入的NPTL改变了这一状况(事实上我把NPTL看成Linux在服务器操作系统领域的一次里程碑式的进步)。NPTL使得内核支持多线程,极大 的提高了多线程程序的性能。关于NPTL给多线程程序带来的巨大的性能提升,我这里就有一个活生生的例子,请看:
http://forum.iteye.com/viewtopic.php?t=5322
操作系统Kernel从2.4升级到2.6以后(主要是增加了NPTL),Java应用服务器的网络处理性能提升了5倍之多! (网络处理性能代表了高并发情况下的负载能力和响应能力)
来源:http://www.iteye.com/topic/13042

远程连接mysql慢的原因可能有:
1)连接数太多了,很多都是Sleep进程。show processlist
2)网络慢
3)mysql开启了dns的反向解析
4)跨内网网段


远程连接mysql速度慢的解决方法:skip-name-resolve取消DNS的反向解析
在my.cnf中[mysqld]部分加入: skip-name-resolve 。但这样会引起一个问题:连接mysql时,不能使用 localhost连接了,而是要使用ip地址的;如果是按localhost对用户赋权限的话,用户登录权限也要修改一下的。


MyISAM InnoDB 区别

posted @ 2011-02-22 19:05 leekiang 阅读(559) | 评论 (0)编辑 收藏

tinycore 约10M
puppy linux 约100M

参考:
http://dan.febird.net/2009/05/41856-tinycore-linux-grub4dos.html
http://dan.febird.net/2009/01/35687-u-disk-puppy-linux.html

posted @ 2011-02-18 00:08 leekiang 阅读(310) | 评论 (0)编辑 收藏

1,java体系结构包括四个独立但相关的技术:java语言、class文件格式、java的api、java虚拟机
2,java虚拟机是一台抽象的计算机,主要任务是装载class文件并且执行其中的字节码。不同的java虚拟机,其执行引擎的实现可能不一样。分为软件实现和硬件实现(内嵌在芯片),软件实现有以下几种:(1)每次都会解释字节码(2)即时编译,即编译成本低机器代码,缓存起来可以重用(3)自适应优化器
3,每一个类被装载的时候,java虚拟机都监视这个类,看它到底是被启动(bootstrap)类装载器还是被用户定义类装载器装载。当被装载的类引用了另外一个类时,虚拟机就会使用装载第一个类的类装载器装载被引用的类。由于java虚拟机采用这种方式进行类的加载,所以被装载的类默认情况下只能看到被同一个类装载器装载的类。通过这种方法,java的体系结构允许在一个java应用程序中建立多个命名空间。运行时的java程序中的每一个类装载器都有它自己的命名空间。
例子:浏览器上的java虚拟机为不同的网络地址创建不同的用户定义类装载器,用来装载不同来源的class文件,这种不同网址的applet就不会相互影响。
问题:1)自己写的类如果调用了java的api,那么类装载器是一个什么样的情况。同一个类可能被不同的类装载器装载?
      2)看一下tomcat的类装载器的实现
      3)java的虚拟机与ruby和python的有何区别?
      4)有没有一种打包工具,把java代码打包成不需要java虚拟机的本地可执行代码
      5)java的动态连接和动态扩展指的是什么?
4,java语言的特殊之处是程序既被编译又被解释。首先,编译器将程序编译为一种称之为java字节码(bytecode)的与平台无关的中间语言。解释器分析并运行每条java字节码指令。编译只发生一次;而解释在每次执行程序时都会执行(通常是如此,具体实现可能不一样)。



12,声明一个对象时不会运行类的静态区块,在以下情况下会运行静态区块:
    1)new一个对象时;
    2)调用静态方法时;
    3)Class.forName("类名")


参考
1,http://xyiyy.javaeye.com/blog/362092
2,http://xyiyy.javaeye.com/blog/362107

posted @ 2011-01-29 21:36 leekiang 阅读(572) | 评论 (0)编辑 收藏

仅列出标题
共54页: First 上一页 4 5 6 7 8 9 10 11 12 下一页 Last