浅谈可重入性及其他

点击量:192

这篇文章主要讨论三个问题:1.什么是可重入性 2.什么是可重入锁 3.什么是ReentrantLock
首先为什么会讨论可重入性呢?大家知道java中有一个非常常用的类库叫ReentrantLock,中文翻译成可重入锁,每次看到这个翻译我的第一反应就是什么是可重入锁?为什么要这么命名呢?那么什么是ReentrantLock呢?Oracle的官方文档给出的解释是这样的:

A reentrant mutual exclusion Lock with the same basic behavior and semantics as the implicit monitor lock accessed using synchronized methods and statements, but with extended capabilities.

意思就是ReentrantLock和synchronized关键字所起的基本作用是一样的,但是提供了更多的扩展功能。看了这个解释并没有解答我的困惑,官方文档并没有解释什么是可重入锁,只是说了ReentrantLock提供了更多的功能。那么什么[……]

继续阅读

Combinations

点击量:135

Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
For example,
If n = 4 and k = 2, a solution is:

[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

这题没有什么特别的思路吧,递归遍历。代码如下:

Climbing Stairs

点击量:135

You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

思路:这个题目第一反应是用递归去计算,于是有了下面的代码:

这样的思路最简单,但是仔细看看就会发现,递归里有很多重复计算,而且当n很大时,这种方法的函数堆栈压的太深,栈溢出导致效率很低。
那么就得换一种思路了,其实到达第n级楼梯的步数(f(n))就等于前一级楼梯的步数f(n – 1) 和前二级楼梯的步数f(n -2)之和。为什么呢?因为每次只能走一步或者两步!因此,代码如下:

这种方式没有递归,非常快。

java中不同数据类型的内存分配方式

点击量:122

首先,在java中一共有两种数据类型,基本类型(primitive types)和引用类型(reference types)。

基本类型
java中的基本类型一共有八种,即byte, int, short, long, float, double, boolean, char。这些类型所申明的变量都是字面值,比如int a = 1,也就是说变量a指向的是1这个值,并没有对象和引用。值得注意的是,为了提高存储的速度,基本类型的变量内存都是存储在栈中的,而栈中的数据是是可以共享的。因此当我们同时声明两个同样字面值的变量时,编译器只会分配同一块内存。这个过程就是先在栈中查找是否存在这样的字面值,如果有则指向那块内存,如果没有就新分配一块内存。因此如果两个变量同时指向一个值,比如:int a = 1;int b = 2;当a的值被改变的时候,b的值并不会被改变,正如前面所说,a的值被改变时会重新去分配一块内存。
引用类型
主要包括一些对基本类型进行封装的类(又称为包装类),比如String,Integer,Double等,还有一些自定义的类。自定义类一般是显式的使用new关键字来告[……]

继续阅读

linux命令行usage格式解释

点击量:245

经常要在Linux下面敲指令,但指令太多很多是忘了记,记了又忘。其实这些指令不用一个一个去记,每一个命令都会有帮助和提示。之前我一看到这些提示就头大,什么方括号,尖括号,省略号,杠之类的,今天静下心来专门学习这个东西,了解完之后发现还是比较简单的,这样遇到新的命令自己学习一下就知道如何使用了,不用再去一个一个查询和记忆了。

帮助的格式一般分以下几种:

方括号[]:表示可选参数,也就是说可以忽略,使用时没有方括号。

尖括号<>:表示必选参数,不能忽略,且尖括号里的输入只能是指定的option,使用时没有尖括号。

省略号…:表示重复多次的参数。

接下来我们以jstat为例,学习如何通过以上几个格式的含义一步步来学习使用一个新的指令。jstat是JDK下面一个用于监控JVM内存使用情况的轻量级工具,我们在命令行下面输入jstat时会输出以下信息,我们一行一行看。

[astd@VM_139_5_tlinux ~]$ jstat
invalid argument count【1】
Usage: jstat -help|-options【2】[……]

继续阅读