`
文章列表
在最近一段时间的工作中,积累了几点异常处理的经验,怕时间久了就淡忘了,因此写下本文记录下来,一遍日后总结和查看。 1.在通过反射执行方法的时,如Method.invoke(),如果被反射执行的方法体抛出了Exception,这个异常会被包装成InvocationTargetException重新抛出,下面是jdk里面的源码:   public Object invoke(Object obj, Object... args) throws IllegalAccessException, IllegalArgumentException, Invoca ...
Hadoop的初学者经常会疑惑这样两个问题:1.Hadoop的一个Block默认是64M,那么对于一个记录行形式的文本,会不会造成一行记录被分到两个Block当中?2.在把文件从Block中读取出来进行切分时,会不会造成一行记录被分成两个InputSplit,如果被分成两个InputSplit,这样一个InputSplit里面就有一行不完整的数据,那么处理这个InputSplit的Mapper会不会得出不正确的结果? 对于上面的两个问题,首先要明确两个概念:Block和InputSplit       1. block是hdfs存储文件的单位(默认是64M);      2.  ...
本文不涉及MapReduce的原理介绍,只是从源代码的层面讲讲我对Hadoop的MapReduce的执行过程、数据流的一点理解。 首先贴上一张来之于Yahoo Hadoop 教程 的图片   由上图可以看出,在进入Map之前,InputFormat把存储在HDFS的文件进行读取和分割,形成和任务相关的InputSplits,然后RecordReader负责读取这些Splits,并把读取出来的内容作为Map函数的输入参数。下面我就从代码执行的角度来看,数据是如何一步步从HDFS的file到Map函数的。在Yahoo Hadoop 教程 中已经详细讲解 ...
  今天在Work Station6.5下搭建了一个Ubuntu11.04,安装的时候网络模式选的是NAT。安装成功后,却发现不能上网,奇怪了,Nat模式是与宿主共享网络,物理机能上网,为什么虚拟机却不能上网。。。纠结啊。。。开始一步步找原因。。。折腾了小半会,终于查到问题。记录下来,以便以后查看。。。。   1. 在NAT模式下,虚拟机是通过VMnet8联网的,因此首先查看虚拟机的Nat和DHCP是否开启,点击Work Station的Edit--Virtual Network Editor,在弹出的窗口里查看Summary和DHCP两个tab。  
逛论坛的看到一个疑似Google的多线程面试题,觉得挺好玩的,思考了一下。题目如下:       启动4个线程,向4个文件A,B,C,D里写入数据,每个线程只能写一个值。        线程1:只写1        线程2:只写2        线程3:只写3        线程4:只写4        4个文件A,B,C,D。        程序运行起来,4个文件的写入结果如下:        A:12341234...        B:23412341...        C:34123412...        D:41234123...         经过分析线程1,2,3,4 ...
基于锁得算法会带来一些活跃度失败的风险。如果线程在持有锁得时候因为阻塞I/O,页面错误,或其它原因发生延迟,很可能所有线程都不能前进了。一个线程的失败或者挂起 不应该影响其他线程的失败或挂起,这样的算法称为非阻塞(nonblocking)算法;如果算法的每一步骤中都有一些线程能够继续执行,那么这样的算法称为锁自由(lock-free)算法。在线程间使用CAS进行协调,这样的算法如果能够正确的构建的话,那么它就既是非阻塞的,有事锁自由的。在实现同等功能的前提下,非阻塞算法比基于锁得算法更加复杂。创建非阻塞算法的前提是为了维护数据的一致性,解决如何把原子化范围缩小到一个唯一的变量。下面 ...
本文通过对实现了两个Stack,一个是基于非阻塞(Non-Blocking)算法,另一个是基于阻塞算法(Blocking)的,然后对这两个队列进行多线程环境下的大量Insert操作,通过比较二者的消耗时间,进而比较基于Volatile和CAS轮询操作的非阻塞算法和基于锁的阻塞算法在时间上的性能差异究竟有多大。   基于非阻塞算法的Stack   public class ConcurrentStack<E> { AtomicReference<Node<E>> top = new AtomicReference<Node<E&g ...
CyclicBarrier是一个同步辅助类,允许一组线程相互等待,直到到达一个共同的barrier point。如果一组线程需要不定时地相互等待,这个时候就可以用到CyclicBarrier。CyclicBarrier之所以带“Cyclic”前缀,是因为当所有相互等待的线程释放后,Barrier可以被重复利用。 CyclicBarrier的构造函数为:   public CyclicBarrier(int parties, Runnable barrierAction) { if (parties <= 0) throw new IllegalArgum ...
在多线程编程中,我们很难控制线程的具体启动时间,调用线程的Start()只是启动一个线程,使其处于就绪阶段,至于什么时候CPU开始执行线程Run方法,这是操作系统调度决定的,在理论上,如果有多个CPU,操作系统的调度可能使的多个线程真正同时开始,但是在单CPU的机器上,是没法做到多个线程真正同时启动的。我们只能尽可能地使得线程之间的启动间隔很短,模拟多个线程同时启动。下面这个程序模拟一个有10辆赛车参加的赛车比赛,通过使用CountDownLatch来控制10辆赛车尽可能地同时启动。 public class StartSimultaneously { private Cou ...
组合对象这一章主要讲述的是如何将线程安全或者非线程安全的组件以一种安全的方式组合成更大的组件或程序,并如何保证不会让程序意外破坏这些组件的线程安全性 设计线程安全类的过程中的三个基本要素    对 ...
    在多媒体应用中,针对Client端的带宽情况,Server端对Video Data要进行不同的处理,当Client带宽比较差时,需要在Server端对不同的视频帧进行是丢弃处理,如在低带宽条件下,对于非关键帧,为了更好的用户体验性和播放的平滑性,可对其进行丢弃,而关键帧,则一般不给予丢弃。下面结合代码,详细分析下Red5是如何根据Client端的带宽进行丢包处理的。     Red5的Video Data丢包处理的代码集中在其PlayEngine 的 PushMessage方法,代码如下: if (body instanceof VideoData) { IVide ...
因为项目组在实行Scrum,想在下一阶段的开发中实行TDD,因为我就为几个已经功能完善的模块添加Unit Test Case。在此过程中,就发现了一些问题。       问题一 在一个模块的一个主要业务方法中,需要从数据库中读取数据。   AllocateStream(String key, ServetlContext context) { .......... ApplicationContext = WebApplicationContextUtils.getWebApplicationContext(context ...
    这几天在做一个Web监测系统,需要对多个Server进行监测,采用的做法就是把需要监测的Server在页面上显示出来,然后通过Ajax对各个Server进行异步监测,开始的时候,针对每个Server,我都采用同一个JS方法循环和后台进行异步通信,结果程序一跑,发现根本不能做到同时异步监测多个Server,因此我想到了在Web页面Load的时候,根据后台返回的Server的个数,动态为每个Server创建不同的JS函数来处理异步通信请求。这样就可以做到同时异步监测多个Server。代码如下:   Html代码,被监测的Server列表: <body onload="i ...
    有很长一段时间没做Web前端开发了,这几天工作中做一个小项目需要做几个Web页面,其中涉及到一些JS的知识,很多都不怎么熟悉了,花了不少时间才完成工作需求。因此写几篇blog记录下来。     在一个Web页面中,有一个表格,其是根据Struts2的Iterator标签动态生成的,改表格的Html代码如下: <table width="550" id="serverTab" border="1" cellpadding="0" cellspacing="0" alig ...
A和B中各存放着一亿条不重复的URL,URL存放时无序的,且URL是没有特征的,A和B可以试任意数据结构,也可以是存在数据库中。 如何找出A中有而B中没有的URL。 我当时给出的思路是: 依次遍历A和B,把从A和B里取出来的URL进行hashcode变换,把每条URL转换成key。相同的URL转换成相同的hashcode,然后用这个hashcode充当数组的下标或者map的key,数组的元素或map的value就是URL在A和B中的出现次数。   当时面试官说这是个可行的办法之一。所以我觉得应该还有更好的办法,因为要把url做 hashcode,而且要做到不冲突,那么需要的数字就要很大很大。 ...
Global site tag (gtag.js) - Google Analytics