java後端面試複習,java後端面試題目

本文目錄一覽:

誰有JAVA面試題分享一下唄,現在複習沒有頭緒浪費了很多時間

這裡有10個經典的Java面試題,也為大家列出了答案。這是Java開發人員面試經常容易遇到的問題,相信你了解和掌握之後一定會有所提高。讓我們一起來看看吧。

1.Java的HashMap是如何工作的?

HashMap是一個針對數據結構的鍵值,每個鍵都會有相應的值,關鍵是識別這樣的值。

HashMap 基於 hashing 原理,我們通過 put ()和 get ()方法儲存和獲取對象。當我們將鍵值對傳遞給 put ()方法時,它調用鍵對象的 hashCode ()方法來計算 hashcode,讓後找到 bucket 位置來儲存值對象。當獲取對象時,通過鍵對象的 equals ()方法找到正確的鍵值對,然後返回值對象。HashMap 使用 LinkedList 來解決碰撞問題,當發生碰撞了,對象將會儲存在 LinkedList 的下一個節點中。 HashMap 在每個 LinkedList 節點中儲存鍵值對對象。

2.什麼是快速失敗的故障安全迭代器?

快速失敗的Java迭代器可能會引發ConcurrentModifcationException在底層集合迭代過程中被修改。故障安全作為發生在實例中的一個副本迭代是不會拋出任何異常的。快速失敗的故障安全範例定義了當遭遇故障時系統是如何反應的。例如,用於失敗的快速迭代器ArrayList和用於故障安全的迭代器ConcurrentHashMap。

3.Java BlockingQueue是什麼?

Java BlockingQueue是一個並發集合util包的一部分。BlockingQueue隊列是一種支持操作,它等待元素變得可用時來檢索,同樣等待空間可用時來存儲元素。

4.什麼時候使用ConcurrentHashMap?

在問題2中我們看到ConcurrentHashMap被作為故障安全迭代器的一個實例,它允許完整的並發檢索和更新。當有大量的並發更新時,ConcurrentHashMap此時可以被使用。這非常類似於Hashtable,但ConcurrentHashMap不鎖定整個表來提供並發,所以從這點上ConcurrentHashMap的性能似乎更好一些。所以當有大量更新時ConcurrentHashMap應該被使用。

5.哪一個List實現了最快插入?

LinkedList和ArrayList是另個不同變數列表的實現。ArrayList的優勢在於動態的增長數組,非常適合初始時總長度未知的情況下使用。LinkedList的優勢在於在中間位置插入和刪除操作,速度是最快的。

LinkedList實現了List介面,允許null元素。此外LinkedList提供額外的get,remove,insert方法在LinkedList的首部或尾部。這些操作使LinkedList可被用作堆棧(stack),隊列(queue)或雙向隊列(deque)。

ArrayList實現了可變大小的數組。它允許所有元素,包括null。 每個ArrayList實例都有一個容量(Capacity),即用於存儲元素的數組的大小。這個容量可隨著不斷添加新元素而自動增加,但是增長演算法並沒有定義。當需要插入大量元素時,在插入前可以調用ensureCapacity方法來增加ArrayList的容量以提高插入效率。

6.Iterator和ListIterator的區別

●ListIterator有add()方法,可以向List中添加對象,而Iterator不能。

●ListIterator和Iterator都有hasNext()和next()方法,可以實現順序向後遍歷,但是ListIterator有hasPrevious()和previous()方法,可以實現逆向(順序向前)遍歷。Iterator就不可以。

●ListIterator可以定位當前的索引位置,nextIndex()和previousIndex()可以實現。Iterator沒有此功能。

●都可實現刪除對象,但是ListIterator可以實現對象的修改,set()方法可以實現。Iierator僅能遍歷,不能修改。

7.什麼是CopyOnWriteArrayList,它與ArrayList有何不同?

CopyOnWriteArrayList是ArrayList的一個線程安全的變體,其中所有可變操作(add、set等等)都是通過對底層數組進行一次新的複製來實現的。相比較於ArrayList它的寫操作要慢一些,因為它需要實例的快照。

CopyOnWriteArrayList中寫操作需要大面積複製數組,所以性能肯定很差,但是讀操作因為操作的對象和寫操作不是同一個對象,讀之間也不需要加鎖,讀和寫之間的同步處理只是在寫完後通過一個簡單的”=”將引用指向新的數組對象上來,這個幾乎不需要時間,這樣讀操作就很快很安全,適合在多線程里使用,絕對不會發生ConcurrentModificationException ,因此CopyOnWriteArrayList適合使用在讀操作遠遠大於寫操作的場景里,比如緩存。

8.迭代器和枚舉之間的區別

如果面試官問這個問題,那麼他的意圖一定是讓你區分Iterator不同於Enumeration的兩個方面:

●Iterator允許移除從底層集合的元素。

