IntelliJ IDEA 快捷键

2018/06/12
智能代码补全 Ctrl + Shift + Space ⌃⇧Space
搜索全部 Double Shift Double⇧
显示意向行动和快速修复 Alt + Enter ⌘↩︎
生成代码 Alt + Insert ⌘N,⌃↩︎
参数信息 Ctrl + P ⌘P
展开选择 Ctrl + W ⌥⌘↑
搜索选择 Ctrl + Shift + W ⌥⌘↓
最近文件弹出窗口 Ctrl + E ⌘E
重命名 Shift + F6 ⇧F6

阅读全文


Java8 入门

2018/05/18

Lambda 表达式

Lambda Expression:匿名函数,闭包。

闭包的书写格式:

// 单条表达式语句
(args)->expression

// 多条表达式语句
(args)->{
  expression;
  expression;
}

示例:

import java.util.function.BiFunction;
import java.util.function.Function;

import org.junit.Test;

public class LambdaTest {

    // 没有参数没有返回值的lambda
    @Test
    public void testRunnable() {
        Runnable runnable = () -> System.out.println("this is a Runnable1!");
        new Thread(runnable).start();
        runnable = () -> {
            System.out.println("this is a Runnable2!");
        };
        new Thread(runnable).start();

        runnable = () -> {
            String x = "this is a Runnable3!";
            System.out.println(x);
        };
        new Thread(runnable).start();

        runnable = this::printlnNow;
        new Thread(runnable).start();

        new Thread(() -> System.out.println("this is a Runnable1!")).start();

        new Thread(() -> {
            System.out.println("this is a Runnable2!");
        }).start();

        new Thread(() -> {
            System.out.println("this is a Runnable2!");
        }).start();

        new Thread(() -> {
            String x = "this is a Runnable3!";
            System.out.println(x);
        }).start();

        new Thread(this::printlnNow).start();
    }
    // 一个参数有返回值的lambda
    @Test
    public void testFunction() {
        Function<String, Integer> function = (input) -> Integer.valueOf(input);
        System.out.println(function.apply("1234"));
        function = input -> Integer.valueOf(input);
        System.out.println(function.apply("1234"));
        function = Integer::valueOf;
        System.out.println(function.apply("1234"));
        function = input -> {
            input = input + "";
            return Integer.valueOf(input);
        };
        System.out.println(function.apply("1234"));
    }

    // 多个参数有返回值的lambda
    @Test
    public void testBiFunction() {
        BiFunction<Integer, Integer, Integer> biFunction = (a, b) -> Math.min(a, b);
        // biFunction = a, b -> Math.min(a, b); // error
        System.out.println("min value is : " + biFunction.apply(1, 2));
        biFunction = Math::max;
        System.out.println("max value is : " + biFunction.apply(1, 2));
    }

    public void printlnNow() {
        System.out.println("now is " + System.currentTimeMillis());
    }
}

阅读全文


Eclipse Memory Analysis Tools简单使用说明

2018/05/17

打开dump文件

菜单 > File > Open Heap Dump

第一次打开文件MAT进行分析处理会比较慢。

打开以后会展示如下效果

上图中的几个主要信息:

  • Details: 堆内存大小(Size)、类的数量(Classes)、对象的数量(Objects)、类加载器的数量(Class Loader)。
  • Biggest Objects by Retained Size:堆内存中最大的对象及占用内存大小。当鼠标移动到饼图的某个区域后在窗口的左面会显示出一些详细信息(包含类的信息、静态变量、类变量、类结构等)。
    • List objects -> with outgoing references:查看此对象引用的外部对象.
    • List objects -> with incoming references:查看引用此对象的外部对象.
    • Path To GC Roots: 查看对象的GC Root路径。
      • exclude xxx references:排除一些软引用、弱引用、虚引用.如果只有强引用存在,GC就一直无法回收对象,进而导致内存泄露。
  • Actions:列出一下常用的操作。
    • Histogram:列出每个类的对象数量和占用内存大小,默认使用Shallow Heap排序。
    • Dominator Tree:列出堆中占用比较大的类型,按照内存占用大小排序。
    • Top Consumers:按照类、类加载器和包等信息进行分组展示出最大的对象。
    • Duplicate Classes:列出被多个类加载器重复加载的类列表。
  • Reports:一些统计报表
    • Leak Suspects:泄漏分析报告。报告中尝试找出可能导致内存泄露的地方,并对找到的可以地方做了详细描述。
    • Top Components
  • Step By Step:按照帮助一步一步的操作。
  • 点击齿轮()图标可以查看线程相关信息。如下图:

阅读全文


JVM 类加载过程

2016/08/03

类从加载到虚拟机到卸载,它的整个生命周期包括:加载(Loading),验证(Validation),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸载(Unloading)。其中,验证、准备和解析部分被称为连接(Linking)。

阅读全文


Spock参考文档

2015/06/29

Spock is a testing and specification framework for Java and Groovy applications. What makes it stand out from the crowd is its beautiful and highly expressive specification language.

阅读全文


使用Maven管理spring环境的profile定义

2014/11/14

开发过程中需要针对开发环境,正式环境等进行不同的参数配置,比如开发环境使用H2数据库做简单测试,正是环境使用mysql数据库。如果手动管理这些配置信息会很麻烦,最重要的是可能会因为操作失误导致一些错误。因此需要对不同环境的配置信息进行集中管理。

spring 3.1版本提供了profile配置机制,同时maven对profile也有支持,我们将使用mavne + spring 的profile管理不同环境的配置数据。

阅读全文


面向对象设计的SOLID原则

2013/10/01

SOLID简介

SRP The Single Responsibility Principle 单一责任原则
OCP The Open Closed Principle 开放封闭原则
LSP The Liskov Substitution Principle 里氏替换原则
ISP The Interface Segregation Principle 接口分离原则
DIP The Dependency Inversion Principle 依赖倒置原则

阅读全文


maven记录

2013/04/23
  1. maven创建项目

     mvn archetype:generate -DarchetypeCatalog=internal -Dfilter=maven
    
  2. Maven内置变量说明:

    • ${basedir} 项目根目录
    • ${project.build.directory} 构建目录,缺省为target
    • ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
    • ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
    • ${project.packaging} 打包类型,缺省为jar
    • ${project.xxx} 当前pom文件的任意节点的内容

阅读全文


VisualVM的RMI方式监控JVM

2013/01/23

VisualVM是集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览Heap Dump、Thread Dump、内存对象实例情况、GC执行情况、CPU消耗以及类的装载情况。

阅读全文