在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

架構師寫的BUG會是什么樣的

jf_ro2CN3Fa ? 來源:小姐姐味道 ? 2023-10-19 18:23 ? 次閱讀

部門新來了個架構師,BAT背景,住在三環,開寶馬上班,有車位。

小伙話不多,但一旦說話斬釘截鐵,帶著無法撼動的自信。原因就是,有他著數億高并發經驗,每一秒鐘的請求,都是其他企業運行一年也無法企及的。這就讓人非常羨慕,畢竟他靠這個比我賺的錢要多。

俗話說,要想在公司不出事故,那就不要寫代碼。干活多了容易出事,一身輕松無人問津,這就是現實。

但有時候還是要看成果的。新來的研發領導不懂技術,但他懂技術指標,所以就統計大家提交git的數量,如果git活動是一片綠色如A股,那就算過關了。

架構師思來想去,決定領一個并發量最高的需求 :統計接口的平均響應時間和啟動以來的請求數。

為什么說它的并發量高呢?這是因為,它是統計所有接口的,自然比每一個接口的請求量都要大。AOP代碼一包,每個接口都得從他這里走一圈。

該我們的架構師上場了。代碼如圖。

64bad34c-6e2b-11ee-939d-92fbcf53809c.png

架構師說,我的代碼不需要做注釋。所謂的注釋,都是給垃圾代碼用的。我深以為是,他明顯是受到了Netflix公司的影響。

程序考慮到了高并發場景,使用了線程安全的ConcurrentHashMap,然后每次通過監控key取出相應的數據,然后在value上遞增。這么簡單的代碼,確實不需要增加什么注釋。

作為項目里并發量最高 的代碼,出于對高級架構師的信任,我們并不需要做什么代碼review,也不需要做什么測試。大家都很忙,代碼您吶,到線上遛一遛吧。

我建議你先找一找代碼的問題,如果你發現了問題,那就比架構師還厲害;如果你沒發現,也不證明你比架構師弱,沒有什么好傷心的。

裝B遭雷劈,線上運行一段時間后,內存溢出了。

大家吵吵個沒完,畢竟xjjdog說過,內存溢出問題的排查周期很長,大約平均需要40天左右才能解決問題。在大家開始論證的時候,架構師偷偷的啟動了Eclipse MAT 。MAT用來分析內存問題是非常合適的,但前提是你需要把堆棧給搗鼓下來。

架構師會用jmap,最主要的是權限大,于是自己搞了一份拷貝到線下分析。

我能理解到他的心情,畢竟問題定位到自己的代碼不是一件什么值得高興的事情。他發現內存的堆里面,滿滿的全是MonitorKey和MonitorValue。

Monitor$MonitorKey@15aeb7ab

我和架構師關系比較好,于是他問我:咱們的接口是不是特別的多?

我說:不是啊,你別看訪問量大,就這么個狗屁業務能有多少接口?幾百個撐了天了。

他說:我在堆里發現了幾千萬個...

說完他就不言語了,因為他發現里面有不少是一樣的接口。一定是參數的原因,所以他在代碼里加了這個,把?后面的給截斷了。

key=key.split("\?")[0];

結果發布到線上,過不了多久內存又溢出了。這次終于引起了大牛們的注意,經過大家的分析,發現代碼是忘了給MonitorKey重寫equals和hashCode方法了。

我不禁臉紅起來。作為好朋友,我不應該讓他出這個丑。但我又是隱隱快樂的,因為他工資比我高。

所以這就是一個很大的問題。很多同學對HashMap的知識點對答如流,甚至還專門記憶了紅黑樹。但換一個方式去問,卻又一臉懵逼。

其中一種問法是這樣的:一個普通的對象,能夠作為HashMap的key么?

答案顯然是可以的,但需要注意重寫hashCode和equals方法。如果忘記重寫的話,大概率會造成內存泄漏。

很不幸,現實中忘記的案例很多。大牛架構師也會中招。

代碼重寫hashCode和equals方法后,線上就再也沒發生過內存溢出。

