菜鳥刷面試題(一、Java基礎篇)


目錄:

  • JDK 和 JRE 有什么區別?
  • == 和 equals 的區別是什么?
  • 兩個對象的 hashCode()相同,則 equals()也一定為 true,對嗎?
  • final 在 java 中有什么作用?
  • java 中的 Math.round(-1.5) 等於多少?
  • String 屬於基礎的數據類型嗎?
  • java 中操作字符串都有哪些類?它們之間有什么區別?
  • String str="i"與 String str=new String(“i”)一樣嗎?
  • 如何將字符串反轉?
  • String 類的常用方法都有那些?
  • 抽象類必須要有抽象方法嗎?
  • 普通類和抽象類有哪些區別?
  • 抽象類能使用 final 修飾嗎?
  • 接口和抽象類有什么區別?
  • java 中 IO 流分為幾種?
  • BIO、NIO、AIO 有什么區別?
  • Files的常用方法都有哪些?

純自己的見解+網上的資料的整理,如有問題請各位大佬指出 (ಥ_ಥ) 

JDK 和 JRE 有什么區別?

JDK是java development kit,java開發工具包,JDK中包含JRE。

JRE是java runtime environment,java運行時環境。

JDK面向開發人員使用,JRE面向Java程序使用;如果你只需要運行java程序的話,按照JRE就可以了,如果你還要編寫java程序,就需要安裝JDK了。

== 和 equals 的區別是什么?

==判斷兩個變量或實例內存地址是否相等,equals判斷兩個變量或實例的值是否相等。

但equals本質是一個方法,最底層是在Object定義的,向Integer、Long這種包裝類重寫了邏輯,所以會相等;

若沒有重寫的話,調的是Object的equals。

public boolean equals(Object obj) {
    return (this == obj);
}

兩個對象的 hashCode()相同,則 equals()也一定為 true,對嗎?

不一定,equals是對象的一個方法,如果內部實現不一致是不會相同的。

final 在 java 中有什么作用?

對於class來說,定義成final的class是不能被繼承的

對於方法來說,定義成final的方法也是不能被重寫的

對於屬性來說,定義成final的屬性是常量,不能被修改

java 中的 Math.round(-1.5) 等於多少?

等於-1,round就是四舍五入,將原值加上0.5后再向下取整就可以了。

String 屬於基礎的數據類型嗎?

不屬於,String是引用類型。

java 中操作字符串都有哪些類?它們之間有什么區別?

常用的有String、StringBuffer、StringBuilder

String被final修飾,所有的方法返回new String,即對String修改不會影響到原對象

String可以說是Stringbuffer和StringBuilder的基類,后兩者是對String的增強;但StringBuffer對於StringBuilder來說更適用於並發的場景,它在方法上都加了鎖來保證線程安全。

String str="i"與 String str=new String(“i”)一樣嗎?

不一樣,我們用==比較,得出的結果為false;

首先str = "i"表示將字符串i的內存地址給到str,而new String("i")是將一個對象的內存地址給到str。

然后我們通過實驗來驗證:

String str = "i";
String str2 = "i";
String str3 = new String("i");
System.err.println(str==str2);
System.err.println(str==str3);
System.err.println(str2==str3);

結果為:true、false、false

如何將字符串反轉?

通過StringBuilder或StringBuffer的reverse()方法。

String 類的常用方法都有那些?

valueOf()

concat()

split()

substring()

equals()

indexOf()

replace()

...

抽象類必須要有抽象方法嗎?

不是必須要有抽象方法,抽象類其實和普通的類本質上沒有區別,只是可以擁有未實現的抽象方法,來讓繼承自己的類實現。

它對於普通的類來說不能實例化,即不能構造該類的對象。

普通類和抽象類有哪些區別?

類定義上:普通類class className,抽象類abstract class className

方法實現上:普通類的方法都必須要有實現,而抽象類可以只定義不實現

實例化:普通類能夠直接實例化,而抽象類不能實例化

方法定義上:普通類可以擁有private方法,而抽象類的抽象方法不能是private,因為抽象方法需要子類實現,若是private的話子類無法實現該方法。

抽象類能使用 final 修飾嗎?

不能;因為被final修飾的類是不能被繼承的,而抽象類中可能包含抽象方法,抽象方法是必須要被重寫的,所以不能用final修飾抽象類。

接口和抽象類有什么區別?

方法實現:接口只能聲明方法,抽象類還可以實現方法。

屬性和方法:接口的屬性都是public static final的,抽象類可以自己定義;接口的方法都是public abstract的,抽象類也是自己定義的。

承接關系:抽象類是繼承,接口是實現

java 中 IO 流分為幾種?

按照數據的流向分為:input(輸入流用於讀數據)、output(輸出流用於寫數據)。

按照流數據的格式分為:字符流、字節流。

常用的有InputStream、OutputStream、Reader、Writer,java中其它各種各樣的流均是他們派生出來的。

BIO、NIO、AIO 有什么區別?

BIO:Blick IO,同步阻塞式IO;也就是傳統的IO,特點是使用簡單,缺點是處理並發能力差;它是一個連接一個線程。(關鍵字:傳統的、並發能力差

NIO:Non IO,同步非阻塞IO;是傳統IO的優化IO,客戶端和服務端通過channel通訊,實現類多路復用;它是一個請求一個線程。(關鍵字:以channel通訊、多路復用IO

AIO:Asynchronous IO,異步非阻塞,NIO的升級;實現了異步非阻塞IO,基於事件和回調機制;它是一個有效的請求一個線程。(關鍵字:異步非阻塞IO、基於事件和回調機制

參考:https://blog.csdn.net/zhcswlp0625/article/details/93461137

Files的常用方法都有哪些?

1、Files.exists() 檢測文件路徑是否存在

2、Files.createFile() 創建文件

3、Files.createDirectory() 創建文件夾

4、Files.delete() 刪除文件或者目錄

5、Files.copy() 復制文件

6、Files.move() 移動文件

7、Files.size() 查看文件個數

8、Files.read() 讀取文件

9、Files.write() 寫入文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM