摘要: 1. 计算机系统使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行;当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了。缓存一致性:多处理器系统中,因为共享同一主内存,当多个处理器的运算任务都设计到同一块内存区域时,将可能导致各自的缓存数据不一致的情况,则同步回主内存时需要遵循一些协议。乱序执行优化:为了使得处理器内部的运算单位能尽量被充分利用。2. JAVA内存模型目标是定义程序中各个变量的访问规则。(包括实例字段、静态字段和构成数组的元素,不包括局部变量和方法参数)所有的变量都存储在主内存中(虚拟机内存的一部分)。每条线程都由 阅读全文
posted @ 2012-06-15 11:05 淩風 阅读(102369) 评论(4) 推荐(8) 编辑
摘要: split操作执行的是将HBase中较大的Region分为两个。因为split比较耗时,因此split是在独立的线程中完成的,相关类是CompactSplitThread。首先,CompactSplitThread中分区的方法主要是以下两个:CompactSplitThread.requestSplit(HRegion):检测是否需要分区,如果需要分区则调用requestSplit(HRegion, byte[])CompactSplitThread.requestSplit(HRegion, byte[]):执行分区操作CompactSplitThread.requestSplit(HReg 阅读全文
posted @ 2013-08-13 22:10 淩風 阅读(1845) 评论(0) 推荐(0) 编辑
摘要: hive.optimize.cp=true:列裁剪hive.optimize.prunner:分区裁剪hive.limit.optimize.enable=true:优化LIMIT n语句hive.limit.row.max.size=1000000:hive.limit.optimize.limit.file=10:最大文件数1. 本地模式(小任务):需要满足以下条件: 1.job的输入数据大小必须小于参数:hive.exec.mode.local.auto.inputbytes.max(默认128MB) 2.job的map数必须小于参数:hive.exec.mode.local.a... 阅读全文
posted @ 2013-06-21 10:08 淩風 阅读(26914) 评论(0) 推荐(2) 编辑
摘要: 1.ThreadLocal类 线程级别的局部变量,为每个使用该变量的线程提供一个独立的变量副本,每个线程修改副本时不影响其他线程对象的副本。 ThreadLocal实例通常作为静态私有字段出现在一个类中。2.什么情况会抛出InvalidMonitorStateException异常 调用Object.wait()/Object.notify()/Object.notifyAll()中的任何一个方法时,如果当前线程没有获得该对象的锁,那么就会抛出 IllegalMonitorStateException 的异常3.Object.wait()和Thread.sleep() Object.wait. 阅读全文
posted @ 2013-06-21 09:32 淩風 阅读(2111) 评论(0) 推荐(0) 编辑
摘要: 1. 只支持相等JOIN。2. 多表连接当使用不同的列进行JOIN时,会产生多个MR作业。3. 最后的表的数据是从流中读取,而前面的会在内存中缓存,因此最好把最大的表放在最后。SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)//暗示4. JOIN在WHERE子句前进行处理。SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key) WHERE a.ds=' 阅读全文
posted @ 2013-04-03 16:20 淩風 阅读(10394) 评论(0) 推荐(0) 编辑
摘要: 虚拟机类加载机制:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。Java语言里,类型的加载和连接过程是在程序运行期间完成的。类的生命周期: 加载 loading 验证 verification 准备 preparation 解析 resolution 初始化 initialization 使用 using 卸载 unloading有且只有以下四种情况必须立即对类进行”初始化”(称为对一个类进行主动引用):遇到new、getstatic、putstatic、invokestatic这四条字节码指令时(... 阅读全文
posted @ 2012-11-05 23:56 淩風 阅读(9347) 评论(2) 推荐(2) 编辑
摘要: 六、 函数1. 函数调用做了两件事情:用对应的实参初始化函数的形参,并将控制权转移给被调用函数。主调函数的执行被挂起,被调函数开始执行。函数的运行以形参的(隐式)定义和初始化开始。当执行到 return 语句时,函数调用结束。被调用的函数完成时,将产生一个在return 语句中指定的结果值。执行 return 语句后,被挂起的主调函数在调用处恢复执行,并将函数的返回值用作求解调用操作符的结果,继续处理在执行调用的语句中所剩余的工作。2. 函数不能返回另一个函数或者内置数组类型,但可以返回指向函数的指针,或指向数组元素的指针的指针。3. 函数形参表可以为空,但不能省略。没有任何形参的函数可以用空 阅读全文
posted @ 2012-10-16 10:44 淩風 阅读(858) 评论(1) 推荐(0) 编辑
摘要: 四、 表达式1. 算术运算符高优先级的操作符要比低优先级的结合得更紧密。这些算术操作符都是左结合。操作符功能用法+unary plus(一元正号)-unary minus(一元负号)*multiplication(乘法)/division(除法)%remainder(求余)+addition(加法)-subtraction(减法)2. 位操作符左结合,移位操作符具有中等优先级:其优先级比算术操作符低,但比关系操作符、赋值操作符和条件操作符优先级高。操作符功能~位求反<<左移在右边插入 0 以补充空位>>右移如果其操作数是无符号数,则从左边开始插入 0;如果操作数是有符号 阅读全文
posted @ 2012-10-16 10:42 淩風 阅读(1430) 评论(0) 推荐(0) 编辑
摘要: 二、 标准库类型:: 操作符,该操作符是作用域操作符,它的含义是右操作数的名字可以在左操作数的作用域中找到。using namespace::name;每个名字都需要一个using声明。1. string类型string 类型的输入操作符:• 读取并忽略开头所有的空白字符(如空格,换行符,制表符)。• 读取字符直至再次遇到空白字符,读取终止。 string.empty() string.size() string[n] string1+string2string::size_type类型保存string的长度。当进行 string 对象和字符串字面值混合连接操作时,+ 操作符的左右操作数必须至 阅读全文
posted @ 2012-09-10 14:53 淩風 阅读(1354) 评论(1) 推荐(0) 编辑
摘要: 编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor:#include) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code:.o或.obj文件) → 链接器 (Linker) → 可执行程序 (executables)。 语法错误 类型错误 声明错误:从标准库中访问名字时忘记使用“std::” Code::Blocks IDE: http://www.codeblocks.org/ http://sourc... 阅读全文
posted @ 2012-09-06 17:38 淩風 阅读(1020) 评论(3) 推荐(0) 编辑
摘要: /** * 插入排序 * 时间复杂度O(n2) * @param array原地排序算法 */ public void insertSort(int[] array) { for (int i = 1; i < array.length; i++) { int present = array[i]; int position = i; while (position > 0 && array[position - 1] > present) {// 右移 array[position] = array[position - 1]; position--; .. 阅读全文
posted @ 2012-07-23 15:20 淩風 阅读(1604) 评论(0) 推荐(0) 编辑