京东疯狂月薪36k程序员最新Java面试题(常见面试题及答案汇总)
最近金三銀四火熱進行中,很多跳槽的小伙伴您們的福利來了,最新java面試題和答案分享給您們,看到這篇面試題肯定對你有很多幫助,京東,阿里,字節,百度,美團面試題及答案資料。 覺得文章對你有用可以 點贊+轉發+關注。后臺小信封回復【444】即可領取整套面試及答案資料。
Java基礎篇
1. JDK 和 JRE 的區別是什么?
2. Java中有哪些數據類型?
3. == 和 equals 的區別是什么?
4. 兩個對象的 hashCode() 相同,則 equals() 也一定為 true 正確嗎?
5. Java 中 final 關鍵字的作用是什么?
6. String、StringBuffer、StringBuilder 的區別是什么?
7. String str=“donkey” 與 String str=new String(“donkey”) 一樣嗎?
8. 字符串如何反轉?
9. String 類中常用方法都有哪些?
10. 抽象類是什么?
11. 抽象類必須要有抽象方法嗎?
12. 普通類和抽象類的區別是什么?
13. 抽象類能使用 final 修飾嗎?
14. 接口是什么?
15. 接口和抽象類的區別是什么?
16. Java 中 IO 流分幾種?
17. BIO、NIO、AIO 有什么區別?
18. Files 的常用方法都有哪些?
代碼圖
// Files.exists():檢測文件路徑是否存在Path path1 = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test");System.out.println(Files.exists(path1, new LinkOption[]{LinkOption.NOFOLLOW_LINKS})); // true// Files.createFile():創建文件Path path2 = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\a.txt");try {Path newFilw = Files.createFile(path2);} catch (FileAlreadyExistsException e){System.out.println("exists");} catch (IOException e) {System.out.println("other wrong");}// Files.createDirectory():創建文件夾Path path3 = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\newDirectory");try {Path newDirectory = Files.createDirectory(path3);} catch (FileAlreadyExistsException e) {System.out.println("exists");} catch (IOException e){System.out.println("other wrong");}// Files.delete():刪除一個文件或目錄try {Files.delete(path2);} catch (IOException e) {e.printStackTrace();}// Files.copy():復制文件Path source = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\b.txt");Path target = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\newb.txt");try {Files.copy(source,target);} catch (FileAlreadyExistsException e) {System.out.println("targetFile already exists");} catch (IOException e){System.out.println("other wrong");}// Files.move():移動文件Path source1 = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\b.txt");Path target1 = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\newDirectory\\a.txt");try {Files.move(source1,target1);} catch (FileAlreadyExistsException e) {System.out.println("targetFile1 already exists");} catch (IOException e){System.out.println("other wrong");}// Files.size():查看文件個數// Files.read():讀取文件// Files.write():寫入文件Java 容器篇
1. Java 中都有哪些容器?
2. Collection 和 Collections 的區別是什么?
3. List、Set、Map 之間的區別是什么?
4. HashMap 和 Hashtable 的區別是什么?
5. 如何決定使用 HashMap 還是 TreeMap?
6. HashMap 的實現原理是什么?
7. HashSet 的實現原理是什么?
8. ArrayList 和 LinkedList 的區別是什么?
9. 如何實現數組和 List 之間的轉換?
10. ArrayList 和 Vector 的區別是什么?
11. Array 和 ArrayList 的區別是什么?
12. 在 Queue 中 poll() 和 remove() 的區別是什么?
13. 線程安全的集合類有哪些?
14. 迭代器 Iterator 是什么?
15. Iterator 怎么使用?有什么特點?
16. Iterator 和 ListIterator 的區別是什么?
代碼圖
public static void main(String[] args) {// ListArrayList<String> list = new ArrayList<>();list.add("apple");list.add("pear");list.add("banana");Iterator<String> iterator = list.iterator();while (iterator.hasNext()){String s = iterator.next();if ("apple".equals(s)){iterator.remove();}}list.forEach(item -> System.out.println(item));// Map<key,value>Map<String,String> map=new HashMap<>();map.put("pig","豬");map.put("cat","貓");map.put("dog","狗");Iterator<String> iterator1 = map.keySet().iterator();Iterator<String> iterator2 = map.values().iterator();while (iterator1.hasNext()){System.out.println(iterator1.next());}while (iterator2.hasNext()){System.out.println(iterator2.next());}}Java多線程
1. 并行和并發的區別是什么?
2. 線程和進程的區別是什么?
3. 守護線程是什么?
4. 創建線程有哪幾種方式?
5. 說一下 runnable 和 callable 有什么區別?
6. 線程有哪些狀態?
7. sleep() 和 wait() 有什么區別?
8. notify() 和 notifyAll() 有什么區別?
9. run() 和 start() 有什么區別?
10. 創建線程池有哪幾種方式?
11. 線程池都有哪些狀態?
12. 線程池中 submit() 和 execute() 方法有什么區別?
13. java 程序中怎么保證多線程的運行安全?
14. 多線程鎖的升級原理是什么?
15. 什么是死鎖?
16. 怎么防止死鎖?
17. ThreadLocal 是什么?有哪些使用場景?
18. 說一下 synchronized 底層實現原理?
19. synchronized 和 volatile 的區別是什么?
20. synchronized 和 Lock 有什么區別?
21. synchronized 和 ReentrantLock 區別是什么?
22. 說一下 atomic 的原理?
代碼圖
package com.xykj.threadStation; public class Station extends Thread {// 通過構造方法給線程名字賦值public Station(String name) {super(name);// 給線程名字賦值}// 為了保持票數的一致,票數要靜態static int tick = 20;// 創建一個靜態鑰匙static Object ob = "aa";//值是任意的// 重寫run方法,實現買票操作@Overridepublic void run() {while (tick > 0) {synchronized (ob) {// 這個很重要,必須使用一個鎖,// 進去的人會把鑰匙拿在手上,出來后才把鑰匙拿讓出來if (tick > 0) {System.out.println(getName() + "賣出了第" + tick + "張票");tick--;} else {System.out.println("票賣完了");}}try {sleep(1000);//休息一秒} catch (InterruptedException e) {e.printStackTrace();}}} }常見的Java問題
1.什么是Java虛擬機?為什么Java被稱作是“平臺無關的編程語言”?
2.JDK和JRE的區別是什么?
3.”static”關鍵字是什么意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
4.是否可以在static環境中訪問非static變量?
5.Java支持的數據類型有哪些?什么是自動拆裝箱?
6.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?
7.Java中,什么是構造函數?什么是構造函數重載?什么是復制構造函數?
8.Java支持多繼承么?
9.接口和抽象類的區別是什么?
10.什么是值傳遞和引用傳遞?
代碼圖
package com.thread.demo.demo3;public class MainClass {/*** 龜兔賽跑:2000米*/public static void main(String[] args) {// 實例化烏龜和兔子Tortoise tortoise = new Tortoise();Rabbit rabbit = new Rabbit();// 回調方法的使用,誰先調用calltoback方法,另一個就不跑了LetOneStop letOneStop1 = new LetOneStop(tortoise);// 讓兔子的回調方法里面存在烏龜對象的值,可以把烏龜stoprabbit.calltoback = letOneStop1;LetOneStop letOneStop2 = new LetOneStop(rabbit);// 讓烏龜的回調方法里面存在兔子對象的值,可以把兔子stoptortoise.calltoback = letOneStop2;// 開始跑tortoise.start();rabbit.start();} }Java線程
11.進程和線程的區別是什么?
12.創建線程有幾種不同的方式?你喜歡哪一種?為什么?
13.概括的解釋下線程的幾種可用狀態。
14.同步方法和同步代碼塊的區別是什么?
15.在監視器(Monitor)內部,是如何做線程同步的?程序應該做哪種級別的同步?
16.什么是死鎖(deadlock)?
17.如何確保N個線程可以訪問N個資源同時又不導致死鎖?
// 創建當前類的對象,并且調用run()方法 public class ExtendsThread extends Thread {public static void main(String[] args) {ExtendsThread t = new ExtendsThread();t.start();}@Overridepublic void run() {for (int i = 0; i < 1000; i++) {System.out.println("你是最棒的你知道么?");}} }Java集合類
18.Java集合類框架的基本接口有哪些?
19.為什么集合類沒有實現Cloneable和Serializable接口?
20.什么是迭代器(Iterator)?
21.Iterator和ListIterator的區別是什么?
22.快速失敗(fail-fast)和安全失敗(fail-safe)的區別是什么?
23.Java中的HashMap的工作原理是什么?
24.hashCode()和equals()方法的重要性體現在什么地方?
25.HashMap和Hashtable有什么區別?
26.數組(Array)和列表(ArrayList)有什么區別?什么時候應該使用Array而不是ArrayList?
27.ArrayList和LinkedList有什么區別?
28.Comparable和Comparator接口是干什么的?列出它們的區別。
29.什么是Java優先級隊列(Priority Queue)?
30.你了解大O符號(big-O notation)么?你能給出不同數據結構的例子么?
31.如何權衡是使用無序的數組還是有序的數組?
32.Java集合類框架的最佳實踐有哪些?
33.Enumeration接口和Iterator接口的區別有哪些?
34.HashSet和TreeSet有什么區別?
垃圾收集器(Garbage Collectors)
35.Java中垃圾回收有什么目的?什么時候進行垃圾回收?
36.System.gc()和Runtime.gc()會做什么事情?
37.finalize()方法什么時候被調用?析構函數(finalization)的目的是什么?
38.如果對象的引用被置為null,垃圾收集器是否會立即釋放對象占用的內存?
39.Java堆的結構是什么樣子的?什么是堆中的永久代(Perm Gen space)?
40.串行(serial)收集器和吞吐量(throughput)收集器的區別是什么?
41.在Java中,對象什么時候可以被垃圾回收?
42.JVM的永久代中會發生垃圾回收么?
異常處理
43.Java中的兩種異常類型是什么?他們有什么區別?
44.Java中Exception和Error有什么區別?
45.throw和throws有什么區別?
46.異常處理的時候,finally代碼塊的重要性是什么?
46.異常處理完成以后,Exception對象會發生什么變化?
47.finally代碼塊和finalize()方法有什么區別?
Java小應用程序(Applet)
48.什么是Applet?
49.解釋一下Applet的生命周期
50.當applet被載入的時候會發生什么?
51.Applet和普通的Java應用程序有什么區別?
52.Java applet有哪些限制條件?
53.什么是不受信任的applet?
54.從網絡上加載的applet和從本地文件系統加載的applet有什么區別?
55.applet類加載器是什么?它會做哪些工作?
56.applet安全管理器是什么?它會做哪些工作?
Swing
57.彈出式選擇菜單(Choice)和列表(List)有什么區別
58.什么是布局管理器?
59.滾動條(Scrollbar)和滾動面板(JScrollPane)有什么區別?
60.哪些Swing的方法是線程安全的?
61.說出三種支持重繪(painting)的組件。
62.什么是裁剪(clipping)?
63.MenuItem和CheckboxMenuItem的區別是什么?
64.邊緣布局(BorderLayout)里面的元素是如何布局的?
65.網格包布局(GridBagLayout)里面的元素是如何布局的?
66.Window和Frame有什么區別?
67.裁剪(clipping)和重繪(repainting)有什么聯系?
68.事件監聽器接口(event-listener interface)和事件適配器(event-adapter)有什么關系?
69.GUI組件如何來處理它自己的事件?
70.Java的布局管理器比傳統的窗口系統有哪些優勢?
71.Java的Swing組件使用了哪種設計模式?
JDBC
72.什么是JDBC?
73.解釋下驅動(Driver)在JDBC中的角色。
74.Class.forName()方法有什么作用?
75.PreparedStatement比Statement有什么優勢?
76.什么時候使用CallableStatement?用來準備CallableStatement的方法是什么?
77.數據庫連接池是什么意思?
78.什么是RMI?
79.RMI體系結構的基本原則是什么?
80.RMI體系結構分哪幾層?
81.RMI中的遠程接口(Remote Interface)扮演了什么樣的角色?
82.java.rmi.Naming類扮演了什么樣的角色?
83.RMI的綁定(Binding)是什么意思?
84.Naming類的bind()和rebind()方法有什么區別?
85.讓RMI程序能正確運行有哪些步驟?
86.RMI的stub扮演了什么樣的角色?
87.什么是分布式垃圾回收(DGC)?它是如何工作的?
88.RMI中使用RMI安全管理器(RMISecurityManager)的目的是什么?
89.解釋下Marshalling和demarshalling。
90.解釋下Serialization和Deserialization。
Servlet
91.什么是Servlet?
92.說一下Servlet的體系結構。
93.Applet和Servlet有什么區別?
94.GenericServlet和HttpServlet有什么區別?
95.解釋下Servlet的生命周期。
96.doGet()方法和doPost()方法有什么區別?
97.什么是Web應用程序?
98.什么是服務端包含(Server Side Include)?
99.什么是Servlet鏈(Servlet Chaining)?
100.如何知道是哪一個客戶端的機器正在請求你的Servlet?
101.HTTP響應的結構是怎么樣的?
102.什么是cookie?session和cookie有什么區別?
103.瀏覽器和Servlet通信使用的是什么協議?
104.什么是HTTP隧道?
105.sendRedirect()和forward()方法有什么區別?
JSP
107.什么是JSP頁面?
108.JSP請求是如何被處理的?
109.JSP有什么優點?
110.什么是JSP指令(Directive)?JSP中有哪些不同類型的指令?
111.什么是JSP動作(JSP action)?
112.什么是Scriptlets?
113.聲明(Decalaration)在哪里?
114.什么是表達式(Expression)?
115.隱含對象是什么意思?有哪些隱含對象?
其他
ThreadLocal(線程變量副本)
Synchronized實現內存共享,ThreadLocal為每個線程維護一個本地變量。
采用空間換時間,它用于線程間的數據隔離,為每一個使用該變量的線程提供一個副本,每個線程都可以獨立地改變自己的副本,而不會和其他線程的副本沖突。
ThreadLocal類中維護一個Map,用于存儲每一個線程的變量副本,Map中元素的鍵為線程對象,而值為對應線程的變量副本。
ThreadLocal在Spring中發揮著巨大的作用,在管理Request作用域中的Bean、事務管理、任務調度、AOP等模塊都出現了它的身影。
Spring中絕大部分Bean都可以聲明成Singleton作用域,采用ThreadLocal進行封裝,因此有狀態的Bean就能夠以singleton的方式在多線程中正常工作了。
覺得文章對你有用可以 點贊+轉發+關注。后臺小信封回復【444】即可領取整套面試及答案資料。
總結
以上是生活随笔為你收集整理的京东疯狂月薪36k程序员最新Java面试题(常见面试题及答案汇总)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红队内网靶场
- 下一篇: Javaweb中上传图片,获取相对路径,