疫情期間啃完這份美團大佬整理的284頁文檔,七面阿里終斬獲offer

前言

疫情影響,公司出了點問題,被迫辭職,這段時間我也沒閒着,一直在看這份美團大佬整理的Java核心知識點文檔還有馬士兵老師的視頻,最終七面阿里成功斬獲offer

先分享下阿里七面過程吧

阿里淘系 七面 工程項目經驗基本爲0 所以被死磕Java

總結起來:面試官喜歡拋出一個大點,看你能講多廣多深

一面: 90mins

講項目

講一個集合框架整體框架

分Collection和Map兩大類全部講一遍,每一個接口和對應實現類,他們類各自的特點,性質,基本參數,能講多深講多深

arraylist和hashset區別

爲什麼hashmap要在8的時候樹華

根據泊松分佈概率(源碼註釋裏寫了)

hashmap線程安全的方式

hashtable和concurrenthashmap的各自特點,能講多深講多深

爲什麼hashtable被棄用了,cch1.7之前和1.8之後的區別

鎖的分類

樂觀鎖、悲觀鎖、自旋鎖、讀寫鎖、排它鎖、共享鎖、分段鎖等等各自特點,以及它們在java中具體的實現方式

Spring IOC的底層實現

XML+dom4j+工廠+單例

索引不適用的條件

索引列上有函數,不滿足最左前綴,使用了不等號,使用了範圍查詢等等

索引的分類

B-Tree索引,Hash索引,全文索引,單值索引、唯一索引、複合索引、聚簇索引、非聚簇索引等等,以及它們各自的特點

二面:40mins

講項目

線程池瞭解多少

executors創建的幾種線程池,直接new ThreadPoolExecutor,7個參數

線程池拒絕策略分別使用在什麼場景

Spring AOP的底層實現

動態代理,newProxyInstance,cglib,ASM

講一下代理模式

動態代理,靜態代理

你都瞭解什麼設計模式,他們在JDK中如何體現的

工廠,責任鏈,觀察者,建造,代理,單例,原型等等在JDK中對應的體現。。。

三面coding:2h

千萬級數據量的list找一個數據(多線程),搶紅包

四面:50mins

講項目

講一下JVM堆內存管理

棧上分配->TLAB->新生代、老年代->可達性分析->GC算法->所有垃圾回收器及其優缺點和特點

那到底多大的對象會被直接扔到老年代

G1兩個region不是連續的,而且之間還有可達的引用,我現在要回收其中一個,另一個會被怎麼處理

聽說過CMS的併發預處理和併發可中斷預處理嗎

 

平常怎麼學習的和職業規劃

五面coding:2h

百萬級int數據量的一個array求和(fork/join)

六面交叉面:20mins

深挖科研項目

七面hr:20min

聊人生

 

再分享一下這段時間整理的面試題

