首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 面試核心題目精解:equals、適配器模式、抽象類與接口、多線程、網絡編程

     編輯:Java 綜合教學

Java 面試核心題目精解

在 Java 面試中,有幾個經典題目幾乎是必考項目。本文將針對 equals 與 == 的區別、適配器模式、抽象類與接口的差異、多線程安全與死鎖,以及 UDP/TCP 網絡編程流程 進行系統性梳理,幫助你快速掌握核心考點。

1. equals() 與 == 的根本區別

== 運算符:
• 基本類型:比較「值」是否相等。
• 引用類型:比較「引用地址」(即是否指向同一個對象)。

equals() 方法:
• 預設行為(未重寫時):同 ==,比較引用地址。
• 重寫後(如 String、Integer 等包裝類):比較「內容/值」是否相等。
口訣:基本類型用 ==,引用類型看有無重寫 equals。

2. Java 適配器模式

適配器模式將一個類的接口轉換成客戶端期望的另一個接口,使原本不兼容的類能夠協同工作。
核心做法:定義一個實現目標接口的抽象類 Adapter,在其中持有被適配對象的引用,並將接口方法委託給該對象;具體適配器繼承抽象類,只需實現/覆寫需要的方法即可。這樣既符合「開閉原則」,又避免了繼承帶來的強耦合。

3. 抽象類 vs 接口

維度抽象類接口
關鍵字abstract classinterface
成員變量任意修飾符隱含 public static final(常量)
方法可有抽象/具體/靜態/私有方法隱含 public abstract(Java 8+ 可有 default/static/private)
構造器有(供子類調用)無
繼承關係單繼承多實現、多繼承
設計理念is-a(屬於某體系,如「貓是貓科動物」)like-a(具備某能力,如「實現可跑、可吃接口」)

選型建議:需共享代碼/狀態用抽象類;需定義行為契約、支持多實現用接口。

4. 多線程:線程安全與死鎖

線程安全產生條件(三要素)

  1. 多線程並發
  2. 存在共享數據
  3. 對共享數據進行非原子操作(多條語句)

兩類典型場景

  • 同類線程:多窗口賣票,票為共享資源。
  • 異類線程:一線程讀取用戶信息,另一線程修改用戶對象。

解決方案

對共享資源的操作加「同一把鎖」—— synchronized(lock) 或 ReentrantLock,確保互斥訪問。

死鎖

定義:兩個或以上線程互相持有對方需要的鎖,導致永久等待。
經典案例:線程 1 持有鎖 A 等待鎖 B;線程 2 持有鎖 B 等待鎖 A。
預防策略:
• 固定加鎖順序(避免交叉等待)
• 使用 tryLock(timeout) 避免無限阻塞
• 減少鎖範圍、避免嵌套鎖

5. Java 網絡編程流程速查

UDP 編程(無連接、不可靠、速度快)

發送端:
1. DatagramSocket socket = new DatagramSocket();
2. 封裝數據包:new DatagramPacket(data, data.length, InetAddress.getByName(ip), port);
3. socket.send(packet);
4. socket.close();

接收端:
1. DatagramSocket socket = new DatagramSocket(port);
2. 準備空包:new DatagramPacket(buf, buf.length);
3. socket.receive(packet);(阻塞)
4. 解析:packet.getAddress()、new String(packet.getData(), 0, packet.getLength())
5. socket.close();

TCP 編程(面向連接、可靠、流式)

客戶端:
1. Socket socket = new Socket(ip, port);
2. OutputStream out = socket.getOutputStream(); 寫數據
3. socket.close();

服務端:
1. ServerSocket server = new ServerSocket(port);
2. Socket client = server.accept();(阻塞等待連接)
3. InputStream in = client.getInputStream(); 讀數據
4. client.close(); server.close();

掌握以上五大塊核心知識,配合實際代碼練習,Java 面試中這類基礎題將不在話下。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved