最全阿里面試題:已拿offer,阿里P8崗位完整阿里技術面試題目,這些面試題你能答出多少

咱們在操做數據庫的時候,可能會因爲併發問題而引發的數據的不一致性(數據衝突)。如java

何保證數據併發訪問的一致性、有效性,是全部數據庫必須解決的一個問題,鎖的衝突也是mysql

影響數據庫併發訪問性能的一個重要因素,從這一角度來講,鎖對於數據庫而言就顯得尤其web

重要。面試

MySQL 鎖概述redis

相對其餘數據庫而言,MySQL 的鎖機制比較簡單,其最顯著的特色是不一樣的存儲引擎支持算法

不一樣的鎖機制。spring

好比:sql

MyISAM 和 MEMORY 存儲引擎採用的是表級鎖(table-level locking);數據庫

InnoDB 存儲引擎既支持行級鎖( row-level locking),也支持表級鎖,但默認狀況下是採編程

用行級鎖。

MySQL 主要的兩種鎖的特性可大體概括以下:

阿里 P8 架構師談:MySQL 行鎖、表鎖、悲觀鎖、樂觀鎖的特色與應用

表級鎖: 開銷小,加鎖快;不會出現死鎖(由於 MyISAM 會一次性得到 SQL 所需的所有鎖);

鎖定粒度大,發生鎖衝突的機率最高,併發度最低。

行級鎖: 開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的機率最低,併發度

也最高。

頁鎖:開銷和加鎖速度介於表鎖和行鎖之間;會出現死鎖;鎖定粒度介於表鎖和行鎖之間,

併發度通常

行鎖 和 表鎖

1.主要是針對鎖粒度劃分的,通常分爲:行鎖、表鎖、庫鎖

(1)行鎖:訪問數據庫的時候,鎖定整個行數據,防止併發錯誤。

(2)表鎖:訪問數據庫的時候,鎖定整個表數據,防止併發錯誤。

2.行鎖 和 表鎖 的區別:

表鎖: 開銷小,加鎖快,不會出現死鎖;鎖定力度大,發生鎖衝突機率高,併發度最低

行鎖: 開銷大,加鎖慢,會出現死鎖;鎖定粒度小,發生鎖衝突的機率低,併發度高

悲觀鎖 和 樂觀鎖

(1)悲觀鎖:顧名思義,就是很悲觀,每次去拿數據的時候都認爲別人會修改,因此每次

在拿數據的時候都會上鎖,這樣別人想拿這個數據就會 block 直到它拿到鎖。

傳統的關係型數據庫裏邊就用到了不少這種鎖機制,好比行鎖,表鎖等,讀鎖,寫鎖等,都

是在作操做以前先上鎖。

(2)樂觀鎖: 顧名思義,就是很樂觀,每次去拿數據的時候都認爲別人不會修改,因此不

會上鎖,可是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可使用版本

號等機制。樂觀鎖適用於多讀的應用類型,這樣能夠提升吞吐量,像數據庫若是提供相似於

write_condition 機制的其實都是提供的樂觀鎖。

(3)悲觀鎖 和 樂觀鎖的區別:

兩種鎖各有優缺點,不可認爲一種好於另外一種,像樂觀鎖適用於寫比較少的狀況下,即衝突

真的不多發生的時候,這樣能夠省去了鎖的開銷,加大了系統的整個吞吐量。但若是常常產

生衝突,上層應用會不斷的進行 retry,這樣反卻是下降了性能,因此這種狀況下用悲觀鎖

就比較合適。

共享鎖

共享鎖指的就是對於多個不一樣的事務,對同一個資源共享同一個鎖。至關於對於同一把門,

它擁有多個鑰匙同樣。就像這樣,你家有一個大門,大門的鑰匙有好幾把,你有一把,你女

朋友有一把,大家均可能經過這把鑰匙進入大家家,這個就是所謂的共享鎖。

剛剛說了,對於悲觀鎖,通常數據庫已經實現了,共享鎖也屬於悲觀鎖的一種,那麼共享鎖

