長文干貨提示,文章為大家完整記錄了一位在杭州做了3年的JAVA開發(fā)的朋友,如何通過美團的面試及拿到35K的offer,請記得點贊收藏支持哦!

文章末尾有為大家準備好的JAVA面試" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 杭州JAVA開發(fā)3年,拿到美團35K的offer面試心得

杭州JAVA開發(fā)3年,拿到美團35K的offer面試心得

時間:2023-05-26 23:51:02 | 來源:網(wǎng)站運營

時間:2023-05-26 23:51:02 來源:網(wǎng)站運營

杭州JAVA開發(fā)3年,拿到美團35K的offer面試心得:前言

長文干貨提示,文章為大家完整記錄了一位在杭州做了3年的JAVA開發(fā)的朋友,如何通過美團的面試及拿到35K的offer,請記得點贊收藏支持哦!

文章末尾有為大家準備好的JAVA面試資料。下圖拿!?。?br>
面試總結
JAVA基礎
1. JAVA中的幾種基本數(shù)據(jù)類型是什么,各自占用多少字節(jié),Integer占幾個字節(jié).
八種基本數(shù)據(jù)類型,int(4),short(2),byte(1),long(8),float(4),double(8),char(2),boolean(1) Integer占用 32位:Header(標記頭4字節(jié) + 對象指針4字節(jié)) + int(4字節(jié))+ 對齊(4) = 16字節(jié) 64位:Header(標記頭8字節(jié) + 對象指針8字節(jié)) + int(4字節(jié))+ 對齊(4) = 24字節(jié) 64位(開啟指針壓縮):Header(標記頭8字節(jié) + 對象指針4字節(jié)) + int(4字節(jié))+ 對齊(0) = 16字節(jié)
2. String類能被繼承嗎,為什么.
String是一個被final修飾的類,不能被繼承
3. String,Stringbuffer,StringBuilder的區(qū)別.
String是Java中基礎且重要的類,并且String也是Immutable類的典型實現(xiàn),被聲明為final class,除了hash這個屬性其它屬性都聲明為final,因為它的不可變性,所以例如拼接字符串時候會產(chǎn)生很多無用的中間對象,如果頻繁的進行這樣的操作對性能有所影響. StringBuffer就是為了解決大量拼接字符串時產(chǎn)生很多中間對象問題而提供的一個類,提供append和add方法,可以將字符串添加到已有序列的末尾或指定位置,它的本質(zhì)是一個線程安全的可修改的字符序列,把所有修改數(shù)據(jù)的方法都加上了synchronized.但是保證了線程安全是需要性能的代價的.在很多情況下我們的字符串拼接操作不需要線程安全,這時候StringBuilder登場了,StringBuilder是JDK1. 5發(fā)布的,它和StringBuffer本質(zhì)上沒什么區(qū)別,就是去掉了保證線程安全的那部分,減少了開銷. StringBuffer 和 StringBuilder 二者都繼承了 AbstractStringBuilder ,底層都是利用可修改的char數(shù)組(JDK 9 以后是 byte數(shù)組).
4. ArrayList和LinkedList有什么區(qū)別.
ArrayList底層是數(shù)組實現(xiàn),具有數(shù)組的特性,增刪慢,查詢快 LinkedList底層是采用鏈表來實現(xiàn),增刪快,查詢慢
5. 講講類的實例化順序,比如父類靜態(tài)數(shù)據(jù),構造函數(shù),字段,子類靜態(tài)數(shù)據(jù),構造函數(shù),字段,當new的時候,他們的執(zhí)行順序.
類的實例化順序:先靜態(tài)再父子 父類靜態(tài)數(shù)據(jù)->子類靜態(tài)數(shù)據(jù)->父類字段->子類字段->父類構造函數(shù)->子類構造函數(shù)
6. 用過哪些Map類,都有什么區(qū)別,HashMap是線程安全的嗎,并發(fā)下使用的Map是什么,他們內(nèi)部原理分別是什么,比如存儲方式,hashcode,擴容,默認容量等.
最常用的Map實現(xiàn)類有:HashMap,ConcurrentHashMap(jdk1. 8),LinkedHashMap,TreeMap,Hashtable; 其中最頻繁的是HashMap和ConcurrentHashMap,他們的主要區(qū)別是HashMap是非線程安全的.ConcurrentHashMap是線程安全的. 并發(fā)下可以使用ConcurrentHashMap和Hashtable,他們的主要區(qū)別是: (1). ConcurrentHashMap的hash計算公式:(key. hascode()^ (key. hascode()>>> 16)) & 0x7FFFFFFF Hashtable的hash計算公式:key. hascode()& 0x7FFFFFFF (2). Hashtable存儲方式都是鏈表+數(shù)組,數(shù)組里面放的是當前hash的第一個數(shù)據(jù),鏈表里面放的是hash沖突的數(shù)據(jù) ConcurrentHashMap是數(shù)組+鏈表+紅黑樹 (3). 默認容量都是16,負載因子是0.75.就是當hashmap填充了75%的busket是就會擴容,最小的可能性是(16*0. 75),一般為原內(nèi)存的2倍 (4). 線程安全的保證:Hashtable是在每個操作方法上面加了synchronized來達到線程安全,ConcurrentHashMap線程是使用CAS(compore and swap)來保證線程安全的
7. JAVA8的ConcurrentHashMap為什么放棄了分段鎖,有什么問題嗎,如果你來設計,你如何設計.
jdk8 放棄了分段鎖而是用了Node鎖,減低鎖的粒度,提高性能,并使用CAS操作來確保Node的一些操作的原子性,取代了鎖. 但是ConcurrentHashMap的一些操作使用了synchronized鎖,而不是ReentrantLock,雖然說jdk8的synchronized的性能進行了優(yōu)化, 但是我覺得還是使用ReentrantLock鎖能更多的提高性能(優(yōu)先使用synchronized,虛擬機一直在優(yōu)化這個鎖)
8. 有沒有有順序的Map實現(xiàn)類,如果有,他們是怎么保證有序的.
順序的Map實現(xiàn)類:LinkedHashMap,TreeMap LinkedHashMap是基于元素進入集合的順序或者被訪問的先后順序排序,TreeMap 則是基于元素的固有順序(默認是hashcode,可以實現(xiàn)Comparable自定義排序規(guī)則).
9. 抽象類和接口的區(qū)別,類可以繼承多個類么,接口可以繼承多個接口么,類可以實現(xiàn)多個接口么.
抽象類有構造方法,接口沒有;抽象類中可以有方法的實現(xiàn)(8以后接口也可以了,default方法),類只能單繼承,接口可以繼承多個接口,類可以實現(xiàn)多個接口
10. 繼承和組合的區(qū)別在哪.
繼承指的是一個類繼承另外的一個類的功能,并可以增加它自己的新功能的能力,繼承是類與類或者接口與接口之間最常見的關系;在Java中此類關系通過關鍵字extends明確標識. 聚合體現(xiàn)的是整體與部分,擁有的關系,此時整體與部分之間是可分離的,他們可以具有各自的生命周期;比如計算機與CPU,公司與員工的關系等;
11. IO模型有哪些,講講你理解的nio ,他和bio,aio的區(qū)別是啥,談談reactor模型.
BIO:同步阻塞式IO,服務器實現(xiàn)模式為一個連接一個線程,即客戶端有連接請求時服務器端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷,當然可以通過線程池機制改善. NIO:同步非阻塞式IO,服務器實現(xiàn)模式為一個請求一個線程,即客戶端發(fā)送的連接請求都會注冊到多路復用器上,多路復用器輪詢到連接有I/O請求時才啟動一個線程進行處理. reactor模型:反應器模式(事件驅(qū)動模式):當一個主體發(fā)生改變時,所有的屬體都得到通知,類似于觀察者模式.
12. 反射的原理,反射創(chuàng)建類實例的三種方式是什么.
反射的原理:如果知道一個類的名稱/或者它的一個實例對象, 就能把這個類的所有方法和變量的信息(方法名,變量名,方法,修飾符,類型,方法參數(shù)等等所有信息)找出來. 反射創(chuàng)建類實例的三種方式: 1. Class.forName("com.A"); 2. new A().getClass(); 3. A.class;
13. 反射中Class.forName和ClassLoader區(qū)別
class.forName()除了將類的.class文件加載到jvm中之外,還會對類進行解釋,執(zhí)行類中的static塊. classLoader只干一件事情,就是將.class文件加載到jvm中,不會執(zhí)行static中的內(nèi)容,只有在newInstance才會去執(zhí)行static塊.
14. 描述動態(tài)代理的幾種實現(xiàn)方式,分別說出相應的優(yōu)缺點.
動態(tài)代理有兩種實現(xiàn)方式,分別是:jdk動態(tài)代理和cglib動態(tài)代理 jdk動態(tài)代理的前提是目標類必須實現(xiàn)一個接口,代理對象跟目標類實現(xiàn)一個接口,從而避過虛擬機的校驗. cglib動態(tài)代理是繼承并重寫目標類,所以目標類和方法不能被聲明成final.
15. 動態(tài)代理與cglib實現(xiàn)的區(qū)別.
動態(tài)代理有兩種實現(xiàn)方式,分別是:jdk動態(tài)代理和cglib動態(tài)代理 jdk動態(tài)代理的前提是目標類必須實現(xiàn)一個接口,代理對象跟目標類實現(xiàn)一個接口,從而避過虛擬機的校驗. cglib動態(tài)代理是繼承并重寫目標類,所以目標類和方法不能被聲明成final.
16. 為什么CGlib方式可以對接口實現(xiàn)代理.
cglib動態(tài)代理是繼承并重寫目標類,所以目標類和方法不能被聲明成final.而接口是可以被繼承的.
17. final的用途.
1). final修飾的對象不能被修改; 2). final修飾的類不能被繼承; 3). final修飾的方法不能被重寫;
18. 寫出三種單例模式實現(xiàn).
懶漢式(先定義,用的時候再創(chuàng)建),餓漢式(定義并創(chuàng)建好,用的時候直接拿),飽漢式(靜態(tài)內(nèi)部類,枚舉)
19. 如何在父類中為子類自動完成所有的hashcode和equals實現(xiàn)?這么做有何優(yōu)劣.
父類的equals不一定滿足子類的equals需求.比如所有的對象都繼承Object,默認使用的是Object的equals方法,在比較兩個對象的時候,是看他們是否指向同一個地址. 但是我們的需求是對象的某個屬性相同,就相等了,而默認的equals方法滿足不了當前的需求,所以我們要重寫equals方法. 如果重寫了equals 方法就必須重寫hashcode方法,否則就會降低map等集合的索引速度.
20. 請結合OO設計理念,談談訪問修飾符public,private,protected,default在應用設計中的作用.
public 所有的地方都能訪問 protected 外部包不能訪問 default 子類和外部包不能訪問 private 只能在類內(nèi)部訪問
21. 深拷貝和淺拷貝區(qū)別.
淺拷貝只拷貝指針,深拷貝就是拷貝他的值,重新生成的對象.
22. 數(shù)組和鏈表數(shù)據(jù)結構描述,各自的時間復雜度.
數(shù)組是將元素在內(nèi)存中連續(xù)存放,由于每個元素占用內(nèi)存相同,可以通過下標迅速訪問數(shù)組中任何元素. 鏈表恰好相反,鏈表中的元素在內(nèi)存中不是順序存儲的,而是通過存在元素中的指針聯(lián)系到一起. 訪問數(shù)組中第 n 個數(shù)據(jù)的時間花費是 O(1) 但是要在數(shù)組中查找一個指定的數(shù)據(jù)則是 O(N) .當向數(shù)組中插入或者刪除數(shù)據(jù)的時候,最好的情況是在數(shù)組的末尾進行操作,時間復雜度是 O(1) ,但是最壞情況是插入或者刪除第一個數(shù)據(jù),時間復雜度是 O(N) .在數(shù)組的任意位置插入或者刪除數(shù)據(jù)的時候,后面的數(shù)據(jù)全部需要移動,移動的數(shù)據(jù)還是和數(shù)據(jù)個數(shù)有關所以總體的時間復雜度仍然是 O(N) . 在鏈表中查找第 n 個數(shù)據(jù)以及查找指定的數(shù)據(jù)的時間復雜度是 O(N) ,但是插入和刪除數(shù)據(jù)的時間復雜度是 O(1)
23. error和exception的區(qū)別,CheckedException,RuntimeException的區(qū)別.
Error(錯誤)表示系統(tǒng)級的錯誤和程序不必處理的異常,是java運行環(huán)境中的內(nèi)部錯誤或者硬件問題.比如:內(nèi)存資源不足等.對于這種錯誤,程序基本無能為力,除了退出運行外別無選擇,它是由Java虛擬機拋出的. Exception(違例)表示需要捕捉或者需要程序進行處理的異常,它處理的是因為程序設計的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程序必須處理的. Exception又分為運行時異常,受檢查異常. RuntimeException(運行時異常),表示無法讓程序恢復的異常,導致的原因通常是因為執(zhí)行了錯誤的操作,建議終止程序,因此,編譯器不檢查這些異常. CheckedException(受檢查異常),是表示程序可以處理的異常,也即表示程序可以修復(由程序自己接受異常并且做出處理), 所以稱之為受檢查異常.
24. 請列出5個運行時異常.
NullPointerException IndexOutOfBoundsException ClassCastException ArrayStoreException BufferOverflowException
25. 在自己的代碼中,如果創(chuàng)建一個java.lang.String類,這個類是否可以被類加載器加載?為什么.
不可以,雙親委派模式會保證父類加載器先加載類,就是BootStrap(啟動類)加載器加載jdk里面的java.lang.String類,而自定義的java.lang.String類永遠不會被加載到
26. 說一說你對java.lang.Object對象中hashCode和equals方法的理解.在什么場景下需要重新實現(xiàn)這兩個方法.
父類的equals不一定滿足子類的equals需求.比如所有的對象都繼承Object,默認使用的是Object的equals方法,在比較兩個對象的時候,是看他們是否指向同一個地址. 但是我們的需求是對象的某個屬性相同,就相等了,而默認的equals方法滿足不了當前的需求,所以我們要重寫equals方法. 如果重寫了equals 方法就必須重寫hashcode方法,否則就會降低map等集合的索引速度.
27. 在jdk1.5中,引入了泛型,泛型的存在是用來解決什么問題.
泛型的好處是在編譯的時候檢查類型安全,并且所有的強制轉換都是自動和隱式的,提高代碼的重用率.
28. 這樣的a.hashcode()有什么用,與a.equals(b)有什么關系.
hashCode()方法是相應對象整型的 hash值.它常用于基于hash的集合類,如Hashtable,HashMap,LinkedHashMap等等.它與 equals() 方法關系特別緊密.根據(jù) Java 規(guī)范,兩個使用 equal() 方法來判斷相等的對象,必須具有相同的 hash code.
29. 有沒有可能2個不相等的對象有相同的hashcode.
有可能,最簡單的方法,百分百實現(xiàn)的方式就是重寫hascode();
30. Java中的HashSet內(nèi)部是如何工作的.
HashSet的內(nèi)部采用 HashMap來實現(xiàn).由于Map需要key和value,所以HashSet中所有key的都有一個默認value.類似于 HashMap,HashSet 不允許重復的 key,只允許有一個null key,意思就是 HashSet 中只允許存儲一個null對象.
31. 什么是序列化,怎么序列化,為什么序列化,反序列化會遇到什么問題,如何解決.
序列化:把對象轉換為字節(jié)序列的過程稱為對象的序列化. 反序列化:把字節(jié)序列恢復為對象的過程稱為對象的反序列化. 詳細:https://blog.csdn.net/riemann_/article/details/87835260
32. java8的新特性.
33. 講講SPI機制
破環(huán)雙親委派模型的經(jīng)典方法(上下文context),jdbc驅(qū)動,dubbo,springboot都有,把依賴的第三方的jar包通過外部路徑加載

