天天看點

Java面試題,2020年春招親身經曆,希望能幫助到你!

集合系列

hashmap和hashtable差別?

(1)Hashmap鍵值對可以為空,Hashtable鍵值對都不能為空。

(2)HashMap是線程不安全的,Hashtable是線程安全的。

(3)HashMap繼承自AbstractMap類,Hashtable繼承自Dictionary類。

List和set、map的差別:

(1)List是有序可重複的,set是無序不可重複的。

(2)List允許插入多個null值,set隻允許一個null值。

(3)Map不是collection的子接口或者實作類。Map是一個接口,Map 的 每個 Entry 都持有兩個對象。

什麼場景下使用list,set,map呢?

(1)如果你經常會使用索引來對容器中的元素進行通路,那麼 List 是你的正确的選擇。

(2)如果你想保證插入元素的唯一性,也就是你不想有重複值的出現,那麼可以選擇一個 Set 的實作類。

(3)如果你以鍵和值的形式進行資料存儲那麼 Map 是你正确的選擇.

多線程系列

如何在Java中實作線程?

1.繼承Thread類,重寫run方法(其實Thread類本身也實作了Runnable接口)

2.實作Runnable接口,重寫run方法

3.實作Callable接口,重寫call方法(有傳回值)

4.使用線程池(有傳回值)

Thread類中的start()和run()方法有什麼差別?

隻有調用了start()方法,才會表現出多線程的特性,不同線程的run()方法裡面的代碼交替執行。如果隻是調用run()方法,那麼代碼還是同步執行的,必須等待一個線程的run()方法裡面的代碼全部執行完畢之後,另外一個線程才可以執行其run()方法裡面的代碼。則沒實作多線程。

Java多線程中調用wait() 和 sleep()方法有什麼不同?

1.sleep()來自Thread類,wait()來自Object類,

2.調用 sleep()方法,線程不會釋放對象鎖。而調用 wait() 方法線程會釋放對象鎖;

3.sleep()睡眠後不出讓系統資源,wait()讓其他線程可以占用 CPU;

JAVA基礎

equals與==的差別?

==操作符是用來比較兩個變量的值是否相等,即就是比較變量在記憶體中的存儲位址是否相同,equals()方法是String類從Object類中繼承的,被用來檢測兩個對象的内容是否相同。

重載和重寫(覆寫)的差別?

(1)重載的方法名稱相同、參數的類型或個數不同,重寫則全部相同。

(2)重載對權限沒有要求、被 重寫的方法不能擁有更嚴格的權限。

(3)重載發生在一個類當中,重寫發生在繼承類當中。

抽象類(abstract)和接口的差別?

抽象類要被子類繼承,接口要被類實作。

抽象類中可以作方法聲明,也可以做方法實作,接口隻能做方法聲明。

抽象類可以有具體的方法和屬性,接口隻能有抽象方法和不可變常量。

抽象類和接口都是用來抽象具體對象的,但是接口的抽象級别最高。

什麼是線程安全?

如果每次多線程運作結果和單線程運作的結果是一樣的,而且其他的變量的值也和預期的是一樣的,就是線程安全的。

Final關鍵字的作用:

(1)修飾類:被final關鍵字修飾的類,不能被繼承沒有子類。

(2)修飾方法:一個類中的方法一旦被final關鍵字修飾,則該方法就不能被子類重寫,隻能被繼承。

(3)修飾變量:如果修飾的基本資料類型,一旦被初始化,其數值是不能再被改變的。

Ajax怎麼設定同步異步

async:true(異步) false (同步)

發送ajax請求的步驟

1.建立異步對象(XMLHttpRequest)

2.準備發送:open(參數一,參數二,參數三)1.請求方式。2.請求位址3.同步異步

3.執行發送動作:send()

4.指定回調函數:onreadystatechange()

servlet生命周期:

被建立(init)

提供服務(service)

被銷毀(destroy)

怎麼解決tomcat端口沖突

–1.dos視窗中輸入:netstat -ano | findstr 8080

找到占用的端口,然後kill

–2.kill占用的端口

taskkill -pid (程序pid) -f

jsp和servlet的差別

1、JSP在本質上就是SERVLET,但是兩者的建立方式不一樣.

2、Servlet完全是JAVA程式代碼構成,擅長于流程控制和事務處理,通過Servlet來生成動态網頁很不直覺.

3、JSP由HTML代碼和JSP标簽構成,可以友善地編寫動态網頁.

JDBC的操作步驟:

1.加載驅動:classforName()、driverManager.registerDriver()

2.擷取連接配接:DriverManager.getConnection();

3.建立sql語句connection.preparedStatement

4.執行sql語句 excute

5.釋放資源

說一下synchronized關鍵字中對象鎖和類鎖的差別。

答:

對象鎖就是非靜态方法,類鎖就算靜态方法。

(1)非靜态方法: 給對象加鎖(可以了解為給這個對象的記憶體上鎖,注意 隻是這塊記憶體,其他同類對象都會有各自的記憶體鎖),這時候在其他一個以上線程中執行該對象的這個同步方法(注意:是該對象)就會産生互斥。

(2)靜态方法: 相當于在類上加鎖(*.class 位于代碼區,靜态方法位于靜态區域,這個類産生的對象公用這個靜态方法,是以這塊記憶體,N個對象來競争), 這時候,隻要是這個類産生的對象,在調用這個靜态方法時都會産生互斥。