04 2012 档案
摘要:随着近年来SOA(面向服务技术架构)的兴起,越来越多的应用系统开始进行分布式的设计和部署。系统由原来单一的技术架构变成面向服务的多系统架构。原来在一个系统之间可以完成的业务流程,通过多系统的之间多次交互来实现。这里不打算介绍如何进行SOA架构的设计,而是介绍一下应用系统之间如何进行数据的传输。应用系统之间数据传输有三个要素:传输方式,传输协议,数据格式数据传输方式一般无非是以下几种:1 socket方式Socket方式是最简单的交互方式。是典型才c/s 交互模式。一台客户机,一台服务器。服务器提供服务,通过ip地址和端口进行服务访问。而客户机通过连接服务器指定的端口进行消息交互。其中传输协议可
阅读全文
摘要:今天用了jmock对进行单元测试编码,发现一个比较奇怪的语法,见下面例子 mockery.checking(new Expectations() { { one(new Object()).toString(); will(returnValue("")); } }); 下面写一个写一个简单的类演示这个例子public class Test { int i = 1; { int j = 1; System.out.println(j); ...
阅读全文
摘要:最近在看《深入理解Java虚拟机:JVM高级特性与最佳实践》讲到了线程相关的细节知识,里面讲述了关于java内存模型,也就是jsr 133定义的规范。系统的看了jsr 133规范的前面几个章节的内容,觉得受益匪浅。废话不说,简要的介绍一下java内存规范。什么是内存规范在jsr-133中是这么定义的A memory model describes, given a program and an execution trace of that program, whetherthe execution trace is a legal execution of the program. For
阅读全文
摘要:最近在infoq上面看到 ebay介绍其系统架构变迁以及系统设计分享方面的讲座,其中陈述了ebay从1995年到2006年之间系统架构的变化过程。从这里,我们可以学习到许多宝贵的经验来设计一个大容量,高并发,分布式的系统。ebay的系统架构的变迁主要经历了4个阶段,下面一幅图展现了ebay系统架构变迁的时间表在ebay的V1版本,ebay采用的是FREEBSD + APACHE + PERL +DGBM,这是一个比较原始的模型,而且相对比较简单,操作系统,应用服务器,web服务器 以及 数据库服务器都是在同一台机器中,网络结构在物理上只有一层。整个网站有四个域名,每个域名对应不同的应用,每组应
阅读全文
摘要:最近看到很多文章,关于程序员的寿命的问题,刚开始我也感到比较有危机感,毕竟现在已经写过代码6年了,自己也快30岁了,谈谈自己的感受吧!目前在一家公司做系统分析师,专门做系统分析和设计,偶尔也参与编码。整体来说,很少有机会写代码了。但是个人的兴趣爱好还是技术,未来并没有考虑从管理路线,虽然曾经一度管理过 8个人的小团队,但是说实在的,管理是一门很虚的艺术,自己的性格不太适合。但是自己还是对技术有非常强烈的兴趣,学习新技术的动力还是非常强的,也一直经常性的看一些开源的代码,时刻提醒自己不要忘记如何写程序。而网上大多数人认为程序员40岁之后很少的原因无非有以下几个方面:1 在于40岁之后无论体力,精
阅读全文
摘要:最近看了关于java语言规范中关于final变量的介绍,一直很好奇为什么final定义的字段是jvm内部是如何处理的,今天写了一个测试类,看看用javac编译器编译出来的java class 字节码,以便连接final变量在jvm运行时候如何保证final变量的不变性。java class定义如下public class FinalVarClass { public void test(){ final int a=1; int b=a; System.out.println(a); }} 用javac 编译器进行编译(jdk版本1.6 ,操作系统 mac os x),用javap 进行...
阅读全文
摘要:Nested Classes定义在java语言规范里面,嵌套类(Nested Classes)定义是:A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class that is not a nested class.说的简单一点,就是定义在类里面的类。一般把定义内部类的外围类成为包装类(enclosing class)或者外部类嵌套类分类根据nested class定义的地方,可以分为member
阅读全文
摘要:看了一位博友的一片文章,讲解的是关于java中关于try、catch、finally中一些问题下面看一个例子(例1),来讲解java里面中try、catch、finally的处理流程public class TryCatchFinally { @SuppressWarnings("finally") public static final String test() { String t = ""; try { t = "try"; return t; } catch (Exception e) { // result = "
阅读全文
摘要:大学的时候,就看过java虚拟机规范第二版,最近把最新的Java虚拟机规范第三版(java se 1.7版本)温习了一遍,发现java虚拟机规范中java class的文件结构部分并没有太大的变化,顺便也整理了一下。java语言是跨平台的,所谓一次编写,到处运行。之所以是跨平台的,就是java定义了一套与操作系统,硬件无关的字节码格式,这个字节码就是用java class文件来表示的,java class文件内部定义了虚拟机可以识别的字节码格式,这个格式是平台无关性的,在linux系统或者在windows系统上都是一致的。这个就好比html文件,我们定义好规范,这个系统只要去按照规范显示出来里
阅读全文
摘要:上一篇文章 介绍了jvm虚拟机运行时内存结构以及如何标识需要回收的对象,这一节主要讲解垃圾回收的基本算法。基本上 jvm内存回收有三种 基本算法标记-清除标记清除的算法最简单,主要是标记出来需要回收的对象,然后然后把这些对象在内存的信息清除。如何标记需要回收的对象,在上一篇文章里面已经有说明。标记-清除-压缩这个算法是在标记-清除的算法之上进行一下压缩空间,重新移动对象的过程。因为标记清除算法会导致很多的留下来的内存空间碎片,随着碎片的增多,严重影响内存读写的性能,所以在标记-清除之后,会对内存的碎片进行整理。最简单的整理就是把对象压缩到一边,留出另一边的空间。由于压缩空间需要一定的时间,会影
阅读全文
摘要:今天在进行代码集成测试的时候,对集成测试的java代码进行 run-Junit Test,本来应该console应该打印出来运行信息的但是实际console打印出来的如下图所示:个人觉得相当好奇,但是在同一个workset的里面的其他工程就没有问题根据eclipse的运行原理,其实run-junit Test 就是 执行javaw –classpath ***/**.jar ***/***/Test 类似的命令 和run-application 其实是一样的。那么就写了添加了一个main方法,期望应该是一样的结果,果真运行run-application之后,console显示的结果和上面的一样
阅读全文
摘要:最近开始学习IOS编程,自然开始接触了Object C 语言,下午看着例子进行了手动尝试了编码,对整个语言有基本的了解。在Xcode创建Object C class文件,基本的class文件结构相比java语言 ,还是是简单多了,整体的文件结构首先是头文件,后缀是以 .h头文件,这个文件定义了class的基本结构,有点类似一个类模板,定义class的结构信息头文件部分#import <目录/头文件.h> //代表只引入系统库的类的头文件#import "目录/头文件.h" // 代表默认从当前路径下搜索是否存在对应的头文件,如果不存在,则从系统库里面类变量部分s
阅读全文
摘要:以前看过很多次关于垃圾回收相关的文章,都只是看过就忘记了,没有好好的整理一下,发现写文章可以强化自己的记忆。java与C,c++有很大的不同就是java语言开发者不需要关注内存信息,不会显式的直接操作内存,而是通过jvm虚拟机来实现。java虚拟机运行的时候内存分配图如下图:jvm虚拟机栈:一个是线程独有的,每次启动一个线程,就创建一个jvm虚拟机栈,线程退出的时候就销毁。这里面主要保存线程本地变量名和局部变量值。本地方法栈: 调用本地jni方法的时候而创建的。这里分配的jvm之外的内存空间。方法调用结束之后销毁。pc寄存器 : 这个保存线程当前执行的字节码指令堆:主要保存创建的对象。方法区:
阅读全文
摘要:在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。synchronized同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线程访问的时候,同一时刻只能有一个线程能够用synchronized 修饰的方法 或者 代码块。volatile用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。vola
阅读全文