首頁  >  文章  >  後端開發  >  程式設計師面試:電話面試問答Top 42(上)

程式設計師面試:電話面試問答Top 42(上)

WBOY
WBOY原創
2016-08-08 09:27:261036瀏覽

今年是2015年,在過去幾年中,電面(電話面試)是篩選程式設計師職位候選人的最流行的方式。它讓僱用雙方很容易互相了解對方,候選人不需要去未來雇主的所在地,面試官也不用做額外的安排。這是我介紹程式設計師面試問題的文章的第二部分。我得到回饋說第一部分過於偏重編碼的題了,許多程式設計師希望我針對電面問題列一個類似的清單。為了順利通過電面進入下一輪,你必須足夠好地回答與你工作要求相關的全部問題。在大多針對JavaC++開發者的電面中,你不僅會遇到對應程式語言的問題,還會遇到其他技術的問題,例如SQL XMLUNIX、泛型程式設計、物件導向程式設計、資料結構與演算法、網路、編碼以及其他工作的面向。由於程式設計師求職電面的多變性,你需要有特殊的技巧,以面試官期待的方式展現自己。

要記住一件重要的事,在回答電面問題的時候,儘早提出關鍵點,總是給出關鍵性回答。由於面試官的問題往往會涵蓋很大範圍的主題,他們更喜歡關鍵性回答,而不是「OK,我知道」之類的空話。在面對面的面試中,你會有機會更深入地解釋問題的。順便說一下,這並不是固定的規則,根據面試官對你的回答的反應,你可以了解到他期望得到什麼樣的答案。如果他進行追問,期望你多說一些,那你就應該多說。但如果他立刻跳到下一個問題,那麼你就應該回答得清晰簡潔。在這篇文章中,我要和你分享一些常見的有趣程式設計問題,它們是針對電面改編過的。大部分來自科技公司的電面環節,包括BarclaysCitiNomura CTSTech MahindraHCL之類的提供服務的公司。像我之前提過的,面試題目是隨機選的,但大部分是基於基礎知識,因為那是面試官在電面時想考察的。雖然這些問題大多是針對初級開發者(25年經驗),高級和資深程式設計師仍然可以把它們用作自己面試的題目。如果你是面試官,你可以用這些問題快速篩選開發職位的候選人。我在此提供簡短答案,並給出詳細答案的連結。

下面是幾乎

42道程式設計師電面題目的清單。這些問題可以用來檢視任何程式設計師、開發者、軟體工程師、測試和營運工程師,因為它們是基於程式設計的基礎知識的。但它們最適合程式設計師和開發者。順便說一下,如果你是Java開發者,並且在尋找Java電面題目,去看看那個清單。本列表更加普遍,適用於所有的程序員,包括PythonRubyPerlC#開發者。

1.

從雜湊表,二叉樹和鍊錶中取元素需要多少時間?如果你有數百萬記錄呢?

雜湊表需要

O(1)時間,二叉樹需要O(logN) (N是樹中節點數 ())) (鏈) N是鍊錶中節點數)。如果資料結構運作正常(例如雜湊表沒有或只有相對少量衝突,二叉樹是平衡的),數百萬張記錄並不影響效率。如果工作不正常,那麼效率會隨著記錄數上升而下降。

2.

覆蓋

(Overriding)和重載(Overloading)和重載(Overloading)?   (detailed answer)

覆蓋在運行時決定,重載是在編譯時決定。且覆蓋和重載的機制不同,例如在

Java中,重載方法的簽章必須不同於原先方法的,但對於覆蓋簽章必須相同。

3. fork

一個行程和產生一個執行緒有什麼不同?

當你

fork一個進程時,新的進程將執行和父進程相同的程式碼,只是在不同的記憶體空間中。但當你在已有進程中產生一個執行緒時,它會產生一個新的程式碼執行路線,但共享同一個記憶體空間。

4. 什麼是臨界區? (answer)

