• <center id="q6uyy"><td id="q6uyy"></td></center>
    <dd id="q6uyy"></dd>
  • 推廣 熱搜: csgo  vue  angelababy  2023  gps  新車  htc  落地  app  p2p 

    java面試之基礎(面試不要錯過哦)

       2023-07-31 網絡整理佚名1900
    核心提示:我們在類中編寫的方法就是對實現細節的一種封裝;我們編寫一個類就是對數據和數據操作的封裝。a、集合不允許存放基礎數據類型,存放數字時,要用包裝類型;中存儲的數據是有順序,并且允許重復;中存儲的數據是沒有順序的,其鍵是不能重復的,它的值是可以有重復的。特點:編寫簡單,可直接操作線程;適用于單繼承在運行時判斷任意一個對象所屬的類。在運行時判斷任意一個類所具有的成員變量和方法。

    成員變量在類內的方法之外,局部變量在方法內

    13. 靜態變量和實例變量有什么區別?

    A。 靜態變量是由修飾符修飾的變量。 內存中只有一個內存空間。 靜態變量的內存分配是在類加載過程中完成的,可以通過(類名.)直接訪問。

    b. 實例變量必須依賴于某個實例。 它需要先創建對象,然后通過該對象訪問它。 每次創建實例對象時,都會為實例變量分配不同的內存,每個對象訪問自己的實例變量。

    C。 一個類無論創建多少個對象,靜態變量都只初始化一次,所有實例都可以訪問這個靜態變量,并且可以通過類名直接訪問。

    14.類可以繼承嗎?

    不能。 該類被final修飾,因此不能被繼承。

    15.類中常用的方法有哪些?

    獲取字符串的長度:()

    比較字符串:()

    連接字符串:()

    提取字符串:()

    搜索字符串:()

    分割字符串:split()

    忽略字符串大小寫:()

    將所有英文字符轉換為小寫:()

    將所有英文字符轉換為大寫:( )

    刪除空格:trim()

    16. 和 之間有什么區別?

    :適合少量字符串操作

    線程不安全,適合單線程下對字符緩沖區進行大量操作的情況

    :線程安全,效率低,適合多線程下對字符緩沖區進行大量操作的情況

    (操作就是字符串的拼接) JDBC中拼接sql

    17.您對面向對象的4大特性有何理解?

    封裝:封裝一般認為是綁定數據和操作數據的方法,只能通過定義好的接口來訪問數據。 我們在類中編寫的方法是對實現細節的一種封裝; 我們寫的類就是對數據和數據操作的封裝。 可以說,封裝就是把所有能隱藏的東西都隱藏起來,只向外界提供最簡單的編程接口。 (減少代碼冗余)

    繼承:繼承是通過從現有類獲取繼承信息來創建新類的過程。 提供繼承信息的類稱為父類(超類、基類); 接收繼承信息的類稱為子類(派生類)。

    多態性:多態性是指允許不同子類型的對象對同一消息做出不同的響應。 簡單地說,它是使用相同的對象引用調用相同的方法,但做不同的事情。 多態性分為編譯時多態性和運行時多態性。 方法重載()實現了編譯時多態(也稱為預綁定),而方法重寫()實現了運行時多態(也稱為后綁定)

    抽象:抽象是總結一類對象的共同特征來構造類的過程,包括數據抽象和行為抽象。 抽象只關注對象的屬性和行為,而不關注這些行為的細節。

    18.方法重載和重寫有什么區別? (方法重載發生在類中,方法重寫發生在父類與子類之間)

    方法重載和重寫都是實現多態的方法。 區別在于前者實現了編譯時多態,而后者實現了運行時多態。 重載發生在類中。 如果同名方法有不同的參數列表(不同的參數類型、不同的參數個數,或兩者都有),則認為是重載; 重寫發生在子類和父類之間,重寫要求子類重寫的方法與父類重寫的方法具有相同的返回類型,比父類重寫的方法有更好的訪問權限,并且不能聲明更多的異常比父類重寫的方法(代碼交換原理)。 重載對返回類型沒有特殊要求。

    方法重載規則:

    1.方法名稱相同,但參數列表中參數的順序、類型和數量不同。

    2.重載與方法的返回值無關,它發生在類中。

    3、可以拋出不同的異常,可以使用不同的修飾符。

    方法重寫規則:

    1、參數列表和返回類型必須與重寫的方法完全一致。

    2、構造方法不能重寫,聲明為final的方法不能重寫,聲明為final的方法不能重寫,但可以再次聲明。

    3、發生在父類與子類之間時,子類的訪問權限不能比父類嚴格。

    19.(默認)有什么區別?

    20. 多重繼承下初始化的順序是什么?

    先父類后子類,先屬性后構造方法。

    21、使用運行時多態開發的思路是什么?

    A。 編寫父類

    b. 寫一個子類,子類重寫父類方法

    C。 運行時,使用父類的類型和子類的對象

    Pet pet = new Dog();

    22.類中的向上轉型和向下轉型有什么區別?

    向下轉型:超類轉換為子類(使用強制轉換)(對象類或接口)

    向上轉換:子類使用父類的類型,子類的對象轉換為父類(自動類型轉換)

    23. 接口和抽象類有什么區別?

    差異一:語法方面

    1、繼承實現((抽象類單繼承,接口多實現)接口還可以繼承其他接口)

    2、成員變量

    ①. 抽象類中可以有普通成員變量,但接口中不能有普通成員變量

    ②. 抽象類和接口都可以包含靜態成員變量

    3. 方法

    ①. 抽象類可以有構造函數,但接口不能有構造函數。

    ②.抽象類可以包含非抽象普通方法,接口中的所有方法都必須是抽象的,并且不能有非抽象普通方法。

    ③. 抽象類中的抽象方法的訪問類型可以是默認類型,但接口中的抽象方法只能是類型,默認是類型。

    ④. 抽象類可以包含靜態方法,但接口不能包含靜態方法。

    差異 2:概念方面

    抽象類體現了繼承關系。 要使繼承關系合理,父類和派生類之間必須存在“is-a”關系,即父類和派生類的概念本質上應該是相同的。 接口的情況并非如此。 它不要求接口的實現者在概念上與接口定義一致,而只需實現接口定義的契約,即“has-a”關系。

    設計接口時要注意穩定性,方法的參數和返回值不能隨意改變。

    差異三:設計方面

    抽象層次不同,抽象類是類的抽象,接口是行為的抽象。 抽象類將整個類抽象為一個整體,包括屬性和行為,而接口抽象了類的各個部分(行為)。 抽象類是自下而上抽象的,接口是自上而下設計的。

    24.java中常見的異常類型?

    25、編寫多個異常的注意事項?

    A。 catch語句的排列順序:先子類,后父類

    b. 發生異常時按順序一一匹配

    C。 只執行與異常類型匹配的第一個catch語句

    (不要“吃異?!?,父類有底線)

    在catch中,需要輸出異常信息,并打印異常發生處的堆棧信息。 如果沒有輸出,就會導致異常發生,但由于沒有相關錯誤信息的輸出,所以異常發生的情況未知。 這種情況被稱為“飲食異?!?。

    26. 錯誤和錯誤有什么區別?

    Error類和該類的父類都是類,它們的區別如下:

    Error類一般指與虛擬機相關的問題,如系統崩潰、虛擬機錯誤、內存空間不足、方法調用棧溢出等。 對于這種錯誤導致的應用程序中斷,程序本身無法恢復和預防。 遇到此類錯誤時,建議讓程序終止。

    類代表程序可以處理、捕獲并可能從中恢復的異常。 遇到這樣的異常,應該盡可能的處理異常,恢復程序,不能隨意終止異常。

    27.和有什么區別?

    運行時異常( ) 編譯可以通過,但一運行就終止。 程序不會處理運行時異常。 如果發生此類異常,程序將終止。 (bug的來源,需要檢查運行時異常)(父類)

    檢查異常 ( ) 或使用 try。 。 。 catch catch,或者用語句拋出,交給其父類處理,否則編譯不通過。 (父親)

    28. Final、 和 有什么區別?

    Final:用于聲明屬性、方法、類,分別表示屬性不可變、方法不可重寫、類不可繼承。

    :異常處理語句結構的一部分,表示始終執行。

    :類的方法。 待回收對象的這個方法會在垃圾收集器執行時被調用。 可以重寫此方法以在垃圾收集期間提供其他資源回收,例如關閉文件。 這是一個被動方法(實際上是一個回調方法),我們不需要調用。

    29.投擲和投擲有什么區別?

    扔:

    A。 該語句用在方法體中,表示拋出異常,由方法體中的語句處理。

    b. 它是一個專門拋出異常的動作,所以它拋出的是一個異常實例,執行 throw 一定拋出了某種異常。

    :

    A。 就是聲明在方法聲明之后使用異常語句,表示如果拋出異常,則方法的調用者將處理該異常。

    b. 主要是聲明該方法將拋出某種類型的異常,以便其使用者需要知道需要捕獲的異常類型。

    C。 表示有可能出現異常,但不一定會出現這種異常

    30、什么是裝箱和拆箱,以及包裝的應用場景?

    拆箱 - 包裝類變量可以分配原始類型

    裝箱 - 原始類型的變量可以分配一個包裝類

    封裝類的應用場景:

    主要用在集合類中。 (集合不允許存儲基本數據類型。存儲數字時,使用包裝類型)

    包裝類的作用:

    A。 集合不允許存儲基本數據類型。 存儲數字時,使用包裝類型;

    b. 包裝類提供了一系列實用的方法

    31.List、Set、Map有什么區別?

    ①.List和Set是存儲單列數據的集合,Map是存儲鍵、值等雙列數據的集合;

    ②. List中存儲的數據是有序的并且允許重復;

    ③. Map中存儲的數據是無序的,它的key不能重復,它的value可以重復。

    ④. Set中存儲的數據是無序的,不允許重復,但是元素在集合中的位置是由元素決定的,位置是固定的(Set集合是基于數據存儲的,所以位置是固定,但位置不受用戶控制,因此集合中的元素對于用戶來說仍然是亂序的)

    32.有什么區別?

    實現了一個變長數組,并且在內存中分配了連續的空間。 遍歷元素和隨機訪問元素的效率比較高。

    使用鏈表存儲。 插入和刪除元素時效率更高。

    33、如果一個存儲有很多值,但不知道KEY是什么,如何遍歷所有的KEY和VALUE?

    Get:接口的()方法

    * 方法

    * (): 判斷是否還有其他可訪問的元素

    * next():返回下一個要訪問的元素

    (),返回這個map中包含的映射(鍵值)

    () 方法獲取密鑰; ()方法獲取值

    (),返回鍵集

    取出所有key的集合,獲取對象,取出key,根據key取出對應的value

    34.進程和線程有什么區別?

    進程是指在內存中運行的應用程序。 每個進程都有自己獨立的內存空間,一個進程中可以啟動多個線程。 例如,在系統中,一個正在運行的exe就是一個進程。

    線程是指進程中的一個執行過程,一個進程中可以運行多個線程。 例如,java.exe進程中可以運行許多線程。 線程總是屬于一個進程。

    進程中包含線程,線程必須屬于某個進程。 一個進程中的多個線程共享該進程的內存,兩者之間是一對多的關系。

    35、線程的實現方法有哪些?

    ①. 繼承類

    特點:編寫方便,可以直接操作線程; 適合單繼承

    ②. 實現接口

    特點:避免單一繼承的限制; 促進資源共享

    ③. 編寫實現類

    特點:需要實現call()方法。 call方法與run方法不同,call方法有返回值。

    36、多線程中調用start方法和run方法有什么區別?

    調用run()方法:主線程只有一條執行路徑; 沒有啟動新線程(普通方法調用)。

    調用start()方法:多條執行路徑,主線程和子線程并行交替執行; 啟動一個線程。

    調用start方法就是線程的啟動。 調用后,線程進入就緒狀態。

    Run方法編寫了線程要實現的功能。 一般不直接調用,而是由系統調用。 如果調用的話,就是普通的方法調用。

    37. 多線程有問題嗎?

    什么時候使用多線程開發?

    ①. 程序需要同時執行兩個或多個任務。 例如:手機淘寶中“我的界面”的后臺程序,開啟多個線程從不同系統獲取數據,組合發送給前端APP。

    ②. 程序需要實現一些需要等待的任務,例如:導出過大的Excel文件。

    ③. 需要一些程序在后臺運行,例如:Java垃圾收集器程序。

    線程安全注意事項:

    1、出現線程安全問題:當多個線程共享數據時,由于其中一個線程還沒有完成對共享數據的操作,其他線程就會參與進來,因此出現了數據篡改的問題。

    2、如何解決線程安全問題:要保證一個線程操作共享數據時,其他線程必須在外面等待,直到操作共享數據的線程執行完畢,其他線程才能操作共享數據。

    3、同步方法的鎖是當前對象this,同步代碼塊需要指定鎖對象(必須唯一); 相比之下,同步代碼塊可以更精確地控制所管理的代碼。

    另:調試多線程的排查方法是輸出多條日志,而不是Debug。 使用log4j輸出中間處理結果來排查問題。

    38.有什么區別?

    全部實現Map接口,繼承類,繼承類

    線程安全,效率低下,key和value都不允許為null。

    它是非線程安全的,高效,并且鍵和值都允許為空。

    為什么線程安全效率低下:

    線程安全是以犧牲效率為代價的。 它是(一種同步鎖,用于共享數據,一次只有一個線程可以訪問共享數據),所以線程安全不需要多線程訪問時使用。 實現同步。

    39.Join和yield有什么區別?

    Yield:(禮貌)當前線程貢獻CPU使用權,但當前線程仍有可能再次獲得CPU使用權。

    Join:該方法出現時,掛起當前線程,執行其他進程,等待其他線程執行完畢后再執行掛起的進程。

    40.線程的狀態?

    線程的狀態

    在某些條件下,線程的狀態會發生變化。 一個線程有以下幾種狀態:

    1.新建狀態(New):一個線程對象被新創建。

    2.就緒狀態():線程對象創建后,其他線程調用該對象的start()方法。 該狀態的線程位于“可運行線程池”中,變為可運行狀態,只等待獲取CPU的使用權。 即處于就緒狀態的進程擁有其運行所需的除CPU之外的所有資源。

    3、運行狀態():處于就緒狀態的線程獲取CPU并執行程序代碼。

    4、阻塞狀態():阻塞狀態是指線程由于某種原因放棄了CPU的使用權,暫時停止運行。 直到線程進入就緒狀態,才有機會進入運行狀態。

    阻塞分為三種類型:

    (1)、等待阻塞:正在運行的線程執行wait()方法,該線程會釋放所有占用的資源,JVM會將該線程放入“等待池”中。 進入該狀態后,無法自動喚醒,必須依賴其他線程調用()或()方法才能被喚醒。

    (2)同步阻塞:當運行的線程獲取對象的同步鎖時,如果同步鎖被其他線程占用,JVM就會將該線程放入“鎖池”中。

    (3)其他阻塞:當正在運行的線程執行sleep()或join()方法時,或者發出I/O請求時,JVM會將線程置于阻塞狀態。 當sleep()狀態超時時,join()等待線程終止或超時,或者當I/O處理完成時,線程再次轉入就緒狀態。

    5、死亡狀態(Dead):線程執行完畢或因異常退出run()方法,線程結束生命周期。

    41.獲取Class對象的三種方法是什么?

    第一種方式:

    不帶new,根據類的class屬性獲取Class對象(類名.class)

    第二種方式:

    new的情況下,通過.()方法獲取Class對象

    第三種方式:

    通過Class.("包名+類名")方法獲取Class對象

    42.什么是反射?

    Java反射是指在運行狀態下,對于任何一個類,都可以知道這個類的所有屬性和方法; 對于任何對象,您可以調用它的任何方法和屬性; 并且您可以更改其屬性。

    反映()機制

    它可以動態獲取類的信息,動態調用對象的方法。

    反射機制主要提供以下功能

    在運行時確定任何對象的類。

    在運行時構造任何類的對象。

    在運行時確定任何類的成員變量和方法。

    在運行時調用對象的任何方法。

    對反射的理解:

    1、通常我們創建對象的時候都是通過New class來創建的,但是通過反射技術,我們可以通過Class來創建實例。 (類的完整路徑),例如:加載JDBC驅動程序時,我們使用反射技術。

    2.反射主要用于平時開發中框架層的開發。 例如,框架內部使用反射技術來創建實例。

    43.工廠模式和單例模式?

    單例模式:應用該模式的類只能有一個實例。 它必須自己創建這個實例,它必須將這個實例提供給整個系統本身。 從具體實現來看:首先,單例類只提供了私有構造函數; 其次,類定義包含該類的靜態對象私有對象; 第三,類提供靜態公共函數用于創建或獲取自身的靜態私有對象。

    工廠模式:簡單來說,對象的創建傳統上都是交給工廠類來創建,然后通過工廠類的工廠方法可以自己獲取對象。 適用場景是對象創建步驟繁瑣,過程相對復雜。

    工廠模式和單例模式的區別:

    區別一:工廠模式可以創建不同類型的對象實例,而單例模式只能創建一種類型的對象實例;

    區別二:工廠模式創建的對象實例沒有在內存中只創建一份的要求,而單例模式創建的對象實例在內存中只有一份。

     
    反對 0舉報 0 收藏 0 打賞 0評論 0
     
    更多>同類資訊
    推薦圖文
    推薦資訊
    點擊排行
    網站首頁  |  關于我們  |  聯系方式  |  使用協議  |  版權隱私  |  網站地圖  |  排名推廣  |  廣告服務  |  積分換禮  |  網站留言  |  RSS訂閱  |  違規舉報
    Powered By DESTOON
     
    三级精品影视国产,欧美乱伦免费综合,亚洲a在线中文,人妻色综合网站
  • <center id="q6uyy"><td id="q6uyy"></td></center>
    <dd id="q6uyy"></dd>