日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java基础面试题及答案

發(fā)布時間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java基础面试题及答案 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接:http://www.jsondream.com/2016/12/04/java-interview-question.html

答案:
1. Arrays.sort實(shí)現(xiàn)原理和Collection實(shí)現(xiàn)原理

答:Arrays.sort():快排
Collections.sort() :MergeSort,后來變成了TimSort

2. foreach和while的區(qū)別(編譯之后)

答:foreach針對確定次數(shù);while不確定次數(shù)

3. 線程池的種類,區(qū)別和使用場景

答:newCachedThreadPool創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。
newFixedThreadPool 創(chuàng)建一個定長線程池,可控制線程最大并發(fā)數(shù),超出的線程會在隊(duì)列中等待。
newScheduledThreadPool 創(chuàng)建一個定長線程池,支持定時及周期性任務(wù)執(zhí)行。
newSingleThreadExecutor 創(chuàng)建一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行。

4. 分析線程池的實(shí)現(xiàn)原理和線程的調(diào)度過程

答:多線程技術(shù)主要解決處理器單元內(nèi)多個線程執(zhí)行的問題,它可以顯著減少處理器單元的閑置時間,增加處理器單元的吞吐能力。
假設(shè)一個服務(wù)器完成一項(xiàng)任務(wù)所需時間為:T1 創(chuàng)建線程時間,T2 在線程中執(zhí)行任務(wù)的時間,T3 銷毀線程時間。
如果:T1 + T3 遠(yuǎn)大于 T2,則可以采用線程池,以提高服務(wù)器性能。
一個線程池包括以下四個基本組成部分:
A、線程池管理器(ThreadPool):用于創(chuàng)建并管理線程池,包括 創(chuàng)建線程池,銷毀線程池,添加新任務(wù);
B、工作線程(PoolWorker):線程池中線程,在沒有任務(wù)時處于等待狀態(tài),可以循環(huán)的執(zhí)行任務(wù);
C、任務(wù)接口(Task):每個任務(wù)必須實(shí)現(xiàn)的接口,以供工作線程調(diào)度任務(wù)的執(zhí)行,它主要規(guī)定了任務(wù)的入口,任務(wù)執(zhí)行完后的收尾工作,任務(wù)的執(zhí)行狀態(tài)等;
D、任務(wù)隊(duì)列(taskQueue):用于存放沒有處理的任務(wù)。提供一種緩沖機(jī)制。
線程池技術(shù)正是關(guān)注如何縮短或調(diào)整T1,T3時間的技術(shù),從而提高服務(wù)器程序性能的。它把T1,T3分別安排在服務(wù)器程序的啟動和結(jié)束的時間段或者一些空閑的時間段,這樣在服務(wù)器程序處理客戶請求時,不會有T1,T3的開銷了。
線程池不僅調(diào)整T1,T3產(chǎn)生的時間段,而且它還顯著減少了創(chuàng)建線程的數(shù)目,重用線程池中的線程。
按照優(yōu)先級調(diào)度線程。

5. 線程池如何調(diào)優(yōu)

答:使用線程池的核心問題在于應(yīng)該使用多少線程。利特爾法則、拆分線程池

6. 線程池的最大線程數(shù)目根據(jù)什么確定

答:corePoolSize: tasks*tasktime個線程數(shù)
queueCapacity: corePoolSize/tasktime)*responsetime
maxPoolSize: (每秒任務(wù)-queueCapacity)*(每秒單個線程處理任務(wù)數(shù)量)

7. 動態(tài)代理的幾種方式

答:代理模式的作用是:為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個客戶不想或者不能直接引用另一個對象,而代理對象可以在客戶端和目標(biāo)對象之間起到中介的作用。
動態(tài)代理:在程序運(yùn)行時,運(yùn)用反射機(jī)制動態(tài)創(chuàng)建而成。每一個動態(tài)代理類都必須要實(shí)現(xiàn)InvocationHandler這個接口。
jdk動態(tài)代理:jdk動態(tài)代理是由Java內(nèi)部的反射機(jī)制來實(shí)現(xiàn)的,應(yīng)用前提,必須是目標(biāo)類基于統(tǒng)一的接口
cglib動態(tài)代理:動態(tài)代理框架,借助asm來實(shí)現(xiàn)的

8. HashMap的并發(fā)問題
答:HashMap是非線程安全的,可能造成死循環(huán)。

9. 了解LinkedHashMap的應(yīng)用嗎

答:LinkedHashMap是HashMap的一個子類,它保留插入的順序,輸入順序和輸出順序相同。底層使用hash表和雙向鏈表來存儲。Eg。LRU緩存