●Iterator的方法名是標準化的。

9.Hashmap如何同步?

當我們需要一個同步的HashMap時,有兩種選擇:

●使用Collections.synchronizedMap(..)來同步HashMap。

●使用ConcurrentHashMap的

這兩個選項之間的首選是使用ConcurrentHashMap,這是因為我們不需要鎖定整個對象,以及通過ConcurrentHashMap分區地圖來獲得鎖。

10.IdentityHashMap和HashMap的區別

IdentityHashMap是Map介面的實現。不同於HashMap的,這裡採用參考平等。

●在HashMap中如果兩個元素是相等的,則key1.equals(key2)

●在IdentityHashMap中如果兩個元素是相等的,則key1 == key2

java應屆生面試問題

首先要有足夠的自信。能夠把你所學的知識發揮出來。

其次,技術的複習要到位,面試之前最好把Java的知識點過一遍。比如JavaSE基礎,資料庫原理,Web技術要點(Servlet/JSP),三大框架的概念和三大框架如何整合的。最後能夠說出一到兩個你做過的項目,把項目的模塊描述清楚,自己在項目的負責模塊和分工解釋好,還有遇到的問題如何解決等等之類的問題。

還有,在面試中要保持自信和謙虛,讓面試公司感覺到你有實力,但又不驕傲。畢竟公司都喜歡踏實的人。

一般java面試都會問些什麼問題

1、請你自我介紹一下你自己?

回答提示:一般人回答這個問題過於平常,只說姓名、年齡、愛好、工作經驗,這些在簡歷上都有。其實,企業最希望知道的是求職者能否勝任工作,包括:最強的技能、最深入研究的知識領域、個性中最積極的部分、做過的最成功的事,主要的成就等,這些都可以和學習無關,也可以和學習有關,但要突出積極的個性和做事的能力,說得合情合理企業才會相信。

企業很重視一個人的禮貌,求職者要尊重考官,在回答每個問題之後都說一句「謝謝」,企業喜歡有禮貌的求職者。

2、你覺得你個性上最大的優點是什麼?

回答提示:沉著冷靜、條理清楚、立場堅定、頑強向上、樂於助人和關心他人、適應能力和幽默感、樂觀和友愛。我在北大青鳥經過一到兩年的培訓及項目實戰,加上實習工作,使我適合這份工作。

3、說說你最大的缺點?

回答提示:這個問題企業問的概率很大,通常不希望聽到直接回答的缺點是什麼等,如果求職者說自己小心眼、愛忌妒人、非常懶、脾氣大、工作效率低,企業肯定不會錄用你。絕對不要自作聰明地回答「我最大的缺點是過於追求完美」,有的人以為這樣回答會顯得自己比較出色,但事實上,他已經岌岌可危了。

企業喜歡求職者從自己的優點說起,中間加一些小缺點,最後再把問題轉回到優點上,突出優點的部分,企業喜歡聰明的求職者。

4、你對加班的看法?

回答提示:實際上好多公司問這個問題,並不證明一定要加班,只是想測試你是否願意為公司奉獻。

回答樣本:如果是工作需要我會義不容辭加班,我現在單身,沒有任何家庭負擔,可以全身心的投入工作。但同時,我也會提高工作效率,減少不必要的加班。

5、你對薪資的要求?

回答提示:如果你對薪酬的要求太低,那顯然貶低自己的能力;如果你對薪酬的要求太高,那又會顯得你分量過重,公司受用不起。

一些僱主通常都事先對求聘的職位定下開支預算,因而他們第一次提出的價錢往往是他們所能給予的最高價錢,他們問你只不過想證實一下這筆錢是否足以引起你對該工作的興趣。

工作幾年java面試題不會做怎麼辦

Java面試題考的是基本知識,在找工作之前搜一些往年的面試題,複習一下java的基礎知識,就可以通過第一輪面試。

其實工作幾年,公司看中的是經驗,而不是java的基礎。

java兩年經驗面試都會問什麼問題

個人介紹:

首先介紹下我面試時的自身條件情況,我把自己的情況分為優勢和劣勢來說可能更有利於你們比較自身情況。

劣勢:

1.15年7月畢業後開始到上海工作,面試的時候是17年3月到4月,一年多的經驗,勉強算兩年經驗。分析:一年多經驗我認為是比較尷尬的,處於一個不上不下的位置,很多公司比較喜歡招三年經驗的,或者直接招應屆生來培養。

2.畢業於一個非985/211,勉強上一本的高校。分析:這個相對影響較小,因為有工作經驗後,公司對學校的要求就沒那麼高了,只要是本科就基本沒問題,但是還是有個別叼毛公司只要985/211。

