欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

經(jīng)典的Java面試題及回答集錦(基礎(chǔ)篇)

 更新時(shí)間:2018年03月16日 14:15:25   作者:LiQiyaoo  
本文給大家收藏整理了java面試題及回答,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧

1、問題:如果A和B對(duì)象循環(huán)引用,是否可以被GC?

回答:可以,現(xiàn)在的虛擬機(jī)基本都是通過可達(dá)性分析算法來判斷對(duì)象是否存活的,而不是通過簡(jiǎn)單的引用計(jì)數(shù)法來判斷對(duì)象是否存活。可達(dá)性分析算法使用一系列的“GC Roots”對(duì)象(虛擬機(jī)棧中引用的對(duì)象、靜態(tài)屬性引用對(duì)象)作為起始點(diǎn),這些節(jié)點(diǎn)向下搜索的路徑稱為引用鏈,當(dāng)一個(gè)對(duì)象到GC Roots沒有任何引用鏈連接,則證明對(duì)象是不可用的。

2、Java中的內(nèi)存溢出是如何造成的?

OutOfMemoryError:

(1)PerGern Space 程序中使用了大量jar或class,使Java虛擬機(jī)裝載類空間不夠。

解決方案:調(diào)參XX:PermSize 和 XX:MaxPermSize 、減少jar包,減少類的重復(fù)加載

(2)Java Heap Space Java虛擬機(jī)創(chuàng)建了太多的對(duì)象。

解決方案:調(diào)參Xms(初始堆大小)Xmx(最大堆大?。?、檢查死循環(huán)或不必要?jiǎng)?chuàng)建的重復(fù)對(duì)象

(3)unable to create new native Thread  JVM占用了太多內(nèi)存空間,而在JVM中創(chuàng)建線程還要再操作系統(tǒng)中也創(chuàng)建線程。

解決方案:調(diào)整JVM中線程大小。

3、String s = “123”;這個(gè)語句有幾個(gè)對(duì)象產(chǎn)生?

若字符串池中沒有"123",則產(chǎn)生一個(gè)對(duì)象,并且放入常量池中,若有"123",則產(chǎn)生0個(gè)對(duì)象。

若是String s = new String("123"),若常量池中沒有,則在常量池中創(chuàng)建一個(gè),然后在堆內(nèi)存中創(chuàng)建一個(gè)。

4、Error、Exception和RuntimeException的區(qū)別,作用又是什么?

Error和Exception都是Throwable的子類,RuntimeException是Exception的子類。

Error用于指示合理應(yīng)用程序不應(yīng)該試圖捕獲的錯(cuò)誤。

Exception指出合理的應(yīng)用程序需要捕獲的條件。分為已檢查異常和未檢查異常。

RuntimeException是未檢查異常,不需要try catch或在方法上聲明,主要子類:NullPointer、Arithmatic、ArrayIndexOutOfBounds、ClassCast。

5、Reader和InputStream區(qū)別?

都是抽象類,Reader用于讀取字符流(char或String),InputStream用于讀取字節(jié)流(byte數(shù)組)。

6、hashCode的作用?

hashCode主要是用于快速查找,如HashMap結(jié)構(gòu)中,用于定位鍵值對(duì)的位置。兩個(gè)對(duì)象相同,則hashCode一定相同,而hashCode相同的對(duì)象則不一定相同,就相當(dāng)于放在同一個(gè)框里。

7、HashMap和Hashtable的區(qū)別?

線程安全性、null值的key、效率、HashMap(Iterator快速失敗迭代器)、Hashtable(enumerator迭代器)、時(shí)間推移HashMap元素位置會(huì)變

8、HashMap中是否任何對(duì)象都可以做為key,用戶自定義對(duì)象做為key有沒有什么要求?

可以、但是要key對(duì)象必須是不可變的對(duì)象,不然在Entry被插入Map中后,再改變key值,會(huì)導(dǎo)致當(dāng)前key值與hash值不符合,即與數(shù)組索引不符,將無法被查找到。

9、 啟動(dòng)一個(gè)線程是用run()還是start()?

多線程有幾種實(shí)現(xiàn) 同步和并發(fā)是如何解決的 什么叫守護(hù)線程,用什么方法實(shí)現(xiàn)守護(hù)線程(Thread.setDeamon()的含義) 如何停止一個(gè)線程? 解釋是一下什么是線程安全?舉例說明一個(gè)線程不安全的例子。解釋Synchronized關(guān)鍵字的作用。 當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?

(1)start 