10. 反射的原理,反射創(chuàng)建類實(shí)例的三種方式是什么?

A. 對象調(diào)用getClass()方法來創(chuàng)建一個Class類型的對像
B. 通過類名,class的方式實(shí)例化Class類對象
C. Class.forName(“類全名”)的方式實(shí)例化一個Class類

11. cloneable接口實(shí)現(xiàn)原理,淺拷貝or深拷貝

cloneable接口:實(shí)現(xiàn)淺拷貝
淺拷貝(位拷貝):同一片內(nèi)存空間。內(nèi)存泄露、相互影響
深拷貝(值拷貝):重新分配內(nèi)存空間,值一致

12. Java NIO (New IO)使用

非阻塞
在NIO中有幾個核心對象需要掌握:緩沖區(qū)(Buffer)、通道(Channel)、選擇器(Selector)。
緩沖區(qū):在NIO庫中,所有數(shù)據(jù)都是用緩沖區(qū)處理的
通道:通道是一個對象,通過它可以讀取和寫入數(shù)據(jù),將數(shù)據(jù)從通道讀入緩沖區(qū),再從緩沖區(qū)獲取這個字節(jié)
選擇器:能檢測一個或多個通道 (channel) 上的事件,并將事件分發(fā)出去。

13. hashtable和hashmap的區(qū)別及實(shí)現(xiàn)原理,hashmap會問到數(shù)組索引,hash碰撞怎么解決

Put過程:
A. 先獲取key對象的hashcode值進(jìn)行處理
B. 將處理后的hashcode對table的length-1進(jìn)行取余獲得index即在數(shù)組中的索引位置
C. 然后對該位置的Entry進(jìn)行判斷,若該位置為空,那么插入新的Entry。
D. 若當(dāng)前Entry不為空,那么根據(jù)key.equals()對該鏈表進(jìn)行遍歷,若是該key對象存在,則用新值代替舊值,否則在鏈表尾端插入新的Entry。
處理沖突的方式:開放地址法、拉鏈法、建立公共溢出區(qū)

14. arraylist和linkedlist區(qū)別及實(shí)現(xiàn)原理


區(qū)別 Arraylist Linkedlist
數(shù)據(jù)結(jié)構(gòu) 動態(tài)數(shù)組 鏈表
隨機(jī)訪問 快 慢
Add、remove 慢 快
實(shí)現(xiàn)原理
ArrayList原理:
當(dāng)元素超出數(shù)組內(nèi)容,會產(chǎn)生一個新數(shù)組,將原來數(shù)組的數(shù)據(jù)復(fù)制到新數(shù)組中,再將新的元素添加到新數(shù)組中。
ArrayList:是按照原數(shù)組的50%來延長,構(gòu)造一個初始容量為10的空列表
LinkedList原理:
不可以在初始化時候指定大小,每次向其中加入元素時候,容量自動加1。

15. 反射中,Class.forName和ClassLoader區(qū)別

![這里寫圖片描述](https://img-blog.csdn.net/20170320094318654?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemQ4MzY2MTQ0Mzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

16. String,Stringbuffer,StringBuilder的區(qū)別?


基本原則:
a.如果要操作少量的數(shù)據(jù),用String ;單線程操作大量數(shù)據(jù),用StringBuilder ;多線程操作大量數(shù)據(jù),用StringBuffer。
b.不要使用String類的”+”來進(jìn)行頻繁的拼接
c.在構(gòu)造 StringBuffer 或 StringBuilder 時應(yīng)盡可能指定它們的容量。

17. 有沒有可能2個不相等的對象有相同的hashcode

可能。結(jié)合直接尋址和鏈?zhǔn)綄ぶ返墓1?#xff0c;掛在一個鏈表上的hashcode值相等

18. 簡述NIO的最佳實(shí)踐,比如netty,mina

19. TreeMap的實(shí)現(xiàn)原理

TreeMap的實(shí)現(xiàn)是紅黑樹算法的實(shí)現(xiàn),紅黑樹更是一顆自平衡的排序二叉樹。

TreeMap繼承AbstractMap,實(shí)現(xiàn)NavigableMap、Cloneable、Serializable三個接口。

在TreeMap的put()的實(shí)現(xiàn)方法中主要分為兩個步驟,第一:構(gòu)建排序二叉樹,第二:平衡二叉樹。

紅黑二叉樹而言它主要包括三大基本操作:左旋、右旋、著色。

總結(jié)

以上是生活随笔為你收集整理的java基础面试题及答案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。