25屆實習/秋招-java面試-JavaSe面試題整理-牛客網

来源:https://www.cnblogs.com/Blunt-Raz0r/archive/2023/09/15/17704171.html
-Advertisement-
Play Games

JavaSe 變數和運算符: 基本數據類型介紹 java中浮點數精度怎麼解決,有瞭解過實現嗎,為什麼有精度問題 BigDecimal,如何判斷BigDecimal是否相等。如何進行計算、怎麼四捨五入 基本類型幾種,分別占用空間 int和Integer區別--包裝類,int有幾個位元組。 包裝類常量池 ...


JavaSe

  • 變數和運算符:

    • 基本數據類型介紹
      • java中浮點數精度怎麼解決,有瞭解過實現嗎,為什麼有精度問題
        • BigDecimal,如何判斷BigDecimal是否相等。如何進行計算、怎麼四捨五入
      • 基本類型幾種,分別占用空間
    • int和Integer區別--包裝類,int有幾個位元組。
      • 包裝類常量池
      • 怎麼判斷相等的?為什麼不用 == ?
      • Integer緩存是放在哪裡的。緩衝池範圍
      • integer valueof 和 new有啥區別,誰更快
      • Int i =1 和 integer i=1存儲區別。
      • 如何聲明一個int的List(不能,只能聲明Integer的List)
      • Integer是線程安全的嗎,哪些類是線程安全的。是的
      • 給Integer最大值+1,是什麼結果
    • Long 緩存池,包裝類
      • 數據傳輸,比如RPC or HTTP,使用數據類型,用基本類型還是包裝類型好?
    • switch可以放哪些類型
  • Java自動裝箱和自動拆箱

  • 方法參數傳遞:

    • JAVA中值傳遞還是引用傳遞的問題,參數傳遞都是值傳遞。
  • 面向對象

    • new一個對象的流程

    • 怎麼樣唯一確定一個類?如果要載入的兩個類的全限定名相同怎麼辦?

    • json 封裝:通過private修飾,通過get和set獲取。

      • 為什麼要有封裝類
    • static和final區別。

      • static表示屬於類,只有一個
      • final修飾一個對象是什麼不變。final關鍵字使用
      • static修飾的欄位什麼時候初始化
      • 對於static變數的理解?static變數分配記憶體的時候發生在哪個環節?
      • static關鍵字,static加在類上和不加區別,除了修飾類、屬性、方法還有嗎?(現在想起還有代碼塊!)
      • 寫一個static main方法,能調用非靜態方法嗎?如果要調用要怎麼調用?為什麼不能不創建對象調用?
      • 靜態方法和非靜態方法的區別
    • final和繼承:

      • final修飾的對象,如果是變數,和靜態變數,在哪裡可以賦值。
      • Java支持多繼承嗎?從開發的角度說一下為什麼不支持多繼承
    • 介面和抽象類的區別?應用場景?

      • 兩者是否可以實例化
      • set介面可以定義私有成員變數嗎
    • 多態用在哪裡,有什麼用處。

    • 實例化:

      • class B {
            static B t1 = new B();
            static B t2 = new B();
            {
                System.out.println("代碼塊");
            }
            static {
                System.out.println("靜態塊");
            }
        }
        public class Main {
            public static void main(String[] args) throws Exception {
                B b = new B();
            }
        }
        //輸出什麼
        
    • 重載重寫,構造方法的重載

  • 面向對象的三個特性,三大特性深層次。

    • 說一說面向對象編程的特點?和麵向過程編程有什麼區別?
    • 生成一個對象的全過程,對象的組成
    • Java許可權修飾符
  • 編程範式:什麼是結構化編程、面向對象編程以及函數式編程?


  • 內部類: 匿名內部類訪問外部成員變數時編譯器會提示需要final修飾為什麼


  • java原生類中用的最多的類