臨界區是一段程式碼,十分重要,在多執行緒中同一時間只能被一個執行緒執行。可以用信號量或互斥量來保護臨界區。在Java中你可以用synchronized關鍵字或ReentrantLock來保護臨界區。

5. 值類型和引用型態有何不同? (answer)

值類型是更最佳化的類型,總是不可變的(immutable),例如Java、原始的 doublefloat。引用類型指向一個對象,可能是可變的,也可能是不變的。你也可以說值類型指向一個值,引用型別指向一個物件。 6.

什麼是在進程中的堆疊和堆疊? (detailed answer)

在同一個進程中,有兩塊不同的記憶體區域。以Java來說,堆疊用來儲存原始值和指向物件的參考類型,但物件本身總是在堆中被建立。堆和棧的一個重要區別是,堆記憶體被所有執行緒共享,但每個執行緒都有自己的棧。

7.

什麼是版本控制? (answer)

版本控制是用來儲存程式碼和管理程式碼庫版本的軟體,例如SVN

CVS ClearCase。它們在對比程式碼、審查程式碼和從之前的穩定版本構造時十分有效率。所有的專業開發都使用某種版本控制工具,否則你無法有效的管理程式碼,尤其是如果有20個開發者在同一個程式碼庫上工作的時候。版本控制工具在維持程式碼庫一致性和處理程式碼衝突上扮演著十分重要的角色。 8. 什麼是強型程式設計語言? (answer)

在強類型語言中,編譯器確保類型的正確性,例如你無法在

String類型中存放數字,反之亦然。 Java是強類型語言,因此存在各種資料型別(如

intfloat )。你只能將相容的值存入對應的類型。與此相反,弱類型語言不要求在編譯時進行類型檢查,它們根據上下文處理值。 PythonPerl是兩個常見的弱類型程式設計語言的例子,你可以將數字組成的字串保存在數字類型中。 9. 可否描述一下有效(valid)的ML的區別? 格式正確的XML

有根元素,所有標籤都是正確關閉的,屬性是正確定義的,它們的值正確地加上了引號。另一方面,有效的XML

可以根據一個XSD檔案或模式(schema)進行驗證。所以一個XML可能是格式正確但不有效的(因為包含不被模式允許的標籤)。 10. DOM

SAX語法分析器有什麼區別? (detailed answer)DOM語法分析器是駐留記憶體的,將整個XML文件裝載到內存中,並建立​​一個語法 SAX語法分析器是一個基於事件的語法分析器,所以它根據收到的事件(如開始標籤、結束標籤、屬性開始和屬性結束)來對

XML

文件進行語法分析。根據他們的分析方法,

DOM

語法分析器並不適用於大的XML文件,因為它會佔用大量的記憶體空間,你的進程可能會耗盡記憶體。應該用SAX分析大的檔案。對於小的文件,

DOM

往往比SAX快很多。 11. 執行緒和進程的關係是什麼? (detailed answer)

一個行程可以有多個線程,但一個執行緒總是屬於唯一的行程。兩個行程不能共享記憶體空間,除非它們有意透過共享記憶體進行進程間通訊。但是同一進程的兩個執行緒總是共享相同的記憶體。

12. 不可變(immutable)類是什麼意思? (detailed answer)

一個類,如果在創建之後它的狀態就不能被改變,那麼他就是不可變的。例如Java中的String。一旦你創建了一個String,例如“Java”,你就不能再改變它的內容。任何對這個字串的改變(例如轉換到大寫、與另一個String連接)將建立一個新的物件。不可變的物件在平行程式設計中很有用,因為它們可以在進程間被共用,不需要擔心同步。事實上,整個函數是程式設計的模型都是在不可變物件上建構的。

13. 你為何要創建模擬(mock)物件? (answer)

模擬物件在測試軟體中一個獨立的單元時很有用,事實上,存根(stub)和模擬都是創建自動化單元測試的有力工具。假設你在寫一個顯示貨幣兌換率的程序,但沒有一個可以連通的URL,現在如果想測試你的代碼,可以用模擬對象。在Java的世界中,有許多框架可以為你產生強大的模擬對象,例如MockitoPowerMock

