摩根斯坦利面试 - 分布式开发
第一轮
电话面试,纽约面试官,涉及binary search, completable future, volatile等很多concurrency的问题。
比如自己implement thread pool.最后题目是设计一个电梯的class
第二轮
onsite三小时。
第一轮
先是问了一些分布式client-broker-server系统可能出现的很多开发问题,例如load balancing, distributed cache, concurrency, disaster tolerance等等。然后除了两道算法题目,
第一题
class myIterator implements Iterator<T> { Iterator<T> delegate; hasNext() { } // next will remove elements from iterator next(){ } //return the current top element without deleting it from Iterator peek() { } }
解决方法是内部维持一个值currentValue, peek总会返回这个值,next会更新删除下一个值。注意next如果是null会抛出异常等corner case
第二题
给定一个二叉树,按层遍历这个树并返回List<List<Integer>> results, 每一level的所有值都在一个list里。
第二轮
Garbage Collection有那几种,怎么工作的。volatile关键字。什么是tail recursion, 什么是SOLID原则,什么是open-close, single-responsibily。equals and hashCode。
然后是算法题目
第一题,给定一个set, return all power set of it. (1,2,3)要返回(空集,(1), (2), (3), (1, 2), (1,3), (2,3), (1,2,3)要用divide and conquer的思想递归的解决问题。对于一个n elements set, 先得到n-1的set,然后每一个set都各多加入一次所有的单个element
第二题,level by level遍历一个树
第三题,如何用多线程处理List<String> 然后所有结果按顺序放在ArrayList里面。
第三轮
第一题,return一个String的所有palindrome形式。
第二题,reverse linked list
第三题,
f(i) {
//xxx if(i > 2) { f(i-1); } System.out.println(i); }
1) f(6), 上面题目会打出什么
2 3 4 5 6
2) f(i-1)变成f(--i)会怎样
2 2 3 4 5
3) f(i-1) 变成f(i--)会怎样
Throw StackOverFlowException
4) System.out.print 放在xxx位置会打出什么
6 5 4 3 2 1