JVM知識
1. 什么情況下會發(fā)生棧內(nèi)存溢出.
https://blog.csdn.net/qq_31615049/article/details/82980799
2. JVM的內(nèi)存結構,Eden和Survivor比例.
Java堆 方法區(qū) 程序計數(shù)器 JVM棧 本地方法棧 java7有永久代,8以后是元空間,要說明為什么這么改
3. JVM內(nèi)存為什么要分成新生代,老年代,持久代.新生代中為什么要分為Eden和Survivor.
4. JVM中一次完整的GC流程是怎樣的,對象如何晉升到老年代,說說你知道的幾種主要的JVM參數(shù).
5. 你知道哪幾種垃圾收集器,各自的優(yōu)缺點,重點講下cms和G1,包括原理,流程,優(yōu)缺點.
6. 垃圾回收算法的實現(xiàn)原理.
7. 當出現(xiàn)了內(nèi)存溢出,你怎么排錯.
8. JVM內(nèi)存模型的相關知識了解多少,比如重排序,內(nèi)存屏障,happen-before,主內(nèi)存,工作內(nèi)存等.
9. 簡單說說你了解的類加載器,可以打破雙親委派么,怎么打破.
10. 講講JAVA的反射機制.
11. 你們線上應用的JVM參數(shù)有哪些.
12. g1和cms區(qū)別,吞吐量優(yōu)先和響應優(yōu)先的垃圾收集器選擇(最新有個ZGC,可以了解下).
13. 怎么打出線程棧信息.
14. 請解釋如下jvm參數(shù)的含義:
-server -Xms512m -Xmx512m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly. -Xms設置堆的最小空間大小. -Xmx設置堆的最大空間大小. -XX:NewSize設置新生代最小空間大小. -XX:MaxNewSize設置新生代最大空間大小. -XX:PermSize設置永久代最小空間大小. -XX:MaxPermSize設置永久代最大空間大小. -Xss設置每個線程的堆棧大小.
15. 用過那些jdk工具排查問題
jps -lvm查看進程 jstack pid >> pid.txt 打印堆棧,這個一般查看線程狀態(tài) jstat -gcutil 查看gc信息 jmap 排查oom(線上慎用) 阿里的arthas trace watch,可以自己了解下 排查oom可以使用eclipse的mat工具分析內(nèi)存

開源框架知識
1. spring的循環(huán)依賴
三級緩存,具體自己看一下
2. spring beanFactory和factoryBean區(qū)別
3. spring ioc和aop的原理.
4. 講講spring事務的傳播屬性,transaction注解原理.
5. spring的beanpostprocesser和refresh方法
6. spring和springboot區(qū)別,了解springboot的pom嗎
7. springboot是怎么集成tomcat的?
8. zookeeper的原理
zab協(xié)議,崩潰恢復和日志同步
9. 用過的rpc框架,dubbo的原理
10. 了解k8s_docker嗎,宿主機怎么查看docker進程,k8s自動擴容的原理

操作系統(tǒng)
1. Linux系統(tǒng)下你關注過哪些內(nèi)核參數(shù),說說你知道的.
2. Linux下IO模型有幾種,各自的區(qū)別是什么.
select poll epoll
3. 終止進程ctrl+c發(fā)生了什么
4. 平時用到哪些Linux命令.
netstat查看網(wǎng)絡 iostat 查看io lsof 查看端口 free 查看內(nèi)存,了解幾個區(qū)別 df du 參看磁盤 grep 查找文件內(nèi)容 find查找文件 ps查看進程 less more cat tail查看文件 chmod修改權限
5. 用一行命令查看文件的最后五行.
tail -5 file.txt
6. 用一行命令輸出正在運行的java進程.
jps -lvm
7. 介紹下你理解的操作系統(tǒng)中線程切換過程.
8. 進程和線程的區(qū)別.
9. top命令之后有哪些內(nèi)容,有什么作用.
查看當前cpu的負載,內(nèi)存使用率
10. 線上CPU爆高,請問你如何找到問題所在.
死循環(huán)或者頻繁fullgc top -pH按當前線程cpu負載從高到低顯示
11. 一個日志文件里面都是ip信息,打印出現(xiàn)頻率最高的5個ip倒序輸出

