本文是面試題目系列的第一篇,題目主要來自 GitChat 上一個課程,在此特別記錄自身想的答案和在網上查詢的結果,分享出來,你們共同窗習。若是有不對的地方,歡迎你們指出。html
JDK:Java Development Kit,java開發包,其包括JRE和一些Java工具,如javac,javap等java
開發環境(編譯,調試,分析工具)和運行環境面試
JRE:Java Runtime environment,Java運行時環境,其包括JVM和Java運行過程當中所須要的一些核心類庫.如lang,util等經常使用的...算法
--數組
對於基本類型來講,== 是用來比較二者的字面值是否相同的,基本類型沒有equals方法安全
對於引用來講,== 是用來比較二者的引用是否相同,equals是用來比較引用指向的對象是否相同的異步
自定義對象若是須要比較二者是否相同,須要開發者本身手動重寫equals()方法,通常重寫這個方法也會帶着重寫hashcode()方法函數
不對,hashcode()只是將對象按照必定的Hash算法生成對應的16進制字符串,由於有長度的限制,所以一定會出現重複的狀況,但他們的equals()此時並不必定相同.工具
final是Java中的一個關鍵字.性能
public void testMath(){ log.info("-1.8:,{}",Math.round(-1.8)); log.info("-1.5:,{}",Math.round(-1.5)); log.info("-1.2:,{}",Math.round(-1.2)); log.info("1.2:,{}",Math.round(1.2)); log.info("1.5:,{}",Math.round(1.5)); log.info("1.8:,{}",Math.round(1.8)); }
// 運行結果 2019-04-04 10:59:32.599 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : -1.8:,-2 2019-04-04 10:59:32.600 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : -1.5:,-1 2019-04-04 10:59:32.600 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : -1.2:,-1 2019-04-04 10:59:32.600 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : 1.2:,1 2019-04-04 10:59:32.600 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : 1.5:,2 2019-04-04 10:59:32.601 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : 1.8:,2
經過結果能夠看出除了-1.5都像是四捨五入的結果,但經過分析源碼能夠得出
其結果是數據+0.5再向下取整便可
String屬於Java核心類庫的對象
/** * 內部由不可變的char數組來實現,這也解釋了爲何String是不可變的類型 */ public final class String implements java.io.Serializable, Comparable<String>, CharSequence { private final char value[];
所以在性能比較上:String > StringBuilder > StringBuffer
但若是想要用可變類型,能夠直接使用StringBuffer,這個是線程安全的,且性能和StringBuilder相比,並無差不少.
不同,String str="i",是聲明一個引用直接指向字符串常量池,而String str=new String(「i」),會生成一個堆對象,引用指向該對象,該對象再指向字符串常量池.
StringBuilder 和 StringBuffer 中封裝好了對應的反轉操做,能夠直接使用
根據下面的代碼實例,代表應該是能夠的
public abstract class AbstractDemoClass { public void test(){ System.out.println("hello,world"); } }
抽象類不能夠被實例化
普通類不能包含抽象方法
不能夠,抽象類必需要有子類來繼承它,實現其中的抽象方法,才能夠實例化,若是用final來修飾的話,該類就沒法被繼承,那麼這個抽象類就沒有用處了.
接口中的方法所有默認爲pubic的,抽象類中能夠自定義
抽象類能夠有構造函數,接口不能有構造函數
分爲字節流和字符流,其中每一個又細分爲輸入和輸出,所以一共有四種流,分爲爲InputStream,OutputStream,Reader,Writer.
在處理字節流和字符流之間的轉換問題時,注意編碼的問題.
同步阻塞模型,A調用B,A須要收到B的返回結果才能夠繼續執行,B去當即執行
非阻塞IO,A調用B,A不用收到結果就能夠繼續執行
異步非阻塞IO,A調用B,B返回給A保證會執行,而後A繼續幹其餘事,當B幹完了後通知A,再讓A來處理數據
操做基於事件和回調機制
對應collection的Collections類,是對File的操做類,封裝了一些經常使用方法:
- Files. exists():檢測文件路徑是否存在。
- Files. createFile():建立文件。 [ createFile():建立文件。]
- Files. createDirectory():建立文件夾。
- Files. delete():刪除一個文件或目錄。
- Files. copy():複製文件。
- Files. move():移動文件。
- Files. size():查看文件個數。
- Files. read():讀取文件。
- Files. write():寫入文件。