Java開發常見基礎題大全

1.&和&&的區別?
&:邏輯與(and),運算符兩邊的表達式均爲true時,整個結果才爲true。
&&:短路與,如果第一個表達式爲false時,第二個表達式就不會計算了。

2.”==”和equals方法究竟有什麼區別?
==:表示兩個變量的值是否相等,用於比較兩個基本數據類型的數據或者引用變量。
equals:用於比較兩個獨立對象的內容是否相同。字符串的比較也用equals。
== 對於基本類型來說是值比較,對於引用類型來說是比較的是引用;而 equals 默認情況下是引用比較,只是很多類重新了 equals 方法,比如 String、Integer 等把它變成了值比較,所以一般情況下 equals 比較的是值是否相等。

3.比較字符串相等時用equals和==的區別
String 是對象,如果用==號就是比較兩個String對象內存地址是否一樣,equals()比較的是String內容時候一樣,不過不同的編程語言兩者不太一樣

4.Int和integer的區別?
Int是Java的8中基本數據類型之一,integer是int的封裝類。Int類型的默認值爲0,integer默認值爲null,所以區別在於,integer能區分出null值和0的區別。

5.重載和重寫的區別?
重載(Overload):函數名相同,參數不同。可以改變返回值類型,參數的個數和類型。
重寫(Override):和父類的的方法名稱、參數完全相同。

6.面向對象的特徵?
封裝:將對象屬性和方法的代碼封裝到一個模塊中,也就是一個類中,保證軟件內部具有優良的模塊性的基礎,實現“高內聚,低耦合”。
抽象:找出一些事物的相似和共性之處,然後歸爲一個類,該類只考慮事物的相似和共性之處。抽象包括行爲抽象和狀態抽象。
繼承:在已經存在的類的基礎上進行,將其定義的內容作爲自己的內容,並可以加入新的內容或者修改原來的方法適合特殊的需要。
多態:同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果,就是多態,簡單點說:就是用父類的引用指向子類的對象。目的:提高代碼複用性,解決項目中緊耦合問題,提高可擴展性。
多態的機制:靠的是父類的或者接口的引用變量可以指向子類或者具體實現類的實例對象。

7.JDK 和 JRE 有什麼區別?
JDK:Java Development Kit 的簡稱,Java 開發工具包,提供了 Java 的開發環境和運行環境。
JRE:Java Runtime Environment 的簡稱,Java 運行環境,爲 Java 的運行提供了所需環境。
具體來說 JDK 其實包含了 JRE,同時還包含了編譯 Java 源碼的編譯器 Javac,還包含了很多 Java 程序調試和分析的工具。簡單來說:如果你需要運行 Java 程序,只需安裝 JRE 就可以了,如果你需要編寫 Java 程序,需要安裝 JDK。

8.final 在 Java 中有什麼作用?
final 修飾的類叫最終類,該類不能被繼承。
final 修飾的方法不能被重寫。
final 修飾的變量叫常量,常量必須初始化,初始化之後值就不能被修改。

9.String s =new String (“syx”);創建了幾個String Object?
如果String常理池(常量緩衝區)中,已經創建"syx",則不會繼續創建,此時只創建了一個對象new String(“syx”);
如果String常理池中,沒有創建"syx",則會創建兩個對象,一個對象的值是"syx",一個對象new String(“syx”)。

10.JDBC操作數據庫的七大步驟?
1.加載JDBC驅動程序:
2.提供JDBC連接的URL;
3.創建數據庫的連接;
4.創建一個Statement(創建sql的執行操作);
5.執行SQL語句;
6.處理執行結果;
7.關閉JDBC對象,釋放內存。

11.String 類的常用方法都有那些?
indexOf():返回指定字符的索引。
charAt():返回指定索引處的字符。
replace():字符串替換。
trim():去除字符串兩端空白。
split():分割字符串,返回一個分割後的字符串數組。
getBytes():返回字符串的 byte 類型數組。
length():返回字符串長度。
toLowerCase():將字符串轉成小寫字母。
toUpperCase():將字符串轉成大寫字符。
substring():截取字符串。
equals():字符串比較。