多線程
1. 多線程的幾種實現(xiàn)方式,什么是線程安全.
2. volatile的原理,作用,能代替鎖么.
保證可見性和有序性,不保證原子性
3. 畫一個線程的生命周期狀態(tài)圖.
4. sleep和wait的區(qū)別.
5. sleep和sleep(0)的區(qū)別.
6. Lock與Synchronized的區(qū)別.
7. synchronized的原理是什么,一般用在什么地方(比如加在靜態(tài)方法和非靜態(tài)方法的區(qū)別,
靜態(tài)方法和非靜態(tài)方法同時執(zhí)行的時候會有影響嗎),解釋以下名詞:重排序,自旋鎖,偏向鎖,輕量級鎖,可重入鎖,公平鎖,非公平鎖,樂觀鎖,悲觀鎖.
8. 用過哪些原子類,他們的原理是什么.
9. 實現(xiàn)一個生產(chǎn)者消費者模式,不用阻塞隊列
10. JUC下研究過哪些并發(fā)工具,講講原理.
11. 用過線程池嗎,如果用過,請說明原理,并說說newCache和newFixed有什么區(qū)別,構造函數(shù)的各個參數(shù)的含義是什么,比如coreSize,maxsize等.
12. 線程池的關閉方式有幾種,各自的區(qū)別是什么.
13. 假如有一個第三方接口,有很多個線程去調(diào)用獲取數(shù)據(jù),現(xiàn)在規(guī)定每秒鐘最多有10個線程同時調(diào)用它,如何做到.
14. spring的controller是單例還是多例,怎么保證并發(fā)的安全.
15. 用三個線程按順序循環(huán)打印abc三個字母,比如abcabcabc.
16. ThreadLocal用過么,用途是什么,原理是什么,用的時候要注意什么.
ThreadLocalMap 防止內(nèi)存泄漏
17. 如果讓你實現(xiàn)一個并發(fā)安全的鏈表,你會怎么做.
18. 有哪些無鎖數(shù)據(jù)結構,他們實現(xiàn)的原理是什么.
19. 講講java同步機制的wait和notify.
20. CAS機制是什么,如何解決ABA問題.
21. 多線程如果線程掛住了怎么辦.
22. countdowlatch和cyclicbarrier的內(nèi)部原理和用法,以及相互之間的差別(比如countdownlatch的await方法和是怎么實現(xiàn)的).
23. 對AbstractQueuedSynchronizer了解多少,講講加鎖和解鎖的流程,獨占鎖和公平所加鎖有什么不同.
24. 使用synchronized修飾靜態(tài)方法和非靜態(tài)方法有什么區(qū)別.
25. 簡述ConcurrentLinkedQueue和LinkedBlockingQueue的用處和不同之處.
26. 導致線程死鎖的原因?怎么解除線程死鎖.
死鎖的四個必要條件: 請求和保持,不可剝奪,互斥,循環(huán)等待 保證加鎖順序一致避免循環(huán)等待
27. 非常多個線程(可能是不同機器),相互之間需要等待協(xié)調(diào),才能完成某種工作,問怎么設計這種協(xié)調(diào)方案.
28. 用過讀寫鎖嗎,原理是什么,一般在什么場景下用.
讀鎖共享,寫鎖互斥.讀阻塞寫,寫阻塞讀寫,讀之前互相不阻塞 持有寫鎖的線程可以獲取讀鎖,完成鎖降級
29. 開啟多個線程,如果保證順序執(zhí)行,有哪幾種實現(xiàn)方式,或者如何保證多個線程都執(zhí)行完再拿到結果.
30. 延遲隊列的實現(xiàn)方式,delayQueue和時間輪算法的異同.