JAVA基礎

  • JAVA中的幾種基本數據類型是什麼,各自佔用多少字節。
  • String類能被繼承嗎,爲什麼。
  • String,Stringbuffer,StringBuilder的區別。
  • ArrayList和LinkedList有什麼區別。
  • 講講類的實例化順序,比如父類靜態數據,構造函數,字段,子類靜態數據,構造函數,字段,當new的時候,他們的執行順序。
  • 用過哪些Map類,都有什麼區別,HashMap是線程安全的嗎,併發下使用的Map是什麼,他們內部原理分別是什麼,比如存儲方式,hashcode,擴容,默認容量等。
  • JAVA8的ConcurrentHashMap爲什麼放棄了分段鎖,有什麼問題嗎,如果你來設計,你如何設計。
  • 有沒有有順序的Map實現類,如果有,他們是怎麼保證有序的。
  • 抽象類和接口的區別,類可以繼承多個類麼,接口可以繼承多個接口麼,類可以實現多個接口麼。
  • 繼承和聚合的區別在哪。
  • IO模型有哪些,講講你理解的nio ,他和bio,aio的區別是啥,談談reactor模型。
  • 反射的原理,反射創建類實例的三種方式是什麼。
  • 反射中,Class.forName和ClassLoader區別 。
  • 描述動態代理的幾種實現方式,分別說出相應的優缺點。
  • 動態代理與cglib實現的區別。
  • 爲什麼CGlib方式可以對接口實現代理。
  • final的用途。
  • 寫出三種單例模式實現 。
  • 如何在父類中爲子類自動完成所有的hashcode和equals實現?這麼做有何優劣。
  • 請結合OO設計理念,談談訪問修飾符public、private、protected、default在應用設計中的作用。
  • 深拷貝和淺拷貝區別。
  • 數組和鏈表數據結構描述,各自的時間複雜度。
  • error和exception的區別,CheckedException,RuntimeException的區別。
  • 請列出5個運行時異常。
  • 在自己的代碼中,如果創建一個java.lang.String類,這個類是否可以被類加載器加載?爲什麼。
  • 說一說你對java.lang.Object對象中hashCode和equals方法的理解。在什麼場景下需要重新實現這兩個方法。
  • 在jdk1.5中,引入了泛型,泛型的存在是用來解決什麼問題。
  • 這樣的a.hashcode() 有什麼用,與a.equals(b)有什麼關係。
  • 有沒有可能2個不相等的對象有相同的hashcode。
  • Java中的HashSet內部是如何工作的。
  • 什麼是序列化,怎麼序列化,爲什麼序列化,反序列化會遇到什麼問題,如何解決。
  • java8的新特性。JVM知識
  • 什麼情況下會發生棧內存溢出。
  • JVM的內存結構,Eden和Survivor比例。
  • JVM內存爲什麼要分成新生代,老年代,持久代。新生代中爲什麼要分爲Eden和Survivor。
  • JVM中一次完整的GC流程是怎樣的,對象如何晉升到老年代,說說你知道的幾種主要的JVM參數。
  • 你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms和G1,包括原理,流程,優缺點。
  • 垃圾回收算法的實現原理。
  • 當出現了內存溢出,你怎麼排錯。
  • JVM內存模型的相關知識瞭解多少,比如重排序,內存屏障,happen-before,主內存,工作內存等。
  • 簡單說說你瞭解的類加載器,可以打破雙親委派麼,怎麼打破。
  • 講講JAVA的反射機制。
  • 你們線上應用的JVM參數有哪些。
  • g1和cms區別,吞吐量優先和響應優先的垃圾收集器選擇。
  • 怎麼打出線程棧信息。
  • 請解釋如下jvm參數的含義:
  • -server -Xms512m -Xmx512m -Xss1024K
  • -XX:PermSize=256m -XX:MaxPermSize=512m -
  • XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 -
  • XX:+UseCMSInitiatingOccupancyOnly。

