更新時(shí)間:2020-03-11 10:12:52 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3578次
String,StringBuffer,StringBuilder的區(qū)別是什么?String為什么是不可變的?
答:
1、String是字符串常量,StringBuffer和StringBuilder都是字符串變量。后兩者的字符內(nèi)容可變,而前者創(chuàng)建后內(nèi)容不可變。
2、String不可變是因?yàn)樵贘DK中String類被聲明為一個(gè)final類。
3、StringBuffer是線程安全的,而StringBuilder是非線程安全的。
ps:線程安全會(huì)帶來(lái)額外的系統(tǒng)開銷,所以StringBuilder的效率比StringBuffer高。如果對(duì)系統(tǒng)中的線程是否安全很掌握,可用StringBuffer,在線程不安全處加上關(guān)鍵字Synchronize。
Vector,ArrayList,LinkedList的區(qū)別是什么?
答:
1、Vector、ArrayList都是以類似數(shù)組的形式存儲(chǔ)在內(nèi)存中,LinkedList則以鏈表的形式進(jìn)行存儲(chǔ)。
2、List中的元素有序、允許有重復(fù)的元素,Set中的元素?zé)o序、不允許有重復(fù)元素。
3、Vector線程同步,ArrayList、LinkedList線程不同步。
4、LinkedList適合指定位置插入、刪除操作,不適合查找;ArrayList、Vector適合查找,不適合指定位置的插入、刪除操作。
5、ArrayList在元素填滿容器時(shí)會(huì)自動(dòng)擴(kuò)充容器大小的50%,而Vector則是100%,因此ArrayList更節(jié)省空間。
HashTable,HashMap,TreeMap區(qū)別?
答:
1、HashTable線程同步,HashMap非線程同步。
2、HashTable不允許<鍵,值>有空值,HashMap允許<鍵,值>有空值。
3、HashTable使用Enumeration,HashMap使用Iterator。
4、HashTable中hash數(shù)組的默認(rèn)大小是11,增加方式的old*2+1,HashMap中hash數(shù)組的默認(rèn)大小是16,增長(zhǎng)方式一定是2的指數(shù)倍。
5、TreeMap能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)是按升序排序。
詳見:鏈接
小編注:為什么沒(méi)有第四題不要問(wèn)我...學(xué)姐沒(méi)寫
Tomcat,Apache,JBoss的區(qū)別?
答:
1、Apache是Http服務(wù)器,Tomcat是web服務(wù)器,JBoss是應(yīng)用服務(wù)器。
2、Apache解析靜態(tài)的html文件;Tomcat可解析jsp動(dòng)態(tài)頁(yè)面、也可充當(dāng)servlet容器。
詳見:鏈接
GET,POST區(qū)別?
答:
基礎(chǔ)知識(shí):Http的請(qǐng)求格式如下。
<requestline>主要包含三個(gè)信息:1、請(qǐng)求的類型(GET或POST),2、要訪問(wèn)的資源(如\res\img\a.jif),3、Http版本(http/1.1)
<header>用來(lái)說(shuō)明服務(wù)器要使用的附加信息
<blankline>這是Http的規(guī)定,必須空一行
[<request-body>]請(qǐng)求的內(nèi)容數(shù)據(jù)
區(qū)別:
1、Get是從服務(wù)器端獲取數(shù)據(jù),Post則是向服務(wù)器端發(fā)送數(shù)據(jù)。
2、在客戶端,Get方式通過(guò)URL提交數(shù)據(jù),在URL地址欄可以看到請(qǐng)求消息,該消息被編碼過(guò);Post數(shù)據(jù)則是放在Htmlheader內(nèi)提交。
3、對(duì)于Get方式,服務(wù)器端用Request.QueryString獲取變量的值;對(duì)用Post方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)值。
4、Get方式提交的數(shù)據(jù)最多1024字節(jié),而Post則沒(méi)有限制。
5、Get方式提交的參數(shù)及參數(shù)值會(huì)在地址欄顯示,不安全,而Post不會(huì),比較安全。
詳見:鏈接
Session,Cookie區(qū)別
答:
1、Session由應(yīng)用服務(wù)器維護(hù)的一個(gè)服務(wù)器端的存儲(chǔ)空間;Cookie是客戶端的存儲(chǔ)空間,由瀏覽器維護(hù)。
2、用戶可以通過(guò)瀏覽器設(shè)置決定是否保存Cookie,而不能決定是否保存Session,因?yàn)镾ession是由服務(wù)器端維護(hù)的。
3、Session中保存的是對(duì)象,Cookie中保存的是字符串。
4、Session和Cookie不能跨窗口使用,每打開一個(gè)瀏覽器系統(tǒng)會(huì)賦予一個(gè)SessionID,此時(shí)的SessionID不同,若要完成跨瀏覽器訪問(wèn)數(shù)據(jù),可以使用Application。
5、Session、Cookie都有失效時(shí)間,過(guò)期后會(huì)自動(dòng)刪除,減少系統(tǒng)開銷。
詳見:鏈接
Servlet的生命周期
答:
大致分為4部:Servlet類加載-->實(shí)例化-->服務(wù)-->銷毀
下圖是Tomcat中Servlet時(shí)序圖。
1、WebClient向Servlet容器(Tomcat)發(fā)出Http請(qǐng)求。
2、Servlet容器接收Client端的請(qǐng)求。
3、Servlet容器創(chuàng)建一個(gè)HttpRequest對(duì)象,將Client的請(qǐng)求信息封裝到這個(gè)對(duì)象中。
4、Servlet創(chuàng)建一個(gè)HttpResponse對(duì)象。
5、Servlet調(diào)用HttpServlet對(duì)象的service方法,把HttpRequest對(duì)象和HttpResponse對(duì)象作為參數(shù)傳遞給HttpServlet對(duì)象中。
6、HttpServlet調(diào)用HttpRequest對(duì)象的方法,獲取Http請(qǐng)求,并進(jìn)行相應(yīng)處理。
7、處理完成HttpServlet調(diào)用HttpResponse對(duì)象的方法,返回響應(yīng)數(shù)據(jù)。
8、Servlet容器把HttpServlet的響應(yīng)結(jié)果傳回客戶端。
其中的3個(gè)方法說(shuō)明了Servlet的生命周期:
1、init():負(fù)責(zé)初始化Servlet對(duì)象。
2、service():負(fù)責(zé)響應(yīng)客戶端請(qǐng)求。
3、destroy():當(dāng)Servlet對(duì)象推出時(shí),負(fù)責(zé)釋放占用資源。
詳見:鏈接
HTTP報(bào)文包含內(nèi)容
答:
主要包含四部分:
1、requestline
2、headerline
3、blankline
4、requestbody
詳見:鏈接
Statement與PreparedStatement的區(qū)別,什么是SQL注入,如何防止SQL注入
答:
1、PreparedStatement支持動(dòng)態(tài)設(shè)置參數(shù),Statement不支持。
2、PreparedStatement可避免如類似單引號(hào)的編碼麻煩,Statement不可以。
3、PreparedStatement支持預(yù)編譯,Statement不支持。
4、在sql語(yǔ)句出錯(cuò)時(shí)PreparedStatement不易檢查,而Statement則更便于查錯(cuò)。
5、PreparedStatement可防止Sql助于,更加安全,而Statement不行。
什么是SQL注入:通過(guò)sql語(yǔ)句的拼接達(dá)到無(wú)參數(shù)查詢數(shù)據(jù)庫(kù)數(shù)據(jù)目的的方法。
如將要執(zhí)行的sql語(yǔ)句為select*fromtablewherename="+appName+",利用appName參數(shù)值的輸入,來(lái)生成惡意的sql語(yǔ)句,如將['or'1'='1']傳入可在數(shù)據(jù)庫(kù)中執(zhí)行。
因此可以采用PrepareStatement來(lái)避免Sql注入,在服務(wù)器端接收參數(shù)數(shù)據(jù)后,進(jìn)行驗(yàn)證,此時(shí)PrepareStatement會(huì)自動(dòng)檢測(cè),而Statement不行,需要手工檢測(cè)。
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“2020年高級(jí)java程序員面試題”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)