最全阿里面试题:已拿offer,阿里P8岗位完整阿里技术面试题目,这些面试题你能答出多少
我們在操作數據庫的時候,可能會由于并發問題而引起的數據的不一致性(數據沖突)。如
何保證數據并發訪問的一致性、有效性,是所有數據庫必須解決的一個問題,鎖的沖突也是
影響數據庫并發訪問性能的一個重要因素,從這一角度來說,鎖對于數據庫而言就顯得尤為
重要。
MySQL 鎖概述
相對其他數據庫而言,MySQL 的鎖機制比較簡單,其最顯著的特點是不同的存儲引擎支持
不同的鎖機制。
比如:
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 的加載過程和原理、回收算法、以及具體使用過的框架,會問部分參數檢驗你是否熟用
第一面能通過,后續被錄用的可能性就比較高了,第一輪非常重要,建議系統性的學習面試題目!
一面:
二面:
三面:
四面:
五面:
六面:
面試總結:
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)項目介紹?
3)遇到的最大困難是什么?怎么解決的?
4)你覺得你能怎么優化這個項目?
面試題目
1)講一下 JVM
2)講一下 JVM 的分代回收以及具體算法
3)將一下 JVM 的垃圾收集器,G1 和 CMS 有啥區別?
4)講一下一個變量從產生到結束所經歷的過程,講一下字符串常量的過程?
5)將一下線程安全問題產生的原因?
6)講一下樂觀鎖和悲觀鎖7)樂觀鎖是怎么保證一致性的
8)Integer 和 int 有啥區別,integer 中有哪些特殊的函數?
9)講一下數據庫的隔離等級
10)說一下 MVCC
11)說一聚簇索引和非聚簇索引的有什么不同
淘寶二面:
1、問了冒泡排序,快排,和歸并排序及優缺點和優化
2,網絡方面有 osi 七層,tcp/ip 五層,分別有哪些協議及作用
3,爬蟲用的什么數據結構
4、tcp 的流量控制和擁塞控制
5,mysql 用的什么存儲引擎,這個存儲引擎用的什么數據結構 ,有哪些優缺點,怎么使用
6,jvm 的垃圾回收機制和垃圾收集器
7、spring 當中事物的隔離級別
8、jdk1.8 concurrenthashmap 的新的特性,有沒有看過源碼
9、 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. 數據庫事務屬性
以上就是完整的阿里技術面試題目、以及阿里面試經驗總結,希望對你有所幫助!
?
總結
以上是生活随笔為你收集整理的最全阿里面试题:已拿offer,阿里P8岗位完整阿里技术面试题目,这些面试题你能答出多少的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wow模型修改器_《魔兽世界》魔兽世界模
- 下一篇: 桌面窗口管理器和csrss导致Windo