- 博客(36)
- 收藏
- 关注
原创 memcache环境搭建
1、下载memcache,安装好memcache.exe -d install、并启动该服务2、下载php_memcache.dll3、将php_memcache.dll复制到php安装目录下的exts文件夹下4、在php.ini配置文件的扩展的结尾处(即一大堆.dll文件结尾处)加上这句extension=php_memcache.dll5、保存配置文件,重启Apache6、
2014-07-23 20:16:21 310
原创 用于同步并发程序的高级工具类
1、资源并发访问的控制:new samephore(1)_samephore.acquire()_samephore.release()2、等待多个并发事件的完成:new countdownLatch(1)_countdown.await()_countdwon.countDown()3、并发多阶段任务的运行:new phare(1)_phare.arriveAndAwaitAdvance
2014-07-01 18:15:48 330
原创 练手AIO
异步accept:·server.accept(null,new AcceptCompletionHandler());·public void completed(AsynchronousSocketChannel result, Object attachment) { try { //使用系统回调的AsynchronousSocketChannel ,这里用它读
2014-06-18 20:45:16 340
转载 【Java TCP/IP Socket】UDP Socket(含代码)
UDP的Java支持 UDP协议提供的服务不同于TCP协议的端到端服务,它是面向非连接的,属不可靠协议,UDP套接字在使用前不需要进行连接。实际上,UDP协议只实现了两个功能: 1)在IP协议的基础上添加了端口; 2)对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据。 Java通过DatagramPacket类和Da
2014-06-16 22:26:27 338
转载 【Java TCP/IP Socket】Java NIO Socket VS 标准IO Socket
简介 Java NIO从JDK1.4引入,它提供了与标准IO完全不同的工作方式。NIO包(java.nio.*)引入了四个关键的抽象数据类型,它们共同解决传统的I/O类中的一些问题。 1、 Buffer:它是包含数据且用于读写的线形表结构。其中还提供了一个特殊类用于内存映射文件的I/O操作。 2、 Charset:它提供Unicode字符串影射到字节序列
2014-06-16 22:25:25 270
转载 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)
NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接、读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候,程序也可以做其他事情,以实现线程的异步操作。 考虑一个即时消息服务器,可能有上千个客户端同时连接到服务器,但是在任何时刻只有非常少量的消息需要读取和分发(如果采用线程池或者一
2014-06-16 22:24:06 441
原创 (十一) Pipe
Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示:创建管道通过Pipe.open()方法打开管道。例如:1Pipe pipe = Pipe.open();向管道
2014-06-16 21:43:57 310
原创 (十) Java NIO DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:1DatagramChannel channel = DatagramChan
2014-06-16 21:42:44 311
原创 (九) ServerSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。这里有个例子:01ServerSocketChannel serverSocketChannel = Serv
2014-06-16 21:41:46 307
原创 (七) FileChannel
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAcc
2014-06-16 21:40:19 341
原创 (五) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。transferFrom()FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此
2014-06-16 21:38:33 350
原创 (二)Java NIO Channel
Java NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:Channel的实现这些是Java NIO中最重要的通道的实现:
2014-06-16 20:46:28 303
原创 (一)Java NIO概述
Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectors虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。
2014-06-16 20:25:02 308
转载 【Java TCP/IP Socket】TCP Socket(含代码)
TCP的Java支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议、TCP协议和UDP协议。现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协议)。 TCP协议提供面向连接的服务,通过它建立的是可靠地连接。Jav
2014-06-16 20:01:07 273
原创 在NIO中如何循环将Channel的数据写到Buffer中??
下面这个例子用FileChannel作为IO操作者(当然你也可以用SocketChannel)
2014-06-16 19:53:36 311
原创 JAVA泛型通配符的小小难点
通配符捕获清单 3 展示了一些似乎应该 可以工作的代码,但实际上不能。它包含一个泛型 Box、提取它的值并试图将值放回同一个Box。清单 3. 一旦将值从 box 中取出,则不能将其放回public void rebox(Box box) { box.put(box.get());}Rebox.java:8: put(capture#337 of ?) i
2014-04-09 17:07:07 338
原创 二项堆
二项堆[编辑]在计算机科学中,二项堆(binomial heap)是一种类似于二叉堆的堆结构。与二叉堆相比,其优势是可以快速合并两个堆,因此它属于可合并堆(mergeable heap)抽象数据类型的一种。目录 [隐藏] 1 二项树2 二项堆3 二项堆的操作3.1 合并3.2 插入3.3 查找最小关键字所在结点3.4 删除最小关键字所在
2013-12-17 12:48:05 473
转载 BM
这篇长文历时近两天终于完成了,前些天帮伯乐在线翻译一篇文章《为什么GNU grep如此之快?》,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解这个算法,发现这个算法一开始还挺难理解的,也许是我理解能力不是很好吧,花了小半天才看懂,看懂了过后就想分享下,因为觉得这个算法真的挺不错的,以前一直以为字符串搜索算法中KMP算很不错的了,没想到还
2013-12-13 19:54:23 404
原创 由A*解决八数码问题像想到的一点关于搜索算法的感悟
关于A*算法的内容请看这个包你看懂的教程(只要你有耐心): 点击打开链接关于八数码问题请看:点击打开链接其实,看完这个A*算法的教程,你肯定知道怎么用A*算法去解决路径是否存在,若存在最短路径是多少这类的问题。但是,遇到八数码问题时,估计还是觉得它跟A*算法没什么关系啊。(至少我这个死菜鸟是这样觉得的......)有这样的疑问,很可能是心中有以下几个问题:1、第一个链接的A*算法跟第二
2013-12-08 17:48:38 639
转载 杨氏矩阵
杨氏矩阵 Young Tableau前几天算法课上老师提到了一个数据结构--Young Tableau,只是简单的提了一下,没有仔细的讲解,于是自己在网上搜集了一些资料,并且加以研究,感觉杨氏矩阵(Young Tableau)是一个很奇妙的数据结构,他类似于堆的结构,又类似于BST的结构,对于查找某些元素,它优于堆;对于插入、删除它比BST更方便。首先介绍一下这个数据结构的定义,Young
2013-12-05 16:58:35 360
转载 Treap
Treap编辑目 录1介绍2操作2.1 插入2.2 删除1介绍我们可以看到,如果一个二叉排序树节点插入的顺序是随机的,这样我们得到的二叉排序树大多数情况下是平衡的,即使存在一些极端情况,但是这种情况发生的概率很小,所以我们可以这样建立一颗二叉排序树,而不必要像AVL那样旋转,可以
2013-11-24 19:43:41 390
原创 全域hash && 完美hash
关于全域hash:其中,p为足够大的质数(如101)、m可以是关键字的个数、a是随机数,范围是[0~p-1],即有p-1个a可选、b也是随机数,范围是[0~p],即有p个b可选。===================================================================================================
2013-11-23 21:27:17 687
原创 利用主方法来快速判断递归式的复杂度
T(n) = aT(n/b)+h(n)a >=1 ; b >1 ; h(n) : 不参与递归的复杂度函数判断n^log b (a)与h(n)的大小关系= Θ(h(n)) :该方法的复杂度为 Θ(h(n)*lg(n))> Θ(h(n)) :该方法的复杂度为 Θ(n^(logb a))这样可以帮助你快速的分析出你得算法的复杂度是否符合要求。
2013-11-22 15:56:59 494
原创 由前序序列和中序序列来重构二叉树
#include#includestruct BinaryTreeNode{ int m_nValue ; BinaryTreeNode* m_pLeft ; BinaryTreeNode* m_pRight ;} ;BinaryTreeNode* Construct(int* preorder,int* inorder,int length) ;BinaryTree
2013-11-21 20:38:04 471
原创 Trie-tree
字典树的一个小应用:题目是这样的,有一个文件,里面有很多的单词(非常多!)每个单词之间由空格隔开。现在问你,如何在这个文件中确定是否有{"hello","good","world"}这三个单词的最小序列(注意,这三个单词的顺序无关重要)。(PS:每个节点代表一个状态,红色节点代表查找某个单词成功啦!)
2013-11-20 22:12:03 610
转载 堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总
2013-11-17 11:30:00 587
原创 基数排序
基数排序有2中方式,最高位优先(MSD)和最低位优先(LSD)。下面以LSD为例。个人总结的基数排序的算法思想如下:基数排序维护一个队列,因为该队列是以最低位为基数来保存各个元素的,所以,我姑且叫它为基数队列(~~)。基数列的大小与待排的数组的大小相同。首先从最低位开始,扫描待排数组,每遍历完一次就完成一次基数队列的建立。再用基数队列来更新原数组。循环此过程,循环的次数取决于原数组中最
2013-11-17 11:25:43 616
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人