在 mysql 中是經過什麼命令來調用呢。經過查詢資料,瞭解到經過在執行語句後面加上 lock

in share mode 就表明對某些資源加上共享鎖了。

何時使用表鎖

對於 InnoDB 表,在絕大部分狀況下都應該使用行級鎖,由於事務和行鎖每每是咱們之因此

選擇 InnoDB 表的理由。但在個別特殊事務中,也能夠考慮使用表級鎖。

第一種狀況是:事務須要更新大部分或所有數據,表又比較大,若是使用默認的行鎖,不

僅這個事務執行效率低,並且可能形成其餘事務長時間鎖等待和鎖衝突,這種狀況下能夠考

慮使用表鎖來提升該事務的執行速度。

第二種狀況是:事務涉及多個表,比較複雜,極可能引發死鎖,形成大量事務回滾。這種

狀況也能夠考慮一次性鎖定事務涉及的表,從而避免死鎖、減小數據庫因事務回滾帶來的開

銷。

固然,應用中這兩種事務不能太多,不然,就應該考慮使用 MyISAM 表了。

表鎖和行鎖應用場景:

表級鎖使用與併發性不高,以查詢爲主,少許更新的應用,好比小型的 web 應用;

而行級鎖適用於高併發環境下,對事務完整性要求較高的系統,如在線事務處理系統。

BAT 技術面試範圍

數據結構與算法:最多見的各類排序,最好能手寫

Java 高級:JVM 內存結構、垃圾回收器、回收算法、GC、併發編程相關(多

線程、線程池等)、NIO/BIO、各類集合類的比較優劣勢(底層數據結構也要

掌握,特別是擴容等)等。

性能優化、設計模式、UML 的掌握

Spring 框架:重點掌握(BAT 每次必問)

分佈式相關:Redis 緩存、一致 Hash 算法、分佈式存儲、負載均衡等。

微服務以及 Docker 容器等。

 

 

 

 

 

 

 

 

 

 

 

阿里面試總結

阿里的面試特別喜歡面試技術原理,特別是、多線程、NIO、異步消息框架、分佈式相關的緩存算法等、JVM 的加載過程和原理、回收算法、以及具體使用過的框架,會問部分參數檢驗你是否熟用

第一面能經過,後續被錄用的可能性就比較高了,第一輪很是重要,建議系統性的學習面試題目!

一面:

  1. HashMap 實現原理,ConcurrentHashMap 實現原理
  2. 紅黑樹,爲何容許局部不平衡
  3. TCP,UDP 區別,爲何可靠和不可靠
  4. 一次 HTTP 請求的全過程,包括域名解析、定位主機等
  5. TCP 三次握手
  6. MySQL 事務是什麼?四大特性,四大隔離級別
  7. ConcurrentHashMap 和 Hashtable 區別
  8. spring IOC 和 AOP,以及各有什麼優勢
  9. 有哪幾種經常使用的線程池
  10. 什麼狀況下使用 Runnable 和 Thread 建立線程,Runnable 和 Callable 的區別
  11. 線程方法中的異常如何處理,副線程能夠捕獲到嗎
  12. synchronized 和鎖的區別,什麼狀況下使用 synchronized 和 ReentrantLock
  13. JVM 的對象分配在哪一個區,Class 對象分配在哪一個區

二面:

  1. 經常使用的設計模式介紹:單例模式、裝飾者模式等
  2. Java 會出現內存溢出嗎?什麼狀況下會出現?
  3. 雙親委派模型,爲何這樣作?
  4. 對象什麼狀況下進入老年代?
  5. 快速排序說一下過程
  6. AOP 實現原理:動態代理
  7. BIO、NIO(如何實現的)、AIO
  8. 消息中間件有哪些?他們之間的優劣勢?
  9. Redis,持久化框架
  10. 棧和隊列
  11. 垃圾回收算法
  12. MySQL 的索引
  13. Tomcat 類加載器
  14. OOM 內存泄漏,什麼狀況下會出現,如何排查