14. 什麼是SQL注入?

SQL注入是一種安全漏洞,它使得入侵者可以從系統中竊取資料。任何從使用者那裡得到輸入並不加驗證地創建SQL查詢的系統都可能被SQL注入攻擊。在這樣的系統中,入侵者可以輸入SQL程式碼,而不是數據,來取得額外的數據。有許多用敏感資訊(如使用者id、密碼和個人資訊)被人利用這種漏洞取得的實例。 Java中,你可以用Prepared語句來避免SQL注入。

15. SQL中,內連接(inner join)中,內連接(inner join)中,內連接 (answer)

SQL中,主要有兩種連接類型,內連接和外連接。外連接包括右外連接和左外連接。內連接和左連接的主要區別是,內連接中兩個表都匹配的記錄才被選中,左連接中兩個表都匹配的記錄被選中,外加左表的所有記錄都被選中。要留意包含「所有」的查詢,它們往往要求左連接,例如寫一個SQL查詢來找所有的部門和它們的僱員人數。如果你用內連接處理這個查詢,你會漏掉沒有人工作的空部門。

16. MVC中的V代表什麼,代表什麼? (answe

MVC模式中,VView)是視圖。視圖是使用者看到的東西,例如網頁。這是一個非常重要的web應用開發設計模式,它基於關注點分離原則,目的是不同模組可以獨立修改,不影響其他模組。在Java的世界中,有許多提供MVC模式的開源框架,例如Struts 2順便一提模型是實際的業務對象,例如使用者、員工、訂單,控制器用來將請求分發給正確的處理單元。 17. 類和對象的區別是什麼? (detailed answer)類別是用來建立物件的設計圖。一個類別包括程式碼和行為,一個物件包括狀態和行為。要建立一個對象,你必須建立一個表達對象結構的類別。類別也被用來在記憶體中映射對象,在Java中,JVM替你完成這項工作。

18. 什麼是疏耦合(loose-coupling)

疏耦合是一種值得追求的軟體特性,它使得軟體一個部分的修改不會影響到其他的部分。例如,在一個疏耦合的軟體中,對UI佈局的改變不應該影響後端的類別結構。

19. 組合(composition),聚合(regation)) (detailed answer)關聯的意思是兩個物件是相互連結的。組合是關聯的一種形式,即一個物件由多個物件組成,但是它們必須共存,例如人體由各種器官組合而成,獨立的器官不能生存,它們必須在身體內發揮作用。聚合也是關聯的一種形式,表示物件的集合,例如城市是居民的聚合。

20.

介面和抽象類別有什麼區別?

(detailed answer)這是所有程式設計師面試最經典的問題。接口是最純粹的抽象形式,沒有任何具體的東西。抽象類別是一些抽象和具體事物的組合。這個區別在不同語言中可能會不同,例如在

Java

中你可以擴展(extend)多個接口,但只能繼承一個抽象類別。更詳細的討論見於詳細答案。

21.

什麼是單元測試?

(answer)單元測試是測試獨立單元(而不是整個應用程式)功能性的一種方法。在不同語言中,有許多工具可以做單元測試。例如在

Java

中,你可以用JUnitTestNG來寫單元測試。單元測試經常在建置時自動運行,或在持續的環境(例如Jenkins)中運行。 免費領取

LAMP兄弟連原創🜎盤細說PHP》精要版,詳情諮詢官網客服:http://www.lampbrother.netPHPCMSonline/H/ .php?u=5微信開發http://yun.itxdl.cn/online/weixin/index.php?u=5

http://yun.itxdl.cn/online/server/index.php?u=5Javascript

Javascript /js/index.php?u=5

CTO訓練營http://yun.itxdl.cn/online/cto/index.

http://yun.itxdl.cn/online/cto/index.php 以上就介紹了程式設計師面試:電話面試問答Top 42(上),包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn