08年出的一些前端面試題

民工精髓發表於2013-05-06

最近看到大家流行討論面試題,就把08年寫的一些題目拿了出來。我出的題目相對來說很基礎,因為我們公司招人的時候,不要求技術水平高,只要說得過去就行,加上薪資不高,要是題目出難了,就招不到人了。

下面我說明一下每個題目的出題用意和難度,最高5分。

1. HTML和CSS

1.1. 用HTML寫出一個如圖所示的表格:

aaaa bbbb cccc

dddd eeeeeeeeee

dddd ffffffffffffff

相同字元表示在同一個格子裡。

出這個題目的原因是,當時的B/S開發很依賴表格佈局,所以寫這種表格是非常基礎的,需要知道rowspan和colspan。難度2分。

1.2. 根據下面的程式碼,畫出它會顯示出來的大概效果。如果想要把這兩塊裡面的顯示效果調換一下,在原始碼上可以通過加些什麼做到?

<div>
    <span>a</span>
    <span>b</span>
</div>
<div>
    <div>a</div>
    <div>b</div>
</div>

這個題目的考點是塊標籤,需要知道display的inline和block,難度3分。

1.3. 在一個form裡面,預設按Enter鍵會使得這個form提交,怎樣才能取消這個事件?

這個題目很簡單,B/S開發中經常需要把系統的提交事件改成自己的,onsubmit裡面return false即可,2分。

1.4. 如下程式碼中的單選框並不能點選選中,為什麼?

<input type="radio"/>a
<input type="radio"/>b
<input type="radio"/>c

這個題目稍微有些惡搞,但經常寫程式碼的人應該不會被考住,處於一組的單選按鈕,name必須相同。2分。

1.5. 頁面中所包含的CSS樣式有很多宣告方式,可以是通過link標記引入的外部樣式,可以是定義在頁面頭部的樣式,也可以是在元素的style屬性上定義的樣式,如果這些樣式對某個屬性的定義衝突了,是按照什麼優先順序處理的?

這個非常基礎了,行間大於本頁大於外鏈。1分。

2. JavaScript

2.1. 有一個字串:abcd-ef-ghi,請用JavaScript將它處理成:ghi&ef&abcd

這個可以簡單可以複雜,最簡單的就是先split,然後reverse,然後join。2分。

2.2. 說出下列三段程式碼的執行結果:

//Section A
function foo(num) {
    num = 1;
}
var a = 0;
foo(a);
alert(a);

//Section B
function foo(obj) {
    obj = new Object();
    obj.name = "abc";
}
var a = {name: "test"};
foo(a);
alert(a.name);

//Section C
function foo(obj) {
    obj.name = "abc";
}
var a = {name: "test"};
foo(a);
alert(a.name);

這個題目的考點是引用,簡單變數跟物件屬性的差別。3分。

2.3. 用JavaScript模擬Java的StringBuffer類,用以實現效率較高的字串的連線,包含兩個方法:append()和toString()

這個題目在現在已經變味了,當年在IE中,用加號連線字串不如陣列的join,另外一個考點是簡單實現一個建構函式,在原型上新增方法。4分。

2.4. 下面兩種方式都可以給元素新增事件,請指出它們的差別:

element.onclick = clickHandler;
element.attachEvent("onclick", clickHandler);

單個跟多個事件處理函式的差別,3分。

2.5. 在下面這段程式碼裡,內層的div點選的時候,會同時觸發它自己和外層div的事件,怎樣修改程式碼才能使得此時只觸發內層div的事件?

<div onclick="clickA()">a
    <div onclick="clickB()">b</div>
</div>
<script>
function clickA() {
    alert("a");
} 
function clickB() {
    alert("b");
}
</script>

考點是事件的冒泡,b裡面取消冒泡即可,3分

3. 綜合

3.1. 設計一個介面,它包含兩個下拉選單,第一個包含有三個省份,分別是江蘇、福建、安徽,第二個顯示的是城市,其選項根據第一個所選內容動態改變。當選擇江蘇時,它包含南京、蘇州、南通;當選擇福建時,它包含福州、漳州、泉州;當選擇安徽時,它包含合肥、蚌埠、安慶。

沒什麼好說的,只要幹過活的就會。2分。

3.2. 用JavaScript生成本月日曆,形式為表格,從星期天到星期六每天佔一列,星期天的單元格背景為紅色,星期六的單元格背景為綠色。

迴圈生成一個table就可以了,3分。

3.3. 寫一段JavaScript程式碼,迴圈生成10個按鈕,每個按鈕上面分別顯示數字0-9,每個按鈕點選之後分別顯示自身序號。

這個裡面有陷阱,在迴圈中新增事件,並且把序號帶進去,會導致執行的時候序號全部是最後一個,這是因為事件繫結的時間跟執行時間不同,執行的時候,作用域裡面的迴圈變數已經是最後一個了。解決辦法至少有兩種,如果把變數附加到按鈕上,可以得4分。如果用閉包帶變數過去,可以得5分。

總的來說,這些題目還是比較基礎的,而且在當時比較有代表性,如果都能答出來,算是一個概念很清晰的人,能及格的話,就可以招進來幹活了。

相關文章