1 回答

TA貢獻1802條經驗 獲得超6個贊
1. 從哈希表,二叉樹和鏈表中取元素需要多少時間?如果你有數百萬記錄呢?
哈希表需要O(1)時間,二叉樹需要O(logN) (N是樹中節點數),鏈表需要O(N) (N是鏈表中節點數)。如果數據結構工作正常(比如哈希表沒有或只有相對少量沖突,二叉樹是平衡的),數百萬記錄并不影響效率。如果工作不正常,那么效率會隨著記錄數上升而下降。
2. 覆蓋(Overriding)和重載(Overloading)的區別是什么?
覆蓋在運行時決定,重載是在編譯時決定。并且覆蓋和重載的機制不同,例如在Java中,重載方法的簽名必須不同于原先方法的,但對于覆蓋簽名必須相同。
3. fork一個進程和生成一個線程有什么區別?
當你fork一個進程時,新的進程將執行和父進程相同的代碼,只是在不同的內存空間中。但當你在已有進程中生成一個線程時,它會生成一個新的代碼執行路線,但共享同一個內存空間。
4. 什么是臨界區?
臨界區是一段代碼,十分重要,在多線程中同一時間只能被一個線程執行??梢杂眯盘柫炕蚧コ饬縼肀Wo臨界區。在Java中你可以用synchronized關鍵字或ReentrantLock來保護臨界區。
5. 值類型和引用類型有什么區別?
值類型是更加優化的類型,總是不可變的(immutable),例如Java原始的int、long、double和float。引用類型指向一個對象,可能是可變的,也可能是不變的。你也可以說值類型指向一個值,引用類型指向一個對象。
6. 什么是在進程中的堆和棧?
在同一個進程中,有兩塊不同的內存區域。以Java來說,棧用來存儲原始值和指向對象的引用類型,但對象本身總是在堆中被創建。堆和棧的一個重要區別是,堆內存被所有線程共享,但每個線程有自己的棧。
7. 什么是版本控制?
版本控制是用來存儲代碼和管理代碼庫版本的軟件,例如SVN、CVS、Git、Perforce和ClearCase。它們在對比代碼、審查代碼和從之前的穩定版本構造時十分高效。所有的專業開發都使用某種版本控制工具,否則你無法有效的管理代碼,尤其是如果有20個開發者在同一個代碼庫上工作的時候。版本控制工具在保持代碼庫一致性和處理代碼沖突上扮演著十分重要的角色。
8. 什么是強類型程序設計語言?
在強類型語言中,編譯器確保類型的正確性,例如你無法在String類型中存放數字,反之亦然。Java是強類型語言,因此存在各種數據類型(如int、float、String、char、boolean等)。你只能將兼容的值存入相應的類型中。
與此相反,弱類型語言不要求在編譯時進行類型檢查,它們根據上下文處理值。Python和Perl是兩個常見的弱類型程序設計語言的例子,你可以將數字組成的字符串保存在數字類型中。
添加回答
舉報