- 博客(31)
- 收藏
- 关注
转载 Arrays 标准库算法
Binary Searchpublic static int binarySearch0(Object[] a, int fromIndex, int toIndex, Object key) { int low = fromIndex; int high = toIndex - 1; while (low <= high) { ...
2015-06-09 20:11:00
100
转载 TreeMap 红黑树实现
TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。TreeMap继承于AbstractMap,所以它是一个Map,即一个key-value集合。TreeMap 实现了NavigableMap,Cloneable和Serializable接口。TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 l...
2015-06-08 18:04:00
117
转载 ThreadPoolExecutor 线程池的实现
ThreadPoolExecutor继承自AbstractExecutorService。AbstractExecutorService实现了 ExecutorService接口。顾名思义,线程池就是保存一系列线程的“容器”。在ThreadPoolExecutor的实现中,将这些线程保存在一个HashSet中 private final HashSet<...
2015-06-07 05:01:00
123
转载 AbstractExecutorService (未完成)
AbstractExecutorService是一个实现了ExecutorService的抽象类。主要实现了ExecutorService的invoke方法。转载于:https://www.cnblogs.com/yitong0768/p/4557357.html
2015-06-06 21:44:00
83
转载 ExecutorService 接口
先看一个Executor接口,该接口只有一个方法:voidexecute(Runnablecommand),用于在未来某个时刻提交一个command,这个command可以被提交到一个新的线程,或者一个线程池,或者在调用线程中。ExecutorService接口继承了Executor接口。主要是增加了shutDown、shutDownNow、invokeAll、invokeAny...
2015-06-06 21:29:00
144
转载 Executors 构建线程池
Executors包含一系列静态方法,可以用于构建线程池。返回实现了 ExecutorService 接口的对象:newCachedThreadPoolnewFixedThreadPool(int threads)newSingleThreadPool返回实现了ScheduledExecutorService接口的对象newScheduledThrea...
2015-06-06 20:50:00
64
转载 结构型模式——Bridge(未完成)
1.意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化。转载于:https://www.cnblogs.com/yitong0768/p/4560417.html
2015-05-17 11:10:00
72
转载 结构型模式——Adapter
1.意图 将一个类的接口转换成客户希望的另一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。2.结构 类适配器 对象适配器 3.参与者Target定义Client使用的与特定领域相关的接口Client与符合Target接口的对象协同Adaptee定义一个已经存在的接口,这个几口需要适配Adapter对Adapte...
2015-05-17 10:58:00
56
转载 创建型模式——Builder
1.意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2.结构 3.参与者Builder为创建一个Product对象的各个部件指定抽象接口ConcreteBuilder实现Builder的接口以构造和装配该产品的各个部件定义并明确它所创建的表示提供一个检索产品的接口Director构造一个使用Builder接口的对象P...
2015-05-15 19:49:00
72
转载 创建型模式——Abstract Factory
1.意图 提供一个创建一系列相关或相互依赖的接口,而无需指定它们具体的类。2.结构 3.参与者AbstractFactory声明一个创建抽象产品对象的操作接口ConcreteFactory实现创建具体产品对象的操作AbstractProduct为一类产品对象声明一个接口ConcreteProduct定义一个将被相应的具体工厂创建的产品对象Cli...
2015-05-15 16:52:00
62
转载 Java与线程
线程的实现 1.使用内核线程实现 内核线程(KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操纵调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。程序一般不会直接使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(LWP),轻量级进程就是我们通常意义上的线程,由于每个轻量级进程都由一个内核线程支持,因此只有先支持内核,才能有...
2015-05-06 02:18:00
57
转载 Java内存模型
Java虚拟机规范中定义一种Java内存模型,用以屏蔽各种硬件和操作形同的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。 Java内存模型规定了所有的变量都存储在主内存(Main Memory)中,每条线程还有自己的工作内存(Working Memory),线程的工作内存中保存了被盖线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内...
2015-05-05 01:19:00
66
转载 类加载
1.类加载的时机 下图是类的生命周期,这里的类既指类class也指接口interface: 其中,加载、验证、准备、初始化和卸载这五个阶段是按顺序开始的,解析则不一定,可能在初始化开始之后才开始。这里说“开始”是因为这些阶段可能是互相交叉地进行的。 下面五种情况必须立即对类进行初始化(加载、验证、准备阶段自然要在之前进行):遇到new、getstatic...
2015-05-04 16:09:00
68
转载 Class类文件的结构
Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在Class文件中,中间没有任何分隔符。Class文件的结构只有两种数据类型:无符号数和表。无符号数以u1、u2、u4和u8来代表1个字节、两个字节、四个字节和八个字节的无符号数,可以用来描述数字、索引引用、数值量或者按UTF-8编码的字符串值。表是有多个无符号数或者其他表作为数据项构成的复合数据类...
2015-05-03 11:29:00
105
转载 垃圾收集器
1.Serial收集器 进行垃圾收集时,需要暂停其他所有的工作线程(Stop the world),知道它完成收集工作。暂停所有工作线程带来不良的用户体验,但由于其简单而高效,Client模式下的虚拟机仍然是个很好的选择。2.ParNew收集器 Serial收集器的多线程版本,是许多运行在Server模式下的虚拟机首选的新生代收集器(一个原因是只有它才能与CMS收集器配合...
2015-05-02 18:00:00
58
转载 垃圾收集算法
1.标记-清除算法 算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 标记过程在对象死了吗中已经介绍过。 该算法主要存在两个问题:1.效率问题,标记和清除两个过程都效率不高;2.标记清除后会产生大量不连续的内存碎片。2.复制算法 将内存按容量划分为大小相等的两块,每次只使用其中的一块,当一块内存用完了...
2015-05-02 15:54:00
67
转载 对象死了吗?
垃圾收集器在对堆进行回收前,需要先判断堆中哪些对象是“活着”的,哪些对象是“死了”的。1.引用计数法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器加1,当引用失效时,计数器减1。任何时刻计数器为0的对象就是不可能再被使用的。 引用计数器实现简单,效率高。但是主流的JVM并没有使用引用计数法来管理内存,主要原因是它难以解决对象之间循环引用的问题。例如,对象obj...
2015-05-02 14:56:00
59
转载 CAS原理
JDK5之前Java是靠synchronized关键字保证同步,这种机制存在以下问题:在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题一个线程持有锁会导致其他需要此锁的线程挂起如果一个优先级高饿线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险synchronized是一种独占锁,会导致其他所有需要该锁的线程挂起,等待持有锁...
2015-05-01 19:28:00
63
转载 对象
对象的创建(不包括数组和Class对象) 虚拟机遇到一条new指令时,首相检查这个指令的参数是否能再常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 类加载检查通过后,虚拟机将为新生对象分配内存。对象所需的大小再类加载完成后便可完全确定(如何确定参见下一小节)。为对象分配内存的任务等同于把一块确...
2015-05-01 16:06:00
91
转载 内存区域
Java在执行Java程序时会把内存划分为若干个不同的数据区:1.程序计数器(Program Counter Register) 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号计数器。 在任意时刻,一个处理器(内核)都只会执行一条线程中的指令,因此,每条线程都有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私...
2015-05-01 15:33:00
51
转载 物理内存管理
Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k(在i386体系结构中)大小的页,从而分配和回收内存的基本单位便是内存页了。系统在分配内存时不再要求大块的连续内存,但是实际上系统使用内存时还是倾向于分配连续的内存块。为了尽量减少不连续情况,内核采用了“伙伴”关系来管理空闲页面。 Linux的伙伴算法把所有的空闲页面分为10个块组,每组中块的大小是2的...
2015-04-04 11:16:00
73
转载 Linux命令——监视相关
1.netstat 用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。 常见参数:-a (all)显示所有选项,默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n...
2015-04-03 15:50:00
56
转载 进程间通信——实现
以UNIX为例来分析进程间通信的各种实现技术。在UNIX中,文件(File)、信号(Signal)、无名管道(Unnamed Pipes)、有名管道(FIFOs)是传统IPC功能;新的IPC功能包括消息队列(Message queues)、共享存储段(Shared memory segment)和信号量(Semapores)。1.信号 信号机制是UNIX为进程中断处理...
2015-04-02 13:04:00
55
转载 进程间通信——原理
1.临界区(Critical Section) 我们需要某种手段(互斥)确保当一个进程在使用一个共享变量或文件时,其他进程不能做同样的事情。或者描述为一个进程的一部分时间做内部计算或一些不会引发竞争条件的操作。 我们把对共享内存进行访问的程序片段成为临界区。2.忙等待互斥屏蔽中断单处理器系统中,最简单的方法是使每个进程在刚刚进入临界区后立即屏蔽所有中断,并在...
2015-04-01 12:43:00
72
转载 设计与声明
条款18:让接口容易被正确使用,不易被误用 条款19:设计class犹如设计type条款20:宁以pass-by-value-to-const替换pass-by-value 缺省情况下C++以by value方法给对象传递参数,函数参数都是对象的副本,这些副本是由对象的copy构造函数产出,这可能使得函数调用操作更加费时(一次copy构造函数的调用,函数结束时一...
2015-03-04 20:36:00
45
转载 智能指针——使用与实现
Effective C++的条款13:以对象管理资源智能指针就是一种用类模拟普通指针,实现以对象管理资源的方法。先看一下智能指针的用法:#include <iostream>#include <memory> // 有auto_ptr这个类模板using namespace std;int main(){ aut...
2015-03-03 20:25:00
76
转载 资源管理
条款13:以对象管理资源 平常我们的写法可能是这样的:void function() { Object* object = new Object(); //new一个object对象 ... delete object; //释放o所指向的对象} 但是这并不是绝对安全的做法,因为在“.....
2015-03-02 10:15:00
60
转载 构造/析构/赋值运算
条款05:了解C++默默编写并调用哪些函数 如果我们写了一个空类:class Empty { }; 编译器会为这个类添加一些default的函数,相当于:class Empty {public: Empty() { ... } //default构造函数 ...
2015-03-01 12:53:00
130
转载 排序算法——QuickSort、MergeSort、HeapSort(C++实现)
快速排序QuickSorttemplate <class Item>void quickSort (Item a[], int l, int r) { if (r<=l) return; int i = partition(a, l, r); quickSort(a, l, i-1); quickSo...
2015-02-03 12:06:00
222
转载 字符串匹配算法——KMP、BM、Sunday
KMP算法KMP算法主要包括两个过程,一个是针对子串生成相应的“索引表”,用来保存部分匹配值,第二个步骤是子串匹配。部分匹配值是指字符串的“前缀”和“后缀”的最长的共有元素的长度。以“ABCDABD”为例:“A”的前缀和后缀都是空,共有元素长度为0;“AB”的前缀为{A},后缀为{B},共有元素长度为0;“ABC”的前缀为{A, AB},后缀为{BC, C},共有...
2015-02-02 18:50:00
158
转载 红黑树——原理
1.性质 红黑树是一种二叉查找树,但是每个节点增加一个表示结点颜色(红或黑)的字段,并且满足一下条件:每个节点或是红的,或是黑的根节点是黑的每个叶结点(NIL)是黑的如果一个节点是红的,则它的两个儿子都是黑的对每个节点,从该结点到其子孙节点的所有路径上包含相同数目的黑节点 为方便处理边界条件,我们采用一个哨兵来表示NIL,如果某节点没有一个子结点或...
2015-02-01 20:17:00
69
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人