Back-End-Developer-Interview-Questions(後端開發面試題)是一個開放性的題庫,包含面試時可能會考到的各種題目。項目中並沒有提供這些問題的答案,不過當然大家也知道,比起答案來更重要的是藉由這個問題與面試官交流的過程,這能讓面試官更能知道你在後端開發這方面的獨有的見解與思路。這樣看來這個題庫更主要地是在告訴你在面試時你可能會需要的思路與一定的知識儲備。出於該目的,筆者將與該題庫的有關內容整理出來,並從題庫中甄選了一些較為有趣的題目,希望能對大家有所幫助。

首先,該題庫是有中文版的,由monklof對其進行了翻譯,但更新不及時。連接:

https://github.com/monklof/Back-End-Developer-Interview-Questions

其次,題庫中的一部分問題可以在這個項目中獲得一定的解答,雖然可能不適用於面試,但也可以提供許多有用的信息:

https://github.com/monklof/Back-End-Developer-Interview-Questions

作者將問題分為以下類型:

通用問題:有較為標準的答案的問題

開放式問題:沒有固定答案,與編程經驗有關的問題

設計模式相關問題:與體系的架構有關的問題

代碼設計相關問題:與編程習慣、規範有關的問題

語言相關問題:與某種語言的特性有關的問題

Web相關問題

資料庫相關問題

非關係型資料庫相關問題

代碼版本管理相關問題:對各個代碼版本管理的應用之間的帶有比較性的問題

並發問題

分散式系統相關問題

軟體生命周期和團隊管理相關問題:有關代碼的可延展性以及工作方式的問題

邏輯和演算法相關問題

軟體架構相關問題

面向服務架構(SOA)和微服務(Microservice)相關問題

安全相關問題

比爾蓋茨式問題:玄學問題,哲學問題……

代碼示例問題:提供代碼並以此為題作出解答

通用問題示例

1、微軟、谷歌、歐朋(opera)和火狐這類公司是如何從他們的瀏覽器中獲利的?

思路:瀏覽器最大的收入在於廣告收入,競價鏈接、與搜索引擎合作分成。廣告一直是傳媒業的主要收入。而像google一直做的事就是信息精確投放,這就是google的優勢所在。所以本質上瀏覽器公司獲利的主要來源還是廣告。

這方面的內容推薦一本書:https://book.douban.com/subject/6709783/

2、封裝的重要性:

思路:抽象和封裝是互補的概念,抽象關注對象的可觀察到的行為(外部),而封裝關注的是行為的實現。封裝通常是通過信息隱藏來實現的。信息隱藏是將那些不涉及對象本質特徵的秘密都隱藏起來的過程。「複雜系統的每部分都不應該依賴於其他部分的內部細節」,抽象「幫助人們思考他們做什麼」,而封裝「讓程序可以藉助最少的工作進行可靠的修改」。其中底層封裝,對用戶來說是沒什麼影響的,但是對於編程人員來說,封裝和私有提升了介面的可讀性,規範性,用封裝好的函數會極大的提高程序編寫效率。

開放式問題

這種問題就比較多樣化了,更強調對應聘者的思維及各種能力的考察。比如:

在你當前的工作流中,什麼事情是你計划下一步需要自動化的?

如何向你的祖母解釋什麼是線程?

為什麼寫軟體是困難的?是什麼使軟體的維護變得困難?

等等範圍很廣的問題,當然也沒什麼標準的答案。個人認為這種問題的意義在於應聘者是否對自己的領域有所思考。這當然是個很重要的事情,就算對於沒有面試要進行的人也同樣重要,趕緊去試試回答吧。

設計模式相關問題

為什麼說goto語句是惡魔般的存在?

思路:這個說法最早是由荷蘭著名計算機科學家E.W.Dijkstra於1968年提出的,在一封給ACM編輯的信《go to statement considered harmful》中指出。http://ce.sharif.edu/courses/90-91/1/ce364-1/resources/root/GoTo/Dijkstra.pdf

非結構性地使用goto可能導致程序流圖不可規約(irreducible)。而非系統的使用goto語句並且會降低代碼的可讀性。對於編譯器來說,良好結構的代碼和goto語句產生的麵條式代碼(這裡沒有貶義)根本沒有區別。這裡引用一篇文章             (http://blog.csdn.net/cpq37/article/details/47342665)其中節選:Donald Knuth在他的論文結構化編程語句寫道,」過早的優化是萬惡之源。」清晰的編程重要得多,直到你知道您的代碼中的hot spot,特別是考慮到現代的優化和分析工具比Knuth當他在1974年寫論文是更加強大;大部分他給出的例子:使用goto來進行優化,事實上現代編譯器都已經做了這部分工作。

資料庫問題:什麼是N + 1問題?

可以參考:https://secure.phabricator.com/book/phabcontrib/article/n_plus_one/