leetcode:程序員面試技巧

原由

寫在開頭,腦殼鐵定秀逗了,歷時20多天,刷完了leetcode上面151道題目(固然不少是google的),感受本身對算法和數據結構算是入門了,但仍然還有不少不清楚的地方,因而有了對於每道題目寫分析的衝動。不過在看到leetcode上面的文章以後,決定先從翻譯入手,順帶再寫寫本身作題的心得體會。今天是第一篇:程序員面試技巧。程序員

若是你主修計算機科學,那麼在你工做的時候會碰到不少有難度的編程問題。當你去找工做的時候,你會有不少的面試,而面試官一般很喜歡問你不少技術性的問題,如下就是三類主要的題型:面試

  • 算法/數據結構
  • 特定編程語言/通用的計算機知識
  • 腦筋急轉彎

後續我將詳細的討論上面這幾點:算法

算法/數據結構

你必須深入的理解如下幾種數據結構:數組,鏈表,二叉樹,哈希表等。你必須明確地知道何時該使用數組或者鏈表,譬如在實現一個列表翻轉的時候。編程

面試官一般會問你一些算法問題用以檢驗你的編程解決問題能力,一些算法問題以下:數組

  • 在一個句子裏面反轉單詞。
  • 在一個單詞裏面反轉字母。(嘗試使用迭代或者遞歸解決)
  • 如何在一個列表裏面找到重複的數字。
  • 生成數字n的全排列。(小提示:遞歸)
  • 找到兩個排好序數組的中間值。(小提示:分治法)
  • 如何進行拼寫檢查並驗證單詞。(小提示:編輯距離)

(譯者吐槽,說句實話,上面幾個問題若是沒作題大部分我還真答不出來。)數據結構

特定編程語言/通用的計算機知識

若是你應聘的是C++職位,須要準備好應對不少C++的問題,其它編程語言也同樣。若是你應聘的職位不須要特定的編程語言,那麼你可能會被問到通用的計算機知識,譬如在堆和棧上面建立對象的區別。數據結構和算法

我常常碰到的一些C++問題以下:編程語言

  • 什麼是虛函數?怎麼實現的?使用虛函數會有啥性能問題?
  • 什麼是虛析構函數?爲何須要他們?若是你不實現成虛析構會出現什麼問題?
  • 什麼是拷貝構造函數?它何時被調用?
  • malloc和new的區別是什麼?

(譯者吐槽,上面這些感受還算靠譜,至少沒問虛擬繼承是啥!我面試的時候一般還會問不少STL的東西,畢竟這在C++裏面已是很基礎的了。Template這些的就算了,有時候都能把本身繞暈,仍是別坑面試者了。)函數

腦筋急轉彎

一些面試官很喜歡用一個腦筋急轉彎來結束面試。這個其實很坑爹的,不過仍是老老實實的準備一些吧。性能

一些經典的問題:

  • 兩個雞蛋問題:

    你有兩個相同的雞蛋,而後還有100層樓等你去爬。你須要知道最高到哪一層扔下雞蛋,雞蛋不會摔碎。(雞蛋語錄:爲啥受傷的老是蛋蛋?)。頗有可能第一層就碎了,也可能到了100層才碎。你須要知道最多嘗試幾回就能找到答案。

  • 儘量快的在一個byte裏面反轉bit。

  • 你有5個相同的罐子,都裝着球,其中有4個裏面每一個球都是重10g,另外一個灌每一個球重9g,你有一臺電子稱,只稱一次,找到那個重9g球的罐子。

(譯者吐槽,上面這些腦筋急轉彎問題感受就是算法問題,哪裏是腦筋急轉彎,明顯的忽悠!)

總結

固然這是譯者本身的,原文在上面就結束了,能夠看到,做爲一個程序員,咱們實際上是幸運的,由於咱們可以接觸如此多的挑戰,並不斷提高本身。可咱們同時也是鬱悶的,不少時候每每都有這樣的錯覺,數據結構和算法在不少工做中並不用到,可是爲啥恰恰就面這個,linus貌似說過:「Bad programmers worry about the code. Good programmers worry about data structures and their relationships」,而在《大教堂與集市》這本書裏面,做者直接說明「Smart data structures and dumb code works a lot better than the other way around」。有時候當寫程序寫多了,天然就發現算法和數據結構的重要性了。

另外,如今不管哪一個公司,除非你是大牛級別的,面試幾乎不會脫離上面那些東西,因此仍是老老實實的學習吧,騷年。

相關文章
相關標籤/搜索