2018-08-05 3W+字長(zhǎng)文深度總結(jié)|程序員面試題精華版集合(內(nèi)附思維導(dǎo)圖)瞎惫!

原文地址:https://juejin.im/entry/5b6259036fb9a04fa42fce3c

有趣有內(nèi)涵的文章第一時(shí)間送達(dá)!

[圖片上傳中...(image-efe1db-1533449208860-7)]

1拷呆、在JAVA中如何跳出當(dāng)前的多重嵌套循環(huán)欲侮?在Java中,要想跳出多重循環(huán)吝岭,可以在外面的循環(huán)語句前定義一個(gè)標(biāo)號(hào)三痰,然后在里層循環(huán)體的代碼中使用帶有標(biāo)號(hào)的break語句,即可跳出外層循環(huán)窜管。例如散劫,

ok: for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {System.out.println("i=" + i + ",j=" + j);if (j == 5)break ok;  }}

另外,我個(gè)人通常并不使用標(biāo)號(hào)這種方式幕帆,而是讓外層的循環(huán)條件表達(dá)式的結(jié)果可以受到里層循環(huán)體代碼的控制获搏,例如,要在二維數(shù)組中查找到某個(gè)數(shù)字失乾。

int arr[][] = { { 1, 2, 3 }, { 4, 5, 6, 7 }, { 9 } };boolean found = false;for (int i = 0; i < arr.length && !found; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.println("i=" + i + ",j=" + j);if (arr[i][j] == 5) {found = true;break;}}}

2常熙、請(qǐng)說出作用域public,private碱茁,protected裸卫,以及不寫時(shí)的區(qū)別。

  • private修飾的成員變量和函數(shù)只能在類本身和內(nèi)部類中被訪問纽竣。

  • protected 修飾的成員變量和函數(shù)能被類本身墓贿、子類及同一個(gè)包中的類訪問。

  • public修飾的成員變量和函數(shù)可以被類蜓氨、子類募壕、同一個(gè)包中的類以及任意其他類訪問。

默認(rèn)情況(不寫)下语盈,屬于一種包訪問舱馅,即能被類本身以及同一個(gè)包中的類訪問。下面這個(gè)表能清楚的說明java中作用域操作符的作用:

作用域 當(dāng)前類 同一package 子孫類 其他package
public
protected ×
friendly × ×
private × × ×

3刀荒、說說對(duì)javaee中的session的理解代嗤,你是怎么用session的?在servlet 的api中缠借,session表示的是瀏覽器和web服務(wù)器的一次會(huì)話干毅。在web服務(wù)器中是通過session來區(qū)別不同的瀏覽器的,因?yàn)閣eb 服務(wù)器采用的是http協(xié)議進(jìn)行通訊泼返,web 服務(wù)器根本不知道正在請(qǐng)求的瀏覽器是誰硝逢,它不會(huì)記錄瀏覽器的訪問信息,所以需要session來記錄發(fā)出請(qǐng)求的瀏覽器是誰,session 和瀏覽器之間是怎么保持通信的呢渠鸽? 當(dāng)瀏覽器第一次對(duì)一個(gè)web站點(diǎn)發(fā)出請(qǐng)求后叫乌,web服務(wù)器按照請(qǐng)求路徑查找資源,并生成一個(gè)session徽缚,web服務(wù)器將查找到的資源作為響應(yīng)返回給瀏覽器憨奸,在這個(gè)響應(yīng)中會(huì)附帶上一個(gè)特殊名稱的cookie信息,這個(gè)cookie 就是session的id。之后瀏覽器再次發(fā)出請(qǐng)求時(shí),會(huì)在請(qǐng)求信息中帶上這個(gè)cookie信息乌奇,這個(gè)cookie 的作用就是用來告訴web服務(wù)器,我這個(gè)瀏覽器已經(jīng)訪問過你了婿奔,你不需要再生成session了。

Session 的應(yīng)用有很多

  • 1.過濾未登錄用戶可以用于存放用戶信息,當(dāng)用戶登錄后,就將用戶信息放入session盐类,如果沒有登錄,在session中就不會(huì)有用戶信息痕寓,這樣就可以防止未登錄用戶查看一些信息傲醉。

  • 2.防止表單重復(fù)提交

  • 3.網(wǎng)上商城中的購(gòu)物車

4蝇闭、分層設(shè)計(jì)的好處呻率?把各個(gè)功能按調(diào)用流程進(jìn)行了模塊化,模塊化帶來的好處就是可以隨意組合呻引。分層的好處:

  • 1.實(shí)現(xiàn)了軟件之間的解耦

  • 2.便于進(jìn)行分工

  • 3.便于維護(hù)

  • 4.提高軟件組件的重用

  • 5.便于替換某種產(chǎn)品礼仗,比如持久層用的是hibernate,需要更換產(chǎn)品為mybatis,就不用改其他業(yè)務(wù)的代碼逻悠,直接把配置一改即可

  • 6.便于產(chǎn)品功能的擴(kuò)展

  • 7.便于適用用戶需求的不斷變化

5元践、java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?

靠的是父類或接口定義的引用變量可以指向子類或具體實(shí)現(xiàn)類的實(shí)例對(duì)象童谒,而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定单旁,就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法饥伊,而不是引用變量的類型中定義的方法象浑。

6、abstract(抽象類)和interface(接口)有什么區(qū)別?含有abstract修飾符的class即為抽象類琅豆,abstract 類不能創(chuàng)建的實(shí)例對(duì)象愉豺。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的茫因。abstract class類中定義抽象方法必須在具體(Concrete)子類中實(shí)現(xiàn)蚪拦,所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果子類沒有實(shí)現(xiàn)抽象父類中的所有抽象方法驰贷,那么子類也必須定義為abstract類型盛嘿。

接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的饱苟。接口中的方法定義默認(rèn)為public abstract類型孩擂,接口中的成員變量類型默認(rèn)為public static final。下面比較一下兩者的語法區(qū)別:

  • 1.抽象類可以有構(gòu)造方法箱熬,接口中不能有構(gòu)造方法类垦。

  • 2.抽象類中可以有普通成員變量,接口中沒有普通成員變量

  • 3.抽象類中可以包含非抽象的普通方法城须,接口中的所有方法必須都是抽象的蚤认,不能有非抽象的普通方法。

  • 4.抽象類中的抽象方法的訪問類型可以是public糕伐,protected和默認(rèn)類型砰琢,但接口中的抽象方法只能是public類型的,并且默認(rèn)即為public abstract類型良瞧。

  • 5.抽象類中可以包含靜態(tài)方法陪汽,接口中不能包含靜態(tài)方法

  • 6.抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意褥蚯,但接口中定義的變量只能是public static final類型挚冤,并且默認(rèn)即為public static final類型。

  • 7.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口赞庶,但只能繼承一個(gè)抽象類训挡。

7、構(gòu)造方法Constructor是否可被override(重寫)?構(gòu)造方法Constructor不能被繼承歧强,因此不能重寫Override澜薄,但可以被重載Overload。

8摊册、面向?qū)ο蟮奶卣饔心男┓矫妫?/strong>面向?qū)ο蟮娜筇卣鳎?/p>

  • 封裝:保證對(duì)象自身數(shù)據(jù)的完整性和安全性肤京。

  • 繼承:建立類之間的關(guān)系,實(shí)現(xiàn)代碼復(fù)用茅特,方便系統(tǒng)的擴(kuò)展忘分。

  • 多態(tài):相同的方法調(diào)用,可以實(shí)現(xiàn)不同的實(shí)現(xiàn)方式温治。

9饭庞、String是最基本的數(shù)據(jù)類型嗎,是否可以繼承String類?java的基本數(shù)據(jù)類型有以下8種:

  • 整型: byte short int long

  • 浮點(diǎn)型: float double

  • 字符型: char

  • 布爾: boolean

java.lang.String類是final類型的熬荆,因此不可以繼承這個(gè)類舟山、也不能修改這個(gè)類 。為了提高效率節(jié)省空間,對(duì)于要經(jīng)常修改的字符串累盗,建議使用StringBuffer類寒矿。

10、數(shù)組有沒有l(wèi)ength()這個(gè)方法? String有沒有l(wèi)ength()這個(gè)方法若债?數(shù)組沒有l(wèi)ength()這個(gè)方法符相,有l(wèi)ength的屬性。String有l(wèi)ength()這個(gè)方法蠢琳。

11啊终、String s = new String("abc");創(chuàng)建了幾個(gè)String Object? 二者之間有什么區(qū)別?答案:一個(gè)或者兩個(gè)解析:

  • 1.如果String緩沖區(qū)中傲须,已經(jīng)創(chuàng)建"abc"蓝牲,則不會(huì)繼續(xù)創(chuàng)建,此時(shí)只創(chuàng)建了一個(gè)對(duì)象new String("abc")泰讽;

  • 2.如果String緩沖區(qū)中例衍,沒有創(chuàng)建"abc",則會(huì)創(chuàng)建兩個(gè)對(duì)象已卸,一個(gè)對(duì)象的值是"abc"佛玄,一個(gè)對(duì)象new String("abc")。

12累澡、下面這條語句一共創(chuàng)建了多少個(gè)對(duì)象:String s="a"+"b"+"c"+"d"只創(chuàng)建了一個(gè)String對(duì)象梦抢,因?yàn)檫@行代碼被編譯器編譯時(shí)進(jìn)行了優(yōu)化,相當(dāng)于直接定義了一個(gè)”abcd”的字符串永乌,所以只創(chuàng)建了一個(gè)String對(duì)象惑申。

13具伍、try {}里有一個(gè)return語句翅雏,那么緊跟在這個(gè)try后的finally {}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行人芽,在return前還是后?finally中的代碼肯定會(huì)執(zhí)行望几,但是會(huì)先執(zhí)行try中的代碼,如果try中有return萤厅,那么return的東西會(huì)先放到函數(shù)棧中橄抹,然后再執(zhí)行finally中的代碼。

  • ①惕味、如果finally中也有return楼誓,則會(huì)直接返回并終止程序,函數(shù)棧中的return不會(huì)被完成名挥;

  • ②疟羹、如果finally中沒有return,則在執(zhí)行完finally中的代碼之后,會(huì)將函數(shù)棧中的try中的return的內(nèi)容返回并終止程序榄融;

14参淫、final, finally, finalize的區(qū)別

  • Final:是全局變量聲明的時(shí)候使用,意思是這個(gè)變量不可被修改愧杯,不可被override涎才,一般用于聲明常量,或者系統(tǒng)設(shè)置的值力九。

  • finally:是在異常處理時(shí)提供finally塊來執(zhí)行任何清除操作耍铜。不管有沒有異常被拋出、捕獲跌前,finally塊都會(huì)被執(zhí)行业扒。

  • finalize:是方法名。java技術(shù)允許使用finalize()方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作舒萎。

15程储、運(yùn)行時(shí)異常與一般異常有何異同?Java提供了兩類主要的異常:運(yùn)行時(shí)異常runtime exception和一般異常checked exception

  • 運(yùn)行時(shí)異常runtime exception臂寝,我們可以不處理章鲤。這樣的異常由虛擬機(jī)接管。出現(xiàn)運(yùn)行時(shí)異常后咆贬,系統(tǒng)會(huì)把異常一直往上層拋败徊,一直遇到處理代碼。如果不對(duì)運(yùn)行時(shí)異常進(jìn)行處理掏缎,那么出現(xiàn)運(yùn)行時(shí)異常之后皱蹦,要么是線程中止,要么是主程序終止眷蜈。

  • 一般異常checked exception沪哺,JAVA要求程序員對(duì)其進(jìn)行try catch處理。所以酌儒,面對(duì)這種異常不管我們是否愿意辜妓,只能自己去寫一大堆catch塊去處理可能的異常。

