1 JAVA基礎題目
1.1 58同城的java字符串常量池
1.1.1 面試題目code
public class StringPool58Demo {
public static void main(String[] args) {
String str1 = new StringBuilder("58").append("tongcheng").toString();
System.out.println(str1);
System.out.println(str1.intern());
System.out.println(str1 == str1.intern());
System.out.println("------------");
String str2 = new StringBuilder("ja").append("va").toString();
System.out.println(str2);
System.out.println(str2.intern());
System.out.println(str2 == str2.intern());
}
}
1.1.2 深入分析
intern()方法 源碼+解釋
image-20210122164721845.png
image-20210121164012084.png
why
按照代碼結果,java字符串答案為false 必然是兩個不同的java,那另外一個java字符串如何加載進來的?
有一個初始化的java字符串(JDK出娘胎自帶的), 在加載sun.misc.Version這個類的時候進入常量池
OpenJDK8底層源碼說明
System代碼解析
System-initializeSystemClass-Version
image-20210122165009857.png
image-20210122165039675.png
類加載器和rt.jar
根加載器提前部署加載rt.jar
OpenJDK8源碼:
http://openjdk.java.net/openjdk8\jdk\srclshare\classes\sun\misc
image-20210121165630821.png
總結
image-20210121165737495.png
1.1.3 考查點
intern()方法,判斷true/false?
《深入理解java虛擬機》書原題 是否讀過經典JVM書籍
1.2 字節跳動兩數求和
1.2.1 面試題目code
力扣第一題:兩數之和
https://leetcode-cn.com/problems/two-sum/
image-20210121170457405.png
1.2.2 深入分析
暴力法 哈希(更優解法)
通過雙重循環遍歷數組中所有元素的兩兩組合,當出現符合的和時返回兩個元素的下標
1.2.3 考查點
你都想來大廠了,算法居然從來沒有刷過?呵呵 機會偏愛有準備有實力的頭腦,不是白說的.....
字節跳動手寫LRUs算法