亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

【面試】Java相關(guān)

icattlecoder / 1417人閱讀

摘要:可能會(huì)持有相同的值對(duì)象但鍵對(duì)象必須是唯一的。當(dāng)有新任務(wù)到達(dá)時(shí),線(xiàn)程池沒(méi)有線(xiàn)程則創(chuàng)建線(xiàn)程處理,處理完成后該線(xiàn)程緩存秒,過(guò)期后回收,線(xiàn)程過(guò)期前有新任務(wù)到達(dá)時(shí),則使用緩存的線(xiàn)程來(lái)處理。解決死鎖問(wèn)題的三種方法預(yù)防死鎖檢測(cè)死鎖及避免死鎖。

最近辭職準(zhǔn)備面試,順便整理一下面試題分享給大家,如有錯(cuò)誤歡迎指出

01. 你對(duì)面向?qū)ο笏枷氲睦斫猓?/strong>

面向?qū)ο缶幊毯?jiǎn)稱(chēng)OOP,是開(kāi)發(fā)程序的一種方法、思想。
面向過(guò)程編程中常常會(huì)導(dǎo)致所有的代碼都在一起,難以閱讀和維護(hù),牽一動(dòng)百。而OOP,使用許多代碼模塊,每個(gè)模塊都只提供特定的功能,彼此獨(dú)立,可以增加代碼重用幾率,更加有利于軟件的開(kāi)發(fā)、維護(hù)和升級(jí)。
另外OOP的三大核心特性:繼承、封裝、多態(tài) 的特性,使得程序員能夠設(shè)計(jì)出高內(nèi)聚、低耦合的系統(tǒng)結(jié)構(gòu),使得系統(tǒng)更靈活、易擴(kuò)展,成本較低

02. 很多程序員都知道多態(tài),但大都知其然不知其所以然,說(shuō)說(shuō)你對(duì)多態(tài)的理解
一個(gè)引用變量倒底會(huì)指向哪個(gè)類(lèi)的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類(lèi)中實(shí)現(xiàn)的方法,在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定。
因?yàn)樵诔绦蜻\(yùn)行時(shí)才確定具體的類(lèi),即不修改程序代碼就可以改變程序運(yùn)行時(shí)所綁定的具體代碼,讓程序可以選擇多個(gè)運(yùn)行狀態(tài),這就是多態(tài)性
多態(tài)的優(yōu)點(diǎn):解耦、靈活、可擴(kuò)展性強(qiáng)

多態(tài)存在的三個(gè)必要條件:繼承、重寫(xiě)、父類(lèi)引用指向子類(lèi)對(duì)象

03. Collection集合有什么子類(lèi)
List
1.可以允許重復(fù)的對(duì)象。
2.可以插入多個(gè)null元素。
3.有序,保持元素的插入順序
4.常用的實(shí)現(xiàn)類(lèi)有 ArrayList、LinkedList 和 Vector。ArrayList 最為流行,它提供了使用索引的隨意訪(fǎng)問(wèn),而 LinkedList 則對(duì)于經(jīng)常需要從 List 中添加或刪除元素的場(chǎng)合更為合適。

Set
1.不允許重復(fù)對(duì)象
2.無(wú)序
3.只允許一個(gè) null 元素
4.Set 接口最流行的幾個(gè)實(shí)現(xiàn)類(lèi)是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 實(shí)現(xiàn)的 HashSet;TreeSet 還實(shí)現(xiàn)了 SortedSet 接口。

Map
1.Map不是collection的子接口或者實(shí)現(xiàn)類(lèi)。Map是一個(gè)接口。
2.Map 可能會(huì)持有相同的值對(duì)象但鍵對(duì)象必須是唯一的。
3.TreeMap 也通過(guò) Comparator 或者 Comparable 維護(hù)了一個(gè)排序順序。
4.Map 里你可以擁有隨意個(gè) null 值但最多只能有一個(gè) null 鍵。
Map 接口最流行的幾個(gè)實(shí)現(xiàn)類(lèi)是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)

04. list,set,map的使用場(chǎng)景
1.如果你經(jīng)常會(huì)使用索引來(lái)對(duì)容器中的元素進(jìn)行訪(fǎng)問(wèn),那么 List 是你的正確的選擇。如果你已經(jīng)知道索引了的話(huà),那么 List 的實(shí)現(xiàn)類(lèi)比如 ArrayList 可以提供更快速的訪(fǎng)問(wèn),如果經(jīng)常添加刪除元素的,那么肯定要選擇LinkedList。
2.如果你想容器中的元素能夠按照它們插入的次序進(jìn)行有序存儲(chǔ),那么還是 List,因?yàn)?List 是一個(gè)有序容器,它按照插入順序進(jìn)行存儲(chǔ)。
3.如果你想保證插入元素的唯一性,也就是你不想有重復(fù)值的出現(xiàn),那么可以選擇一個(gè) Set 的實(shí)現(xiàn)類(lèi),比如 HashSet、LinkedHashSet 或者 TreeSet。
4.如果你以鍵和值的形式進(jìn)行數(shù)據(jù)存儲(chǔ)那么 Map 是你正確的選擇。你可以根據(jù)你的后續(xù)需要從 Hashtable、HashMap、TreeMap 中進(jìn)行選擇。

