- 博客(20)
- 收藏
- 关注
转载 java并发编程:Callable、Future和FutureTask
1.问题引入 创建线程有2中方式:直接继承Thread和实现Runnable接口。但是这2种方式都有一个缺陷,那就是执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,但这样使用起来非常麻烦。 所以,自从jdk1.5之后,就提供了Callable和Future,通过他们可以获得任务执行完毕之后得到任务的执行
2015-01-29 14:32:04 352
转载 java并发编程-线程间协作的两种方式:wait、notify、nitifyAll和Condition
1.问题引入 线程之间也是需要协作的,比如生产者-消费者模型:当队列满时, 生产者需要等待队列中有空间才能够向里面放入物品,而在等待的时间内,生产者必须释放对资源(队列)的占有权。因为如果生产者不释放对资源的占有权,那么消费者就无法从队列中取出物品,就不会让队列有空间,进而生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出占有权,并进入挂起状态。然后等待消
2015-01-29 09:52:26 592
转载 java多线程-阻塞队列
1.基本思路 之前接触的队列都是非阻塞队列,不如LinkedList(实现了Dequeue接口)、PriorityQueue。使用非阻塞队列有一个很大的问题就是,它不会对当前线程产生阻塞。那么在面对类似生产者-消费者问题时,就必须额外实现同步策略以及线程间唤醒策略,这个实现起来非常麻烦。但是有了阻塞队列就不一样了,它会对当前线程产生阻塞。比如一个线程从一个空的阻塞队列中取元素,此时线
2015-01-28 10:51:49 395
转载 java并发容器-CopyOnWriteArrayList
1.基本思路 Copy-On-Write,是一种用于程序设计中的优化策略。基本思路是:从一开始大家都在共享同一个内容,当某个人想修改这个内容的时候,会把真正的内容Copy出去形成一个新的内容,然后再修改,这是一种延时懒惰策略。 CopyOnWrite容器,即写时复制容器。通俗理解就是,当我们向一个容器中添加元素的时候,不直接向容器添加,而是先将当前容器进行Copy
2015-01-28 09:55:26 430
转载 java多线程-并发容器ConcurrentHashMap
1.引入 并发容器位于concurrent包中,相对于同步容器Vector和Hashtable,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了(synchronized),这样保证了线程的安全性,但是代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此引入了并发性能较好的并发容器,同同步容器相比,util.concurrent包中引入
2015-01-27 10:47:29 571
转载 java多线程-Lock
1.synchronize缺陷 代码块被synchronize修饰时,当一个线程获取了对应的线程锁并执行该代码块时,其他线程只能一直等待,直到获取锁的线程释放锁,而这里得到锁的线程释放锁只有两种情况: (1)得到锁的线程执行完了该代码块,然后线程释放线程锁 (2)线程执行发生异常,此时JVM会让线程自动释放锁 如果这个得到锁的线程由于要等待IO或者其他
2015-01-26 10:24:44 326
转载 位图索引
1.案例 有张表名字为table,由3列组成,分别是姓名、性别和婚姻状况,其中性别只有男和女两项,婚姻状况有已婚、未婚、离婚这3项,该表共100w条记录,现在有这样一个查询: SELECT * FROM table WHERE gender='男' AND marital='未婚' 1)不使用索引
2015-01-22 10:08:26 537
转载 java反射机制
1.定义 正常情况是java虚拟机根据类的定义,创造出一个对象。反射则是相反的过程,可以根据一个对象的引用,解析它的定义信息,如方法、属性等,进而可以操作它的属性,调用他的方法,当然也可以创建胡新的对象。 2.反射机制使用核心 1)获得想要操作类的Class对象 1>使用Class的静态方法forN
2015-01-21 20:14:04 312
转载 HashSet源码解析
因为HashSet底层是通过HashMap实现的,HashSet中的值作为HashMap中的key,value完全相同,所以在理解了HashMap的基础上,HashSet很容易理解 public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable { static fi
2015-01-20 20:45:54 330
转载 HashMap源码解析
(1)HashMap概述 HashMap是基于哈希表的Map接口的非同步实现。允许使用null值和null键。此类不保证映射的顺序,特别是他不保证该顺序恒久不变。 (2)HashMap数据结构 HashMap实际上是一个链表散列的结构,即数组和链表的结合体,实际上就是Hash表通过链表来解决冲突。
2015-01-20 14:36:33 341
转载 Eclipse在异常关闭后 无法启动 也没有报错信息
1、打开"\eclipse\configuration\.settings\org.eclipse.ui.ide.prefs", 将"SHOW_WORKSPACE_SELECTION_DIALOG"的值改为"true"; 在此状态下,打开Eclipse会自动让你选择Workspace路径。修改Workspace后发现可以启动,由此判断是Workspace出问题,于是按此对症下药。
2015-01-15 10:02:12 829
转载 ClassLoader
1.ClassLoader作用 顾名思义,就是用来加载Class文件到JVM,以供程序使用的。我们知道,java程序可以动态加载类定义,而这个动态加载机制就是通过ClassLoader来实现的。 那么就有一个问题:既然ClassLoader是用来加载类到JVM的,那么ClassLoader又是如何加载的呢?难道它不是java类?确
2015-01-14 19:28:25 402
转载 位运算实现加法
先用1位数的加法来进行,在不考虑进位的基础上,如下 1 + 1 = 01 + 0 = 10 + 1 = 10 + 0 = 0 很明显这几个表达式可以用位运算的“^”来代替(异或:相同为0不同为1),如下 1 ^ 1 = 01 ^ 0 = 10 ^ 1 = 10 ^ 0 = 0 这样我们就完成了简单的一位数加法,那么要进行二位的加法,这个方法可行不可行呢?
2015-01-14 14:22:46 370
转载 B+树
(1)与B-tree区别 1>有n个key的节点中有n个指针,而不是b-tree中的n+1个 2>所有叶子节点中包含了全部的关键字信息,以及指向这些关键字记录的指针,且叶子节点本身的关键字是从大到小顺序连接的 3>所有的非叶子节点实际上就是到达叶子节点的索
2015-01-12 13:59:20 359
转载 B树
(1)B树应用 1> 常用作数据库的索引。 2>因为大量数据存储在磁盘中,所以io次数就成为了评价索引结构的优劣。从B-Tree分析,可知检索一次最多要访问树高h-1个节点(因为根节点常驻内存),所以复杂度为O(h)=O(logN),底数m为B-Tree的叉,通常非常大,超过100,所以h非常小,通常不超过
2015-01-12 09:51:05 369
转载 海量数据处理
(1)通用解法 1)将所有数据通过哈希函数 pos = key % M,写入M个文件中。(这里的M可以根据内存情况调整) 2)通过HashMap等结构记录每个文件中的情况,再将所有的HashMap结果合并即可 (2)数字型
2015-01-08 12:49:39 337
转载 快速排序的非递归实现
(1)思路 继续使用adjust进行划分,如果其中的元素不止1个,那么将下标的开始和结束入栈,否则不入栈 (2)代码 private void quickSortNR(int[] a, int begin, int end) { if(begin<end) { Stack stack =
2015-01-04 16:28:49 291
转载 最长回文串
(1)思路 1. 因为字符串长度为奇数和偶数时处理方式不同,所以这里可以使用插入特殊字符的方法,使得每个字符串在处理之后长度都为奇数。处理方法为:在任意两个字符之间和字符串的开始和结尾插入'#'。(因为设字符为n个,那么共有n-1个间隙,n+(n-1)必然为奇数,再加上首尾'#'还是奇数)。因为要防止越界,所以在修改后的字符串首尾再加上边界,开始为
2015-01-04 14:29:42 458
转载 O(n)选出第k小元素
(1)思路 类似于快速排序,此处选择第一个元素作为枢轴flag, 调整之后flag左边的都比flag小,右边的都比flag大,此时比较flag的下标index和要查找的k,如果k==index,那么就找到了;如果index>k,说明k在flag的左边区间中;如果index>k,说明k在flag的右边区间中
2015-01-04 11:10:03 539
转载 KMP
1.简单字符串匹配 (1)问题描述 如给定字符串str1 = "abcaad" ,str2="",判断str1中是否包含str2 (2)思路 使用2个指针i、j,如果i,j指针指向字符相同,那么i++、j
2015-01-03 19:12:22 302
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人