我最近從大廠離職之后在合肥呆了個把月阔蛉,之前已經(jīng)準(zhǔn)備了半個多月,從7月底開始投簡歷面試癞埠,目前是java高級職位状原,到現(xiàn)在為止已經(jīng)面了24+公司了,手上也有一些意向offer∶缱伲現(xiàn)在把跟面試官對壘的面試問題總體記錄一下颠区。請注意這里只有問題,沒有答案通铲,答案在我的思維導(dǎo)圖里毕莱。本系列會分為三個系列博客去講我面過的一些公司出的一些題,以某個知識點或者框架出發(fā)擴(kuò)展深入。來朋截,看你能撐多少炮!
一蛹稍、 redis連環(huán)炮
redis數(shù)據(jù)結(jié)構(gòu)
redis有哪幾種數(shù)據(jù)結(jié)構(gòu)?zset用過嗎部服,底層數(shù)據(jù)結(jié)構(gòu)是什么唆姐?為什么使用跳表?跟B+樹怎么比廓八?查找的時間復(fù)雜度是多少厦酬?GEO是干嘛的?舉個場景瘫想?HyperLogLog是干嘛的仗阅?Redis可以做消息隊列嗎?有什么缺點国夜?
redis持久化
redis持久化了解嗎减噪?有哪些方式?RDB和AOF的區(qū)別&各自的優(yōu)缺點车吹?說一下redis持久化的過程筹裕?redis持久化方式你們是怎么選型的?了解過redis混合持久化嗎窄驹?是一個文件還是多個文件朝卒?redis進(jìn)行持久化的時候會阻塞主線程嗎?如果數(shù)據(jù)量比較多持久化時間較長會出現(xiàn)什么情況乐埠?
redis 實現(xiàn)分布式鎖
redis分布式鎖了解嗎抗斤?假如我的業(yè)務(wù)代碼執(zhí)行時間不是很穩(wěn)定?使用redis做分布式鎖會有什么問題呢丈咐?你怎么解決鎖超時的問題瑞眼?有什么方案嗎?跟zk的分布式鎖有什么區(qū)別棵逊?
redis集群部署
redis集群部署模式有哪些伤疙,介紹一下?介紹一下cluster模式和sentinel模式的區(qū)別辆影?介紹一下sentinel模式如何感知sever節(jié)點上下線的徒像?redis-server的ping/pong協(xié)議了解嗎?怎么用的蛙讥?
講一下redis主從復(fù)制的過程锯蛀?主從模式下假如主節(jié)點掛了之后?數(shù)據(jù)如何同步键菱?redis cluster模式下通過key插入/查找value的過程了解嗎谬墙?
redis高可用
有哪些可能導(dǎo)致redis存在性能問題的因素今布?redis cluster模式下如何擴(kuò)容和縮容的经备?redis在使用過程中明明內(nèi)存充足但是插入數(shù)據(jù)失敗怎么排查拭抬?如何解決redis的內(nèi)存碎片問題?產(chǎn)生的原因是什么侵蒙?redis的內(nèi)存達(dá)到機(jī)器內(nèi)存極限值之后有哪些策略可以避免造虎?redis數(shù)據(jù)刪除的策略有哪些?緩存擊穿/緩存雪崩/緩存穿透了解嗎纷闺?介紹一下產(chǎn)生這種問題的原因算凿?你有什么解決思路嗎?redis-mysql緩存一致性了解嗎?緩存一致性方案有哪些犁功?
二氓轰、MySQL連環(huán)炮
MySQL 鎖
MySQL鎖了解嗎?悲觀鎖怎么實現(xiàn)的浸卦?樂觀鎖了解嗎署鸡?各自適用的場景能介紹一下嗎?間隙鎖是什么意思限嫌?解決了什么問題靴庆?如何確定間隙鎖鎖記錄的范圍?MVCC了解嗎怒医?解決了什么問題炉抒?
MySQL 索引
Mysql索引了解嗎,有哪些索引類型稚叹?innodb索引結(jié)構(gòu)是怎么樣的焰薄?為什么使用B+樹呢?為什么不使用B樹呢扒袖?有什么優(yōu)勢蛤奥?B樹這種結(jié)構(gòu)一般還有什么場景下會用到呢?假如有a,b聯(lián)合索引僚稿,where a=? 會走索引嗎凡桥? where b=?會走索引嗎, where a>? and b<?會走索引嗎蚀同,為什么?這種聯(lián)合索引在B+樹的數(shù)據(jù)結(jié)構(gòu)里怎么存的缅刽?
MySQL 性能優(yōu)化
MySQL性能優(yōu)化做過嗎?你做過SQL的性能優(yōu)化嗎蠢络?舉個例子衰猛?Mysql引起的CPU消耗過大怎么排查? 假如一條sql執(zhí)行的很慢你怎么排查刹孔?假如我要查的字段長度相對固定啡省,但是沒走索引你會怎么建索引呢?你執(zhí)行explain的話會看哪些指標(biāo)?這些指標(biāo)分別代表什么含義呢卦睹?如果查詢的字段確實有加索引但是實際上走了全表掃描你該怎么排查呢畦戒?假如我數(shù)據(jù)庫某張表數(shù)據(jù)特別大,但是要分頁查结序,翻頁越來越慢怎么解決障斋,比如select a from table limit 1000000,100這個sql怎么提高查詢效率。
MySQL 存儲引擎
MySQL存儲引擎有哪些徐鹤?innodb和MyIsam有什么區(qū)別垃环?mysql存儲引擎是基于表的還是基于數(shù)據(jù)庫的?為什么返敬?講一下一條sql從client端到mysql server端到返回結(jié)果中經(jīng)歷了什么遂庄?
MySQL 持久化理論
Mysql事務(wù)用過嗎?了解ACID嗎劲赠?解釋一下什么意思涛目?mysql事務(wù)的隔離性原理是什么?其他幾個的原理呢经磅?MySQL事務(wù)的隔離級別了解泌绣?分別解決了什么問題?可重復(fù)讀是什么意思预厌?幻讀是怎么產(chǎn)生的阿迈?MySQL臟讀是怎么產(chǎn)生的?讀已提交相對于讀未提交解決了什么問題轧叽?Mysql支持了這幾個隔離級別的原理知道嗎苗沧?
MySQL分庫分表
分庫分表用過嗎?有哪些框架炭晒?TDDL了解嗎待逞?TDDL的分層架構(gòu)組件講一下?假如我要查100條网严,如何聚合結(jié)果识樱?在server端做還是在client端做呢?數(shù)據(jù)量這么大client端做會不會有問題震束?假如我有一張表用戶-訂單表怜庸,你怎么設(shè)計分表規(guī)則?以用戶id做分片分表的話垢村,但是我想通過訂單id查最近10條訂單怎么查割疾?有什么方案?分庫分表的跨庫事務(wù)你怎么解決的嘉栓?有哪些方案或者思路宏榕?
MySQL 架構(gòu)&高可用
假如讓你去設(shè)計一個項目你怎么去考慮這個項目在mysql層的高可用拓诸?有哪些架構(gòu)模式?一主多從的方式如何做數(shù)據(jù)同步的麻昼?主從延遲怎么解決奠支?假如我的寫并發(fā)量比較大,數(shù)據(jù)庫突然down機(jī)了涌献,怎么保證數(shù)據(jù)一致性胚宦。mysql->redis的數(shù)據(jù)同步怎么做的首有?解析binlog嗎燕垃?
三、消息隊列連環(huán)炮
消息隊列技術(shù)選型
說說你用過哪些消息隊列井联?各自有什么優(yōu)缺點卜壕?各自的適用場景?現(xiàn)在企業(yè)一般都是建立一個集群支持不同的業(yè)務(wù)線烙常,你有沒有想到這么做的優(yōu)缺點?
消息隊列產(chǎn)品-kafka
kafka接收消息和轉(zhuǎn)發(fā)消息的流程畫一下轴捎?發(fā)送一條消息到kafka集群中,kafka是怎么保證消息不丟失的蚕脏?在消息隊列場景中有消息重復(fù)的問題侦副,kafka是怎么解決的?kafka中消息發(fā)送到消費者端是不是每個機(jī)器都會消費驼鞭?假如消費者集群有些宕機(jī)了秦驯,如何保障重新消費消息?假如消息太多挣棕,我的消費者集群已經(jīng)加了200臺译隘,仍然消費不了怎么解決?
消息隊列產(chǎn)品-rocketmq
rocketmq用過嗎洛心?有哪些特性固耘?源碼有閱讀過嗎?事務(wù)消息的原理是什么词身?來畫圖說一下事務(wù)消息生產(chǎn)消費的過程厅目?rocketmq如何保障消息的順序的?rocketmq如何保證消息不丟失的?底層做了哪些優(yōu)化?
消息隊列高可用
如果是你去做一個消息隊列你會考慮哪些方面保障消息隊列的高可用法严?
四损敷、java基礎(chǔ)&高級連環(huán)炮
java鎖
java 鎖了解嗎?java中有哪些鎖呢渐夸?說一下sychronized的原理嗤锉?說一下sychronized和Lock的區(qū)別?說一下java中多線程情況下競爭鎖比較激烈導(dǎo)致鎖升級的過程墓塌?產(chǎn)生死鎖的條件是什么瘟忱?怎么避免奥额?volatile怎么用?有什么特性访诱?重排序了解嗎垫挨?volatile怎么解決的?還有什么方式可以解決重排序的問題触菜?基于volatile的單例模式解決了什么問題九榔?sychronized和volatile的區(qū)別講一下?講一下懶漢式的單例模式怎么寫涡相?
java多線程
java多線程用過嗎哲泊?怎么用的?有什么缺點催蝗?線程池的原理了解嗎切威?有哪些線程池?構(gòu)造線程池的參數(shù)有哪些丙号?線程池的拒絕策略有哪些先朦?什么時候會觸發(fā)拒絕策略?阻塞隊列有哪幾種犬缨?喳魏,線程池的線程工廠參數(shù)你是怎么設(shè)置的?為什么呢怀薛?假如我假如有臺機(jī)器每秒產(chǎn)生50個任務(wù)刺彩,每個任務(wù)執(zhí)行1秒,CPU是2核的你怎么設(shè)置這些參數(shù)呢乾戏?線程池執(zhí)行任務(wù)的時候出現(xiàn)異常沒拋出異常你怎么解決迂苛?有哪些方案?線程池執(zhí)行任務(wù)結(jié)束調(diào)用shutdown和調(diào)用shutdownNow方法的區(qū)別鼓择?假如我想獲取線程執(zhí)行任務(wù)之后返回的結(jié)果怎么做三幻?Future.get()會阻塞主線程嗎?那如果任務(wù)執(zhí)行時間太長調(diào)用Future.get()會怎么樣呐能?
java類加載
java類加載了解嗎念搬?有哪些類加載器?rt.jar是誰加載的摆出?什么是雙親委派模型朗徊?假如我要注冊JDBC驅(qū)動去操作數(shù)據(jù)庫,這個注冊的過程你了解嗎偎漫?打破雙親委派模型的例子有哪些爷恳?java中有些使用了代理模式去創(chuàng)建類,大量創(chuàng)建的類存在哪里象踊?如果類不用了怎么卸載温亲?有哪些方式棚壁?
java熱加載做過嗎?原理是什么栈虚?Tomcat的熱部署用過嗎袖外?原理是什么?
java并發(fā)容器
java concurrent包里的并發(fā)容器了解嗎魂务?concurrentHashMap在1.7和1.8的實現(xiàn)區(qū)別曼验?為什么使用紅黑樹而不用平衡樹怕犁?說一下插入kv的過程墓拜?blockingQueue用過嗎虚汛?怎么用的前翎?CopyOnWriteArrayList知道嗎?怎么用的堕油?concurrentHashMap什么時候會擴(kuò)容螟蒸?HashMap有什么問題?
java數(shù)據(jù)類型
假如3*0.01=0.03嗎坛芽?為什么?怎么解決翼抠?有哪些方案咙轩?BigDecimal大數(shù)計算的原理是什么?Integer a= 1000 Integer b=1000 ,a=b? a=100,b=100,a=b?為什么阴颖?
五活喊、jvm連環(huán)炮
jvm垃圾回收算法
java引用有哪些?怎么判斷引用的對象是否需要被回收量愧?JVM中有哪些可以作為GCROOTS钾菊?JVM垃圾回收算法有哪些?各自有什么優(yōu)勢和使用場景偎肃?你們部署服務(wù)的時候JVM配置的什么回收器煞烫?參數(shù)配的是啥?年輕代用什么垃圾回收器累颂?老年代呢滞详?說一下CMS垃圾回收的過程?在哪些階段會產(chǎn)生STW紊馏?CMS會產(chǎn)生內(nèi)存碎片嗎料饥?為什么?怎么解決?CMS壓縮內(nèi)存的時候會STW嗎朱监?為什么岸啡?G1回收器了解嗎?有什么特性赫编?
jvm調(diào)優(yōu)
JVM調(diào)優(yōu)做過嗎巡蘸?怎么調(diào)的篇裁?使用的什么命令?分析過GC日志嗎赡若?線程棧dump文件中有哪些信息达布?線程狀態(tài)有哪些?CPU load飆高怎么排查逾冬?分析過dump文件嗎黍聂?怎么判斷有內(nèi)存泄漏的?怎么解決的身腻?產(chǎn)生FGC的原因有哪些产还?如果頻繁FGC你有什么思路?如果FGC基本正常嘀趟,YGC時間逐漸增大導(dǎo)致服務(wù)抖動怎么排查脐区?
JVM 編譯模式了解嗎?C1,C2各自怎么進(jìn)行字節(jié)碼編譯的她按?有什么優(yōu)缺點牛隅?如何解決代碼冷啟動問題?
jvm內(nèi)存模型
java內(nèi)存模型了解嗎酌泰?常量池在哪媒佣?元數(shù)據(jù)區(qū)存的是啥?哪些是線程共享的陵刹?棧溢出的場景有哪些默伍?新建一個對象的過程說一下?有哪些場景下會用非堆內(nèi)存衰琐?一般用非堆存什么東西也糊?非堆中的對象會GC嗎?為什么羡宙?