最新阿里巴巴java面試題級答案

最新阿里巴巴java面試題級答案

長沙達(dá)內(nèi)教育      2022-05-02 08:00:01     12

最新阿里巴巴java面試題級答案,今天長沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)小編為大家分享“最新阿里巴巴java面試題級答案”,希望通過此文能夠幫助到大家,下面就隨小編一起

課程價(jià)格 請咨詢

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

詳細(xì)介紹


今天長沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)小編為大家分享“最新阿里巴巴java面試題級答案”,希望通過此文能夠幫助到大家,下面就隨小編一起來了解一下最新阿里巴巴java面試題級答案。



一、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是非線程安全的。


   線程安全會(huì)帶來額外的系統(tǒng)開銷,所以StringBuilder的效率比StringBuffer高。如果對系統(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,增長方式一定是2的指數(shù)倍。


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



  四、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)頁面、也可充當(dāng)servlet容器。



  五、Session, cookie區(qū)別?


  1、Session由應(yīng)用服務(wù)器維護(hù)的一個(gè)服務(wù)器端的存儲(chǔ)空間;cookie是客戶端的存儲(chǔ)空間,由瀏覽器維護(hù)。


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


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


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


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



  六、Servlet的生命周期


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


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


  

1、Web Client向Servlet容器(Tomcat)發(fā)出Http請求。


  2、Servlet容器接收Client端的請求。


  3、Servlet容器創(chuàng)建一個(gè)HttpRequest對象,將Client的請求信息封裝到這個(gè)對象中。


  4、Servlet創(chuàng)建一個(gè)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個(gè)方法說明了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、request line


  2、header line


  3、blank line


  4、request body



  八、Statement與PreparedStatement的區(qū)別,什么是SQL注入,如何防止SQL注入


  1、PreparedStatement支持動(dòng)態(tài)設(shè)置參數(shù),Statement不支持。


  2、PreparedStatement可避免如類似 單引號 的編碼麻煩,Statement不可以。


  3、PreparedStatement支持預(yù)編譯,Statement不支持。


  4、在sql語句出錯(cuò)時(shí)PreparedStatement不易檢查,而Statement則更便于查錯(cuò)。


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


  什么是SQL注入: 通過sql語句的拼接達(dá)到無參數(shù)查詢數(shù)據(jù)庫數(shù)據(jù)目的的方法。


  如將要執(zhí)行的sql語句為 select * from table where name = "+appName+",利用appName參數(shù)值的輸入,來生成惡意的sql語句,如將['or'1'='1'] 傳入可在數(shù)據(jù)庫中執(zhí)行。


  因此可以采用PrepareStatement來避免Sql注入,在服務(wù)器端接收參數(shù)數(shù)據(jù)后,進(jìn)行驗(yàn)證,此時(shí)PrepareStatement會(huì)自動(dòng)檢測,而Statement不行,需要手工檢測。



  九、sendRedirect, foward區(qū)別


  1、foward是服務(wù)器端控制頁面轉(zhuǎn)向,在客戶端的瀏覽器地址中不會(huì)顯示轉(zhuǎn)向后的地址;sendRedirect則是完全的跳轉(zhuǎn),瀏覽器中會(huì)顯示跳轉(zhuǎn)的地址并重新發(fā)送請求鏈接。


  原理:forward是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后再將這些內(nèi)容返回給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的這些內(nèi)容是從哪來的,所以地址欄還是原來的地址。


  redirect是服務(wù)器端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請求的那個(gè)地址,瀏覽器會(huì)用剛才的所有參數(shù)重新發(fā)送新的請求。



  十、關(guān)于JAVA內(nèi)存模型,一個(gè)對象(兩個(gè)屬性,四個(gè)方法)實(shí)例化100次,現(xiàn)在內(nèi)存中的存儲(chǔ)狀態(tài),幾個(gè)對象,幾個(gè)屬性,幾個(gè)方法。


  由于JAVA中new出來的對象都是放在堆中,所以如果要實(shí)例化100次,將在堆中產(chǎn)生100個(gè)對象,一般對象與其中的屬性、方法都屬于一個(gè)整體,但如果 屬性和方法是靜態(tài)的,就是用static關(guān)鍵字聲明的,那么屬于類的屬性和方法永遠(yuǎn)只在內(nèi)存中存在一份。



  十一、談?wù)凥ibernate的理解,一級和二級緩存的作用,在項(xiàng)目中Hibernate都是怎么使用緩存的。


  Hibernate是一個(gè)開發(fā)的對象關(guān)系映射框架(ORM)。它對JDBC進(jìn)行了非常對象封裝,Hibernate允許程序員采用面向?qū)ο蟮姆绞絹聿僮麝P(guān)系數(shù)據(jù)庫。


  Hibernate的優(yōu)點(diǎn):


  1、程序更加面向?qū)ο?/p>


  2、提高了生產(chǎn)率


  3、方便移植


  4、無入侵性。


  缺點(diǎn):


  1、效率比JDBC略差


  2、不適合批量操作


  3、只能配置一種關(guān)聯(lián)關(guān)系


  Hibernate有四種查詢方式:


  1、get、load方法,根據(jù)id號查詢對象。


  2、Hibernate query language


  3、標(biāo)準(zhǔn)查詢語言


  4、通過sql查詢


  Hibernage工作原理:


  1、配置hibernate對象關(guān)系映射文件、啟動(dòng)服務(wù)器


  2、服務(wù)器通過實(shí)例化Configuration對象,讀取hibernate.cfg.xml文件的配置內(nèi)容,并根據(jù)相關(guān)的需求建好表以及表之間的映射關(guān)系。


  3、通過實(shí)例化的Configuration對象建立SeesionFactory實(shí)例,通過SessionFactory實(shí)例創(chuàng)建Session對象。


  4、通過Seesion對象完成數(shù)據(jù)庫的增刪改查操作。


  Hibernate中的狀態(tài)轉(zhuǎn)移


  臨時(shí)狀態(tài)(transient)


  1、不處于session緩存中


  2、數(shù)據(jù)庫中沒有對象記錄


  java是如何進(jìn)入臨時(shí)狀態(tài)的:


1、通過new語句創(chuàng)建一個(gè)對象時(shí)。


2、剛調(diào)用session的delete方法時(shí),從seesion緩存中刪除一個(gè)對象時(shí)。


  持久化狀態(tài)(persisted)


  1、處于session緩存中


  2、持久化對象數(shù)據(jù)庫中沒有對象記錄


  3、seesion在特定的時(shí)刻會(huì)保存兩者同步


  java如何進(jìn)入持久化狀態(tài):


1、seesion的save()方法。


2、seesion的load().get()方法返回的對象。


3、seesion的find()方法返回的list集合中存放的對象。


4、Session的update().save()方法。


  流離狀態(tài)(detached)


  1、不再位于session緩存中


  2、游離對象由持久化狀態(tài)轉(zhuǎn)變而來,數(shù)據(jù)庫中還沒有相應(yīng)記錄。


  java如何進(jìn)入流離狀態(tài):Session的close()。Session的evict()方法,從緩存中刪除一個(gè)對象。


  具體如下圖所示:



  Hibernate中的緩存主要有Session緩存(一級緩存)和SessionFactory緩存(二級緩存,一般由第三方提供)。



  十二、反射講一講,主要是概念,都在哪需要反射機(jī)制,反射的性能,如何優(yōu)化


  反射機(jī)制的定義:


  是在運(yùn)行狀態(tài)中,對于任意的一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法,對任意一個(gè)對象都能夠通過反射機(jī)制調(diào)用一個(gè)類的任意方法,這種動(dòng)態(tài)獲取類信息及動(dòng)態(tài)調(diào)用類對象方法的功能稱為java的反射機(jī)制。


  反射的作用:


  1、動(dòng)態(tài)地創(chuàng)建類的實(shí)例,將類綁定到現(xiàn)有的對象中,或從現(xiàn)有的對象中獲取類型。


  2、應(yīng)用程序需要在運(yùn)行時(shí)從某個(gè)特定的程序集中載入一個(gè)特定的類



  十三、談?wù)凥ibernate與Ibatis的區(qū)別,哪個(gè)性能會(huì)更高一些


  1、Hibernate偏向于對象的操作達(dá)到數(shù)據(jù)庫相關(guān)操作的目的;而ibatis更偏向于sql語句的優(yōu)化。


  2、Hibernate的使用的查詢語句是自己的hql,而ibatis則是標(biāo)準(zhǔn)的sql語句。


  3、Hibernate相對復(fù)雜,不易學(xué)習(xí);ibatis類似sql語句,簡單易學(xué)。


  性能方面:


  1、如果系統(tǒng)數(shù)據(jù)處理量巨大,性能要求極為苛刻時(shí),往往需要人工編寫高性能的sql語句或存錯(cuò)過程,此時(shí)ibatis具有更好的可控性,因此性能優(yōu)于Hibernate。


  2、同樣的需求下,由于hibernate可以自動(dòng)生成hql語句,而ibatis需要手動(dòng)寫sql語句,此時(shí)采用Hibernate的效率高于ibatis。



  十四、對Spring的理解,項(xiàng)目中都用什么?怎么用的?對IOC、和AOP的理解及實(shí)現(xiàn)原理


  Spring是一個(gè)開源框架,處于MVC模式中的控制層,它能應(yīng)對需求快速的變化,其主要原因它有一種面向切面編程(AOP)的優(yōu)勢,其次它提升了系統(tǒng)性能,因?yàn)橥ㄟ^依賴倒置機(jī)制(IOC),系統(tǒng)中用到的對象不是在系統(tǒng)加載時(shí)就全部實(shí)例化,而是在調(diào)用到這個(gè)類時(shí)才會(huì)實(shí)例化該類的對象,從而提升了系統(tǒng)性能。這兩個(gè)優(yōu)秀的性能使得Spring受到許多J2EE公司的青睞,如阿里里中使用最多的也是Spring相關(guān)技術(shù)。


  Spring的優(yōu)點(diǎn):


  1、降低了組件之間的耦合性,實(shí)現(xiàn)了軟件各層之間的解耦。


  2、可以使用容易提供的眾多服務(wù),如事務(wù)管理,消息服務(wù),日志記錄等。


  3、容器提供了AOP技術(shù),利用它很容易實(shí)現(xiàn)如權(quán)限攔截、運(yùn)行期監(jiān)控等功能。


  Spring中AOP技術(shù)是設(shè)計(jì)模式中的動(dòng)態(tài)代理模式。只需實(shí)現(xiàn)jdk提供的動(dòng)態(tài)代理接口InvocationHandler,所有被代理對象的方法都由InvocationHandler接管實(shí)際的處理任務(wù)。面向切面編程中還要理解切入點(diǎn)、切面、通知、織入等概念。


  Spring中IOC則利用了Java強(qiáng)大的反射機(jī)制來實(shí)現(xiàn)。所謂依賴注入即組件之間的依賴關(guān)系由容器在運(yùn)行期決定。其中依賴注入的方法有兩種,通過構(gòu)造函數(shù)注入,通過set方法進(jìn)行注入。


  十五、線程同步,并發(fā)操作怎么控制


  Java中可在方法名前加關(guān)鍵字syschronized來處理當(dāng)有多個(gè)線程同時(shí)訪問共享資源時(shí)候的問題。syschronized相當(dāng)于一把鎖,當(dāng)有申請者申請?jiān)?br/>


  資源時(shí),如果該資源沒有被占用,那么將資源交付給這個(gè)申請者使用,在此期間,其他申請者只能申請而不能使用該資源,當(dāng)該資源被使用完成后將釋放該資源上的鎖,其他申請者可申請使用。


  并發(fā)控制主要是為了多線程操作時(shí)帶來的資源讀寫問題。如果不加以空間可能會(huì)出現(xiàn)死鎖,讀臟數(shù)據(jù)、不可重復(fù)讀、丟失更新等異常。


  并發(fā)操作可以通過加鎖的方式進(jìn)行控制,鎖又可分為樂觀鎖和悲觀鎖。


  悲觀鎖:


  悲觀鎖并發(fā)模式假定系統(tǒng)中存在足夠多的數(shù)據(jù)修改操作,以致于任何確定的讀操作都可能會(huì)受到由個(gè)別的用戶所制造的數(shù)據(jù)修改的影響。也就是說悲觀鎖假定沖突總會(huì)發(fā)生,通過獨(dú)占正在被讀取的數(shù)據(jù)來避免沖突。但是獨(dú)占數(shù)據(jù)會(huì)導(dǎo)致其他進(jìn)程無法修改該數(shù)據(jù),進(jìn)而產(chǎn)生阻塞,讀數(shù)據(jù)和寫數(shù)據(jù)會(huì)相互阻塞。


  樂觀鎖:


  樂觀鎖假定系統(tǒng)的數(shù)據(jù)修改只會(huì)產(chǎn)生非常少的沖突,也就是說任何進(jìn)程都不大可能修改別的進(jìn)程正在訪問的數(shù)據(jù)。樂觀并發(fā)模式下,讀數(shù)據(jù)和寫數(shù)據(jù)之間不會(huì)發(fā)生沖突,只有寫數(shù)據(jù)與寫數(shù)據(jù)之間會(huì)發(fā)生沖突。即讀數(shù)據(jù)不會(huì)產(chǎn)生阻塞,只有寫數(shù)據(jù)才會(huì)產(chǎn)生阻塞。



  十六、描述struts的工作流程


  1、在web應(yīng)用啟動(dòng)時(shí),加載并初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,將它們存放到各個(gè)配置對象中。


  2、當(dāng)ActionServlet接收到一個(gè)客戶請求時(shí),首先檢索和用戶請求相匹配的ActionMapping實(shí)例,如果不存在,就返回用戶請求路徑無效信息。


  3、如果ActionForm實(shí)例不存在,就創(chuàng)建一個(gè)ActionForm對象,把客戶提交的表單數(shù)據(jù)保存到ActionForm對象中。


  4、根據(jù)配置信息決定是否需要驗(yàn)證表單,如果需要,就調(diào)用ActionForm的validate()方法,如果ActionForm的validate()方法返回null或返回一個(gè)不包含ActionMessage的ActionErrors對象,就表示表單驗(yàn)證成功。


  5、ActionServlet根據(jù)ActionMapping實(shí)例包含的映射信息決定請求轉(zhuǎn)發(fā)給哪個(gè)Action,如果相應(yīng)的Action實(shí)例不存在,就先創(chuàng)建一個(gè)實(shí)例,然后調(diào)用Action的execute()方法。


  6、Action的execute()方法返回一個(gè)ActionForward對象,ActionServlet再把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指向的JSP組件。


  7、ActionForward對象指向的JSP組件生成動(dòng)態(tài)網(wǎng)頁,返回給客戶。



以上就是長沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)小編為大家分享的“最新阿里巴巴java面試題級答案”的內(nèi)容,希望對大家有幫助,更多java面試題請繼續(xù)關(guān)注長沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。


相關(guān)java面試題推薦


2019最全最新java面試題及答案:http://www.bjpowernode.com/tutorial_baseinterviewquestions/


Java面試題 Java面試題及答案

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