API

  • Object 類有什麼方法,舉出常用方法

    • == 和equals的區別
      • == 判斷堆記憶體地址,指針
      • equals是判斷引用是否一樣。看是否重寫。
        • 預設使用 ==
        • 重寫equals 要重寫hashcode 自己實現equals要註意什麼
        • ava底層集合框架中,為了提高查詢效率,往往使用hashCode方法來確定元素的保存位置。 hashcode返回值不同。
      • String str = "i"; String str2 = new String("i") || 不一樣-常量池
      • String類裡面的equals方法實現看過嗎
    • 淺拷貝和深拷貝的區別,深拷貝怎麼實現,引用拷貝。
      • 淺拷貝會在堆上創建一個新的對象。引用類型/值類型
      • 基本類型淺克隆可以
      • 引用類型在淺克隆後,要對引用的變數再進行嵌套克隆。
      • 可以看javaguide,引用/淺拷貝/深拷貝的區別 圖
  • String類

    • 7-String 存儲結構和API 變更

      • string為什麼設計成不可變

        • 底層char數組,hash。 final
        • 在 Java 9 之後,String 類的實現改用 byte 數組存儲字元串
        • javaguide
          • 私有且final無法繼承。
      • String直接賦值 stringpoll 和 new一個對象的區別。

        • String str = new String("abc") 創建字元串對象 --這裡涉及兩個對象
        • new String("a") + new String("b") 涉及幾個對象
        • String a = "str_a", String b = new String(a + "str_b"); 創建了幾個對象
      • String 的最大長度

      • 字元串常量池 --字面量

        • 如何設置大小
        • intern( )方法
        • string的一些題。
        • 記憶體位置,堆中。
        • 優化常量池的方法:
      • 不可變好處


      • StringBuffer(synchronized)和StringBuilder的區別,和String的區別

        • StringBuilder的方法

        • String是不可變的,那麼StringBuffer和StringBuilder是如何實現可變的呢?底層原理是什麼?
          如果讓你來實現StringBuffer和StringBuilder,你會怎麼實現?
          
      • java的string類的設計思想,jdk1.9前後區別。String類,底層實現

      • string底層的char[]數組存儲都是兩個位元組,如果我換成不定長的存儲數組會有什麼問題,比如字元串 "12我是",12占用兩個位元組,我是占用應該是6個位元組,這樣存在什麼問題?


  • Arrays類,常用方法

  • DateFormat

    • 正則表達式掠過。

集合框架:單列Collection-雙列Map

怎麼理解隨機存放
那定義一個Object[] o, 那它可以存放各種類型的數據,底層怎麼存放的呢
Object o = 1L 是怎麼存儲的

集合和集合概述、特點存儲結構紅黑樹。java常見容器,如何升級成線程安全的容器

  • 介紹Java集合,說幾個常用的數據結構的底層原理

    • 介紹Java裡面常見的集合、整體框架,父類之類的
  • Collection--可以看pdf的繼承圖

    • collection的方法:add clear remove
    • toArray()
    • Collection集合的輸出方式:
  • 簡單講講List和Set的區別(都是介面),List和Set都繼承了哪個介面,Map繼承了上述介面嗎

  • List, Set, Queue, Map 四者的區別

    • List 和 map的實現類 和各自的底層結構
  • List:

    • ArrayList和LinkedList區別,優缺點,底層結構,使用場景。
      • ArrayList:

        • 為什麼平時都用arraylist,無需同步

        • 惰性初始化

        • arraylist擴容機制,底層arraycopy函數,刪除和加入代價都很大

        • 數組為什麼可以隨機讀取,底層Object[]數組

        • 寫時複製 併發安全CopyOnWriteArrayList 寫入操作的實現

        • copyOnWriteArrayList

        • ArrayList中刪除偶數,不能用remove

        • 多線程往ArrayList中寫10萬條數據,會出現什麼問題

      • LinkedList

        • arraylist對大片的連續記憶體有很高要求,linkedlist只需要碎片空間
        • LinkedList為什麼是雙端鏈表,如果一個鏈表沒有被引用,會被立馬刪除嗎
        • 分別分析一下插入、刪除、查找的時間複雜度。LinkedList,增刪快查詢慢,
        • 可以通過什麼數據結構來加快LinkedList的訪問
      • 這兩個插入哪個快。插入海量數據,arraylist和linkedlist哪個快

      • 數組是否有併發安全問題(如何解決),ArrayList和linkedlist的多線程問題

  • Set:

    • HashSet: hashset是怎麼基於hashmap實現的。

      • 如果自己什麼設計
    • 如何去重:兩步

      • 如果保存的是一個自定義的對象的話,那我這個對象應該是有什麼動作嗎
    • Set的底層:是哈希表。--即為下麵的HashMap

      • 什麼時候轉為紅黑樹。--為什麼是無序的。
    • LinkedHashSet為什麼有序:

      • 多一個順序存儲的鏈占據空間。
    • HashSet和TreeSet有什麼區別?

      • 集合是如何排序的
      • 如果傳入TreeMap的key值是對象,那麼對象應該滿足什麼條件(有Comparable介面)
        • 為對象的類//用的集合設置比較器,implements Comparable介面。重寫compareTo方法。
        • 代碼
        • 比較器底層原理
      • treeSet和treeMap的區別?
  • Queue

    • 常用的方法。
  • Collections的區別

    • 工具類
    • Collections.sort和Arrays.sort:
    • 集合的選用,是否排序
    • collections有什麼實現

