百度实习生面试总结
LeeSir 发表于 2015年03月29日 18:02

3月26号投了一封简历给EFE的祖明师兄,立马接到电话约了27号上午9点半的面试,在百度总部。26号晚上碰巧在FE群里认识了一个EFE的同学,第二天全程带路将我带到百度总部,在此感谢一下翟师兄~ 如果拿到百度实习offer一定请吃饭。

一面比较简单,题目比较基础,都答上来了,题目就不说了。直接让我坐那等二面。

二面的面试官一上来就给了一张试题让我当场做,试题映像比较深刻,也有一定的难度和深度,所以来具体说一下二面的试题。

第一题:实现一个tips。

刚开始忘了tips是什么鬼,直接空着,后来面试官告诉我就是网页上的小提示,鼠标移动到某元素的时候弹出一个小框显示提示信息。让我答了一下大致的思路。

第二题:点击网页上的任何标签,弹出其标签名。

第三题:实现解析json的JSON.parse()代码。

我写的是用eval()实现。面试官说一般情况下要避免使用eval(),如果不用eval()怎么实现,当时没答上来。回来查了一下,eval()确实会产生很多问题,标准写法是下面这样的:

function Parsejson(json){
	return (new Function("","return "+json))();
}

第四题:将数字12345678.12345格式化为12,345,678.12。

说了一下大概思路:先用split()函数将字符串整数部分和小数部分分开,小数部分直接用number.toFixed(2)处理就行了,整数部分先用转置函数reverse()将整数字符串部分转置,再用for循环,每隔3个字符插入一个逗号就行了,最后记得转置回来,再用join()拼接起来就行了。

function formatNumber(n){
	var a = (n + 0).toFixed(2) + "";
	var b = a.split(".");
	var c = b[0].split("").reverse();
	var d = "";
	for(var i = 0; i < c.length; i++){
		d += c[i] + ((i+1)%3==0&&(i+1)!=c.length?",":"");
	}
	alert(d.split("").reverse().join("") + "." + b[1]);	
}
formatNumber(123456789.123456);//输出123,456,789.12

第五题:考察js变量作用域,附带考了this和call,具体代码忘了

试题做完还问了我CSS选择器优先级的问题、js模块化、js跨域和闭包问题免不了(还好经过阿里面试之后有好好看,都回答上来了)。

未完待续……