16忌怎、error和exception有什么區(qū)別?

  • Error(錯(cuò)誤)表示系統(tǒng)級(jí)的錯(cuò)誤和程序不必處理的異常籍滴,是java運(yùn)行環(huán)境中的內(nèi)部錯(cuò)誤或者硬件問題。比如:內(nèi)存資源不足等榴啸。對(duì)于這種錯(cuò)誤孽惰,程序基本無能為力,除了退出運(yùn)行外別無選擇鸥印,它是由Java虛擬機(jī)拋出的勋功。

  • Exception(違例)表示需要捕捉或者需要程序進(jìn)行處理的異常腥例,它處理的是因?yàn)槌绦蛟O(shè)計(jì)的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程序必須處理的酝润。Exception又細(xì)分為運(yùn)行時(shí)異常runtime exception燎竖,受檢查異常checked exception(一般異常)。

17要销、請(qǐng)寫出你最常見到的5個(gè)運(yùn)行時(shí)異常 runtime exception

  • ClassCastException 類型強(qiáng)制轉(zhuǎn)換異常

  • ClassNotFoundException 類沒找到時(shí)构回,拋出該異常

  • FileNotFoundException 文件未找到異常

  • NullPointerException 空指針異常

  • SQLException 操作數(shù)據(jù)庫(kù)異常

  • ArithmeticException 算術(shù)異常

  • IllegalArgumentException 傳遞非法參數(shù)異常

  • IndexOutOfBoundsException 下標(biāo)越界異常

  • NoSuchElementException 方法未找到異常

18、Java語言如何進(jìn)行異常處理疏咐,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義纤掸?在try塊中可以拋出異常嗎?

  • try{}語句塊 中放的是要檢測(cè)的java代碼浑塞,可能有會(huì)拋出異常借跪,也可能會(huì)正常執(zhí)行;

  • catch(異常類型){}塊 是當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到try塊中所拋出的異常對(duì)象時(shí),會(huì)尋找能處理這一異常的catch塊來進(jìn)行處理(可以有多個(gè)catch塊);

  • finally{}塊 不管系統(tǒng)有沒有拋出異常都會(huì)去執(zhí)行,一般用來釋放資源。除了在之前執(zhí)行了System.exit(0);

  • throw 用于手動(dòng)拋出異常睡榆。作為程序員可以在任意位置手動(dòng)拋出異常;

  • throws 用于在方法上標(biāo)識(shí)要拋出的異常,拋出的異常交由調(diào)用者處理;

19果港、ArrayList和Vector、LinkedList的區(qū)別糊昙?

  • (1)Vector是線程安全的辛掠,而ArrayList不是。

  • (2)當(dāng)存儲(chǔ)空間不足的時(shí)候释牺,ArrayList默認(rèn)增加為原來的50%萝衩,Vector默認(rèn)增加為原來的一倍。

  • (3)Vector可以設(shè)置容量增加的參數(shù)没咙,而ArrayList不可以猩谊。

  • (4)LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷镜撩,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可预柒,所以插入速度較快队塘。

20袁梗、List 和 Map 區(qū)別?

  • (1)、List是存儲(chǔ)單列數(shù)據(jù)的集合憔古,List中存儲(chǔ)的數(shù)據(jù)是有順序遮怜,并且允許重復(fù);

  • (2)鸿市、Map是存儲(chǔ)鍵和值這樣的雙列數(shù)據(jù)的集合锯梁,Map中存儲(chǔ)的數(shù)據(jù)是沒有順序的即碗,其鍵是不能重復(fù)的,它的值是可以有重復(fù)的陌凳。

21剥懒、List、Map合敦、Set三個(gè)接口初橘,存取元素時(shí),各有什么特點(diǎn)充岛?List與Set都是單列元素的集合保檐,它們有一個(gè)共同的父接口Collection。

  • (1)List表示有先后順序的集合存元素:多次調(diào)用add(Object)方法時(shí)崔梗,每次加入的對(duì)象按先來后到的順序排序夜只,也可以插隊(duì),即調(diào)用add(int index,Object)方法蒜魄,就可以指定當(dāng)前對(duì)象在集合中的存放位置扔亥。取元素:

方法1:Iterator接口取得所有,逐一遍歷各個(gè)元素方法2:調(diào)用get(index i)來明確說明取第幾個(gè)谈为。

  • (2)Set里面不允許有重復(fù)的元素存元素:add方法有一個(gè)boolean的返回值砸王,當(dāng)集合中沒有某個(gè)元素,此時(shí)add方法可成功加入該元素時(shí)峦阁,則返回true谦铃;當(dāng)集合含有與某個(gè)元素equals相等的元素時(shí),此時(shí)add方法無法加入該元素榔昔,返回結(jié)果為false驹闰。取元素:沒法說取第幾個(gè),只能以Iterator接口取得所有的元素撒会,再逐一遍歷各個(gè)元素嘹朗。

  • (3)Map是雙列的集合,存放用put方法:put(obj key,obj value)诵肛,每次存儲(chǔ)時(shí)屹培,要存儲(chǔ)一對(duì)key/value,不能存儲(chǔ)重復(fù)的key怔檩,這個(gè)重復(fù)的規(guī)則也是按equals比較相等褪秀。取元素:用get(Object key)方法根據(jù)key獲得相應(yīng)的value。

22薛训、說出一些常用的類媒吗,包,接口乙埃,請(qǐng)各舉例5個(gè)

  • 常用的類:ObjectDateFileExceptionRandomStringinteger

  • 常用的包:java.iojava.langjava.utiljava.sqljava.net

  • 常用的接口:SetListMapCollectionRunnableSessionServlet

23闸英、java中有幾種類型的流锯岖?JDK為每種類型的流提供了一些抽象類以供繼承,請(qǐng)說出他們分別是哪些類甫何?

  • 基于流方向:InputStreamOutputStream

  • 基于字符:ReaderWriter

  • 流和字符之間的配接:InputStreamReaderOutputStreamWriter

24出吹、字節(jié)流與字符流的區(qū)別?

  • (1)字節(jié)流在操作時(shí)本身不會(huì)用到緩沖區(qū)(內(nèi)存)辙喂,是文件本身直接操作的趋箩,而字符流在操作時(shí)使用了緩沖區(qū),通過緩沖區(qū)再操作文件加派。

  • (2)字節(jié)流中叫确,中文可能會(huì)亂碼,字符流不會(huì)芍锦。

25竹勉、什么是java序列化,如何實(shí)現(xiàn)java序列化娄琉?或者請(qǐng)解釋Serializable接口的作用次乓。序列化就是一種用來處理對(duì)象流的機(jī)制,所謂對(duì)象流也就是將對(duì)象的內(nèi)容進(jìn)行流化孽水∑毖可以對(duì)流化后的對(duì)象進(jìn)行讀寫操作,也可將流化后的對(duì)象傳輸于網(wǎng)絡(luò)之間女气。序列化是為了解決在對(duì)對(duì)象流進(jìn)行讀寫操作時(shí)所引發(fā)的問題杏慰。

序列化的實(shí)現(xiàn):將需要被序列化的類實(shí)現(xiàn)Serializable接口,然后使用一個(gè)輸出流(如:FileOutputStream)來構(gòu)造一個(gè)ObjectOutputStream(對(duì)象流)對(duì)象炼鞠,接著缘滥,使用ObjectOutputStream對(duì)象的writeObject(Object obj)方法就可以將參數(shù)為obj的對(duì)象寫出(即保存其狀態(tài)),要恢復(fù)的話則用輸入流谒主;

Serializable.只有實(shí)現(xiàn)了 serializable和Externalizable接口的類的對(duì)象才能被序列化

Java 序列化技術(shù)可以使你將一個(gè)對(duì)象的狀態(tài)寫入一個(gè)Byte 流里朝扼,并且可以從其它地方把該Byte 流里的數(shù)據(jù)讀出來,重新構(gòu)造一個(gè)相同的對(duì)象霎肯。這種機(jī)制允許你將對(duì)象通過網(wǎng)絡(luò)進(jìn)行傳播擎颖,并可以隨時(shí)把對(duì)象持久化到數(shù)據(jù)庫(kù)、文件等系統(tǒng)里观游。Java的序列化機(jī)制是RMI搂捧、EJB等技術(shù)的技術(shù)基礎(chǔ)。用途:利用對(duì)象的序列化實(shí)現(xiàn)保存應(yīng)用程序的當(dāng)前工作狀態(tài)备典,下次再啟動(dòng)的時(shí)候?qū)⒆詣?dòng)地恢復(fù)到上次執(zhí)行的狀態(tài)异旧。

26、GC是什么? 為什么要有GC?GC是垃圾收集的意思提佣,內(nèi)存處理是編程人員容易出現(xiàn)問題的地方吮蛹,忘記或者錯(cuò)誤的內(nèi)存會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動(dòng)監(jiān)測(cè)對(duì)象是否超過作用域從而達(dá)到自動(dòng)回收內(nèi)存的目的拌屏,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法潮针。Java程序員不用擔(dān)心內(nèi)存管理,因?yàn)槔占鲿?huì)自動(dòng)進(jìn)行管理倚喂。

27每篷、排序都有哪幾種方法?請(qǐng)用JAVA實(shí)現(xiàn)一個(gè)冒泡排序端圈。排序的方法有:

  • 插入排序(直接插入排序焦读、希爾排序)

  • 交換排序(冒泡排序、快速排序)

  • 選擇排序(直接選擇排序舱权、堆排序)

  • 歸并排序

  • 分配排序(箱排序矗晃、基數(shù)排序)

  • 冒泡排序:

for(int i=0;i<arr.length-1;i++){ //外層循環(huán)控制排序趟數(shù)for(int j=0;j<arr.length-1-i;j++){ //內(nèi)層循環(huán)控制每一趟排序多少次if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}

冒泡排序口訣:

  • 1. N個(gè)數(shù)字來排隊(duì),兩兩相比小靠前宴倍。

  • 2. 外層循環(huán)N-1张症,內(nèi)層循環(huán)N-1-i

  • 3. 如果要降序,只要把程序中的大于號(hào)換成小于號(hào)鸵贬。

28俗他、說一說Servlet的生命周期?servlet的生命周期分為以下幾個(gè)步驟:

  • 第一、加載并實(shí)例化

  • 第二阔逼、初始化

  • 第三兆衅、服務(wù)

  • 第四、銷毀

容器啟動(dòng)的時(shí)候嗜浮,會(huì)加載servlet的class涯保,并new出這個(gè)對(duì)象,然后周伦,當(dāng)用戶請(qǐng)求這個(gè)servlet的時(shí)候夕春,容器會(huì)調(diào)用init方法初始化這個(gè)servlet,這也是整個(gè)生命周期中只會(huì)調(diào)用一次的方法专挪,然后及志,會(huì)調(diào)用service方法,由這個(gè)方法調(diào)用doGet或doPost方法來響應(yīng)用戶寨腔,然后速侈,容器在可用資源緊張或是長(zhǎng)期沒有對(duì)Servlet發(fā)出請(qǐng)求的情況下,會(huì)銷毀這個(gè)servlet迫卢。

29倚搬、servlet api中forward() 與redirect()的區(qū)別?

  • (1)forward僅是容器中控制權(quán)的轉(zhuǎn)向乾蛤,在客戶端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址每界;

  • (2)redirect則是完全的跳轉(zhuǎn)捅僵,瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接眨层。這樣庙楚,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以趴樱,forward更加高效馒闷,在forward可以滿足需要時(shí),盡量使用forward()方法叁征,并且纳账,這樣也有助于隱藏實(shí)際的鏈接。但在某些情況下(比如需要跳轉(zhuǎn)到另一個(gè)服務(wù)器上的資源)捺疼,則必須使用sendRedirect()方法疏虫。

  • (3)forward:轉(zhuǎn)發(fā)頁(yè)面和轉(zhuǎn)發(fā)到的頁(yè)面可以共享request里面的數(shù)據(jù).

  • (4)redirect:不能共享數(shù)據(jù)

30、request.getAttribute() 和 request.getParameter() 有何區(qū)別?

  • (1)request.getParameter 是用來接收post帅涂、get方法傳遞過來的參數(shù)值

  • (2)request.getAttribute 是獲取對(duì)象容器(session)的值

  • (3)request.getParameter()方法返回String類型的數(shù)據(jù)议薪。

  • (4)request.getAttribute()方法返回的是request范圍內(nèi)存在的對(duì)象。

31媳友、jsp有哪些常用內(nèi)置對(duì)象?

  • <1>斯议、request

  • <2>、response

  • <3>醇锚、session

  • <4>哼御、out

  • <5>、page

  • <6>焊唬、application

  • <7>渔隶、exception

  • <8>贬芥、pageContext

  • <9>端朵、config

32慨菱、JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么鸥滨?

  • ①嗦哆、JSP是Servlet技術(shù)的擴(kuò)展,本質(zhì)上是Servlet的簡(jiǎn)易方式婿滓,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)老速,JSP編譯后是”類servlet”。

  • ②凸主、JSP是Java和HTML組合成的一個(gè)擴(kuò)展名為.jsp的文件橘券。JSP側(cè)重于視圖,Servlet主要用于控制邏輯。

  • ③旁舰、Servlet和JSP最主要的不同點(diǎn)在于锋华,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來鬓梅。

