深入JAVA虚拟机

做项目的时候,总觉得手头的技能不够用;现在总能对之前的一些话深有感触:书到用时方觉少;没办法,素材也就这样,收拾心情学吧!

本书阐述JAVA的三大特性:跨平台性、安全性及网络移动性;近几年互联网的活跃,给Java也注了一剂生长素;

针对JAVA的一套流程:
1、编辑器编写Java源码(.java文件)
2、java文件经过Java编译器编程成Class文件
3、java虚拟机加载class文件(由类加载器完成)解释执行成字节码,再由虚拟机中的执行引擎去执行字节码文件

执行引擎有多种策略:
1、一次性解释字节码
2、较上一种执行引擎更快,消耗内存(即时编译Just In Time Compiler);第一次执行的字节码会被编译成本地机器代码,编译出的本地机器代码会被缓存,当方法调用的时候可以重用
3、该种引擎是自适应优化器;虚拟机开始的时候解释字节码,会监事运行中的程序活动,并且激励下使用最频繁的代码段,程序运行的时候,虚拟机只把那些惠东最频繁的代码编译成本地代码,

《企业应用架构模式》~三层架构

这些天在阅读《企业应用架构模式》这本书的电子版,文章开篇就三层模式展开阐述,讲述三层模式产生的背景昨天刚看到第一部分的3.1–架构模式;现在想就我所看的做个总结:

三层架构即就是常用的MVC(Model-View-Controller)架构,即就是模型-视图-控制器;Model采用面向对象抽象出来的实体,对应于数据库中每一条记录,该层作为软件数据的载体;View只提供数据、信息的显示,不参与业务逻辑处理;Controller则具体操作业务逻辑的处理,针对项目的复杂程度来考虑是否需要service层;采用分层的优势到底在哪里?能非常便捷的重构项目,轻松的更换数据载体(数据库)、表现方式(网页、报表等),如业务需求发生变化只需要在逻辑业务层修改即可;至于更多的优点参考Google、bing或者sogou(现在觉得sogou比baidu搜索质量好);三层的劣势:过多的分层导致软件效率下降;层次不能封装所有东西,可能给我们讲带来级联修改(如果在界面增加显示一个数据域,可能需要在数据库增加字段,从而影响级联修改)–参考本书的说法。

阅读全文

线程设计面试题

昨天的关于JAVA Thread的面试题:设计四个线程,其中两个线程对j加1操作,另外两个线程对j减1操作。发现这个面试题网上一大片,我这里也简单地记录一下:

/**
 * @author effine
 * @date 2013-10-28  下午11:50:34
 */

public class InterviewThread {

    private int j = 0;

    public static void main(String args[]) {

        InterviewThread it = new InterviewThread();

        /* 实例化内部类 */
        Inc inc = it.new Inc();
        Dec dec = it.new Dec();

        /* 循环得到四个线程 */
        for (int i = 0; i < 2; i++) {
            Thread t = new Thread(inc);
            t.start();
            t = new Thread(dec);
            t.start();
        }
    } //main method finish

    /* 同步加1方法 */
    private synchronized void inc() {
        j++;
        System.out.println(Thread.currentThread().getName() + "-inc:" + j);
    }

    /* 同步减1方法 */
    private synchronized void dec() {
        j--;
        System.out.println(Thread.currentThread().getName() + "-dec:" + j);
    }

    /* 加1线程类 */
    class Inc implements Runnable {
        public void run() {
            for (int i = 0; i < 100; i++) {
                inc();
            }
        }
    }

    /* 减1线程类 */
    class Dec implements Runnable {
        public void run() {
            for (int i = 0; i < 100; i++) {
                dec();
            }
        }
    }
    
}

File Tree

看到windows文件资源管理器,突然想用Java来实现这种不同层的文件缩进,参考OSC中一个博主的思想,记录一下;Code如下:

/**
* @author effine
* @date 2013年10月26日  下午1:25:14
*/

import java.io.File;

public class FileTree {
public static int count = 0;

public static void parse(File[] files) {
    if (files.length == 0) {
        FileTree.count--;
        System.out.println();
        return;
    } else {
        for (File f : files) {
            if (f.isDirectory()) {
                FileTree.count++;
                for (int i = 1; i <= FileTree.count; i++) {
                    System.out.print("\t");
                }
                
                System.out.println(f.getName());
                File[] files2 = f.listFiles();
                
                FileTree.parse(files2);
            }
            
        }
        for (File f : files) {
            if (!f.isDirectory()) {
                for (int i = 0; i <= FileTree.count; i++) {
                    System.out.print("\t");
                }
                System.out.println(f.getName());
            }
        }
        FileTree.count--;
    }
    
}

public static void main(String[] args) {
        File file = new File("d:/test");
        File[] files = file.listFiles();
        FileTree.parse(files);
    }
}