05. ArrayList和HashMap的比較
使用場(chǎng)景:如果需要快速隨機(jī)訪(fǎng)問(wèn)元素,應(yīng)該使用ArrayList。需要鍵值對(duì)形式的數(shù)據(jù)時(shí),應(yīng)該使用HashMap

相同點(diǎn):

1)都是線(xiàn)程不安全,不同步

2)都可以?xún)?chǔ)存null值

3)獲取元素個(gè)數(shù)方法一樣,都用size()方法獲取

區(qū)別:

1)實(shí)現(xiàn)的接口

ArrayList實(shí)現(xiàn)了List接口(Collection(接口)->List(接口)->ArrayList(類(lèi))),底層使用的是數(shù)組;而HashMap現(xiàn)了Map接口(Map(接口)->HashMap(類(lèi))),底層使用的是Hash算法存儲(chǔ)數(shù)據(jù)。

2)存儲(chǔ)元素

ArrayList以數(shù)組的方式存儲(chǔ)數(shù)據(jù),里面的元素是有順序,可以重復(fù)的;而HashMap將數(shù)據(jù)以鍵值對(duì)的方式存儲(chǔ),鍵的哈希碼(hashCode)不可以相同,相同后面的值會(huì)將前面的值覆蓋,值可以重復(fù),里面的元素?zé)o序。

3)添加元素的方法

ArrayList用add(Object object)方法添加元素,而HashMap用put(Object key, Object value)添加元素。

4)默認(rèn)的大小和擴(kuò)容

在 Java 7 中,ArrayList的默認(rèn)大小是 10 個(gè)元素,HashMap 的默認(rèn)大小是16個(gè)元素(必須是2的冪)。


06. 多線(xiàn)程創(chuàng)建方式有哪幾種(具體創(chuàng)建過(guò)程是什么)
1.繼承thread 類(lèi),重寫(xiě)run方法,然后new Thread().start啟動(dòng)線(xiàn)程,也可以直接匿名內(nèi)部類(lèi)的方式創(chuàng)建
new Thread(

public void run(){
};

).start;
在里邊寫(xiě)run方法的實(shí)現(xiàn)
2.實(shí)現(xiàn)runnable接口,重寫(xiě)run方法
3.實(shí)現(xiàn)callable接口(一般很少用)

07. 多線(xiàn)程的常見(jiàn)應(yīng)用場(chǎng)景:
1、后臺(tái)定時(shí)任務(wù),例如:定時(shí)向大量(100w以上)的用戶(hù)發(fā)送郵件;
2、異步處理,例如:發(fā)微博、記錄日志等;
3、分布式計(jì)算消息隊(duì)列

08. 線(xiàn)程有哪幾種狀態(tài)
1.創(chuàng)建狀態(tài) 剛被new Thread()
2.就緒狀態(tài) 準(zhǔn)備好了run方法,等待cpu
3.運(yùn)行狀態(tài) running
4.阻塞狀態(tài)(包括sleep、wait(notify)、suspend(resume)、以及沒(méi)搶到鎖)
5.死亡狀態(tài)

09. 線(xiàn)程池初始化時(shí)有哪些參數(shù)可以設(shè)置
一般tomcat線(xiàn)程池不用自己配,自己寫(xiě)線(xiàn)程池的話(huà)是需要自己配置參數(shù)的
那 線(xiàn)程初始化時(shí)設(shè)置參數(shù)的格式是:
private static final int corePoolSize = xxx;
創(chuàng)建線(xiàn)程池對(duì)象時(shí),將配置的各種參數(shù)用逗號(hào)連接傳參進(jìn)去。
ThreadPoolExecutor mExecute = new ThreadPoolExecutor(

corePoolSize, 
maximumPoolSize, 
keepAliveTime, 
TimeUnit.SECONDS, 
workQueue, 
threadFactory, 
rejectHandler 

);
各個(gè)參數(shù)代表的意義:

corePoolSize:線(xiàn)程池的核心線(xiàn)程數(shù)。在沒(méi)有設(shè)置 allowCoreThreadTimeOut 為 true 的情況下,核心線(xiàn)程會(huì)在線(xiàn)程池中一直存活,即使處于閑置狀態(tài)。
maximumPoolSize:線(xiàn)程池所能容納的最大線(xiàn)程數(shù)。大于這個(gè)數(shù)調(diào)用任務(wù)拒絕handler
keepAliveTime:非核心線(xiàn)程閑置時(shí)的超時(shí)時(shí)長(zhǎng)。超過(guò)該時(shí)長(zhǎng),非核心線(xiàn)程就會(huì)被回收。
unit:keepAliveTime 時(shí)長(zhǎng)對(duì)應(yīng)的單位。
workQueue:線(xiàn)程池中的任務(wù)隊(duì)列,當(dāng)有提交的任務(wù)暫時(shí)沒(méi)有足夠的線(xiàn)程去執(zhí)行的時(shí)候,就會(huì)進(jìn)入workQueue等待
rejectHandler:拒絕策略,當(dāng)線(xiàn)程池中線(xiàn)程數(shù)大于maximumPoolSize,且任務(wù)隊(duì)列也排滿(mǎn)了,如何拒絕任務(wù)。
JDK給我們內(nèi)置了四種拒絕策略:直接拋出異常、丟棄最老的一個(gè)任務(wù)然后重新提交當(dāng)前任務(wù)、放棄無(wú)法執(zhí)行的任務(wù),然后當(dāng)做無(wú)事發(fā)生、還有一種沒(méi)看懂就不寫(xiě)出來(lái)了