TCP與HTTP
1. http1.0, http1.1, http2.0有什么區(qū)別.
http1.0一個請求對應一個線程
2. TCP三次握手和四次揮手的流程,為什么斷開連接要4次,如果握手只有兩次,會出現(xiàn)什么.
3. TIME_WAIT和CLOSE_WAIT的區(qū)別.
4. 說說你知道的幾種HTTP響應碼,比如200, 302, 404.
5. 當你用瀏覽器打開一個鏈接(如:http://www.javastack.cn)的時候,計算機做了哪些工作步驟.
6. TCP如何保證可靠性,說說TCP頭的結構.
7. 如何避免瀏覽器緩存.
8. 如何理解HTTP協(xié)議的無狀態(tài)性.
9. 簡述Http請求get和post的區(qū)別以及數(shù)據(jù)包格式.
10. HTTP有哪些method
11. 簡述HTTP請求的報文格式.
12. HTTP的長連接是什么意思.
13. HTTPS的加密方式是什么,講講整個加密解密流程.
14. Http和https的三次握手有什么區(qū)別.
15. 什么是分塊傳送.
16. Session和cookie的區(qū)別.

架構設計與分布式
1. 用java自己實現(xiàn)一個LRU.
// 繼承LinkedHashMap, 最好自己寫個不用繼承LinkedHashMap的方法 public class LRUCache<K, V> extends LinkedHashMap<K, V> { private final int MAX_CACHE_SIZE; public LRUCache(int cacheSize) { // 使用構造方法 public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) // initialCapacity,loadFactor都不重要 // accessOrder要設置為true,按訪問排序 super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true); MAX_CACHE_SIZE = cacheSize; } @Override protected boolean removeEldestEntry(Map.Entry eldest) { // 超過閾值時返回true,進行LRU淘汰 return size() > MAX_CACHE_SIZE; }
}
2. 分布式集群下如何做到唯一序列號.
雪花算法(snowflake)
3. 設計一個秒殺系統(tǒng),30分鐘沒付款就自動關閉交易.
4. 如何使用redis和zookeeper實現(xiàn)分布式鎖?有什么區(qū)別優(yōu)缺點,會有什么問題,分別適用什么場景.(延伸:如果知道redlock,講講他的算法實現(xiàn),爭議在哪里)
5. 如果有人惡意創(chuàng)建非法連接,怎么解決.
6. 分布式事務的原理,優(yōu)缺點,如何使用分布式事務,2pc 3pc 的區(qū)別,解決了哪些問題,還有哪些問題沒解決,如何解決,你自己項目里涉及到分布式事務是怎么處理的.
7. 什么是一致性hash.
8. 什么是restful,講講你理解的restful.
9. 如何設計一個良好的API.
10. 如何設計建立和保持100w的長連接.
11. 解釋什么是MESI協(xié)議(緩存一致性).
12. 說說你知道的幾種HASH算法,簡單的也可以.
13. 什么是paxos算法, 什么是zab協(xié)議和raft協(xié)議.
14. 一個在線文檔系統(tǒng),文檔可以被編輯,如何防止多人同時對同一份文檔進行編輯更新.
15. 線上系統(tǒng)突然變得異常緩慢,你如何查找問題.
16. 說說你平時用到的設計模式.
17. Dubbo的原理,有看過源碼么,數(shù)據(jù)怎么流轉的,怎么實現(xiàn)集群,負載均衡,服務注冊和發(fā)現(xiàn),重試轉發(fā),快速失敗的策略是怎樣的 .
18. 一次RPC請求的流程是什么.
19. 自己實現(xiàn)過rpc么,原理可以簡單講講.Rpc要解決什么問題.
20. 異步模式的用途和意義.
21. 編程中自己都怎么考慮一些設計原則的,比如開閉原則,以及在工作中的應用.
22. 設計一個社交網(wǎng)站中的“私信”功能,要求高并發(fā),可擴展等等. 畫一下架構圖.
23. MVC模式,即常見的MVC框架.
24. 聊下曾經(jīng)參與設計的服務器架構并畫圖,談談遇到的問題,怎么解決的.
25. 應用服務器怎么監(jiān)控性能,各種方式的區(qū)別.
26. 如何設計一套高并發(fā)支付方案,架構如何設計.
27. 如何實現(xiàn)負載均衡,有哪些算法可以實現(xiàn).
28. Zookeeper的用途,選舉的原理是什么.
29. Zookeeper watch機制原理.
30. mybatis的底層實現(xiàn)原理.
31. 請思考一個方案,實現(xiàn)分布式環(huán)境下的countDownLatch.
32. 后臺系統(tǒng)怎么防止請求重復提交.
接口實現(xiàn)冪等
33. 描述一個服務從發(fā)布到被消費的詳細過程.
34. 講講你理解的服務治理.
35. 如何做到接口的冪等性.
36. 如何做限流策略,令牌桶和漏斗算法的使用場景.
37. 什么叫數(shù)據(jù)一致性,你怎么理解數(shù)據(jù)一致性.
38. 分布式服務調(diào)用方,不依賴服務提供方的話,怎么處理服務方掛掉后,大量無效資源請求的浪費,如果只是服務提供方吞吐不高的時候該怎么做,如果服務掛了,那么一會重啟,該怎么做到最小的資源浪費,流量半開的實現(xiàn)機制是什么.
39. dubbo的泛化調(diào)用怎么實現(xiàn)的,如果是你,你會怎么做.
40. 遠程調(diào)用會有超時現(xiàn)象,如果做到優(yōu)雅的控制,JDK自帶的超時機制有哪些,怎么實現(xiàn)的.

