資工畢業生應該要可以答出來的面試問題

看了之後發現我資料庫和 TCP 的部份還是不大熟有些還是答不出來,
即使答得出來的題目也沒辦法說得很完整,
果然太久沒碰的東西熟悉程度也會退化=.=
================================
http://pesty.yichi.org/blog/2008/06/24/cs_interview_questions/

引用:

前陣子幫某公司面試實習生,覺得頗有感觸。

我覺得,作為一個資工(Computer Science)的畢業生,有一些面試問題,會是像叫籃球球員運球一樣的基本。運球運得好的人,不一定可以變成 Michael Jordon,但是很難想像 Michael Jordon 運球會運不好。同樣的,也有一些問題,如果畢了業還答不好,會掩蓋住你在其他方面的成就。

之所以寫這篇,目的倒不是要寫另一篇草莓文埋怨現在學生,而是希望能夠喚起大家對於 “基本功” 的意識。有別於媒體上所宣傳的,面試 Google 和微軟,大多數的問題其實並不是要你天馬行空解題,而是問基本功。

所以我想稍微寫一下我認為的基本功問題,也算是給還在唸書的人一點參考吧。

如果你說你修過演算法/資料結構…

  • 解釋時間複雜度?空間複雜度?兩者之間的關係?
  • 請解釋以下幾種資料結合及運作方式: hash, heap, stack, tree
  • 請提出一種時間複雜度為 NlogN 的演算法,並用你熟悉的語言寫出來

如果你說你修過作業系統/計算機系統…

  • process & thread 有何不同?
  • 決定 cache 效能的兩個指標?
  • 什麼是同步化?要怎麼寫?
  • 什麼是 deadlock?要怎麼解決?

如果你說你會寫程式…

  • 什麼是 call by value?什麼是 call by reference?兩者的優缺點?
  • 寫一個迴圈來看看?
  • 寫一個遞迴來看看?
  • 什麼是 function 的 signature?回傳值能不能是 signature 的一部份?
  • 什麼是 static function?什麼是 static variable?

如果你說你會資料庫…

  • 什麼是 normalization?為什麼要做 normalization?
  • 解釋 inner join, left (outer) join, right (outer) join
  • table 為什麼要做 index? 舉一個做 index 有用的例子和沒用的例子?

如果你說你會 C/C++…

  • 請搞懂 pointer

如果你說你會 JAVA…

  • 請搞懂 OOP

如果你說你會 PERL…

  • 請搞懂 Regular Expression

如果你說你會 PHP…

  • 給你半小時應該要能生出一個 Hello, Pesty 的網頁 (當然,Pesty 是 form input 的)

如果你說你會 TCP/IP…

  • 把下面幾個服務依使用到的原理照 OSI 層排序: http, telnet, DNS, MAC Address, ping, session, vpn
  • 解釋 class A, B, C, 和 class-less

如果你說你會 UNIX….

    怎麼把 ls 的結果導到 /tmp/test.txt 中?
    為什麼平常操作不該用 root?