感觉百度部门之间面试都没加锁呢。。一个个部门都开始来面试了。。。
今天面了一个百度的云计算部门,对方是一个姐姐,感觉还挺客气的,说重点吧,讲讲面试的过程,不过感觉那个姐姐就是列了个题目列表,按顺序一个个问的。
(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(int i = 0; i < GetCount(); i++)
{
....
}
int i = 0;
while(i < GetCount())
{
...
}
(2)32位系统int的取值范围?
unsigned int 0~4294967295(2^32-1)
int -2147483648(-2^31) ~2147483647(2^32-1)
十亿数量级的。
(3)HashMap的源码?什么时候扩容?扩容方式?解决冲突方式?
(4)memory copy与string copy的区别?
答:表示不会,没有答出来,感觉是C++的呀。。。
网上搜了一个答案:
1、memory拷贝,根据拷贝的字节个数,从src一个一个字节拷贝到dst,拷贝过程不管src的取值,也不管dst是否能容纳。
2、因此,对于memory拷贝,src中NULL字符(取值为0的字符)后面的字符也能拷贝过去。不管dst是否能容纳,都拷贝过去,会存在踩内存。为了避免踩内存,拷贝的字节个数,需要小于等于dst分配的大小。
3、string拷贝,遇到src的NULL字符结束。因此,strcpy有两个问题特别需要注意:一,src结尾必须要有NULL字符,否则会一直拷贝下去,直到遇到NULL字符。二,dst在src有效长度的基础上,要多分配一个字符,用于保存NULL字符,如果没有多分配这个字符,会导致拷贝到dst的时候,踩一个字节的内存。
4、src没有NULL字符,会一直拷贝下去,直到遇到NULL字符,怎么解决这个问题?
使用strncpy,表示最多拷贝n个字节。如果不到n个字节,遇到src中的NULL字符,结束拷贝,并且从当前点到n位置,补充NULL。这一点和memory拷贝不同,memcpy不管src的取值,都会拷贝n个字节。
5、注意:
string src ="abcdabcd";
char* dst = new char[8];
strcpy(dst,src.c_str()); // 踩内存,src多出一个NULL,而dst分配的内存不够
strncpy(dst,src.c_str(),8);// 不踩内存
memcpy(dst,src.c_str(),8); // 不踩内存
strncpy和memcpy不踩内存,但是会导致dst没有结束符。这往往会出现问题,比如dst再拷贝到其他地方。因此,解决办法最好是 dst多分配一个字符,用于保存NULL,并且初始化dst,如下:
char* dst = new char[src.size()+1];
memset(dst,0,src.size()+1);
(5)【操作系统】页面置换算法有哪些?LRU怎么进行优化?
(6)【操作系统】分页与分段的区别?
(7)【算法题】判断一个括号字符串是否匹配正确,如果括号有多种,怎么做?如(([]))正确,[[(()错误。
答:用个栈就行啦,leetcode上的easy难度。
(8)【算法题】一个数组,前半段是递增的,后半段是递减的,找出数组中最大的值?
答:类似于二分查找,丢弃另一半,时间复杂度O(n)
(9)【算法题】最长公共子序列?
(10)【计算机网络】traceroute命令?
(11)【计算机网络】什么时候会进入time-wait状态?
(12)【JVM】什么时候会触发GC?
(13)【JVM】JVM参数设置时newsize代表了什么?
(14)Spark提交任务的整体工作流程描述一下?
(15)Spark如何进行性能调优?详细描述。
(16)Spark设置中executor-memory 和spark.default.parallelism分别代表什么?
(17)数据倾斜的解决方案?
(18)宽依赖和窄依赖的比较。。。
时间:一个小时10分钟