真實(shí)案例對(duì)“引用類型”的思考,你學(xué)會(huì)了嗎?
在一個(gè)風(fēng)和日麗的早上,我剛坐到工位上,正準(zhǔn)備美美的享受早餐時(shí),我的測試小兄弟楊過火急火燎的來找我說:“小米,不好了,運(yùn)營童鞋反饋,咱們商城小程序金剛區(qū)的新店專區(qū),新開的店鋪無法在上面展示,運(yùn)營童鞋那邊很著急,能不能先看看”。我想了下現(xiàn)有項(xiàng)目組的人力,然后就叫技術(shù)大牛“薇姐”看下。
方案一:刷新ElasticSearch
薇姐首先確定數(shù)據(jù)表中是否存在該店鋪,發(fā)現(xiàn)數(shù)據(jù)庫沒問題,然后就按照新店專區(qū)的接口查看了下數(shù)據(jù)源是 es,懷疑有可能是 es 沒有同步上來,到管理后臺(tái)點(diǎn)擊初始化店鋪的 es,結(jié)果本來新店專區(qū)還有店鋪數(shù)據(jù),直接就變成空白了,一條數(shù)據(jù)也沒有,撲街~
方案二:數(shù)據(jù)落庫
薇姐這次仔細(xì)的分析代碼,發(fā)現(xiàn)前人開發(fā)的時(shí)候,判斷新店的字段只存到 es 中,沒有把該標(biāo)識(shí)存入到店鋪表中,所以才會(huì)出現(xiàn)刷新 es 的時(shí)候,新店專區(qū)數(shù)據(jù)被清空了(前人埋得坑啊)~
找到問題就好說了,把這個(gè)字段落庫,然后給歷史數(shù)據(jù)新店標(biāo)識(shí)設(shè)置個(gè)默認(rèn)值,搞定~
這也給我提了個(gè)醒,以后組員在開發(fā)功能的時(shí)候,一定要先仔細(xì)聽聽他是怎么設(shè)計(jì)的,避免挖坑,論代碼 Review 的重要性!
Java 中的四種引用類型
在討論這個(gè)案例的時(shí)候,我突然想到這不正是面試題中講的“四種引用類型”中的一種嗎?
在 Java 編程語言中,引用是用來訪問和操作對(duì)象的一種機(jī)制。強(qiáng)引用、軟引用、弱引用和虛引用是 Java 中的四種引用類型。
- 強(qiáng)引用(Strong Reference):當(dāng)一個(gè)對(duì)象被強(qiáng)引用關(guān)聯(lián)時(shí),垃圾回收器無法回收這個(gè)對(duì)象。只有當(dāng)該對(duì)象的所有強(qiáng)引用都被釋放時(shí),該對(duì)象才能被垃圾回收器回收。
- 軟引用(Soft Reference):當(dāng)一個(gè)對(duì)象被軟引用關(guān)聯(lián)時(shí),它不會(huì)被立即回收,只有當(dāng) JVM 認(rèn)為內(nèi)存不足時(shí)才會(huì)回收該對(duì)象。因此,軟引用通常用于實(shí)現(xiàn)高速緩存。
- 弱引用(Weak Reference):當(dāng)一個(gè)對(duì)象被弱引用關(guān)聯(lián)時(shí),它的生命周期更短,只要沒有被強(qiáng)引用關(guān)聯(lián),垃圾回收器就會(huì)盡快回收它。
- 虛引用(Phantom Reference):虛引用是最弱的一種引用類型,如果一個(gè)對(duì)象只被虛引用關(guān)聯(lián),那么它就像不存在一樣,任何時(shí)候都可能被垃圾回收器回收。虛引用主要用于跟蹤對(duì)象被垃圾回收器回收的狀態(tài)。