10. 線(xiàn)程池的種類(lèi)(4種)區(qū)別和使用場(chǎng)景
首先,不同線(xiàn)程池之間的區(qū)別就是他們新建時(shí)傳入的參數(shù)值不一樣(新建方法是一樣的)
1.newFixedThreadPool,線(xiàn)程數(shù)量固定的線(xiàn)程池,線(xiàn)程池的corePoolSize和maximumPoolSize大小一樣,并且keepAliveTime為0,傳入的隊(duì)列LinkedBlockingQueue為無(wú)界隊(duì)列
2.newSingleThreadExecutor,單線(xiàn)程池,corePoolSize和maximumPoolSize都是1,keepAliveTime是0
3.newCachedThreadPool,可緩存線(xiàn)程池,說(shuō)到緩存一般離不開(kāi)過(guò)期時(shí)間,該線(xiàn)程池也是,corePoolSize設(shè)置為0,maximumPoolSize設(shè)置為int最大值,不同的是,線(xiàn)程池傳入的隊(duì)列是SynchronousQueue,一個(gè)同步隊(duì)列,該隊(duì)列沒(méi)有任何容量,每次插入新數(shù)據(jù),必須等待消費(fèi)完成。當(dāng)有新任務(wù)到達(dá)時(shí),線(xiàn)程池沒(méi)有線(xiàn)程則創(chuàng)建線(xiàn)程處理,處理完成后該線(xiàn)程緩存60秒,過(guò)期后回收,線(xiàn)程過(guò)期前有新任務(wù)到達(dá)時(shí),則使用緩存的線(xiàn)程來(lái)處理。
4.newScheduledThreadPool,這個(gè)線(xiàn)程池使用了ScheduledThreadPoolExecutor,該線(xiàn)程池繼承自ThreadPoolExecutor, 執(zhí)行任務(wù)的時(shí)候可以指定延遲多少時(shí)間執(zhí)行,或者周期性執(zhí)行。

11. ==和equals有什么區(qū)別?

對(duì)基本數(shù)據(jù)類(lèi)型 ==比較的是值,引用類(lèi)型 ==比較的是地址
equals比較的大多是地址,但是String和Integer對(duì)其進(jìn)行了重寫(xiě),所以比較的是值

12. Thread類(lèi)中的start()和run()方法有什么區(qū)別
start啟動(dòng)線(xiàn)程,run方法只是thread的一個(gè)普通方法,就算調(diào)用了也還是在主線(xiàn)程里執(zhí)行

同步有幾種實(shí)現(xiàn)方法?
同步的實(shí)現(xiàn)方面有兩種,使用synchronized同步鎖、volatile關(guān)鍵字、lock鎖對(duì)象的lock()和unlock()方法

volatile關(guān)鍵字
Java 語(yǔ)言中的 volatile 變量可以被看作是一種 “程度較輕的 synchronized”
鎖提供了兩種主要特性:互斥(mutual exclusion) 和可見(jiàn)性(visibility)。
互斥指一個(gè)線(xiàn)程拿到了鎖,其他線(xiàn)程就必須等待完成。
可見(jiàn)性要表示一個(gè)線(xiàn)程改完了一個(gè)公共數(shù)據(jù)(實(shí)際上是先改自己的緩存數(shù)據(jù),然后同步到公共數(shù)據(jù)上,然后另外的線(xiàn)程看到公共數(shù)據(jù)變了,將變換的值同步到自己的緩存,這個(gè)過(guò)程有好幾部,所以會(huì)有線(xiàn)程安全問(wèn)題),必須要保證其他線(xiàn)程知道數(shù)據(jù)改變了
使用 volatile 變量的主要原因用法簡(jiǎn)單,在公共數(shù)據(jù)上加一個(gè)volatile關(guān)鍵字就行,其次是性能優(yōu)于sychronize同步鎖

