Java知識體系之Java基礎

最近看到CSDN上面的一篇博客 面試必備:《Java最多見的200+面試題全解析》, 講解了關於Java體系的一些模塊以及面試中的一些常見問題; 雖然最近沒有要去找工做的需求, 可是鞏固一下這方面的知識仍是頗有必要的; 後面從做者提出的問題進行自個人提問與解答, 有問題歡迎你們指出;

Java基礎部分

一、JDK 和 JRE 的區別 java

個人理解是: 首先JDK包含三部分: 一、程序員編程所須要的基本類庫等; 二、Java字節碼的運行時環境(JRE); 三、用於對JVM進行調優查看等工具, 如 jconsole、jstack等; 而JRE僅僅爲Java代碼的運行提供運行時環境而已;

二、== 和 equals 的區別程序員

== 表示兩個對象的內存地址是否相等, 即: ==兩遍比較的對象是否是同一個類的實例, 若是是同一個實例, 那麼返回true, 若是不是則返回false; 默認java.lang.Object中的equals是基於==來實現的;

而Object子類能夠重寫equals方法, 來實現本身的邏輯上的等於判斷; 即便兩個對象不是同一個對象實例, 裏面有一些數據相同也能夠認爲它們是相同的;

** 三、HashCode 與 Equals是什麼關係?面試

在不使用集合的狀況下, hashCode與equals沒有直接關係; equals能夠單獨進行邏輯判斷, 即便兩個對象邏輯相等, hashCode也能夠不同; 反過來也成立, 即便兩個對象的hashCode相同, equals方法返回值也可能不一樣;

可是在使用如HashMap、HashSet等結構時, 因爲底層是基於桶的算法, 因此必須確保若是做爲Key兩個對象的equals返回true, 它的hashCode必定要相等; 若是不相等, 那麼對於邏輯相同的對象做爲Key去檢索的時候找不到對應的Value;

四、final 在 java 中的做用 算法

final在Java中能夠修飾 類、方法、變量; 

修飾類: 表示該類是一個終態類, 不容許有子類;

修飾方法: 表示該方法不可以被重寫;

修飾變量: 表示該變量指向的對象不可以改變

通常定義不可變常量 如: LOGGER 或者在線程中須要引用外部變量, 則須要添加final修飾符;

五、String 屬於基礎的數據類型嗎 編程

String不屬於基本數據類型, 它是Java中的內置的類, 底層使用char[]實現;

六、java 中操做字符串都有哪些類?它們之間有什麼區別? 安全

Java中操做字符串的類有3個: String、StringBuffer、StringBuilder; String類每次對於字符串的CURD操做都會產生一個新的字符串常量; StringBuffer與StringBuilder不會; 而StringBuffer是線程安全的, StringBuilder是線程非安全的;

七、String 類的經常使用方法都有那些 異步

indexOf, substring, lastIndexOf, chatAt, equals, startWith, endWith, concat, replace, split, toLowerCase等等;

八、抽象類必需要有抽象方法嗎? 工具

這種就是更基礎的了, 抽象類不必定要有抽象方法, 能夠所有是實現; 不過通常沒有抽象方法的抽象類都會把abstract修飾符給去掉

九、BIO、NIO、AIO 有什麼區別 學習

這個問題就比較大了, 涉及到的知識點比較多;

BIO: 通常翻譯爲同步阻塞IO, 一旦調用了同步方法, 那麼必須等待數據到達以後纔會返回; 不然一直等待;

NIO: 通常翻譯爲New IO, 或者 Non-Blocking IO; 其實也是阻塞IO, 增長了Channel、Selector以及事件機制來確保不是全部的IO操做都處於等待, 可以更加合理的利用CPU資源; 具體表現爲Selector監聽各個IO操做的狀況, 若是有IO可讀、可寫以後, 就直接返回; 而後遍歷全部的Channel, 哪一個可讀可寫就調度誰; 該NIO實現依託於Linux IO模型中的多路複用機制

AIO: 就是異步非阻塞IO, 這個暫時還不是很瞭解實現, 明天學習一下;
相關文章
相關標籤/搜索