(2)繼承Thread類、實(shí)現(xiàn)Runnable接口、使用ExectuorService、Future、Callable實(shí)現(xiàn)由返回值的線程。

(3)同步方法、同步代碼塊、鎖

(4)Damon線程、為其他線程的運(yùn)行提供服務(wù),如GC,Thread。setDeamon(true)。

(5)Thread.stop()不推薦(不會(huì)正確釋放資源)、使用中斷來停止線程。

(6)當(dāng)多個(gè)線程訪問一個(gè)對(duì)象時(shí),如果不用考慮這些線程在運(yùn)行時(shí)環(huán)境下的調(diào)度和交替執(zhí)行,也不需要進(jìn)行額外的同步,或者在調(diào)用方進(jìn)行任何其他的協(xié)調(diào)操作,調(diào)用這個(gè)對(duì)象的行為都可以獲得正確的結(jié)果,那這個(gè)對(duì)象是線程安全的。

(7)車票被重復(fù)賣出。

(8)同步關(guān)鍵詞。修飾靜態(tài)方法,則以類作為鎖對(duì)象,同時(shí)只能有一個(gè)線程訪問此類同步的靜態(tài)方法;修飾普通方法,則以此對(duì)象作為鎖對(duì)象,同時(shí)只能有一個(gè)線程訪問此類同步的普通方法;也可以自定義鎖對(duì)象同步代碼塊。

(9)synchronized方法不可以進(jìn)入,非synchronized可以進(jìn)入。

10、了解過哪些JDK8的新特性,舉例描述下相應(yīng)的特性?

(1)lambda表達(dá)式:函數(shù)式編程,方法引用

(2)Stream API

(3)接口的默認(rèn)方法

(4)日期時(shí)間API的改進(jìn),新增DateTimeFormatter方法

11、對(duì)sql進(jìn)行優(yōu)化的原則有哪些?

詳情見我數(shù)據(jù)庫(kù)分類的的一篇博客

12、Servlet的生命周期,Serlvet與CGI的區(qū)別?

生命周期:類加載、實(shí)例化(構(gòu)造對(duì)象),初始化(init),服務(wù)(service),銷毀(destroy)。

CGI:common gateway interface,通用網(wǎng)關(guān)接口,Perl語言編寫,每個(gè)請(qǐng)求創(chuàng)建一個(gè)CGI對(duì)象。

Servlet:只需要實(shí)例化、初始化一次,多線程。

13、StringBuffer有什么優(yōu)勢(shì)?為什么快?

因?yàn)镾tringBuffer不需要重復(fù)創(chuàng)建String對(duì)象,但是其實(shí)也不是這樣。

比如String s = "a" + "b" + "c"操作編譯器會(huì)優(yōu)化,變成String s = "abc"

String s = s1 + s2 + s3編譯器也會(huì)優(yōu)化,變成StringBuilder的append操作,但是如果不是一次性+操作拼接完,就會(huì)反復(fù)生成String對(duì)象與StringBuilder對(duì)象,效率會(huì)很低。

14、加密解密算法了解嗎?

摘要算法:MD5(128位)、SHA1(160位),是一種不可逆的過程,無論多大的數(shù)據(jù),經(jīng)過摘要算法后都生成相同長(zhǎng)度的數(shù)據(jù)。只能通過字典進(jìn)行破解。

對(duì)稱加密算法:DES、AES,加密解密時(shí)使用相同的秘鑰。

非對(duì)稱加密算法:RSA,加密解密時(shí)使用不同的秘鑰,對(duì)接支付寶使用RSA2。

15、解決高并發(fā)與高負(fù)載?

(1)靜態(tài)頁(yè)面消耗最小,盡可能的HTML靜態(tài)化,采用信息發(fā)布系統(tǒng)CMS實(shí)現(xiàn)信息錄入自動(dòng)生成靜態(tài)頁(yè)面、在前端緩存不經(jīng)常改變的動(dòng)態(tài)數(shù)據(jù)。

(2)CDN,把CSS/JS等資源分布在不同的服務(wù)器上。

(3)負(fù)載均衡(Nginx)。

(4)緩存不常改變的數(shù)據(jù)(Redis、memcache)。

(5)圖片服務(wù)器與應(yīng)用服務(wù)器分離。

(6)集群。

16、Integer內(nèi)部緩存?