線(xiàn)程產(chǎn)生死鎖的原因和解決辦法:
什么是死鎖:打個(gè)比方,假設(shè)有P1和P2兩個(gè)進(jìn)程,都需要A和B兩個(gè)資源,現(xiàn)在P1持有A等待B資源,而P2持有B等待A資源,兩個(gè)都等待另一個(gè)資源而不肯釋放資源,就這樣無(wú)限等待中,這就形成死鎖
定義:如果一組進(jìn)程中每一個(gè)進(jìn)程都在等待僅由該組進(jìn)程中的其他進(jìn)程才能引發(fā)的事件,那么該組進(jìn)程是死鎖的。
產(chǎn)生死鎖原因:一種原因是系統(tǒng)提供的資源太少了,遠(yuǎn)不能滿(mǎn)足并發(fā)進(jìn)程對(duì)資源的需求。這種競(jìng)爭(zhēng)資源引起的死鎖是我們要討論的核心;
另一種原因是由于進(jìn)程推進(jìn)順序不合適引發(fā)的死鎖。資源少也未必一定產(chǎn)生死鎖。就如同兩個(gè)人過(guò)獨(dú)木橋,如果兩個(gè)人都要先過(guò),在獨(dú)木橋上僵持不肯后退,必然會(huì)應(yīng)競(jìng)爭(zhēng)資源產(chǎn)生死鎖;但是,如果兩個(gè)人上橋前先看一看有無(wú)對(duì)方的人在橋上,當(dāng)無(wú)對(duì)方的人在橋上時(shí)自己才上橋,那麼問(wèn)題就解決了。所以,如果程序設(shè)計(jì)得不合理,造成進(jìn)程推進(jìn)的順序不當(dāng),也會(huì)出現(xiàn)死鎖。
解決死鎖問(wèn)題的三種方法:預(yù)防死鎖、檢測(cè)死鎖及避免死鎖。
解決辦法:預(yù)防死鎖的發(fā)生往往需要很大的系統(tǒng)開(kāi)銷(xiāo),而且不能充分利用資源,為此,一種簡(jiǎn)便的方法是系統(tǒng)為進(jìn)程分配資源時(shí),不采取任何限制性措施,但是提供了檢測(cè)和解脫死鎖的手段
核心思想:打破線(xiàn)程間的相互等待狀態(tài),比如
1.找到相互等待的線(xiàn)程的spid,kill掉
2.使用sql server 內(nèi)部的鎖監(jiān)視器線(xiàn)程執(zhí)行死鎖檢查,當(dāng)檢測(cè)到死鎖時(shí),回滾事務(wù)以及該事務(wù)持有的鎖,使得其他線(xiàn)程得以正常運(yùn)行

多線(xiàn)程有幾種實(shí)現(xiàn)方法?
多線(xiàn)程有三種實(shí)現(xiàn)方法,分別是繼承Thread類(lèi)、實(shí)現(xiàn)Runnable接口、實(shí)現(xiàn)Callable接口

Callable和Runnable的區(qū)別是什么
(1)Callable規(guī)定的方法是call(),Runnable規(guī)定的方法是run().
(2)Callable的任務(wù)執(zhí)行后可返回值,而Runnable的任務(wù)是不能返回值得
(3)call方法可以?huà)伋霎惓?,run方法不可以
(4)運(yùn)行Callable任務(wù)可以拿到一個(gè)Future對(duì)象,F(xiàn)uture 表示異步計(jì)算的結(jié)果。它提供了檢查計(jì)算是否完成的方法,以等待計(jì)算的完成,并獲取計(jì)算的結(jié)果。計(jì)算完成后只能使用 get 方法來(lái)獲取結(jié)果,如果線(xiàn)程沒(méi)有執(zhí)行完,F(xiàn)uture.get()方法可能會(huì)阻塞當(dāng)前線(xiàn)程的執(zhí)行;如果線(xiàn)程出現(xiàn)異常,F(xiàn)uture.get()會(huì)throws InterruptedException或者ExecutionException;如果線(xiàn)程已經(jīng)取消,會(huì)跑出CancellationException。取消由cancel 方法來(lái)執(zhí)行。isDone確定任務(wù)是正常完成還是被取消了。一旦計(jì)算完成,就不能再取消計(jì)算。如果為了可取消性而使用 Future 但又不提供可用的結(jié)果,則可以聲明Future 形式類(lèi)型、并返回 null 作為底層任務(wù)的結(jié)果。

IO流,了解常見(jiàn)的幾個(gè)流對(duì)象以及基本的流操作即可

數(shù)組集合

什么是連接池,為什么使用連接池

什么是接口隔離?

接口跟抽象類(lèi)的區(qū)別?

hashcode和equal的區(qū)別

hashmap和hashtable的區(qū)別是什么?

hashmap實(shí)現(xiàn)原理,擴(kuò)容因子過(guò)大過(guò)小的缺點(diǎn),擴(kuò)容過(guò)程

ArrayList和linkenList的區(qū)別?

java地址和值傳遞的例子
值傳遞:只傳遞值,各是各的
引用傳遞:傳遞地址,共同操作這個(gè)值

Linux常用命令列舉10個(gè)
ls/ll 顯示文件夾下所有文件/詳細(xì)顯示
pwd 查看當(dāng)前目錄的絕對(duì)路徑
cd 切換目錄
ps 查看進(jìn)程
kill 殺死進(jìn)程
mv 移動(dòng)文件
mkdir 創(chuàng)建文件夾
rmdir 刪除文件夾
touch 創(chuàng)建文件
tar zxvf 解壓
date 顯示日期
cal 顯示日歷
vi 用vim編輯文件
clear 清屏

synchronized實(shí)現(xiàn)原理

synchronizated和lock差別?

java Nio

是否可以繼承String類(lèi)?
String類(lèi)是final類(lèi)故不可以繼承。

幾種線(xiàn)程暫停
a. wait():使一個(gè)線(xiàn)程處于等待狀態(tài),并且釋放持有的鎖
b. sleep():使一個(gè)正在運(yùn)行的線(xiàn)程處于睡眠狀態(tài),時(shí)間過(guò)了自動(dòng)會(huì)醒,所以不釋放鎖
c. notify():喚醒一個(gè)處于等待狀態(tài)的線(xiàn)程,注意的是在調(diào)用此方法的時(shí)候,并不能確
切的喚醒某一個(gè)等待狀態(tài)的線(xiàn)程,而是由JVM確定喚醒哪個(gè)線(xiàn)程,而且不是按優(yōu)先級(jí)。
d. allnotity():喚醒所有處入等待狀態(tài)的線(xiàn)程,注意并不是給所有喚醒線(xiàn)程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。

