阿里、美團、拼多多、網易大廠面試之Redis+多線程+JVM+微服務...

非常非常不錯的一篇面經文章,文中很多的面試題目都值得我們在面試前刷一遍,強烈推薦閱讀3遍以上。如果覺得不錯,可以收藏分享一下。(面經沒有具體答案,需要大家一起來探討學習一下。)

美團篇(33道)

瞭解SOA,微服務嗎?

分佈式系統如何負載均衡?如何確定訪問的資源在哪個服務器上?

設計一個分佈式負載均衡緩衝系統,如何快速定位到是那個服務器?

如何保證緩衝區和數據庫之間的強一致性?

HashMap高併發情況下會出現什麼問題?

說一說在瀏覽器中輸入一個url後,直到瀏覽器顯示頁面的過程中發生了什麼?

字符串中句子的反轉(比如ABC DEF,輸出DEF ABC)

給任意二叉樹的所有結點加next指針

用過反向代理嗎?

進程間共享內存的方式有哪些?

linux下如何查看網絡端口狀態,如何查看內存使用情況?

ConcurrentHashMap如何擴容?

知道java的異常嗎?

運行時異常如果不處理會怎麼樣?應該怎麼處理運行時異常?

寫代碼:給你5000萬個int,求出前1000個最大的數,有2G內存。

給你n個不重複的整數,隨機找出m個不重複的整數,要求時間和空間複雜度都是O(m)。

對於SQL慢查詢的優化?

用過哪些容器?

用過動態代理嗎?

說說深入理解JVM中印象最深刻的章節

堆和棧中存的是什麼?static修飾的遍歷存在哪裏?

說說《Effective Java》中你印象最深的三條和你的理解

你覺得你哪一塊只是最熟悉

那你說說HashMap的內部實現;

HashMap是線程安全的嗎?

那ConcurrentHashMap內部是如何實現的?每個segment是個什麼數據結構?

你的項目中用到哪些技術?

說說你用了它的什麼?

Spring的優點?Spring AOP的原理?Spring如何實現解耦合?

對鏈表瞭解嗎?說說他們的區別?

會做鏈表兩個結點的交換嗎?

再寫一個,給你一個鏈表和一個整數k

說說mybatis配置了xml過後是如何完成數據庫操作的?

Redis

redis 和 memcached 什麼區別?

爲什麼高併發下有時單線程的 redis 比多線程的memcached 效率要高?

redis 主從複製如何實現的?

redis 的集羣模式如何實現?

redis 的 key 是如何尋址的?

使用 redis 如何設計分佈式鎖?說一下實現思路?使用 zk 可以嗎?如何實現?這兩種有什麼區別?

知道 redis 的持久化嗎?底層如何實現的?有什麼優點缺點?

redis 過期策略都有哪些?LRU 算法知道嗎?寫一下 java 代碼實現?

緩存穿透、緩存擊穿、緩存雪崩解決方案?

在選擇緩存時,什麼時候選擇 redis,什麼時候選擇 memcached

緩存與數據庫不一致怎麼辦?

主從數據庫不一致如何解決

Redis 常見的性能問題和解決方案

Redis 的數據淘汰策略有哪些?

Redis 當中有哪些數據結構?

假如 Redis 裏面有 1 億個 key,其中有 10w 個 key 是以某個固定的已知的前綴開頭的,如果將它們全部找出來?

...............

拼多多篇(40道)

給一個函數,返回 0 和 1,概率爲 p 和 1-p,請你實現一個函數,使得返回 01 概率一樣。

10 億個 url,每個 url 大小小於 56B,要求去重,內存 4G。

把一個 bst 轉化成一個雙向鏈表。

http 和 https 區別,https 在請求時額外的過程,https 是如何保證數據安全的。

IP 地址子網劃分。

POST 和 GET 區別。

硬鏈接和軟連接區別。

DNS 解析過程。

kill 用法,某個進程殺不掉的原因(進入內核態,忽略 kill 信號)。

