- 博客(73)
- 资源 (1)
- 收藏
- 关注
原创 java RMI原理解析
RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。 RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。下面我们通过具体的例子,建立一个简单的远程计算服务和使用它的客户程序 一个正常工作的RMI系统由下
2013-11-29 15:56:19
1042
原创 javah
javah - C 头文件和 stub 文件生成器 javah 从 Java 类生成 C 头文件和 C 源文件。这些文件提供了连接胶合,使 Java 和 C 代码可进行交互。 用法:javah [选项] 其中 [选项] 包括: -help 输出此帮助消息并退出 -classpath 用于装入类的路
2013-11-29 15:13:43
851
原创 常用算法复杂度比较
下面是不同排序算法的时间复杂度,你可以去wiki看一下这些算法的基本思想。 Algorithm Average Time Worst Time Space 冒泡排序 n^2 n^2 1 选择排序 n^2 n^2 1 Counting Sort n+k n+k n+k Insertion sort n^2 n^2
2013-11-29 11:35:12
991
原创 编程面试的10大算法概念汇总
以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念。由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍。本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串 2. 链表 3. 树 4. 图 5. 排序 6. 递归 vs. 迭代 7. 动态规划 8. 位操作 9. 概率问题 10. 排列组合 1. 字符串 如果IDE没
2013-11-29 11:04:11
656
原创 动态规划算法基本原理
动态规划一般也只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解 (对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。 简单地说,问题能够分解成子问题来解决。 动态规划算法分以下4个步骤: 1.描述最优解的结构 2.递归定义最优解的值 3.按自底向上的方式计算最优解的值 //此3步构成动态规划解的基础。 4.由计算出的结果构造一个最优解。
2013-11-28 23:09:47
5537
原创 java之Semaphore
Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。 Semap
2013-11-28 21:50:39
595
原创 Hadoop ObjectWritable类的实现浅析
针对Java基本类型、字符串、枚举、Writable、空值、Writable的其他子类,ObjectWritable提供了一个封装,适用于字段需要使用多种类型。ObjectWritable可应用于Hadoop远程过程调用(将在第4章介绍)中参数的序列化和反序列化;ObjectWritable的另一个典型应用是在需要序列化不同类型的对象到某一个字段,如在一个SequenceFile的值中保存不同类型
2013-11-28 21:34:15
2143
原创 处理海量数据常用算法
分而治之/hash映射 + hash统计 + 堆/快速/归并排序;双层桶划分Bloom filter/Bitmap;Trie树/数据库/倒排索引;外排序;分布式处理之Hadoop/Mapreduce
2013-11-28 09:56:41
883
原创 java concurrent包浅析
在JDK 1.4以下只有Vector和Hashtable是线程安全的集合(也称并发容器,Collections.synchronized*系列也可以看作是线程安全的实现)。从JDK 5开始增加了线程安全的Map接口ConcurrentMap和线程安全的队列BlockingQueue(尽管Queue也是同时期引入的新的集合,但是规范并没有规定一定是线程安全的,事实上一些实现也不是线程安全的,比如Pr
2013-11-27 22:50:31
713
原创 java中的FileFilter接口如何使用
public File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。除了返回数组中的路径名必须满足过滤器外,此方法的行为与 listFiles() 方法相同。如果给定 filter 为 null,则接受所有路径名。否则,当且仅当在路径名上调用过滤器的 FileFilter.accept(
2013-11-26 22:39:35
3170
原创 java实现字符串的匹配
假设我们有一个一定个数的字母组成字串,我给每个字母分配一个素数,从2开始,往后类推。这样A将会是2,B将会是3,C将会是5,等等。现在我遍历第一个字串,把每个字母代表的素数相乘。你最终会得到一个很大的整数,对吧? 然后——轮询第二个字符串,用每个字母除它。如果除的结果有余数,这说明有不匹配的字母。如果整个过程中没有余数,你应该知道它是第一个字串恰好的子集了。 思路总结如下: 1.定义
2013-11-25 09:38:38
2000
原创 java杨氏矩阵查找算法
在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 定位法,时间复杂度O(m+n)。首先直接定位到最右上角的元素,再配以二分查找,比要找的数(6)大就往左走,比要找数(6)的小就往下走,直到找到要找的数字(6)为止,如下图所示 代码如下 pac
2013-11-23 20:13:25
1146
原创 java线性时间寻找第k小元素
package contcurrentandalgorithm; import java.util.Random; /** * * @author Administrator * zyyjiao@mail.ustc.edu.cn */ public class SelectKMinAndMax { public static void main(String[] a
2013-11-23 15:01:29
1908
原创 java谢尔排序
选择排序的优化 package contcurrentandalgorithm; /** * * @author Administrator * zyyjiao@mail.ustc.edu.cn */ public class ShellSort { public static void main(String[] args) { int a
2013-11-23 11:39:46
847
原创 java双向划分的快速排序
双向划分避免所有元素都相等时候的最坏情况 package contcurrentandalgorithm; /** * * @author Administrator * zyyjiao@mail.ustc.edu.cn */ public class Sort3 { public static void main(String[] args) {
2013-11-23 11:15:38
1039
转载 hadoop1.2.1+zookeeper-3.4.5+hbase-0.94.1集群安装
一,环境: 1,主机规划: 集群中包括3个节点:hadoop01为Master,其余为Salve,节点之间局域网连接,可以相互ping通。 机器名称 IP地址 hadoop01 192.168.1.31 hadoop02 192.168.1.32 hadoop03 192.1
2013-11-22 23:05:23
1307
原创 Thread.yield()
api中解释: 暂停当前正在执行的线程对象,并执行其他线程。 注意:这里的其他也包含当前线程,所以会出现以下结果。 package concurent; /** * * @author Administrator * zyyjiao@mail.ustc.edu.cn */ public class Test extends Thread { pu
2013-11-22 21:45:46
828
原创 java快速排序
O(nlog(n)时间和O(logn)的栈空间 package contcurrentandalgorithm; /** * * @author Administrator * zyyjiao@mail.ustc.edu.cn */ public class QSort { public static void main(String[] args) {
2013-11-22 15:04:20
635
原创 java 插入排序
插入排序 要找到合适的位置,需要判断前一个元素比t小而后一个元素比t大。然后将t插入正确位置。 比较a[j-1] 跟 a[j] 的关系很关键 package contcurrentandalgorithm; /** * * @author Administrator * zyyjiao@mail.ustc.edu.cn */ pu
2013-11-22 14:47:59
692
原创 java并发里常用的注解Annotation
Java并发编程中,用到了一些专门为并发编程准备的 Annotation。 主要包括三类: 1、类 Annotation(注解) 就像名字一样,这些注解是针对类的。主有要以下三个: @Immutable @ThreadSafe @NotThreadSafe @ThreadSafe 是表示这个类是线程安全的。具体是否真安全,那要看实现者怎么实现的了,反正打上这个标签只是表示一下。不线程
2013-11-21 21:58:06
1181
原创 URIs, URLs, and URNs
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-ne
2013-11-21 19:45:51
974
原创 java实现最大子序列问题——————性能最优的算法
问题:求一维数组中连续子向量的最大和。 例如:{3,4,-2,-9,-10,8,-1,22}则最大连续子向量的和 为 8+(-1)+22=29 package xiancheng; /** * * @author Administrator zyyjiao@mail.ustc.edu.cn */ public class Scan { pu
2013-11-21 15:09:09
993
原创 Java 中使用内存映射文件需要考虑的 10 个问题
java中的内存映射IO和内存映射文件是什么? 内存映射文件非常特别,它允许Java程序直接从内存中读取文件内容,通过将整个或部分文件映射到内存,由操作系统来处理加载请求和写入文件,应用只需要和内存打交道,这使得IO操作非常快。加载内存映射文件所使用的内存在Java堆区之外。Java编程语言支持内存映射文件,通过java.nio包和MappedByteBuffer 可以从内存直接读写文件。
2013-11-21 08:54:37
1030
原创 NIO.2 Path和Java已有的File类
java7 提供了两个方法 可以实现Path和File之间的转换 1.java.io.File类里新增了toPath()方法 马上就可以把已有的File转换为Path 2.Path类里有个toFile()方法 马上就可以把已有的Path转换为File
2013-11-20 22:00:57
1152
原创 java里怎么解决文件系统的软连接问题
问题:假设在*nix系统里/usr/log目录下 你想找log1.txt 但是 其实/usr/log只是一个指向/application/log的一个软连接 那里才是存放日志文件的位置 怎么解决??? 答案:要得到准确的位置就要去掉冗余的信息 在java7里 要弄明白文件的位置 首先可以使用normalize()方法去掉Path的冗余信息 Path no
2013-11-20 21:56:30
6137
1
原创 java7新特性--------final重抛
try{ doSomethingWhichMightThrowIOException(); doSomeThingWhichMightThrowSQLException() }catch(final Exception e){ ...... throw e } final表明抛出的异常就是实际遇到的异常 这就是final重抛 这样就不会抛出笼统的异常了 避免
2013-11-20 21:30:31
1415
原创 jmap命令的使用
1、介绍 打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。 可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -d
2013-11-20 17:12:46
1058
原创 TCP链接定位消息的方法
1.定长的消息:通信双方发送的消息是定长的 2.基于定界符:消息的结束由唯一的标志给出、 3.显示长度:在具体的消息前面添加一个固定的长度
2013-11-20 15:59:43
1013
原创 java几种常见的动态代理的原理及其实现
代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两种。 静态代理:由
2013-11-20 10:49:07
5388
原创 实现争抢cpu的调度的算法
1、队列方式,先来先服务。不管是什么任务来了都要按照队列排队先来后到。 2、时间片轮转,这也是最古老的cpu调度算法。设定一个时间片,每个任务使用cpu的时间不能超过这个时间。如果超过了这个时间就把任务暂停保存状态,放到队列尾部继续等待执行。 3、优先级方式:给任务设定优先级,有优先级的先执行,没有优先级的就等待执行。 这三种算法都有优缺点,实际操作系统是结合多种算法,保证优先级的能
2013-11-20 09:28:59
2120
原创 单线程与多线程的比较
假设有100个数据要处理 下面分别采用单线程和多线程进行来对比分析 说明采用多线程的好处 单线程的代码如下 package xiancheng; import java.util.Vector; /** * * @author Administrator * zyyjiao@mail.ustc.edu.cn */ public class OneMain {
2013-11-20 09:24:17
1876
原创 ubuntu12.04安装R语言
#sudo gedit /etc/apt/sources.list 添加 #deb http://mirrors.ustc.edu.cn/CRAN/bin/linux/ubuntu/ precise/ #sudo apt-get update #sudo apt-get install r-base #sudo apt-get install r-base-dev
2013-11-19 21:40:48
1196
1
原创 org.apache.hadoop.io.compress源码解读
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regardi
2013-11-19 17:01:29
1184
转载 用Maven构建Mahout项目
Hadoop家族系列文章 ,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等。 从2
2013-11-19 10:54:53
1284
原创 mahout learning 代码示例
Introduction package mia.recommender.ch02; //=分析导入包可以看出mahout的包分为主要类以及它们的实现类= import org.apache.mahout.cf.taste.impl.model.file.*; import org.apache.mahout.cf.taste.impl.neighborhood.*; import org.
2013-11-19 10:10:58
1071
原创 R学习总结
数值型:整形、单精度实型、双精度实型 字符型 复数型 逻辑型 缺失的数据默认是NA Inf表示+∞ -Inf表示-∞ Nan表示不是数字的值 可以通过函数mode()知道对象的类型 可以通过函数length()知道对象的长度 数据对象及类型
2013-11-18 22:17:39
1587
原创 java7 、Fork/Join 框架原理
Fork/Join框架中的”工作窃取(Work stealing)” Fork/Join框架在java.util.concurrent包中加入了两个主要的类: * ForkJoinPool * ForkJoinTask ForkJoinPool类是ForkJoinTask实例的执行者,ForkJoinPool的主要任务就是”工作窃取”,其线程尝试发现和执行其他任务创建的子任务。ForkJo
2013-11-18 20:49:56
2136
原创 CountDownLatch
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 主要方法 public CountDownLatch(int count); public void countDown(); 对记数器减一 public void await() throws InterruptedException 上记数器到0之前一直等待
2013-11-18 19:43:35
853
翻译 mahout之协调推荐----------------(二)
协同过滤 —— Collaborative Filtering 协同过滤简单来说就是根据目标用户的行为特征,为他发现一个兴趣相投、拥有共同经验的群体,然后根据群体的喜好来为目标用户过滤可能感兴趣的内容。 协同过滤推荐 —— Collaborative Filtering Recommend 协同过滤推荐是基于一组喜好相同的用户进行推荐。它是基于这样的一种假设:为一用户找到他真正感兴趣的内
2013-11-14 21:51:03
988
翻译 Mahout推荐算法基础
Mahout主要推荐算法 Mahout推荐算法分为以下几大类 GenericUserBasedRecommender 算法: 1.基于用户的相似度 2.相近的用户定义与数量 特点: 1.易于理解 2.用户数较少时计算速度快 GenericItemBasedRecommender 算法: 1.基于item的相似度 特点: 1.item较少时就算速度更快 2.
2013-11-14 21:46:36
1301
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人