啟動(dòng)一個(gè)線(xiàn)程是用run()還是start()?
啟動(dòng)一個(gè)線(xiàn)程是調(diào)用start()方法,使線(xiàn)程就緒狀態(tài),以后可以被調(diào)度為運(yùn)行狀態(tài),一個(gè)線(xiàn)程必須關(guān)聯(lián)一些具體的執(zhí)行代碼,run()方法是該線(xiàn)程所關(guān)聯(lián)的執(zhí)行代碼。

SOCKET套接字中有幾中連接方式,各有什么區(qū)別?
Sockets有兩種主要的操作方式:面向連接(TCP/IP)的和無(wú)連接(UDP)的。無(wú)連接的操作使用數(shù)據(jù)報(bào)協(xié)議,無(wú)連接的操作是快速的和高效的,但是數(shù)據(jù)安全性不佳. 面向連接的操作使用TCP協(xié)議.面向連接的操作比無(wú)連接的操作效率更低,但是數(shù)據(jù)的安全性更高

sleep()和wait()區(qū)別
sleep() 方法:線(xiàn)程主動(dòng)放棄CPU,使得線(xiàn)程在指定的時(shí)間內(nèi)進(jìn)入阻塞狀態(tài),不能得到CPU 時(shí)間,指定的時(shí)間一過(guò),線(xiàn)程重新進(jìn)入可執(zhí)行狀態(tài)。典型地,sleep() 被用在等待某個(gè)資源就緒的情形:測(cè)試發(fā)現(xiàn)條件不滿(mǎn)足后,讓線(xiàn)程阻塞一段時(shí)間后重新測(cè)試,直到條件滿(mǎn)足為止。
wait( ) :與notify()配套使用,wait()使得線(xiàn)程進(jìn)入阻塞狀態(tài),它有兩種形式,一種允許指定以毫秒為單位的一段時(shí)間作為參數(shù),另一種沒(méi)有參數(shù),當(dāng)指定時(shí)間參數(shù)時(shí)對(duì)應(yīng)的 notify() 被調(diào)用或者超出指定時(shí)間時(shí)線(xiàn)程重新進(jìn)入可執(zhí)行狀態(tài),后者則必須對(duì)應(yīng)的 notify() 被調(diào)用

hashCode方法的作用?
hashcode這個(gè)方法是用來(lái)鑒定2個(gè)對(duì)象是否相等的。hashcode方法一般用戶(hù)不會(huì)去調(diào)用,比如在hashmap中,由于key是不可以重復(fù)的,他在判斷key是不是重復(fù)的時(shí)候就判斷了hashcode這個(gè)方法,而且也用到了equals方法。這里不可以重復(fù)是說(shuō)equals和hashcode只要有一個(gè)不等就可以了!所以簡(jiǎn)單來(lái)講,hashcode相當(dāng)于是一個(gè)對(duì)象的編碼。我們一般在覆蓋equals的同時(shí)也要覆蓋hashcode,讓他們的邏輯一致。

簡(jiǎn)述synchronized和java.util.concurrent.locks.Lock的異同 ?
主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能
主要不同點(diǎn):Lock有比synchronized更精確的線(xiàn)程語(yǔ)義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。Lock還有更強(qiáng)大的功能,例如,它的tryLock方法可以非阻塞方式去拿鎖。
Java字節(jié)碼的執(zhí)行有兩種方式:
1)即時(shí)編譯方式:解釋器先將字節(jié)編譯成機(jī)器碼,然后再執(zhí)行該機(jī)器碼。 2)解釋執(zhí)行方式:解釋器通過(guò)每次解釋并執(zhí)行一小段代碼來(lái)完成java字節(jié) 碼程序的所有操作。

Java四種引用包括強(qiáng)引用,軟引用,弱引用,虛引用

2.獲取Class的方式有哪些
方式一:對(duì)象.getClass()
Student student = new Student();
student.getClass();
方式二:類(lèi)名.Class
Student.Class
方式三:Class.forname("完整的類(lèi)路徑.包名.類(lèi)名")

3.int和Integer的區(qū)別
基礎(chǔ)答案:Ingeter是int的包裝類(lèi),int的初值為0,Ingeter的初值為null。
進(jìn)階答案:Ingeter將-128-127進(jìn)行緩存,因此

4.ArrayList和LinkedList的區(qū)別
1.ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)。
2.對(duì)于隨機(jī)訪(fǎng)問(wèn)get和set,ArrayList覺(jué)得優(yōu)于LinkedList,因?yàn)長(zhǎng)inkedList要移動(dòng)指針。
3.對(duì)于新增和刪除操作add和remove,LinedList比較占優(yōu)勢(shì),因?yàn)锳rrayList要移動(dòng)數(shù)據(jù)。

5.==和equals的區(qū)別
1)對(duì)于==,比較的是值是否相等

如果作用于基本數(shù)據(jù)類(lèi)型的變量,則直接比較其存儲(chǔ)的 “值”是否相等;

  如果作用于引用類(lèi)型的變量,則比較的是所指向的對(duì)象的地址