等等,還沒完。畢竟是架構師,僅僅這樣一個bug還是證明不了水平的。架構師寫的bug,肯定非比尋常。

這種事出現的多了,研發領導對技術的權威性就不再是那么感冒。我們決定從并發量最高的代碼開始,進行一下代碼review。

很不幸,架構師的visit代碼出現問題了。雖然問題不是很大,但它畢竟是個問題。

64cec99c-6e2b-11ee-939d-92fbcf53809c.png

在統計數據的時候,代碼使用了ConcurrentHashMap,但它并沒有什么卵用。

visit方法,首先拿出了key,然后判空,再塞值。這明顯不是一個原子操作。

線程1:獲取key為a的值
線程2:獲取key為a的值
線程1:a為null,生成一個b
線程2:a為null,生成一個c
線程1:保存a=b
線程2:保存a=c

此時,B丟了。

業務可以忍受,但嚴謹的技術大牛們忍受不了,提出了修改的意見。

架構師說,給visit方法加個synchronized不就成了。

publicsynchronizedvoidvisit(Stringurl,Stringdesc,longtimeCost)

我說不行。有更優雅的寫法,效率更高。那就是使用putIfAbsent方法,代碼改動如下:

MonitorKeykey=newMonitorKey(url,desc);
MonitorValuevalue=monitors.putIfAbsent(key,newMonitorValue());
value.count.getAndIncrement();
value.totalTime.getAndAdd(timeCost);
value.avgTime=value.totalTime.get()/value.count.get();

大家就這兩種方式爭論了起來。

技術總監托著腮想了半天,看了看爭的面紅耳赤的同學們,說:這就是我不放心你們的緣故。線上環境要盡量保持穩定性,做最小的變更。既然加個synchronized就能夠很容易簡單解決的問題,為啥不直接用呢?下面這種代碼改動太大,有風險。

總監接著把頭轉向我:這個BUG非比尋常,為了讓大家引以為戒,你來做整個事故的復盤。把問題的排查和得到的教訓分享給大家,讓大家向這種至簡的架構看齊。我們平常的工作中,也要盡量以結果導向為主,用什么手段無所謂,能漂亮把事情辦好就行

這就是此篇文章的由來,我虛心受教,同時也明白自己的工資是漲不上去了。

編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 堆棧
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19761
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68612
  • 架構師
    +關注

    關注

    0

    文章

    47

    瀏覽量

    4624

