欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

2018年java技術(shù)面試題整理

 更新時(shí)間:2018年02月11日 10:45:41   投稿:laozhang  
小編為大家整理了2018年最新的關(guān)于java技術(shù)相關(guān)的面試題,以及給出了最簡(jiǎn)簡(jiǎn)答方式,學(xué)習(xí)下吧。

1、servlet執(zhí)行流程

客戶(hù)端發(fā)出http請(qǐng)求,web服務(wù)器將請(qǐng)求轉(zhuǎn)發(fā)到servlet容器,servlet容器解析url并根據(jù)web.xml找到相對(duì)應(yīng)的servlet,并將request、response對(duì)象傳遞給找到的servlet,servlet根據(jù)request就可以知道是誰(shuí)發(fā)出的請(qǐng)求,請(qǐng)求信息及其他信息,當(dāng)servlet處理完業(yè)務(wù)邏輯后會(huì)將信息放入到response并響應(yīng)到客戶(hù)端。

2、springMVC的執(zhí)行流程

springMVC是由dispatchservlet為核心的分層控制框架。首先客戶(hù)端發(fā)出一個(gè)請(qǐng)求web服務(wù)器解析請(qǐng)求url并去匹配dispatchservlet的映射url,如果匹配上就將這個(gè)請(qǐng)求放入到dispatchservlet,dispatchservlet根據(jù)mapping映射配置去尋找相對(duì)應(yīng)的handel,然后把處理權(quán)交給找到的handel,handel封裝了處理業(yè)務(wù)邏輯的代碼,當(dāng)handel處理完后會(huì)返回一個(gè)邏輯視圖modelandview給dispatchservlet,此時(shí)的modelandview是一個(gè)邏輯視圖不是一個(gè)正式視圖,所以dispatchservlet會(huì)通過(guò)viewresource視圖資源去解析modelandview,然后將解析后的參數(shù)放到view中返回到客戶(hù)端并展現(xiàn)。

3、給定一個(gè)txt文件,如何得到某字符串出現(xiàn)的次數(shù)

File file = new File("E://test.txt");
InputStream is = new FileInputStream(file);
byte b[] = new byte[1024];
int a = is.read(b);
String str[] = new String(b,0,a).split("");
int count = 0;
for(int i = 0;i<str.length;i++){
if("a".equals(str[i]))count++;
}
System.out.println(count);

4、Java設(shè)計(jì)模式思想(單列模式,工廠(chǎng)模式,策略模式,共23種設(shè)計(jì)模式)

a) 單例模式:?jiǎn)卫J胶诵闹恍枰猲ew一個(gè)實(shí)例對(duì)象的模式,比如數(shù)據(jù)庫(kù)連接,在線(xiàn)人數(shù)等,一些網(wǎng)站上看到的在線(xiàn)人數(shù)統(tǒng)計(jì)就是通過(guò)單例模式實(shí)現(xiàn)的,把一個(gè)計(jì)時(shí)器存放在數(shù)據(jù)庫(kù)或者內(nèi)存中,當(dāng)有人登陸的時(shí)候取出來(lái)加一再放回去,有人退出登陸的時(shí)候取出來(lái)減一再放回去,但是當(dāng)有兩個(gè)人同時(shí)登陸的時(shí)候,會(huì)同時(shí)取出計(jì)數(shù)器,同時(shí)加一,同時(shí)放回去,這樣的話(huà)數(shù)據(jù)就會(huì)錯(cuò)誤,所以需要一個(gè)全局變量的對(duì)象給全部人使用,只需要new出一個(gè)實(shí)例對(duì)象,這就是單例模式的應(yīng)用,并且單例模式節(jié)省資源,因?yàn)樗刂屏藢?shí)例對(duì)象的個(gè)數(shù),并有利于gc回收。