2)對(duì)于equals方法,注意:equals方法不能作用于基本數(shù)據(jù)類(lèi)型的變量
如果沒(méi)有對(duì)equals方法進(jìn)行重寫(xiě),則比較的是引用類(lèi)型的變量所指向的對(duì)象的地址;
諸如String、Date等類(lèi)對(duì)equals方法進(jìn)行了重寫(xiě)的話(huà),比較的是所指向的對(duì)象的內(nèi)容。

6.override和overload的比較
重載Overload:在同一個(gè)類(lèi)中,允許存在一個(gè)以上的同名函數(shù),只要他們的參數(shù)個(gè)數(shù)或者參數(shù)類(lèi)型不同即可。
重載的特點(diǎn):與返回值類(lèi)型無(wú)關(guān),只看參數(shù)列表。
重寫(xiě)Override表示子類(lèi)中的方法可以與父類(lèi)中的某個(gè)方法的名稱(chēng)和參數(shù)完全相同,通過(guò)子類(lèi)創(chuàng)建的實(shí)例對(duì)象調(diào)用這個(gè)方法時(shí),將調(diào)用子類(lèi)中定義的方法,這相當(dāng)于把父類(lèi)中定義的那個(gè)完全相同的方法給覆蓋掉了,這也是面向?qū)ο缶幊痰亩鄳B(tài)的一種表現(xiàn)。子類(lèi)覆蓋父類(lèi)方法時(shí)只能拋出父類(lèi)的異?;蛘弋惓5淖宇?lèi)或者父類(lèi)異常的子集,因?yàn)樽宇?lèi)可以解決父類(lèi)的一些問(wèn)題,但不能比父類(lèi)有更多的問(wèn)題。還有,子類(lèi)方法的訪(fǎng)問(wèn)權(quán)限只能比父類(lèi)的更大,不能更小。如果父類(lèi)的方法是private類(lèi)型,則子類(lèi)中根本不存在覆蓋,即子類(lèi)中和父類(lèi)的private的同名的方法沒(méi)有覆蓋的關(guān)系,因?yàn)閜rivate的訪(fǎng)問(wèn)權(quán)限只限于同一類(lèi)中,而子類(lèi)就不會(huì)訪(fǎng)問(wèn)到private的方法,所以是子類(lèi)中增加的一個(gè)全新的方法

7.簡(jiǎn)述servlet生命周期
(1)加載和實(shí)例化
當(dāng)Servlet容器啟動(dòng)或客戶(hù)端發(fā)送一個(gè)請(qǐng)求時(shí),Servlet容器會(huì)查找內(nèi)存中是否存在該Servlet實(shí)例,若存在,則直接讀取該實(shí)例響應(yīng)請(qǐng)求;如果不存在,就創(chuàng)建一個(gè)Servlet實(shí)例。
(2) 初始化
實(shí)例化后,Servlet容器將調(diào)用Servlet的init()方法進(jìn)行初始化(一些準(zhǔn)備工作或資源預(yù)加載工作)。
(3)服務(wù)
初始化后,Servlet處于能響應(yīng)請(qǐng)求的就緒狀態(tài)。當(dāng)接收到客戶(hù)端請(qǐng)求時(shí),調(diào)用service()的方法處理客戶(hù)端請(qǐng)求,HttpServlet的service()方法會(huì)根據(jù)不同的請(qǐng)求 轉(zhuǎn)調(diào)不同的doXxx()方法。
(4)銷(xiāo)毀
當(dāng)Servlet容器關(guān)閉時(shí),Servlet實(shí)例也隨時(shí)銷(xiāo)毀。其間,Servlet容器會(huì)調(diào)用Servlet 的destroy()方法去判斷該Servlet是否應(yīng)當(dāng)被釋放(或回收資源)。

9.farward和redirect區(qū)別
轉(zhuǎn)發(fā)(Forward),是一次請(qǐng)求,只有一個(gè)request,因此request域內(nèi)的數(shù)據(jù)可以共享。
重定向(Redirect)實(shí)際是兩次HTTP請(qǐng)求,服務(wù)器端在響應(yīng)第一次請(qǐng)求的時(shí)候,讓瀏覽器再向另外一個(gè)URL發(fā)出請(qǐng)求,從而達(dá)到轉(zhuǎn)發(fā)的目的。

10.final finally finalize區(qū)別
Java提供finalize()方法,垃圾回收器準(zhǔn)備釋放內(nèi)存的時(shí)候,會(huì)先調(diào)用finalize()。

11.樂(lè)觀鎖與悲觀鎖
悲觀鎖
總是假設(shè)最壞的情況,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在拿數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)阻塞直到它拿到鎖 。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)里邊就用到了很多這種鎖機(jī)制,比如行鎖,表鎖等,讀鎖,寫(xiě)鎖等,都是在做操作之前先上鎖。Java中synchronized 等獨(dú)占鎖就是悲觀鎖思想的實(shí)現(xiàn)。
樂(lè)觀鎖
總是假設(shè)最好的情況,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒(méi)有去更新這個(gè)數(shù)據(jù),可以使用版本號(hào)機(jī)制和CAS算法實(shí)現(xiàn)。樂(lè)觀鎖適用于多讀的應(yīng)用類(lèi)型,這樣可以提高吞吐量,像數(shù)據(jù)庫(kù)提供的類(lèi)似于write_condition機(jī)制,其實(shí)都是提供的樂(lè)觀鎖。在Java中java.util.concurrent.atomic包下面的原子變量類(lèi)就是使用了樂(lè)觀鎖的一種實(shí)現(xiàn)方式CAS實(shí)現(xiàn)的。
兩種鎖的使用場(chǎng)景
沖突真的很少發(fā)生的時(shí)候,用樂(lè)觀鎖就比較合適。
經(jīng)常產(chǎn)生沖突,用悲觀鎖就比較合適。

