自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cpf2016的专栏

我不放弃爱的勇气,我不怀疑会有真心,我要握住一个最美的梦给未来的自己

  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除