b) 策略模式:就是將幾個(gè)類(lèi)中公共的方法提取到一個(gè)新的類(lèi)中,從而使擴(kuò)展更容易,保證代碼的可移植性,可維護(hù)性強(qiáng)。比如有個(gè)需求是寫(xiě)鴨子對(duì)象,鴨子有叫,飛,外形這三種方法,如果每個(gè)鴨子類(lèi)都寫(xiě)這三個(gè)方法會(huì)出現(xiàn)代碼的冗余,這時(shí)候我們可以把鴨子中的叫,飛,外形這三個(gè)方法提取出來(lái),放到鴨父類(lèi)中,讓每個(gè)鴨子都繼承這個(gè)鴨父類(lèi),重寫(xiě)這三個(gè)方法,這樣封裝的代碼可移植性強(qiáng),當(dāng)用戶(hù)提出新的需求比如鴨子會(huì)游泳,那么對(duì)于我們oo程序員來(lái)講就非常簡(jiǎn)單了我們只需要在鴨父類(lèi)中加一個(gè)游泳的方法,讓會(huì)游泳的鴨子重寫(xiě)游泳方法就可以了。

c) 工廠(chǎng)模式:簡(jiǎn)單的工廠(chǎng)模式主要是統(tǒng)一提供實(shí)例對(duì)象的引用,通過(guò)工廠(chǎng)模式接口獲取實(shí)例對(duì)象的引用。比如一個(gè)登陸功能,后端有三個(gè)類(lèi),controller類(lèi),interface類(lèi),實(shí)現(xiàn)接口的實(shí)現(xiàn)類(lèi)。當(dāng)客戶(hù)端發(fā)出一個(gè)請(qǐng)求,當(dāng)請(qǐng)求傳到controller類(lèi)中時(shí),controller獲取接口的引用對(duì)象,而實(shí)現(xiàn)接口的實(shí)現(xiàn)類(lèi)中封裝好了登陸的業(yè)務(wù)邏輯代碼。當(dāng)你需要加一個(gè)注冊(cè)需求的時(shí)候只需要在接口類(lèi)中加一個(gè)注冊(cè)方法,實(shí)現(xiàn)類(lèi)中實(shí)現(xiàn)方法,controller獲取接口的引用對(duì)象即可,不需要改動(dòng)原來(lái)的代碼,這種做法是的可拓展性強(qiáng)。

5、冒泡排序、二分查找

a) 冒泡

public static void mp(int a[]) {
int swap = 0;
for (int i = 0; i < a.length; i++) {
for (int j = i; j < a.length; j++) {
if (a[j] > a[i]) {
swap = a[i];
a[i] = a[j];
a[j] = swap;
}
}
}
System.out.println(Arrays.toString(a));
}

b)二分查找

public static int ef(int a[], int tag) {
int first = 0;
int end = a.length;
for (int i = 0; i < a.length; i++) {
int middle = (first + end) / 2;
if (tag == a[middle]) {
return middle;
}
if (tag > a[middle]) {
first = middle + 1;
}
if (tag < a[middle]) {
end = middle - 1;
}
}
return 0;
}

6-8、對(duì)ajax的理解

a) Ajax為異步請(qǐng)求,即局部刷新技術(shù),在傳統(tǒng)的頁(yè)面中,用戶(hù)需要點(diǎn)擊按鈕或者事件觸發(fā)請(qǐng)求,到刷新頁(yè)面,而異步技術(shù)為不需要點(diǎn)擊即可觸發(fā)事件,這樣使得用戶(hù)體驗(yàn)感增強(qiáng),比如商城購(gòu)物車(chē)的異步加載,當(dāng)你點(diǎn)擊商品時(shí)無(wú)需請(qǐng)求后臺(tái)而直接動(dòng)態(tài)修改參數(shù)。

9、父類(lèi)與子類(lèi)之間的調(diào)用順序(打印結(jié)果)

a) 父類(lèi)靜態(tài)代碼塊

b) 子類(lèi)靜態(tài)代碼塊

c) 父類(lèi)構(gòu)造方法

d) 子類(lèi)構(gòu)造方法

e) 子類(lèi)普通方法

f) 重寫(xiě)父類(lèi)的方法,則打印重寫(xiě)后的方法

10、內(nèi)部類(lèi)與外部類(lèi)的調(diào)用

a) 內(nèi)部類(lèi)可以直接調(diào)用外部類(lèi)包括private的成員變量,使用外部類(lèi)引用的this.關(guān)鍵字調(diào)用即可