12.String、StringBuffer和StringBuilder的區(qū)別
在線(xiàn)程安全:StringBuilder是線(xiàn)程不安全的,而StringBuffer是線(xiàn)程安全的
運(yùn)行速度:StringBuilder > StringBuffer > String

13.char可以存儲(chǔ)漢字嗎為什么
char是按照字符存儲(chǔ)的,不管英文還是中文 占用占用2個(gè)字節(jié),用來(lái)儲(chǔ)存Unicode字符 unicode編碼字符集中包含了漢字,所以,char型變量中當(dāng)然可以存儲(chǔ)漢字啦。

15.簡(jiǎn)述HashMap的實(shí)現(xiàn)原理

重寫(xiě)HashMap需要重寫(xiě)hashCode()和equals()方法

16.HashMap和HashTable的區(qū)別
線(xiàn)程不安全和線(xiàn)程不安全
鍵值可為null鍵值不可為null
前者快后者慢

我們能否讓HashMap同步?
HashMap可以通過(guò)下面的語(yǔ)句進(jìn)行同步:
Map m = Collections.synchronizeMap(hashMap);

18.a=a+b與a+=b的區(qū)別
舉例:a為int,b為float 則a = a + b 需要強(qiáng)制類(lèi)型轉(zhuǎn)換,也就是我們常寫(xiě)的 a = (int) (a+b);
而我們的a += b 被我們的編譯器在編譯期做了一些小手腳。也就是編譯器幫我們進(jìn)行了強(qiáng)制類(lèi)型轉(zhuǎn)化。

& 和 &&的區(qū)別
&和&&都可以用作邏輯與的運(yùn)算符
&&還具有短路的功能
&還可以用作位運(yùn)算符

深拷貝和淺拷貝的區(qū)別
打個(gè)不太恰當(dāng)?shù)谋扔鳎阂粋€(gè)是復(fù)制一份新的 一個(gè)是弄了一個(gè)快捷方式

Java的八大基本數(shù)據(jù)類(lèi)型是什么
byte short int long float double boolean char

進(jìn)程、線(xiàn)程和協(xié)程的區(qū)別
1) 一個(gè)線(xiàn)程可以多個(gè)協(xié)程,一個(gè)進(jìn)程也可以多帶帶擁有多個(gè)協(xié)程
2) 線(xiàn)程進(jìn)程都是同步機(jī)制,而協(xié)程則是異步
3) 協(xié)程能保留上一次調(diào)用時(shí)的狀態(tài),每次過(guò)程重入時(shí),就相當(dāng)于進(jìn)入上一次調(diào)用的狀態(tài)

創(chuàng)建兩種線(xiàn)程的方式 他們有什么區(qū)別
1.繼承Thread類(lèi)
2.實(shí)現(xiàn)Runnable接口

守護(hù)線(xiàn)程:守護(hù)線(xiàn)程則是用來(lái)服務(wù)用戶(hù)線(xiàn)程的,如果沒(méi)有其他用戶(hù)線(xiàn)程在運(yùn)行,那么就沒(méi)有可服務(wù)對(duì)象,守護(hù)線(xiàn)程就會(huì)退出。

Array(數(shù)組)和ArrayList(列表)有什么區(qū)別
1)精辟闡述:
可以將 ArrayList想象成一種“會(huì)自動(dòng)擴(kuò)增容量的Array”。
2)Array([]):數(shù)組,最高效;但是其容量固定且無(wú)法動(dòng)態(tài)改變;

 ArrayList:  動(dòng)態(tài)數(shù)組,容量可動(dòng)態(tài)增長(zhǎng);但犧牲效率;

Runnable和Callable的區(qū)別
編寫(xiě)多線(xiàn)程程序一般有三種方法,Thread,Runnable,Callable.
Runnable和Callable的區(qū)別是,
(1)Callable規(guī)定的方法是call(),Runnable規(guī)定的方法是run().
(2)Callable的任務(wù)執(zhí)行后可返回值,而Runnable的任務(wù)是不能返回值得
(3)call方法可以?huà)伋霎惓?,run方法不可以
(4)Runnable是自從java1.1就有了,而Callable是1.5之后才加上去的

wait(),notify()和suspend(),resume()之間的區(qū)別
wait(),notify()有兩種形式一種是傳入一個(gè)時(shí)間參數(shù),自動(dòng)恢復(fù),一種是不傳參,不會(huì)自動(dòng)恢復(fù),必須使用notify()方法
suspend(),resume():suspend()方法很容易引起死鎖問(wèn)題,已經(jīng)不推薦使用了。

default,public,private,protected區(qū)別

tomcat調(diào)優(yōu)

