感觉百度部门之间面试都没加锁呢。。一个个部门都开始来面试了。。。
今天面了一个百度的云计算部门,对方是一个姐姐,感觉还挺客气的,说重点吧,讲讲面试的过程,不过感觉那个姐姐就是列了个题目列表,按顺序一个个问的。
(1)for和foreach的区别(从源码角度分析一下)?
答:在固定长度或长度不需要计算的时候for循环效率高于foreach。
在不确定长度,或计算长度有性能损耗的时候,用foreach比较方便。
并且foreach的时候会锁定集合中的对象,期间不能修改。
foreach
//第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a,以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束.
foreach (var a in GetList()){
...
}
var a;
IEnumerator e = GetList().GetEnumerator();
while (e.MoveNext){
a = e.Current;
}
for
//for 循环每次循环会调用 GetCount() 来比较长度, 而 foreach 不考虑长度,只调用一次GetList()。
for(i