數(shù)據(jù)庫知識
1. mysql索引失效的原則
2. mysql的鎖,行鎖,表鎖,樂觀鎖,悲觀鎖,共享鎖,排他鎖
3. mysql myisam和innodb存儲引擎區(qū)別
4. mysql的事務隔離級別,rr和rc
5. mysql的acid,以及分別實現(xiàn)acid的底層原理
6. mysql的log, binlog redolog undolog
7. mysql怎么解決幻讀的
8. mysql的mvvc原理,在rr和rc的實現(xiàn)區(qū)別
9. 聚集索引和非聚集索引的區(qū)別
10. b樹和b+樹的區(qū)別,為什么用b+樹不用平衡二叉樹,簡單計算b+樹為什么只有三四層
11. 最左前綴原則, 索引怎么設計
12. 多主怎么同步數(shù)據(jù), 主從模式數(shù)據(jù)同步

消息隊列
1. kafka的架構介紹
2. kafka為什么吞吐量高,幾個優(yōu)化
3. kafka怎么實現(xiàn)exactly one
4. kafka怎么保證消息有序
5. kafka的冪等和offset什么時候提交
6. zk在kafka的作用, kafka有那些log

緩存
1. 常見的緩存策略有哪些,如何做到緩存與DB的數(shù)據(jù)一致性
2. 如何防止緩存擊穿和雪崩
3. Redis的五種數(shù)據(jù)結構,跳表實現(xiàn),hash表的擴容
4. redis集群方案, 哨兵模式的優(yōu)缺點
5. redis的分布式鎖, 介紹redisson
6. redis的大key 熱key問題 pipeline原理
7. redis的事件模型,key的刪除策略