33供置、MVC的各個(gè)部分都有哪些技術(shù)來實(shí)現(xiàn)?MVC 是 Model-View-Controller 的簡(jiǎn)寫谨湘,通過這種設(shè)計(jì)模型把應(yīng)用邏輯绽快、處理過程和顯示邏輯分成不同的組件實(shí)現(xiàn)。

  • (1)模型(Model)代表的是應(yīng)用的業(yè)務(wù)邏輯( 通過JavaBean紧阔, EJB 組件實(shí)現(xiàn))

  • (2)視圖(View)是應(yīng)用的表示面( 由 JSP 頁(yè)面產(chǎn)生)

  • (3)控制器(controller) 是提供應(yīng)用的處理過程控制( 一般是一個(gè) Servlet)

34坊罢、數(shù)據(jù)庫(kù)三范式是什么?

  • 第一范式:確保每一列的原子性(原子性字段不可再分,否則就不是關(guān)系型數(shù)據(jù)庫(kù))

  • 第二范式:在第一范式的基礎(chǔ)上更進(jìn)一層,確保表中的每列都和主鍵相關(guān)(唯一性擅耽,一個(gè)表只說明一個(gè)事物)

  • 第三范式:在第二范式的基礎(chǔ)上更進(jìn)一層,確保每列都和主鍵列直接相關(guān),而不是間接相關(guān)(每列都與主鍵有直接關(guān)系活孩,不存在傳遞依賴)

35、說出一些數(shù)據(jù)庫(kù)優(yōu)化方面的經(jīng)驗(yàn)?

  • 1.用索引提高效率乖仇,避免在索引列上使用計(jì)算憾儒。

  • 2.SELECT子句中避免使用‘ * ‘

  • 3.減少訪問數(shù)據(jù)庫(kù)的次數(shù)

  • 4.盡量多使用COMMIT

  • 5.用Where子句替換HAVING子句

  • 6.用EXISTS替代IN、用NOT EXISTS替代NOT IN

  • 7.使用表的別名(Alias)

  • 8.避免使用耗費(fèi)資源的操作

  • 9.用 PreparedStatement 一般來說比 Statement 性能高

  • 10.有外鍵約束會(huì)影響插入和刪除性能乃沙, 如果程序能夠保證數(shù)據(jù)的完整性起趾, 那在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)就去掉外鍵

  • 11.要查詢的數(shù)據(jù)多時(shí),使用分頁(yè)進(jìn)行查詢

  • 12.盡量不用ORDER BY RAND()

  • 13.利用查詢緩存來優(yōu)化查詢

  • 14.盡量不使用NOT IN和like語句操作

36警儒、Class.forName的作用是什么训裆?

  • Class.forName(xxx.xx.xx) 返回的是一個(gè)類,Java里面任何class都要裝載在虛擬機(jī)上才能運(yùn)行蜀铲,這句話就是裝載類用的边琉。

  • Class.forName(xxx.xx.xx)的作用是要求JVM查找并加載指定的類,也就是說JVM會(huì)執(zhí)行該類的靜態(tài)代碼段记劝,動(dòng)態(tài)加載和創(chuàng)建Class對(duì)象变姨,最熟悉的就是JDBC連接數(shù)據(jù)庫(kù)的時(shí)候加載驅(qū)動(dòng)類。

37厌丑、說說數(shù)據(jù)連接池的工作機(jī)制是什么?J2EE服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接定欧,并一直維持不少于此數(shù)目的池連接√阒裕客戶端程序需要連接時(shí)忧额,池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其標(biāo)記為忙。如果當(dāng)前沒有空閑連接愧口,池驅(qū)動(dòng)程序就新建一定數(shù)量的連接睦番,新建連接的數(shù)量由配置參數(shù)決定。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動(dòng)程序?qū)⒋诉B接標(biāo)記為空閑托嚣,其他調(diào)用就可以使用這個(gè)連接巩检。

38、為什么要用ORM? 和JDBC有何不一樣?

  • 對(duì)象關(guān)系映射(Object Relational Mapping示启,簡(jiǎn)稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫(kù)存在的互不匹配現(xiàn)象的技術(shù)兢哭。簡(jiǎn)單的說,ORM是通過使用描述對(duì)象和數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù)夫嗓,將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中迟螺。

  • ORM是一種思想,就是把object轉(zhuǎn)變成數(shù)據(jù)庫(kù)中的記錄舍咖,或者把數(shù)據(jù)庫(kù)中的記錄轉(zhuǎn)變成object矩父,我們可以用jdbc來實(shí)現(xiàn)這種思想,其實(shí)排霉,如果我們的項(xiàng)目是嚴(yán)格按照oop方式編寫的話窍株,我們的jdbc程序不管是有意還是無意,就已經(jīng)在實(shí)現(xiàn)ORM的工作了攻柠。

  • 現(xiàn)在有許多ORM工具球订,它們底層調(diào)用jdbc來實(shí)現(xiàn)了ORM工作,我們直接使用這些工具瑰钮,就省去了直接使用jdbc的繁瑣細(xì)節(jié)冒滩,提高了開發(fā)效率,現(xiàn)在用的較多的ORM工具是hibernate飞涂。

39旦部、xml有哪些解析技術(shù)?區(qū)別是什么?

xml有以下2種解析技術(shù):
  • (1)DOM(Document Object Model)文檔對(duì)象模型

  • (2)SAX(Simple API for XML)

兩者的區(qū)別:DOM是一次性將整個(gè)文檔讀入內(nèi)存操作,如果是文檔比較小较店,讀入內(nèi)存士八,可以極大提高操作的速度,但如果文檔比較大梁呈,那么DOM就比較吃力了婚度。所以此時(shí)SAX應(yīng)用而生,它不是一次性的將整個(gè)文檔讀入內(nèi)存官卡,這對(duì)于處理大型文檔就比較給力了蝗茁。

40、談?wù)勀銓?duì)Struts的理解寻咒。

  • Struts框架是對(duì)MVC模式的封裝哮翘,為開發(fā)者提供了MVC的3個(gè)邏輯組成部分,主要由ActionServlet毛秘、Action和struts-config.xml配置文件組成控制層饭寺,由ActionForm來承擔(dān)模型層的功能阻课,而struts 的視圖層主要由jsp完成;

  • 它處理一次請(qǐng)求的流程:由ActionServlet接受一個(gè)請(qǐng)求艰匙,然后依據(jù)配置文件來判斷由哪個(gè)Action來處理和由哪個(gè)ActionForm來保存數(shù)據(jù)限煞,再通過Action的返回值來判斷應(yīng)該由哪個(gè)jsp來展示數(shù)據(jù)。

41员凝、Struts優(yōu)缺點(diǎn)優(yōu)點(diǎn):

  • (1) 實(shí)現(xiàn)了MVC模式署驻,層次結(jié)構(gòu)清晰,使程序員只需關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn)健霹。

  • (2) 豐富的標(biāo)簽庫(kù)旺上,大大提高了開發(fā)的效率。

  • (3) Struts2提供豐富的攔截器實(shí)現(xiàn)骤公。

  • (4) 通過配置文件抚官,就可以掌握整個(gè)系統(tǒng)各個(gè)部分之間的關(guān)系扬跋。

  • (5) 異常處理機(jī)制阶捆,只需在配置文件中配置異常的映射,即可對(duì)異常做相應(yīng)的處理钦听。

  • (6) Struts2的可擴(kuò)展性高洒试。Struts2的核心jar包中由一個(gè)struts-default.xml文件,在該文件中設(shè)置了一些默認(rèn)的bean,resultType類型朴上,默認(rèn)攔截器棧等垒棋,所有這些默認(rèn)設(shè)置,用戶都可以利用配置文件更改痪宰,可以更改為自己開發(fā)的bean叼架,resulttype等。因此用戶開發(fā)了插件的話只要很簡(jiǎn)單的配置就可以很容易的和Struts2框架融合衣撬,這實(shí)現(xiàn)了框架對(duì)插件的可插拔的特性乖订。

  • (7) 面向切面編程的思想在Strut2中也有了很好的體現(xiàn),最重要的體現(xiàn)就是攔截器的使用具练。攔截器就是一個(gè)一個(gè)的小功能單位乍构,用戶可以將這些攔截器合并成一個(gè)大的攔截器,這個(gè)合成的攔截器就像單獨(dú)的攔截器一樣扛点,只要將它配置到一個(gè)哥遮、Action中就可以

缺點(diǎn):

  • (1) Struts2中Action中取得從jsp中傳過來的參數(shù)時(shí)還是有點(diǎn)麻煩×昃浚可以為Struts2的Action中的屬性配置上Getter和Setter方法眠饮,通過默認(rèn)攔截器,就可以將請(qǐng)求參數(shù)設(shè)置到這些屬性中铜邮。如果用這種方式仪召,當(dāng)請(qǐng)求參數(shù)很多時(shí),Action類就會(huì)被這些表單屬性弄的很臃腫,讓人感覺會(huì)很亂返咱。還有Action中的屬性不但可以用來獲得請(qǐng)求參數(shù)還可以輸出到Jsp中钥庇,這樣就會(huì)更亂。假設(shè)從JSP1中獲得了參數(shù)money=100000咖摹,但是這個(gè)Action還要輸出到JSP2中评姨,但是輸出的格式卻不同,money=100,000萤晴,這樣這個(gè)Action中的money中的值就變了吐句。

  • (2) 校驗(yàn)還是感覺比較繁瑣,太煩亂店读,也太細(xì)化了嗦枢,如果校驗(yàn)出錯(cuò)的只能給用戶提示一些信息。如果有多個(gè)字段屯断,每個(gè)字段出錯(cuò)時(shí)返回到不同的畫面文虏,這個(gè)功能在Strut2框架下借助框架提供的校驗(yàn)邏輯就不容易實(shí)現(xiàn)。

  • (3) 安全性有待提高殖演。Struts2曝出2個(gè)高危安全漏洞氧秘,一個(gè)是使用縮寫的導(dǎo)航參數(shù)前綴時(shí)的遠(yuǎn)程代碼執(zhí)行漏洞,另一個(gè)是使用縮寫的重定向參數(shù)前綴時(shí)的開放式重定向漏洞趴久。這些漏洞可使黑客取得網(wǎng)站服務(wù)器的“最高權(quán)限”丸相,從而使企業(yè)服務(wù)器變成黑客手中的“肉雞”

42、談?wù)勀銓?duì)Spring的理解彼棍。首先Spring是一個(gè)開源的框架灭忠,Spring為簡(jiǎn)化企業(yè)級(jí)應(yīng)用開發(fā)而生,使用Spring可以使簡(jiǎn)單的JavaBean實(shí)現(xiàn)以前只有EJB才能實(shí)現(xiàn)的功能座硕。Spring是一個(gè)IOC和AOP容器框架弛作。

