1. 程式人生 > 其它 >Java高階工程師面試實戰,5種方案告訴你

Java高階工程師面試實戰,5種方案告訴你

Java高階工程師面試實戰,5種方案告訴你

前言

在分散式系統中,快取和資料庫同時存在時,如果有寫操作,先操作資料庫還是先操作快取呢?本文將分5種方案闡述展開對比,謝謝閱讀~

快取維護方案一

如果是一讀(執行緒B)一寫(執行緒A)操作,「先操作快取,再操作資料庫」。流程圖如下所示:

  • 1.執行緒A發起一個寫操作,第一步del cache

  • 2.執行緒A第二步寫入新資料到DB

  • 3.執行緒B發起一個讀操作,cache miss快取失效了。

  • 4.執行緒B從DB獲取最新資料

  • 5.執行緒B執行set cache,把從DB讀到的資料,更新到快取。

「這樣看,沒啥問題」。我們再看第二個流程圖,如下:

  • 1.執行緒A發起一個寫操作,第一步del cache

  • 2.此時執行緒B發起一個讀操作,cache miss

  • 3.執行緒B繼續讀DB,讀出來一個老資料

  • 4.然後老資料設定入cache

  • 5.執行緒A寫入DB最新的資料

OK,醬紫,就有問題了吧,老資料入到快取了,「每次讀都是老資料啦,快取與資料與資料庫資料不一致了」

快取維護方案二

上個方案是一讀一寫,如果是雙寫操作,「先操作快取,再操作資料庫」,會怎麼樣呢?

  • 1.執行緒A發起一個寫操作,第一步set cache

  • 2.執行緒A第二步寫入新資料到DB

  • 3.執行緒B發起一個寫操作,set cache

  • 4.執行緒B第二步寫入新資料到DB

「這樣看,也沒啥問題。」

,但是有時候可能事與願違,我們再看第二個流程圖,如下:

  • 1.執行緒A發起一個寫操作,第一步set cache

  • 2.執行緒B發起一個寫操作,第一步set cache

  • 3.執行緒B寫入資料庫到DB

  • 4.執行緒A寫入資料庫到DB

執行完後,快取儲存的是B操作後的資料,資料庫是A操作後的資料,「快取和資料庫資料不一致」

快取維護方案三

一寫(執行緒A)一讀(執行緒B)操作,「先操作資料庫,再操作快取」

  • 1.執行緒A發起一個寫操作,第一步write DB

最後

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

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

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

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

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

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