b) 而外部類(lèi)調(diào)用內(nèi)部類(lèi)需要建立內(nèi)部類(lèi)對(duì)象

11、多線(xiàn)程

a)一個(gè)進(jìn)程是一個(gè)獨(dú)立的運(yùn)行環(huán)境,可以看做是一個(gè)程序,而線(xiàn)程可以看做是進(jìn)程的一個(gè)任務(wù),比如QQ是一個(gè)進(jìn)程,而一個(gè)QQ窗口是一個(gè)線(xiàn)程。

b)在多線(xiàn)程程序中,多線(xiàn)程并發(fā)可以提高程序的效率,cpu不會(huì)因?yàn)槟硞€(gè)線(xiàn)程等待資源而進(jìn)入空閑狀態(tài),它會(huì)把資源讓給其他的線(xiàn)程。

c)用戶(hù)線(xiàn)程就是我們開(kāi)發(fā)程序是創(chuàng)建的線(xiàn)程,而守護(hù)線(xiàn)程為系統(tǒng)線(xiàn)程,如JVM虛擬中的GC

d)線(xiàn)程的優(yōu)先級(jí)別:每一個(gè)線(xiàn)程都有優(yōu)先級(jí)別,有限級(jí)別高的可以先獲取CPU資源使該線(xiàn)程從就緒狀態(tài)轉(zhuǎn)為運(yùn)行狀態(tài)。也可以自定義線(xiàn)程的有限級(jí)別

e)死鎖:至少兩個(gè)以上線(xiàn)程爭(zhēng)取兩個(gè)以上cpu資源,避免死鎖就避免使用嵌套鎖,只需要在他們需要同步的地方加鎖和避免無(wú)限等待

12、AOP與IOC的概念(即spring的核心)

a) IOC:Spring是開(kāi)源框架,使用框架可以使我們減少工作量,提高工作效率并且它是分層結(jié)構(gòu),即相對(duì)應(yīng)的層處理對(duì)應(yīng)的業(yè)務(wù)邏輯,減少代碼的耦合度。而spring的核心是IOC控制反轉(zhuǎn)和AOP面向切面編程。IOC控制反轉(zhuǎn)主要強(qiáng)調(diào)的是程序之間的關(guān)系是由容器控制的,容器控制對(duì)象,控制了對(duì)外部資源的獲取。而反轉(zhuǎn)即為,在傳統(tǒng)的編程中都是由我們創(chuàng)建對(duì)象獲取依賴(lài)對(duì)象,而在IOC中是容器幫我們創(chuàng)建對(duì)象并注入依賴(lài)對(duì)象,正是容器幫我們查找和注入對(duì)象,對(duì)象是被獲取,所以叫反轉(zhuǎn)。

b) AOP:面向切面編程,主要是管理系統(tǒng)層的業(yè)務(wù),比如日志,權(quán)限,事物等。AOP是將封裝好的對(duì)象剖開(kāi),找出其中對(duì)多個(gè)對(duì)象產(chǎn)生影響的公共行為,并將其封裝為一個(gè)可重用的模塊,這個(gè)模塊被命名為切面(aspect),切面將那些與業(yè)務(wù)邏輯無(wú)關(guān),卻被業(yè)務(wù)模塊共同調(diào)用的邏輯提取并封裝起來(lái),減少了系統(tǒng)中的重復(fù)代碼,降低了模塊間的耦合度,同時(shí)提高了系統(tǒng)的可維護(hù)性。

13、hibernate的核心思想

a) Hibernate的核心思想是ROM對(duì)象關(guān)系映射機(jī)制。它是將表與表之間的操作映射成對(duì)象與對(duì)象之間的操作。也就是從數(shù)據(jù)庫(kù)中提取的信息會(huì)自動(dòng)按照你設(shè)置的映射要求封裝成特定的對(duì)象。所以hibernate就是通過(guò)將數(shù)據(jù)表實(shí)體類(lèi)的映射,使得對(duì)對(duì)象的修改對(duì)應(yīng)數(shù)據(jù)行的修改。

