編程之路無(wú)捷徑!「編程雜感」第 3 期

這張圖片拍攝于去往上海的路上。這次去上海主要是為了陪學(xué)姐參加公考,順便也可以感受一下這個(gè)大都市。
國(guó)內(nèi)的一些旅游景點(diǎn)倒是去過(guò)很多,但是像上海這種量級(jí)的大都市倒是還沒(méi)有去過(guò)。
整個(gè)行程大概 4 個(gè)多小時(shí),偷閑,我玩了幾把王者榮耀,卡的實(shí)在不行。于是,便在車(chē)上寫(xiě)下了這篇文章。
這是一篇比較輕松的文章,我會(huì)簡(jiǎn)單總結(jié)一下近期的思考,分享一些“有價(jià)值”的東西。
廢話不多說(shuō)!希望下面的分享對(duì)你能有啟發(fā)。
堅(jiān)持原創(chuàng)不易,有幫助的話,歡迎點(diǎn)贊分享鼓勵(lì)~愛(ài)你們~
思考
編程之路,沒(méi)有捷徑
我發(fā)現(xiàn)有很多人經(jīng)常會(huì)問(wèn)我一些不切實(shí)際的問(wèn)題,比如:“如何 1/2/3 個(gè)月之內(nèi)快速精通 Java?”、“如何在 1/2/3 個(gè)月快速上岸大廠?”…… 。我個(gè)人對(duì)于提這些問(wèn)題的人是有偏見(jiàn)的,第一印象是覺(jué)得這種人有點(diǎn)不太適合程序員這個(gè)行業(yè)。
所以,碰到這種問(wèn)題,我往往也會(huì)簡(jiǎn)單回一個(gè):“編程沒(méi)有捷徑,踏踏實(shí)實(shí)才是王道”。并且,還會(huì)以我的方式簡(jiǎn)單 “diss” 一下這類(lèi)人。這里的“diss” 并不是指不尊重,而是指出你認(rèn)為別人存在問(wèn)題的地方。
好話大家都會(huì)說(shuō),但是,讓你成長(zhǎng)的往往是那些不太好聽(tīng)的話。
面對(duì) “diss”, 質(zhì)疑的話就勇敢正面剛!千萬(wàn)不要因?yàn)閯e人一兩句 diss 就崩潰了,覺(jué)得生活沒(méi)有愛(ài)了,開(kāi)始懷疑自己了。
還有很多人,仗著自己各種“高級(jí)”的理論知識(shí)比較豐富,出口就是高并發(fā)、分布式、微服務(wù)各種“高大上”的名詞。
然后,人家就對(duì)寫(xiě) CRUD 的業(yè)務(wù)代碼不屑一顧??!結(jié)果,自己領(lǐng)了一個(gè)簡(jiǎn)單的任務(wù)卡,拖了很久沒(méi)做完,做完之后一測(cè)試,一堆 Bug,還有各種編碼不規(guī)范的問(wèn)題。
我相信,我上面列舉的兩個(gè)例子大家都遇到過(guò)。
其實(shí),像高并發(fā)、分布式、微服務(wù)這些東西,隨便給一個(gè)有經(jīng)驗(yàn)的工程師,學(xué)兩三個(gè)星期,基本是可以把大部分重要的 理論知識(shí) 走一遍。
但是,像你的編碼能力、業(yè)務(wù)理解能力、解決問(wèn)題的能力,這些真不是能在短時(shí)間內(nèi)掌握的。
所以,平時(shí)工作中一定要多學(xué)習(xí)、多思考,要走的路很長(zhǎng)。自信要有,但是在技術(shù)上一定要謙虛一點(diǎn),不要自我感覺(jué)自己技術(shù)已經(jīng)非常厲害了。
我發(fā)現(xiàn)我身邊一些技術(shù)巨佬比如 Apache 頂級(jí)項(xiàng)目 commiter 都是非常謙虛的,經(jīng)常會(huì)讓我誤以為他們很菜(當(dāng)然了,這是我的錯(cuò)覺(jué))。
編程之路沒(méi)有捷徑!但是,我們可以找到一個(gè)屬于自己的學(xué)習(xí)方法/套路??梢越梃b別人的經(jīng)驗(yàn),但是不要生拿硬套在自己身上。
不要把自己局限在技術(shù)上
技術(shù)作為我們程序員的核心競(jìng)爭(zhēng)力,毋庸置疑,非常重要!但是,不要把自己的“束縛”在“技術(shù)”上,被“技術(shù)”綁架。
技術(shù)本身往往不會(huì)產(chǎn)生價(jià)值,必須依托于產(chǎn)品才能體現(xiàn)。 比如你是一個(gè)提供技術(shù)服務(wù)的公司,你創(chuàng)造的技術(shù)產(chǎn)品有人買(mǎi)單或者有人使用。再比如你是一個(gè)普通的互聯(lián)網(wǎng)公司,你們通過(guò)技術(shù)創(chuàng)造了某個(gè)熱門(mén) App 為公司創(chuàng)造了營(yíng)收。
但是,我們大多數(shù)人喜歡在技術(shù)上自嗨,這當(dāng)然也包括我自己。
拿我自己來(lái)說(shuō),我覺(jué)得在技術(shù)之外,我還需要提高自己的產(chǎn)品設(shè)計(jì)能力、演講能力、理財(cái)能力……。
產(chǎn)品設(shè)計(jì)能力,一是為以后自己可能獨(dú)立做產(chǎn)品做下鋪墊,二是這個(gè)在日常工作中也會(huì)用到。
演講能力和理財(cái)能力就不用多說(shuō)了吧!當(dāng)代社會(huì)必備的能力。
往美好的方向講,技術(shù)是為了讓人們的生活更好?,F(xiàn)實(shí)來(lái)說(shuō),技術(shù)就是為了幫助公司創(chuàng)造更多利潤(rùn)。
另外,技術(shù)更新?lián)Q代太快,但是,底層技術(shù)比如數(shù)據(jù)結(jié)構(gòu)和算法、計(jì)算機(jī)組成原理、操作系統(tǒng)的內(nèi)容其實(shí)一直沒(méi)怎么改變的。就那些東西。
當(dāng)自己年齡上來(lái)之后或者成家之后,自己投入在技術(shù)上的時(shí)間一定是會(huì)減少的。為了避免自己未來(lái)產(chǎn)生“技術(shù)焦慮” ,還是要把這些底層?xùn)|西給吃透??!
技術(shù)
聊聊最近遇到的一些有價(jià)值的東西。
對(duì)開(kāi)發(fā)人員有用的定律、理論、原則和模式
Github 上有一個(gè)叫做 hacker-laws-zh 開(kāi)源項(xiàng)目就總結(jié)了對(duì)開(kāi)發(fā)人員有用的定律、理論、原則和模式。非常有價(jià)值的內(nèi)容,一定要看看。
原倉(cāng)庫(kù)地址:https://github.com/nusr/hacker-laws-zh 。 中文翻譯版地址:https://github.com/nusr/hacker-laws-zh。

