00後程式設計師,2023年終總結

是你晨曦哥呀發表於2023-12-29

00後程式設計師,2023年終總結

作為一個00後程式設計師,我回顧了過去三年的工作經歷。我來自湖南衡陽,雖然網際網路上常常開玩笑說我們00後炒主管、炒老闆,但實際上我們也在不斷努力變得更強。最近兩年我沒有寫部落格,不是因為懶,而是我榮升為了一位爸爸,肩上的責任更重了,工作上也需要積極主動承擔自己的職責,順便開發一個練手的物聯網專案。

工作的三年

2020年中旬,我還在深圳的一家公司從事機房環境動力監控的工作。當時我在翻看手機時偶然看見了深圳房價,這讓我望而卻步,經過長時間的思考和斟酌,最後還是決定回長沙買房定居。長沙之前需要有兩年的社保繳納才有資格進行購房,在2023年9月之後政策放寬了(而且現在首付只需用20%,無需社保就可以進行購房)。在深圳的這幾年中我也感受到了城市帶來的熱血和快節奏的生活,工資相對來說也比較高(但我記得自己當時在深圳實習時的工資也只有3.5k),經過一次跳槽,我的工資漲到了以w為單位。我第一時間給媽媽打電話,顛覆了她對我的認知。

開始打工
剛開始工作時,我經常瀏覽部落格園,渴望獲取知識。我盲目地追求技術,經常看到大佬們在群裡討論某個技術,我就立即去學習,但只是學會了如何使用,對技術原理一無所知。我像一隻無頭蒼蠅一樣,剛剛畢業時看到別人在討論微服務閘道器(Ocelot),就參考別人的部落格寫了一個Demo,覺得自己可以了。現在回想起來,我當時有點幼稚。實習半年後,我意識到高大上的東西並不實用,工作中更需要關注業務理解和編碼基礎。於是我在B站學習了C#的基礎知識,才發現學校沒有教過的特性、反射、攔截器、委託、表示式目錄樹等等。實習後半年,我一直在加強基礎知識,每學會一個知識點,都感到非常清爽。原來這才是我渴望的知識。在工作中遇到一些技術難題時,我也能遊刃有餘。後來,我開始學習C#內建方法和一些優秀的專案的原始碼。我將學到的知識點寫成部落格,以防忘記,並養成了編寫部落格的良好習慣。

我跳槽
在那裡實習了一年結束實現期。我還記得技術總監找我談話,說我表現很好,公司對我的能力非常認可,將我的工資從之前的3.2k漲到了6k。但是告訴我實習期結束後會有三個月的試用期,工資只有80%。我對此感到不高興,但沒有說出來,而是去外面面試。在準備簡歷的這幾天裡,公司突然提前給我轉正了,但已經晚了,我的簡歷都已經準備好了。於是我出去面試,當時我拿到了4個offer,最低的工資都達到了8k,我還幹個毛,上午簽完轉正合同,下午提離職 光速離職進行中,南山西麗報導去。

新公司
在新的公司,我結識了新朋友,至今我們仍保持聯絡。我的領導非常好,經常與我保持聯絡,幫助我解答困惑。我們使用的技術非常新穎,我第一次接觸到了微服務。我們為XX銀行開發了一套機房環境動力監控系統,學習了很多新技術,如Redis、CAP、Kafka等微服務架構。我們編寫了xshell指令碼,實現了一鍵部署,因為我們需要將系統部署到全國各地的XX銀行機房,這樣實施人員只需要複製安裝包,執行安裝指令碼,就可以下班了。在這裡,我學到了很多東西,特別感謝我的領導。說實話,我也不清楚為什麼最後離職了。公司在西麗有宿舍,不用支付水電費,基本上只需要自己負責吃飯,基本上沒有什麼花銷。領導對我也非常好,現在回想起來還有點迷茫。最後,我只能歸結為我想回長沙買房,本來我計劃買房後回深圳,但現在有了孩子,所以不捨得哈哈。

回長沙打工
回到長沙後,我加入了一家加班很嚴重的公司。基本上每天工作時間都在11個小時左右,整個部門的開發人員都是如此。由於與直接領導 理念不合,我在這家公司工作了8個月後最終選擇離開。實際上,我理解大家都想向上爬,追求更高的收入。我們很多人也知道這種加班的狀態不可持續,但沒有人能夠改變這種環境,最後大家都隨波逐流,被加班文化捲走。

結婚&生子

2022年6月23日和我老婆辦理了結婚手續,2022年11月19日迎接了可愛的女兒的誕生

是的,我是奉子成婚的。實話實說,當我得知自己即將成為父親時,我真的很迷茫。我曾經想過要不要做人流,因為我擔心自己無法承擔起一個家庭的重任。但是,經過深思熟慮,我決定承擔起這份責任,成為一個父親。在2022年11月19號,我迎來了自己的小棉襖。那天,我一直守在老婆的床邊,看著她和孩子睡覺,直到凌晨4點才想起來自己還沒吃晚飯。那一天,我真的很開心,也很激動。

買房&裝修

因為我買的是二手房,裝修我是自己找人裝修的,就結合我自身理解,講一些個人建議。

買房

我一直關注著長沙的房價,平均價格在1w左右,我自己回長沙租住在榮盛的一個小區,三房兩衛一廳一車位每月2330元,居住了一年多對這個小區還是比較滿意的。我在安居客上檢視小區均價在8.5k左右,當時我覺得這個價格還算低的,我原本計劃著存30w首付,買一個100平的房子,看到這個價格我就有提前買房的衝動了(首付還沒有存夠)。我聯絡了一位中介帶我去看房,我們小區的房子有的人掛8k/8.5k/1w/1.1w,其實這些價格都是他們自己高估值,都可以砍價。開始時我這個房子113平90w,掛了幾個月都沒有成交,後來減少到85w,但是賣家想盡快回款,讓我使用商貸少一萬,就是84w,當時我們就去中介公司談了一下,我覺得這個價格還可以再少一些,我就直接說83w,如果可以就現在籤合同(房子的戶型是我和我老婆很喜歡的),從看房子到籤合同只用了一週時間就成功上車了。

我們小區我經常看法拍房有一次我沒有錢97平 65w被別人一拍拿下了。買二手房需要關注房子是不是滿五唯一,滿五唯一不需要個稅,可以省1w多。
不過現在看來我賣這個房子並沒有優惠多少,買的還是比較急了,現在長沙放開了房產證滿4年就可以交易,我們小區最近120+多套掛牌銷售,之前只有一期的房子滿五年了。買完房之後也聽我老婆說小區有人因為缺錢,把自己裝修好的房子按照購房時候的價格出售了,現在我們小區掛牌價也到了8k左右了,說明小區急賣的多了,賣方著急用錢,就不會對自己的房子抱有一個高估值。可以看看法拍房的估值價格,知道這個小區市場低價是多少,根據自己談判增加金額,我感覺我這個房子當時說80w也可以買到,因為房東缺錢,急需回款。房子成交價格是83w 中介公司收取2%手續費,還想收我金融手續費就是幫忙貸款的費用2%,我當時就不願意了,我們可以自己找銀行進行貸款,為啥你幫我貸款還要收我1w多,中介一直說防止徵信最後貸款下不來,定金就收不回了,我的徵信這麼好,我發泡反正就是不聽。最後就是我自己在招商銀行進行貸款的,省了1w多,其實中介收取的2%手續費也可以談,我不懂吃了虧,因為這個房子其實在很多中介都掛了,那家給我更低找那家籤就好了,還有就是其實如果可以自己找到一手賣方,就不要走中介公司省掉手續費,如果你足夠勤快,中介其實都不用,中介只是利用資訊差賺錢。一開始我自己找了一手賣家相同的戶型110平二期送車位,房產證滿4年,沒有滿5年不能過戶,只需要83.8w,我不敢買,但是最近放開正常房產證滿4年就可以過戶了,不然我自己找的才是最好的選擇。

為什麼大家都是買房買房,沒說要裝修呀(裝修花費可以再付一套首付了)
我剛剛買完房子,也是想找裝修公司,裝修但是報價全包都是20W+ ,本來想半包給裝修公司但是一般別人不願意接半包利潤太少,不願意做,我就自己就沒日沒夜的在抖音,B站檢視清包(自己找裝修工人),週末的時候就和老婆在小區溜達,留意別人裝修工人資訊,最後磕磕絆絆的花了17w把房子的事情弄好了。

幸福時刻

日請求量1億+的物聯網專案

