天天看點

95後妹子面試的那些"套路"(附帶個人書籍推薦)多線程

哪有所謂的套路,你會的越多,你就是套路

最近有很多朋友問我一些面試題,或者說準備面試了,怎麼複習啊. 孔孔老師就上線了…正好趁着早上不想學習, 就再把這一塊總結總結. 個人拙見(畢竟我還是很low的…) 夾雜部分書推薦

集合

我一般喜歡從集合開始問,因為可以延伸到很多地方

  1. 可能會問對整個集合架構是否熟悉, java集合(一) 總體架構 可以由大而小,層層遞進,真正可以講多細,看當時面試情況吧.但多數可能從hashmap開始問,底層資料結構. 可能你會回答:分版本,1.8之前是數組+連結清單, 之後是數組連結清單紅黑樹.
  2. 你引出紅黑樹,那麼我就可能會問你,知道什麼是紅黑樹嘛,然後再問紅黑樹的反轉啊等等.
  3. 下面可能會問hashmap是否線程安全. 這時候你就可以講put和resize()的時候,會有問題啊. 然後講講如何有問題. 或者會問你了解hashmap的擴容嘛, 你就講講加載因子(0.75 機率學泊松方程吧),門檻值然後怎麼擴容的等等. 再說說為啥擴容2的倍數.等等。然後你在講擴容的時候, 就又可以延伸到線程不安全上面了. 後面可能就會問: 怎麼可以讓他安全呢. 你可以跳currenthashmap或者 hashTable上面,這樣世界又是你的了. 你可以給他們講與hashmap的差別,他們内部原理.等等. 或者考慮hashmap的代碼, 加個鎖啥的, 面試官就又可以問你鎖相關的知識了. 當講到鎖的時候, 可能會往下問多線程的問題了 集合源碼易懂,建議自己讀一讀.

多線程

  1. 可能會接上面問, synchronized鎖粒度. 順便問問偏向鎖輕量鎖等.
  2. 常用線程池, 核心參數有哪些,這裡可能會問一些内部具體多線程怎麼跑起來的等, 比如什麼情況建立新線程, 阻塞隊列對線程池有啥影響等,(這裡非常建議看并發程式設計的藝術, 講線程池的這一章,這了講的透透的, 然後平時正好項目有用,那麼相信你完全沒問題)
  3. 然後你正好引到項目上, 可能我就會問你具體怎麼用的,可能出個簡單線程題,還可能問遇沒遇到死鎖問題呀. 死鎖怎麼檢測,原理是啥等等

spring

  1. spring ioc aop,看過源碼嗎, 知道aop底層嗎, jdk和cglib差別啊等等.
  2. bean加載過程,AOP,IOC 簡介
  3. springboot的自動配置啊等等.spingboot-springmvc自動配置原理(ps: 隻看這幾篇文章是不行滴…我好多都沒寫, 有點小後悔, 可以看看spring的書. spring技術内幕, 然後springmvc技術内幕, 貌似這個名字,封面有綠色…我就記得這些了)
  4. spring循環依賴.這裡也可以講一些東西,比如如果循環依賴雙方都是原型對象,那麼肯定報錯.如果是單例,配置有參構造器注入, 也報錯.等等. 好幾種情況.
  5. springcloud 這個問幾大元件的多

mybatis

最基礎可能會先問$和#的差別. 預編譯,sql注入等. 然後可能會說sql注入的一些東西. 往安全性上偏, 也可以問很多,比如腳本注入等等.

簡單使用,可以有參數處理, 動态sql.關系映射等. 緩存機制也是常問的内容.

附我一個位址, 也是不太全, https://blog.csdn.net/kwy15732621629/column/info/20925

源碼, 如果你可以自己擴充,那當然更好了.

持久層, 如果你寫了hibernate mybatis 或者jpa. 那麼可能會問你三者差別啊. ssh架構的話, 可能會問Struts的内容喽~