12.普通類和抽象類有哪些區別?
普通類不能包含抽象方法,抽象類可以包含抽象方法。
抽象類不能直接實例化,普通類可以直接實例化。

13.接口和抽象類有什麼區別?
抽象類:用abstract修飾,抽象類不能創建實例對象。抽象方法必須在子類中實現,不能有抽象構造方法或者抽象靜態方法。
接口:抽象類的一種特例,接口中的方法必須是抽象的。
兩者的區別:
1.抽象類可以有構造方法,接口沒有構造方法
2.抽象類可以有普通成員變量,接口沒有普通成員變量。
3.抽象類可以有非抽象的普通方法,接口中的方法必須是抽象的。
4.抽象類中的抽象方法訪問類型可以是public,protected,接口中抽閒方法必須是public類型的。
5.抽象類可以包含靜態方法,接口中不能包含靜態方法。
6.一個類可以實現多個接口,但是隻能繼承一個抽象類。
7.接口中基本數據類型的數據成員,都默認爲static和final,抽象類則不是。
8.抽象類的子類使用 extends 來繼承;接口必須使用 implements 來實現接口。

14.BIO、NIO、AIO 有什麼區別?
BIO:Block IO 同步阻塞式 IO,就是我們平常使用的傳統 IO,它的特點是模式簡單使用方便,併發處理能力低。
NIO:Non IO 同步非阻塞 IO,是傳統 IO 的升級,客戶端和服務器端通過 Channel(通道)通訊,實現了多路複用。
AIO:Asynchronous IO 是 NIO 的升級,也叫 NIO2,實現了異步非堵塞 IO ,異步 IO 的操作基於事件和回調機制。

15.Files的常用方法都有哪些?
Files. exists():檢測文件路徑是否存在。
Files. createFile():創建文件。
Files. createDirectory():創建文件夾。
Files. delete():刪除一個文件或目錄。
Files. copy():複製文件。
Files. move():移動文件。
Files. size():查看文件個數。
Files. read():讀取文件。
Files. write():寫入文件。

16.請對比synchronized與java.util.concurrent.locks.Lock的異同?
主要相同點:Lock能完成synchronized所實現的所有功能
主要不同點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放,並且必須在finally從句中釋放。

17.List、Set和Map的區別?
List:是存儲單列數據的集合,存儲有順序,允許重複。繼承Collection接口。
Set: 是存儲單列數據的集合。繼承Collection接口。不允許重複。
Map:存儲鍵和值這樣的雙列數據的集合,存儲數據無順序,鍵(key)不能重複,值(value)。可以重複。

18.java創建對象的方式有哪些?
1.使用new關鍵字
2.使用反射機制創建對象:
(1)使用Class類的newInstance方法
(2)java.lang.reflect.Constructor類裏也有一個newInstance方法可以創建對象。
3.使用clone方法:先實現Cloneable接口並實現其定義的clone方法
4.使用反序列化。

  1. Java 中 IO 流分爲幾種?
    按功能來分:輸入流(input)、輸出流(output)。
    按類型來分:字節流和字符流。
    字節流和字符流的區別是:字節流按 8 位傳輸以字節爲單位輸入輸出數據,字符流按 16 位傳輸以字符爲單位輸入輸出數據。