這個已經是已經很成熟的行業了,我只是因為朋友自己的公司不喜歡用別人公司系統,而開發的。2022年正式立項一共開發了兩個版本V1版本,V2版本。從一開始投入100個使用者進行測試,到現在100w使用者,30w+線上使用者,前端&後端都是我一個人編寫,兩年的時間我呼吸過無數個凌晨的空氣,在不同使用者體量級別,我也遇到過多次挑戰。

00後程式設計師,2023年終總結

技術棧(Mysql & ES & Redis & Minio 都是自建服務)

1.前端: Uniapp 編寫H5 Vue3 編寫管理後端
2.後端: .Net 6 .Net 7 Java
3.資料庫: Mysql + FreeSql
4.閘道器: ApiSix + Nginx
5.快取: Redis + FreeRedis
6.大資料儲存: Elasticsearch
7.APM:Skywalking
8.訊息中介軟體:Kafka
9.部署環境:Linux + Docker
10.自動釋出:Shell 指令碼
11.定時任務:Quartz
12.裝置互動協議:Mqtt Http
13.檔案儲存:Minio

遇到過的問題

Http協議裝置通訊5秒一次互動擊潰服務

一開始我們上線的裝置是http 協議進行裝置資訊互動,這個廠家預設心跳是5秒一次,一開始上線10,100,1000個使用者就發現問題,服務假死,Swagger 頁面都打不開。這個問題差點的就擊潰了我的道心,解決方案是控制裝置心跳時間設定為3分鐘,但是廠家的程式設計師有點傻,自己的文件寫了設定心跳指令,最後自己居然沒有實現,最後使用MemoryCache 快取針對裝置進行限流,3分鐘之內只能透過一個請求,最後這家廠商上線5k裝置,我就要商家換廠家了哈哈。換成支援Mqtt協議的廠家

MQTT裝置流量服務記憶體激增

當使用者日活體量到W級別的時候,出現伺服器記憶體報警,我發現32G記憶體佔用99%,我所有服務全部容器化了,使用docker stats命令檢視到裝置流量服務佔用20G記憶體,我直接重啟了該服務記憶體佔用馬上就下來了,但是過了一個晚上,我再看裝置流量服務 記憶體又到13G了,之前在園子裡也經常看,別人定位某個服務假死&記憶體&CPU飆升案例。
Dockerfile檔案 新增安裝 dotnet-dump&dotnet-trace

RUN dotnet tool install -g dotnet-dump \
    && dotnet tool install -g dotnet-trace

進入容器內部docker exec -it {容器Id} /bin/bash
檢視容器內部執行程式Id dotnet-dump ps
透過指定的程式id建立dump檔案 dotnet-dump collect --type heap --process-id <ProcessId>
我將dump 包放在本地,直接使用VS 開啟分析,發現MQTT訊息持有了10G佔用,也就是說我的記憶體都是被MQTT 訊息吃掉了,檢視kibana皮膚發現裝置訊息消費出現了延遲了幾個小時。
最佳化之前的程式碼:

          _mqttClient.ApplicationMessageReceivedAsync += arg =>
          {
            // .....訊息消費程式碼....
          }

單個執行緒排隊消費訊息,那我肯定是加執行緒呀,直接衝就完了。
最佳化之後的程式碼:

        _mqttClient.ApplicationMessageReceivedAsync += async arg =>
        {
            await semaphore.WaitAsync();
            _ = Task.Run(async () =>
            {
                  // .....訊息消費程式碼....
            }).ConfigureAwait(false);
            return;
        };

確實在這一段時間內,解決了記憶體激增的問題了。

學習連結:https://www.cnblogs.com/huangxincheng/p/17865096.html

Redis 服務不可用

好景不長,我看商家一天幾千單的賣,日活使用者很快突破10w大關,端午節的一箇中午,我收到了系統服務告警通知,裝置流量服務掛了,服務心跳介面訪問卡死,kibana皮膚沒有日誌輸出了,我進入docker 容器內部一直提示
【XXX】Next recovery time: 05/20/2023 15:14:41 (Connect to redis-server(XXX) timeout)
【XXX】Next recovery time: 05/20/2023 15:15:06 (Connect to redis-server(XXX) timeout)
【XXX】Next recovery time: 05/20/2023 15:15:31 (Connect to redis-server(XXX) timeout)
【XXX】Next recovery time: 05/20/2023 15:14:56 (Connect to redis-server(XXX) timeout)

