1. 程式人生 > >一個半路出家十年Java老程式設計師的真實經歷

一個半路出家十年Java老程式設計師的真實經歷

我是一個老java程式設計師,現在基本告別編碼時代了,當然我現在還在寫程式碼,不是為了老闆寫了,是自己在創業。回想起這麼多年的人生路,作為一名老程式設計師感慨頗多,尤其是作為一名半路出家的程式設計師,其中的滋味更是感慨萬分。下面我就自己說說我的經歷,也許會給未來碼農一點啟發。

當時真是太高興了,終於拿到了自己夢寐以求的本科學歷。其中付出的辛苦,只有自己知道。每天要騎一個多小時的路去聽課,而且由於南大那個講訊號與系統的老師實在太差了,根本聽不懂不說還是個結巴。我和同學一起跑到天津師範大學去蹭課。要說天津師範大學的老師講的真不錯,人也不錯,其實他是看出來我們是蹭課的,但看到我們這麼臭不要臉的,下大雪都不遲到,也就睜一隻眼閉一隻眼了。

上班第一天沒什麼事情,就是裝機器,搭建開發環境。我也很輕,因為哪天是星期五,星期六日就休息了。折騰了一上午,終於吧專案從cvs上下載下來並在本地執行起來了。當時版本控制就是用的cvs,哎,培訓的時候cvs也沒講,我倒不是說這些東西不能自學,但是培訓費花了9800,就學了這麼點東西,根本不夠用的,太不值了,感覺真的很坑。2003年的9800啊,不是一筆小數字啊!一看那些hibernate,spring的配置檔案,馬上就暈了。當時買了本孫偉琴的hiberate學的挺慢的,spring接觸的也不多。終於快下班了,經理對我說,明天一起來加班吧,專案挺緊張的。我當時就暈了,我擦了,第一天上班就加班,我說,好,沒問題!

第二天早上4點多,我突然驚醒,其實我一晚上都沒怎麼睡覺,想想明天要寫程式碼就特緊張,怕完不成任務又讓人開了。穿衣服爬起來,在床上開啟電腦,弄了本書開始研究分頁,說實在的分頁對於一個沒有開發經驗的java程式設計師來說,確實是有點難度的。我想做專案肯定會有分頁的,到了6點多,終於研究的差不多了。洗漱吃早點,去上班了。果然,第一個任務就是一個模組的增刪查改,我模仿其他模組做了一天,hibernate的分頁還是比較簡單的。就是js有點麻煩,有個地方搞不定,還讓專案經理幫了下忙,下班的時候,經理對我說,怎麼樣,我說還行,寫完了。於是,他檢查了下我的模組,看了下程式碼,有對程式碼中變數的命名,程式碼註釋等格式問題,做了指導。下班後,我長出了一口氣,終於找到工作了。兩個月就過了試用期,工資4000.

在這裡還是要推薦下我自己建的Java學習裙:574加上二五三再加上075,群裡都是學Java開發的,如果你正在學習Java ,小編歡迎你加入,大家都是軟體開發黨,不定期分享乾貨(只有Java軟體開發相關的),包括我自己整理的一份2018最新的Java進階資料和高階開發教程,歡迎進階中和進想深入java的小夥伴
這是我的第一份工作,萬事開頭難,工作中遇到了很多的困難,隨時面臨新的挑戰,我覺得只要有毅力,這些困難都不是問題。兩年後我跳槽了。去了一家國企做電力系統的專案。這個公司做了兩年,感覺國企的氛圍實在真的是受不了,專案很緊張,還要讓你去開會,聽什麼領導講話。講我們集團以後要怎麼怎麼樣,他大爺的,我手裡的活明天要交差,幹不完要加班,加班幹不完要通宵,哪有功夫聽你瞎BB。大大小小的會議特別多,領導說起話來特擺譜,我進公司兩個多月,一直以為公司的副總是老總,公司的老總是副總。因為每次開會的時候,副總說起話來特像老總,老總到是笑嘻嘻的,還老徵求副總的意見,但是副總說話都是命令式的,從來不問大家有什麼意見。後來跟同事聊天才知道,我搞反了。也許是副總譜擺的太大了,最後讓老總給撤了。