開源框架知識

  • 簡單講講tomcat結構,以及其類加載器流程,線程模型等。
  • tomcat如何調優,涉及哪些參數 。
  • 講講Spring加載流程。
  • Spring AOP的實現原理。
  • 講講Spring事務的傳播屬性。
  • Spring如何管理事務的。
  • Spring怎麼配置事務(具體說出一些關鍵的xml 元素)。
  • 說說你對Spring的理解,非單例注入的原理?它的生命週期?循環注入的原理,aop的實現原理,說說aop中的幾個術語,它們是怎麼相互工作的。
  • Springmvc 中DispatcherServlet初始化過程。
  • netty的線程模型,netty如何基於reactor模型上實現的。
  • 爲什麼選擇netty。
  • 什麼是TCP粘包,拆包。解決方式是什麼。
  • netty的fashwheeltimer的用法,實現原理,是否出現過調用不夠準時,怎麼解決。
  • netty的心跳處理在弱網下怎麼辦。
  • netty的通訊協議是什麼樣的。
  • springmvc用到的註解,作用是什麼,原理。
  • springboot啓動機制。
  • 點擊這裏有一套答案版的Spring試題。操作系統
  • Linux系統下你關注過哪些內核參數,說說你知道的。
  • Linux下IO模型有幾種,各自的含義是什麼。
  • epoll和poll有什麼區別。
  • 平時用到哪些Linux命令。
  • 用一行命令查看文件的最後五行。
  • 用一行命令輸出正在運行的java進程。
  • 介紹下你理解的操作系統中線程切換過程。
  • 進程和線程的區別。
  • top 命令之後有哪些內容,有什麼作用。
  • 線上CPU爆高,請問你如何找到問題所在。多線程
  • 多線程的幾種實現方式,什麼是線程安全。
  • volatile的原理,作用,能代替鎖麼。
  • 畫一個線程的生命週期狀態圖。
  • sleep和wait的區別。
  • sleep和sleep(0)的區別。
  • Lock與Synchronized的區別 。
  • synchronized的原理是什麼,一般用在什麼地方(比如加在靜態方法和非靜態方法的區別,靜態方法和非靜態方法同時執行的時候會有影響嗎),解釋以下名詞:重排序,自旋鎖,偏向鎖,輕量級鎖,可重入鎖,公平鎖,非公平鎖,樂觀鎖,悲觀鎖。
  • 用過哪些原子類,他們的原理是什麼。
  • JUC下研究過哪些併發工具,講講原理。
  • 用過線程池嗎,如果用過,請說明原理,並說說newCache和newFixed有什麼區別,構造函數的各個參數的含義是什麼,比如coreSize,maxsize等。
  • 線程池的關閉方式有幾種,各自的區別是什麼。
  • 假如有一個第三方接口,有很多個線程去調用獲取數據,現在規定每秒鐘最多有10個線程同時調用它,如何做到。
  • spring的controller是單例還是多例,怎麼保證併發的安全。
  • 用三個線程按順序循環打印abc三個字母,比如abcabcabc。
  • ThreadLocal用過麼,用途是什麼,原理是什麼,用的時候要注意什麼。
  • 如果讓你實現一個併發安全的鏈表,你會怎麼做。
  • 有哪些無鎖數據結構,他們實現的原理是什麼。
  • 講講java同步機制的wait和notify。
  • CAS機制是什麼,如何解決ABA問題。
  • 多線程如果線程掛住了怎麼辦。
  • countdowlatch和cyclicbarrier的內部原理和用法,以及相互之間的差別(比如countdownlatch的await方法和是怎麼實現的)。
  • 對AbstractQueuedSynchronizer瞭解多少,講講加鎖和解鎖的流程,獨佔鎖和公平所加鎖有什麼不同。
  • 使用synchronized修飾靜態方法和非靜態方法有什麼區別。
  • 簡述ConcurrentLinkedQueue和LinkedBlockingQueue的用處和不同之處。
  • 導致線程死鎖的原因?怎麼解除線程死鎖。
  • 非常多個線程(可能是不同機器),相互之間需要等待協調,才能完成某種工作,問怎麼設計這種協調方案。
  • 用過讀寫鎖嗎,原理是什麼,一般在什麼場景下用。
  • 開啓多個線程,如果保證順序執行,有哪幾種實現方式,或者如何保證多個線程都執行完再拿到結果。
  • 延遲隊列的實現方式,delayQueue和時間輪算法的異同。TCP與HTTP
  • http1.0和http1.1有什麼區別。
  • TCP三次握手和四次揮手的流程,爲什麼斷開連接要4次,如果握手只有兩次,會出現什麼。
  • TIME_WAIT和CLOSE_WAIT的區別。
  • 說說你知道的幾種HTTP響應碼,比如200, 302, 404。
  • 當你用瀏覽器打開一個鏈接(如:http://www.javastack.cn)的時候,計算機做了哪些工作步驟。
  • TCP/IP如何保證可靠性,說說TCP頭的結構。
  • 如何避免瀏覽器緩存。
  • 如何理解HTTP協議的無狀態性。
  • 簡述Http請求get和post的區別以及數據包格式。
  • HTTP有哪些method
  • 簡述HTTP請求的報文格式。
  • HTTP的長連接是什麼意思。
  • HTTPS的加密方式是什麼,講講整個加密解密流程。
  • Http和https的三次握手有什麼區別。
  • 什麼是分塊傳送。
  • Session和cookie的區別。架構設計與分佈式
  • 用java自己實現一個LRU。
  • 分佈式集羣下如何做到唯一序列號。
  • 設計一個秒殺系統,30分鐘沒付款就自動關閉交易。
  • 如何使用redis和zookeeper實現分佈式鎖?有什麼區別優缺點,會有什麼問題,分別適用什麼場景。(延伸:如果知道redlock,講講他的算法實現,爭議在哪裏)
  • 如果有人惡意創建非法連接,怎麼解決。
  • 分佈式事務的原理,優缺點,如何使用分佈式事務,2pc 3pc 的區別,解決了哪些問題,還有哪些問題沒解決,如何解決,你自己項目裏涉及到分佈式事務是怎麼處理的。
  • 什麼是一致性hash。
  • 什麼是restful,講講你理解的restful。
  • 如何設計一個良好的API。
  • 如何設計建立和保持100w的長連接。
  • 解釋什麼是MESI協議(緩存一致性)。
  • 說說你知道的幾種HASH算法,簡單的也可以。
  • 什麼是paxos算法, 什麼是zab協議。
  • 一個在線文檔系統,文檔可以被編輯,如何防止多人同時對同一份文檔進行編輯更新。
  • 線上系統突然變得異常緩慢,你如何查找問題。
  • 說說你平時用到的設計模式。
  • Dubbo的原理,有看過源碼麼,數據怎麼流轉的,怎麼實現集羣,負載均衡,服務註冊和發現,重試轉發,快速失敗的策略是怎樣的 。
  • 一次RPC請求的流程是什麼。
  • 自己實現過rpc麼,原理可以簡單講講。Rpc要解決什麼問題。
  • 異步模式的用途和意義。
  • 編程中自己都怎麼考慮一些設計原則的,比如開閉原則,以及在工作中的應用。
  • 設計一個社交網站中的“私信”功能,要求高併發、可擴展等等。 畫一下架構圖。
  • MVC模式,即常見的MVC框架。
  • 聊下曾經參與設計的服務器架構並畫圖,談談遇到的問題,怎麼解決的。
  • 應用服務器怎麼監控性能,各種方式的區別。
  • 如何設計一套高併發支付方案,架構如何設計。
  • 如何實現負載均衡,有哪些算法可以實現。
  • Zookeeper的用途,選舉的原理是什麼。
  • Zookeeper watch機制原理。
  • Mybatis的底層實現原理。
  • 請思考一個方案,實現分佈式環境下的countDownLatch。
  • 後臺系統怎麼防止請求重複提交。
  • 描述一個服務從發佈到被消費的詳細過程。
  • 講講你理解的服務治理。
  • 如何做到接口的冪等性。
  • 如何做限流策略,令牌桶和漏斗算法的使用場景。
  • 什麼叫數據一致性,你怎麼理解數據一致性。
  • 分佈式服務調用方,不依賴服務提供方的話,怎麼處理服務方掛掉後,大量無效資源請求的浪費,如果只是服務提供方吞吐不高的時候該怎麼做,如果服務掛了,那麼一會重啓,該怎麼做到最小的資源浪費,流量半開的實現機制是什麼。
  • dubbo的泛化調用怎麼實現的,如果是你,你會怎麼做。
  • 遠程調用會有超時現象,如果做到優雅的控制,JDK自帶的超時機制有哪些,怎麼實現的。算法
  • 10億個數字裏裏面找最小的10個。
  • 有1億個數字,其中有2個是重複的,快速找到它,時間和空間要最優。
  • 2億個隨機生成的無序整數,找出中間大小的值。
  • 給一個不知道長度的(可能很大)輸入字符串,設計一種方案,將重複的字符排重。
  • 遍歷二叉樹。
  • 有3n+1個數字,其中3n箇中是重複的,只有1個是不重複的,怎麼找出來。
  • 寫一個字符串(如:http://www.javastack.cn)反轉函數。
  • 常用的排序算法,快排,歸併、冒泡。 快排的最優時間複雜度,最差複雜度。冒泡排序的優化方案。
  • 二分查找的時間複雜度,優勢。
  • 一個已經構建好的TreeSet,怎麼完成倒排序。
  • 什麼是B+樹,B-樹,列出實際的使用場景。
  • 一個單向鏈表,刪除倒數第N個數據。
  • 200個有序的數組,每個數組裏面100個元素,找出top20的元素。
  • 單向鏈表,查找中間的那個元素。數據庫知識
  • 數據庫隔離級別有哪些,各自的含義是什麼,MYSQL默認的隔離級別是是什麼。
  • 什麼是幻讀。
  • MYSQL有哪些存儲引擎,各自優缺點。
  • 高併發下,如何做到安全的修改同一行數據。
  • 樂觀鎖和悲觀鎖是什麼,INNODB的標準行級鎖有哪2種,解釋其含義。
  • SQL優化的一般步驟是什麼,怎麼看執行計劃,如何理解其中各個字段的含義。
  • 數據庫會死鎖嗎,舉一個死鎖的例子,mysql怎麼解決死鎖。
  • MYsql的索引原理,索引的類型有哪些,如何創建合理的索引,索引如何優化。
  • 聚集索引和非聚集索引的區別。
  • select for update 是什麼含義,會鎖表還是鎖行或是其他。
  • 爲什麼要用Btree實現,它是怎麼分裂的,什麼時候分裂,爲什麼是平衡的。
  • 數據庫的ACID是什麼。
  • 某個表有近千萬數據,CRUD比較慢,如何優化。
  • Mysql怎麼優化table scan的。
  • 如何寫sql能夠有效的使用到複合索引。
  • mysql中in 和exists 區別。
  • 數據庫自增主鍵可能的問題。
  • MVCC的含義,如何實現的。
  • 你做過的項目裏遇到分庫分表了嗎,怎麼做的,有用到中間件麼,比如sharding jdbc等,他們的原理知道麼。
  • MYSQL的主從延遲怎麼解決。消息隊列
  • 消息隊列的使用場景。
  • 消息的重發,補充策略。
  • 如何保證消息的有序性。
  • 用過哪些MQ,和其他mq比較有什麼優缺點,MQ的連接是線程安全的嗎,你們公司的MQ服務架構怎樣的。
  • MQ系統的數據如何保證不丟失。
  • rabbitmq如何實現集羣高可用。
  • kafka吞吐量高的原因。
  • kafka 和其他消息隊列的區別,kafka 主從同步怎麼實現。
  • 利用mq怎麼實現最終一致性。
  • 使用kafka有沒有遇到什麼問題,怎麼解決的。
  • MQ有可能發生重複消費,如何避免,如何做到冪等。
  • MQ的消息延遲了怎麼處理,消息可以設置過期時間麼,過期了你們一般怎麼處理。緩存
  • 常見的緩存策略有哪些,如何做到緩存(比如redis)與DB裏的數據一致性,你們項目中用到了什麼緩存系統,如何設計的。
  • 如何防止緩存擊穿和雪崩。
  • 緩存數據過期後的更新如何設計。
  • redis的list結構相關的操作。
  • Redis的數據結構都有哪些。
  • Redis的使用要注意什麼,講講持久化方式,內存設置,集羣的應用和優劣勢,淘汰策略等。
  • redis2和redis3的區別,redis3內部通訊機制。
  • 當前redis集羣有哪些玩法,各自優缺點,場景。
  • Memcache的原理,哪些數據適合放在緩存中。
  • redis和memcached 的內存管理的區別。
  • Redis的併發競爭問題如何解決,瞭解Redis事務的CAS操作嗎。
  • Redis的選舉算法和流程是怎樣的。
  • redis的持久化的機制,aof和rdb的區別。
  • redis的集羣怎麼同步的數據的。
  • 知道哪些redis的優化操作。
  • Reids的主從複製機制原理。
  • Redis的線程模型是什麼。
  • 請思考一個方案,設計一個可以控制緩存總體大小的自動適應的本地緩存。
  • 如何看待緩存的使用(本地緩存,集中式緩存),簡述本地緩存和集中式緩存和優缺點。本地緩存在併發使用時的注意事項。搜索
  • elasticsearch瞭解多少,說說你們公司es的集羣架構,索引數據大小,分片有多少,以及一些調優手段 。elasticsearch的倒排索引是什麼。
  • elasticsearch 索引數據多了怎麼辦,如何調優,部署。
  • elasticsearch是如何實現master選舉的。
  • 詳細描述一下Elasticsearch索引文檔的過程。
  • 詳細描述一下Elasticsearch搜索的過程。
  • Elasticsearch在部署時,對Linux的設置有哪些優化方法?
  • lucence內部結構是什麼

先到這裏吧,爲了大家更好的閱讀,小編把這些面試題都整理成了文檔,感興趣的朋友可以幫忙轉發文章後,關注私信回覆【學習】來免費獲取

疫情期間啃完這份美團大佬整理的284頁文檔,七面阿里終斬獲offer

 

重點來了!!!美團大佬整理的Java核心知識點

疫情期間啃完這份美團大佬整理的284頁文檔,七面阿里終斬獲offer

 

疫情期間啃完這份美團大佬整理的284頁文檔,七面阿里終斬獲offer

 

疫情期間啃完這份美團大佬整理的284頁文檔,七面阿里終斬獲offer

 

疫情期間啃完這份美團大佬整理的284頁文檔,七面阿里終斬獲offer

 

疫情期間啃完這份美團大佬整理的284頁文檔,七面阿里終斬獲offer

 

疫情期間啃完這份美團大佬整理的284頁文檔,七面阿里終斬獲offer

 

疫情期間啃完這份美團大佬整理的284頁文檔,七面阿里終斬獲offer

 

限於平臺篇幅原因,同時也爲了大家更好的閱讀,這份文檔小編已經給大家準備好了,感興趣的朋友可以幫忙轉發文章後,關注,私信回覆【學習】來免費獲取

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