Integer類內(nèi)部有一個(gè)staitic 的Integer數(shù)組,存儲(chǔ)的是一些已經(jīng)完成初始化的Integer對(duì)象,一般值為(-128~127),若用==比較,則有時(shí)候會(huì)因?yàn)橹挡辉诰彺嬷卸祷豧alse,所以應(yīng)該用equals比較。

17、ArrayList的原理?

(1)ArrayList是線程不安全的,若要線程安全,則使用CopyOnWriteList。

(2)底層是Object[]數(shù)組,內(nèi)部有一個(gè)elementData引用指向數(shù)組,剛開始默認(rèn)指向一個(gè)緩存空數(shù)組(transient),當(dāng)要進(jìn)行擴(kuò)容時(shí),會(huì)重新new一個(gè)大小為1.5倍(x + (x >>1))的新數(shù)組,然后將舊元素通過System.arraycopy這個(gè)native方法拷貝到新數(shù)組中。

(3)隨機(jī)讀寫(get、set)方法的算法復(fù)雜度為O(1)。

(4)增加操作分為兩種,add(index, value)的算法復(fù)雜度為O(n),因?yàn)橐ㄟ^元素復(fù)制進(jìn)行移動(dòng);而add(value)操作的算法復(fù)雜度為O(1)(若不發(fā)生擴(kuò)容)。

(5)刪除操作的時(shí)間復(fù)雜度為O(n),因?yàn)椴还苁前磇ndex進(jìn)行刪除還是按照object去刪除,都需要通過復(fù)制去實(shí)現(xiàn)移動(dòng)操作,刪除后數(shù)組大小不會(huì)變,靠size屬性來維護(hù)長(zhǎng)度。按object進(jìn)行刪除時(shí)不能用new出來的對(duì)象,要通過ArrayList內(nèi)對(duì)象的引用刪除。

18、LinkedList的原理?

(1)底層是一個(gè)雙向鏈表,維護(hù)著一個(gè)first指針和一個(gè)last指針。

(2)隨機(jī)讀寫(get,set)的時(shí)間復(fù)雜度為O(n)。

(3)插入操作add(object)的時(shí)間復(fù)雜度為O(1);add(index, object)的時(shí)間復(fù)雜度為O(n)。

(4)刪除操作remove(object)的時(shí)間復(fù)雜度為O(1);remove(index)的時(shí)間復(fù)雜度為O(n)。

19、線程池使用的注意事項(xiàng)?

(1)防止死鎖。線程池中所有線程都在等待A事件發(fā)生,而沒有空閑線程去執(zhí)行A。

(2)防止系統(tǒng)資源不足。要控制線程數(shù)量。

(3)防止并發(fā)錯(cuò)誤。

(4)防止線程泄漏,某個(gè)線程因RuntimeException或Error沒有正常被捕獲導(dǎo)致該線程異常終止,線程池失去了一個(gè)線程。

(5)避免任務(wù)過載。

20、Spring中@Autowire與@Resource的區(qū)別?

@Autowire默認(rèn)按照類型裝配,默認(rèn)情況下它要求依賴對(duì)象必須存在如果允許為null,可以設(shè)置它required屬性為false,如果我們想使用按照名稱裝配,可以結(jié)合@Qualifier注解一起使用; 

@Resource默認(rèn)按照名稱裝配,當(dāng)找不到與名稱匹配的bean才會(huì)按照類型裝配,可以通過name屬性指定,如果沒有指定name屬性,當(dāng)注解標(biāo)注在字段上,即默認(rèn)取字段的名稱作為bean名稱尋找依賴對(duì)象,當(dāng)注解標(biāo)注在屬性的setter方法上,即默認(rèn)取屬性名作為bean名稱尋找依賴對(duì)象

21、線程狀態(tài)轉(zhuǎn)移圖。


22、Object類的方法?

(1)equals:判斷是否相等。

(2)hashCode:求hash值,若兩個(gè)對(duì)象hash值相等,不一定equals;若equals,則兩個(gè)對(duì)象hash值一定相等。

(3)toString:獲得對(duì)象的字符串表達(dá)形式,一般要重寫。

(4)getClass:反射方法,獲得對(duì)象所屬的類。

(5)wait:只能在synchronized同步的代碼段中使用,若不帶時(shí)間參數(shù),則使得正在執(zhí)行的線程放棄鎖進(jìn)入等待狀態(tài)(等待池)。

(6)notify:只能在synchronized同步的代碼段中使用,從等待池中取出一個(gè)線程放入鎖標(biāo)志池。

(7)notifyAll:只能在synchronized同步的代碼段中使用,將等待池中取出所有線程放入鎖標(biāo)志池。