在java開發(fā)領(lǐng)域,Spring相對(duì)于EJB來說是一種輕量級(jí)的坎吻,非侵入性的Java開發(fā)框架缆蝉。

Spring主要核心是:

  • (1).控制反轉(zhuǎn)(IOC):以前傳統(tǒng)的java開發(fā)模式中,當(dāng)需要一個(gè)對(duì)象時(shí)我們瘦真,我們會(huì)自己使用new或者getInstance等直接或者間接調(diào)用構(gòu)造方法創(chuàng)建一個(gè)對(duì)象刊头,而在Spring開發(fā)模式中,Spring容器使用了工廠模式為我們創(chuàng)建了所需要的對(duì)象诸尽,我們使用時(shí)不需要自己去創(chuàng)建原杂,直接調(diào)用Spring為我們提供的對(duì)象即可,這就是控制反轉(zhuǎn)的思想您机。實(shí)例化一個(gè)java對(duì)象有三種方式:使用類構(gòu)造器穿肄,使用靜態(tài)工廠方法年局,使用實(shí)例工廠方法,當(dāng)使用spring時(shí)我們就不需要關(guān)心通過何種方式實(shí)例化一個(gè)對(duì)象咸产,spring通過控制反轉(zhuǎn)機(jī)制自動(dòng)為我們實(shí)例化一個(gè)對(duì)象矢否。

  • (2).依賴注入(DI):Spring使用java Bean對(duì)象的Set方法或者帶參數(shù)的構(gòu)造方法為我們?cè)趧?chuàng)建所需對(duì)象時(shí)將其屬性自動(dòng)設(shè)置所需要的值的過程就是依賴注入的基本思想。

  • (3).面向切面編程(AOP):在面向?qū)ο缶幊?OOP)思想中,我們將事物縱向抽象成一個(gè)個(gè)的對(duì)象。而在面向切面編程中趟佃,我們將一個(gè)個(gè)對(duì)象某些類似的方面橫向抽象成一個(gè)切面奋早,對(duì)這個(gè)切面進(jìn)行一些如權(quán)限驗(yàn)證亿絮,事物管理,記錄日志等公用操作處理的過程就是面向切面編程的思想。

43、AOP的作用是什么粪薛?AOP(面向切面編程)是一種編程范式,用于提供從另一角度來考慮程序結(jié)構(gòu)以完善面向?qū)ο缶幊獭?/p>

主要作用:

  • 1.降低模塊之間的耦合度搏恤。

  • 2.使系統(tǒng)容易擴(kuò)展违寿。

  • 3.更好的代碼復(fù)用

44、談?wù)勀銓?duì)Hibernate的理解挑社。Hibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射(ORM)框架陨界,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得java程序員可以隨心所欲的使用對(duì)象編程思維來操縱數(shù)據(jù)庫(kù)痛阻。

Hibernate的優(yōu)點(diǎn):

  • 1. 對(duì)JDBC訪問數(shù)據(jù)庫(kù)的代碼做了封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼腮敌。

  • 2. Hibernate是一個(gè)基于JDBC的主流持久化框架阱当,是一個(gè)優(yōu)秀的ORM實(shí)現(xiàn)。他很大程度的簡(jiǎn)化DAO層的編碼工作

  • 3糜工、 Hibernate使用Java反射機(jī)制而不是字節(jié)碼增強(qiáng)程序來實(shí)現(xiàn)透明性弊添。

  • 4、 Hibernate的性能好捌木,映射的靈活性比較出色油坝。它支持各種關(guān)系數(shù)據(jù)庫(kù),從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系刨裆。

hibernate的核心類:Configuration澈圈、SessionFactory 、Session

45帆啃、hibernate中的update()和saveOrUpdate()的區(qū)別

  • update() 如果是對(duì)一個(gè)已經(jīng)存在的托管對(duì)象進(jìn)行更新那么肯定是要使用update()方法了瞬女,數(shù)據(jù)中有這個(gè)對(duì)象。

  • saveOrUpdate() 這個(gè)方法是更新或者插入努潘,有主鍵就執(zhí)行更新诽偷,如果沒有主鍵就執(zhí)行插入坤学。

46、簡(jiǎn)述 Hibernate 和 JDBC 的優(yōu)缺點(diǎn)?

  • (1)JDBC與Hibernate在性能上相比报慕,JDBC靈活性有優(yōu)勢(shì)深浮。

  • (2)而Hibernate在易學(xué)性,易用性上有優(yōu)勢(shì)眠冈。

  • (3)當(dāng)用到很多復(fù)雜的多表聯(lián)查和復(fù)雜的數(shù)據(jù)庫(kù)操作時(shí)略号,JDBC有優(yōu)勢(shì)。

47洋闽、Hibernate中玄柠,如何書寫一個(gè) one to many 配置文件?one to many 配置文件的方法:在一方添加集合對(duì)象诫舅,并封裝羽利。然后在對(duì)應(yīng)的映射文件追加 <set>標(biāo)簽,設(shè)置外檢刊懈,以及通過one-to-many標(biāo)簽設(shè)置集合對(duì)象所對(duì)應(yīng)的類型即可这弧。</set>

48、MyBatis與Hibernate有什么不同?Mybatis優(yōu)勢(shì):

  • (1)MyBatis可以進(jìn)行更為細(xì)致的SQL優(yōu)化虚汛,可以減少查詢字段匾浪。

  • (2)MyBatis容易掌握,而Hibernate門檻較高卷哩。

Hibernate優(yōu)勢(shì):

  • <1>蛋辈、Hibernate的DAO層開發(fā)比MyBatis簡(jiǎn)單,Mybatis需要維護(hù)SQL和結(jié)果映射将谊。

  • <2>冷溶、Hibernate對(duì)對(duì)象的維護(hù)和緩存要比MyBatis好,對(duì)增刪改查的對(duì)象的維護(hù)要方便尊浓。

  • <3>逞频、Hibernate數(shù)據(jù)庫(kù)移植性很好,MyBatis的數(shù)據(jù)庫(kù)移植性不好栋齿,不同的數(shù)據(jù)庫(kù)需要寫不同SQL苗胀。

  • <4>、Hibernate有更好的二級(jí)緩存機(jī)制瓦堵,可以使用第三方緩存基协。MyBatis本身提供的緩存機(jī)制不佳。

49谷丸、hibernate的inverse屬性有什么作用?

  • 用來指定關(guān)聯(lián)的控制方的堡掏,inverse屬性默認(rèn)是false:

  • 若為false,則關(guān)聯(lián)由自己控制

  • 若為true刨疼,則關(guān)聯(lián)由對(duì)方控制

50泉唁、介紹一下Hibernate的二級(jí)緩存內(nèi)置緩存:Hibernate自帶的鹅龄,不可卸載,通常在Hibernate的初始化階段亭畜,Hibernate會(huì)把映射元數(shù)據(jù)和預(yù)定義的SQL語句放置到SessionFactory的緩存中扮休。該內(nèi)置緩存是只讀的。

外置緩存:通常說的二級(jí)緩存也就是外置緩存拴鸵,在默認(rèn)情況下SessionFactory不會(huì)啟用這個(gè)緩存插件玷坠,外置緩存中的數(shù)據(jù)是數(shù)據(jù)庫(kù)數(shù)據(jù)的復(fù)制,外置緩存的物理介質(zhì)可以是內(nèi)存或者硬盤劲藐。

適合放入二級(jí)緩存中數(shù)據(jù):
  • 很少被修改

  • 不是很重要的數(shù)據(jù)八堡,允許出現(xiàn)偶爾的并發(fā)問題

  • 不適合放入二級(jí)緩存中的數(shù)據(jù)

  • 經(jīng)常被修改

  • 財(cái)務(wù)數(shù)據(jù),絕對(duì)不允許出現(xiàn)并發(fā)問題

  • 與其他應(yīng)用數(shù)據(jù)共享的數(shù)據(jù)

51聘芜、session中l(wèi)oad()和get()的區(qū)別

  • (1)load方法支持延遲加載兄渺,而get方法則不支持。

  • (2)load方法在沒找到數(shù)據(jù)的時(shí)候會(huì)拋出ObjectNotFoundException汰现,而get方法則會(huì)返回null挂谍。

52、B/S與C/S的聯(lián)系與區(qū)別

(1)c/s(client/server)客戶端/服務(wù)器

概念:指的是客戶端和服務(wù)端之間的通信方式瞎饲,客戶端提供用戶請(qǐng)求接口口叙,服務(wù)端響應(yīng)請(qǐng)求進(jìn)行對(duì)應(yīng)的處理,并返回給客戶端嗅战,客戶端來顯示這些內(nèi)容協(xié)議:任何通用協(xié)議優(yōu)勢(shì):降低系統(tǒng)開銷妄田,充分利用兩端硬件環(huán)境的優(yōu)勢(shì)缺點(diǎn):維護(hù)成本高

(2)B/S(browser/server) 瀏覽器/服務(wù)器

概念:這種結(jié)構(gòu)用戶界面是完全通過www瀏覽器來實(shí)現(xiàn),一部分事務(wù)在前端實(shí)現(xiàn)仗哨,主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn)協(xié)議:http協(xié)議優(yōu)勢(shì):節(jié)約開發(fā)成本

兩者區(qū)別:

硬件環(huán)境不同:

  • c/s:專用網(wǎng)絡(luò)形庭、小型局域網(wǎng)

  • b/s:廣域網(wǎng),只有要操作系統(tǒng)和瀏覽器就行

對(duì)安全要求不同:

  • c/s:一般面向固定用戶群厌漂,安全性高

  • b/s:用b/s發(fā)布部分可公開信息

對(duì)程序架構(gòu)不同:

  • c/s:注重流程,對(duì)權(quán)限多次校驗(yàn)斟珊,少考慮系統(tǒng)運(yùn)行速度

  • b/s:對(duì)安全和訪問速度多重考慮

軟件重用不同:

  • c/s:需要整體考慮苇倡,構(gòu)建重用性沒有b/s好

  • b/s:構(gòu)件獨(dú)立,重用性好

系統(tǒng)維護(hù)不同:

  • c/s:要從整體考察囤踩,維護(hù)困難

  • b/s:構(gòu)件個(gè)別替換旨椒,維護(hù)升級(jí)簡(jiǎn)單

處理問題不同:

  • c/s:用戶面固定,安全性高堵漱,操作系統(tǒng)相同

  • b/s:用戶不固定综慎,與操作平臺(tái)關(guān)系小

用戶接口不同:

  • c/s:Windows平臺(tái)上,表現(xiàn)方法有限

  • b/s:瀏覽器勤庐,表現(xiàn)方式生動(dòng)示惊,難度減低好港,減低開發(fā)成本

信息流不同:

  • c/s:中央集權(quán)機(jī)械式管理,交互低

  • b/s:信息流可變化米罚,更像交易中心

53钧汹、Spring MVC Framework有那些特點(diǎn)?

  • 1.它是基于組件技術(shù)的录择,全部的應(yīng)用對(duì)象拔莱,無論控制器和視圖,還是業(yè)務(wù)對(duì)象之類的都是java組件隘竭,并且和Spring提供的其他基礎(chǔ)結(jié)構(gòu)緊密集成塘秦。

  • 2.不依賴于Servlet API(目標(biāo)雖是如此,但是在實(shí)現(xiàn)的時(shí)候確實(shí)是依賴于Servlet的)

  • 3.可以任意使用各種視圖技術(shù),而不僅僅局限于JSP

  • 4.支持各種請(qǐng)求資源的映射策略

  • 5.它應(yīng)是易于擴(kuò)展的

