阿里巴巴、百度、美團、面試題大集合,願你更輕鬆拿下大廠offer。

點關注,不迷路;持續更新Java相關技術及資訊!!!
以下內容嘔心瀝血收集了很久,內容有點長 。希望點個喜歡,給個評論!分享給更多的朋友!

我們在操作數據庫的時候,可能會由於併發問題而引起的數據的不一致性(數據衝突)。如何保證數據併發訪問的一致性、有效性,是所有數據庫必須解決的一個問題,鎖的衝突也是影響數據庫併發訪問性能的一個重要因素,從這一角度來說,鎖對於數據庫而言就顯得尤爲重要。
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 中是通過什麼命令來調用呢。通過查詢資料,瞭解到通過在執行語句後面加上 lockin share mode 就代表對某些資源加上共享鎖了。

什麼時候使用表鎖

對於 InnoDB 表,在絕大部分情況下都應該使用行級鎖,因爲事務和行鎖往往是我們之所以選擇 InnoDB 表的理由。但在個別特殊事務中,也可以考慮使用表級鎖。

第一種情況是:事務需要更新大部分或全部數據,表又比較大,如果使用默認的行鎖,不僅這個事務執行效率低,而且可能造成其他事務長時間鎖等待和鎖衝突,這種情況下可以考慮使用表鎖來提高該事務的執行速度。

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

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

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

BAT 技術面試範圍

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

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

阿里面試總結

阿里的面試特別喜歡面試 技術原理,特別是
.
多線程
.
.
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 非常喜歡問,重點掌握。
最後就是分佈式架構設計
常用的分佈式架構設計方案:單點登錄、分佈式緩存、存儲、消息的選型,還有就是數據
庫端的優化方案(需要提前瞭解)。
最好能提前瞭解深入一個類似秒殺這樣的項目,如果面試官問到類似的項目,你能把設計
思路講出來,這對你的面試結果是很大的加分項。

一面
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.新生代的分區?
二面
變着法的問了一大堆線程池的知識 (主要考對應的參數)
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 的內存中將兩個大文件中重複的放進第三個文件
  2. 快速排序的平均複雜多少?最壞情況是什麼?(這個題估計就是緩和一下尷尬的氣氛)
    支付寶一面
  3. 介紹一下自己。
  4. 項目參與的核心設計有哪些
  5. ArrayList 和 LinkedList 底層
  6. HashMap 及線程安全的 ConcurrentHashMap,以及各自優劣勢
  7. Java 如何實現線程安全
  8. Synchronized 和 Lock 哪個更好?
  9. HashMap 中的 get()方法是如何實現的?
  10. HashMap 可以用在哪些場景?
  11. JVM,垃圾回收機制,內存劃分等
  12. SQL 優化,常用的索引?
  13. 還有什麼問題需要問的。
  14. 支付寶二面
  15. 沒有自我介紹,直接問做過哪些 Java 開發相關的項目。
  16. 對哪些技術比較熟悉?
  17. 多線程狀態圖,狀態如何流轉?
  18. 死鎖,死鎖原因
  19. 頁鎖、樂觀鎖、悲觀鎖?
  20. 樂觀鎖如何保證線程安全?
  21. 用過線程池嗎,對應的好處,如何用?
  22. 兩個 10G 的文件,裏面是一些 url,內存只有 1G,如何將這兩個文件合併,找到相同的 url?
  23. 1000 個多併發線程,10 臺機器,每臺機器 4 核的,設計線程池大小。
  24. 代碼題:兩個有序數組,數組中存在重複數字,合併成一個有序數組,去除重複數字。
  25. 說一下自己的優點。
  26. 支付寶三面
  27. jvm 性能調優都做了什麼
  28. 數據庫性能調優如何做
  29. 分佈式系統原理:CAP,最終一致性,冪等操作等
  30. 高併發情況下,我們系統是如何支撐大量的請求的
  31. 集羣如何同步會話狀態
  32. 常用 NOSQL,有做過比較?
  33. 什麼情況會出現雪崩,以及如何應對?
  34. 負載均衡的原理
  35. 數據庫事務屬性

支付寶一面