2007-2008年正好趕上網際網路的泡沫,整個世界經濟危機,中國也受到影響。帝都的寫字樓裡,也經常聽到有的公司在裁員,有的在降薪。我當時想著迴天津,在家裡找份工作,要趕緊搞物件,結婚了,家裡也是催的緊。賺錢已經不是首要目標了,程式設計師都是單身狗,難道這就是宿命。我辭去了北京的工作迴天津找工作。2008年的天津軟體公司特別少,在網上就很少,工資也特別低,回家找了兩個月打擊很大,工資太低了,而且都在華苑軟體園,特別遠。很無奈,我又回到帝都,拿著鍋碗瓢盆,再次北漂。

後來在一個小公司幹了兩年,給農業銀行做考試培訓系統。突然一天接到老大的電話,就是我第一份工作的專案經理。他說他在做電商是技術負責人,讓我過去幫他,特別高興。去上班的頭一天又見到了以前的同事,大家又在一起了。真不知道我走後發生了什麼,是不是被馬雲擠垮了。在做電商專案的時候,確實應用了很多新技術,主要是解決高併發業務,比如秒殺之類的。當然那個時候主要是使用mysql的叢集和主從同步,也就是在那個時候,我接觸到了運維,並且參與到了網站的運維工作。當時使用的是Memcached作為快取,ActiveMQ作為訊息佇列服務,單點登陸、首頁靜態化、lucene等技術都接觸到了,並且在應用到了實際工作中。在這個公司我學的了很多java網際網路開發的技術。

2011年底,我離開了這家公司,我想向上努力,我需要得到得到質的提高。這回找工作我不再面試程式設計師了,而是系統架構師。終於,我找到了一份系統架構師的工作。具體什麼單位不能說,因為是涉密的,我們上班都不能上網,也不能使用U盤。我親自架構了整個系統,我在整個專案組中算年齡比較大的,有一個領導大家都叫他猴哥,可能跟我差不多,還有一個經驗豐富的程式設計師,不過他是c語言的。我們需要將飛機傳送到地面站的報文進行解析,這個是c語言來完成的,然後存放到資料庫中,由java程式進行處理。運用了google地圖+js製作了飛機航線系統,解決了晨昏線和飛機轉向演算法,當然,這個演算法是請教了專家,我就是通過程式實現他的演算法。我負責技術選型,當時選擇的是ssm,ssm和ssh我糾結了好久,最終選擇了ssm。事實證明我的選在是正確的,現在的系統基本是ssm的摒棄了ssh,struts2這種多程序的mvc框架註定了它不適合處理大併發專案。後臺使用springscurity做的許可權系統,我負責核心模組和基礎工具類的開發,資料庫的設計,伺服器運維優化。許可權系統是每個專案的核心模組,整個許可權系統,單點登陸功能是我獨立開發的。當時由於還沒有出現dubbo,spring cloud這種分佈服務是架構,所以採用的是Webservice作為解決方案,確實存在一定的效能瓶頸。xml傳輸還是有點慢。但是基本滿足了專案的整體需求,最後通過了專家組的驗收。這個專案做了五年。

現在來總結從事Java一到十年必須要了解的技術知識點,這對你的職業生涯會有很大的幫助

感謝大家能看完我這麼長的分享,希望以下的學習路線能對你有幫助

關注我:私信回覆“架構資料”獲取往期Java高階架構資料、原始碼、筆記、視訊

Dubbo、Redis、Netty、zookeeper、Spring cloud、分散式、高併發等架構技術

設計模式