23、Java序列化的底層原理?

將對(duì)象信息轉(zhuǎn)化為字節(jié)碼信息。

(1)存儲(chǔ)序列化的描述。(2)當(dāng)前類描述信息。(3)當(dāng)前類屬性描述。(4)超類描述(5)超類屬性描述(6)超類屬性值描述(7)子類屬性值描述

相關(guān)文章

  • 解決springboot3.2集成mybatis-plus3.5.4.1報(bào)錯(cuò)的問題

    解決springboot3.2集成mybatis-plus3.5.4.1報(bào)錯(cuò)的問題

    這篇文章給大家介紹了如何解決springboot3.2集成mybatis-plus3.5.4.1報(bào)錯(cuò)的問題,文中通過圖文介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-12-12
  • jQuery 動(dòng)畫效果代碼分享

    jQuery 動(dòng)畫效果代碼分享

    本文給大家分享一段關(guān)于jquery實(shí)現(xiàn)的動(dòng)畫效果,代碼簡(jiǎn)單易懂,非常不錯(cuò),感興趣的朋友參考下
    2016-11-11
  • Java阻塞隊(duì)列中的BlockingQueue接口詳解

    Java阻塞隊(duì)列中的BlockingQueue接口詳解

    這篇文章主要介紹了Java阻塞隊(duì)列中的BlockingQueue接口詳解,對(duì)于Queue而言,BlockingQueue是主要的線程安全的版本,具有阻塞功能,可以允許添加、刪除元素被阻塞,直到成功為止,BlockingQueue相對(duì)于Queue而言增加了兩個(gè)方法put、take元素,需要的朋友可以參考下
    2023-09-09
  • IDEA代碼熱部署和熱加載的三種實(shí)現(xiàn)方案

    IDEA代碼熱部署和熱加載的三種實(shí)現(xiàn)方案

    在日常開發(fā)中,我們需要經(jīng)常修改 Java 代碼,手動(dòng)重啟項(xiàng)目,查看修改后的效果,如果在項(xiàng)目小時(shí),重啟速度比較快,等待的時(shí)間是較短的,我們可以使用代碼熱加載和熱部署解決該問題,本文給大家介紹了三種實(shí)現(xiàn)方案,需要的朋友可以參考下
    2023-11-11
  • 鄰接表無向圖的Java語言實(shí)現(xiàn)完整源碼

    鄰接表無向圖的Java語言實(shí)現(xiàn)完整源碼

    這篇文章主要介紹了鄰接表無向圖的Java語言實(shí)現(xiàn)完整源碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • java實(shí)現(xiàn)的2048游戲完整實(shí)例

    java實(shí)現(xiàn)的2048游戲完整實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)的2048游戲,結(jié)合完整實(shí)例形式分析了java實(shí)現(xiàn)2048游戲功能的相關(guān)數(shù)值運(yùn)算、swing組件布局、事件響應(yīng)等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Spring--國(guó)內(nèi)Java程序員用得最多的框架

    Spring--國(guó)內(nèi)Java程序員用得最多的框架

    前幾年面試最常問的且可以順利拿到高薪的技能是Spring,隨著Spring體系的壯大,除非你在簡(jiǎn)歷上添加Spring Boot和Spring Cloud的技能,才可以打動(dòng)面試官,而現(xiàn)在,除非是Spring全家桶的實(shí)戰(zhàn)經(jīng)驗(yàn),否則難以讓面試官高看
    2021-06-06
  • 解決SpringBoot中的Scheduled單線程執(zhí)行問題

    解決SpringBoot中的Scheduled單線程執(zhí)行問題

    在一次SpringBoot中使用Scheduled定時(shí)任務(wù)時(shí),發(fā)現(xiàn)某一個(gè)任務(wù)出現(xiàn)執(zhí)行占用大量資源,會(huì)導(dǎo)致其他任務(wù)也執(zhí)行失敗,這篇文章主要介紹了SpringBoot中的Scheduled單線程執(zhí)行問題及解決方法,需要的朋友可以參考下
    2022-06-06
  • 淺析javax.servlet.Servlet,ServletContext接口

    淺析javax.servlet.Servlet,ServletContext接口

    本篇文章是對(duì)javax.servlet.Servlet,ServletContext接口進(jìn)行了纖細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • Spring中ClassPath指的是哪些地方

    Spring中ClassPath指的是哪些地方

    在Spring應(yīng)用中,ClassPath指的是應(yīng)用程序的類加載路徑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06

最新評(píng)論