. 介紹一下自己。
. 項目參與的核心設計有哪些
. ArrayList 和 LinkedList 底層
. HashMap 及線程安全的 ConcurrentHashMap,以及各自優劣勢
. Java 如何實現線程安全
. Synchronized 和 Lock 哪個更好?
. HashMap 中的 get()方法是如何實現的?
. HashMap 可以用在哪些場景?
. JVM,垃圾回收機制,內存劃分等
. SQL 優化,常用的索引?
. 還有什麼問題需要問的。

支付寶二面

沒有自我介紹,直接問做過哪些 Java 開發相關的項目。
. 對哪些技術比較熟悉?
. 多線程狀態圖,狀態如何流轉?
. 死鎖,死鎖原因
. 頁鎖、樂觀鎖、悲觀鎖?
. 樂觀鎖如何保證線程安全?
. 用過線程池嗎,對應的好處,如何用?
. 兩個 10G 的文件,裏面是一些 url,內存只有 1G,如何將這兩個文件
合併,找到相同的 url?
. 1000 個多併發線程,10 臺機器,每臺機器 4 核的,設計線程池大小。
. 代碼題:兩個有序數組,數組中存在重複數字,合併成一個有序數組,
去除重複數字。
. 說一下自己的優點。

支付寶三面

. jvm 性能調優都做了什麼
. 數據庫性能調優如何做
. 分佈式系統原理:CAP,最終一致性,冪等操作等
. 高併發情況下,我們系統是如何支撐大量的請求的
. 集羣如何同步會話狀態
. 常用 NOSQL,有做過比較?
. 什麼情況會出現雪崩,以及如何應對?
. 負載均衡的原理
. 數據庫事務屬性

美團內推(一面+二面+三面)面試題

美團一面(電話)
自我介紹
項目介紹
Redis 介紹
瞭解 redis 源碼麼
瞭解 redis 集羣麼
Hashmap 的原理,增刪的情況後端數據結構如何位移
hashmap 容量爲什麼是 2 的冪次
hashset 的源碼
object 類你知道的方法
hashcode 和 equals
你重寫過 hashcode 和 equals 麼,要注意什麼
假設現在一個學生類,有學號和姓名,我現在 hashcode 方法重寫的時候,只將學號參與計
算,會出現什麼情況?
往 set 裏面 put 一個學生對象,然後將這個學生對象的學號改了,再 put 進去,可以放進
set 麼?並講出爲什麼
Redis 的持久化?有哪些方式,原理是什麼?
講一下穩定的排序算法和不穩定的排序算法
講一下快速排序的思想
美團二面(現場)
自我介紹
講一下數據的 acid
什麼是一致性
什麼是隔離性
Mysql 的隔離級別
每個隔離級別是如何解決
Mysql 要加上 nextkey 鎖,語句該怎麼寫
Java 的內存模型,垃圾回收
線程池的參數
每個參數解釋一遍
然後面試官設置了每個參數,給了是個線程,讓描述出完整的線程池執行的流程
Nio 和 IO 有什麼區別
Nio 和 aio 的區別
Spring 的 aop 怎麼實現
Spring 的 aop 有哪些實現方式
動態代理的實現方式和區別
Linux 瞭解麼
怎麼查看系統負載
Cpu load 的參數如果爲 4,描述一下現在系統處於什麼情況
Linux,查找磁盤上最大的文件的命令
Linux,如何查看系統日誌文件
手撕算法:leeetcode 原題 22,Generate Parentheses,給定 n 對括號,請寫一個函數以將
其生成新的括號組合,並返回所有組合結果。
美團三面(現場)
三面沒怎麼問技術,問了很多技術管理方面的問題
自我介紹
項目介紹
怎麼管理項目成員
當意見不一致時,如何溝通並說服開發成員,並舉個例子
怎麼保證項目的進度
數據庫的索引原理
非聚簇索引和聚簇索引
索引的使用注意事項
聯合索引
從底層解釋最左匹配原則
Mysql 對聯合索引有優化麼?會自動調整順序麼?哪個版本開始優化?
Redis 的應用
Redis 的持久化的方式和原理
技術選型,一個新技術和一個穩定的舊技術,你會怎麼選擇,選擇的考慮有哪些
說你印象最深的美團點評技術團隊的三篇博客
最近在學什麼新技術

美團內推(一面 美團內推(一面+ 二面+三面)面試題目 三面)面試題目