jvm

  1. 最簡單的, 知道記憶體空間不. 講講~ 然後你巴巴啦啦講了什麼堆棧方法區,本地方法棧,pc寄存器等等. 然後可能會給你出個例子, 說一下, 每個都在哪裡放着…是以, 什麼位置放什麼東西.
  2. 你了解垃圾回收算法嘛.然後再根據垃圾回收算法, 給簡單提點問題.
  3. 簡單問題, 軟引用/弱引用啊.哪些會被回收啊.
  4. 垃圾回收器呢?
  5. 類加載機制呢?
  6. 雙親委派了解嘛?

jvm 總結

下面就會問一些jvm調優的内容了

  1. 你用的什麼調優工具,比如jvc, jconsole等等.
  2. 你參考的一個健康GC狀況是什麼
  3. 記憶體溢出和記憶體洩露差別是啥. 遇到過oom問題嘛,怎麼排查的啊?

redis

  1. 可能會先上來就問你, 為啥要用緩存啊,你們項目怎麼用的.資料量多少啊等
  2. 然後基礎知識, 可能會問你資料結構有哪幾種啊. 這裡可能會有人問的比較深一點, 比如每種類型底層是什麼. 甚至會問一些跳躍表的内容等. 然後一緻性hash啊. 和普通hash有啥差別啊等等.
  3. 持久化機制了解嘛.差別是啥啊, 你們怎麼用的啊
  4. 過期時間了解嘛, 怎麼設定的哇
  5. redis如果重新開機了,或者當機了, 這個過期時間會保留.然後講講redis的路由機制. (叢集通信)然後緩存穿透/緩存雪崩内容.
  6. 怎麼避免重構緩存啊
  7. 查詢慢, 怎麼解決啊. 這裡可以說很多啊, 從外層比如網絡一直到底層
  8. 緩存資料庫雙寫資料不一緻情況
  9. 公司怎麼個硬體部署, 高峰期資源使用情況等.
  10. 有的可能會在出個場景題. 随機應變喽~

mq

  1. 使用場景,作用是啥
  2. 我之前比較熟悉的是rabbitmq. 當然現在在學習kafka.
  3. https://blog.csdn.net/kwy15732621629/article/details/85647481 基礎知識,就是一些原理,然後就是一些應用問題了 4.選型; 5.怎麼保證高可用; 6.重複消費問題/ 資料丢失問題 /順序性問題/ 大量積壓怎麼辦;

rpc

好吧, 先說說你知道的rpc.你最熟悉哪個 . 然後就開始問了… 一般如果回答dubbo. 無可避免還會問到zk. 比如注冊的臨時節點啊. https://blog.csdn.net/kwy15732621629/article/details/82052906 dubbo服務發現啊.通信原理啊, 負載均衡方式,叢集容錯政策啊 幂等性如何處理, 請求順序如何處理啊等等 然後zk .其 watch機制啊. zk 原理, 其實分布式的感覺都差不太多. 然後zab協定. 如果擴充多了. paxos協定 一般說完zk,可能會問你們項目中分布式鎖的處理. 分布式事務問題. 還是圍繞zk的使用來的, 比如選主/釋出訂閱/負載均衡啊等等.

IO

說完dubbo .可能就會問io了. 用戶端到服務端連接配接後, io通信怎麼做? 然後簡單可能就會問問bio和nio差別. 然後再聊聊nio的東西, 比如緩沖區/通道/選擇器等.再往下,可能會聊聊netty.netty線程模型啊 零拷貝如何實作等

資料庫

以mysql為例

  1. mysql的基礎内容開始問. 一般就是存儲引擎的一些内容. 然後說一下他們之間的差別.
  2. 索引, 必問的一個東西.索引原則/ 什麼情況不走等等. 或者聚集索引, 非聚集索引. 總之B+ 往外擴伸, 也是可以有很多很多東東的.
  3. 資料庫鎖.比如最簡單的樂觀鎖悲觀鎖. 資料庫死鎖問題.
  4. 是否優化過sql. 如何優化的.
  5. 隔離級别等
  6. 主從複制原理, 主從同步延遲問題如何解決.
  7. 讀寫分離.
  8. 分庫分表. 怎麼做的. 然後分庫分表有好幾種, 比如用戶端分片,代理分片/支援事務的分布式資料庫. 那麼之類可以繼續擴充問你, 比如sharding jdbc. mycat等内容.然後選型問題.

