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 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...