20.運行時異常與一般異常有何異同?
Java提供了兩類主要的異常:運行時異常runtime exception和一般異常checked exception。對於後者這種一般異常,JAVA要求程序員對其進行catch處理。所以,面對這種異常不管我們是否願意,只能自己去寫一大堆catch塊去處理可能的異常。
運行時異常我們可以不處理。這樣的異常由虛擬機接管。出現運行時異常後,系統會把異常一直往上層拋,一直遇到處理代碼。如果不對運行時異常進行處理,那麼出現運行時異常之後,要麼是線程中止,要麼是主程序終止。
JAVA容器知識點

  1. Java 容器都有哪些?
    Java 容器分爲 Collection 和 Map 兩大類,其下又有很多子類,如下所示:
    Collection
    List
    ArrayList
    LinkedList
    Vector
    Stack
    Set
    HashSet
    LinkedHashSet
    TreeSet
    Map
    HashMap
    LinkedHashMap
    TreeMap
    ConcurrentHashMap
    Hashtable
    2.List、Set和Map的區別?
    List:是存儲單列數據的集合,存儲有順序,允許重複。繼承Collection接口。
    Set::是存儲單列數據的集合。繼承Collection接口。不允許重複。
    Map:存儲鍵和值這樣的雙列數據的集合,存儲數據無順序,鍵(key)不能重複,值(value)。可以重複。
    3.HashMap 和 Hashtable 有什麼區別?
    存儲:HashMap 運行 key 和 value 爲 null,而 Hashtable 不允許。
    線程安全:Hashtable 是線程安全的,而 HashMap 是非線程安全的。
    推薦使用:在 Hashtable 的類註釋可以看到,Hashtable 是保留類不建議使用,推薦在單線程環境下使用 HashMap 替代,如果需要多線程使用則用 ConcurrentHashMap 替代。
  2. 如何決定使用 HashMap 還是 TreeMap?
    對於在 Map 中插入、刪除、定位一個元素這類操作,HashMap 是最好的選擇,因爲相對而言 HashMap 的插入會更快,但如果你要對一個 key 集合進行有序的遍歷,那 TreeMap 是更好的選擇。
  3. 說一下 HashMap 的實現原理?
    HashMap 基於 Hash 算法實現的,我們通過 put(key,value)存儲,get(key)來獲取。當傳入 key 時,HashMap 會根據 key. hashCode() 計算出 hash 值,根據 hash 值將 value 保存在 bucket 裏。當計算出的 hash 值相同時,我們稱之爲 hash 衝突,HashMap 的做法是用鏈表和紅黑樹存儲相同 hash 值的 value。當 hash 衝突的個數比較少時,使用鏈表否則使用紅黑樹。
  4. 說一下 HashSet 的實現原理?
    HashSet 是基於 HashMap 實現的,HashSet 底層使用 HashMap 來保存所有元素,因此 HashSet 的實現比較簡單,相關 HashSet 的操作,基本上都是直接調用底層 HashMap 的相關方法來完成,HashSet 不允許重複的值。
  5. ArrayList 和 LinkedList 的區別是什麼?
    數據結構實現:ArrayList 是動態數組的數據結構實現,而 LinkedList 是雙向鏈表的數據結構實現。
    隨機訪問效率:ArrayList 比 LinkedList 在隨機訪問的時候效率要高,因爲 LinkedList 是線性的數據存儲方式,所以需要移動指針從前往後依次查找。
    增加和刪除效率:在非首尾的增加和刪除操作,LinkedList 要比 ArrayList 效率要高,因爲 ArrayList 增刪操作要影響數組內的其他數據的下標。
    ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
    對於隨機訪問get和set,ArrayList覺得優於LinkedList,因爲LinkedList要移動指針。
    對於新增和刪除操作add和remove,LinedList比較佔優勢,因爲ArrayList要移動數據,而查詢和修改ArrayList佔優勢。
    綜合來說,在需要頻繁讀取集合中的元素時,更推薦使用 ArrayList,而在插入和刪除操作較多時,更推薦使用 LinkedList。
    Java進階知識
    1.三個與取整有關的方法:
    Math.ceil():表示向上取整;Math.ceil(11.3)=12;Math.ceil(-11.3)=-12。
    Math.floor():表示向下取整;Math.floor(11.6)=12;Math.floor(-11.6)=-12。
    Math.round():表示四捨五入;Math.round(11.5)=12;Math.round(-11.5)=-11;
    Marh.round(11.3)=11;Math.round(-11.3)=–11;
    2.String和StringBuffuer、StringBuilder
    String:字符串數值不可變;
    StringBuffer:字符串可修改,可以動態構造字符數據。StringBuffer類是可以通過Append()來修改值。線程安全。
    StringBuilder:線程不安全。
    共同點:它們都可以儲存和操作字符串,同時三者都使用final修飾,都屬於終結類不能派生子類,操作的相關方法也類似例如獲取字符串長度等。
    不同:
    1.其中String是隻讀字符串,也就意味着String引用的字符串內容是不能被改變的,每次對String的操作都會生成新的String對象,造成內存浪費。而StringBuffer和StringBuilder類表示的字符串對象可以直接進行修改,在修改的同時地址值不會發生改變。
    2.StringBuilder是JDK 1.5中引入的,它和StringBuffer的方法完全相同,區別在於它是在單線程環境下使用的(不能同步訪問),因爲它的所有方面都沒有被synchronized修飾,因此它的效率也比StringBuffer略高。
    三者在執行速度方面的比較:StringBuilder > StringBuffer > String
    對於三者使用的總結:
    1.如果要操作少量的數據用String  
    2.單線程操作字符串緩衝區下操作大量數據用StringBuilder
    3.多線程操作字符串緩衝區下操作大量數據用StringBuffer
    3.對比幾種不同的簡單singleton單例模式
    飽漢模式:類加載時完初始化,不管用不用,先創建。
    //飽漢模式:類加載時完成初始化,創建出實例對象(不管用不用,先創建)。
    public class SingleTon {
    //實例化對象放到靜態代碼塊中,可提高執行效率,但是可能更佔用空間
    private final static SingleTon instence=new SingleTon();
    private SingleTon(){};//私有的構造函數
    //獲取方法
    public static SingleTon getinstance(){
    return instence;
    };
    餓漢模式:第一次使用時創建對象,存在線程安全問題。
    //飢漢模式:延遲加載,在第一次用的時候才創建出對象,存在線程安全問題。
    public class SingleTon {
    private static SingleTon instence=null;
    private SingleTon(){};//私有的構造函數
    //獲取方法
    public static synchronized SingleTon getinstance(){
    if(instence==null){
    //第一次使用的時候創建對象
    instence=new SingleTon();
    }
    return instence;
    };
    }
    4.hashCode與equals的區別與聯繫?
    一、equals方法的作用
    1、默認情況(沒有覆蓋equals方法)下equals方法都是調用Object類的equals方法,而Object的equals方法主要用於判斷對象的內存地址引用是不是同一個地址(是不是同一個對象)。
    2 、要是類中覆蓋了equals方法,那麼就要根據具體的代碼來確定equals方法的作用了,覆蓋後一般都是通過對象的內容是否相等來判斷對象是否相等。
    二、Hashcode()方法:
    1、我們並沒有覆蓋亨達返傭equals方法只覆蓋了hashCode方法,兩個對象雖然hashCode一樣,但在將stu1和stu2放入set集合時由於equals方法比較的兩個對象是false,所以就沒有在比較兩個對象的hashcode值。
    2、覆蓋一下equals方法和hashCode方法,stu1和stu2通過equals方法比較相等,而且返回的hashCode值一樣,所以放入set集合中時只放入了一個對象。
    3、我們讓兩個對象equals方法比較相等,但hashCode值不相等試試,雖然stu1和stu2通過equals方法比較相等,但兩個對象的hashcode的值並不相等,所以在將stu1和stu2放入set集合中時認爲是兩個不同的對象。
    總結:
    1、equals方法用於比較對象的內容是否相等(覆蓋以後)
    2、hashcode方法只有在集合中用到
    3、當覆蓋了equals方法時,比較對象是否相等將通過覆蓋後的equals方法進行比較(判斷對象的內容是否相等)。
    4、將對象放入到集合中時,首先判斷要放入對象的hashcode值與集合中的任意一個元素的hashcode值是否相等,如果不相等直接將該對象放入集合中。如果hashcode值相等,然後再通過equals方法判斷要放入對象與集合中的任意一個對象是否相等,如果equals判斷不相等,直接將該元素放入到集合中,否則不放入。
    原文鏈接:blog.csdn.net/qq_35980218/article/details/102481247
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章