14、Struts1與Struts2的區(qū)別

15、最優(yōu)刪除謀字符串的某個(gè)字符

16-17、Arraylist與linkedlist的區(qū)別

a) 都是實(shí)現(xiàn)list接口的列表,arraylist是基于數(shù)組的數(shù)據(jù)結(jié)構(gòu),linkedlist是基于鏈表的數(shù)據(jù)結(jié)構(gòu),當(dāng)獲取特定元素時(shí),ArrayList效率比較快,它通過(guò)數(shù)組下標(biāo)即可獲取,而linkedlist則需要移動(dòng)指針。當(dāng)存儲(chǔ)元素與刪除元素時(shí)linkedlist效率較快,只需要將指針移動(dòng)指定位置增加或者刪除即可,而arraylist需要移動(dòng)數(shù)據(jù)。

18、數(shù)據(jù)庫(kù)優(yōu)化

a) 選擇合適的字段,比如郵箱字段可以設(shè)為char(6),盡量把字段設(shè)置為notnull,這樣查詢(xún)的時(shí)候數(shù)據(jù)庫(kù)就不需要比較null值

b) 使用關(guān)聯(lián)查詢(xún)( left join on)查詢(xún)代替子查詢(xún)

c) 使用union聯(lián)合查詢(xún)手動(dòng)創(chuàng)建臨時(shí)表

d) 開(kāi)啟事物,當(dāng)數(shù)據(jù)庫(kù)執(zhí)行多條語(yǔ)句出現(xiàn)錯(cuò)誤時(shí),事物會(huì)回滾,可以維護(hù)數(shù)據(jù)庫(kù)的完整性

e) 使用外鍵,事物可以維護(hù)數(shù)據(jù)的完整性但是它卻不能保證數(shù)據(jù)的關(guān)聯(lián)性,使用外鍵可以保證數(shù)據(jù)的關(guān)聯(lián)性

f) 使用索引,索引是提高數(shù)據(jù)庫(kù)性能的常用方法,它可以令數(shù)據(jù)庫(kù)服務(wù)器以比沒(méi)有索引快的多的速度檢索特定的行,特別是對(duì)于max,min,order by查詢(xún)時(shí),效果更明顯

g) 優(yōu)化的查詢(xún)語(yǔ)句,絕大多數(shù)情況下,使用索引可以提高查詢(xún)的速度,但如果sql語(yǔ)句使用不恰當(dāng)?shù)脑?huà),索引無(wú)法發(fā)揮它的特性。

19、Tomcat服務(wù)器優(yōu)化(內(nèi)存,并發(fā)連接數(shù),緩存)

a) 內(nèi)存優(yōu)化:主要是對(duì)Tomcat啟動(dòng)參數(shù)進(jìn)行優(yōu)化,我們可以在Tomcat啟動(dòng)腳本中修改它的最大內(nèi)存數(shù)等等。

b) 線(xiàn)程數(shù)優(yōu)化:Tomcat的并發(fā)連接參數(shù),主要在Tomcat配置文件中server.xml中配置,比如修改最小空閑連接線(xiàn)程數(shù),用于提高系統(tǒng)處理性能等等。

c) 優(yōu)化緩存:打開(kāi)壓縮功能,修改參數(shù),比如壓縮的輸出內(nèi)容大小默認(rèn)為2KB,可以適當(dāng)?shù)男薷摹?br />

20、HTTP協(xié)議

a) 常用的請(qǐng)求方法有g(shù)et、post

b) Get與post的區(qū)別:傳送數(shù)據(jù),get攜帶參數(shù)與訪(fǎng)問(wèn)地址傳送,用戶(hù)可以看見(jiàn),這的話(huà)信息會(huì)不安全,導(dǎo)致信息泄露。而post則將字段與對(duì)應(yīng)值封裝在實(shí)體中傳送,這個(gè)過(guò)程用戶(hù)是不可見(jiàn)的。Get傳遞參數(shù)有限制,而post無(wú)限制。

21、TCP/UDP協(xié)議

22、Java集合類(lèi)框架的基本接口有哪些

