非常非常不錯的一篇面經文章,文中很多的面試題目都值得我們在面試前刷一遍,強烈推薦閱讀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?
更多面試專題答案、實戰學習文檔,需要獲取的朋友們可以轉發分享此文,關注小編後臺私信:“面試資料”即可一併獲取。
閱讀更多 java互聯網架構 的文章