原文標題:架構師寫的BUG,非比尋常

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    kintex產品架構設計文檔(成為架構師也是電子人不錯的選...

    kintex產品架構設計文檔(成為架構師也是電子人不錯的選擇) ROCE(儒仕),用心為每一位電子人!Xilinx7系列普及講座,架構師設計方案模板,交流學習 內容請下載附件pdf,更多內容請登錄ww..rocetech..co
    發表于 04-30 16:41

    關于架構師的詳細介紹

    溝通能力被排在架構師能力的第一位,它既是架構師入門能力,也是最難用量化標準來的能力。本文將為大家介紹架構師——能說會道的程序員。
    發表于 07-11 07:20

    架構師的能力鍛煉

    架構師每天都需要做選擇題。什么選擇?怎么做選擇?架構師需要進行怎樣的學習、培訓和鍛煉來進行正確的選擇?讀了本篇文章,你會對架構師為什么會需要權衡取舍以及妥協的能力有一個更加深刻的印象,并對于如何鍛煉這個能力有一個初步的認識。
    發表于 07-11 08:29

    架構師最重要的是什么

    軟件架構師的定義乃至所需要的特質歷來眾說紛紜。下面從一些另類的角度來做點分析。
    發表于 07-15 08:12

    好的架構師為什么是出色的程序員

    一個優秀的軟件架構師,首先一定是一個出色的程序員,這是本篇文章的議題。從本文我們可以了解到一個架構師的工作是什么,他容易遇到的問題是什么,因此他為什么必須是一個出色的程序員。
    發表于 07-17 07:03

    女性會更適合做架構師

    人們往往發現優秀的數學家、物理學家以及軟件架構師有著很多相似的素質,甚至往往能夠一人精通這好幾個領域,其中很重要的原因就是這個抽象思維的能力。架構師們潛意識中會覺得女性更適合做架構師?讓我們看看這是為什么。
    發表于 07-17 06:15

    最難調試的Bug什么樣的?

    你碰到過的最難調試的 Bug什么樣的?
    發表于 06-10 13:32

    未來環保汽車會是什么樣?

    未來環保汽車會是什么樣? 一汽-大眾
    發表于 04-07 09:08 ?1827次閱讀
    未來環保汽車<b class='flag-5'>會是</b><b class='flag-5'>什么樣</b>?

    一位支付寶架構師自述從工程架構師的成長之路

    這篇文章之前,我特意把這幾年看過的關于架構架構師的書重新翻了一遍,結果發現它們的定義或多或少有一些不一,而經過了這幾年,一些之前同意的觀點,現在的我也不敢茍同了。另一方面,業界
    的頭像 發表于 06-05 10:57 ?4067次閱讀

    怎樣成為一名資深Java架構師

    要想往架構師的方向發展首先要知道架構師是什么?
    的頭像 發表于 10-17 09:03 ?3144次閱讀

    大數據架構師的職責有哪些

    架構師按照專注領域不同,可分為企業架構師、基礎結構架構師、特定技術架構和解決方案架構師等,專職架構師
    的頭像 發表于 04-04 16:24 ?3840次閱讀

    開發工程架構師的區別

    架構師是程序員的職業生涯發展的一個方向,很多架構師都是從開發人員逐步過渡來的,程序員想要成為架構師,平時就應該身負“架構師”職責,用架構師
    的頭像 發表于 04-04 16:35 ?1.3w次閱讀

    前端工程轉型架構師的經歷

    前端架構師, 聽起來就是個很高大上的 Title, 每個初入行的前端工程在面試時, 被問到你未來的方向是什么? 我們或許都會很順口的回答, “嗯, 朝著架構方向走吧。..”, 那這個像是順口溜
    的頭像 發表于 07-23 14:16 ?4060次閱讀

    什么是 SoC 設計中的系統架構師?

    您知道系統架構師在片上系統 (SoC) 設計中的具體工作嗎?如果您已經認識或經驗豐富的系統架構師,那么可能無需進一步閱讀。但是,如果您是我們眾多正在探索該行業機會的年輕讀者之一,請繼續閱讀,看看這是
    的頭像 發表于 07-18 16:26 ?1986次閱讀
    什么是 SoC 設計中的系統<b class='flag-5'>架構師</b>?

    阿里專家:架構師是一個什么樣的角色

    架構其實是每個業務線都有,有些技術同學本身也是架構師的角色。阿里很早以前是專門有架構師崗位,專門的去做架構,但是做著做著架構師就做沒了。
    的頭像 發表于 03-14 09:25 ?816次閱讀
    主站蜘蛛池模板: 亚洲综合五月天| 国内精品免费视频自在线| 福利99| 久久久久久午夜精品| 色噜噜狠狠狠色综合久| 痴女中文字幕在线视频| 国产成人一级片| 亚洲免费人成在线视频观看| 美女污污网站| 免费国产小视频| 97色噜噜| 亚洲国产视频网| 三级国产| 窝窝午夜视频| 色网站免费视频| 亚洲人成毛片线播放| 黄色免费小视频| 国产在线视频www色| 亚洲国内精品自在线影视| 丁香六月婷婷激情| 男人操女人视频免费| 色偷偷88欧美精品久久久| 亚洲第一成人在线| 热re99久久国产精品| 毛片一区二区三区| 国产精品久久久亚洲456| 亚洲免费区| 欧美白人极品性喷潮| 美女大黄三级视频在线观看| aⅴ一区二区三区| 国产二区三区| 91av视频网站| 咪咪爱毛片| 717影院理论午夜伦不卡久久| 天堂网www中文在线资源| 又黑又长黑人欧美三级| caopon在线| 色老成人精品视频在线观看| 天天摸天天澡天天碰天天弄| www.狠狠干| 在线视频久久|