a) Collection集合接口,List、set實(shí)現(xiàn)Collection接口,arraylist、linkedlist,vector實(shí)現(xiàn)list接口,stack繼承vector,Map接口,hashtable、hashmap實(shí)現(xiàn)map接口

23、類(lèi)加載的過(guò)程

a) 遇到一個(gè)新的類(lèi)時(shí),首先會(huì)到方法區(qū)去找class文件,如果沒(méi)有找到就會(huì)去硬盤(pán)中找class文件,找到后會(huì)返回,將class文件加載到方法區(qū)中,在類(lèi)加載的時(shí)候,靜態(tài)成員變量會(huì)被分配到方法區(qū)的靜態(tài)區(qū)域,非靜態(tài)成員變量分配到非靜態(tài)區(qū)域,然后開(kāi)始給靜態(tài)成員變量初始化,賦默認(rèn)值,賦完默認(rèn)值后,會(huì)根據(jù)靜態(tài)成員變量書(shū)寫(xiě)的位置賦顯示值,然后執(zhí)行靜態(tài)代碼。當(dāng)所有的靜態(tài)代碼執(zhí)行完,類(lèi)加載才算完成。

24、對(duì)象的創(chuàng)建

a) 遇到一個(gè)新類(lèi)時(shí),會(huì)進(jìn)行類(lèi)的加載,定位到class文件

b) 對(duì)所有靜態(tài)成員變量初始化,靜態(tài)代碼塊也會(huì)執(zhí)行,而且只在類(lèi)加載的時(shí)候執(zhí)行一次

c) New 對(duì)象時(shí),jvm會(huì)在堆中分配一個(gè)足夠大的存儲(chǔ)空間

d) 存儲(chǔ)空間清空,為所有的變量賦默認(rèn)值,所有的對(duì)象引用賦值為null

e) 根據(jù)書(shū)寫(xiě)的位置給字段一些初始化操作

f) 調(diào)用構(gòu)造器方法(沒(méi)有繼承)

25、jvm的優(yōu)化

a) 設(shè)置參數(shù),設(shè)置jvm的最大內(nèi)存數(shù)

b) 垃圾回收器的選擇

26、高并發(fā)處理

a) 了解一點(diǎn)高并發(fā)性問(wèn)題,比如一W人搶一張票時(shí),如何保證票在沒(méi)買(mǎi)走的情況下所有人都能看見(jiàn)這張票,顯然是不能用同步機(jī)制,因?yàn)閟ynchronize是鎖同步一次只能一個(gè)人進(jìn)行。這時(shí)候可以用到鎖機(jī)制,采用樂(lè)觀鎖可以解決這個(gè)問(wèn)題。樂(lè)觀鎖的簡(jiǎn)單意思是在不鎖定表的情況下,利用業(yè)務(wù)的控制來(lái)解決并發(fā)問(wèn)題,這樣即保證數(shù)據(jù)的可讀性,又保證保存數(shù)據(jù)的排他性,保證性能的同時(shí)解決了并發(fā)帶來(lái)的臟讀數(shù)據(jù)問(wèn)題。

27、事物的理解

a) 事物具有原子性,一致性,持久性,隔離性

b) 原子性:是指在一個(gè)事物中,要么全部執(zhí)行成功,要么全部失敗回滾。

c) 一致性:事物執(zhí)行之前和執(zhí)行之后都處于一致性狀態(tài)

d) 持久性:事物多數(shù)據(jù)的操作是永久性

e) 隔離性:當(dāng)一個(gè)事物正在對(duì)數(shù)據(jù)進(jìn)行操作時(shí),另一個(gè)事物不可以對(duì)數(shù)據(jù)進(jìn)行操作,也就是多個(gè)并發(fā)事物之間相互隔離。

28、Struts工作流程

a) 客戶(hù)端發(fā)出一個(gè)請(qǐng)求到servlet容器

b) 請(qǐng)求經(jīng)過(guò)一些列過(guò)濾被filterdispatcher調(diào)用,filterdispatch通過(guò)actionMapper去找相對(duì)應(yīng)的action。

c) Actionmapper找到對(duì)應(yīng)的action返回給filterdispatch,dispatch把處理權(quán)交給actionproxy

