来报个uber的onsite面经回报地里【一亩三分地论坛面经版】 - Powered by Discuz!
第一轮,2 on 1,白板写valid sudoku,lc原题,lz紧张了一下,仔细test,结果怎么查怎么对,面试官也不出声。。还以为有bug,结果果然是bug free。面试官满意之后,仔细讨论这段代码在memory中的变化,在for循环之外和之内建立对象在底层的区别,和被大量调用时时间的区别。然后考android的listview的design。其中设计10gb的item如果想显示在特定屏幕的view上面,底层怎么优化,因为太大没办法一下load在memory里。然后考了object pool。然后还考了一些细节的概念和处理,记不太清楚了,总之被问了很多。然后提问题,临走时表示很满意,后几轮加油。
http://blog.csdn.net/it_man/article/details/8225477
(6)。 避免在循环体中声明创建对象,即使该对象占用内存空间不大。
这种情况在我们的实际应用中经常遇到,而且我们很容易犯类似的错误,例如下面的代码:
Java代码
for (int i = 0; i < 10000; ++i) {
Object obj = new Object();
System.out.println("obj= " + obj);
}
上面的做法会浪费较大的内存空间。正确的做法如下所示:
Java代码
Object obj = null;
for (int i = 0; i < 10000; ++i) {
obj = new Object();
System.out.println("obj= "+ obj);
}
采用上面的第二种编写方式,仅在内存中保存一份对该对象的引用,而不像上面的第一种编写方式中代码会在内存中产生大量的对象引用,浪费大量的内存空间,而且增大了垃圾回收的负荷。因此在循环体中声明创建对象的编写方式应该尽量避免。
第二轮,1 on 1, 用电脑coding,本以为eclipse,没想到却是hacker啥的一个网页编译器,用java。题目还是一道valid sudoku,lz上一轮做过,所以瞬间写完,但要求各种unit test,大概折腾了20多分钟后,就开始跟我讨论android应用的design,问我一些app的设计思路,感觉就是考design pattern,然后我还把我之前的android app跟他说了下,结果要看我代码,然后我就跟他demo一下app,说了些我当时app的优缺点。然后时间到了。很满意的走了
http://massivealgorithms.blogspot.com/2014/06/leetcode-valid-sudoku-darrens-blog.html
第三轮,2 on 1,上来先自我介绍。然后又是白板coding,考了2道题,但许许多多的follow up。第一题自己写一个hashtable。分别实现open addressing和separate chaining,大概讲讲加上伪代码就行。hashfunction怎么实现,string的hashcode怎么实现的。等等follow up我现在都不记得了,还问了好多细节。然后问如果我想记录insert的顺序怎么办,怎么设计这个hashtable。然后又问了链表的删除等细节的问题,双链表啊单链表啊。。。面试官俩人都很满意。lz掌握细节还可以,所以都是秒答,秒写代码,所以到这时间还有15分钟左右.
JDK String.hashCode()
LinkedHashMap
然后又出了一道design的题,竟然还要写代码的。题目就是类似google搜索引擎里面输入时候,关于你输入开头的所有内容在你的搜索记录里的要都显示在下面。例如:你输入u,会显示uber, unique, unbelieve。你输入ub时候只会显示uber了。我先说了用hashmap,然后自己分析了一下tradeoff,因为太占空间了嘛,然后又想了想,我就说可以用trie tree,面试官此时表现的很兴奋,然后让我说说trie的思路。我当时就感觉是不是从来没有面试者回答过trie的方法啊。。。不至于啊。。。然后就只让我实现search部分的代码。我用的hashmap,写个类就好了。不难。然后俩人很满意,说very good job。然后又问我why uber。然后让我问问题了。
第四轮,1 on 1 manager轮,linkedin过来的,这轮出乎意料没有写一行代码,纯聊天,和设计思路。因为lz两年前有创业经历,所以主要聊当时我们的app的设计思路,tradeoff和改进地方之类的。然后就让我demo我在研究生期间上课做的那个app,说design pattern和算法,因为里面涉及machine learning的部分。然后我跟他说了些uber不足的地方,看起来他很有兴趣,然后问我我觉得如果改进,说完他貌似比较满意。然后就聊些有的没的。
Read full article from 来报个uber的onsite面经回报地里【一亩三分地论坛面经版】 - Powered by Discuz!
第一轮,2 on 1,白板写valid sudoku,lc原题,lz紧张了一下,仔细test,结果怎么查怎么对,面试官也不出声。。还以为有bug,结果果然是bug free。面试官满意之后,仔细讨论这段代码在memory中的变化,在for循环之外和之内建立对象在底层的区别,和被大量调用时时间的区别。然后考android的listview的design。其中设计10gb的item如果想显示在特定屏幕的view上面,底层怎么优化,因为太大没办法一下load在memory里。然后考了object pool。然后还考了一些细节的概念和处理,记不太清楚了,总之被问了很多。然后提问题,临走时表示很满意,后几轮加油。
http://blog.csdn.net/it_man/article/details/8225477
(6)。 避免在循环体中声明创建对象,即使该对象占用内存空间不大。
这种情况在我们的实际应用中经常遇到,而且我们很容易犯类似的错误,例如下面的代码:
Java代码
for (int i = 0; i < 10000; ++i) {
Object obj = new Object();
System.out.println("obj= " + obj);
}
上面的做法会浪费较大的内存空间。正确的做法如下所示:
Java代码
Object obj = null;
for (int i = 0; i < 10000; ++i) {
obj = new Object();
System.out.println("obj= "+ obj);
}
采用上面的第二种编写方式,仅在内存中保存一份对该对象的引用,而不像上面的第一种编写方式中代码会在内存中产生大量的对象引用,浪费大量的内存空间,而且增大了垃圾回收的负荷。因此在循环体中声明创建对象的编写方式应该尽量避免。
第二轮,1 on 1, 用电脑coding,本以为eclipse,没想到却是hacker啥的一个网页编译器,用java。题目还是一道valid sudoku,lz上一轮做过,所以瞬间写完,但要求各种unit test,大概折腾了20多分钟后,就开始跟我讨论android应用的design,问我一些app的设计思路,感觉就是考design pattern,然后我还把我之前的android app跟他说了下,结果要看我代码,然后我就跟他demo一下app,说了些我当时app的优缺点。然后时间到了。很满意的走了
http://massivealgorithms.blogspot.com/2014/06/leetcode-valid-sudoku-darrens-blog.html
第三轮,2 on 1,上来先自我介绍。然后又是白板coding,考了2道题,但许许多多的follow up。第一题自己写一个hashtable。分别实现open addressing和separate chaining,大概讲讲加上伪代码就行。hashfunction怎么实现,string的hashcode怎么实现的。等等follow up我现在都不记得了,还问了好多细节。然后问如果我想记录insert的顺序怎么办,怎么设计这个hashtable。然后又问了链表的删除等细节的问题,双链表啊单链表啊。。。面试官俩人都很满意。lz掌握细节还可以,所以都是秒答,秒写代码,所以到这时间还有15分钟左右.
JDK String.hashCode()
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
JDK 8 Hashmap.hash
* Computes key.hashCode() and spreads (XORs) higher bits of hash
* to lower. Because the table uses power-of-two masking, sets of
* hashes that vary only in bits above the current mask will
* always collide. (Among known examples are sets of Float keys
* holding consecutive whole numbers in small tables.) So we
* apply a transform that spreads the impact of higher bits
* downward. There is a tradeoff between speed, utility, and
* quality of bit-spreading. Because many common sets of hashes
* are already reasonably distributed (so don't benefit from
* spreading), and because we use trees to handle large sets of
* collisions in bins, we just XOR some shifted bits in the
* cheapest possible way to reduce systematic lossage, as well as
* to incorporate impact of the highest bits that would otherwise
* never be used in index calculations because of table bounds.
*/
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
JDK 7 Hashmap.hash
final int hash(Object k) {
int h = hashSeed;
if (0 != h && k instanceof String) {
return sun.misc.Hashing.stringHash32((String) k);
}
h ^= k.hashCode();
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
LinkedHashMap
void afterNodeAccess(Node<K,V> e) { // move node to last
LinkedHashMap.Entry<K,V> last;
if (accessOrder && (last = tail) != e) {
LinkedHashMap.Entry<K,V> p =
(LinkedHashMap.Entry<K,V>)e, b = p.before, a = p.after;
p.after = null;
if (b == null)
head = a;
else
b.after = a;
if (a != null)
a.before = b;
else
last = b;
if (last == null)
head = p;
else {
p.before = last;
last.after = p;
}
tail = p;
++modCount;
}
}
然后又出了一道design的题,竟然还要写代码的。题目就是类似google搜索引擎里面输入时候,关于你输入开头的所有内容在你的搜索记录里的要都显示在下面。例如:你输入u,会显示uber, unique, unbelieve。你输入ub时候只会显示uber了。我先说了用hashmap,然后自己分析了一下tradeoff,因为太占空间了嘛,然后又想了想,我就说可以用trie tree,面试官此时表现的很兴奋,然后让我说说trie的思路。我当时就感觉是不是从来没有面试者回答过trie的方法啊。。。不至于啊。。。然后就只让我实现search部分的代码。我用的hashmap,写个类就好了。不难。然后俩人很满意,说very good job。然后又问我why uber。然后让我问问题了。
第四轮,1 on 1 manager轮,linkedin过来的,这轮出乎意料没有写一行代码,纯聊天,和设计思路。因为lz两年前有创业经历,所以主要聊当时我们的app的设计思路,tradeoff和改进地方之类的。然后就让我demo我在研究生期间上课做的那个app,说design pattern和算法,因为里面涉及machine learning的部分。然后我跟他说了些uber不足的地方,看起来他很有兴趣,然后问我我觉得如果改进,说完他貌似比较满意。然后就聊些有的没的。
Read full article from 来报个uber的onsite面经回报地里【一亩三分地论坛面经版】 - Powered by Discuz!