兩年Java研發經驗面試阿里成功拿下offer,分享我的面試經歷及學習資料
面試總結
- 第一輪:電話初面
- 第二輪:技術面談【技術職位儘量避免多談管理上的工作】
- 第三輪:高管複試
- 第四輪:HR最後確認
一面:首先確認對阿里的意向度(如果異地更會考慮對工作地點(杭州)的意向度!阿里很看重這個);其次面試官一般會針對您所做過的專案來做具體技術的交流,會比較關注個人對專案細節是不是掌握到位,主要考察java的技術基礎和原理,比如Spring框架以及資料庫和JVM三個方面,也會交流到分散式、執行緒池的實現等等,重點考察是不是有比較鑽研技術和技術上的亮點【不一定每個面都很厲害但一定要有亮點】;
二面:技術面,根據專案深入的瞭解技術實力,瞭解您的知識面,瞭解您的問題解決能力以及技術靈活運用能力,也通過這一過程考察團隊合作能力、學習主動性和創新性,可以挑選2-3個做過的有典型性的專案做一個仔細 技術回顧和自己獨到的理解【這會成為您的加分項】;
三面:他們最後的高管複試會涉及到相關的技術問題,大部分是對你的整體價值觀做巨集觀的把控(比如上進心,責任心,心態,工作激情等)
HR確認:基本就是從大方向瞭解一下您的心態、抗壓能力,工作中的角色、未來大致的規劃以及對阿里的意向度
【技術基礎以及的問題多看看書準備下就行了,不懂的直接說不懂沒關係的;在專案細節上多把關一下,根據專案有針對性的談自己的技術亮點,能表達清楚,可以引導面試官來問你比較擅長的技術問題,個人就可以盡情發揮】
阿里比較喜歡的人才特點:對技術有熱情,強硬的技術基礎實力;主動,善於團隊協作,善於總結思考;
阿里面試問的問題會比較底層
- Java記憶體結構,spring的aop的實現方法,java資料庫問題定位和效能調優;
- 關於Java異常的續承層次結構,講述異常的續承關係;
- java中過載和重寫有什麼區別,分別用什麼關鍵字;
- 關於分散式訊息佇列,分散式快取;
- 關於hashmap原始碼實現, jdk
- 關於設計模式,uml,jvm 記憶體回收機制問題
- java執行緒如何啟動?java中加鎖的方式有哪些,怎麼個寫法?
- 對樂觀鎖和悲觀鎖的理解;
- ORACLE中的SQL如何進行優化,都有哪些方式?事務有哪些特性,在ORACLE中隔離有哪些級別?
- 介紹一下自己最近做的一個典型的專案;
在專案中遇到了哪些問題,自己是如何解決的;
- 目前系統支撐的使用者量是多少,假如使用者量提升10倍,系統會出現什麼樣的問題,如何重新設計系統【這裡主要是想了解您的問題預見能力以及問題解決能力,考查思路】
- 使用memcached是一個什麼樣的原理
- 如何存放資料到memcached叢集中,介紹一下這個過程。跟進的問題,講一下一致性雜湊演算法的實現原理。
- JVM中堆是如何管理的,JVM的記憶體回收機制,介紹一下
- 分散式事務實現方式
- 熱點賬戶問題(專案中有就會問)
第一輪技術面試(電面)涉及Java基礎點(可參考):
- session
- java鎖
- gc原理
- hashmap
- listlink arraylist 區別
- aop 原理
- 多執行緒
- kafka 原理和容錯
- spark hadoop 原理
- redis 同步機制
- classLoader 機制
- Http 協議
- cookie的限制
- HashMap key的要求 , hashcode一致兩個物件是否相等
- JVM的原理
- 涉及面較廣,包括談到專案上遇到的問題,以此深入探討。
旁聽面試-java:
- 人選介紹目前目前技術管理側重;
- 對阿里推薦對應崗位的理解度;
- 系統設計是怎麼樣的;
- 做的一些架構,資料來源來自於哪裡並深入問;
- 模組邊界,快取機制;
- 選用技術選型時,A和B的區別;
- 多執行緒如何用,有什麼好處,和程序的區別;
- 多執行緒的過程;
- 多執行緒同步的方法,X專案中如何去實現;
- 分散式架構在你目前專案中的體現;
- 跨主機通訊用過什麼,介面等;
- 大資料儲存;
結尾
- 你自己覺得你擅長什麼,以後想走的路線,技術還是管理;
- JMS的兩種模式是那些;
- 富客戶端怎麼更新;
- 自己設計類似ESB這樣的企業資料匯流排應該有哪些功能;
- 系統架構設計;
- 叢集中怎麼控制session;
- 怎麼樣知道java存中是哪一些模組消耗記憶體比較多;
- 應用伺服器的引數調整。
下圖是我整理的關於一些面試題,分享給大家希望能有一些幫助(還有更全Java架構思維導圖)
面試
基礎類
- sleep()和wait()的區別?
- synchronized同步程式碼塊還有同步方法本質上鎖住的是誰?為什麼?
- synchronized和volatile的區別?
- ReentrantLock和synchronized的區別?
- 什麼是執行緒安全?保障執行緒安全有哪些手段?
- 執行緒的有哪些狀態?
- Thread的join()有什麼作用?
- 同步和非同步、阻塞和非阻塞的概念
- 銷燬一個執行緒的方法有哪些?
- 什麼是執行緒池,如何使用?
- 多執行緒斷點續傳的實現原理?
- 瞭解Java新特性
Java併發程式設計
- 在java中守護執行緒和本地執行緒區別?
- 執行緒與程序的區別?
- 什麼是多執行緒中的上下文切換?
- 死鎖與活鎖的區別,死鎖與飢餓的區別?
- Java中用到的執行緒排程演算法是什麼?
- 什麼是執行緒組,為什麼在Java中不推薦使用?
- 為什麼使用Executor
- 在Java中Executor和Executors的區別?
- 什麼是原子
- Java Concurrency API中的Lock介面是什麼?對比同步它有什麼優勢?
- 什麼是Executors框架?
- 什麼是阻塞佇列?阻塞佇列的實現原理是什麼?如何使用阻塞佇列來實現生產者-消費者模型?
- 什麼是Callable和Future?
- 什麼是FutureTask?
- 什麼是併發容器的實現?
- 多執行緒同步和互斥有幾種實現方法,都是什麼?
- 什麼是競爭條件?你怎樣發現和解決競爭?
- 為什麼我們呼叫start()方法時會執行run()方法,為什麼我們不能直接呼叫run()方法?
- Java中你怎樣喚醒一個阻塞的執行緒?
- CycliBarriar和CountdownLatch有什麼區別?
- 什麼是不可變物件,它對寫併發應用有什麼幫助?
- 什麼是多執行緒中的上下文切換?
- Java中用到的執行緒排程演算法是什麼?
- 什麼是執行緒組,為什麼在Java中不推薦使用?
- 為什麼使用Executor框架比使用應用建立和管理執行緒好?
- java中有幾種方法可以實現一個執行緒?
- 如何停止一個正在執行的執行緒?
- notify()和notifyAll()有什麼區別?
- 什麼是Daemon執行緒?它有什麼意義?
- java如何實現多執行緒之間的通訊和協作?
- 什麼是可重入鎖?
- 當一個執行緒進入某個物件的一個synchronized的例項方法後,其它執行緒是否可進入此物件的其它方法?
- 樂觀鎖和悲觀鎖的理解及如何實現?
- SynchronizedMap 和 ConcurrentHashMap有什麼區別?
- CopyOnWriteArrayList可以用於什麼應用場景?
- 什麼叫執行緒安全?servlet是執行緒安全嗎?
- volatile有什麼用?能否用一句話說明下volatile的應用場景?
- 為什麼程式碼會重排序?
- 在java中wait和sleep方法的不同?
- 一個執行緒執行時發生異常會怎樣?
- 如何在兩個執行緒間共享資料?
- Java中notify 和 notifyAll有什麼區別?
- 為什麼wait, notify 和 notifyAll這些方法不在thread類裡面?
- 什麼是ThreadLocal變數?
- Java中interrupted 和 isInterrupted方法的區別?
- 為什麼wait和notify方法要在同步塊中呼叫?
- 為什麼你應該在迴圈中檢查等待條件?
- Java中的同步集合與併發集合有什麼區別?
- 什麼是執行緒池? 為什麼要使用它?
- 怎麼檢測一個執行緒是否擁有鎖?
- JVM中哪個引數是用來控制執行緒的棧堆疊小的?
- Thread類中的yield方法有什麼作用?
- Java中ConcurrentHashMap的併發度是什麼?
- Java中Semaphore是什麼?
- Java執行緒池中submit() 和 execute()方法有什麼區別?
- 什麼是阻塞式方法?
- Java中的ReadWriteLock是什麼?
- volatile 變數和 atomic 變數有什麼不同?
- 可以直接呼叫Thread類的run ()方法麼?
- 如何讓正在執行的執行緒暫停一段時間?
- 你對執行緒優先順序的理解是什麼?
- 什麼是執行緒排程器和時間分片?
- 你如何確保main()方法所在的執行緒是Java 程式最後結束的執行緒?
- 執行緒之間是如何通訊的?
- 為什麼執行緒通訊的方法wait()、notify()和notifyAll()被定義在Object 類裡?
- 為什麼wait()、notify()和notifyAll ()必須在同步方法或者同步塊中被呼叫?
- 為什麼Thread類的sleep()和yield ()方法是靜態的?
- 如何確保執行緒安全?
- 同步方法和同步塊,哪個是更好的選擇?
- 如何建立守護執行緒?
- 什麼是Java Timer 類?如何建立一個有特定時間間隔的任務?
以上的總結出來的面試以及面試問題,你們自己在看文章時,你自己想一下看,你能把那些問題都能回答上來麼?你對自己的技術感到又想到進一步的提升麼?在你約到技術上的困難以及瓶疾的時候,你能夠解決麼?不能解決的,證明你在開發的道路上,你還需要繼續努力學習;
最後,想要獲取整理好的Java面試題與答案,有需要的可以 直接點選這裡,對,就這裡,回覆暗號:面試 即可免費領取!!!
部分資料展示