54、SpringMVC的工作流程?

  • 1. 用戶發(fā)送請(qǐng)求至前端控制器DispatcherServlet

  • 2. DispatcherServlet收到請(qǐng)求調(diào)用HandlerMapping處理器映射器动看。

  • 3. 處理器映射器根據(jù)請(qǐng)求url找到具體的處理器尊剔,生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。

  • 4. DispatcherServlet通過HandlerAdapter處理器適配器調(diào)用處理器

  • 5. 執(zhí)行處理器(Controller弧圆,也叫后端控制器)赋兵。

  • 6. Controller執(zhí)行完成返回ModelAndView

  • 7. HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet

  • 8. DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器

  • 9. ViewReslover解析后返回具體View

  1. DispatcherServlet對(duì)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。

  2. DispatcherServlet響應(yīng)用戶

55搔预、簡(jiǎn)單介紹下springMVC和struts2的區(qū)別有哪些?

  • 1. springmvc的入口是一個(gè)servlet即前端控制器霹期,而struts2入口是一個(gè)filter過慮器。

  • 2. springmvc是基于方法開發(fā)(一個(gè)url對(duì)應(yīng)一個(gè)方法)拯田,請(qǐng)求參數(shù)傳遞到方法的形參历造,可以設(shè)計(jì)為單例或多例(建議單例),struts2是基于類開發(fā)船庇,傳遞參數(shù)是通過類的屬性吭产,只能設(shè)計(jì)為多例。

  • 3. Struts采用值棧存儲(chǔ)請(qǐng)求和響應(yīng)的數(shù)據(jù)鸭轮,通過OGNL存取數(shù)據(jù)臣淤,springmvc通過參數(shù)解析器是將request請(qǐng)求內(nèi)容解析,并給方法形參賦值窃爷,將數(shù)據(jù)和視圖封裝成ModelAndView對(duì)象邑蒋,最后又將ModelAndView中的模型數(shù)據(jù)通過reques域傳輸?shù)巾?yè)面。Jsp視圖解析器默認(rèn)使用jstl按厘。

56医吊、請(qǐng)介紹線程的五種狀態(tài)

  • 第一、創(chuàng)建狀態(tài)逮京。在生成線程對(duì)象卿堂,并沒有調(diào)用該對(duì)象的start方法,這是線程處于創(chuàng)建狀態(tài)手寫字符串反轉(zhuǎn)和冒泡排序懒棉;

  • 第二草描、就緒狀態(tài)览绿。當(dāng)調(diào)用了線程對(duì)象的start方法之后,該線程就進(jìn)入了就緒狀態(tài)陶珠,但是此時(shí)線程調(diào)度程序還沒有把該線程設(shè)置為當(dāng)前線程挟裂,此時(shí)處于就緒狀態(tài)。在線程運(yùn)行之后揍诽,從等待或者睡眠中回來之后诀蓉,也會(huì)處于就緒狀態(tài)。

  • 第三暑脆、運(yùn)行狀態(tài)渠啤。線程調(diào)度程序?qū)⑻幱诰途w狀態(tài)的線程設(shè)置為當(dāng)前線程,此時(shí)線程就進(jìn)入了運(yùn)行狀態(tài)添吗,開始運(yùn)行run函數(shù)當(dāng)中的代碼沥曹。

  • 第四、阻塞狀態(tài)碟联。線程正在運(yùn)行的時(shí)候妓美,被暫停,通常是為了等待某個(gè)時(shí)間的發(fā)生(比如說某項(xiàng)資源就緒)之后再繼續(xù)運(yùn)行鲤孵。sleep,suspend壶栋,wait等方法都可以導(dǎo)致線程阻塞。

  • 第五普监、死亡狀態(tài)贵试。如果一個(gè)線程的run方法執(zhí)行結(jié)束或者調(diào)用stop方法后,該線程就會(huì)死亡凯正。對(duì)于已經(jīng)死亡的線程毙玻,無法再使用start方法令其進(jìn)入就緒

57、post提交方式和get提交方式的區(qū)別

Get 方法通過 URL 請(qǐng)求來傳遞用戶的數(shù)據(jù)廊散,將表單內(nèi)各字段名稱與其內(nèi)容桑滩,以成對(duì)的字符串連接,以URL字串本身傳遞數(shù)據(jù)參數(shù)允睹,在服務(wù)器端可以從'QUERY_STRING'這個(gè)變量中直接讀取施符,效率較高,但缺乏安全性擂找,也無法來處理復(fù)雜的數(shù)據(jù)(只能是字符串,比如在servlet/jsp中就無法處理發(fā)揮java的比如vector之類的功能,輸?shù)臄?shù)據(jù)量非常小姿锭,一般限制在 2 KB 左右)前硫;

Post 方法通過 HTTP post 機(jī)制杖挣,將表單內(nèi)各字段名稱與其內(nèi)容放置在 HTML 表頭(header)內(nèi)一起傳送給服務(wù)器端交由 action 屬性能所指的程序處理伸头,該程序會(huì)通過標(biāo)準(zhǔn)輸入(stdin)方式塘雳,將表單的數(shù)據(jù)讀出并加以處理post方式:就傳輸方式講參數(shù)會(huì)被打包在數(shù)據(jù)報(bào)中傳輸陆盘,從CONTENT_LENGTH這個(gè)環(huán)境變量中讀取,便于傳送較大一些的數(shù)據(jù)败明,同時(shí)因?yàn)椴槐┞稊?shù)據(jù)在瀏覽器的地址欄中隘马,安全性相對(duì)較高,但這樣的處理效率會(huì)受到影響妻顶。

建議:除非你肯定你提交的數(shù)據(jù)可以一次性提交酸员,否則請(qǐng)盡量用 Post方法;Get方式提交數(shù)據(jù),會(huì)帶來安全問題;通過 Get 方式提交數(shù)據(jù)時(shí)讳嘱,用戶名和密碼將出現(xiàn)在 URL 上;所以表單提交建議使用Post幔嗦。

58、什么是數(shù)據(jù)庫(kù)臟讀沥潭,不可重復(fù)讀邀泉,幻覺讀 臟讀又稱無效數(shù)據(jù)讀出。一個(gè)事務(wù)讀取另外一個(gè)事務(wù)還沒有提交的數(shù)據(jù)叫臟讀钝鸽。例如:事務(wù)T1修改了一行數(shù)據(jù)汇恤,但是還沒有提交,這時(shí)候事務(wù)T2讀取了被事務(wù)T1修改后的數(shù)據(jù)拔恰,之后事務(wù)T1因?yàn)槟撤N原因Rollback了因谎,那么事務(wù)T2讀取的數(shù)據(jù)就是臟的不可重復(fù)讀是指在同一個(gè)事務(wù)內(nèi),兩個(gè)相同的查詢返回了不同的結(jié)果仁连。例如:事務(wù)T1讀取某一數(shù)據(jù)蓝角,事務(wù)T2讀取并修改了該數(shù)據(jù),T1為了對(duì)讀取值進(jìn)行檢驗(yàn)而再次讀取該數(shù)據(jù)饭冬,便得到了不同的結(jié)果使鹅。

幻覺讀是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如第一個(gè)事務(wù)對(duì)一個(gè)表中的數(shù)據(jù)進(jìn)行了修改昌抠,這種修改涉及到表中的全部數(shù)據(jù)行患朱,同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù)炊苫,這種修改是向表中插入一行新數(shù)據(jù)裁厅。那么,以后就會(huì)發(fā)生操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行侨艾,就好象發(fā)生了幻覺一樣执虹。例如:系統(tǒng)管理員A將數(shù)據(jù)庫(kù)中所有學(xué)生的成績(jī)從具體分?jǐn)?shù)改為ABCDE等級(jí),但是系統(tǒng)管理員B就在這個(gè)時(shí)候插入了一條具體分?jǐn)?shù)的記錄唠梨,當(dāng)系統(tǒng)管理員A改結(jié)束后發(fā)現(xiàn)還有一條記錄沒有改過來袋励,就好像發(fā)生了幻覺一樣,這就叫幻讀。

59茬故、請(qǐng)介紹spring的事務(wù)隔離級(jí)別

  • (1)Default默認(rèn)的事務(wù)隔離級(jí)別

  • (2)READ_UNCOMMITTED(read_uncommitted)讀未提交盖灸,一個(gè)事務(wù)可以操作另外一個(gè)未提交的事務(wù),不能避免臟讀磺芭,不可重復(fù)讀赁炎,幻覺讀,隔離級(jí)別最低钾腺,并發(fā)性能最高

  • (3)READ_COMMITTED(read_committed)讀已提交徙垫,一個(gè)事務(wù)不可以操作另外一個(gè)未提交的事務(wù), 能防止臟讀垮庐,不能避免不可重復(fù)讀松邪,幻覺讀。

  • (4)REPEATABLE_READ(repeatable_read)能夠避免臟讀哨查,不可重復(fù)讀逗抑,不能避免幻讀

  • (5)SERIALIZABLE(serializable)隔離級(jí)別最高,消耗資源最低寒亥,代價(jià)最高邮府,能夠防止臟讀, 不可重復(fù)讀溉奕,幻覺讀

60褂傀、默寫選擇排序

