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