11 2017 档案
摘要:一 NULL 为什么这么经常用 (1) java的null null是一个让人头疼的问题,比如java中的NullPointerException。为了避免猝不及防的空指针,需要小心翼翼地各种if判断,麻烦又臃肿. 为此有很多的开源包都有诸多处理 common lang3的StringUtils.i
阅读全文
摘要:所有算法都要达到纸上手写运行无误。 1 排序(冒泡 & 选择 & 快排) 我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有冒泡排序,选择排序,归并排序,堆排序,快速排序等 另一种是非比较排序,时间复杂度可
阅读全文
摘要:一 概述 Copy-On-Write即写时复制的容器,是一种用于程序设计中的优化策略。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对Co
阅读全文
摘要:一 概述 CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍
阅读全文
摘要:一 异步用new Thread? 大写的"low"!! new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 你还在像上面这么用吗,太low
阅读全文
摘要:一 概述 多线程的环境下对同一份数据进行读写,会涉及到线程安全的问题。比如一个线程读取数据的时候,另外一个线程在写数据,会导致前后数据的不一致。一个线程在写数据,另一个线程也在写,同样会导致线程前后看到的数据不一致。这时可以在读写方法加入互斥锁,任何时候只能允许一个线程的一个读或写操作,而不允许其他
阅读全文
摘要:一 简单的stream parallelStream慎用,除非你知道它内部干了什么 List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); list.parallelStream().forEach(System.out::printl
阅读全文