关于Docker

发布在 docker

在任何地方都可以开发、部署运行任何程序

Docker是一个为开发者和系统管理员开发、运输和运行程序的平台。Docker可以让你快速的组装程序的组件,并且消除了运行带来的额外影响。Docker可以使你的代码测试部署带生产环境更加快速。

Docker由一下组成:

  • Docker 引擎 - 轻量级,开源的虚拟化容器,连接了构建和组装程序的工作流。
  • Docker Hub - 一个 SaaS服务,用来分享和管理你的程序脚本。
阅读全文

以下是排名前10位的常见关于Java字符串的问题。

1.如何比较字符串?用”==” 还是equals()?

简单来说,如果”==”测试是相等的,那么使用 equals()也是相等的。如果你想知道这两个对象是不是相同,你应该使用equals()。

如果你知道string interning那会让你更好理解。

2.在安全敏感信息方面为什么 char[] 优于字符串?

字符串是不可变的,这意味着一旦被创建,他们将保持不变,直到垃圾回收。但是数组话,你可以明确地改变它的元素。以这种方式,安全敏感信息(如密码)将不存在于系统中的任何地方。

阅读全文

该文总结了排名前10位的错误,这些都是Java开发人员经常犯的。

1.把数组转成ArrayList

把数组转成ArrayList,开发者通常这样做:

1
2
3
4
String[] arr = new String[]{"a", "b", "c"};
List<String> list = Arrays.asList(arr);
System.out.println(list);
// [a, b, c]
阅读全文

迭代器经常会出现问题,因为开发人员往往不知道它是如何工作的。下面的代码来源是ArrayList的源码:

最常见的问题是抛出java.util.ConcurrentModificationException异常。这异常实际通常是由remove方法抛出。当remove()调用是应该在 next()调用之后调用。如果remove()在next()调用之前调用,arraylist 的容量改变了,modCount != expectedModCount条件不满足,ConcurrentModificationException 异常就产生了。

阅读全文

这篇文章是讨论如何解决ArrayList的java.util.ConcurrentModificationException异常问题。

错误的提示信息一般如下:

1
2
3
4
5
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
...
...
阅读全文

通常,Map是一种数据结构,用来存储键值对的,每个key只能在map中出现1次。这篇文章总结了9个 Map 和其子类很常见的问题。简单起见,例子中我将会使用泛型。因此,我将只考虑常规的map,而不是特定的map。但是你可以假设K和V都可以比较,那意味着K和V都继承了Comparable接口。

1. 把Map转换成List

在Java中,Map提供了3中集合视图:key set,value set,和 key-value set。他们都能使用addAll()转换成为List。下面的代码片段展示了如何从map构建一个ArrayList。

1
2
3
4
5
6
// key list
List keyList = new ArrayList(map.keySet());
// value list
List valueList = new ArrayList(map.valueSet());
// key-value list
List entryList = new ArrayList(map.entrySet());
阅读全文

`Set` vs. `Set<?>`

你可能知道一个无界的通配符数组如Set<?>能容纳任何类型的元素,同样一个原始的Set也可以。那它们之间有什么不同呢?

关于Set<?>的两个事实

这是两个关于Set<?>的事实:

  • 第一条:因为是用了?来代表任何类型,所以Set<?>可以容纳任何类型的元素。
  • 第二条: 因为我们不知道?是什么类型,所以我们不能把任何类型放入Set<?>

所以Set<?>可以容纳任何类型的元素(满足第一条)。但是我们不能放入任何元素(满足第二条)。这两个条件冲突了吗?当然没有。下面用两个例子来说明:

阅读全文

泛型是在JDK5引入的特性。它允许我们定义的类和接口的时候使用类型参数。它被广泛运用在java集合框架中。类型擦出概念是关于泛型是最容易困惑的部分之一。本文将教你如何使用她。

1.一个常见错误

在下面的例子,accept 方法接受了一个Object集合来作为参数,在main方法中调用却是使用String的集合。它能正常调用吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {
public static void main(String[] args) throws IOException {
ArrayList<String> al = new ArrayList<String>();
al.add("a");
al.add("b");
accept(al);
}
public static void accept(ArrayList<Object> al){
for(Object o: al)
System.out.println(o);
}
}
阅读全文

Javy Liu

author.bio


author.job


beijing