public static void selectSort(int[] a) {int minIndex = 0;int temp = 0;if ((a == null) || (a.length == 0))return;for (int i = 0; i < a.length - 1; i++) {minIndex = i;// 無序區(qū)的最小數(shù)據(jù)數(shù)組下標(biāo)for (int j = i + 1; j < a.length; j++) {// 在無序區(qū)中找到最小數(shù)據(jù)并保存其數(shù)組下標(biāo)if (a[j] < a[minIndex]) {minIndex = j;        }     }// 將最小元素放到本次循環(huán)的前端temp = a[i];a[i] = a[minIndex];a[minIndex] = temp;   }}

61、session和cooie的區(qū)別具體來說cookie機(jī)制采用的是在客戶端保持狀態(tài)的方案加勤,而session 機(jī)制采用的是在服務(wù)器端保持狀態(tài)的方案仙辟。由于服務(wù)器端保持狀態(tài)的方案在客戶端也需要保存一個(gè)標(biāo)識(shí),所以session機(jī)制需要借助于cookie機(jī)制來達(dá)到保存標(biāo)識(shí)的目的 鳄梅。

62叠国、什么是Spring IOC 容器?Spring IOC 負(fù)責(zé)創(chuàng)建對(duì)象戴尸,管理對(duì)象(通過依賴注入(DI)粟焊,裝配對(duì)象,配置對(duì)象孙蒙,并且管理這些對(duì)象的整個(gè)生命周期项棠。

63、spring有哪些不同類型的IOC(依賴注入)方式挎峦? 構(gòu)造器依賴注入:構(gòu)造器依賴注入通過容器觸發(fā)一個(gè)類的構(gòu)造器來實(shí)現(xiàn)的香追,該類有一系列參數(shù),每個(gè)參數(shù)代表一個(gè)對(duì)其他類的依賴坦胶。 Setter方法注入:Setter方法注入是容器通過調(diào)用無參構(gòu)造器或無參static工廠 方法實(shí)例化bean之后翅阵,調(diào)用該bean的setter方法歪玲,即實(shí)現(xiàn)了基于setter的依賴注入

64、 Spring支持哪幾種bean的作用域掷匠?

  • singleton :bean在每個(gè)Spring ioc 容器中只有一個(gè)實(shí)例。

  • prototype:一個(gè)bean的定義可以有多個(gè)實(shí)例岖圈。

  • request:每次http請(qǐng)求都會(huì)創(chuàng)建一個(gè)bean讹语,該作用域僅在基于web的Spring ApplicationContext情形下有效。

  • session:在一個(gè)HTTP Session中蜂科,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例顽决。該作用域僅在基于web的Spring ApplicationContext情形下有效。

  • global-session:在一個(gè)全局的HTTP Session中导匣,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例才菠。該作用域僅在基于web的Spring ApplicationContext情形下有效。

65贡定、j2ee常用的設(shè)計(jì)模式有哪些赋访,簡(jiǎn)單說一下工廠模式 Java中的23種設(shè)計(jì)模式:Factory(工廠模式), Builder(建造模式)缓待, Factory Method(工廠方法模式)蚓耽,Prototype(原始模型模式),Singleton(單例模式)旋炒, Facade(門面模式)步悠,Adapter(適配器模式), Bridge(橋梁模式)瘫镇, Composite(合成模式)鼎兽,Decorator(裝飾模式), Flyweight(享元模式)铣除, Proxy(代理模式)谚咬,Command(命令模式), Interpreter(解釋器模式)通孽, Visitor(訪問者模式)序宦,Iterator(迭代子模式), Mediator(調(diào)停者模式)背苦, Memento(備忘錄模式)互捌,Observer(觀察者模式), State(狀態(tài)模式)行剂, Strategy(策略模式)秕噪,Template Method(模板方法模式), Chain Of Responsibleity(責(zé)任鏈模式)

工廠模式:工廠模式是一種經(jīng)常被使用到的模式厚宰,根據(jù)工廠模式實(shí)現(xiàn)的類可以根據(jù)提供的數(shù)據(jù)生成一組類中某一個(gè)類的實(shí)例腌巾,通常這一組類有一個(gè)公共的抽象父類并且實(shí)現(xiàn)了相同的方法遂填,但是這些方法針對(duì)不同的數(shù)據(jù)進(jìn)行了不同的操作。首先需要定義一個(gè)基類澈蝙,該類的子類通過不同的方法實(shí)現(xiàn)了基類中的方法吓坚。然后需要定義一個(gè)工廠類,工廠類可以根據(jù)條件生成不同的子類實(shí)例灯荧。當(dāng)?shù)玫阶宇惖膶?shí)例后礁击,開發(fā)人員可以調(diào)用基類中的方法而不必考慮到底返回的是哪一個(gè)子類的實(shí)例

66、談?wù)勀銓?duì)數(shù)據(jù)庫(kù)事務(wù)的理解逗载?在數(shù)據(jù)庫(kù)中,所謂事務(wù)是指一組邏輯操作單元即一組sql語句哆窿。當(dāng)這個(gè)單元中的一部分操作失敗,整個(gè)事務(wù)回滾,只有全部正確才完成提交厉斟。判斷事務(wù)是否配置成功的關(guān)鍵點(diǎn)在于出現(xiàn)異常時(shí)事務(wù)是否會(huì)回滾挚躯,在JDBC中,事務(wù)默認(rèn)是自動(dòng)提交的擦秽,每次執(zhí)行一個(gè)SQL語句時(shí)码荔,如果執(zhí)行成功,就會(huì)向數(shù)據(jù)庫(kù)自動(dòng)提交号涯,而不能回滾目胡。 事務(wù)的特征(ACID屬性):

  • 1.原子性(Atomicity)原子性是指事務(wù)是一個(gè)不可分割的工作單位,事務(wù)中的操作要么都發(fā)生链快,要么都不發(fā)生誉己。

  • 2.一致性(Consistency)事務(wù)必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變換到另外一個(gè)一致性狀態(tài)。(數(shù)據(jù)不被破壞)

  • 3.隔離性(Isolation)事務(wù)的隔離性是指一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾.

  • 4.持久性(Durability)持久性是指一個(gè)事務(wù)一旦被提交域蜗,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就是永久性的.即使系統(tǒng)重啟也不會(huì)丟失.

67巨双、談?wù)勀銓?duì)數(shù)據(jù)庫(kù)索引的理解 1、索引的概念索引就是為了提高數(shù)據(jù)的檢索速度霉祸。數(shù)據(jù)庫(kù)的索引類似于書籍的索引筑累。在書籍中,索引允許用戶不必翻閱完整個(gè)書就能迅速地找到所需要的信息丝蹭。在數(shù)據(jù)庫(kù)中慢宗,索引也允許數(shù)據(jù)庫(kù)程序迅速地找到表中的數(shù)據(jù),而不必掃描整個(gè)數(shù)據(jù)庫(kù). 2奔穿、索引的優(yōu)點(diǎn)

a.創(chuàng)建唯一性索引镜沽,保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性b.大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因c.減少磁盤IO(向字典一樣可以直接定位)

3贱田、索引的缺點(diǎn)

a.創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間缅茉,這種時(shí)間隨著數(shù)據(jù)量的增加而增加b.索引需要占用額外的物理空間c.當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候男摧,索引也要?jiǎng)討B(tài)的維護(hù)蔬墩,降低了數(shù)據(jù)的維護(hù)速度

68译打、jdbc操作數(shù)據(jù)庫(kù)的步驟①、加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序 Class.forName("數(shù)據(jù)庫(kù)驅(qū)動(dòng)類");②拇颅、連接數(shù)據(jù)庫(kù) Connection con = DriverManager.getConnection();③奏司、操作數(shù)據(jù)庫(kù) PreparedStatement stat = con.prepareStatement(sql);stat.executeQuery();④、關(guān)閉數(shù)據(jù)庫(kù)蔬蕊,釋放連接 con.close();

69结澄、介紹下樂觀鎖,悲觀鎖

  • 樂觀鎖(Optimistic Lock), 每次去查詢數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改岸夯,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒有去更新這個(gè)數(shù)據(jù)们妥,可以使用版本號(hào)猜扮,時(shí)間戳等機(jī)制。樂觀鎖適用于多讀的應(yīng)用類型监婶,這樣可以提高吞吐量

  • 悲觀鎖(Pessimistic Lock), 每次去查詢數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改旅赢,所以每次在查詢數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)阻塞直到它拿到鎖惑惶。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)里邊就用到了這種鎖機(jī)制煮盼,比如通過select ….for update進(jìn)行數(shù)據(jù)鎖定。

70带污、你對(duì)ajax是怎么理解的

  • AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML)僵控,是一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開發(fā)技術(shù)。

  • 使用ajax可以提高用戶的體驗(yàn)度鱼冀,進(jìn)行異步數(shù)據(jù)傳輸從而提高性能报破。ajax不能跨域,所謂不能跨域就是不能跨多個(gè)網(wǎng)站(多個(gè)域名)千绪,或者多個(gè)項(xiàng)目充易。

  • 可以通過jsonp來解決ajax跨域的問題荸型,而jsonp的實(shí)質(zhì)就是通過動(dòng)態(tài)添加script標(biāo)簽來實(shí)現(xiàn)的盹靴。

71括改、你對(duì)負(fù)載均衡這塊有認(rèn)識(shí)嗎摇予?負(fù)載均衡(Load Balance)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一区转,它通常是指臀突,將請(qǐng)求數(shù)據(jù)均勻分?jǐn)偟蕉鄠€(gè)操作單元上執(zhí)行右冻,負(fù)載均衡的關(guān)鍵在于“均勻”代咸。常見互聯(lián)網(wǎng)分布式架構(gòu)上驹碍,分為客戶端層背犯、反向代理nginx層柳琢、站點(diǎn)層绍妨、服務(wù)層润脸、數(shù)據(jù)層。 負(fù)載均衡有兩方面的含義:

  • 1他去、大量的并發(fā)訪問或數(shù)據(jù)流量分擔(dān)到多臺(tái)節(jié)點(diǎn)設(shè)備上分別處理,減少用戶等待響應(yīng)的時(shí)間;

  • 2毙驯、單個(gè)重負(fù)載的運(yùn)算分擔(dān)到多臺(tái)節(jié)點(diǎn)設(shè)備上做并行處理,每個(gè)節(jié)點(diǎn)設(shè)備處理結(jié)束后,將結(jié)果匯總,返回給用戶,系統(tǒng)處理能力得到大幅度提高?

72、請(qǐng)說說你熟悉的Linux指令

ls 列出目錄下的文件cd 到某個(gè)目錄里cp 復(fù)制mv 移動(dòng)rm 刪除pwd 查看當(dāng)前位置tar 解壓tar.gz文件mkdir 創(chuàng)建文件夾touch 創(chuàng)建文件vi 編輯(vim)cat 查看chmod 設(shè)置文件權(quán)限

73灾测、簡(jiǎn)單介紹項(xiàng)目的生命周期

  • 1.需求分析

  • 2.概要設(shè)計(jì)

  • 3.詳細(xì)設(shè)計(jì)(用例圖爆价,流程圖,類圖)

  • 4.數(shù)據(jù)庫(kù)設(shè)計(jì)(powerdesigner)

  • 5.代碼開發(fā)(編寫)

  • 6.單元測(cè)試(junit 白盒測(cè)試)(開發(fā)人員)svn版本管理工具(提交媳搪,更新代碼铭段,文檔)

  • 7.集成測(cè)試 (黑盒測(cè)試,loadrunner(編寫測(cè)試腳本)(高級(jí)測(cè)試))

  • 8.上線試運(yùn)行 (用戶自己檢查)

  • 9.壓力測(cè)試(loadrunner)

  • 10.正式上線

  • 11.維護(hù)

74秦爆、說說你理解中的線程死鎖死鎖是因?yàn)槎嗑€程訪問共享資源序愚,由于訪問的順序不當(dāng)所造成的,通常是一個(gè)線程鎖定了一個(gè)資源A等限,而又想去鎖定資源B爸吮;在另一個(gè)線程中,鎖定了資源B望门,而又想去鎖定資源A以完成自身的操作形娇,兩個(gè)線程都想得到對(duì)方的資源,而不愿釋放自己的資源筹误,造成兩個(gè)線程都在等待桐早,而無法執(zhí)行的情況。 死鎖產(chǎn)生的原因:是由訪問共享資源順序不當(dāng)所造成的簡(jiǎn)單的說:所謂死鎖,是指兩個(gè)或兩個(gè)以上的線程在執(zhí)行過程中纫事,因爭(zhēng)奪資源而造成的一種互相等待的現(xiàn)象勘畔,若無外力作用,它們都將無法推進(jìn)下去丽惶。

75炫七、 介紹下守護(hù)線程 在Java中有兩類線程:User Thread(用戶線程)、Daemon Thread(守護(hù)線程)

  • (1)用個(gè)比較通俗的說法钾唬,任何一個(gè)守護(hù)線程都是整個(gè)JVM中所有非守護(hù)線程的保姆:只要當(dāng)前JVM實(shí)例中尚存在任何一個(gè)非守護(hù)線程沒有結(jié)束万哪,守護(hù)線程就全部工作;只有當(dāng)最后一個(gè)非守護(hù)線程結(jié)束時(shí)抡秆,守護(hù)線程才隨著JVM一同結(jié)束工作奕巍。

  • (2)守護(hù)線程最典型的應(yīng)用就是 GC (垃圾回收器),它就是一個(gè)很稱職的守護(hù)者儒士。

  • (3)守護(hù)線程與普通線程的唯一區(qū)別是:當(dāng)JVM中所有的線程都是守護(hù)線程的時(shí)候的止,JVM就可以退出了;如果還有一個(gè)或以上的非守護(hù)線程則不會(huì)退出着撩。(以上是針對(duì)正常退出诅福,調(diào)用System.exit則必定會(huì)退出)

文章所有內(nèi)容均收集于網(wǎng)絡(luò)匾委,如有錯(cuò)誤或其它問題,歡迎小伙伴留言評(píng)論氓润、指正赂乐。如有幫助,歡迎點(diǎn)贊+轉(zhuǎn)發(fā)分享咖气。

以下是Java面試要點(diǎn)集合匯總:

反模式設(shè)計(jì)簡(jiǎn)單的來說挨措,反模式是指在對(duì)經(jīng)常面對(duì)的問題經(jīng)常使用的低效,不良崩溪,或者有待優(yōu)化的設(shè)計(jì)模式/方法浅役。甚至,反模式也可以是一種錯(cuò)誤的開發(fā)思想/理念伶唯。在這里我舉一個(gè)最簡(jiǎn)單的例子:在面向?qū)ο笤O(shè)計(jì)/編程中担租,有一條很重要的原則, 單一責(zé)任原則(Single responsibility principle)抵怎。其中心思想就是對(duì)于一個(gè)模塊,或者一個(gè)類來說岭参,這個(gè)模塊或者這個(gè)類應(yīng)該只對(duì)系統(tǒng)/軟件的一個(gè)功能負(fù)責(zé)反惕,而且該責(zé)任應(yīng)該被該類完全封裝起來。當(dāng)開發(fā)人員需要修改系統(tǒng)的某個(gè)功能演侯,這個(gè)模塊/類是最主要的修改地方姿染。相對(duì)應(yīng)的一個(gè)反模式就是上帝類(God Class),通常來說秒际,這個(gè)類里面控制了很多其他的類悬赏,同時(shí)也依賴其他很多類。整個(gè)類不光負(fù)責(zé)自己的主要單一功能娄徊,而且還負(fù)責(zé)了其他很多功能闽颇,包括一些輔助功能。很多維護(hù)老程序的開發(fā)人員們可能都遇過這種類寄锐,一個(gè)類里有幾千行的代碼兵多,有很多功能,但是責(zé)任不明確單一橄仆。單元測(cè)試程序也變復(fù)雜無比剩膘。維護(hù)/修改這個(gè)類的時(shí)間要遠(yuǎn)遠(yuǎn)超出其他類的時(shí)間。很多時(shí)候盆顾,形成這種情況并不是開發(fā)人員故意的怠褐。很多情況下主要是由于隨著系統(tǒng)的年限,需求的變化您宪,項(xiàng)目的資源壓力奈懒,項(xiàng)目組人員流動(dòng)奠涌,系統(tǒng)結(jié)構(gòu)的變化而導(dǎo)致某些原先小型的,符合單一原則類慢慢的變的臃腫起來筐赔。最后當(dāng)這個(gè)類變成了維護(hù)的噩夢(mèng)(特別是原先熟悉的開發(fā)人員離職后)铣猩,重構(gòu)該類就變成了一個(gè)不容易的工程。

分庫(kù)與分表設(shè)計(jì) 垂直分表在日常開發(fā)和設(shè)計(jì)中比較常見茴丰,通俗的說法叫做“大表拆小表”达皿,拆分是基于關(guān)系型數(shù)據(jù)庫(kù)中的“列”(字段)進(jìn)行的。通常情況贿肩,某個(gè)表中的字段比較多峦椰,可以新建立一張“擴(kuò)展表”,將不經(jīng)常使用或者長(zhǎng)度較大的字段拆分出去放到“擴(kuò)展表”中汰规。在字段很多的情況下汤功,拆分開確實(shí)更便于開發(fā)和維護(hù)(筆者曾見過某個(gè)遺留系統(tǒng)中,一個(gè)大表中包含100多列的)溜哮。某種意義上也能避免“跨頁(yè)”的問題(MySQL滔金、MSSQL底層都是通過“數(shù)據(jù)頁(yè)”來存儲(chǔ)的,“跨頁(yè)”問題可能會(huì)造成額外的性能開銷茂嗓,拆分字段的操作建議在數(shù)據(jù)庫(kù)設(shè)計(jì)階段就做好餐茵。如果是在發(fā)展過程中拆分,則需要改寫以前的查詢語句述吸,會(huì)額外帶來一定的成本和風(fēng)險(xiǎn)忿族,建議謹(jǐn)慎。

垂直分庫(kù)在“微服務(wù)”盛行的今天已經(jīng)非常普及了蝌矛〉琅基本的思路就是按照業(yè)務(wù)模塊來劃分出不同的數(shù)據(jù)庫(kù),而不是像早期一樣將所有的數(shù)據(jù)表都放到同一個(gè)數(shù)據(jù)庫(kù)中入撒。系統(tǒng)層面的“服務(wù)化”拆分操作隆豹,能夠解決業(yè)務(wù)系統(tǒng)層面的耦合和性能瓶頸,有利于系統(tǒng)的擴(kuò)展維護(hù)衅金。而數(shù)據(jù)庫(kù)層面的拆分噪伊,道理也是相通的。與服務(wù)的“治理”和“降級(jí)”機(jī)制類似氮唯,我們也能對(duì)不同業(yè)務(wù)類型的數(shù)據(jù)進(jìn)行“分級(jí)”管理鉴吹、維護(hù)、監(jiān)控惩琉、擴(kuò)展等豆励。

眾所周知,數(shù)據(jù)庫(kù)往往最容易成為應(yīng)用系統(tǒng)的瓶頸,而數(shù)據(jù)庫(kù)本身屬于“有狀態(tài)”的良蒸,相對(duì)于Web和應(yīng)用服務(wù)器來講技扼,是比較難實(shí)現(xiàn)“橫向擴(kuò)展”的。數(shù)據(jù)庫(kù)的連接資源比較寶貴且單機(jī)處理能力也有限嫩痰,在高并發(fā)場(chǎng)景下剿吻,垂直分庫(kù)一定程度上能夠突破IO、連接數(shù)及單機(jī)硬件資源的瓶頸串纺,是大型分布式系統(tǒng)中優(yōu)化數(shù)據(jù)庫(kù)架構(gòu)的重要手段丽旅。

然后,很多人并沒有從根本上搞清楚為什么要拆分纺棺,也沒有掌握拆分的原則和技巧榄笙,只是一味的模仿大廠的做法。導(dǎo)致拆分后遇到很多問題(例如:跨庫(kù)join祷蝌,分布式事務(wù)等)茅撞。

水平分表也稱為橫向分表,比較容易理解巨朦,就是將表中不同的數(shù)據(jù)行按照一定規(guī)律分布到不同的數(shù)據(jù)庫(kù)表中(這些表保存在同一個(gè)數(shù)據(jù)庫(kù)中)米丘,這樣來降低單表數(shù)據(jù)量,優(yōu)化查詢性能糊啡。最常見的方式就是通過主鍵或者時(shí)間等字段進(jìn)行Hash和取模后拆分蠕蚜。水平分表,能夠降低單表的數(shù)據(jù)量悔橄,一定程度上可以緩解查詢性能瓶頸。但本質(zhì)上這些表還保存在同一個(gè)庫(kù)中腺毫,所以庫(kù)級(jí)別還是會(huì)有IO瓶頸癣疟。所以,一般不建議采用這種做法潮酒。

水平分庫(kù)分表與上面講到的水平分表的思想相同睛挚,唯一不同的就是將這些拆分出來的表保存在不同的數(shù)據(jù)中。這也是很多大型互聯(lián)網(wǎng)公司所選擇的做法急黎。某種意義上來講扎狱,有些系統(tǒng)中使用的“冷熱數(shù)據(jù)分離”(將一些使用較少的歷史數(shù)據(jù)遷移到其他的數(shù)據(jù)庫(kù)中。而在業(yè)務(wù)功能上勃教,通常默認(rèn)只提供熱點(diǎn)數(shù)據(jù)的查詢)淤击,也是類似的實(shí)踐。在高并發(fā)和海量數(shù)據(jù)的場(chǎng)景下故源,分庫(kù)分表能夠有效緩解單機(jī)和單庫(kù)的性能瓶頸和壓力污抬,突破IO、連接數(shù)、硬件資源的瓶頸印机。當(dāng)然矢腻,投入的硬件成本也會(huì)更高。同時(shí)射赛,這也會(huì)帶來一些復(fù)雜的技術(shù)問題和挑戰(zhàn)(例如:跨分片的復(fù)雜查詢多柑,跨分片事務(wù)等)。

分布式困境與應(yīng)對(duì)之策

  • 數(shù)據(jù)遷移與擴(kuò)容問題前面介紹到水平分表策略歸納總結(jié)為隨機(jī)分表和連續(xù)分表兩種情況楣责。連續(xù)分表有可能存在數(shù)據(jù)熱點(diǎn)的問題竣灌,有些表可能會(huì)被頻繁地查詢從而造成較大壓力,熱數(shù)據(jù)的表就成為了整個(gè)庫(kù)的瓶頸腐魂,而有些表可能存的是歷史數(shù)據(jù)帐偎,很少需要被查詢到。連續(xù)分表的另外一個(gè)好處在于比較容易蛔屹,不需要考慮遷移舊的數(shù)據(jù)削樊,只需要添加分表就可以自動(dòng)擴(kuò)容。隨機(jī)分表的數(shù)據(jù)相對(duì)比較均勻兔毒,不容易出現(xiàn)熱點(diǎn)和并發(fā)訪問的瓶頸漫贞。但是,分表擴(kuò)展需要遷移舊的數(shù)據(jù)育叁。如果想學(xué)習(xí)Java工程化迅脐、高性能及分布式、深入淺出豪嗽。微服務(wù)谴蔑、Spring,MyBatis龟梦,Netty源碼分析隐锭、雙十一實(shí)戰(zhàn)或者是面試難題的朋友可以加582505643里面的群主感覺蠢萌蠢萌的可以到她那騙資料,都是干貨计贰。針對(duì)于水平分表的設(shè)計(jì)至關(guān)重要钦睡,需要評(píng)估中短期內(nèi)業(yè)務(wù)的增長(zhǎng)速度,對(duì)當(dāng)前的數(shù)據(jù)量進(jìn)行容量規(guī)劃躁倒,綜合成本因素荞怒,推算出大概需要多少分片。對(duì)于數(shù)據(jù)遷移的問題秧秉,一般做法是通過程序先讀出數(shù)據(jù)褐桌,然后按照指定的分表策略再將數(shù)據(jù)寫入到各個(gè)分表中。

  • 表關(guān)聯(lián)問題在單庫(kù)單表的情況下象迎,聯(lián)合查詢是非常容易的撩嚼。但是,隨著分庫(kù)與分表的演變,聯(lián)合查詢就遇到跨庫(kù)關(guān)聯(lián)和跨表關(guān)系問題完丽。在設(shè)計(jì)之初就應(yīng)該盡量避免聯(lián)合查詢恋技,可以通過程序中進(jìn)行拼裝,或者通過反范式化設(shè)計(jì)進(jìn)行規(guī)避逻族。

  • 分頁(yè)與排序問題一般情況下蚕冬,列表分頁(yè)時(shí)需要按照指定字段進(jìn)行排序卖词。在單庫(kù)單表的情況下校哎,分頁(yè)和排序也是非常容易的锹雏。但是,隨著分庫(kù)與分表的演變抠璃,也會(huì)遇到跨庫(kù)排序和跨表排序問題站楚。為了最終結(jié)果的準(zhǔn)確性,需要在不同的分表中將數(shù)據(jù)進(jìn)行排序并返回搏嗡,并將不同分表返回的結(jié)果集進(jìn)行匯總和再次排序窿春,最后再返回給用戶。

  • 分布式事務(wù)問題隨著分庫(kù)與分表的演變采盒,一定會(huì)遇到分布式事務(wù)問題旧乞,那么如何保證數(shù)據(jù)的一致性就成為一個(gè)必須面對(duì)的問題。目前磅氨,分布式事務(wù)并沒有很好的解決方案尺栖,難以滿足數(shù)據(jù)強(qiáng)一致性,一般情況下烦租,使存儲(chǔ)數(shù)據(jù)盡可能達(dá)到用戶一致延赌,保證系統(tǒng)經(jīng)過一段較短的時(shí)間的自我恢復(fù)和修正,數(shù)據(jù)最終達(dá)到一致叉橱。

  • 分布式全局唯一ID在單庫(kù)單表的情況下皮胡,直接使用數(shù)據(jù)庫(kù)自增特性來生成主鍵ID,這樣確實(shí)比較簡(jiǎn)單赏迟。在分庫(kù)分表的環(huán)境中,數(shù)據(jù)分布在不同的分表上蠢棱,不能再借助數(shù)據(jù)庫(kù)自增長(zhǎng)特性锌杀。需要使用全局唯一 ID,例如 UUID泻仙、GUID等糕再。

MySQL 遇到的死鎖問題

產(chǎn)生死鎖的四個(gè)必要條件:

(1) 互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用。(2) 請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí)玉转,對(duì)已獲得的資源保持不放突想。(3) 不剝奪條件:進(jìn)程已獲得的資源,在末使用完之前,不能強(qiáng)行剝奪猾担。(4) 循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系袭灯。

