欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

2025年最新 Java 面經(jīng):拼多多后端面試真實復盤,附答案模板,速速收藏!

Java 一面

1,垃圾回收算法了解嗎?

Java 中的垃圾回收算法主要有以下幾種:

標記-清除算法(Mark-Sweep)

  • 工作原理:首先遍歷堆中的對象,標記出所有的存活對象,接著清除未標記的對象。
  • 優(yōu)點:實現(xiàn)簡單,能夠處理堆中的所有對象。
  • 缺點:標記和清除的過程會產(chǎn)生內(nèi)存碎片,影響后續(xù)內(nèi)存分配的效率。

標記-整理算法(Mark-Compact)

  • 工作原理:首先標記出所有存活的對象,然后將存活的對象整理到一邊,最后清除未標記的對象。
  • 優(yōu)點:避免了內(nèi)存碎片問題。
  • 缺點:整理階段需要移動對象,會導致額外的開銷。

復制算法(Copying)

  • 工作原理:將內(nèi)存分成兩部分,每次只使用其中一半,垃圾回收時將存活的對象從一半復制到另一半,清除原區(qū)域的所有對象(樸素的復制算法是這樣的,實際使用會分為兩個 survivor 和一個 eden 區(qū))。
  • 優(yōu)點:無需處理內(nèi)存碎片,分配效率高。
  • 缺點:需要雙倍的內(nèi)存空間,浪費了一半的空間。

2,數(shù)據(jù)結(jié)構(gòu)知道嗎?

主要是以下七種數(shù)據(jù)結(jié)構(gòu):

1)數(shù)組(Array)

2)鏈表(Linked List)

3)棧(Stack)

4)隊列(Queue)

5)哈希表(HashMap/HashTable)

6)樹(Tree)

7)圖(Graph)

登陸面試鴨查看各數(shù)據(jù)結(jié)構(gòu)的特點、應用場景及局限性,還有更多大廠真實面經(jīng)、主流編程語言面試題,等你來刷。

3,HashMap 的原理

HashMap 是基于哈希表的數(shù)據(jù)結(jié)構(gòu),用于存儲鍵值對key-value)。其核心是將鍵的哈希值映射到數(shù)組索引位置,通過數(shù)組 + 鏈表(在 Java 8 及之后是數(shù)組 + 鏈表 + 紅黑樹)來處理哈希沖突。

HashMap 使用鍵的 hashCode() 方法計算哈希值,并通過 indexFor 方法(JDK 1.7 及之后版本移除了這個方法,直接使用 (n - 1) & hash)確定元素在數(shù)組中的存儲位置。哈希值是經(jīng)過一定擾動處理的,防止哈希值分布不均勻,從而減少沖突。

HashMap 的默認初始容量為 16,負載因子為 0.75。也就是說,當存儲的元素數(shù)量超過 16 × 0.75 = 12 個時,HashMap 會觸發(fā)擴容操作,容量x2并重新分配元素位置。這種擴容是比較耗時的操作,頻繁擴容會影響性能。

4,哈希表的負載因子為什么是 0.75?

HashMap 的默認負載因子為 0.75 是為了在時間復雜度空間復雜度之間取得一個合理的平衡。負載因子為 0.75 時,避免過多擴容的同時,也保證了不會出現(xiàn)過多的哈希沖突,確保查找和插入操作的效率,維持良好的性能表現(xiàn)。

5,你了解反射嗎?

Java 的反射機制是指在運行時獲取類的結(jié)構(gòu)信息(如方法、字段、構(gòu)造函數(shù))并操作對象的一種機制。反射機制提供了在運行時動態(tài)創(chuàng)建對象、調(diào)用方法、訪問字段等功能,而無需在編譯時知道這些類的具體信息。

反射機制的優(yōu)點

  • 可以動態(tài)地獲取類的信息,不需要在編譯時就知道類的信息。
  • 可以動態(tài)地創(chuàng)建對象,不需要在編譯時就知道對象的類型。
  • 可以動態(tài)地調(diào)用對象的屬性和方法,在運行時動態(tài)地改變對象的行為。

6,SpringBoot如何實現(xiàn)控制反轉(zhuǎn)?

可以利用 Spring IOC。

Spring IOC(Inversion of Control,控制反轉(zhuǎn))是 Spring 框架的核心概念之一。它是通過依賴注入(Dependency Injection) 實現(xiàn)的。IOC 讓對象的創(chuàng)建與管理職責由容器負責,而不是由對象自身控制。

  • 核心思想:控制反轉(zhuǎn)意味著將對象的創(chuàng)建和依賴關(guān)系交由 Spring 容器管理,而不是由程序代碼直接控制。這種機制使得程序更加靈活和解耦,提升了代碼的可維護性和擴展性。
  • 依賴注入:通過構(gòu)造器注入、setter 注入或接口注入,將對象所需的依賴傳遞給它,而不是讓對象自行創(chuàng)建依賴。

7,Spring是如何管理bean的?

任何通過 Spring 容器實例化、組裝和管理的 Java 對象都可以被稱為 Spring Bean。Spring 提供了多個擴展點,讓開發(fā)者可以自定義和控制 Bean 的生命周期,如 BeanPostProcessor、BeanFactoryPostProcessor

服務(wù)端一面

算法:最長連續(xù)遞增序列

為了找到最長的連續(xù)遞增子序列,我們需要逐一檢查數(shù)組元素,并追蹤當前遞增子序列的長度以及最長的遞增子序列長度。