3.前一家公司是傳統電信行業,加入項目組時,項目已經上線有段時間了,我們的任務就是有需求就開發,有bug就優化,其他時間就聊騷,各干各的,工作一年多跟在養老一樣,用一句話說就是編程5分鐘,扯淡2小時,項目經驗嚴重不足,沒開發過很難的需求。分析:這一點是最傷的,公司招有經驗的就想看你都幹了些什麼牛批的東西,結果你告訴面試官我寫的需求都是垃圾。

優勢:

1.大學時拿過比較多的獎,每年都是校級優秀學生,畢業時是市級優秀畢業生,拿過省級ACM二等獎等。分析:大學的榮譽對一個有工作經驗的人來說,公司不一定會看重,但是可能會對面試官產生微妙的影響,特別是ACM獎,我碰到過有的面試官也是搞過ACM的,有共同的話題聊起來總是比較容易的,但是也要注意不能把這一欄篇幅寫的過於多,只能當作點綴用,我當時是放在簡歷最後一欄,簡要的寫了最主要的幾個獎。

2.良好的溝通交流能力。分析:這個能力不會是關鍵性的,但是可以加分。

3.較強的學習能力和邏輯思維能力。分析:有些公司和面試官還是比較看重一個人的學習能力的,經驗代表著你現在在什麼級別,而學習能力則代表著你將來能到達什麼級別。

學習過程:

看了我的優劣勢介紹,你會發現我的優勢相對於我的劣勢來說,簡直不值一提。我自己對此也有清晰的認識,因此從過完年之後,我就開始抓緊空閑時間學習。學習的過程如下:

1.看面試題

正常人第一步肯定都會看面試題,我也不例外,在看的過程中,我發現有些文章寫的不錯,對我幫助不小值得推薦,如下:

Java面試題全集(上)很多基礎的東西,建議先看。

各大公司Java後端開發面試題總結

面試心得與總結—BAT、網易、蘑菇街

關於Java面試,你應該準備這些知識點

2.深入學習

在看面試題的過程,你會遇到一些自己沒接觸過的或者以前沒深入學習過的知識,例如最常問的HashMap內部實現原理,這就促使你得開始去看jdk的源碼或者是學習一些新的東西。看源碼是很重要的一步,起步很難,但是會讓你收益良多,看源碼的過程如果碰到無法理解的地方,可以百度看下別人的理解。我學習源碼的過程中,看過幾個人的關於源碼的文章寫的很不錯,如下:

五月的倉頡

佔小狼

zhangshixi的Core java系列

3.熟悉項目

找出自己工作以來開發過的最叼的功能,將整個功能的流程和涉及的東西吃透。項目是面試中必問的環節,一般是以一個功能點為基礎展開問,因此你必須對這個功能有很深的認識,不能有模糊的地方。如果有時間,能把涉及到的知識點也搞懂最好。

4.做面試題

有不少公司是有面試的,如果你沒有準備過,很容易在各種小地方犯錯,建議去一些面試題網站多做些題目,我自己是用的牛客網。

5.學習記錄

把自己每天的學習時間和學習內容記錄下來,可以讓自己更有動力的學習,學習是一個枯燥的過程,你必須讓自己時刻保持有動力。

投簡歷、約面試環節

1.在哪些網站投?

拉勾網、BOSS直聘、獵聘網。

2.是否該海投?

投簡歷分為兩個情況。

1)沒有社招面試經驗:建議採取海投的方式,只要職位要求跟自己比較匹配都可以投,累計面試經驗。這個環節可以把投簡歷的網站增加兩家:智聯和無憂。

2)自認為社招面試經驗已經足夠:投那些職位匹配、公司滿意的職位。公司評價可以去看準網、百度、知乎等查詢。

3.一天約幾家面試合適?

最理想的情況為2家面試,上午一般在10點左右,下午一般在2點左右。建議把理想的公司放下午,因為下午的時間比較充足,可以讓公司更充分的了解你。我開始面的時候,每次都是上午面的不好,下午面的不錯。

4.投簡歷經常沒下文?

我當初也沒想到簡歷篩選這關有這麼難,可能是我的簡歷確實亮點不多,再者HR很多都不是行內人,因此他們看得最直接的就是你上家的公司和你畢業的學校,如果你不是從牛逼的公司/學校出來,可能會碰到和我一樣的情況,應對的辦法就是多投。

5.是否該裸辭?

我一開始是邊上班邊投,然後利用調休時間,或者請假去面試。後來,面試機會越來越多,請假太頻繁了,自己都不好意思了,並且自己也已經有足夠的信心,這個時候我選擇了裸辭。裸辭還有一個原因是,在面試過程中你會發現,有的公司要人要的緊,如果你的辭職流程過長可能會導致你錯過這個公司。

6.注意事項

1)面試前一天把路線和時間算好,最好別遲到。

2)背個書包,帶好簡歷、充電寶、紙巾、雨傘。

面試環節

1.筆試常見的問題?

