最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

2、Java中的內存溢出是如何造成的?

OutOfMemoryError:

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

解決方案:調參XX:PermSize 和 XX:MaxPermSize 、減少jar包,減少類的重復加載

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

解決方案:調參Xms(初始堆大?。mx(最大堆大小)、檢查死循環(huán)或不必要創(chuàng)建的重復對象

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

解決方案:調整JVM中線程大小。

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

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

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

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

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

Error用于指示合理應用程序不應該試圖捕獲的錯誤。

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

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

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

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

6、hashCode的作用?

hashCode主要是用于快速查找,如HashMap結構中,用于定位鍵值對的位置。兩個對象相同,則hashCode一定相同,而hashCode相同的對象則不一定相同,就相當于放在同一個框里。

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

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

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

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

9、 啟動一個線程是用run()還是start()?

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

(1)start 

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

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

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

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

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

(7)車票被重復賣出。

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

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

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

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

(2)Stream API

(3)接口的默認方法

(4)日期時間API的改進,新增DateTimeFormatter方法

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

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

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

生命周期:類加載、實例化(構造對象),初始化(init),服務(service),銷毀(destroy)。

CGI:common gateway interface,通用網(wǎng)關接口,Perl語言編寫,每個請求創(chuàng)建一個CGI對象。

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

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

因為StringBuffer不需要重復創(chuàng)建String對象,但是其實也不是這樣。

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

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

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

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

對稱加密算法:DES、AES,加密解密時使用相同的秘鑰。

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

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

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

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

(3)負載均衡(Nginx)。

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

(5)圖片服務器與應用服務器分離。

(6)集群。

16、Integer內部緩存?

Integer類內部有一個staitic 的Integer數(shù)組,存儲的是一些已經(jīng)完成初始化的Integer對象,一般值為(-128~127),若用==比較,則有時候會因為值不在緩存中而返回false,所以應該用equals比較。

17、ArrayList的原理?

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

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

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

(4)增加操作分為兩種,add(index, value)的算法復雜度為O(n),因為要通過元素復制進行移動;而add(value)操作的算法復雜度為O(1)(若不發(fā)生擴容)。

(5)刪除操作的時間復雜度為O(n),因為不管是按index進行刪除還是按照object去刪除,都需要通過復制去實現(xiàn)移動操作,刪除后數(shù)組大小不會變,靠size屬性來維護長度。按object進行刪除時不能用new出來的對象,要通過ArrayList內對象的引用刪除。

18、LinkedList的原理?

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

(2)隨機讀寫(get,set)的時間復雜度為O(n)。

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

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

19、線程池使用的注意事項?

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

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

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

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

(5)避免任務過載。

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

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

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

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


22、Object類的方法?

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

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

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

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

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

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

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

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

將對象信息轉化為字節(jié)碼信息。

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

相關文章

  • 詳解租約機制以及在hbase中的應用

    詳解租約機制以及在hbase中的應用

    這篇文章主要介紹了詳解租約機制以及在hbase中的應用的相關資料,需要的朋友可以參考下
    2017-02-02
  • Java中for、foreach、stream區(qū)別和性能比較詳解

    Java中for、foreach、stream區(qū)別和性能比較詳解

    for、foreach、stream都可以循環(huán)處理數(shù)據(jù),如果單純當循環(huán)使用,for、foreach、stream哪個性能更好,這篇文章主要給大家介紹了關于Java中for、foreach、stream區(qū)別和性能的相關資料,需要的朋友可以參考下
    2024-03-03
  • java中File類應用遍歷文件夾下所有文件

    java中File類應用遍歷文件夾下所有文件

    這篇文章主要為大家詳細介紹了java中File類應用遍歷文件夾下所有文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java使用easypoi快速導入導出的實現(xiàn)

    Java使用easypoi快速導入導出的實現(xiàn)

    這篇文章主要介紹了實現(xiàn)Java使用easypoi快速導入導出的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Java源碼解析之ClassLoader

    Java源碼解析之ClassLoader

    在看系統(tǒng)啟動的流程中看到了ClassLoader使用,重新溫故下ClassLoader流程和原理,文中有非常詳細的代碼示例,對正在學習java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • IDEA巧用Postfix Completion讓碼速起飛(小技巧)

    IDEA巧用Postfix Completion讓碼速起飛(小技巧)

    這篇文章主要介紹了IDEA巧用Postfix Completion讓碼速起飛,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Java中關于 null 的幾種處理方式詳解

    Java中關于 null 的幾種處理方式詳解

    這篇文章主要介紹了Java中關于 null 的幾種處理方式,關于 null ,你應該知道下面這幾件事情來有效的了解 null ,從而避免很多由 null 引起的錯誤,具體細節(jié)跟隨小編一起學習下吧
    2021-10-10
  • 關于springboot2.4跨域配置問題

    關于springboot2.4跨域配置問題

    這篇文章主要介紹了springboot2.4跨域配置的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • maven多模塊打包注意事項詳解

    maven多模塊打包注意事項詳解

    這篇文章主要為大家介紹了maven多模塊打包注意事項詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java日期工具類的封裝詳解

    Java日期工具類的封裝詳解

    在日常的開發(fā)中,我們難免會對日期格式化,對日期進行計算,對日期進行校驗,為了避免重復寫這些瑣碎的邏輯,我這里封裝了一個日期工具類,方便以后使用,直接復制代碼到項目中即可使用,需要的可以參考一下
    2022-10-10

最新評論

马公市| 寿宁县| 雷波县| 西城区| 正阳县| 镇巴县| 宣武区| 雅安市| 巫山县| 洛宁县| 白山市| 嘉义县| 金沙县| 桑植县| 开封市| 丹棱县| 南京市| 青龙| 安化县| 克山县| 泾源县| 汉阴县| 法库县| 合川市| 山东| 遂平县| 保山市| 怀来县| 桓台县| 三台县| 塘沽区| 崇明县| 新兴县| 阿克陶县| 义马市| 大丰市| 射洪县| 托里县| 二连浩特市| 香港| 文化|