然後擴容方案是什麼

之前有一篇, 簡單寫了些. 沒畫重點…自行領悟吧 https://blog.csdn.net/kwy15732621629/article/details/87922490

運維部署

這個其實是跟上面很多有關系, 比如說檔案伺服器用啥. mysql多少台. 整體的一個部署方案, 如何保證三高的~ 然後k8s啊, docker啊這麼一個使用和簡單原理, 友善排除一些錯誤使用.常用的linux指令啊.

權限

每個公司的權限, 也是一個大塊頭. 這個看自己能力了. 最簡單的基礎知識應該都有了解過.

工具類

比如solr.elk 等, 就靠自己去學習使用喽~

架構類

這個其實我比較low喽,但是面試, 可能會問你一些架構設計問題, 還是蠻常見的. 當然也和你引導面試官, 或者履歷本身, 有很直接關系.

設計模式和算法

設計模式, 如果代碼用了, 可以講講如何使用的. 然後簡單的東西, 類圖和優缺點啥的. 需要了解. 算法, 我平時碼代碼, 貌似用的不多. 但是基本的一個思想是需要了解的

書籍學習推薦

先說好, 沒推廣費,我就是自己的一個分享…

如果你是實習生,那麼基本的java基礎肯定是希望紮實的, 如果你做過一些項目,還可以盡快能承擔起來, 哇,那我很喜歡了好嘛

如果社招, maybe你比我優秀喽, 那麼可否再推薦我些學習内容哇

java瘋狂講義, 最原始, 最簡單的基礎, 但是多看的時候, 總能發現自己不會的内容~

java8新特性, 這個就自己網上找視訊學習使用吧.

java集合類. 建議自己跟着源碼走一下.

io的話, 瘋狂講義也又講, 然後http://ifeve.com/overview/ 這個位址也可以看看, 然後還有一本書, 叫java nio中文版 . netty的話, 我就是看的閃電俠的部落格和課程(目前我還在看…我還不會.)

jvm : 書籍: 深入了解java虛拟機. 然後java性能優化, 也有講部分.

多線程: 書籍: java多線程程式設計+ java并發程式設計的藝術. 前面例子居多.後面理論居多.(我也不太會?)

架構: 書籍: spring技術内幕/spring源碼分析/看透spring mvc 源碼分析與實踐. springboot使用, 網上一堆內建過程. 書的話: springboot實戰 + springboot揭秘.

springcloud. 周立老師的入門《Spring Cloud與Docker微服務架構實戰》, 然後程式猿DD的增進《Spring Cloud微服務實戰》.

mybatis : 我當時好像是在網上找的視訊入門的, 就教育訓練班官網放出的視訊. 記不太清了.

zk+dubbo : dubbo的簡單使用的話, dubbo使用者手冊講的很清晰了. 然後dubbo架構設計詳解. 我還沒看… zk 《從Paxos到zookeeper分布式一緻性原理與實踐》 這本書

mysql: mysql技術内幕 + 高性能mysql .兩本書結合看.我一般是橫向去看. 然後mycat權威指南.

redis: 黃鵬程的入門. 付磊的<> 增進 , 黃建宏的<> 增進. 三本書各有特色. 第一本最後的一部分, 是其他沒有的. 然後中間那本叢集原理啥的, 給我印象很深刻. 第三本, 最喜歡的是每一部分的小結,總結很到位. <<深入分布式緩存>> 不光講了redis還有其他, 作為知識擴充吧.

mq. 可以先看官網入門. 然後再看書

linux. 我貌似是跟着阿銘學linux. 簡單使用.要不就是鳥哥私房那本書.記不清了.

solr/es 網上直接搜就行 然後maven: maven實戰

Tomcat : how Tomcat works

設計模式: 最開始入門大話設計模式, 主要是故事有意思, 然後head first

算法: 啊哈算法, 還是故事好玩…

阿裡的碼出高效

架構: 張開濤的<<億級流量網站架構核心技術>>. <<可伸縮服務架構>> <<分布式服務架構>> <<聊聊架構>>

個人愛好喽~~~