1. 程式人生 > 實用技巧 >兩年Java研發經驗面試阿里成功拿下offer,分享我的面試經歷及學習資料

兩年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架構思維導圖)

面試

基礎類

  1. sleep()和wait()的區別?
  2. synchronized同步程式碼塊還有同步方法本質上鎖住的是誰?為什麼?
  3. synchronized和volatile的區別?
  4. ReentrantLock和synchronized的區別?
  5. 什麼是執行緒安全?保障執行緒安全有哪些手段?
  6. 執行緒的有哪些狀態?
  7. Thread的join()有什麼作用?
  8. 同步和非同步、阻塞和非阻塞的概念
  9. 銷燬一個執行緒的方法有哪些?
  10. 什麼是執行緒池,如何使用?
  11. 多執行緒斷點續傳的實現原理?
  12. 瞭解Java新特性

Java併發程式設計

  1. 在java中守護執行緒和本地執行緒區別?
  2. 執行緒與程序的區別?
  3. 什麼是多執行緒中的上下文切換?
  4. 死鎖與活鎖的區別,死鎖與飢餓的區別?
  5. Java中用到的執行緒排程演算法是什麼?
  6. 什麼是執行緒組,為什麼在Java中不推薦使用?
  7. 為什麼使用Executor
  8. 在Java中Executor和Executors的區別?
  9. 什麼是原子
  10. Java Concurrency API中的Lock介面是什麼?對比同步它有什麼優勢?
  11. 什麼是Executors框架?
  12. 什麼是阻塞佇列?阻塞佇列的實現原理是什麼?如何使用阻塞佇列來實現生產者-消費者模型?
  13. 什麼是Callable和Future?
  14. 什麼是FutureTask?
  15. 什麼是併發容器的實現?
  16. 多執行緒同步和互斥有幾種實現方法,都是什麼?
  17. 什麼是競爭條件?你怎樣發現和解決競爭?
  18. 為什麼我們呼叫start()方法時會執行run()方法,為什麼我們不能直接呼叫run()方法?
  19. Java中你怎樣喚醒一個阻塞的執行緒?
  20. CycliBarriar和CountdownLatch有什麼區別?
  21. 什麼是不可變物件,它對寫併發應用有什麼幫助?
  22. 什麼是多執行緒中的上下文切換?
  23. Java中用到的執行緒排程演算法是什麼?
  24. 什麼是執行緒組,為什麼在Java中不推薦使用?
  25. 為什麼使用Executor框架比使用應用建立和管理執行緒好?
  26. java中有幾種方法可以實現一個執行緒?
  27. 如何停止一個正在執行的執行緒?
  28. notify()和notifyAll()有什麼區別?
  29. 什麼是Daemon執行緒?它有什麼意義?
  30. java如何實現多執行緒之間的通訊和協作?
  31. 什麼是可重入鎖?
  32. 當一個執行緒進入某個物件的一個synchronized的例項方法後,其它執行緒是否可進入此物件的其它方法?
  33. 樂觀鎖和悲觀鎖的理解及如何實現?
  34. SynchronizedMap 和 ConcurrentHashMap有什麼區別?
  35. CopyOnWriteArrayList可以用於什麼應用場景?
  36. 什麼叫執行緒安全?servlet是執行緒安全嗎?
  37. volatile有什麼用?能否用一句話說明下volatile的應用場景?
  38. 為什麼程式碼會重排序?
  39. 在java中wait和sleep方法的不同?
  40. 一個執行緒執行時發生異常會怎樣?
  41. 如何在兩個執行緒間共享資料?
  42. Java中notify 和 notifyAll有什麼區別?
  43. 為什麼wait, notify 和 notifyAll這些方法不在thread類裡面?
  44. 什麼是ThreadLocal變數?
  45. Java中interrupted 和 isInterrupted方法的區別?
  46. 為什麼wait和notify方法要在同步塊中呼叫?
  47. 為什麼你應該在迴圈中檢查等待條件?
  48. Java中的同步集合與併發集合有什麼區別?
  49. 什麼是執行緒池? 為什麼要使用它?
  50. 怎麼檢測一個執行緒是否擁有鎖?
  51. JVM中哪個引數是用來控制執行緒的棧堆疊小的?
  52. Thread類中的yield方法有什麼作用?
  53. Java中ConcurrentHashMap的併發度是什麼?
  54. Java中Semaphore是什麼?
  55. Java執行緒池中submit() 和 execute()方法有什麼區別?
  56. 什麼是阻塞式方法?
  57. Java中的ReadWriteLock是什麼?
  58. volatile 變數和 atomic 變數有什麼不同?
  59. 可以直接呼叫Thread類的run ()方法麼?
  60. 如何讓正在執行的執行緒暫停一段時間?
  61. 你對執行緒優先順序的理解是什麼?
  62. 什麼是執行緒排程器和時間分片?
  63. 你如何確保main()方法所在的執行緒是Java 程式最後結束的執行緒?
  64. 執行緒之間是如何通訊的?
  65. 為什麼執行緒通訊的方法wait()、notify()和notifyAll()被定義在Object 類裡?
  66. 為什麼wait()、notify()和notifyAll ()必須在同步方法或者同步塊中被呼叫?
  67. 為什麼Thread類的sleep()和yield ()方法是靜態的?
  68. 如何確保執行緒安全?
  69. 同步方法和同步塊,哪個是更好的選擇?
  70. 如何建立守護執行緒?
  71. 什麼是Java Timer 類?如何建立一個有特定時間間隔的任務?

以上的總結出來的面試以及面試問題,你們自己在看文章時,你自己想一下看,你能把那些問題都能回答上來麼?你對自己的技術感到又想到進一步的提升麼?在你約到技術上的困難以及瓶疾的時候,你能夠解決麼?不能解決的,證明你在開發的道路上,你還需要繼續努力學習;

最後,想要獲取整理好的Java面試題與答案,有需要的可以 直接點選這裡,對,就這裡,回覆暗號:面試 即可免費領取!!!

部分資料展示