Map:

  • 集合關係(Collection、Map)

    • Map集合的體系特點。鍵的特點,有key重覆的Map嗎。
    • Map是介面,HashMap是實現,用new
    • map集合下常用的子類有哪些/實現類
  • 常用的api

    • 如何獲取鍵值對,keySet( ) 和 .values( )
  • Map集合的遍歷方式:有幾種

    • 通過鍵,函數KeySet, entrySet()
    • Iterator<Map.Entry<String, Integer>> iterator = maps.entrySet().iterator();
  • hashmap

    • 特點:

      • key如何保證唯一,是否可為null

      • 是有序還是無序的

    • hashmap在1.7和1.8的區別

    • 底層結構--源碼

      • 1.8之前為什麼這麼設置,解決hash衝突有別的辦法嗎
      • 閾值初始大小
      • 為什麼引入紅黑樹(為什麼不用avl樹,而不是BST、B+、堆等等)? 。紅黑樹自旋條件? 紅黑樹的性質、紅黑樹如何調節平衡
    • 成員屬性:

      • 什麼時候轉紅黑樹,為什麼紅黑樹閾值是8不是6或者10
      • 紅黑樹會退化成鏈表嗎
      • 為什麼負載因數是0.75 ,初始容量
    • 成員方法:

      • Put,如果Key衝突的是怎麼處理的?如何判斷是覆蓋還是加數據?
        • JDK1.7 衝突的時候為什麼採用頭插法,添加元素怎麼確定。頭插法和尾插法的區別。迴圈鏈表問題
        • 頭插的問題,單線程擴容時先遍曆數組table,接著遍歷table[i]對應的鏈表。
        • hash去重的方法,hash碰撞的解決方法。(哈希演算法有幾種、一次性哈希、如何判斷這個哈希演算法優秀)。hash表怎麼實現?答了線性探測,二次探測和開鏈,追問會在不同情況下會用哪種實現方式。瞭解一致性哈希嗎
      • resize()
      • get流程、怎麼哈希
      • hashCode()在HashMap的containsKey()函數中的用法,底層實現
      • hashCode()和equals()有什麼作用、區別。
    • 併發異常

      • java的hashmap的fastfail機制。

      • 為什麼不是線程安全的。它在什麼情況下會出現線程不安全的問題,不安全情況下會出現什麼現象?說一下場景

      • 如何線程安全,回答讀寫鎖或者concurrenthashmap

      • 平時使用hashmap要關註那些方面的東西

      • 有措施能讓Hashmap變得線程安全嗎?除了ConcrrentHashmap和Hashtable呢?

        • 加鎖()--synchronize-讀寫鎖-reentrylock
          • 讀寫鎖的實現原理
        • cas(樂觀鎖)cas和syn加在哪
  • hashmap和treemap有什麼區別,什麼時候用?treemap底層數據結構是什麼?

  • concurrentHashmap