搜索
1. elasticsearch了解多少,說說你們公司es的集群架構,索引數(shù)據(jù)大小,分片有多少,以及一些調(diào)優(yōu)手段.elasticsearch的倒排索引是什么.
2. elasticsearch 索引數(shù)據(jù)多了怎么辦,如何調(diào)優(yōu),部署.
3. elasticsearch是如何實現(xiàn)master選舉的.
4. 詳細描述一下Elasticsearch索引文檔的過程.
5. 詳細描述一下Elasticsearch搜索的過程.
6. Elasticsearch在部署時,對Linux的設置有哪些優(yōu)化方法?
7. lucence內(nèi)部結構是什么.

算法題 (Leetcode top200)
1. 環(huán)形鏈表的第一個環(huán)節(jié)點
2. 只有0和1的數(shù)組排序
雙指針交換 O(n)時間,O(1)空間
3. 兩個鏈表的第一個相交節(jié)點
4. 合并兩個有序鏈表,合并多個有序鏈表
5. 生成全排列
6. 山脈數(shù)組最大值(先增后減有重復)
7. 合并有序數(shù)組a和b,a有足夠空間,不新申請空間合并
8. 有序數(shù)組不同平方的數(shù)字
9. 打印樹指定和的路徑
10. 字符串刪除k個數(shù)的最大數(shù)
11. 樹的層次遍歷
12. 1-n號個人 1-n號個燈 開始燈關的如果燈的編號能被人的編碼整除按一下開關,對于1-n的燈都有1-n的人經(jīng)過最后那些燈亮
13. ip地址轉數(shù)字
14. 編輯距離,兩個矩形交叉面積,鏈表倒序k組翻轉,種子填充,三個有序鏈表公共數(shù)