三面:

  1. 介紹你實踐的性能優化案例,以及你的優化思路
  2. 微服務和 SOA 的區別,優劣勢
  3. SQL 慢查詢的優化方案,索引和表的優化方案。
  4. MySQL 與 MongoDB 的區別,海量數據的存儲
  5. 緩存框架,例如 Redis、Memcached 之間的區別,優劣勢比較
  6. 請描述一致 hash 算法
  7. 分佈式 session 的共享方案有哪些,有什麼優劣勢
  8. 高併發狀況,系統的優化方案有哪些,以及優先級排序。
  9. 面試總結

四面:

  1. ArrayList 和 linkedlist 區別。ArrayList 是否會越界。
  2. ArrayList 和 hashset 有何區別。hashset 存的數是有序的麼。
  3. volatile 和 synchronized 區別
  4. 多態的原理
  5. 數據庫引擎 Innodb 和 myisam 區別
  6. Redis 的數據結構
  7. Redis 是基於內存的麼
  8. Redis 的 list zset 的底層實現
  9. http 和 https 的區別,tcp 握手過程
  10. jvm 垃圾回收算法手寫冒泡
  11. 手寫單例包括多線程下
  12. Java 線程間怎麼實現同步,notify()與 notifyAll()的區別
  13. 數據庫的悲觀鎖和樂觀鎖應用場景。
  14. 排序算法的複雜度,快速排序非遞歸實現。
  15. 海量數據過濾,黑名單過濾一個 url。

五面:

  1. list set map 底層使用什麼實現的有哪些典型實現
  2. hashmap 擴容是怎麼擴容的,爲何是 2 的冪
  3. concurrenthashmap 爲何線程安全,採用了什麼措施應對高併發
  4. 線程池的參數有什麼意義
  5. Springmvc 請求流程
  6. Spring IOC,autowired 如何實現
  7. Spring boot
  8. SpringClound 的基本架構設計
  9. Dubbo 和 SpringClound 的區別在哪裏,優劣勢
  10. 說說一致性 Hash 算法

六面:

  1. 分佈式架構設計哪方面比較熟悉
  2. 講講你對 CDN 的瞭解,與分佈式緩存和本地緩存的區別
  3. 多線程和高併發有什麼區別
  4. 高併發下有哪些經常使用的技術解決方案,舉三個高併發場景設計例子
  5. 說一個你對 JVM 優化的實際案例,包括實際步驟和方法
  6. Docker 有使用過和了解嗎?Docker 和 JVM 的區別是什麼?
  7. Docker 的基本架構和使用場景?
  8. 負載均衡有接觸過哪些開源框架,優劣勢是什麼?
  9. 數據庫分庫分表須要怎樣來實現?
  10. 數據庫端的經常使用優化策略?
  11. 若是讓你來設計秒殺系統,你的設計思路是什麼,爲何要這樣設計?

面試總結:

java 的基礎知識點,主要圍繞在集合類和多線程等:ArrayList、LinkedList、HashSet、HashpMap的數據結果,以及如何擴容、以及 ConcurrentHashMap 相關的多線程安全等。

JVM 的內存分配、幾個常見的垃圾回收算法以及原理、還有對應的 JVM 優化參數須要牢記。

網絡:TCP 的三次握手等網絡都必問,重點掌握網絡協議。

Redis:做爲分佈式緩存的主力,基本也是 BAT 每次必考,重點是 Redis 的數據結構、內存、

算法、持久化,以及與別的緩存 memcached 的優劣勢。

多線程:狀態流轉、多線程的實現,以及與高併發的區別等。

Spring 框架問得是最多的,BAT 很是喜歡問,重點掌握。

最後就是分佈式架構設計

經常使用的分佈式架構設計方案:單點登陸、分佈式緩存、存儲、消息的選型,還有就是數據

庫端的優化方案(須要提早了解)。

最好能提早了解深刻一個相似秒殺這樣的項目,若是面試官問到相似的項目,你能把設計

思路講出來,這對你的面試結果是很大的加分項。

一面

1.自我介紹

