您的位置:首页 > 职场人生

百度前端面试经验之程序题

2016-09-24 11:02 204 查看
前两天百度面试过程中,被问到一个程序,当时没写出来。现在记录一下:

首先,面试官让写一个程序,实现:

console.log(add(1)(3)); // 3


当时,一下想到的就是return一个function,function中在return加的结果,于是拿笔刷刷开写:

function add(e1){
return function(e2){
return e1+e2;
}
}
console.log(add(1)(2));


写完之后还在想,只需要三行就能搞定的程序,不太像百度这种大公司的风格。再确定了一下,应该没问题。于是把代码递给了面试小哥。面试小哥一看,嘴角轻微地短暂到不太容易让人注意到的上扬了一个小角度。面试时候出现这种“微笑”的时候往往意味着“小样,我倒要看看你有什么能耐”。

果然,面试小哥接着说:“如果你这样做的话,如果我要实现add(1)(2)(3)(4)(5)呢?”。果不其然,这感觉有点百度的风格了。当时就蒙圈了,平时只做过两个参数的,这么多的还真没研究过。没办法,硬着头皮想呗:“这里应该考的是闭包,反复调用应该要用到递归,这应该。。。”憋了半天没出来,还一直期待会有那么一秒我的小宇宙能爆发。无奈的是,最后只憋出了几滴汗。

面试官见这么久没反应,好意来提示一下,这里需要用到闭包。我点点头,看来我猜对了,可是猜对了又不加分。又过了几分钟,还是没结果,面试小哥又提示到,反复调用是不是要用到递归呢,果然又猜对了,可是还是不加分。

无奈掉坑里,自己太矮,面试小哥想拉也拉不到,最后还是没弄出来。然后就接着聊其他的话题了。所以说还是要提高自己的能力。出来查找了一下资料,才明白应该这样写:

function myadd(e1){
function add(e2){
e1 = e1+e2;
return add;
};
add.toString = add.valueOf = function(){return e1;};
return add;
}
console.log(myadd(1)(2)(3)(4)(5));


另外,我们还能看到的一个与之类似的题目就是拼接单词,如下:

function myadd(e1){
function add(e2){
e1 = e1+", "+e2;
return add;
};
add.toString = add.valueOf = function(){return e1;};
return add;
}
console.log(myadd("hello")("world")("welcome")("to")("my")("blog").toString()); // hello, world, welcome, to, my, blog


这个题目没做出来,面试小哥就开始问实习项目,在谈项目的时候开始切入点问:

1、问了get和post的不同,这个比较简单,然后接着问了使用get方式时需要注意哪些问题,答了安全性和参数大小以及参数特殊字符的编码,答完一个面试官就接着问还有呢,三个之后实在想不出来了,估计还没答到面试官想要的答案上。

2、第二个问怎么从URL中取出每一个参数,截取参数想到的就是indexOf以及split,可是面试官好像也还不太满意,最后说是要用正则。无奈平时用正则不多,只有在用到的时候才会去搜一下。

3、最后实现一个三列布局,左右固定,中间自适应。这个比较经典,可以用绝对定位,也可以用弹性盒子:flex。

然后还有一些细节的东西,问得深一点就卡住了。只怪自己能力还不行,就当是积累积累面试经验吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  前端 百度 面试