1、String镣煮、StringBuilder、StringBuffer的區(qū)別
String:字符串常量鄙麦,是一個常量典唇,值不會改變,例:s="aaa";s=s+"d"; ==>> s="aaad";
StringBuffer:字符創(chuàng)變量胯府,使用它線程安全
StringBuilder:字符創(chuàng)變量介衔,使用它線程不安全
執(zhí)行速度:StringBuilder > StringBuffer > String
2、list和set的區(qū)別
對于Set 和 List都是 接口 Collection 的子接口
主要的區(qū)別:
Set 不允許重復(fù),List允許重復(fù)
Set 沒有順序骂因,List有順序
3炎咖、常用的集合類,作用及使用場景
使用場景
(1) 對于需要快速插入寒波,刪除元素乘盼,應(yīng)該使用LinkedList;
(2) 對于需要快速隨機(jī)訪問元素俄烁,應(yīng)該使用ArrayList蹦肴;
(3) 對于“單線程環(huán)境” 或者 “多線程環(huán)境,但List僅僅只會被單個線程操作”猴娩,此時應(yīng)該使用非同步的類(如ArrayList)阴幌;
(4) 對于“多線程環(huán)境,且List可能同時被多個線程操作”卷中,此時矛双,應(yīng)該使用同步的類(如Vector)。
(5) HashSet是基于Hash算法實現(xiàn)的蟆豫,其性能通常都優(yōu)于TreeSet议忽。為快速查找而設(shè)計的Set,我們通常都應(yīng)該使用HashSet十减,在我們需要排序的功能時栈幸,我們才使用TreeSet愤估。
(6) HashMap和HashTable:HashMap去掉了HashTable的contains方法,但是加上了containsValue()和containsKey()方法速址。HashTable同步的玩焰,而HashMap是非同步的,效率上比HashTable要高芍锚。HashMap允許空鍵值昔园,而HashTable不允許。
HashMap:適用于Map中插入并炮、刪除和定位元素默刚。
Treemap:適用于按自然順序或自定義順序遍歷鍵(key)。
4逃魄、數(shù)據(jù)庫連接池
工作機(jī)制:
數(shù)據(jù)庫連接池在初始化時將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫連接放到連接池中荤西,這些數(shù)據(jù)庫連接的數(shù)量是由最小數(shù)據(jù)庫連接數(shù)來設(shè)定的。無論這些數(shù)據(jù)庫連接是否被使用伍俘,連接池都將一直保證至少擁有這么多的連接數(shù)量邪锌。連接池的最大數(shù)據(jù)庫連接數(shù)量限定了這個連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請求的連接數(shù)超過最大連接數(shù)量時养篓,這些請求將被加入到等待隊列中秃流。
常用參數(shù)及其含義:
(1) maxActive 連接池支持的最大連接數(shù),這里取值為20柳弄,表示同時最多有20個數(shù)據(jù)庫連接舶胀。一般把maxActive設(shè)置成可能的并發(fā)量就行了,設(shè) 0 為沒有限制碧注。
(2) maxIdle 連接池中最多可空閑maxIdle個連接 嚣伐,這里取值為20,表示即使沒有數(shù)據(jù)庫連接時依然可以保持20空閑的連接萍丐,而不被清除轩端,隨時處于待命狀態(tài)。設(shè) 0 為沒有限制逝变。
(3). minIdle 連接池中最小空閑連接數(shù)基茵,當(dāng)連接數(shù)少于此值時,連接池會創(chuàng)建連接來補(bǔ)充到該值的數(shù)量
(4). initialSize 初始化連接數(shù)目
(5). maxWait 連接池中連接用完時,新的請求等待時間,毫秒壳影,這里取值-1拱层,表示無限等待,直到超時為止宴咧,也可取值9000根灯,表示9秒后超時。超過時間會出錯誤信息
(6). removeAbandoned 是否清除已經(jīng)超過“removeAbandonedTimout”設(shè)置的無效連接。如果值為“true”則超過“removeAbandonedTimout”設(shè)置的無效連接將會被清除烙肺。設(shè)置此屬性可以從那些沒有合適關(guān)閉連接的程序中恢復(fù)數(shù)據(jù)庫的連接纳猪。
(7). removeAbandonedTimeout 活動連接的最大空閑時間,單位為秒 超過此時間的連接會被釋放到連接池中,針對未被close的活動連接
(8). minEvictableIdleTimeMillis 連接池中連接可空閑的時間,單位為毫秒 針對連接池中的連接對象(9). timeBetweenEvictionRunsMillis / minEvictableIdleTimeMillis 每timeBetweenEvictionRunsMillis毫秒秒檢查一次連接池中空閑的連接,把空閑時間超過minEvictableIdleTimeMillis毫秒的連接斷開,直到連接池中的連接數(shù)到minIdle為止.
5、遍歷某一文件夾下的文件和目錄(遞歸)
public void traverseFolder2(String path) {
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (null == files || files.length == 0) {
System.out.println("文件夾是空的!");
return;
} else {
for (File file2 : files) {
if (file2.isDirectory()) {
System.out.println("文件夾:" + file2.getAbsolutePath());
traverseFolder2(file2.getAbsolutePath());
} else {
System.out.println("文件:" + file2.getAbsolutePath());
}
}
}
} else {
System.out.println("文件不存在!");
}
}
6桃笙、線程的實現(xiàn)方法
從JDK的文檔上看氏堤,在Java中實現(xiàn)線程有兩種方式,一種是繼承Thread類怎栽,另一種是實現(xiàn)Runnable接口丽猬。
它們的區(qū)別是:
(1)Thread類本身也是實現(xiàn)了Runnable接口宿饱,因此也是實現(xiàn)了Runnable接口中的run方法熏瞄。
(2)當(dāng)使用繼承Thread類去實現(xiàn)線程時,我們需要重寫run方法谬以,因為Thread類中的run方法本身什么事情都不干强饮。
(3)當(dāng)使用實現(xiàn)Runnable接口去實現(xiàn)線程時,我們需要重寫run方法为黎,然后使用new Thread(Runnable)這種方式來生成線程對象邮丰,這個時候線程對象中的run方法才會去執(zhí)行我們自己實現(xiàn)的Runnable接口中的run方法。
7铭乾、Thread.sleep()和 Object.wait() 有什么區(qū)別?
最主要是sleep方法沒有釋放鎖剪廉,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法炕檩。
8斗蒋、方法重載和重寫的區(qū)別
方法重載是指同一個類中的多個方法具有相同的名字,但這些方法具有不同的參數(shù)列表,即參數(shù)的數(shù)量或參數(shù)類型不能完全相同
方法重寫是存在子父類之間的,子類定義的方法與父類中的方法具有相同的方法名字,相同的參數(shù)表和相同的返回類型
9、final finally finalize區(qū)別
final用于聲明屬性笛质,方法和類泉沾,分別表示屬性不可交變,方法不可覆蓋妇押,類不可繼承跷究。
finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行敲霍。
finalize是Object類的一個方法俊马,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,供垃圾收集時的其他資源回收肩杈,例如關(guān)閉文件等柴我。
10、JSP中動態(tài)include和靜態(tài)include區(qū)別
靜態(tài) INCLUDE 用 include 偽碼實現(xiàn) , 不會檢查所含文件的變化 , 適用于包含靜態(tài)頁面 <%@ include file="included.htm" %> 锋恬。先將文件的代碼被原封不動地加入到了主頁面從而合成一個文件屯换,然后再進(jìn)行翻譯
動態(tài) INCLUDE 用 jsp:include 動作實現(xiàn) <jsp:include page="included.jsp" flush="true" /> 它總是會檢查所含文件中的變化 , 適合用于包含動態(tài)頁面 , 并且可以帶參數(shù)。各個文件分別先編譯,然后組合成一個文件彤悔。
兩者有幾個不同點(diǎn):
(1)靜態(tài)導(dǎo)入是將被導(dǎo)入頁面的代碼完全融入嘉抓,兩個頁面融合成一個整體的servlet;而動態(tài)導(dǎo)入則在servlet中使用include方法來引入被導(dǎo)入頁面的內(nèi)容晕窑。
(2)靜態(tài)導(dǎo)入時被導(dǎo)入的頁面的編譯指令會起作用抑片,而動態(tài)導(dǎo)入時被導(dǎo)入的頁面的編譯指令則失去作用,只是插入被導(dǎo)入頁面的body內(nèi)容杨赤。
(3)動態(tài)包含可以包含相同變量敞斋,而靜態(tài)包含不行。
(4)如果被包含文件經(jīng)常變動疾牲,則應(yīng)該使用動態(tài)包含植捎,而使用靜態(tài)包含時,改變被包含文件后阳柔,有可能不能及時更新
11焰枢、數(shù)據(jù)庫事務(wù)
是指作為單個邏輯工作單元執(zhí)行的一系列操作,要么完全地執(zhí)行舌剂,要么完全地不執(zhí)行济锄。
原子性:事務(wù)必須是原子工作單元;對于其數(shù)據(jù)修改霍转,要么全都執(zhí)行荐绝,要么全都不執(zhí)行。
一致性:事務(wù)在完成時避消,必須使所有的數(shù)據(jù)都保持一致狀態(tài)低滩。
隔離性:由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。
持久性:事務(wù)完成之后沾谓,它對于系統(tǒng)的影響是永久性的委造。該修改即使出現(xiàn)致命的系統(tǒng)故障也將一直保持。
12均驶、垃圾回收機(jī)制