聲明式事務(wù)

接口隔離

代碼塊、靜態(tài)代碼塊執(zhí)行順序

Java子父類(lèi)間靜態(tài)代碼塊、非靜態(tài)代碼塊、構(gòu)造方法的執(zhí)行順序
子類(lèi)A繼承父類(lèi)B,A a=new A();
正確的執(zhí)行順序是:父類(lèi)B靜態(tài)代碼塊->子類(lèi)A靜態(tài)代碼塊->父類(lèi)B非靜態(tài)代碼塊->父類(lèi)B構(gòu)造函數(shù)->子類(lèi)A非靜態(tài)代碼塊->子類(lèi)A構(gòu)造函數(shù)
也就是說(shuō)非靜態(tài)初始化塊的執(zhí)行順序要在構(gòu)造函數(shù)之前。

如何捕獲子線(xiàn)程異常
線(xiàn)程設(shè)計(jì)的理念:“線(xiàn)程的問(wèn)題應(yīng)該線(xiàn)程自己本身來(lái)解決,而不要委托到外部。”

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/74448.html

相關(guān)文章

  • 經(jīng)過(guò)了這么多場(chǎng)Java面試,我明白了這些道理

    摘要:的長(zhǎng)度為什么是的冪次方多線(xiàn)程并發(fā)相關(guān)問(wèn)題必問(wèn)創(chuàng)建線(xiàn)程的種方式。什么是線(xiàn)程安全。盡量少通過(guò)電話(huà)面試,效果不好。通過(guò)面試官可以大概判斷這家公司的情況。 最近3個(gè)月一口氣面了十幾家公司的Java開(kāi)發(fā)崗,大大小小的面試筆試加起來(lái)快20場(chǎng),收獲很多。本人畢業(yè)快2年了,畢業(yè)時(shí)在學(xué)校所在的2線(xiàn)省會(huì)城市找了家開(kāi)發(fā)公司做java的開(kāi)發(fā),前前后后做了1年半,感覺(jué)公司對(duì)技術(shù)沒(méi)有啥追求,做的項(xiàng)目翻來(lái)覆去就是S...

    Dean 評(píng)論0 收藏0
  • 盤(pán)點(diǎn)一下Github上開(kāi)源的Java面試/學(xué)習(xí)相關(guān)的倉(cāng)庫(kù)

    摘要:最近瀏覽,收藏了一些還算不錯(cuò)的面試學(xué)習(xí)相關(guān)的倉(cāng)庫(kù),分享給大家,希望對(duì)你有幫助。除了這九個(gè)倉(cāng)庫(kù),再推薦幾個(gè)不錯(cuò)的學(xué)習(xí)方向的倉(cāng)庫(kù)給大家。數(shù)高達(dá)的筆記后端尤其是程序員的學(xué)習(xí)倉(cāng)庫(kù)兩個(gè)算法相關(guān)的倉(cāng)庫(kù),刷的小伙伴必備 最近瀏覽 Github ,收藏了一些還算不錯(cuò)的 Java面試/學(xué)習(xí)相關(guān)的倉(cāng)庫(kù),分享給大家,希望對(duì)你有幫助。我暫且按照目前的 Star 數(shù)量來(lái)排序。 本文由 SnailClimb 整理...

    luxixing 評(píng)論0 收藏0
  • 一位大佬的親身經(jīng)歷總結(jié):簡(jiǎn)歷和面試的技巧

    摘要:我覺(jué)得了解簡(jiǎn)歷和面試的技巧可以幫助你更好的去學(xué)習(xí)重要的知識(shí)點(diǎn)以及更好地去準(zhǔn)備面試以及面試,說(shuō)實(shí)話(huà),我個(gè)人覺(jué)得這些東西還挺重要的。在本文里,我將介紹我這段時(shí)間里更新簡(jiǎn)歷和面試的相關(guān)經(jīng)歷。 分享一篇很不錯(cuò)的文章!本文作者曾經(jīng)寫(xiě)過(guò)《Java Web輕量級(jí)開(kāi)發(fā)面試教程》和 《Java核心技術(shù)及面試指南》這兩本書(shū)。我覺(jué)得了解簡(jiǎn)歷和面試的技巧可以幫助你更好的去學(xué)習(xí)重要的知識(shí)點(diǎn)以及更好地去準(zhǔn)備面試以...

    pingan8787 評(píng)論0 收藏0
  • 手撕面試官系列(七):面試必備之常問(wèn)并發(fā)編程高級(jí)面試專(zhuān)題

    摘要:如何在線(xiàn)程池中提交線(xiàn)程內(nèi)存模型相關(guān)問(wèn)題什么是的內(nèi)存模型,中各個(gè)線(xiàn)程是怎么彼此看到對(duì)方的變量的請(qǐng)談?wù)動(dòng)惺裁刺攸c(diǎn),為什么它能保證變量對(duì)所有線(xiàn)程的可見(jiàn)性既然能夠保證線(xiàn)程間的變量可見(jiàn)性,是不是就意味著基于變量的運(yùn)算就是并發(fā)安全的請(qǐng)對(duì)比下對(duì)比的異同。 并發(fā)編程高級(jí)面試面試題 showImg(https://upload-images.jianshu.io/upload_images/133416...

    Charles 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<