美團一面(電話)
. 自我介紹
. 項目介紹
. Redis 介紹
. 瞭解 redis 源碼麼
. 瞭解 redis 集羣麼
. Hashmap 的原理,增刪的情況後端數據結構如何位移
. hashmap 容量爲什麼是 2 的冪次
. hashset 的源碼
. object 類你知道的方法
. hashcode 和 equals
. 你重寫過 hashcode 和 equals 麼,要注意什麼
. 假設現在一個學生類,有學號和姓名,我現在 hashcode 方法重寫的時
候,只將學號參與計算,會出現什麼情況?
. 往 set 裏面 put 一個學生對象,然後將這個學生對象的學號改了,再 put
進去,可以放進 set 麼?並講出爲什麼
. Redis 的持久化?有哪些方式,原理是什麼?
. 講一下穩定的排序算法和不穩定的排序算法
. 講一下快速排序的思想
美團二面(現場)
. 自我介紹
. 講一下數據的 acid
. 什麼是一致性
. 什麼是隔離性
. Mysql 的隔離級別
. 每個隔離級別是如何解決
. Mysql 要加上 nextkey 鎖,語句該怎麼寫
. Java 的內存模型,垃圾回收
. 線程池的參數
. 每個參數解釋一遍
. 然後面試官設置了每個參數,給了是個線程,讓描述出完整的線程池執
行的流程
. Nio 和 IO 有什麼區別
. Nio 和 aio 的區別
. Spring 的 aop 怎麼實現
. Spring 的 aop 有哪些實現方式
. 動態代理的實現方式和區別
. Linux 瞭解麼
. 怎麼查看系統負載
. Cpu load 的參數如果爲 4,描述一下現在系統處於什麼情況
. Linux,查找磁盤上最大的文件的命令
. Linux,如何查看系統日誌文件
. 手撕算法:leeetcode 原題 22,Generate Parentheses,給定 n 對
括號,請寫一個函數以將其生成新的括號組合,並返回所有組合結果。
美團三面(現場)
. 三面沒怎麼問技術,問了很多技術管理方面的問題
. 自我介紹
. 項目介紹
. 怎麼管理項目成員
. 當意見不一致時,如何溝通並說服開發成員,並舉個例子
. 怎麼保證項目的進度
. 數據庫的索引原理
. 非聚簇索引和聚簇索引
. 索引的使用注意事項
聯合索引
. 從底層解釋最左匹配原則
. Mysql 對聯合索引有優化麼?會自動調整順序麼?哪個版本開始優化?
. Redis 的應用
. Redis 的持久化的方式和原理
. 技術選型,一個新技術和一個穩定的舊技術,你會怎麼選擇,選擇的考
慮有哪些
. 說你印象最深的美團點評技術團隊的三篇博客
. 最近在學什麼新技術

百度一面(現場)

. 自我介紹
. Java 中的多態
. 爲什麼要同時重寫 hashcode 和 equals
. Hashmap 的原理
. Hashmap 如何變線程安全,每種方式的優缺點
. 垃圾回收機制
. Jvm 的參數你知道的說一下
. 設計模式瞭解的說一下啊
. 手撕一個單例模式
算法題目
. 手撕算法:反轉單鏈表
. 手撕算法:實現類似微博子結構的數據結構,輸入一系列父子關係,輸
出一個類似微博評論的父子結構圖
. 手寫 java 多線程
. 手寫 java 的 soeket 編程,服務端和客戶端
. 手撕算法: 爬樓梯,寫出狀態轉移方程
. 智力題:時針分針什麼時候重合

百度二面(現場)

. 自我介紹
. 項目介紹
. 服務器如何負載均衡,有哪些算法,哪個比較好,一致性哈希原理,怎
麼避免 DDOS 攻擊請求打到少數機器。
. TCP 連接中的三次握手和四次揮手,四次揮手的最後一個 ack 的作用是
什麼,爲什麼要 time wait,爲什麼是 2msl。
. 數據庫的備份和恢復怎麼實現的,主從複製怎麼做的,什麼時候會出現
數據不一致,如何解決。
. Linux 查看 cpu 佔用率高的進程
. 手撕算法:給定一個數字三角形,找到從頂部到底部的最小路徑和。每
一步可以移動到下面一行的相鄰數字上。
. 然後繼續在這個問題上擴展
. 求出最短那條的路徑
. 遞歸求出所有的路徑
. 設計模式講一下熟悉的
. 會不會濫用設計模式
. 多線程條件變量爲什麼要在 while 體裏
. 你遇到什麼挫折,怎麼應對和處理

