1. 程式人生 > 其它 >如何保證訊息佇列是高可用的

如何保證訊息佇列是高可用的

如何保證訊息佇列是高可用的

阿里

  • mq 訊息可靠性,冪等如何保證
  • 分散式鎖的實現方案比較,為什麼選擇 zookeeper, zookeeper 一致性協議原理
  • 執行緒池引數,阻塞佇列實現
  • 一致性 Hash解決什麼問題, 如何實現? 虛擬節點的作用?
  • Java 鎖的實現方式, 比較? AQS實現原理?公平非公平實現原理?
  • CAS 實現原理
  • volatile 實現原理, 單例模式
  • java 記憶體模型, gc 調優的經歷. cms gc 的幾個階段, 為什麼會出現 stop the world. 常見可優化引數有哪些.
  • 為什麼需要優化 gc, gc 會導致什麼問題.
  • mysql 事務隔離級別. mvcc 實現原理
  • mysql 索引原理. 為什麼使用 B+樹. 及何時無法使用索引?
  • mysql 架構, 引擎層和 server層 各自負責什麼.
  • hashmap 及 concurrenthashmap 實現原理
  • Spring aop原理,如何定義新的spring xml 標籤
  • 合併兩個有序連結串列
  • 如何設計一個大型活動的安保系統(開放題)

美團

  • 資料庫和快取的一致性問題。先更新資料庫,再更新快取,若更新完資料庫了,還沒有更新快取,此時有請求過來了,訪問到了快取中的資料,怎麼辦?

  • 聚簇索引/非聚簇索引,mysql索引底層實現,為什麼不用B-tree,為什麼不用hash,葉子結點存放的是資料還是指向資料的記憶體地址,使用索引需要注意的幾個地方

  • mysql預設的事務隔離級別,mvcc,rr怎麼實現的,rc如何實現的

  • mysql間隙鎖有沒有了解,死鎖有沒有了解,寫一段會造成死鎖的sql語句,死鎖發生瞭如何解決,mysql有沒有提供什麼機制去解決死鎖

  • 談下對GC的瞭解,何為垃圾,有哪些GC演算法,有哪些垃圾回收器,cms和g1的區別,emm,還有一個直擊靈魂的問題,看過cms的原始碼嗎

  • 有沒有排查過線上oom的問題,如何排查的

  • 有沒有使用過jvm自帶的工具,如何使用的

  • 假設有下圖所示的一個full gc 的圖,縱向是記憶體使用情況,橫向是時間,你如何排查這個full gc的問題,怎麼去解決你說出來的這些問題

  • 說說對java中集合類的理解,專案中用過哪些,哪個地方用的,如何使用的

  • 對CAS的理解,CAS帶來的問題,如何解決這些問題

  • volatile底層、synchronized底層、鎖升級的過程、MESI

  • ehcache支援哪些快取

  • juc有研究沒有,講一講

  • 聊專案,畫專案架構圖,畫一個使用者從發起請求 到接收到響應 中間經過哪些服務 每個服務做什麼事情 的流程圖

  • 講專案中的難點、挑戰,如何解決的,專案這一塊會問的特別細

  • 如何保證RocketMQ 訊息的順序性,如何解決重複消費問題

  • 專案中如何保證介面的冪等操作

  • 講一講對redis 的瞭解,專案中如何使用的,哪個地方使用的,為什麼要使用

  • 哨兵機制、redis兩種備份方式的區別,專案中用的哪種,為什麼

  • 講一講對分散式鎖的瞭解

  • 專案中系統監控怎麼做的

  • 如何理解Spring中的AOP 和 IOC,以及DI,讀過Spring原始碼沒有

  • 讀過MyBatis原始碼沒有

  • 說一個你瞭解最多的框架,說出你的理解

  • 如何理解分散式事務,為什麼會出現這個問題,如何去解決,瞭解哪些分散式事務中介軟體

  • 聊一聊對分庫分表的理解

  • hystrix功能 & 在專案中怎麼使用的 & hystrix 怎麼檢測斷路器是否要開啟/關閉 & hystrix 實現原理,除hystrix之外的其他熔斷限流中介軟體有了解沒有,瞭解多少說多少

  • dubbo有了解沒有

  • 怎麼理解java 中和 mysql 中的樂觀鎖、悲觀鎖

  • 一致性hash

最後

關於面試刷題也是有方法可言的,建議最好是按照專題來進行,然後由基礎到高階,由淺入深來,效果會更好。當然,這些內容我也全部整理在一份pdf文件內,分成了以下幾大專題:

  • Java基礎部分
  • 演算法與程式設計
  • 資料庫部分
  • 流行的框架與新技術(Spring+SpringCloud+SpringCloudAlibaba)

這份面試文件當然不止這些內容,實際上像JVM、設計模式、ZK、MQ、資料結構等其他部分的面試內容均有涉及,因為文章篇幅,就不全部在這裡闡述了。

作為一名程式設計師,階段性的學習是必不可少的,而且需要保持一定的持續性,這次在這個階段內,我對一些重點的知識點進行了系統的複習,一方面鞏固了自己的基礎,另一方面也提升了自己的知識廣度和深度。

最後提醒一下哦,如果你想要學習,卻無奈於沒有乾貨學習資料,以上所有的資料內容都可以免費分享給你,只需你多多支援一下即可

“點贊文章,關注我,然後戳戳戳戳這裡獲取免費下載方式”