
作者:小傅哥
部落格:
https://bugstack.cn
沉澱、分享、成長,讓自己和他人都能有所收獲!😄
一、咋,膨脹了嗎?
生抗美團部落格?不要臉,呐們,從未見過如此"厚顔無恥"之人!
美團部落格在技術圈裡是非常優秀且品質很高的官網部落格,全系硬通貨的優秀内容:有技術架構、有算法應用、有搜尋引擎實作、講過風控政策、談過Java動态追蹤、分析過全鍊路監控,上百篇的高品質有實踐根基的技術内容,讓作為研發出身的搬磚碼農,不隻是你,還有我,都非常喜歡此類有強烈技術氛圍的文章。
呐,就這?你還要生抗?
是的,即使是這樣剛烈的技術部落格,我也要生抗它!因為喜歡歸喜歡,挑戰是挑戰,學會學習的方法比僅僅隻是按照一個部落格文章中的完整思路硬搬到自己的腦子中更重要。為什麼這樣說呢,因為大部分的技術文章的本質都是對數學邏輯的實作描述,從目标、條件、行為到結果的推演,但這種照着推演結果抄答案是沒意義的,隻有這些思路在你的大腦裡完完整整、磕磕絆絆的走來走去不斷碰撞💥,摸索到結果後,才能有更深刻的印象。
快,是最大的障礙!
向陽而生,逐光而行,減少沒必要的内心焦慮,别為想着一口吃不下胖子而惆怅。慢慢鋪好腳下的地基,不要着急于快,你現在所做的每一件看似點點的小事,将來都會彙聚在一起。想起我自己在上學階段,看到很多同學放假喜歡去做一些兼職、發發傳單、洗洗盤子、當當家教,但其實以我自己來看,并不會支援去做這些,除非是真的需要這些錢。因為大部分同學畢業後基本都會從事本專業(
計算機、軟體工程
)的事情,而其他兼職的事情與你在自身成長的長期價值積累并不符,而這部分兼職工作也僅能是給你帶來一點社會體驗和短暫經曆。但與未來長遠的目标來看,有明确的目标,不焦躁、不焦急,慢慢成長,慢下來、慢下來,你會收獲更多!世界很大,生活更大。
二、看,剛勁内容!
除了手裡的幾個賣焦慮的文章,你可以擁有更好的!
一天學會、一文搞懂、學完就P8P9、30歲碼農還和剛畢業做一樣的活沒用!等等販賣焦慮的文章,看這些内容除了讓人煩躁還能帶來什麼、能有什麼成長嗎?講道理,不會有什麼大成長,因為你太過着急了,急的像是河裡的水攪渾了,沒有時間的沉澱,你隻能在上面撈點浮沙。
而那些真正有價值的内容,是需要經過時間的磨練的,記得《霍元甲》電影裡有句話,我這一拳20年的功夫,你們擋得住嗎!
是的,可能這些有深度的技術部落格你也擋不住!
- 美團技術,美團技術沙龍由美團技術團隊主辦,每期沙龍邀請美團及其他網際網路公司的技術專家分享來自一線的實踐經驗,覆寫前端、背景、系統、算法、測試、運維等技術領域。
- 360 核心安全,分享奇虎360公司的技術,與安全的網際網路共同成長。病毒防護、安全監測、軟體漏洞等方面有深入學習的文章。
- 阿裡資料庫核心月報,阿裡資料庫核心月報非常好的資料庫進階資料,文章多為阿裡資料庫核心專家所寫,有深度)中分析,那種資料庫産品更被阿裡的核心專家們青睐。
- jenkov Tutorials,We tend to select projects that are related to entrepreneurship, one way or another. Our projects are either an entrepreneurial project in itself, or it helps other people's entrepreneurial projects.
為什麼你需要看這樣的部落格内容?
我遇到過很多好友夥伴問我,在網際網路做開發都需要什麼樣的技術,分布式的系統是怎麼搭建的、怎麼進行的分庫分表、系統上線後要進行壓測嗎,這些都是在什麼标準下怎麼進行的呢?
這裡以一篇美團部落格為例,給大家介紹下分庫分表的起因、過程和結果,文章為:MTDDL——美團點評分布式資料通路層中間件
美團(背景):2016年Q3季度初,在美團外賣上單2.0項目上線後,商家和商品數量急速增長,預估商品庫的容量和寫峰值QPS會很快遇到巨大壓力。随之而來也會影響線上服務的查詢性能、DB(資料庫,以下統一稱DB)主從延遲、表變更困難等一系列問題。
因為業務的急速發展,體量的暴增,原有的系統設計已經很難滿足現有的資料體量,是以會有一系列的技術問題需要解決。但從資料庫的使用上來看,單庫單表已經很難現有的業務體量了,通常一台64核、7T的資料庫伺服器,在 tps 達到 1萬已經逼近極限。
那麼怎麼辦?把各個應用按照商品庫進行垂直拆分嗎,這也隻能解決一時之痛呢,以後呢?是以分庫分表的設計是必然的,應運而生的就是美團的 MTDDL(Meituan Distributed Data Layer),美團點評分布式資料通路層中間件,旨在為全公司提供一個通用資料通路層服務,支援MySQL動态資料源、讀寫分離、分布式唯一主鍵生成器、分庫分表、動态化配置等功能,并且支援從用戶端角度對資料源的各方面(比如連接配接池、SQL等)進行監控,後續考慮支援NoSQL、Cache等多種資料源。
分庫分表絕不隻是一個中間件的開發就完事了,還需要一整套的技術實作來支撐這樣的技術元件使用;
- 系統拆分為分布式應用,RPC、MQ、分布式任務、配置中心等需要一并引入。
- 分庫分表取模算法,不知道大家有深入閱讀過 HashMap 的源碼沒,HashMap 是一種基于哈希桶和連結清單+紅黑樹的資料結構,每一個資料存放都需要經過哈希求值、擾動函數、泊松分布和拉鍊尋址的方式進行計算資料索引和存放邏輯。那麼在你設計入美團的分庫分表元件時,你腦子中會有哪些個雜湊演算法嗎,
、哈希散列
除法散列法
平方散列法
嗎?各個雜湊演算法都有什麼特性,哪一個更适合你的元件開發,它會讓資料更加散列,減少碰撞嗎。碰撞了是什麼效果,HashMap 的碰撞是連結清單轉紅黑樹以及擴容拆解資料,那麼資料庫裡的資料碰撞嚴重是什麼效果斐波那契(Fibonacci)散列法
- 另外是關于分布式唯一主鍵生成器的設計,因為你的每一條資料,都需要是全局唯一的,那麼就需要給每一條資料都生成一個唯一ID。美團的分布式ID生成系統Leaf,其實是一種基于DB的Ticket服務,通過一張通用的Ticket表來實作分布式ID的持久化,執行update更新語句來擷取一批Ticket,這些擷取到的Ticket會在記憶體中進行配置設定,配置設定完之後再從DB擷取下一批Ticket。
看到這,你還敢說你是在卷技術、造火箭嗎?很多時候不是技術沒用,是你沒有想法去用,也沒有一個自身使用此類技術的土壤!是以不知道各個分散的技術子產品都用在哪,隻知道面試時會用一下,是以來學點幹貨吧,騷年!
三、我,都寫了啥?
抗了2年,寫了8個專題,22個類别,245篇+文章!
-
兩年前,我隻會寫代碼,不會寫文章
-
兩年前,我給同僚做的分享,總讓别人聽的雲裡霧裡
-
兩年前,我也吃過技術答辯的虧,沒有内容叙述能力
-
兩年前,我缺少知識的成體系建設,很多内容都碎片化
是以從
不太開心
的那天開始,我陸續總結沉澱和輸出技術内容,成體系化的建設自己的技術棧次元,一點點嘗試編寫文章和吸收讀者的回報,慢慢的把複雜技術内容的文章寫的盡可能通俗易懂。是以你會看到我的文章大部分以實戰為基準,通過對各類技術場景的驗證、歸納、總結,寫出成體系的技術内容,既滿足自己沉澱提升,也分享給同好成長!
我給自己在技術職業成長的定位上,是一個能抗住
農夫三拳
的架構師,是以我在編寫和輸出的技術内容上,也是以資料結構、算法邏輯、設計模式、核心技術、系統架構、服務運維以及總結自身成長的幾個方面來進行彙總内容編寫文章。
而這幾大塊内容也是每一個較貴的 Java 程式員應該掌握的内容,可以包括:
- Java&Spring:以講解Java、Spring核心知識為基礎,用數學邏輯思維分析關于Java、Spring、Mybatis、Dubbo等核心源碼技術内容。其中如《Java 面經手冊》是一本以面試題為入口講解 Java 核心内容的技術書籍,書中内容極力的向你證明代碼是對數學邏輯的具體實作。包括正在編寫的《手撸 Spring》通過手寫簡化版 Spring 架構,了解 Spring 核心原理。在手寫的過程中會簡化 Spring 源碼,摘取整體架構中的核心邏輯,簡化代碼實作過程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、資源處理等内容實作。這些都程式員學習技術成長過程中非常重要的知識,如果能深入學習那麼對以後的個人成長幫助非常大。
- 算法邏輯和資料結構:這部分内容主要以Java源碼為入手,講解其中的數學知識,包括:擾動函數、負載因子、拉鍊尋址、開放尋址、斐波那契(Fibonacci)散列法還有黃金分割點的使用等等,這也正式《Java 面經手冊》的核心内容所在。
- 面向對象:《Java 設計模式》的知識是在Java基礎鋪平,資料結構、算法邏輯有了一定的了解後,在深入學習和使用的技術。同樣是一個需求在學過設計模式後,也閱讀了不少别人優秀的代碼,那麼在他實作需求的時候,會拆分出很多的接口和接口的繼承、抽象類的職責隔離實作、具體業務子產品的分層、功能服務元件的細化、具體實作過程中對設計模式的運用等等。這樣的代碼實作後會非常具有易擴充和可維護的特點,否則一篇的ifelse不是坑自己就是坑下一個人。
- 中間件:可能很大一部分研發并不會接觸到中間件,也不太可能有人告訴你可以使用中間件的方式解決一些實際遇到的問題。因為大部分時候你都會認為中間件隻是公司專門部門的人寫的,或者是技術大牛搞的,總之與你沒關系。但其實代碼知識對數學邏輯的具體實作,業務開發有業務開發的方式,《Spring 中間件和開發》也隻是對Spring的關于容器中一些特定接口和類的使用,具體的還是普通的邏輯代碼,比如暴露服務、采集日志、監控系統等。但如果你能早些學到這樣技術的核心思想,那麼對于升值、加薪、跳槽,都是非常有幫助的。
- 通信專題:其實Netty是一項非常重要的技術,比如在RPC服務實作中的Dubbo、或者MQ、以及很多時候的通信裡都是能用到的技術。就連小傅哥的第一次面試大廠也是靠着對Netty的學習,刷進來的!是以小傅哥編寫了很多Netty從基礎入門講解到核心原理,告訴你如何處理半包、粘包,怎樣定義消息協定,并開發了一個基于Netty的仿微信聊天項目,這些技術内容你都可以在我的部落格學習到學習到。
- 位元組碼程式設計:這項技術可能大多數研發,哪怕35歲的,可能也不一定接觸到。但這樣的技術你卻基本都用過,比如你的IDEA是購買的嗎,你怎麼給讓它能用的!你用過一些非入侵的全鍊路監控系統的,你通過位元組碼插樁搞過一些事情嗎,那你用過Cglib吧,它的底層就是通過ASM位元組碼架構對位元組碼進行的一些列操作。
- 故事:除了技術學習以外,還有很多夥伴會經常問我一些關于學習、成長以及在職場中怎麼活下去。是以我結合我自己在大廠網際網路中的學習和成長經曆,給讀者夥伴寫了不少此類的内容。如履歷編寫、招聘要求、技術資料、代碼規範、評審晉升、薪資待遇、副業收入等等。這些内容可能很多會幫助你度過一個安定的職場生涯!
四、嗯,有些收獲!
叮,走在技術路上的一次打卡!
2021年04月23日,圖書節,我的第一本技術書《重學Java設計模式》出版了。不久以後我感受過圖書沖榜到銷量榜第一、在圖書館看到我的技術書、被國外的粉絲夥伴購買帶出國門,還看到有個女孩買來作為禮物送給他的男友。也于不久後看到百度百科還有我書籍的資訊,還真是蠻開心的,但不膨脹!
輸出也僅僅是我作為技術人的一次成長打卡,
我就想走走沒走過的路
,
爬爬沒爬過的山
看看風雨過後的彩虹是否絢爛
。而通過這樣的經曆了解下出書的流程;選題、定稿、三審三校、申請書号、印刷裝訂、發貨上架、營銷售賣。
除此之外,當你的文章越寫越多,除了技術上成體系的完善,你還會獲得各個平台的扶持,比如在掘金寫小冊,得到掘金的簽約作者邀請!加油,總有機會是你可以上的!
五、你,要動手不?
寫文章,如果你還不知道從哪下手!
從給自己看的日常筆記,到整理成分析給讀者閱讀的文章,其實并不好寫,無論是技術、生活、職場,都會有一定的編寫門檻。以我個人為例,一篇文章的編寫,即使不計算編寫前的内容歸納整理,也不包括寫完後的文案、推廣、分享,僅僅是編寫時間也需要
6-8
個小時,這包括内容的創作、PPT、xmind、visio等各類工具的繪圖、也可能會串聯進去一些故事性的圖檔。是以近一篇文章的編寫就已經很費時間,尤其是對不喜歡寫作文的理科碼農來說,再初期更是難搞!
但其實,做任何事想做好,都是難度、有門檻的!以我編寫文章的經驗,一篇文章的編寫可以總結以下圖稿中幾個方面:
- 選題:這是第一步,也是非常重要的一步。在開始之前你總得要花不少的時間來想好你要寫什麼,是熱門的、實踐的、創新的還是什麼,這是時候還沒具體定内容,因為無論熱門、實踐在每一個欄目下都可以寫不同的内容。
- 類型:是寫自己的故事、還是職場發展的自身經曆,還是寫寫學到的技術總結成文章呢。其實前期對你來說,寫技術是最好下手的,因為隻要你經曆過,就一定會有技術的總結,比如你出了一個技術事故,自己的秒殺商品系統挂了,那麼肯定是會總結出對應的技術經驗的。當然你胡說自己跳槽位元組拿到工牌了,或者說慘遭試用期解雇,也一定會上熱門,不過此類文章對你的個人成長來說,不具備長期價值。
- 内容:當你确定選題,選好了要寫的内容,接下來需要彙總此類内容的資料總結了,這包括你自己對技術的看法、也包括你在學習此技術點時從一些有價值的網站擷取的資料,當然也包括你閱讀的源碼、官方的文檔,這些内容都是非常具有權威性的。不過千萬不要拿一些看着就磨磨唧唧、似懂非懂的内容作為引入,可能這樣的内容本身就有坑!
- 賣點:一篇爆款的文章中一定是有此文章的亮點賣點的,比如有技術創新價值嗎、有閱讀趣味性嗎、有分享傳播共鳴嗎、有流量轉換嗎,都會是一篇文章的賣點。其實每一個文章也都可以看做是一個 sku,這個 sku 好不好幾本也是你的賣點決定的!
- 配圖:記住所有技術号主的文章,一定會有配圖的!xmind 都玩的很溜,visio 也畫的非常好,ppt 更是漂亮的很,因為好的圖會讓整篇文字堆滿的文章更具有可閱讀性。與此同時你還會看到一些較為搞笑的圖,來增加文章的趣味性。
六、來,總結一下!
心懷天下,聲色犬“碼”。生有熱烈,藏于俗常!
寫到這的時候想起首歌,
吃的是下鍋的米、走的是人間的道、扛的是頂風的旗
。就像我自己,生抗 美團技術部落格,并不是挑戰美團技術,而是扛起自己對技術的追求,抗的是對技術的品質!
任何一個自己喜歡的方向,不斷的極緻的追求下去,都可能成為你自身最具有價值的财富。為你的八小時内謀生存、八小時外謀發展!
如果你現在還不沒有意識到自己應該為八小時外努力,那麼 35 歲之前,你手裡還能抓幾張牌?健康的身體、和睦的家庭、充足的積蓄、執行的計劃等等用于抵抗你的房貸車貸、職場中的疲憊、生活裡的消費呢。
加油吧!願每一個在路上拼搏的人都能;
所求皆如願、所行化坦途
!
七、系列推薦
- 小傅哥,一個有“副業”的碼農!
- 數學,離一個程式員有多近?
- 工作3年,看啥資料能月薪30K?
- 握草,你竟然在代碼裡下毒!
- 如果你隻寫CRUD,那這種技術你永遠碰不到
公衆号:bugstack蟲洞棧 | 作者小傅哥多年從事一線網際網路 Java 開發的學習曆程技術彙總,旨在為大家提供一個清晰詳細的學習教程,側重點更傾向編寫Java核心内容。如果能為您提供幫助,請給予支援(關注、點贊、分享)!