面試常見的問題上面給的面試題鏈接基本都有。我只提幾點:1)寫SQL:寫SQL很常考察group by、內連接和外連接。2)手寫代碼:手寫代碼一般考單例、排序、線程、消費者生產者。我建議排序演算法除了冒泡排序,最好還能手寫一種其他的排序代碼。試想:如果一般面試者都寫的冒泡排序,而你寫的是快速排序/堆排序,肯定能給面試官留下不錯的印象。

2.面試流程?

1)讓你自我介紹

2)問Java基礎知識

3)問項目

4)情景問題,例如:你的一個功能上了生產環境後,伺服器壓力驟增,該怎麼排查。

5)你有什麼想問面試官的

3.面試常問的知識點?

1)集合相關問題(必問):

HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底層實現。

HashMap和Hashtable的區別。

ArrayList、LinkedList、Vector的區別。

HashMap和ConcurrentHashMap的區別。

HashMap和LinkedHashMap的區別。

HashMap是線程安全的嗎。

ConcurrentHashMap是怎麼實現線程安全的。

2)線程相關問題(必問):

創建線程的3種方式。

什麼是線程安全。

Runnable介面和Callable介面的區別。

wait方法和sleep方法的區別。

synchronized、Lock、ReentrantLock、ReadWriteLock。

介紹下CAS(無鎖技術)。

什麼是ThreadLocal。

創建線程池的4種方式。

ThreadPoolExecutor的內部工作原理。

分散式環境下,怎麼保證線程安全。

3)JVM相關問題:

介紹下垃圾收集機制(在什麼時候,對什麼,做了什麼)。

垃圾收集有哪些演算法,各自的特點。

類載入的過程。

雙親委派模型。

有哪些類載入器。

能不能自己寫一個類叫java.lang.String。

4)設計模式相關問題(必問):

先問你熟悉哪些設計模式,然後再具體問你某個設計模式具體實現和相關擴展問題。

5)資料庫相關問題,針對Mysql(必問):

給題目讓你手寫SQL。

有沒有SQL優化經驗。

Mysql索引的數據結構。

SQL怎麼進行優化。

SQL關鍵字的執行順序。

有哪幾種索引。

什麼時候該(不該)建索引。

Explain包含哪些列。

Explain的Type列有哪幾種值。

6)框架相關問題:

Hibernate和Mybatis的區別。

Spring MVC和Struts2的區別。

Spring用了哪些設計模式。

Spring中AOP主要用來做什麼。

Spring注入bean的方式。

什麼是IOC,什麼是依賴注入。

Spring是單例還是多例,怎麼修改。

Spring事務隔離級別和傳播性。

介紹下Mybatis/Hibernate的緩存機制。

Mybatis的mapper文件中#和$的區別。

Mybatis的mapper文件中resultType和resultMap的區別。

Mybatis中DAO層介面沒有寫實現類,Mapper中的方法和DAO介面方法是怎麼綁定到一起的,其內部是怎麼實現的。

7)其他遇到問題:

介紹下棧和隊列。

IO和NIO的區別。

介面和抽象類的區別。

int和Integer的自動拆箱/裝箱相關問題。

常量池相關問題。

==和equals的區別。

重載和重寫的區別。

String和StringBuilder、StringBuffer的區別。

靜態變數、實例變數、局部變數線程安全嗎,為什麼。

try、catch、finally都有return語句時執行哪個。

介紹下B樹、二叉樹。

ajax的4個字母分別是什麼意思。

xml全稱是什麼。

分散式鎖的實現。

分散式session存儲解決方案。

常用的linux命令。

一些經驗:

1.先投一些普通公司,等面出了心得再去投理想的公司。

2.不熟悉的技術不要主動提。

3.對於那種實習期6個月還打8折的公司,除非你沒有其他選擇了,否則不要去。

4.小公司喜歡在薪水上壓你,開的時候適當提高。

5.不要去參加招聘會,純粹是浪費時間。

6.把面試當作一次技術的交流,不要太在意是否能被錄取。

7.公司一般面完就決定是否錄取了,讓你回去等消息這種情況一般沒戲,無論你自己覺得面的有多好。

8.盡量少通過電話面試,效果不好。

9.在面試的日子裡,要保持每天學習,無論是學習新東西還是複習舊東西。

10.拿到offer了,問問自己這個公司讓自己100%滿意了嗎,如果不是,請繼續努力找更好的。

11.通過面試官可以大概判斷這家公司的情況。

12.拉勾投的簡歷很多會被篩掉,但是拉勾還是面試機會的最主要來源。

13.理想的公司可以多投幾次,我有好幾次都是第一次投被篩掉,多投幾次就過的經驗。

14.問到自己有深入研究過的知識,抓住機會好好表現,不要輕易放過。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/297844.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-28 12:16
下一篇 2024-12-28 12:16

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論