- 浏览: 211216 次
- 性别:
- 来自: 北京
最新评论
-
sky88088:
感谢分享~
自定义的RPC的Java实现 -
a2773945:
好东西,谢谢大哥
自定义的RPC的Java实现 -
beer2008cn:
写的很棒
自定义的RPC的Java实现 -
shuangjue:
不能跨平台,和RMI相比有何优势呢?能否提供个跨平台的方案,比 ...
自定义的RPC的Java实现 -
god333666:
写得很不错 受启发
自定义的RPC的Java实现
文章列表
这两天遇到代码中出现的两次多线程问题
- 博客分类:
- Java
这两天在做两个非常小的项目,就是对现有的代码改改异常处理方式或者显示内容神马的。在修改的过程中,发现了两个线程安全的问题。把这个记下来,算作是对大家工作的提示吧。
1. 使用static HashMap的问题
代码非常简单 ...
下面的代码用于打印加法的组合。在打印时使用递归。思路来自于打印一个集合的所有子集;不过对于集合的所有子集,没有重复的情况。在打印加法组合的时候,因为有重复的情况的。这里处理重复是通过判断是否递减序列来实现的。即只保留有序序列即可实现。
递归结束后需要恢复现场
/**
* 打印加法组合
* 例如5可以输出:
* 5
4 1
3 2
3 1 1
2 2 1
2 1 1 1
1 1 1 1 1
* 下面的代码使用了递归!
* 在去重上,采用的是判断数组的顺序是不是按照降序排列的,如果是的话,则是符合条件的。否则不符合条件 ...
在教科书提到的Hash函数就是求模了。Java的hash函数是怎样的呢?先看代码:
/**
* Applies a supplemental hash function to a given hashCode, which
* defends against poor quality hash functions. This is critical
* because HashMap uses power-of-two length hash tables, that
* otherwise encounter collisions f ...
下面再来看看Arrays里面的合并排序算法实现。先把完整的源代码贴过来看看
public static void sort(Object[] a, int fromIndex, int toIndex) {
rangeCheck(a.length, fromIndex, toIndex);
Object[] aux = copyOfRange(a, fromIndex, toIndex);
mergeSort(aux, a, fromIndex, toIndex, -fromIndex);
}
private static ...
我们知道Java在排序上分别使用了快速排序和合并排序。下面我们就研究一下这两种排序。
本节先分析快速排序,我们以Int数组的排序为例。
Java的排序算法是这样子的:
方法声明如下:
sort1(int x[], int off, int len)
对于数组个数小于7的情况下,使用插入排序:
if
(len < 7) {
for (int i=off; i<len+off; i++)
for (int j=i; j>off &&
x[j-1]>x[j]; j--) //
在Java的Arrays和Collections类里,分别提供了对数组和List的排序算法。不过今天在看Arrays排序算法时,发现对float/long/int/char等进行排序时,使用的算法是快速排序;而对于Object数组排序则是使用的是合并排序(改进后的)。
想了一下,原因很容易理解。快速排序是不稳定的算法,这意味着对于相同的元素经过排序后会出现位置调换的情况。而对于基本类型的数组,这个却无关紧要;而对于Object数组这个则很重要,因为大部分时间我们都需要一个稳定的算法,而合并排序恰好满足这一特性。所以对原始类型数组采用了快速排序,对于Object数组采用了合并排序。
而在 ...
RollUp是上卷功能,类似于数据挖掘中的上卷操作。
ROLLUp的功能和Order by功能是互斥的。
mysql> SELECT year,
SUM(profit) FROM sales GROUP BY year;
+------+-------------+
| year | SUM(profit) |
+------+-------------+
| 2000 | 4525 |
| 2001 | 3010
|
+------+-------------+
mysql> SELECT ye ...
昨天XX面试时,一道这样的问题难住了我,就是:在这么多年的编码中,说说自己的最佳实践。当时懵掉了,虽然看过很多敏捷开发、代码清洁之道、代码大全这些关于最佳实践的书,但却一条也说不出来。趁现在有时间,想 ...
Http 1.1协议文档上规定:HTTP协议的实现应支持持久性连接。与每个请求对应一个TCP连接相比,使用持久性连接能大大减轻网络负载。在一个TCP连接上,客户端能够发送多个请求,从而降低TCP连接带来的消耗。
HTTP的请求和响应可以使用管道式的方式在TCP连接上进行。Http协议允许在没有接收到上一个请求的响应时继续发送请求,只是服务器端要以客户端发送请求的顺序进行回应。
在linux下安装zookeeper时,出现了如下的错误:
[hadoop@hadoop-master bin]$ ./zkServer.sh start
JMX disabled by user request
Using config: /opt/zookeeper-3.3.3/bin/../conf/zoo.cfg
Starting zookeeper ...
STARTED
[hadoop@hadoop-master bin]$ 2011-07-05 10:33:57,587 - INFO [ma ...
hadoop是一个分布式存储和分布式计算的框架。在日常使用hadoop时,我们会发现hadoop不能完全满足我们的需要,我们可能需要修改hadoop的源代码并重新编译、打包。
下面将详细描述如何从svn上导入并对hadoop进行eclipse下编译。
因项目使用的hadoop版本是0.20.2,所以我们基于hadoop-0.20.2来进行二次开发。
(1)首先从svn上签出源代码,svn地址:
http://svn.apache.org/repos/asf/hadoop/common/tags/release-0.20.2/
(2)在下载的过程中,准 ...
最近在编写Hadoop 的MapReduce程序的时侯,学到了不少东西,记下来备忘:
1. Mapper和Reducer的上下文执行环境信息:
在编写Mapper类时,一般使用如下的类继承声明:
public class DistinctProcessor extends MapReduceBase implements Mapper<T ...
代码如下,核心的代码在于:
public static Node reverse(Node head) {
if(head==null) {
return null;
}
Node p = head;
Node q = head.next;
p.next=null; //这个必须的~~~,否则链表就成有环的了。
while(q!=null) {
Node temp = q.next;
q.next = p;
p = q;
q = temp;
}
return p;
}
...
在看hadoop的源代码的时候,看到hadoop实现了一个自定义的RPC,于是有了自己写代码实现RPC的想法。
RPC的全名Remote Process Call,即远程过程调用。使用RPC,可以像使用本地的程序一样使用远程服务器上的程序。下面是一个简单的RPC 调用实例,从中可以看到RPC如何使用以及好处:
public class MainClient {
public static void main(String[] args) {
Echo echo = RPC.getProxy(Echo.class, "127.0.0.1", 20382); ...
在Java的面试题中很有可能问到的问题是StringBuffer和StringBuilder、HashTable和HashMap、Vector和ArrayList的区别。的确,每对类提供的操作基本上一样的。但他们确实有区别。
StringBuffer
vs StringBuilder
StringBuffer 是在JDK1.0中提供的,而StringBuilder的出现是在JDK1.5版本上。在JDK 1.0的时代,那时候为了解决StringBuffer在多线程的混乱问题,StringBuffer大多数的方法都加上了synchronized方法。用天朝的话来说“ ...