Java面試經驗之談(二)

目錄

 

Java的概述

ArrayList和LinkedList


Java的概述

定義:Java是一種廣泛使用的計算機編程語言,擁有跨平臺、面向對象、泛型編程的特性,廣泛應用於企業級Web應用開發和移動應用開發。

Java的特點之一就是面向對象,是程序設計方法的一種。“面向對象程序設計語言”的核心之一就是開發者在設計軟件的時候可以使用自定義的類型和關聯操作。代碼和數據的實際集合體叫做“對象”。一個對象可以想象成綁定了很多“行爲(代碼)”和“狀態(數據)”的物體。對於數據結構的改變需要和代碼進行通信然後操作,反之亦然。面向對象設計讓大型軟件工程的計劃和設計變得更容易管理,能增強工程的健康度,減少失敗工程的數量。

上述都是一些比較官方的描述,其中最重要的就是“面向對象”。我自己作爲面試官的時候,我一般都是在招聘實習生的時候纔會問應聘者有關”面向對象“的問題。但”面向對象“是Java語言中最核心的一個概念,我們還是需要很好的去理解這個概念。

面向對象是一種程序設計方法,或者是一種程序設計規範,其基本思想是使用對象、類、繼承、封裝、多態等基本概念來進行程序設計。從現實世界中客觀存在的事物(即對象)出發來構造軟件系統,並且在系統構造中儘可能運用人類的自然思維方式。

 

ArrayList和LinkedList

在面試中,面試官經常會拿這兩個集合來考大家,讓大家講講兩者的區別,以及對應使用場景。我們可以從以下方面進行回答:

  1. ArrayList是實現了基於動態數組的數據結構,而LinkedList是基於鏈表的數據結構。

  2. 對於隨機訪問get和set,ArrayList要優於LinkedList,因爲LinkedList要移動指針。大家可以從源碼上進行分析,ArrayList通過get(index)獲取元素,是通過index直接獲取對應位置的元素。但LinkedList則需要通過for循環來進行查找,所以當兩者的數據量越大的時候,效果會更明顯。

  3. 對於刪除,兩者並沒有明確說明誰快誰慢。ArrayList雖然是通過index來獲取位置,但由於ArrayList是數組結構,如果當其中一個位置的數據被刪除,該位置後面的數據就需要進行往前移動。LinkedList主要還是把時間耗在for循環來找index。所以在刪除的時候,很難比較兩者的效率。

編碼技巧,如果明確業務需求,我們還是可以利用好兩者的特性。ArrayList是個動態數組,獲取數據可直接通過index來定位。LinkedList是for循環定位。如果數據量少的情況,兩者差別不大。如果數據量大的時候,如果會經常有刪除操作,而且還是靠前部分的數據,就不建議用ArrayList,用LinkedList會相對好一些。其餘場景,一般都會選用ArrayList。

其實在面試的時候,很多時候,面試官主要是想通過這兩個集合的底層原理來考大家,看看大家在日常編碼中是否有認真研究對比這兩個集合。這是個基礎,如果大家平時都養成了多思考多對比這種思維方式,特別是技術選型時,這種思維方式就會起到很關鍵的作用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章