泛型的理解和應用場景

  • 使用泛型有什麼好處

  • 類方法介面

  • 通配符

    • 泛型中如何確定上下限(<? extends T> <? super T>
  • 泛型檢查

異常:

  • 基本介紹
    • exception和error區別。
    • 異常繼承的根類, 根類有哪些方法
    • 編譯期異常和非編譯期異常區別
  • 編譯異常:
    • Exception , throws,的作用
    • try/catch機制
      • try finally不用catch行嗎
  • 運行時異常:
    • 遇到過哪些異常,(空指針在哪遇到了、SQL 異常、類型轉換異常)
    • Exception有哪些,從上往下說說看
    • 談談 Java 異常處理機制
  • final/finally/finalize的使用?

IO:

  • File

    • 打開一個文件的流程
  • IO stream

    • 序列化Serializable。
    • 實現 Serializable 的類修改了類包的路徑,那麼反序列化還能成功嗎?使用 JSON 可以反序列化成功嗎?上面的問題,使用 Object write 的方式會不會有影響
    • serializable 介面的作用 是否實現這個介面在類上有什麼區別。自帶的序列化方法有哪些
    • 序列化的相容性問題
    • jdk的stream,Java streamAPI,parallel StreamAPI
  • IO瞭解嗎

    • BIO、AIO、NIO用過嗎。談一下 I/O 多路復用,基於IO多路復用(epoll),兩個線程之間如何通信。epoll的優點。
    • 非同步IO是如何實現的
  • IO流都有哪些、繼承關係和應用場景;Stream流的實現原理;

反射

  • 反射的理解
    • 能幹嗎
    • 原理和思想
    • 優缺點
  • 應用場景:什麼時候用,怎麼用,用過嗎
    • 第一步: 獲取類
    • 獲取構造: 你自己寫過反射嗎,反射可以調用私有構造函數嗎
      • 私有構造器
    • 一個類的某個屬性是私有的沒有get/set方法,如何通過反射獲取,代碼上怎麼具體實現
  • 獲取私有變數要怎麼做,獲取註解的信息要怎麼做,反射效率低將反射結果進行緩存有遇到過嗎

設計模式

  • 單例模式:

    • 兩種分類:

      • 區別
      • 分別應用在什麼場景下
    • 餓漢式:

      • 靜態變數的方式:
    • 懶漢式:

      • 靜態內部類實現單例模式為什麼屬於懶漢式的?
      • 安全嗎,如何實現安全,鎖加在哪
      • 加鎖比較影響性能,那除了加鎖以外有什麼其他方法嗎
      • 單例模式雙check,太慢
        • 為什麼進行第二次非null判斷
      • 如何實現線程安全單例模式?
    • 手寫單例模式,各種情況,怎麼保證線程安全

      • 為什麼要用DCL,為什麼要用volatile,為什麼要用synchronized,為什麼要鎖住類的.class
  • 代理模式:

    • 代理模式的作用:代理包一層,通過代理對象訪問原始對象

      • 代理對象,訪問對象
    • 靜態代理

    • 動態代理原理

      • 什麼時候用
      • JDK代理 和 CGLib 對比區別
        • 優缺點
        • 常用處CGLib在哪用到了
        • 如果被代理對象不實現介面怎麼實現代理
      • 具體實現
    • 方式對比:

      • 優缺點
      • 動態代理和靜態代理區別
  • 觀察者模式,說說怎麼設計相應的類

  • 工廠模式

  • 裝飾器模式,代理模式,以及兩者的區別

  • 適配器和裝飾器模式的區別?裝飾者模式和策略模式的區別

  • OOP設計模式六大原則

  • 說一下模板模式,舉一些例子

  • 實現工廠模式

  • 手寫單例模式

  • 責任鏈模式在哪裡用到了


  • Java新特性

為什麼要重構,重構解決了什麼問題,怎麼檢驗重構的正確性

java開發規範,看過阿裡的開發規範嗎

類載入順序,構造器,代碼塊,哪個先載入


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原文在這裡。 由 Johan Brandhorst-Satzkorn, Julien Fabre, Damian Gryski, Evan Phoenix, and Achille Roussel 發佈於 2023年9月13日 Go 1.21添加了一個新的埠,通過新的GOOS值wasip1來定位W ...
  • Matplotlib庫 由於誕生的比較早,所以其預設的顯示樣式很難符合現在的審美,這也是它經常為人詬病的地方。 不過,經過版本更迭之後,現在 Matplotlib 已經內置了很多樣式表,通過使用不同的樣式表,可以整體改變繪製圖形的風格,不用再調整一個個顯示參數。 1. 樣式表的使用 1.1. 所有內 ...
  • 在日常開發中我們難免會遇到各種各樣的異常問題的發生,但是任何異常如果都在異常可能會出現的地方直接去處理會讓業務邏輯顯得很臃腫,代碼看上去很冗餘。在開發Web應用程式時,異常處理是一項非常重要的任務。異常處理可以提高程式的健壯性和穩定性。Java後端開發人員可以設計一個統一的全局異常處理方案來解決異常 ...
  • 什麼是minio 引用官網: MinIO是根據GNU Affero通用公共許可證v3.0發佈的高性能對象存儲。它與Amazon S3雲存儲服務相容。使用MinIO構建用於機器學習,分析和應用程式數據工作負載的高性能基礎架構。 官網地址: https://min.io/ 文檔地址: https://d ...
  • 本文通過多個SpringBoot實際項目進行歸納整理,從統一介面返回結果和配置全局異常處理兩個方面出發,介紹如何優雅的封裝規範後端介面輸出,詳細刨析@RestControllerAdvice和@ExceptionHandler註解及使用方式,增加後端服務健壯性和與前端對接規範性 ...
  • 本篇藉助JProfiler工具,從線程的觀察結果去印證官方資料,做到理論結合實踐,讓您領先一步,掌握和瞭解神秘的虛擬線程內幕 ...
  • Notion相信大家都不陌生了,一款非常好用的筆記軟體,TJ君也一直在用來記筆記和寫文章。關於Notion的替代品,之前有給大家推薦AFFiNE ,但這個還是一個比較成型的軟體。 那麼如果想開發一個類Notion的工具,又或者在自己的應用中增加一個類Notion的內容編輯功能,是否有好用的開源工具呢 ...
  • 1.什麼是迴圈依賴? 迴圈依賴是指一個或多個對象之間存在直接或間接的依賴關係,這種依賴關係構成一個環形調用 , 舉個例子 : A 依賴B , B依賴C , C依賴A , 這樣就形成了迴圈依賴; 2.spring對迴圈依賴的處理有三種情況: ①構造器的迴圈依賴:這種依賴spring是處理不了的,直接拋 ...
一周排行
    -Advertisement-
    Play Games
  • 一個自定義WPF窗體的解決方案,借鑒了呂毅老師的WPF製作高性能的透明背景的異形視窗一文,併在此基礎上增加了滑鼠穿透的功能。可以使得透明窗體的滑鼠事件穿透到下層,在下層窗體中響應。 ...
  • 在C#中使用RabbitMQ做個簡單的發送郵件小項目 前言 好久沒有做項目了,這次做一個發送郵件的小項目。發郵件是一個比較耗時的操作,之前在我的個人博客裡面回覆評論和友鏈申請是會通過發送郵件來通知對方的,不過當時只是簡單的進行了非同步操作。 那麼這次來使用RabbitMQ去統一發送郵件,我的想法是通過 ...
  • 當你使用Edge等瀏覽器或系統軟體播放媒體時,Windows控制中心就會出現相應的媒體信息以及控制播放的功能,如圖。 SMTC (SystemMediaTransportControls) 是一個Windows App SDK (舊為UWP) 中提供的一個API,用於與系統媒體交互。接入SMTC的好 ...
  • 最近在微軟商店,官方上架了新款Win11風格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,這款應用引入了前沿的Fluent Design UI設計,為用戶帶來全新的視覺體驗。 ...
  • 1.簡單使用實例 1.1 添加log4net.dll的引用。 在NuGet程式包中搜索log4net並添加,此次我所用版本為2.0.17。如下圖: 1.2 添加配置文件 右鍵項目,添加新建項,搜索選擇應用程式配置文件,命名為log4net.config,步驟如下圖: 1.2.1 log4net.co ...
  • 之前也分享過 Swashbuckle.AspNetCore 的使用,不過版本比較老了,本次演示用的示例版本為 .net core 8.0,從安裝使用開始,到根據命名空間分組顯示,十分的有用 ...
  • 在 Visual Studio 中,至少可以創建三種不同類型的類庫: 類庫(.NET Framework) 類庫(.NET 標準) 類庫 (.NET Core) 雖然第一種是我們多年來一直在使用的,但一直感到困惑的一個主要問題是何時使用 .NET Standard 和 .NET Core 類庫類型。 ...
  • WPF的按鈕提供了Template模板,可以通過修改Template模板中的內容對按鈕的樣式進行自定義。結合資源字典,可以將自定義資源在xaml視窗、自定義控制項或者整個App當中調用 ...
  • 實現了一個支持長短按得按鈕組件,單擊可以觸發Click事件,長按可以觸發LongPressed事件,長按鬆開時觸發LongClick事件。還可以和自定義外觀相結合,實現自定義的按鈕外形。 ...
  • 一、WTM是什麼 WalkingTec.Mvvm框架(簡稱WTM)最早開發與2013年,基於Asp.net MVC3 和 最早的Entity Framework, 當初主要是為瞭解決公司內部開發效率低,代碼風格不統一的問題。2017年9月,將代碼移植到了.Net Core上,併進行了深度優化和重構, ...