2018/03/12 面試題目

這次的面試很開心,回答得算順利,面試者也認為有專業。

雖然我不清楚面試者如何對他不熟悉的領域,聽出有沒有理解就是了。

你的工作經驗?

維護該公司的系統、導入一些小套件、寫新的頁面。 那個公司的系統很舊,所以我都是用 jQuery 與後端 helper 完成事情。

Vue 做什麼的?

在 jQuery 的時代,資料呈現是以 DOM element 為單位:這種情況下,如果要更換資料,就會以 DOM element 操作為主。 例如我想要輸入 input 時把資料呈現的話,在 jQuery 就會這樣寫:

<div id="app">
    <input class="foo"><br />
    <span class="bar"></span><br />
    <span class="baz"></span>
</div>

<script>
$(".foo").keypress(function()
{
    var the_text = $(".foo").val();
    $(".bar").text(the_text);
    $(".baz").text( "輸入了" + the_text);
});
</script>

但萬一我要改動 DOM element 的話,就會是惡夢一場。

在雙向綁定的 Vue 就不同了,你可以這樣寫:

<div id="app">
    <input clas="foo" v-model="foo_m"><br />
    <span class="bar"> {{ foo_m }} </span><br />
    <span class="baz"> {{ "輸入了" + foo_m }} </span>
</div>

<script>
var app = new Vue({
    data:{ foo_m : "" },
    method:{  }
})
</script>

整個程式碼就會整潔許多。

如果要驗證資料,例如身份證號碼,要怎麼做?

  1. HTML 有 pattern 或是 type 屬性可以做最簡單的驗證。
  2. 當然我可以繞過 HTML 驗證,所以還需要 JavaScript 驗證。
  3. 然而用戶端還是有辦法[繞過 JavaScript 驗證](https://www.google.com.tw/search?q=繞過 JavaScript 驗證)。因此,不管前端做得再全,後端還是要驗證。
  4. 身份證號碼就第一位是字母、第二位是 1 或 2、最後是檢查碼。併此指名。

如果我給一個 JSON API,你如何把它變成網頁表格的資料?

假設在 Vue 的話:

<table>
    <thead>
        <tr>
            <td>ID</td>
            <td>Name</td>
            <td>Account</td>
        </tr>
    </thead>
    <tbody>
        <tr v-for="(value, key, index) in i_ajax" :key="i.id">
            <td> {{ index }} </td>
            <td> {{ value.name }} </td>
            <td> {{ value.account }} </td>
        </tr>
    </tbody>
</table>

一個表單,從送出去到回應,中間發生什麼事?

  1. 首先會執行前端驗證。
  2. 接著瀏覽器會發出一段 Request。
  3. 這個 Request 會跑到伺服器執行。
  4. 伺服器執行完畢一定會給個 Reponse。
  5. 瀏覽器再針對 Reponse 做對應動作。

你對後端 PHP 的理解?

我寫過幾次原生 PHP,用原生的 echo 手刻,但發現這樣寫會很恐怖。我之後接觸過 Laravel 還有 Ruby on Rails。知道如何用後端 helper 或是 RESTful 或是 API 之類的東西產生網頁、也理解什麼是 MVC。

什麼是 RESTful?

假設我有 foo.bar/3 這個網址,它其實就是個資源(Resource)。這個名詞,對應的就是 foo.bar 的第 3 個資源。再透過 HTTP 的 GET POST PATCH DELETE 完成對應的 CRUD。

什麼是 MVC?

我目前的應徵的前端網頁,在整個框架就是對應到 MVC 的 View、接著 M 就是 Model,它掌管算法或是與資料庫的交互、最後 C 的 Controller 負責把這兩者結合在一起。

你平常如何找資料?用英文論壇嗎?

我會找官方手冊,接著找 Stack Overflow。完全沒有,就會去中文即時通訊軟體如 Line Telegram 之類的,因為它們能很快得到需要的回應。

你使用什麼版控?

「Git,你們該不會用 SVN?」
「我的確是 SVN,不過我可以用 Git」

針對 RWD 你會用手刻?還是框架?

針對 RWD 我會以框架優先:因為框架速度快、大家都懂、也好維護。真的沒有辦法(例如查遍手冊都沒有正確用法)時,才會考慮手刻。