某公司T+M测试题

最近某公司研发部门T+M改革,别的没见着,上来先考试测试水平,想想也是,作为市值百亿的上市公司,也该好好抓抓研发了。
作为一个销售型公司,主要是做项目,销售导向太浓烈,研发部门的老大感觉就是销售和售前,吹起来都是山呼海啸的。对内对外都一个德行,关键是心里素质好,说完就跟没事人似得。
一个四五年前的patch,多少年都没迭代了,到现在还在吹,喂,hadoop从0.20都升级到3.0了,醒醒啦。

一 选择题

1.x 2.x 3.x 。。。

主要考察了数据结构和一些算法类的东西,其中一道稀疏矩阵表述图,求入度的题实在是记不得了,上学那阵图这部分学的就不好。

剩下的自行脑补哈,反正是考试前给了答案,要求不能全答对

二 简答题

1.原子操作,死锁及原因,解决;竞争及原因,解决

答案:(来源网络)
原子操作(atomic operation)意为”不可被中断的一个或一系列操作” ;
所谓死锁,是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面。
死锁原因:
如果在计算机系统中同时具备下面四个必要条件时,那麽会发生死锁。
〈1〉互斥条件。
〈2〉不可抢占条件。
〈3〉占有且申请条件。
〈4〉循环等待条件。
死锁的解决我回答的是自愿申请定义为原子操作,即破坏3.

竞争待续

参考:
http://blog.csdn.net/abigale1011/article/details/6450845/

2.cap原理及hbase的cap。

C(一致性):所有的节点上的数据时刻保持同步
A(可用性):每个请求都能接受到一个响应,无论响应成功或失败
P(分区容错):系统应该能持续提供服务,即使系统内部有消息丢失(分区
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。

HBase选择了C(一致性)与P(分区可容忍性);
hbase之所以是CP系统,实际和底层HDFS无关,它是CP系统,是因为对每一个region同时只有一台region server为它服务,对一个region所有的操作请求,都由这一台region server来响应,自然是强一致性的.在这台region server fail的时候,它管理的region failover到其他region server时,需要根据WAL log来redo,这时候进行redo的region应该是unavailable的,所以hbase降低了可用性,提高了一致性.设想一下,如果redo的region能够响应请求,那么可用性提高了,则必然返回不一致的数据(因为redo可能还没完成),那么hbase就降低一致性来提高可用性了.

3.hadoop,hbase,spark 内部通信框架原理

4.jvm 内存模型,gc;hadoop,hbase如何管理gc

这里写图片描述

名称 特征 作用 配置参数 异常
程序计数器 占用内存小,线程私有,生命周期与线程相同 大致为字节码行号指示器
虚拟机栈 线程私有,生命周期与线程相同,使用连续的内存空间 Java 方法执行的内存模型,存储局部变量表、操作栈、动态链接、方法出口等信息 -Xss StackOverflowError OutOfMemoryError
java堆 线程共享,生命周期与虚拟机相同,可以不使用连续的内存地址 保存对象实例,所有对象实例(包括数组)都要在堆上分配 -Xms -Xsx -Xmn OutOfMemoryError
方法区 线程共享,生命周期与虚拟机相同,可以不使用连续的内存地址 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 -XX:PermSize:16M -XX:MaxPermSize:64M OutOfMemoryError
运行时常量池 方法区的一部分,具有动态性 存放字面量及符号引用 配置参数 异常

GC即垃圾收集机制是指JVM用于释放那些不再使用的对象所占用的内存。
GC基本原理
Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。 对于程序员来说,分配对象使用new关键字;释放对象时,只要将对象所有引用赋值为null,让程序不能够再访问到这个对象,我们称该对象为”不可达的”.GC将负责回收所有”不可达”对象的内存空间。
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是”可达的”,哪些对象是”不可达的”.当GC确定一些对象为”不可达”时,GC就有责任回收这些内存空间。但是,为了保证 GC能够在不同平台实现的问题,Java规范对GC的很多行为都没有进行严格的规定。例如,对于采用什么类型的回收算法、什么时候进行回收等重要问题都没有明确的规定。因此,不同的JVM的实现者往往有不同的实现算法。这也给Java程序员的开发带来行多不确定性。

..如何管理
这部分水挺深,待续

参考:
http://blog.csdn.net/u012152619/article/details/46968883
https://my.oschina.net/xianggao/blog/86985

三 编程题

1.
参加Hadoop RPC框架实现
nio实现进程间通信

2.
参见MapReduce TeraSort源代码
mapreduce实现全局有序

3. 快排序实现, void quickSort(int r[], int s, int t) { int i=s, j=t, x=r[s]; while(i