d) Actionproxy通過(guò)配置文件找到對(duì)應(yīng)的action類(lèi)

e) Actionproxy創(chuàng)建一個(gè)actionIinvocation的實(shí)例處理業(yè)務(wù)邏輯

f) 一旦action處理完畢,actioninvocation負(fù)責(zé)根據(jù)stuts.xml的配置找到對(duì)應(yīng)的返回結(jié)果。返回結(jié)果通常是jsp頁(yè)面。

相關(guān)文章

  • 詳解Java如何獲取文件編碼格式

    詳解Java如何獲取文件編碼格式

    這篇文章主要介紹了詳解Java如何獲取文件編碼格式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • MyBatisPlus 查詢(xún)selectOne方法實(shí)現(xiàn)

    MyBatisPlus 查詢(xún)selectOne方法實(shí)現(xiàn)

    本文主要介紹了MyBatisPlus 查詢(xún)selectOne方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • springboot自動(dòng)配置原理解析

    springboot自動(dòng)配置原理解析

    這篇文章主要介紹了springboot自動(dòng)配置原理解析,幫助大家更好的理解和學(xué)習(xí)使用springboot,感興趣的朋友可以了解下
    2021-04-04
  • Java Annotation詳解及實(shí)例代碼

    Java Annotation詳解及實(shí)例代碼

    這篇文章主要介紹了Java Annotation詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • IDEA Debug啟動(dòng)tomcat報(bào)60659端口占用錯(cuò)誤的解決

    IDEA Debug啟動(dòng)tomcat報(bào)60659端口占用錯(cuò)誤的解決

    工作中將開(kāi)發(fā)工具由Eclipse轉(zhuǎn)為IntelliJ IDEA,在使用過(guò)程中遇到許多問(wèn)題,其中60659端口占用錯(cuò)誤對(duì)于不熟悉IDEA的開(kāi)發(fā)者來(lái)說(shuō)或許會(huì)比較頭痛,本文就來(lái)解決一下這個(gè)問(wèn)題
    2018-11-11
  • 通過(guò)實(shí)例了解Java Integer類(lèi)和int的區(qū)別

    通過(guò)實(shí)例了解Java Integer類(lèi)和int的區(qū)別

    這篇文章主要介紹了通過(guò)實(shí)例了解Java Integer類(lèi)和int的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot中@EnableAsync和@Async注解的使用小結(jié)

    SpringBoot中@EnableAsync和@Async注解的使用小結(jié)

    在SpringBoot中,可以通過(guò)@EnableAsync注解來(lái)啟動(dòng)異步方法調(diào)用的支持,通過(guò)@Async注解來(lái)標(biāo)識(shí)異步方法,讓方法能夠在異步線(xiàn)程中執(zhí)行,本文就來(lái)介紹一下,感興趣的可以了解一下
    2023-11-11
  • Spring事務(wù)失效的幾種原因

    Spring事務(wù)失效的幾種原因

    在日常編碼過(guò)程中常常涉及到事務(wù),在前兩天看到一篇文章提到了Spring事務(wù),那么在此總結(jié)下在Spring環(huán)境下事務(wù)失效的幾種原因.
    2020-09-09
  • 詳解spring batch的使用和定時(shí)器Quart的使用

    詳解spring batch的使用和定時(shí)器Quart的使用

    spring Batch是一個(gè)基于Spring的企業(yè)級(jí)批處理框架,它通過(guò)配合定時(shí)器Quartz來(lái)輕易實(shí)現(xiàn)大批量的數(shù)據(jù)讀取或插入,并且全程自動(dòng)化,無(wú)需人員管理
    2017-08-08
  • Java EE項(xiàng)目中的異常處理總結(jié)(一篇不得不看的文章)

    Java EE項(xiàng)目中的異常處理總結(jié)(一篇不得不看的文章)

    什么是異常?運(yùn)行時(shí)發(fā)生的可被捕獲和處理的錯(cuò)誤。這篇文章主要介紹了Java EE項(xiàng)目中的異常處理總結(jié),有需要的可以了解一下。
    2016-11-11

最新評(píng)論