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 |
| 智能代码补全 | 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 |
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());
}
}
菜单 > 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 ComponentsStep By Step:按照帮助一步一步的操作。
)图标可以查看线程相关信息。如下图:

Linux中的kill命令用来终止指定的进程,最常用的杀死进程的命令是 kill -9 pid,很多人用过这个命令,却不知道-9是什么意思。
类从加载到虚拟机到卸载,它的整个生命周期包括:加载(Loading),验证(Validation),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸载(Unloading)。其中,验证、准备和解析部分被称为连接(Linking)。
vboxmanage list vms
vboxmanage list runningvms
vboxmanage startvm hadoop1 --type gui #界面方式启动
vboxmanage startvm hadoop1 --type headless #后台无界面启动
vboxmanage controlvm hadoop1 acpipowerbutton # 关闭虚拟机,等价于点击系统关闭按钮
vboxmanage controlvm hadoop1 poweroff # 关闭虚拟机,等价于直接关闭电源,非正常关机
vboxmanage controlvm hadoop1 pause # 暂停虚拟机的运行
vboxmanage controlvm hadoop1 resume # 恢复暂停的虚拟机
vboxmanage controlvm hadoop1 savestate # 保存当前虚拟机的运行状态
chkconfig命令chkconfig -–listchkconfig –-add iptableschkconfig -–list iptableschkconfig iptables on/etc/rc.d/rc.local文件vim /etc/rc.d/rc.local
#添加开机执行的命令
/usr/sbin/apachectl start
/etc/rc.d/init.d/mysqld start
/etc/rc.d/init.d/smb start
/usr/local/subversion/bin/svnserve -d
问题:
[root@w ~]# vgscan
Reading all physical volumes. This may take a while...
WARNING: Duplicate VG name vg_w: Existing nMjHCd-6EUR-66l4-y27E-n5is-i1Q4-ddqest (created here) takes precedence over Bju7iV-coBV-RZLb-SZX6-ol3Z-fO1A-bvSTw6
WARNING: Duplicate VG name vg_w: Existing nMjHCd-6EUR-66l4-y27E-n5is-i1Q4-ddqest (created here) takes precedence over Bju7iV-coBV-RZLb-SZX6-ol3Z-fO1A-bvSTw6
Found volume group "vg_w" using metadata type lvm2
Found volume group "vg_w" using metadata type lvm2
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.
记录一些git的常用命令
开发过程中需要针对开发环境,正式环境等进行不同的参数配置,比如开发环境使用H2数据库做简单测试,正是环境使用mysql数据库。如果手动管理这些配置信息会很麻烦,最重要的是可能会因为操作失误导致一些错误。因此需要对不同环境的配置信息进行集中管理。
spring 3.1版本提供了profile配置机制,同时maven对profile也有支持,我们将使用mavne + spring 的profile管理不同环境的配置数据。
| 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 | 依赖倒置原则 |
mongodb的安装和简单启动配置
SolrCloud 是基于Solr和Zookeeper的分布式搜索方案,是Solr4.X的核心组件之一,它的主要思想是使用Zookeeper作为集群的配置信息中心。它有几个特色功能:

Solr作为一个搜索服务器,在并发搜索请求的场景下,可能一台服务器很容易就垮掉,这时我们可以通过使用分布式技术,设置多台Solr搜索服务器同时对外提供搜索服务,这样每台Solr搜索服务器搜索请求的压力可以大大减小,增强了每台服务器能够持续提供服务器的能力。然而,这时我们面临的问题有:
事实上,Solr框架在上面的几个方面都能做到不错的支持,具有很大的灵活性。基于上述的几个问题,我们来配置Solr分布式的Replication,并实践分布式复制和备份的功能。
maven创建项目
mvn archetype:generate -DarchetypeCatalog=internal -Dfilter=maven
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是集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览Heap Dump、Thread Dump、内存对象实例情况、GC执行情况、CPU消耗以及类的装载情况。
Oracle使用的一些记录
在存在代理的网络中无法直接通过ssh连接远程主机,这就需要通过corkscrew来为ssh设置代理.