2020年高級java程序員面試題

2020年高級java程序員面試題

北大青鳥長沙麓谷校區(qū)      2022-03-31 21:00:01     65

2020年高級java程序員面試題,  String,StringBuffer,StringBuilder的區(qū)別是什么?String為什么是不可變的?  答:  1、String是字符串常量,StringBuff

課程價(jià)格 請咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹


  String,StringBuffer,StringBuilder的區(qū)別是什么?String為什么是不可變的?


  答:


  1、String是字符串常量,StringBuffer和StringBuilder都是字符串變量。后兩者的字符內(nèi)容可變,而前者創(chuàng)建后內(nèi)容不可變。


  2、String不可變是因?yàn)樵贘DK中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則以鏈表的形式進(jìn)行存儲。


  2、List中的元素有序、允許有重復(fù)的元素,Set中的元素?zé)o序、不允許有重復(fù)元素。


  3、Vector線程同步,ArrayList、linkedList線程不同步。


  4、linkedList適合指定位置插入、刪除操作,不適合查找;ArrayList、Vector適合查找,不適合指定位置的插入、刪除操作。


  5、ArrayList在元素填滿容器時(shí)會自動擴(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,增長方式一定是2的指數(shù)倍。


  5、TreeMap能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)是按升序排序。


  詳見:鏈接


  小編注:為什么沒有第四題不要問我...學(xué)姐沒寫


  Tomcat,Apache,JBoss的區(qū)別?


  答:


  1、Apache是Http服務(wù)器,Tomcat是web服務(wù)器,JBoss是應(yīng)用服務(wù)器。


  2、Apache解析靜態(tài)的html文件;Tomcat可解析jsp動態(tài)頁面、也可充當(dāng)servlet容器。


  詳見:鏈接


  GET,POST區(qū)別?


  答:


  基礎(chǔ)知識:Http的請求格式如下。


  <requestline>主要包含三個信息:1、請求的類型(GET或POST),2、要訪問的資源(如resimga.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ù)器維護(hù)的一個服務(wù)器端的存儲空間;cookie是客戶端的存儲空間,由瀏覽器維護(hù)。


  2、用戶可以通過瀏覽器設(shè)置決定是否保存cookie,而不能決定是否保存Session,因?yàn)镾ession是由服務(wù)器端維護(hù)的。


  3、Session中保存的是對象,cookie中保存的是字符串。


  4、Session和cookie不能跨窗口使用,每打開一個瀏覽器系統(tǒng)會賦予一個SessionID,此時(shí)的SessionID不同,若要完成跨瀏覽器訪問數(shù)據(jù),可以使用Application。


  5、Session、cookie都有失效時(shí)間,過期后會自動刪除,減少系統(tǒng)開銷。


  詳見:鏈接


  Servlet的生命周期


  答:


  大致分為4部:Servlet類加載-->實(shí)例化-->服務(wù)-->銷毀


  下圖是Tomcat中Servlet時(shí)序圖。



  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請求,并進(jìn)行相應(yīng)處理。


  7、處理完成HttpServlet調(diào)用HttpResponse對象的方法,返回響應(yīng)數(shù)據(jù)。


  8、Servlet容器把HttpServlet的響應(yīng)結(jié)果傳回客戶端。


  其中的3個方法說明了Servlet的生命周期:


  1、init():負(fù)責(zé)初始化Servlet對象。


  2、service():負(fù)責(zé)響應(yīng)客戶端請求。


  3、destroy():當(dāng)Servlet對象推出時(shí),負(fù)責(zé)釋放占用資源。


  詳見:鏈接


  HTTP報(bào)文包含內(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語句出錯時(shí)PreparedStatement不易檢查,而Statement則更便于查錯。


  5、PreparedStatement可防止Sql助于,更加安全,而Statement不行。


  什么是SQL注入:通過sql語句的拼接達(dá)到無參數(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ù)后,進(jìn)行驗(yàn)證,此時(shí)PrepareStatement會自動檢測,而Statement不行,需要手工檢測。



    以上就是北大青鳥長沙麓谷校區(qū)Java培訓(xùn)機(jī)構(gòu)小編介紹的“2020年高級java程序員面試題”的內(nèi)容,希望對大家有幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


Java面試題 Java程序員面試題

培訓(xùn)啦提醒您:交易時(shí)請核實(shí)對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。