1. 程式人生 > >百度前端面試經驗之程式題

百度前端面試經驗之程式題

前兩天百度面試過程中,被問到一個程式,當時沒寫出來。現在記錄一下:

首先,面試官讓寫一個程式,實現:

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。

然後還有一些細節的東西,問得深一點就卡住了。只怪自己能力還不行,就當是積累積累面試經驗吧。