我們可以采取如下步驟:

  1. 初始化一個變量 max_length 來存儲最長遞增子序列的長度。
  2. 初始化一個變量 current_length 來存儲當前遞增子序列的長度。
  3. 從數(shù)組的第二個元素開始遍歷:
    • 如果當前元素比前一個元素大,則current_length加1。
    • 否則,更新max_lengthcurrent_lengthmax_length中的較大值,并重置current_length為1。
  4. 遍歷結(jié)束后,記得最后更新一次max_length,因為最長的遞增序列可能在數(shù)組末尾。

我們可以使用三種編程語言(Java, C++, Python)實現(xiàn)這一邏輯,具體代碼如下:

import java.util.Scanner;

public class LongestIncreasingSubsequence {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = scanner.nextInt();
        }
        System.out.println(findLengthOfLCIS(nums));
    }

    public static int findLengthOfLCIS(int[] nums) {
        if (nums.length == 0) return 0;
        int max_length = 1, current_length = 1;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] > nums[i - 1]) {
                current_length++;
            } else {
                max_length = Math.max(max_length, current_length);
                current_length = 1;
            }
        }
        return Math.max(max_length, current_length);
    }
}

為什么要分新生代和老年代?

主要是為了提高垃圾回收效率,依據(jù)對象的生命周期特點來進行優(yōu)化。

為什么 Java 新生代被劃分為 S0、S1 和 Eden 區(qū)?

主要是為了提高新生代內(nèi)存的利用率。

你用過 Java 的哪些并發(fā)工具類?

比如:ConcurrentHashMap、AtomicInteger、Semaphore、CyclicBarrier、CountDownLatch、BlockingQueue 等等。

這個問題只要把你知道的一些并發(fā)類名字說出來就行了,然后等面試官選擇其中一個去詢問即可(一般需要結(jié)合簡歷中項目的業(yè)務(wù)場景,所以需要根據(jù)自己的業(yè)務(wù)提前準備)。

具體的并發(fā)類分析可以上【面試鴨】看擴展知識。

Spring 框架有什么好處?

  • [758. Spring 的優(yōu)點]

Spring 容器啟動時如何初始化的?

  • [761. Spring IOC 容器初始化過程?]

你對設(shè)計模式有掌握嗎?

  • [1416. 談?wù)勀懔私獾淖畛R姷膸追N設(shè)計模式,說說他們的應用場景]

為什么單例模式要雙檢?

  • [1126. 單例模式有哪幾種實現(xiàn)?如何保證線程安全?]

堆是一種什么樣的數(shù)據(jù)結(jié)構(gòu)?

堆(Heap)是一種特殊的樹形數(shù)據(jù)結(jié)構(gòu),滿足特定的性質(zhì),通常用于優(yōu)先級隊列、排序算法和其他需要高效最值操作的場景。

插入操作、刪除:時間復雜度:O(log n);構(gòu)建堆:時間復雜度:O(n);獲取堆頂時間復雜度:O(1)

你了解不同的排序算法嗎?

  • [5915. 常見八大排序算法的穩(wěn)定性]

你了解不同的索引嗎?有哪些?

  • [591. MySQL 的索引類型有哪些?]

如何改進慢查詢?

  • [631. 如何在 MySQL 中監(jiān)控和優(yōu)化慢 SQL?]

alt

后端社招一面

如何進行 MySQL 調(diào)優(yōu)?

  • [616. MySQL 中如何進行 SQL 調(diào)優(yōu)?]
  • [631. 如何在 MySQL 中監(jiān)控和優(yōu)化慢 SQL?]

Redis 事務(wù)和 MySQL 事務(wù)有什么區(qū)別?

  • [602. MySQL 是如何實現(xiàn)事務(wù)的?]
  • [641. Redis 支持事務(wù)嗎?如何實現(xiàn)?]

什么是 Spring IOC?

  • [563. 什么是 Spring IOC?]
  • [564. Spring IOC 有什么好處?]

什么是 Java 反射?

  • [432. 你使用過 Java 的反射機制嗎?如何應用反射?]

請簡述不同集合類型(如 Map,HashMap,隊列)的特點和適用場景。

Java 中的集合類主要分為兩大類:Collection 接口和 Map 接口。前者是存儲對象的集合類,后者存儲的是鍵值對(key-value)。

集合類型 特點 適用場景
HashMap 快速存取鍵值對,無序 做本地緩存、字典映射
TreeMap 按鍵排序 范圍查詢、有序統(tǒng)計
ArrayList 快速隨機訪問,插入/刪除效率低 數(shù)據(jù)列表、緩存
LinkedList 插入/刪除效率高,隨機訪問效率低 隊列、棧
HashSet 去重,無序 用戶 ID、去重數(shù)據(jù)
TreeSet 去重,按鍵排序 成績排名、有序集合

算法:如何手寫實現(xiàn)廣度優(yōu)先搜索算法(BFS)?

  • [5389. 圖的廣度優(yōu)先搜索]

你用過 RPC 嗎?如果是你,你應該怎么設(shè)計一個 RPC?

  • [338. 什么是 RPC 框架?它有什么優(yōu)點?]
  • [732.讓你設(shè)計一個 RPC 框架,怎么設(shè)計?]

更多大廠面經(jīng)、詳細題解、其他主流編程語言面試題庫,********************************************

#面經(jīng)#
全部評論

相關(guān)推薦

評論
1
6
分享

創(chuàng)作者周榜

更多
??途W(wǎng)
??推髽I(yè)服務(wù)