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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...