設計模式是可複用面向物件軟體的基礎,學習設計模試是每個程式設計師從菜鳥走向大神的必經之路,巧妙地運用設計模式可以使我們的程式碼看似複雜實際簡潔、複用性更高、更容易被別人理解等好處,同時也是學習軟體工程的基礎和必然。
在這裡插入圖片描述

併發程式設計

主要培養程式設計者深入瞭解最底層的運作原理,加強程式設計者邏輯思維,這樣才能寫出高效、安全、可靠的多執行緒併發程式。
在這裡插入圖片描述

開發工具工程化

通過一小段描述資訊來管理專案的構建,報告和文件的軟體專案管理工具。程式設計師的戰鬥,往往不是一個人的戰鬥,我們如何在一個平臺下高效的去重,進行程式碼review,對功能進行調整,debug,做到在統一的規劃下步步為營,混亂的堆程式碼的過程中找到自己的記錄。這一切都依賴於有效的工具。

在這裡插入圖片描述
效能調優

我們不僅僅對專案要運籌帷幄,還要能解決一切效能問題。只有深入學習JVM底層原理,Mysql底層優化以及Tomcat調優,才能達到知其然,知其所以然的效果。除了效能優化之外,也能提供通用的常見思路以及方案選型的考慮點,幫助大家培養在方案選型時的意識、思維以及做各種權衡的能力。
在這裡插入圖片描述

原始碼分析

程式設計師每天都和程式碼打交道。經過數年的基礎教育和職業培訓,大部分程式設計師都會「寫」程式碼,或者至少會抄程式碼和改程式碼。但是,會讀程式碼的並不在多數,會讀程式碼又真正讀懂一些大專案的原始碼的,少之又少。這也造成了很多錯誤看原始碼的方式。

那要如何正確的分析原始碼呢?

我們的目標應該放在最常用的框架上面,下面就介紹兩個:一個是Spring,另一個是大家用來覺得一直不怎麼出問題的Mybatis。

△spring原始碼

在這裡插入圖片描述
△mybatis原始碼
在這裡插入圖片描述
分散式架構

隨著我們的業務量越來越大和越重要,單體的架構模式已經無法對應大規模的應用場景,而且系統中決不能存在單點故障導致整體不可用,所以只有垂直或是水平拆分業務系統,使其形成一個分散式的架構,利用分散式架構來冗餘系統消除單點的故障,從而提高整個系統的可用性。同時分散式系統的模組重用度更高,速度更快,擴充套件性更高是大型的專案必不可少的環節。

在這裡插入圖片描述
分散式架構(一)
在這裡插入圖片描述

分散式架構(二)
在這裡插入圖片描述

微服務

關於微服務架構的取捨

在合適的專案,合適的團隊,採用微服務架構收益會大於成本。

微服務架構有很多吸引人的地方,但在擁抱微服務之前,也需要認清它所帶來的挑戰。

需要避免為了“微服務”而“微服務”。

微服務架構引入策略 – 對傳統企業而言,開始時可以考慮引入部分合適的微服務架構原則對已有系統進行改造或新建微服務應用,逐步探索及積累微服務架構經驗,而非全盤實施微服務架構。
在這裡插入圖片描述

B2C專案實戰

要想立足於網際網路公司,且能在網際網路浪潮中不被淹沒,對於專案的開發實戰演練是不必可少的技能,也是對自身能力的一個衡量,有多少的量對等於獲得多少的回報。看似簡單的一個專案需求圖譜,其中的底層原理,實現原理又能知道多少?你搭建一個完整的B2C專案平臺到底需要多少知識?這一切都是需要我們考量的。

在這裡插入圖片描述
關注薇信工宗號:程式設計師大牛,回覆“Java”獲取往期Java高階架構資料、原始碼、筆記、視訊

Dubbo、Redis、Netty、zookeeper、Spring cloud、分散式、高併發等架構技術

往期架構視訊截圖

在這裡插入圖片描述

在這裡插入圖片描述