说说2013年搜狗校招的前端开发笔试题

Catalogue

今天上午10:00在清华三教参加的前端工程师的笔试。之前参加了腾讯、百度、小米的笔试,只有百度的那次答的不错,也进入面试了,腾讯和小米的笔试要求都比较高,会考数据结构与算法、操作系统、数据库、C/C++。

趁着还没忘干净,赶紧记录一下这次考试的心得体会,以及自己不会的题目,以便以后加强学习。

###试题不足之处
先简评一下试题,总体而言,搜狗的试题出的还不错,前端工程师需要选择试卷里面的“Web类”和“数据结构类”进行解答,而笔试其他岗位的则选择其他类的试题做就可以了,显得很条理。不足之处也是有的,主要是CSS与JavaScript的两道题涉及了W3C、ECMAJavaScript不推荐的内容。

个人觉得不应该出现在这样的笔试中的题目是分别如下:

(1)关于IE6下的CSS选择器
(题目内容具体记不清楚了,差不多是这样吧。)

下面的CSS规则在IE6中会显示为多大的字号?

h1: 19px!important;

h1: 20px;

*h1: 21px;

_h1: 22px;

刚才又查了一下,IE6的全球市场份额只有4.93%了。这既然是校招,既然着眼于未来,为何题目却要针对IE6去考?我只能理解成为了考察大家对浏览器兼容性问题的认识而不得不搬出IE6来。

(2)关于substr()

题目:

已知 var str = “0123456789”;

下面哪个结果跟其他三个不一样?

(A). str.substring(5) (B). str.substring(-5) (C). str.substr(5) (D). str.substr(-5)

这道题就非常不好,考到了substr()的用法——w3school里也说了,“ECMAscript 没有对该方法进行标准化,因此反对使用它。”

所以,从这两个题来看,搜狗的开发人员是并不打算遵从W3C的标准和规范来开展工作的。这样下去,只会给自己添麻烦。

###Web类试题
(1)关于JavaScript的作用域、this关键字。

请问下面的代码输出多少?
1
2
3
4
5
6
var a = 10;
function aa(){
this.a = 20;
}
aa();
console.log(a);

=> 结果输出为20,因为this默认情况下指向全局对象,而a又已经存在于全局对象中了,所以函数aa()修改的正是全局变量a

由于此处对函数的调用,是直接作为函数来调用的,所以存在一个大问题:

根据ECMAScript3和非严格的ECMAScript5对函数调用的规定,调用上下文(this的值)是全局对象。然而,在严格模式下,调用上下文则是undefined。

所以,上面的代码仅在非严格模式下才会输出20。这个题目也展示了一种不好的编程风格——它在以函数形式调用的函数内部使用了this关键字,而这是通常来说要避免的,因为上下文不能很明确。

(2)HTML的DOM模型

简答题:

简述浏览器事件处理机制,以及如何阻止事件的传播?

###数据结构类试题
我不会的:

广度优先搜索用到了哪种数据结构?

(A)链表 (B)队列 (C)栈 (D)散列表

还考了那道很常见的题目:

从0点~12点,时针和分针相遇多少次?时针、分针和秒针相遇多少次?

主观题1:

已知数组a[]与b[]均是长度为N的非递减序列,给出求前k个a[i]+b[j]值最小的算法,并给出算法复杂度。

主观题2我完全不会,也不记得了。

总之,数据结构这块,自己完全是小白啊。下周再学习学习JS,CSS,练习几个AI卡通人物例子,就开始复习C++并再次学习数据结构吧。不懂数据结构的前端不是好后台!

Share