linux 用過的命令。

系統管理命令(如查看內存使用、網絡情況)。

管道的使用。

grep 的使用,一定要掌握,每次都會問在文件中查找。

shell 腳本。

find 命令。

awk 使用。

Linux 下的一些指令,(進程id), (進程 id),(進程id),?(上一條命令退出時狀態),怎麼查看進程,按照內存大小,CPU 佔用排序等等。(大寫 M 和大寫 P)。

http 的 get 和 post 方法。

介紹下你所瞭解的 epoll。

數據庫 sql 的瞭解程度。

項目中遇到的問題,自己咋解決的等等。

手寫一個全排列。

B樹和B+樹。

介紹一下 Hash,怎麼解決衝突。

進程間的通信,共享內存方式的優缺點。

說下你平時看的一些技術博客,書籍。

linux 下的一些指令。

工作中你覺得最不爽的事情是什麼。

說下你的優缺點。

有沒有想過去創業公司。

寫個 strcpy 函數。

說說你自己的性格。

給你一個系統(面試官好像是無人車部門的),後臺的邏輯已經實現了,但是前端加載很慢,怎麼檢測。

以後可能要學習很多新技術,你怎麼看。

項目中遇到的困難(提前想好,並且把實現或者優化方法說清楚)。

系統的量級、pv、uv 等。

應對高併發的解決辦法(分佈式)。

在項目中主要負責了哪些工作。

nginx 的負載均衡。

分佈式緩存的一致性,服務器如何擴容(哈希環)。

多線程

現在有 T1、T2、T3 三個線程,你怎樣保證 T2 在 T1 執行完後執行,T3 在 T2 執行完後執行?

在 Java 中 Lock 接口比 synchronized 塊的優勢是什麼?你需要實現一個高效的緩存,它允許多個用戶讀,但只允許一個用戶寫,以此來保持它的完整性,你會怎樣去實現它?

在 java 中 wait 和 sleep 方法的不同?

用 Java 實現阻塞隊列

用 Java 寫代碼來解決生產者——消費者問題

用 Java 編程一個會導致死鎖的程序,你將怎麼解決?

什麼是原子操作,Java 中的原子操作是什麼?

Java 中的 volatile 關鍵是什麼作用?怎樣使用它?在 Java 中它跟 synchronized 方法有什麼不同?

什麼是競爭條件?你怎樣發現和解決競爭?

你將如何使用 threaddump?你將如何分析 Thread dump?

Java 中你怎樣喚醒一個阻塞的線程?

爲什麼我們調用 start()方法時會執行 run()方法,爲什麼我們不能直接調用 run()方法?

在 Java 中 CycliBarriar 和 CountdownLatch 有什麼區別?

什麼是不可變對象,它對寫併發應用有什麼幫助?

你在多線程環境中遇到的常見的問題是什麼?你是怎麼解決它的?

使用synchronized修飾靜態方法和非靜態方法有什麼區別。

簡述ConcurrentLinkedQueue和LinkedBlockingQueue的用處和不同之處。

導致線程死鎖的原因?

怎麼解除線程死鎖。

非常多個線程(可能是不同機器),相互之間需要等待協調,才能完成某種工作,問怎麼設計這種協調方案。

用過讀寫鎖嗎,原理是什麼,一般在什麼場景下用。

開啓多個線程,如果保證順序執行,有哪幾種實現方式,或者如何保證多個線程都執行完再拿到結果。

延遲隊列的實現方式,delayQueue和時間輪算法的異同。

更多面試資料、架構學習文檔需要獲取的朋友們可以轉發分享此文,關注小編後臺私信:“面試資料”即可一併獲取。

網易篇(72道)

HashMap的源碼,實現原理,JDK8中對HashMap做了怎樣的優化。

HaspMap擴容是怎樣擴容的,爲什麼都是2的N次冪的大小。

HashMap,HashTable,ConcurrentHashMap的區別。