這四個(gè)條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖绑嘹,這些條件必然成立稽荧,而只要上述條件之一不滿足,就不會(huì)發(fā)生死鎖工腋。 下列方法有助于最大限度地降低死鎖:(1)按同一順序訪問對(duì)象姨丈。(2)避免事務(wù)中的用戶交互。(3)保持事務(wù)簡(jiǎn)短并在一個(gè)批處理中擅腰。(4)使用低隔離級(jí)別蟋恬。(5)使用綁定連接。

數(shù)據(jù)庫(kù)索引的原理數(shù)據(jù)庫(kù)索引趁冈,是數(shù)據(jù)庫(kù)管理系統(tǒng)中一個(gè)排序的數(shù)據(jù)結(jié)構(gòu)歼争,以協(xié)助快速查詢、更新數(shù)據(jù)庫(kù)表中數(shù)據(jù)箱歧。索引的實(shí)現(xiàn)通常使用B樹及其變種B+樹矾飞。

聚集索引與非聚集索引的區(qū)別

  • 1).聚集索引一個(gè)表只能有一個(gè),而非聚集索引一個(gè)表可以存在多個(gè)

  • 2).聚集索引存儲(chǔ)記錄是物理上連續(xù)存在呀邢,而非聚集索引是邏輯上的連續(xù)洒沦,物理存儲(chǔ)并不連續(xù)

  • 3).聚集索引:物理存儲(chǔ)按照索引排序;聚集索引是一種索引組織形式价淌,索引的鍵值邏輯順序決定了表數(shù)據(jù)行的物理存儲(chǔ)順序非聚集索引:物理存儲(chǔ)不按照索引排序申眼;非聚集索引則就是普通索引了,僅僅只是對(duì)數(shù)據(jù)列創(chuàng)建相應(yīng)的索引蝉衣,不影響整個(gè)表的物理存儲(chǔ)順序.

  • 4).索引是通過二叉樹的數(shù)據(jù)結(jié)構(gòu)來描述的括尸,我們可以這么理解聚簇索引:索引的葉節(jié)點(diǎn)就是數(shù)據(jù)節(jié)點(diǎn)。而非聚簇索引的葉節(jié)點(diǎn)仍然是索引節(jié)點(diǎn)病毡,只不過有一個(gè)指針指向?qū)?yīng)的數(shù)據(jù)塊濒翻。

Redis 持久化機(jī)制和如何實(shí)現(xiàn)redis有兩種持久化機(jī)制RDB與AOF。

  • RDB持久化方式會(huì)在一個(gè)特定的間隔保存那個(gè)時(shí)間點(diǎn)的一個(gè)數(shù)據(jù)快照啦膜。

  • AOF持久化方式則會(huì)記錄每一個(gè)服務(wù)器收到的寫操作有送。在服務(wù)啟動(dòng)時(shí),這些記錄的操作會(huì)逐條執(zhí)行從而重建出原來的數(shù)據(jù)僧家。寫操作命令記錄的格式跟Redis協(xié)議一致雀摘,以追加的方式進(jìn)行保存。

  • Redis的持久化是可以禁用的八拱,就是說你可以讓數(shù)據(jù)的生命周期只存在于服務(wù)器的運(yùn)行時(shí)間里阵赠。

兩種方式的持久化是可以同時(shí)存在的涯塔,但是當(dāng)Redis重啟時(shí),AOF文件會(huì)被優(yōu)先用于重建數(shù)據(jù)清蚀。

緩存降級(jí)

  • 頁(yè)面降級(jí):在大促或者某些特殊情況下匕荸,某些頁(yè)面占用了一些稀缺服務(wù)資源,在緊急情況下可以對(duì)其整個(gè)降級(jí)轧铁,以達(dá)到丟卒保帥每聪;

  • 頁(yè)面片段降級(jí):比如商品詳情頁(yè)中的商家部分因?yàn)閿?shù)據(jù)錯(cuò)誤了,此時(shí)需要對(duì)其進(jìn)行降級(jí)齿风;

  • 頁(yè)面異步請(qǐng)求降級(jí):比如商品詳情頁(yè)上有推薦信息/配送至等異步加載的請(qǐng)求药薯,如果這些信息響應(yīng)慢或者后端服務(wù)有問題,可以進(jìn)行降級(jí)救斑;

  • 服務(wù)功能降級(jí):比如渲染商品詳情頁(yè)時(shí)需要調(diào)用一些不太重要的服務(wù):相關(guān)分類童本、熱銷榜等,而這些服務(wù)在異常情況下直接不獲取脸候,即降級(jí)即可穷娱;

  • 讀降級(jí):比如多級(jí)緩存模式,如果后端服務(wù)有問題运沦,可以降級(jí)為只讀緩存泵额,這種方式適用于對(duì)讀一致性要求不高的場(chǎng)景;如果想學(xué)習(xí)Java工程化携添、高性能及分布式嫁盲、深入淺出。微服務(wù)烈掠、Spring羞秤,MyBatis,Netty源碼分析左敌、雙十一實(shí)戰(zhàn)或者是面試難題的朋友可以加582505643里面的群主感覺蠢萌蠢萌的可以到她那騙資料瘾蛋,都是干貨。

  • 寫降級(jí):比如秒殺搶購(gòu)矫限,我們可以只進(jìn)行Cache的更新哺哼,然后異步同步扣減庫(kù)存到DB,保證最終一致性即可叼风,此時(shí)可以將DB降級(jí)為Cache取董。

  • 爬蟲降級(jí):在大促活動(dòng)時(shí),可以將爬蟲流量導(dǎo)向靜態(tài)頁(yè)或者返回空數(shù)據(jù)咬扇,從而保護(hù)后端稀缺資源。

  • 自動(dòng)開關(guān)降級(jí)自動(dòng)降級(jí)是根據(jù)系統(tǒng)負(fù)載廊勃、資源使用情況懈贺、SLA等指標(biāo)進(jìn)行降級(jí)经窖。

  • 超時(shí)降級(jí)當(dāng)訪問的數(shù)據(jù)庫(kù)/http服務(wù)/遠(yuǎn)程調(diào)用響應(yīng)慢或者長(zhǎng)時(shí)間響應(yīng)慢,且該服務(wù)不是核心服務(wù)的話可以在超時(shí)后自動(dòng)降級(jí)梭灿;比如商品詳情頁(yè)上有推薦內(nèi)容/評(píng)價(jià)画侣,但是推薦內(nèi)容/評(píng)價(jià)暫時(shí)不展示對(duì)用戶購(gòu)物流程不會(huì)產(chǎn)生很大的影響;對(duì)于這種服務(wù)是可以超時(shí)降級(jí)的堡妒。如果是調(diào)用別人的遠(yuǎn)程服務(wù)配乱,和對(duì)方定義一個(gè)服務(wù)響應(yīng)最大時(shí)間,如果超時(shí)了則自動(dòng)降級(jí)皮迟。

Java Web學(xué)習(xí)路徑

[圖片上傳中...(image-699c26-1533449208850-6)]

Java編程所需的工具及知識(shí)

[圖片上傳中...(image-c8dfa3-1533449208850-5)]

JVM的基本結(jié)構(gòu)

[圖片上傳中...(image-345f16-1533449208850-4)]

SSH框架

[圖片上傳中...(image-cdf062-1533449208850-3)]

設(shè)計(jì)模式之間的關(guān)系

[圖片上傳中...(image-d671f2-1533449208850-2)]

JAVA知識(shí)結(jié)構(gòu)體系圖

[圖片上傳中...(image-5e8673-1533449208850-1)]

JAVA知識(shí)學(xué)習(xí)計(jì)劃圖

[圖片上傳中...(image-bcd636-1533449208850-0)]

學(xué)習(xí)需要知道: 1搬泥、是什么 2、解決了什么問題 3伏尼、怎么實(shí)現(xiàn)的

文章所有內(nèi)容均收集于網(wǎng)絡(luò)忿檩,如有錯(cuò)誤或其它問題,歡迎小伙伴留言評(píng)論爆阶、指正燥透。如有幫助,歡迎點(diǎn)贊+轉(zhuǎn)發(fā)分享辨图。

推薦閱讀

[強(qiáng)烈推薦] 精心整理|公眾號(hào)文章目錄大全

民工哥的十年故事續(xù)集:杭漂十年班套,今撤霸都!

限時(shí)免費(fèi) | ELK入門實(shí)踐之Elasticsearch

架構(gòu)設(shè)計(jì):負(fù)載均衡技術(shù)總結(jié)篇

IT技術(shù)變化快故河,技術(shù)人該何去何從吱韭?

今天我們不聊技術(shù),專懟HR忧勿!

終極指南:提高Nginx服務(wù)器硬度的12個(gè)技巧

剛剛杉女、騰訊云掛了:暴露出服務(wù)危機(jī)處理機(jī)制的薄弱!

企業(yè)面試題|最常問的MySQL面試題集合(三)

Docker鸳吸,你到底知道多少熏挎?

·end·

—寫文不易,你的轉(zhuǎn)發(fā)就是對(duì)我最大的支持—

我們一起愉快的玩耍吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晌砾,一起剝皮案震驚了整個(gè)濱河市坎拐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌养匈,老刑警劉巖哼勇,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呕乎,居然都是意外死亡积担,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門猬仁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帝璧,“玉大人先誉,你說我怎么就攤上這事〉乃福” “怎么了褐耳?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)渴庆。 經(jīng)常有香客問我铃芦,道長(zhǎng),這世上最難降的妖魔是什么襟雷? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任刃滓,我火速辦了婚禮,結(jié)果婚禮上嗤军,老公的妹妹穿的比我還像新娘注盈。我一直安慰自己,他們只是感情好叙赚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布老客。 她就那樣靜靜地躺著,像睡著了一般震叮。 火紅的嫁衣襯著肌膚如雪胧砰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天苇瓣,我揣著相機(jī)與錄音尉间,去河邊找鬼。 笑死击罪,一個(gè)胖子當(dāng)著我的面吹牛哲嘲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播媳禁,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼眠副,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了竣稽?” 一聲冷哼從身側(cè)響起囱怕,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毫别,沒想到半個(gè)月后娃弓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岛宦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年台丛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砾肺。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挽霉,死狀恐怖私恬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情炼吴,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布疫衩,位于F島的核電站硅蹦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏闷煤。R本人自食惡果不足惜童芹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲤拿。 院中可真熱鬧假褪,春花似錦、人聲如沸近顷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窒升。三九已至缀遍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饱须,已是汗流浹背域醇。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蓉媳,地道東北人譬挚。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像酪呻,于是被迫代替她去往敵國(guó)和親减宣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)号杠,會(huì)觸發(fā)此異常蚪腋。 O...
    我想起個(gè)好名字閱讀 5,334評(píng)論 0 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,111評(píng)論 1 32
  • 不足的地方請(qǐng)大家多多指正,如有其它沒有想到的常問面試題請(qǐng)大家多多評(píng)論姨蟋,一起成長(zhǎng)龄砰,感謝!~ String可以被繼承嗎...
    啟示錄是真的閱讀 2,943評(píng)論 3 3
  • 所有知識(shí)點(diǎn)已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數(shù)? 在 Jav...
    侯蛋蛋_閱讀 2,450評(píng)論 1 4
  • 人們對(duì)于品牌的信賴不僅僅是家喻戶曉,還需要有正面印象堂飞,而要樹立并保持顧客對(duì)于品牌的正面印象灌旧,首先店面形象要夠“正”...
    考工無縫門頭閱讀 314評(píng)論 0 0