直接痛苦面具出來了,重啟服務都沒有用,進行了很多測試,一直懷疑是Csredis 的問題,各種連線引數調整,都沒有作用,後面講CsRedis全部換成FreeRedis,還是不行裂開(StackExchange.Redis 也嘗試過),最後刪除Task.Run(()=>{})單執行緒執行,啟動多個裝置流量服務 ,修改裝置上送時間為10分鐘一次。這個問題嘗試了半個月的測試,最後定位為執行緒開啟過多了,最後程式碼修改為

        // 開始一個80個執行緒訊號量,控制可以進入多少個執行緒
        var semaphore = new SemaphoreSlim(80);
        _mqttClient.ApplicationMessageReceivedAsync += async arg =>
        {
            await semaphore.WaitAsync();
            _ = Task.Run(async () =>
            {
                try
                {
                   // 處理程式碼
                }
                catch (Exception e)
                {
                  // 處理程式碼
                }
                finally
                {
                    // 歸還執行緒
                    semaphore.Release();
                }
            }).ConfigureAwait(false);
            return;
        };

Csredis Issues
FreeRedis Issues

支付回撥失效(查單補償)

我們需要開啟一個定時任務非同步查詢微信訂單介面進行補償。V1 版本系統主要依賴微信非同步回撥請求,接收到支付成功資訊。但短板在於,如果微信沒有支付成功的非同步回撥,訂單就無法正常完成。之前客服反饋過,V1 版本過於依賴微信支付成功主動通知,如果非同步回撥通知notify_url不可用,支付通知將永遠無法收到。

參考地址

Mysql 資料庫連線耗盡

這個問題也是最開始自建mysql,當體量劇增出現的問題Too many connections mysql 預設最大連結數是151,允許的最大連線數是 16384,問題就是當前系統執行需要佔用更多的連結數,處理這個問題我們只需要調整Mysql 最大連結數數量,設定服務連結字串Max pool size

max_connections 設定多少合適?

理想公式:

伺服器響應的最大連線數值佔伺服器上限連線數值的比例值在10%以上,如果在10%以下,說明mysql伺服器最大連線上限值設定過高。
檢視伺服器響應最大連線數
show global status like 'Max_used_connections';

驗證最大連線數值是否合理
Max_used_connections / max_connections = 215/1000 ≈ 21.5%

Mysql 主從模式延遲過高【未解決】

我使用的是binglog 訂閱進行主從同步的,目前這個問題沒有解決,暫時先挖一個坑

Uniapp H5 提示網路不可用請重新整理

當系統使用者越來越多了,就有客服反饋h5出現,如下的錯誤頁面,一般讓客戶重新整理頁面就可以正常顯示,但也有客戶死活不行,最後壓力給到我這邊。最後根據官方給出解釋,我將前端協議改成Https 協議就好了

官方解決方案

ApiSix 無法使用Https協議

這個真的很坑人,因為之前的問題,我必須讓前端使用https協議,但是我的閘道器協議是http,而且走的是9080埠。我按照官方文件嘗試了很多方法,但都不行。後來我發現ApiSix的9443埠是https協議,我就配置了證照,但是一直不生效,這個問題困擾了我好幾天。最後我在GitHub上提問,有個建議讓我升級到最新版本,這樣就解決好了。
Issues

展望未來工作的第六年

回想工作的這三年,從行業窺探者轉變為行業前行者,從行業小白到行業大白,剛工作時曾經也幻想過,三年後的自己,技術是不是很厲害了,自己有沒有買車,自己有沒有買房,自己有沒有月薪過W,自己有沒有女朋友,自己有沒有一夜暴富。

三年前的自己,看現在的自己,一定會感到自豪吧,從兩袖清風,到褲帶空空也是一種幸福,在這裡我想對三年後的自己說,希望能夠一直保持著熱情&積極且主動,保持著一顆學習的心,對於技術保持一顆追求原理精神,自己也需要多學習關於技術以外的知識,自己多抽出一些時間陪伴家人。

三年後的自己立下Flag

  • 報考駕照
  • 買車
  • 看20本書(技術或者軟實力)
  • 自己的技術更有深度
  • 保持運動(目前是每天腳踏車通勤)
  • 物聯網路卡系統能夠盈利

相關文章