百度三面(現場)

. 自我介紹
. 項目介紹
. Redis 的特點
. Redis 的持久化怎麼做,aof 和 rdb,有什麼區別,有什麼優缺點。
. Redis 使用哨兵部署會有什麼問題,我說需要擴容的話還是得集羣部署。
. 說一下 JVM 內存模型把,有哪些區,分別幹什麼的
. 說一下 gc 算法,分代回收說下
. MySQL 的引擎講一下,有什麼區別,使用場景呢
. 分佈式事務瞭解麼
. 反爬蟲的機制,有哪些方式

螞蟻金服一面:分佈式架構 50 分鐘

1、個人介紹加項目介紹 20 分鐘
2、微服務架構是什麼,它的優缺點?
3、ACID CAP BASE 理論
4、分佈式一致性協議,二段、三段、TCC,優缺點
5、RPC 過程
6、服務註冊中心宕機了怎麼辦?
7、微服務還有其他什麼組件
8、分佈式架構與微服務的關係
9、你有什麼問題要問我的。

螞蟻金服二面:1 個小時

上來不用自我介紹,項目介紹,直接開始
算法來兩道
1、各種排序算法、未排序常規數據查找第 K 大的數,時間複雜度。
2、二叉樹的深度
操作系統來兩道
3、虛擬內存分頁瞭解不?
4、進程和線程區別?
數據庫來三道
5、第一二三範式是什麼?
6、一個表一千個列值爲 true 和 false,寫 sql 查詢 有 300 個列值爲 true 的行。
7、髒讀和幻讀是什麼?
JVM
8、什麼對象會從新生代晉升到老年代
多線程
9、一個任務分成十個任務,最後彙總計算,不能用 fork/join
10、開源框架源碼瞭解不?
11、數據建模兩道、個人題開放性題
安全方面的問題
12、對安全方面瞭解多少?
13、 安全協議有哪些 、https 是啥?
介紹你做的項目和其中的難點。

三面

個人感覺着重技術深度。
1、從 ConcurrentHashMap 一路問到鎖&鎖優化->LongAdder->僞共享->緩存行填充->cas 等諸
多技術細節;
2、從 hystrix 一路問到原理->自己如何實現->如何優化->響應流編程(reactive streams);
3、從簡單的生產者消費者模式設計到如何高效健壯實現等等。

四面

1、如何倒序輸出單向鏈表?
2、個人直接想法是用棧先進後出的特點,把鏈表數據讀到棧裏然後輸出。
3、有更好的實現方式嗎?
4、主要問項目情況,然後根據一個項目,問如果量級擴大 1000 倍,你會怎麼做?有哪些優
化措施?高性能&高可用措施?

五面:HR 面

給大家拋出幾大深坑問題:
1、個人的職業規劃是什麼
2、你遇到的最大問題或者是困難是什麼
3、你如何看待阿里
4、你能爲阿里帶來什麼
5、你的優缺點是什麼
這幾個問題,大家深思啊,不多說。

面試總結:

1.技術基礎必須紮實:算法、數據結構、操作系統等,螞蟻金服面試對技術的基礎非常重視,基礎紮實的同學有利於在前兩輪突出重圍。

2.技術寬度:主要集中在高併發、多線程、分佈式架構,大以及常用中間件(緩存等)的選型和比較。

3.技術原理深入:重點還是提前準備好 JVM、多線程高併發這塊。

4.參與的項目總結:你需要清楚你所做項目的關鍵細節、優化、特點、原理。

5.很多所用第三方庫&中間件等的原理,即使你不知道,也要有自己的想法能夠說出如何代替實現,比如單點登錄的替代方案。

6.最好,提前準備一個大數據訪問,比如 pv 擴大 1000 倍,你的架構或者技術方案應對措施。

7.最後,千萬不要倒在 HR 面試環節,避重就輕是重點,特別是優點和缺點,如果問到你的規劃是什麼,請記得一定告訴 HR 你想成爲一名優秀的技術專家

福利

羣號:742991985
進羣驗證“csdn”獲取Java高級架構資料、源碼、筆記、視頻Dubbo、Redis、Netty、zookeeper、Spring
cloud、分佈式、高併發等架構技術架構視頻

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