寫在開頭,腦殼鐵定秀逗了,歷時20多天,刷完了leetcode上面151道題目(固然不少是google的),感受本身對算法和數據結構算是入門了,但仍然還有不少不清楚的地方,因而有了對於每道題目寫分析的衝動。不過在看到leetcode上面的文章以後,決定先從翻譯入手,順帶再寫寫本身作題的心得體會。今天是第一篇:程序員面試技巧。程序員
若是你主修計算機科學,那麼在你工做的時候會碰到不少有難度的編程問題。當你去找工做的時候,你會有不少的面試,而面試官一般很喜歡問你不少技術性的問題,如下就是三類主要的題型:面試
後續我將詳細的討論上面這幾點:算法
你必須深入的理解如下幾種數據結構:數組,鏈表,二叉樹,哈希表等。你必須明確地知道何時該使用數組或者鏈表,譬如在實現一個列表翻轉的時候。編程
面試官一般會問你一些算法問題用以檢驗你的編程解決問題能力,一些算法問題以下:數組
(譯者吐槽,說句實話,上面幾個問題若是沒作題大部分我還真答不出來。)數據結構
若是你應聘的是C++職位,須要準備好應對不少C++的問題,其它編程語言也同樣。若是你應聘的職位不須要特定的編程語言,那麼你可能會被問到通用的計算機知識,譬如在堆和棧上面建立對象的區別。數據結構和算法
我常常碰到的一些C++問題以下:編程語言
(譯者吐槽,上面這些感受還算靠譜,至少沒問虛擬繼承是啥!我面試的時候一般還會問不少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」。有時候當寫程序寫多了,天然就發現算法和數據結構的重要性了。
另外,如今不管哪一個公司,除非你是大牛級別的,面試幾乎不會脫離上面那些東西,因此仍是老老實實的學習吧,騷年。