場景題
1. 設計一個限流器
漏桶和令牌桶,主要是令牌桶的滑動窗口
2. 服務器有很多ip只能加四個白名單,怎么解決?
用代理解決
3. 如果高并發(fā)服務緩存掛了,db被打掛,怎么重啟服務,因為緩存掛了db重啟還會掛掉
服務降級,限流走消息隊列,下來想了下可以預熱新緩存集群(緩存走持久化策略)然后再重啟db(面試官不滿意,我自己搜總結的,你再瞅瞅)
4. 分庫分表的跨表查詢方案優(yōu)化
一個是緩存查詢數(shù)據(jù),另一個方案就是維護冗余的全量數(shù)據(jù)表
5. 多服務器共用一個第三方業(yè)務的token,第三方定期更新
我的方案是token放redis緩存, 分布式定時任務更新,引入zk,只有l(wèi)eader的機器才會執(zhí)行獲取最新token(可以提供rpc接口更新觸發(fā)回調(diào),監(jiān)控半個小時沒有更新報警,我自己想的)
6. 在線業(yè)務線程池的參數(shù)設置
基于響應時間和吞吐量,最后做成動態(tài)配置參數(shù) https://blog.csdn.net/ailiandeziwei/article/details/105477933
7. 四核機器怎么保證cpu占用率50%
啟動兩個線程的死循環(huán)任務
8. 設計文件系統(tǒng),支持增加刪除,修改文件(夾),按時間到序列查詢文件夾下面所有文件(夾),給表設計
file表 id long primary key type tinyint name varchar deleted tinyint createTime long updateTime long file relation表 id long primary key parentId long childId long createTime long key (parentId, createdTime)
9. 國慶節(jié)滴滴掛了,什么問題,怎么解決
這個我不了解,沒回答好

項目梳理
講項目的技術難點,除了業(yè)務我總結出了我項目的兩個難點
1. 樂觀鎖解決冪等并發(fā)更新(updateTime,行業(yè)方案是version)
2. 維護兩套redis緩存做高可用
3. 談項目架構,多級緩存設計,分庫分表,一些功能的表設計,對具體業(yè)務的細節(jié)理解
總結
Java架構師成長之路可以說每一步都充滿了荊棘,大佬的學習資料與筆記能夠幫助你指點方向,最重要的還是要靠大家堅持不懈的努力,最后也祝大家都實現(xiàn)Java架構師的夢想!
2020年吐血整理最全的Java程序員資料地址


在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述



在這里插入圖片描述




以上資料都已打包完畢,希望對大家有幫助!下圖拿!!!

關鍵詞:杭州

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