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