2.談一個你以爲你學到最多的項目,使用了什麼技術,挑戰在哪裏3.Spring 的 bean 的做用域?(好比:singleton,prototype 等)

4.Spring 的 IOC 實現原理?沒有無參構造函數能實例化嗎?有參構造函數注入?(xml 配置)

5.經過反射,談到了方法區,而後,類加載機制?

6.synchronized 的實現原理?Volatile 能保證原子性嗎?爲何?

7.hashmap 和 concurrenthashmap 的 size 方法怎麼實現的

8.JVM 的調優參數?(-Xmn,-Xms 等具體參數設置)

9.線程池優勢,參數,若是我想實現 newSingleThreadPoll,應該怎麼配置,構造方法傳什麼

參數

10.mysql 死鎖,怎麼解決,若是不要求執行順序,死鎖怎麼解決

11.ioc 和 aop 原理

12.線程的五態?轉化過程?

13.TCP 三次握手,爲何三次握手?

14.JVM 內存分區?(主存,工做內存,堆,棧。。。。)

15.講一下 GC?

16.爲何要用老年代和新生代?

17.新生代進入老生代的狀況?

18.新生代的分區?

二面

  1. 變着法的問了一大堆線程池的知識 (主要考對應的參數)
  2. java 內存模型
  3. lock 和 synchronized 的區別
  4. reentrantlock 的實現
  5. hashmap 和 concurrenthashmap
  6. B+樹和 B-樹的區別
  7. 複合索引
  8. 彙集索引和非彙集索引的區別?
  9. 數據庫索引 主鍵和惟一索引有什麼區別索引失效條件,何時該創建索引
  10. innDB 和 MyISAM 的區別?
  11. 線程安全(阻塞同步,非阻塞同步,無同步)

三面

  1. 主要高併發和分佈式架構設計
  2. 服務器模型以及之間的區別
  3. 線程池的設計
  4. 線程池如何作負載均衡
  5. 如何實現線程調度算法
  6. 複合索引是如何實現的?
  7. 如何設計單點登陸,單點登陸的原理
  8. redis 緩存和 memcached 緩存的區別,以及各自的優劣勢
  9. 大型高併發網站如何作性能優化:Web 性能、數據庫性能、應用服務器性能等。
  10. 實踐中如何優化 MySQL:SQL 語句及索引的優化、數據庫表結構的優化、系統配置的優化、
  11. 硬件的優化
  12. 分庫分表和讀寫分離如何設計
  13. 微服務架構:dubbo 和 springcloud 的區別,以及各自對應的使用場景。

淘寶一面:

面試介紹

1)自我介紹?

2)項目介紹?

3)遇到的最大困難是什麼?怎麼解決的?

4)你以爲你能怎麼優化這個項目?

面試題目

1)講一下 JVM

2)講一下 JVM 的分代回收以及具體算法

3)將一下 JVM 的垃圾收集器,G1 和 CMS 有啥區別?

4)講一下一個變量從產生到結束所經歷的過程,講一下字符串常量的過程?

5)將一下線程安全問題產生的緣由?

6)講一下樂觀鎖和悲觀鎖7)樂觀鎖是怎麼保證一致性的

8)Integer 和 int 有啥區別,integer 中有哪些特殊的函數?

9)講一下數據庫的隔離等級

10)說一下 MVCC

11)說一聚簇索引和非聚簇索引的有什麼不一樣

淘寶二面:

一、問了冒泡排序,快排,和歸併排序及優缺點和優化

2,網絡方面有 osi 七層,tcp/ip 五層,分別有哪些協議及做用

3,爬蟲用的什麼數據結構

四、tcp 的流量控制和擁塞控制

5,mysql 用的什麼存儲引擎,這個存儲引擎用的什麼數據結構 ,有哪些優缺點,怎麼使用

6,jvm 的垃圾回收機制和垃圾收集器

七、spring 當中事物的隔離級別

八、jdk1.8 concurrenthashmap 的新的特性,有沒有看過源碼

九、 threadlocal 瞭解嗎

10,問了 redis 的一些問題,項目中有(擴容,失效 key 清理策略等)