相關(guān)閱讀:有哪些編程定律/原則是程序員必須了解的? 。
Swagger 增強(qiáng)方案
Swagger 就是一套基于 OpenAPI 規(guī)范構(gòu)建的開(kāi)源工具,可以幫助我們?cè)O(shè)計(jì)、構(gòu)建、記錄以及使用 Rest API。前后端分離的情況下,一份 Rest API 文檔將會(huì)極大的提高我們的工作效率。但是,Swagger 原生提供的界面使用體驗(yàn)比較差。
常用的增強(qiáng) Swagger 的方案有下面兩種:
YApi :YApi 是一個(gè)可本地部署的、打通前后端及 QA 的、可視化的接口管理平臺(tái)??梢詭椭覀冏?swagger 頁(yè)面的體驗(yàn)更加友好,目前很多大公司都在使用這個(gè)開(kāi)源工具。項(xiàng)目地址:https://github.com/YMFE/yapi 。使用方法:當(dāng) Swagger 遇上 YApi,瞬間高大上了!
Knife4j :Swagger 生成 Api 文檔的增強(qiáng)解決方案,前身是 swagger-bootstrap-ui 。官方文檔:https://xiaoym.gitee.io/knife4j/documentation/ 。
分布式事務(wù)
數(shù)據(jù)庫(kù)事務(wù)可以保證多個(gè)對(duì)數(shù)據(jù)庫(kù)的操作(也就是 SQL 語(yǔ)句)構(gòu)成一個(gè)邏輯上的整體。構(gòu)成這個(gè)邏輯上的整體的這些數(shù)據(jù)庫(kù)操作遵循:要么全部執(zhí)行成功,要么全部不執(zhí)行 。

但是,微服務(wù)架構(gòu)下,一個(gè)系統(tǒng)被拆分為多個(gè)小的微服務(wù)。每個(gè)微服務(wù)都可能存在不同的機(jī)器上,并且每個(gè)微服務(wù)可能都有一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)供自己使用。這種情況下,一組操作可能會(huì)涉及到多個(gè)微服務(wù)以及多個(gè)數(shù)據(jù)庫(kù)。
這個(gè)時(shí)候單單依靠數(shù)據(jù)庫(kù)事務(wù)就不行了!我們就需要引入 分布式事務(wù) 這個(gè)概念了!
實(shí)際上,除了我們上面提到的服務(wù)拆分(微服務(wù))的場(chǎng)景,像 數(shù)據(jù)庫(kù)水平拆分(分庫(kù)分表) 這種場(chǎng)景的話也是需要引入分布式事務(wù)的。
一言蔽之,分布式事務(wù)的終極目標(biāo)就是保證系統(tǒng)中多個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的一致性!
分布式事務(wù)的解決方案有很多,比如:2PC、3PC、TCC、本地消息表、MQ 事務(wù)、Saga 等等。
針對(duì)分布式事務(wù),業(yè)內(nèi)比較不錯(cuò)的開(kāi)源項(xiàng)目:
ByteTCC ? : ByteTCC 是基于 Try-Confirm-Cancel(TCC)機(jī)制的分布式事務(wù)管理器的實(shí)現(xiàn)。相關(guān)閱讀:關(guān)于如何實(shí)現(xiàn)一個(gè) TCC 分布式事務(wù)框架的一點(diǎn)思考 Seata :Seata 是一款開(kāi)源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)下提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù)。 Hmily ?: 金融級(jí)分布式事務(wù)解決方案
搞懂了理論之后,可以研究一下以上項(xiàng)目的源碼實(shí)現(xiàn)。

掃描下方二維碼回復(fù)“PDF”即可獲取圖解計(jì)算機(jī)基礎(chǔ)+個(gè)人原創(chuàng)的 Java 面試手冊(cè)。
最近寫(xiě)的一些干貨,每篇都很用心,歡迎各位小伙伴閱讀/點(diǎn)贊/分享:
?一份熱乎的 SpringBoot 前后端分離后臺(tái)管理系統(tǒng)分析!分模塊開(kāi)發(fā)、RBAC權(quán)限控制...
?3種緩存讀寫(xiě)策略都不了解?面試很難讓你通過(guò)啊兄弟!
我是Guide哥,Java后端開(kāi)發(fā),會(huì)一點(diǎn)前端知識(shí),喜歡烹飪,自由的少年。一個(gè)三觀比主角還正的技術(shù)人。我們下期再見(jiàn)!
