1基本數(shù)據(jù)類型和對應(yīng)包裝類
整型:byte Byte short Short ing Integer long Long
浮點(diǎn)型:float Float double Double
字符型:char Character
布爾型:boolean Boolean
2final finally finalize的區(qū)別 final修飾(list)有什么的特性
final為修飾關(guān)鍵字 意思為最終的 可以修飾變量 方法 類
final修飾變量時 表示該變量為常量不能被改變
final修飾方法時該方法不餓呢過被重寫
final修飾類時 該類為最終類不餓呢過被實(shí)現(xiàn)
final修飾list基本無影響
finally屬于異常處理機(jī)制的try..catch..finally的一部分finally的部分一定會執(zhí)行
一般用于關(guān)閉資源
finalize是JAVA中GC(垃圾回收)的一個方法 用于在下一次訪問時回收垃圾對象
3arraylist和linkedlist,hashmap和hashtable區(qū)別
ArrayList與LinkList的區(qū)別
ArrayLiat的底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組結(jié)構(gòu) 適合做查詢不適合做增刪 支持隨機(jī)查
詢 時間復(fù)雜度為O(1)
LinkLIst的底層數(shù)據(jù)結(jié)構(gòu)是雙向鏈表結(jié)構(gòu) 適合做增刪不適合查詢 不支持隨機(jī)
查詢 時間復(fù)雜度為O(n)
4HashMap與HashTable的區(qū)別
HashMap沒有排序 允許出現(xiàn)一個null鍵和多個null值 HashTable不允許
HashTable把Contains方法去掉改為ContainsValue和ContainsKey兩個方法
HashTable繼承Dictionary類實(shí)現(xiàn)Map接口 HashMap是Map接口的實(shí)現(xiàn)
Hashtable的方法使用synchornize關(guān)鍵字線程安全 HashMap線程不安全
Hashtable使用Hash算法 HashMap使用rehash算法
4多線程迸發(fā)可能出現(xiàn)的問題
解決線程安全與線程不安全問題時可能發(fā)生死鎖
解決死鎖可以使用線程同步的方法wait()和notify()
5concrrenthashmap的底層實(shí)現(xiàn)
底層為鏈表+分段數(shù)組結(jié)構(gòu) 線程安全的效率高 默認(rèn)值為16
使用鎖分離技術(shù)敛劝,適用于高并發(fā)
插入前檢測需不需要擴(kuò)容间聊,有效避免無效擴(kuò)容
6static的特點(diǎn) 在什么階段實(shí)現(xiàn)初始化
static為修飾關(guān)鍵字 意思為靜態(tài) 可以修飾屬性 方法 代碼塊
static修飾屬性時該屬性為靜態(tài)屬性 又可以叫做類屬性 隸屬于該類 可以直接使用類進(jìn)
行訪問
static修飾方法時該方法為靜態(tài)方法 屬于該類? 靜態(tài)方法不能直接調(diào)用非靜態(tài)方法 需
要創(chuàng)建對象
static代碼塊時代碼塊為靜態(tài)代碼塊 可以用于做程序優(yōu)化 只會在加載類文件時加載一
次
7抽象類和接口的區(qū)別
抽象類與接口共同點(diǎn)是都不能被實(shí)例化(就是不能創(chuàng)建出該文件的對象)
不同點(diǎn) 1抽象類可以定義構(gòu)造方法 接口不能
2抽象類可以定義變量和常量 接口只能定義常量
3抽象類只能單繼承接口是多實(shí)現(xiàn)
4抽象類可以有普通法方法 接口中是只能有抽象方法
8講一下string stringbuffer stringbuilder的區(qū)別
String Stringbuffer StringBuilder都是用于做字符操作的
String 是字符長度不可變的 StringBuffer和StringBuilder是長度可變的
Stringbuffer使用了synchornize關(guān)鍵字是線程安全的 StringBUilder是線程不安全的
9八種常用的排序方法 按照穩(wěn)定性區(qū)別 實(shí)際在項(xiàng)目中用夠哪幾種排序
穩(wěn)定:冒泡,插入,歸并排序类溢,基數(shù)排序
不穩(wěn)定:快速端圈,選擇,堆排序埠巨,希爾排序随闺,
在進(jìn)行Hash算法時底層使用堆排序
數(shù)組對數(shù)進(jìn)行的排序使用快速排序方式
10TCP/IP與UDP協(xié)議的區(qū)別 他們的應(yīng)用場景
TCP/ID可靠的網(wǎng)絡(luò)傳輸應(yīng)用于郵件,下載淮阐。? UDP不可靠網(wǎng)絡(luò)傳輸 應(yīng)用于直播
11==與equals的區(qū)別
==可以用于判斷基本數(shù)據(jù)類型的值是否相等 也可以用于判斷兩個對象的地址是否相同叮阅,
也就是判斷兩個對象收費(fèi)是同一個對象
equals通常使用與判斷字符是否相同
12對JAVA中的synchronized與volatile兩個關(guān)鍵字有什么樣的看法
volatile的作用就是使它修飾的變量的讀寫操作都必須在內(nèi)存中進(jìn)行,
以便于其他線程感知到變量值的變化
volatile本質(zhì)是在告訴jvm當(dāng)前變量在寄存器中的值是不確定的,需要從主存中讀
取,synchronized則是鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問該變量,其他線程被阻塞住.
volatile僅能使用在變量級別,synchronized則可以使用在變量,方法.
volatile僅能實(shí)現(xiàn)變量的修改可見性,但不具備原子特性,而synchronized則可以保證變
量的修改可見性和原子性.
volatile不會造成線程的阻塞,而synchronized可能會造成線程的阻塞.
volatile標(biāo)記的變量不會被編譯器優(yōu)化,而synchronized標(biāo)記的變量可以被編譯器優(yōu)化.
13對IO流的理解
IO流是用于操作本地文件輸入輸出的 按照操作分可分為輸出流和輸入流 按照類型分可
分為字符流字節(jié)流
JAVA的IO只要分為三個部分
1.流式部分——IO的主體部分
2.非流式部分——主要包含一些輔助流式部分的類如:file
類.RandomAccessfile類等
3.文件讀取部分和安全相關(guān)的類 如:serializablePermission類
流具體分可分為:
1.介質(zhì)流 2.過濾流
14spring? IOC? AOP的概念? 通過什么樣的技術(shù)實(shí)現(xiàn)的
IOC(控制反轉(zhuǎn))思想將對象的控制權(quán)限有程序猿轉(zhuǎn)交給Spring框架泣特。
AOP(面向切面編程)思想就是將一些具有共同特性的放在一塊浩姥,建立一個切入點(diǎn)。
15SpringMVC的實(shí)現(xiàn)原理
springMVC使用的是一種web層MVC框架状您,用于替代servlet(處理響應(yīng)請求勒叠,獲取表單參
數(shù))。springMVC是方法級別的攔截
16Mybatis的實(shí)現(xiàn)原理
mybatis使用原聲的JDBC類對數(shù)據(jù)進(jìn)行操作膏孟,只通過SqlsessionFactory,SQLSession
Ecec,,StatementHandler眯分,ParameterHandler,ResultHandler和TypeHandler等幾個處理器封裝
了這些過程
17講清楚堆和棧的基本構(gòu)成關(guān)系 棧空間和堆空間分配的基本原則
JVM內(nèi)存一共分為五個區(qū):寄存器柒桑,本地方法區(qū)弊决,方法區(qū),棧內(nèi)存魁淳,堆內(nèi)存
堆空間一般用與存放創(chuàng)建的對象 椘空間用于存放進(jìn)本數(shù)據(jù)類型
18trylock lockINterruptibly 與 lock的區(qū)別? lock為鎖的意思
1)try...lock方法
如果鎖是自由的并且被當(dāng)前線程獲取,或者當(dāng)前線程已經(jīng)保持該鎖界逛,則返回
true昆稿;否則返回 false
2)lock方法
i:如果當(dāng)前鎖是自由的并且線程獲取該鎖,立即返回仇奶,并將保持計數(shù)器設(shè)置為1
ii:如果當(dāng)前線程持有鎖貌嫡,將保持計數(shù)加 1,并且該方法立即返回该溯。
iii:如果其他線程保持鎖岛抄,當(dāng)前線程處于休眠狀態(tài),此時當(dāng)前線程鎖的計數(shù)器
設(shè)置為1
3)lockInterruptibly
i:如果當(dāng)前線程未被中斷狈茉,則獲取鎖夫椭。
ii:如果該鎖沒有被另一個線程保持,則獲取該鎖并立即返回氯庆,將鎖的保持計數(shù)
設(shè)置為 1蹭秋。
iii:如果當(dāng)前線程已經(jīng)保持此鎖扰付,則將保持計數(shù)加 1,并且該方法立即返回仁讨。
iv:如果其他線程保持鎖羽莺,當(dāng)前線程中斷,處于休眠直到
1)當(dāng)前線程獲得鎖
2)其他線程被中斷
19常用的工廠設(shè)計模式有哪些洞豁?實(shí)際項(xiàng)目中遇到過那些設(shè)計盐固?
簡單工廠 工廠方法 抽象工廠
在hibernate中使用sessionFactory,和在Mybatis中使用sqlsessionfactory
20講一下悲觀鎖和樂觀鎖
悲觀鎖
總是假設(shè)最壞的情況丈挟,每次去拿數(shù)據(jù)的時候都認(rèn)為別人會修改刁卜,所以每次在
拿數(shù)據(jù)的時候都會上鎖,這樣別人想拿這個數(shù)據(jù)就會阻塞直到它拿到鎖(共
享資源每次只給一個線程使用曙咽,其它線程阻塞蛔趴,用完后再把資源轉(zhuǎn)讓給其它
線程)。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫里邊就用到了很多這種鎖機(jī)制例朱,比如行鎖孝情,表鎖
等,讀鎖茉继,寫鎖等咧叭,都是在做操作之前先上鎖。Java中synchronized
和ReentrantLock等獨(dú)占鎖就是悲觀鎖思想的實(shí)現(xiàn)烁竭。
樂觀鎖
總是假設(shè)最好的情況菲茬,每次去拿數(shù)據(jù)的時候都認(rèn)為別人不會修改,
所以不會上鎖派撕,但是在更新的時候會判斷一下在此期間別人有沒
有去更新這個數(shù)據(jù)婉弹,可以使用版本號機(jī)制和CAS算法實(shí)現(xiàn)。
樂觀鎖適用于多讀的應(yīng)用類型终吼,這樣可以提高吞吐量镀赌,
像數(shù)據(jù)庫提供的類似于write_condition機(jī)制,
其實(shí)都是提供的樂觀鎖际跪。
在Java中java.util.concurrent.atomic包下面的原子變量類
就是使用了樂觀鎖的一種實(shí)現(xiàn)方式CAS(compare and swap)實(shí)現(xiàn)的商佛。
21.sql查詢所有課目成績大于20的人
where后面不能用聚合函數(shù)
錯誤:select bookName from books where min(bookPrice)>20;
正確:select bookName from books group by bookName having min(bookPrice)
>20;
注意:出現(xiàn)在select后面的列名,要么在group by后面出現(xiàn)過姆打,要么在聚合函數(shù)中出現(xiàn)
過