阿里巴巴Java方向面試題匯總(含答案)

2021-01-12 JAVA高級架構
一、String, StringBuffer, StringBuilder的區別是什麼?String為什麼是不可變的?

1、String是字符串常量,StringBuffer和StringBuilder都是字符串變量。後兩者的字符內容可變,而前者創建後內容不可變。
2、String不可變是因為在JDK中String類被聲明為一個final類。
3、StringBuffer是線程安全的,而StringBuilder是非線程安全的。

補充說明:線程安全會帶來額外的系統開銷,所以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能夠把它保存的記錄根據鍵排序,默認是按升序排序。

面小易說:以上三個問題所涉及的都是Java語言中的一些比較高級的數據結構,從字符串相關到容器再到哈希表和樹等數據結構,因此我們在學習Java語言的時候,也需要更加深入地去對比比較類似的數據結構的使用場景以及其優缺點。

四、Tomcat,Apache,JBoss的區別?

1、Apache是HTTP伺服器,Tomcat是Web伺服器,JBoss是應用伺服器。
2、Apache解析靜態的Html文件;Tomcat可解析jsp動態頁面、也可充當
容器。

面小易說:對於伺服器而言,在面試中可能並不會過多涉及,相對而言,面小易認為像是Liunx、Tomcat這些背後的原理可能更受面試官的青睞。

五、GET,POST請求之間的區別?

基礎知識:HTTP的請求格式如下。
主要包含三個信息:1、請求的類型(GET或POST),2、要訪問的資源(如resimga.jif),3、HTTP版本(http/1.1)

區別:
1、Get是從伺服器端獲取數據,Post則是向伺服器端發送數據。
2、在客戶端,Get方式通過URL提交數據,在URL地址欄可以看到請求消息,該消息被編碼過;Post數據則是放在Html header內提交。
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都有失效時間,過期後會自動刪除,減少系統開銷。

七、HTTP 報文包含內容

主要包含四部分:
1、request line
2、header line
3、blank line
4、request body

面小易說:上面的三個問題是網絡編程的基礎知識問題,作為Java工程師也需要掌握HTTP的知識,而如今HTTPS同樣也成為了標準,也需要大家進一步了解。此外,相對於大家在課本或者課堂中所學習的HTTP 1.0/1.1這些協議而言,很多公司已經邁入了HTTP 2.0時代,因此兩者之間的差別也需要我們進一步了解。

八、Servlet的生命周期

大致分為4部:Servlet類加載–>實例化–>服務–>銷毀

Tomcat中Servlet的時序圖如下所示:

1、Web Client向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對象推出時,負責釋放佔用資源。

九、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 * from table where name = 「+appName+」,利用appName參數值的輸入,來生成惡意的SQL語句,如將[『or』1』=『1』] 傳入可在資料庫中執行。因此可以採用PrepareStatement來避免SQL注入,在伺服器端接收參數數據後,進行驗證,此時PrepareStatement會自動檢測,而Statement不行,需要手工檢測。

十、sendRedirect, foward區別

1、foward是伺服器端控制頁面轉向,在客戶端的瀏覽器地址中不會顯示轉向後的地址;sendRedirect則是完全的跳轉,瀏覽器中會顯示跳轉的地址並重新發送請求連結。原理:forward是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後再將這些內容返回給瀏覽器,瀏覽器根本不知道伺服器發送的這些內容是從哪來的,所以地址欄還是原來的地址。
2、redirect是伺服器端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求的那個地址,瀏覽器會用剛才的所有參數重新發送新的請求。

面小易說:以上的三個問題在之前網絡相關的知識上更進一步,上升到了Java網絡編程的相關知識,這部分意在考察面試者對於Java網絡編程相關知識的掌握程度。

十一、談談Hibernate的理解,一級和二級緩存的作用,在項目中Hibernate都是怎麼使用緩存的?

Hibernate是一個開發的對象關係映射框架(ORM)。它對JDBC進行了非常對象封裝,Hibernate允許程式設計師採用面向對象的方式來操作關係資料庫。

Hibernate的優點:
1、程序更加面向對象
2、提高了生產率
3、方便移植
4、無入侵性

Hibernate的缺點:
1、效率比JDBC略差
2、不適合批量操作
3、只能配置一種關聯關係

Hibernate有四種查詢方式:
1、get、load方法,根據ID號查詢對象。
2、Hibernate Query Language, HQL
3、標準查詢語言
4、通過SQL查詢

Hibernate工作原理:
1、配置Hibernate對象關係映射文件、啟動伺服器
2、伺服器通過實例化Configuration對象,讀取hibernate.cfg.xml文件的配置內容,並根據相關的需求建好表以及表之間的映射關係。
3、通過實例化的Configuration對象建立SessionFactory實例,通過SessionFactory實例創建Session對象。
4、通過Session對象完成資料庫的增刪改查操作。

Hibernate中的狀態轉移:
臨時狀態(Transient)
1、不處於Session緩存中
2、資料庫中沒有對象記錄

補充說明-Java是如何進入臨時狀態的:1、通過new語句創建一個對象時。2、剛調用Session的delete()方法時,從Session緩存中刪除一個對象時。

持久化狀態(Persisted)
1、處於Session緩存中
2、持久化對象資料庫中沒有對象記錄
3、Session在特定的時刻會保存兩者同步

補充說明-Java如何進入持久化狀態:1、Session的save()方法。2、Session的load().get()方法返回的對象。3、Session的find()方法返回的list集合中存放的對象。4、Session的update().save()方法。

流離狀態(Detached)
1、不再位於Session緩存中
2、游離對象由持久化狀態轉變而來,資料庫中還沒有相應記錄。

補充說明-Java如何進入流離狀態:1、Session的close()。2、 Session的evict()方法,從緩存中刪除一個對象。

具體如下圖所示:

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

十二、談談Hibernate與iBatis的區別,哪個性能會更高一些

1、Hibernate偏向於對象的操作達到資料庫相關操作的目的;而iBatis更偏向於SQL語句的優化。
2、Hibernate的使用的查詢語句是自己的HQL,而iBatis則是標準的SQL語句。
3、Hibernate相對複雜,不易學習;iBatis類似SQL語句,簡單易學。

性能方面:
1、如果系統數據處理量巨大,性能要求極為苛刻時,往往需要人工編寫高性能的SQL語句或存錯過程,此時iBatis具有更好的可控性,因此性能優於Hibernate。
2、同樣的需求下,由於Hibernate可以自動生成HQL語句,而iBatis需要手動寫SQL語句,此時採用Hibernate的效率高於iBatis。

十三、對Spring的理解,項目中都用什麼?怎麼用的?對IOC、和AOP的理解及實現原理。

Spring是一個開源框架,處於MVC模式中的控制層,它能應對需求快速的變化,其主要原因它有一種面向切面編程(AOP)的優勢,其次它提升了系統性能,因為通過依賴倒置機制(IOC),系統中用到的對象不是在系統加載時就全部實例化,而是在調用到這個類時才會實例化該類的對象,從而提升了系統性能。這兩個優秀的性能使得Spring受到許多J2EE公司的青睞,如阿里中使用最多的也是Spring相關技術。

Spring的優點:
1、降低了組件之間的耦合性,實現了軟體各層之間的解耦。
2、可以使用容易提供的眾多服務,如事務管理,消息服務,日誌記錄等。
3、容器提供了AOP技術,利用它很容易實現如權限攔截、運行期監控等功能。
Spring中AOP技術是設計模式中的動態代理模式。只需實現jdk提供的動態代理接口InvocationHandler,所有被代理對象的方法都由InvocationHandler接管實際的處理任務。面向切面編程中還要理解切入點、切面、通知、織入等概念。
Spring中IOC則利用了Java強大的反射機制來實現。所謂依賴注入即組件之間的依賴關係由容器在運行期決定。其中依賴注入的方法有兩種,通過構造函數注入,通過set方法進行注入。

十四、描述Struts的工作流程

1、在web應用啟動時,加載並初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,將它們存放到各個配置對象中。
2、當ActionServlet接收到一個客戶請求時,首先檢索和用戶請求相匹配的ActionMapping實例,如果不存在,就返回用戶請求路徑無效信息。
3、如果ActionForm實例不存在,就創建一個ActionForm對象,把客戶提交的表單數據保存到ActionForm對象中。
4、根據配置信息決定是否需要驗證表單,如果需要,就調用ActionForm的validate()方法,如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActionErrors對象,就表示表單驗證成功。
5、ActionServlet根據ActionMapping實例包含的映射信息決定請求轉發給哪個Action,如果相應的Action實例不存在,就先創建一個實例,然後調用Action的execute()方法。

面小易說:以上部分的相關問題考察面試者在實際軟體開發中所使用的Java語言相關框架以及對於框架原理的了解程度,這一部分我們需要注意一些常見的框架,不僅需要知道它們是幹什麼的,還需要知道它們背後的原理,常會問到的框架有Spring Boot/Spring Cloud全家桶、Hibernate、MyBaits、Netty、Kafka等,最重要的還有阿里巴巴開源的Apache Dubbo框架。

十五、關於Java內存模型,一個對象(兩個屬性,四個方法)實例化100次,現在內存中的存儲狀態,幾個對象,幾個屬性,幾個方法。由於Java中new出來的對象都是放在堆中,所以如果要實例化100次,將在堆中產生100個對象,一般對象與其中的屬性、方法都屬於一個整體,但如果 屬性和方法是靜態的,就是用static關鍵字聲明的,那麼屬於類的屬性和方法永遠只在內存中存在一份。十六、反射講一講,主要是概念,都在哪需要反射機制,反射的性能,如何優化?

反射機制的定義:
是在運行狀態中,對於任意的一個類,都能夠知道這個類的所有屬性和方法,對任意一個對象都能夠通過反射機制調用一個類的任意方法,這種動態獲取類信息及動態調用類對象方法的功能稱為java的反射機制。

反射的作用:
1、動態地創建類的實例,將類綁定到現有的對象中,或從現有的對象中獲取類型。
2、應用程式需要在運行時從某個特定的程序集中載入一個特定的類。

十七、線程同步,並發操作怎麼控制?

Java中可在方法名前加關鍵字syschronized來處理當有多個線程同時訪問共享資源時候的問題。syschronized相當於一把鎖,當有申請者申請該資源時,如果該資源沒有被佔用,那麼將資源交付給這個申請者使用,在此期間,其他申請者只能申請而不能使用該資源,當該資源被使用完成後將釋放該資源上的鎖,其他申請者可申請使用。並發控制主要是為了多線程操作時帶來的資源讀寫問題。如果不加以空間可能會出現死鎖,讀髒數據、不可重複讀、丟失更新等異常。

並發操作可以通過加鎖的方式進行控制,鎖又可分為樂觀鎖和悲觀鎖。

悲觀鎖:
悲觀鎖併發模式假定系統中存在足夠多的數據修改操作,以致於任何確定的讀操作都可能會受到由個別的用戶所製造的數據修改的影響。也就是說悲觀鎖假定衝突總會發生,通過獨佔正在被讀取的數據來避免衝突。但是獨佔數據會導致其他進程無法修改該數據,進而產生阻塞,讀數據和寫數據會相互阻塞。

樂觀鎖:
樂觀鎖假定系統的數據修改只會產生非常少的衝突,也就是說任何進程都不大可能修改別的進程正在訪問的數據。樂觀併發模式下,讀數據和寫數據之間不會發生衝突,只有寫數據與寫數據之間會發生衝突。即讀數據不會產生阻塞,只有寫數據才會產生阻塞。

面試專場:

相關焦點

  • 2018年阿里巴巴關於Java重要開源項目匯總
    Java 的 JSON 處理器 fastjsonfastjson 是一個性能很好的 Java 語言實現的 JSON 解析器和生成器,來自阿里巴巴的工程師開發。JStorm 可以看作是 storm 的 java 增強版本,除了內核用純java實現外,還包括了thrift、python、facet ui。從架構上看,其本質是一個基於 zk 的分布式調度系統。
  • 《CF》DL戰隊面試答案大全 DL戰隊面試答案匯總
    CF近日開啟了「請你,馬上來戰隊面試」答題活動,玩家參與答題即可獲取對應的物資獎勵,回答正確的題目越多得到的物質等級越高。而且這個活動是可以多次參與的,運氣好的玩家完全可以拿下全部檔位的獎勵哦! CFDL戰隊面試活動答案是什麼 問題:在日常遊戲中,投擲武器的正確用法是?
  • 2020年Java基礎高頻面試題匯總
    nal也是很多面試喜歡問的地方,但我覺得這個問題很無聊,通常能回答下以下5點就不錯了:(1)被nal修飾的類不可以被繼承(2)被nal修飾的方法不可以被重寫(3)被nal修飾的變量不可以被改變.如果修飾引用,那麼表示引用不可變,引用指向的內容可變.
  • 2020北京公務員面試模擬題及參考答案(66)
    北京公務員面試模擬題:北京人事考試網提供北京公務員面試模擬題,北京公務員面試考察能力綜合分析、計劃組織協調、應變能力、人際關係等。本文整理2020北京公務員面試模擬題及參考答案(66)。更多北京公務員面試信息,點擊北京公務員考試網。
  • 數據結構java面試題及答案
    它也是面試最喜歡的問題之一,在代碼面試中你會經常聽到很多關於數組的問題,例如,數組的反轉、數組的排序或者查找數組中的一個元素。數組結構的一個關鍵優點是在知道索引的情況能夠以O(1)的複雜度找到一個元素。但是增加或者刪除一個元素是很慢的,因為一旦創建了一個數組,你就不能改變它的大小了。
  • Java經典面試題Spring是什麼 Spring框架入門詳解
    下面請看java代碼我們通過ClassPathXmlApplicationContext類傳入applicationContext.xml配置文件的相對路徑,創建出spring的容器對象ApplicationContext,在通過容器對象中的方法獲取到Spring容器為我們創建的user對象,其實Spring兩個容器,除了
  • 小學數學:單位換算公式匯總+練習題(含答案),6年學習都需要!
    對此,下面老師整理了小學階段數學單位換算的所有公式,還有一些練習題(含答案)非常齊全,希望同學們能夠提高成績,避免運算上出現差錯。· 以上就是【小學數學單位換算公式匯總+練習題(含答案)】的全部內容,若需要完整版word文檔,請點擊文章標題下的頭像進入主頁面,然後點擊下方的「領取資料」即可,謝謝理解!
  • 支付寶高級Java現場面試37題:頁鎖+死鎖+集群+雪崩+負載等
    2020-09-26 15:45:21 來源: java架構codi 舉報
  • 公務員面試題庫:2016北京公務員面試模擬題之火車票登廣告
    2016京考面試交流QQ群:5334646982016年北京公務員考試招考信息和備考指導匯總 【北京公務員考試公告】【筆試分數線】【筆試成績查詢入口】【面試公告匯總】 >公務員面試:北京公務員考試網為京考考生提供2016北京公務員面試模擬題之火車票登廣告,幫助參加2016京考考生順利通過面試。
  • 幼升小面試題讓成人汗顏:龍捲風分幾種
    精彩看點:  北京各區幼升小面試題大匯總 難倒家長  上海十所名校幼升小面試題集錦  特別策劃:上個小學真費勁兒—  答案:按照聲調  小雞小鴨一起回家,小鴨掉坑裡了,小雞應該怎麼救它?  答案:在坑裡放水,讓小鴨浮上來  請用六根牙籤擺出五個正方形?
  • 高效「背誦」面試題的三定法則
    你會驚奇地發現,這些面試題無非就是這三大類,分別是有 固定答案的封閉式問題 考你理解深度的開放式問題 考你編程能力的邏輯算法題 舉例說明:
  • Java學習必不可少的十大網站
    這是我為學習java的同學們準備的網站集合。這些網站提供新聞,常見問題或訪談問題的答案,精彩的講座等。質量是好的網站的關鍵因素。我認為它們都具有最高的質量。在下文中,我還將分享如何使用這些網站進行學習或娛樂。1.
  • 程式設計師面試通關的 101 道真題
    在本文中,我將與大家分享程式設計師面試中的最常見101道面試題,相信每個程式設計師都應該知道這些問題。編程面試需要做哪些準備?首先,我們都很清楚編程面試的重要性,這點毋庸置疑,下面讓我們來討論一些實質性的內容。第一個問題是編程面試需要做哪些準備?
  • Top30數據分析師常見面試題(附答案)!
    快來看看,以下30道數據分析相關面試題,你會多少?1、分析數據還要寫java代碼是不是效率有點低?2、成為一名數據分析師需要具備哪些技能?它可能包括基於CSV文件或SQL資料庫重映射值,或者正則表達式搜索和替換,消除所有不匹配正則表達式的值如果在數據清理方面存在問題,請按照估計的頻率進行安排並解決問題分析每列的匯總統計數據(標準差,均值,缺失值的數量)保持對每一個清理操作的跟蹤,以便可以根據需要更改或刪除操作6、海量日誌數據,提取出某日訪問百度次數最多的那個IP。
  • 國家公務員面試2017年3月8日海關系統面試題
    【導讀】華圖國家公務員考試網同步華圖教育發布:國家公務員面試2017年3月8日海關系統面試題,詳細信息請閱讀下文!如有疑問請加【2021國家公務員考試微信客服】 ,更多資訊請關注寧夏華圖微信公眾號(ningxiaht),國家公務員培訓諮詢電話:0951-6028571/6027571 18295188220,微信號:HT15202602573   國家公務員面試2017年3月8日海關系統面試題   1.拍賣行通過網絡平臺對扣押的車進行拍賣,很多人在網上詢問車型
  • 萬字梳理,帶你拿下 Java 面試題!
    這道題我想了幾天,之前和群裡小夥伴們探討每日一題的時候,問他們為什麼 length%hash == (n - 1) & hash,它們說相等的前提是 length 的長度 2 的冪次方,然後我回了一句難道 length 還能不是 2 的冪次方嗎?
  • 國家公務員面試2017年3月2日國稅系統面試題
    【導讀】華圖國家公務員考試網同步華圖教育發布:國家公務員面試2017年3月2日國稅系統面試題,詳細信息請閱讀下文!如有疑問請加【2021國家公務員考試微信客服】 ,更多資訊請關注寧夏華圖微信公眾號(ningxiaht),國家公務員培訓諮詢電話:0951-6028571/6027571 18295188220,微信號:HT15202602573   2017年3月2日國稅系統面試題   1.請你閱讀桌上的題籤(請考生注意,不要再題籤上寫字或做記號)
  • 2021國考面試模擬題:起草新員工培訓會的演講稿
    2021國考面試模擬題:高情商最重要的兩種素質 2020-12-02 13:39:40| 中公教育 做為公考最重要的一關「面試」 而言,並非一日能成。
  • 2019年國家公務員考試面試試題匯總
    【導讀】華圖國家公務員考試網同步華圖教育發布:國考面試:2019年國家公務員考試統考面試試題匯總,詳細信息請閱讀下文!如有疑問請加【2021國家公務員考試微信客服】 ,更多資訊請關注寧夏華圖微信公眾號(ningxiaht),國家公務員培訓諮詢電話:0951-6028571/6027571 18295188220,微信號:HT15202602573 2021國考分數線及面試名單已於2021年1月11日公布,面試將於國考筆試成績出來後不久展開,所以大家得提前準備面試,
  • 國考面試2019年3月10日上午銀保監會面試題(財經&河北)
    【導讀】華圖國家公務員考試網同步寧夏華圖發布:國考面試2019年3月10日上午銀保監會面試題(財經&河北),詳細信息請閱讀下文!如有疑問請加【2021國家公務員考試微信客服】 ,更多資訊請關注寧夏華圖微信公眾號(ningxiaht),國家公務員培訓諮詢電話:0951-6028571/6027571 18295188220,微信號:HT15202602573   2019年3月10日上午銀保監會面試題(財經·河北)   1.自我介紹