極高併發下HashTable和ConcurrentHashMap哪個性能更好,爲什麼,如何實現的。

HashMap在高併發下如果沒有處理線程安全會有怎樣的安全隱患,具體表現是什麼。

java中四種修飾符的限制範圍。

Object類中的方法。

接口和抽象類的區別,注意JDK8的接口可以有實現。

動態代理的兩種方式,以及區別。

Java序列化的方式。

傳值和傳引用的區別,Java是怎麼樣的,有沒有傳值引用。

一個ArrayList在循環過程中刪除,會不會出問題,爲什麼。

@transactional註解在什麼情況下會失效,爲什麼。

B+樹

快速排序,堆排序,插入排序(其實八大排序算法都應該瞭解

一致性Hash算法,一致性Hash算法的應用

JVM的內存結構。

JVM方法棧的工作過程,方法棧和本地方法棧有什麼區別。

JVM的棧中引用如何和堆中的對象產生關聯。

可以瞭解一下逃逸分析技術。

GC的常見算法,CMS以及G1的垃圾回收過程,CMS的各個階段哪兩個是Stop the world的,CMS會不會產生碎片,G1的優勢。

標記清除和標記整理算法的理解以及優缺點。

eden survivor區的比例,爲什麼是這個比例,eden survivor的工作過程。

JVM如何判斷一個對象是否該被GC,可以視爲root的都有哪幾種類型。

強軟弱虛引用的區別以及GC對他們執行怎樣的操作。

Java是否可以GC直接內存。

Java類加載的過程。

雙親委派模型的過程以及優勢。

常用的JVM調優參數。

dump文件的分析。

Java有沒有主動觸發GC的方式(沒有)。

Java實現多線程有哪幾種方式。

Callable和Future的瞭解。

線程池的參數有哪些,在線程池創建一個線程的過程。

volitile關鍵字的作用,原理。

synchronized關鍵字的用法,優缺點。

Lock接口有哪些實現類,使用場景是什麼。

可重入鎖的用處及實現原理,寫時複製的過程,讀寫鎖,分段鎖(ConcurrentHashMap中的segment)。

悲觀鎖,樂觀鎖,優缺點,CAS有什麼缺陷,該如何解決。

ABC三個線程如何保證順序執行。

線程的狀態都有哪些。

sleep和wait的區別。

notify和notifyall的區別。

ThreadLocal的瞭解,實現原理。

常見的數據庫優化手段索引的優缺點,什麼字段上建立索引數據庫連接池。

durid的常用配置。

TCP,UDP區別。三次握手,四次揮手,爲什麼要四次揮手。

長連接和短連接。

連接池適合長連接還是短連接。

觀察者模式代理模式單例模式,有五種寫法,可以參考文章單例模式的五種實現方式可以考Spring中使用了哪些設計模式

分佈式事務的控制。

分佈式鎖如何設計。

分佈式session如何設計。

dubbo的組件有哪些,各有什麼作用。

zookeeper的負載均衡算法有哪些。

dubbo是如何利用接口就可以通信的。

redis和memcached的區別。

redis支持哪些數據結構。

redis是單線程的麼,所有的工作都是單線程麼。

redis如何存儲一個String的。

redis的部署方式,主從,集羣。

redis的哨兵模式,一個key值如何在redis集羣中找到存儲在哪裏。

redis持久化策略。

SpringMVC的Controller是如何將參數和前端傳來的數據一一對應的。

Mybatis如何找到指定的Mapper的,如何完成查詢的。

Quartz是如何完成定時任務的。

自定義註解的實現。

Spring使用了哪些設計模式。

Spring的IOC有什麼優勢。

Spring如何維護它擁有的bean。

一些較新的東西JDK8的新特性,流的概念及優勢,爲什麼有這種優勢。

區塊鏈瞭解如何設計雙11交易總額面板,要做到高併發高可用

JVM

JVM 內存分哪幾個區,每個區的作用是什麼?

如和判斷一個對象是否存活?(或者 GC 對象的判定方法)

簡述 Java 垃圾回收機制?

Java 中垃圾收集的方法有哪些?

Java 內存模型

Java 類加載過程?

簡述 Java 類加載機制?

類加載器雙親委派模型機制?

什麼是類加載器,類加載器有哪些?

簡述 Java 內存分配與回收策率以及 Minor GC 和Major GC?

螞蟻金服篇(39道)

HashMap&ConcurrentHashMap

再談談一致hash算法?

樂觀鎖&悲觀鎖?

可重入鎖&Synchronize?

事務四大特性?

事務的二段提交機制?

聚簇索引&非聚簇索引?

用自己的實踐經歷說一下索引的使用場景(說一個就要舉一個例子)?

當前讀&快照讀?

類加載過程?

雙親委派機制及使用原因?

說說GC算法?

Http&Https的區別

Https的加密方式

線程池的核心參數和基本原理

線程池的調優策略

說說自己參與的項目,技術難度在哪裏?

Collections.sort底層排序方式?

排序穩定性?

具體場景的排序策略?

Http請求過程,DNS解析過程

三次握手四次揮手

簡述線程池和併發工具的使用?

數據庫索引原理

頻繁老年代回收怎麼分析解決

Spring IOC、AOP?

講講SpringBoot/SpringCloud的一些應用?

阻塞隊列不用java提供的自己怎麼實現,condition和wait不能用

擁塞窗口講一講,爲什麼要用慢啓動算法

負載均衡的原理?

Redis的數據一致性問題(分佈式多節點環境 & 單機環境)?

講講docker容器?

如何實現何高併發下的削峯,限流?

項目中用的中間件的理解(Dubbo、MQ、Redis、kafka、zk)

服務器雪崩是怎麼造成的?之前有這樣的經歷嗎?怎麼防備?

高併發架構的設計思路

以前項目中遇到的最大問題和解決策略

生活中遇到的最大的挫折

生活中遇到的最大的令你最有成就感的事情

Spring全家桶(SpringCloud、Docker)

Spring

不同版本的 Spring Framework 有哪些主要功能?

什麼是 Spring Framework?

列舉 Spring Framework 的優點。

Spring Framework 有哪些不同的功能?

Spring Framework 中有多少個模塊,它們分別是什麼?

什麼是 Spring 配置文件?

Spring 應用程序有哪些不同組件?

使用 Spring 有哪些方式?

什麼是 Spring IOC 容器?

什麼是依賴注入?

spring 中有多少種 IOC 容器?

什麼是 spring bean?

spring 提供了哪些配置方式?

spring 支持集中 bean scope?

spring bean 容器的生命週期是什麼樣的?

什麼是 spring 的內部 bean?

什麼是基於註解的容器配置?

如何在 spring 中啓動註解裝配?

spring DAO 有什麼用?

spring JDBC API 中存在哪些類?

列舉 spring 支持的事務管理類型

什麼是 AOP?

什麼是 Aspect?

AOP 有哪些實現方式?

Spring AOP and AspectJ AOP 有什麼區別?

Docker

什麼是Docker?

如何使用Docker構建與環境無關的系統?

Dockerfile中的命令COPY和ADD命令有什麼區別?

什麼是Docker鏡像?

什麼是Docker容器?

什麼是Docker Hub?

Docker容器在任何給定時間點可以處於什麼狀態?

有沒有辦法識別Docker容器的狀態?

Dockerfile中最常見的指令是什麼?

什麼類型的應用程序 - 無狀態或有狀態更適合Docker容器?

Docker Image和Layer有什麼區別?

什麼是虛擬化?

什麼是管理程序?

什麼是Docker Swarm?

你將如何監控生產中的Docker?

更多面試專題答案、實戰學習文檔,需要獲取的朋友們可以轉發分享此文,關注小編後臺私信:“面試資料”即可一併獲取。

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