阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

我們在操作數據庫的時候,可能會由於併發問題而引起的數據的不一致性(數據衝突)。如何保證數據併發訪問的一致性、有效性,是所有數據庫必須解決的一個問題,鎖的衝突也是影響數據庫併發訪問性能的一個重要因素,從這一角度來說,鎖對於數據庫而言就顯得尤爲重要。

MySQL 鎖概述

相對其他數據庫而言,MySQL 的鎖機制比較簡單,其最顯著的特點是不同的存儲引擎支持不同的鎖機制。

比如:

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

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

MySQL 主要的兩種鎖的特性可大致歸納如下:

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

表級鎖: 開銷小,加鎖快;不會出現死鎖(因爲 MyISAM 會一次性獲得 SQL 所需的全部鎖);鎖定粒度大,發生鎖衝突的概率最高,併發度最低。

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

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

行鎖 和 表鎖

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

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

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

2.行鎖 和 表鎖 的區別:

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

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

悲觀鎖 和 樂觀鎖

(1)悲觀鎖:顧名思義,就是很悲觀,每次去拿數據的時候都認爲別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會 block 直到它拿到鎖。

傳統的關係型數據庫裏邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。

(2)樂觀鎖: 顧名思義,就是很樂觀,每次去拿數據的時候都認爲別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可以使用版本號等機制。樂觀鎖適用於多讀的應用類型,這樣可以提高吞吐量,像數據庫如果提供類似於write_condition 機制的其實都是提供的樂觀鎖。

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

兩種鎖各有優缺點,不可認爲一種好於另一種,像樂觀鎖適用於寫比較少的情況下,即衝突真的很少發生的時候,這樣可以省去了鎖的開銷,加大了系統的整個吞吐量。但如果經常產生衝突,上層應用會不斷的進行 retry,這樣反倒是降低了性能,所以這種情況下用悲觀鎖就比較合適。

共享鎖

共享鎖指的就是對於多個不同的事務,對同一個資源共享同一個鎖。相當於對於同一把門,它擁有多個鑰匙一樣。就像這樣,你家有一個大門,大門的鑰匙有好幾把,你有一把,你女朋友有一把,你們都可能通過這把鑰匙進入你們家,這個就是所謂的共享鎖。

剛剛說了,對於悲觀鎖,一般數據庫已經實現了,共享鎖也屬於悲觀鎖的一種,那麼共享鎖在 mysql 中是通過什麼命令來調用呢。通過查詢資料,瞭解到通過在執行語句後面加上 lockin share mode 就代表對某些資源加上共享鎖了。

什麼時候使用表鎖

對於 InnoDB 表,在絕大部分情況下都應該使用行級鎖,因爲事務和行鎖往往是我們之所以選擇 InnoDB 表的理由。但在個別特殊事務中,也可以考慮使用表級鎖。第一種情況是:事務需要更新大部分或全部數據,表又比較大,如果使用默認的行鎖,不僅這個事務執行效率低,而且可能造成其他事務長時間鎖等待和鎖衝突,這種情況下可以考慮使用表鎖來提高該事務的執行速度。

第二種情況是:事務涉及多個表,比較複雜,很可能引起死鎖,造成大量事務回滾。這種情況也可以考慮一次性鎖定事務涉及的表,從而避免死鎖、減少數據庫因事務回滾帶來的開銷。

當然,應用中這兩種事務不能太多,否則,就應該考慮使用 MyISAM 表了。表鎖和行鎖應用場景:

表級鎖使用與併發性不高,以查詢爲主,少量更新的應用,比如小型的 web 應用;而行級鎖適用於高併發環境下,對事務完整性要求較高的系統,如在線事務處理系統。

BAT 技術面試範圍

數據結構與算法:最常見的各種排序,最好能手寫
Java 高級:JVM 內存結構、垃圾回收器、回收算法、GC、併發編程相關(多線程、線程池等)、NIO/BIO、各種集合類的比較優劣勢(底層數據結構也要掌握,特別是擴容等)等。
性能優化、設計模式、UML 的掌握
Spring 框架:重點掌握(BAT 每次必問)
分佈式相關:Redis 緩存、一致 Hash 算法、分佈式存儲、負載均衡等。
微服務以及 Docker 容器等。

最新大廠面試真題+解析主要包括阿里、OPPO,字節跳動、小米、百度、華爲、騰訊、網易、迅雷...)等一線互聯網公司主要的技術點與面試專題(在這給大家推薦一個Java技術交流分享討論的羣,那裏每天都會有技術乾貨、技術動向、職業生涯、行業熱點、職場趣事等一切有關於程序員的內容分享。更有海量Java中級→高級→架構等學習資料,相關源碼視頻,面試資料。如果你們有需要的話 :加入羣聊:328993819即可免費獲取)
阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試總結
阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里的面試特別喜歡面試技術原理,特別是多線程、NIO、異步消息框架、分佈式相關的緩存算法等

JVM 的加載過程和原理、回收算法,以及具體使用過的框架,會問部分參數檢驗你是否熟用

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

一面:

HashMap 實現原理,ConcurrentHashMap 實現原理
紅黑樹,爲什麼允許局部不平衡
TCP,UDP 區別,爲什麼可靠和不可靠
一次 HTTP 請求的全過程,包括域名解析、定位主機等
TCP 三次握手
MySQL 事務是什麼?四大特性,四大隔離級別
ConcurrentHashMap 和 Hashtable 區別
spring IOC 和 AOP,以及各有什麼優點
有哪幾種常用的線程池
什麼情況下使用 Runnable 和 Thread 創建線程,Runnable 和 Callable 的區別
線程方法中的異常如何處理,副線程可以捕獲到嗎
synchronized 和鎖的區別,什麼情況下使用 synchronized 和 ReentrantLock
JVM 的對象分配在哪個區,Class 對象分配在哪個區
二面:

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

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

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

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

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

java 的基礎知識點,主要圍繞在集合類和多線程等:ArrayList、LinkedList、HashSet、HashpMap的數據結果,以及如何擴容、以及 ConcurrentHashMap 相關的多線程安全等。
JVM 的內存分配、幾個常見的垃圾回收算法以及原理、還有對應的 JVM 優化參數需要牢記。
網絡:TCP 的三次握手等網絡都必問,重點掌握網絡協議。
Redis:作爲分佈式緩存的主力,基本也是 BAT 每次必考,重點是 Redis 的數據結構、內存、算法、持久化,以及與別的緩存 memcached 的優劣勢。
多線程:狀態流轉、多線程的實現,以及與高併發的區別等。
Spring 框架問得是最多的,BAT 非常喜歡問,重點掌握。
最後就是分佈式架構設計,常用的分佈式架構設計方案:單點登錄、分佈式緩存、存儲、消息的選型,還有就是數據庫端的優化方案(需要提前瞭解)。
最好能提前瞭解深入一個類似秒殺這樣的項目,如果面試官問到類似的項目,你能把設計思路講出來,這對你的面試結果是很大的加分項。
螞蟻一面

自我介紹
談一個你覺得你學到最多的項目,使用了什麼技術,挑戰在哪裏3.Spring 的 bean 的作用域?(比如:singleton,prototype 等)
Spring 的 IOC 實現原理?沒有無參構造函數能實例化嗎?有參構造函數注入?(xml 配置)
通過反射,談到了方法區,然後,類加載機制?
synchronized 的實現原理?Volatile 能保證原子性嗎?爲什麼?
hashmap 和 concurrenthashmap 的 size 方法怎麼實現的
JVM 的調優參數?(-Xmn,-Xms 等具體參數設置)
線程池優點,參數,如果我想實現 newSingleThreadPoll,應該怎麼配置,構造方法傳什麼參數
mysql 死鎖,怎麼解決,如果不要求執行順序,死鎖怎麼解決
ioc 和 aop 原理
線程的五態?轉化過程?
TCP 三次握手,爲什麼三次握手?
JVM 內存分區?(主存,工作內存,堆,棧。。。。)
講一下 GC?
爲什麼要用老年代和新生代?
新生代進入老生代的情況?
新生代的分區?
螞蟻二面

變着法的問了一大堆線程池的知識 (主要考對應的參數)
java 內存模型
lock 和 synchronized 的區別
reentrantlock 的實現
hashmap 和 concurrenthashmap
B+樹和 B-樹的區別
複合索引
聚集索引和非聚集索引的區別?
數據庫索引 主鍵和唯一索引有什麼區別索引失效條件,什麼時候該建立索引
innDB 和 MyISAM 的區別?
線程安全(阻塞同步,非阻塞同步,無同步)
螞蟻三面

主要高併發和分佈式架構設計
服務器模型以及之間的區別
線程池的設計
線程池如何做負載均衡
如何實現線程調度算法
複合索引是如何實現的?
如何設計單點登錄,單點登錄的原理
redis 緩存和 memcached 緩存的區別,以及各自的優劣勢
大型高併發網站如何做性能優化:Web 性能、數據庫性能、應用服務器性能等。
實踐中如何優化 MySQL:SQL 語句及索引的優化、數據庫表結構的優化、系統配置的優化、
硬件的優化
分庫分表和讀寫分離如何設計
微服務架構: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)說一聚簇索引和非聚簇索引的有什麼不同

淘寶二面:

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 的內存中將兩個大文件中重複的放進第三個

文件

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

支付寶一面

  1. 介紹一下自己。

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

  3. ArrayList 和 LinkedList 底層

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

  5. Java 如何實現線程安全

  6. Synchronized 和 Lock 哪個更好?

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

  8. HashMap 可以用在哪些場景?

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

  10. SQL 優化,常用的索引?

  11. 還有什麼問題需要問的。

支付寶二面

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

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

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

  4. 死鎖,死鎖原因

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

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

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

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

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

  10. 說一下自己的優點。

支付寶三面

  1. jvm 性能調優都做了什麼

  2. 數據庫性能調優如何做

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

  4. 高併發情況下,我們系統是如何支撐大量的請求的

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

  6. 常用 NOSQL,有做過比較?

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

  8. 負載均衡的原理

  9. 數據庫事務屬性

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

面試答案!

面試答案整理出來了,這次技術面試針對的是阿里崗位,各位可以比較一下!

整理不易 需要全部完整版千道面試題答案的大廠Java面試題庫、BAT架構技術資料庫(在這給大家推薦一個Java技術交流分享討論的羣,那裏每天都會有技術乾貨、技術動向、職業生涯、行業熱點、職場趣事等一切有關於程序員的內容分享。更有海量Java中級→高級→架構等學習資料,相關源碼視頻,面試資料。如果你們有需要的話 :加入羣聊【Java架構技術交流】:328993819即可免費獲取)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

阿里面試:螞蟻金服/餓了麼/淘寶三面技術面年末整理(附面試題和答案)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章