11,剩下的都是項目的東西(kafka filebeat elk 原理,主從選舉,複製等)

12,後面擴展的問了一些大數據相關的,問我一些大數據處理框架是否有了解

整個過程四十分鐘左右

淘寶三面

主要項目,你作過哪些項目,用過哪些技術?瞭解哪些框架?你以爲對你技術提高最高的是

哪一件事情,提高了你哪一方面的技術?

1)講一下 Spring AOP 和 IOC 的底層實現

2)說一下 hashcode 的做用?HashMap 的底層實現?HashMap 和 HashTable 的區別3)說一下 concurrentHashMap 和 hashTable 在性能上的區別?以及這種差別造成的緣由

4)講一下堆以及堆排序

5)說一下 B+tree 和二叉搜索樹的區別?說一下二叉搜索樹和 AVL 樹、紅黑樹之間的差異

6)給你兩個文件(字符串形式的)如何找出他們之間的不一樣地方?

7)你剛剛說的能怎麼優化?

淘寶四面 交叉面

原本覺得三面結束就是 hr 面了,又收到一面交叉面

1. 給你 50 億行字符串,機器 4G 內存(只能一臺機器),找出重複次數最多的那行字符串?

(以行爲單位,每行不超過 10 個字符)

2.設計一個算法,實現兩個 10g 大文件在 10m 的內存中將兩個大文件中重複的放進第三個

文件

3. 快速排序的平均複雜多少?最壞狀況是什麼?(這個題估計就是緩和一下尷尬的氣氛)

支付寶一面

4. 介紹一下本身。

5. 項目參與的核心設計有哪些

6. ArrayList 和 LinkedList 底層

7. HashMap 及線程安全的 ConcurrentHashMap,以及各自優劣勢

8. Java 如何實現線程安全

9. Synchronized 和 Lock 哪一個更好?

10. HashMap 中的 get()方法是如何實現的?

11. HashMap 能夠用在哪些場景?

12. JVM,垃圾回收機制,內存劃分等

13. SQL 優化,經常使用的索引?

14. 還有什麼問題須要問的。

支付寶二面

16. 沒有自我介紹,直接問作過哪些 Java 開發相關的項目。

17. 對哪些技術比較熟悉?

18. 多線程狀態圖,狀態如何流轉?

19. 死鎖,死鎖緣由

20. 頁鎖、樂觀鎖、悲觀鎖?

21. 樂觀鎖如何保證線程安全?

22. 用過線程池嗎,對應的好處,如何用?

23. 兩個 10G 的文件,裏面是一些 url,內存只有 1G,如何將這兩個文件合併,找到相同

的 url?

24. 1000 個多併發線程,10 臺機器,每臺機器 4 核的,設計線程池大小。25. 代碼題:兩個有序數組,數組中存在重複數字,合併成一個有序數組,去除重複數字。

26. 說一下本身的優勢。

支付寶三面

28. jvm 性能調優都作了什麼

29. 數據庫性能調優如何作

30. 分佈式系統原理:CAP,最終一致性,冪等操做等

31. 高併發狀況下,咱們系統是如何支撐大量的請求的

32. 集羣如何同步會話狀態

33. 經常使用 NOSQL,有作過比較?

34. 什麼狀況會出現雪崩,以及如何應對?

35. 負載均衡的原理

36. 數據庫事務屬性

以上就是完整的阿里技術面試題目、以及阿里面試經驗總結,但願對你有所幫助!

面試答案!

面試答案整理出來了,此次技術面試針對的崗位是阿里P8,各位能夠比較一下!

阿里面試全題:面試阿里P8崗位完整阿里技術面試題目

äºé¢é¿éææ¯ä¸å®¶å²ï¼å·²æ¿offerï¼è¿äºé¢è¯é¢ä½ è½ç­åºå¤å°

äºé¢é¿éææ¯ä¸å®¶å²ï¼å·²æ¿offerï¼è¿äºé¢è¯é¢ä½ è½ç­åºå¤å°

相關文章
相關標籤/搜索