轉眼畢業(yè)七年,轉眼工作七年!一路走來,有過坎坷,有過煎熬,有過放棄,但更多的是經歷這些復雜情緒和心態(tài)背后的收獲。
作為一個從事編碼技術的“老人”,借此機會談談自己的一些心得。
一、關于基礎
千里之行始于跬步,萬丈高樓起于夯土,高手都從新手來,所以,基礎一定要夯實。
對于基本知識,一定要掌握牢固,不但要知其然,更要知其所以然,還要知其為何所以然。只有深層次的挖掘這些知識,才能做到對技術的真正掌握。
比如Java,基本數據類型有哪些?對應的自動包裝類型是什么?它們是否線程安全?在并發(fā)情況下該怎么使用這些類型等等,這是知其然的過程。并發(fā)情況下它們怎么保證數據的準確性?即,它們各自實現的原理是什么,這是知其所以然的過程。而,為什么要使用這樣的原理,這樣原理為什么能解決這樣的問題?即,為什么設計成這樣?這是知其為何所以然的過程。
在學習基礎知識的過程中一定要吃的通透才好!
二、關于框架及原理
這部分內容屬于基礎知識的拔高,不外乎將基礎知識(不只語言基礎知識)和設計模式做了組合搭配處理。比如我們常用的Spring框架,Mybatis框架等等,說白了就是將一些共同的技術進行了封裝,然后只暴露出一些業(yè)務接口來方便開發(fā)者使用。
比如Spring的依賴注入,可以簡單的理解為反射+工廠模式的組合。
當然,如果更深層次的挖掘框架原理,以及實現,絕對會受益匪淺,不僅能學到框架原理及實現,更能看到優(yōu)秀的代碼及規(guī)范,這對日后的編碼絕對是大有裨益的。
所以,在研究框架的時候,建議多看一些相關的書籍、博文的同時,也可以看看框架的源代碼,包括各自使用的語言,比如Java。
三、關于業(yè)務
很多喜歡鉆研技術而不喜歡業(yè)務,這是大多數技術從業(yè)人員的心態(tài),因為業(yè)務常常是N個CRUD的組合,寫多了也就沒有新鮮感了。
技術就不一樣了,同樣的一個功能,有不同的實現方式,哪種才是更高效、更簡單的實現方式?這對程序員來說才更有吸引力,如果能找到新的解決辦法,往往更有成就感。
可是,沒有業(yè)務的技術,就如同沒有汽油的汽車,寫的再好看也沒用。所以業(yè)務往往是錘煉技術的最好方式。
身邊很多程序員的共態(tài)就是,這個業(yè)務簡單,一個CRUD搞定。說這話的程序員要么很牛,要么很菜,而往往99%的都很菜。
對于一個看似簡單的業(yè)務,你真正的吃透了么?
比如提供一個對外接口,獲取數據庫某表的數據。你會怎么做?
很多說,這個簡單的要命,寫給接口,查數據庫不就行了。這是普通的程序員的方案。
中級的程序員會怎么設計實現方案?
1、先查緩存,如Redis、mangoDB等,如果沒有再查數據庫。
2、對查詢數據做限制
高級的程序員會怎么設計方案呢?
1、 獲取什么業(yè)務的數據?
2、 敏感 or 不敏感?即,是否需要脫敏處理
3、 數據量有多大?后期增長量如何?確定是否需要使用緩存?使用什么類型的緩存?是jvm還是redis等緩存?還是使用elastic search,更或者使用Hbase等。如果必須使用MySql數據庫,那么該表是否需要加索引?什么樣的索引?
4、 接口請求頻率是什么?即,每分鐘請求多少次?
5、 異常怎么處理?
6、惡性或者類似惡性(并非故意刷接口,但是由于某些原因,比如前端的定時任務沒有正常結束一直請求后臺接口)刷接口該怎么辦?
7、 是否可以提供分頁查詢?
8、 接口日志該怎么打?是單獨一個日志文件?還是共同使用某個日志文件?
所以,真的是業(yè)務簡單就學不到知識么?顯然并不是。
思維如果不能提升,技術也不會提升。這只是一個簡單的例子,而對于更復雜的業(yè)務,往往也需要更復雜的處理邏輯??梢哉f,每一個看似簡單的業(yè)務背后,都有一個值得深挖的技術方案。
業(yè)務很重要,只有真正明確了要做什么?才能真正的達到業(yè)務的預期甚至超預期的效果。否則,就是不斷的迭代以及l(fā)eader、同事對你的不認可。
業(yè)務,最終是需要細致化的。
四、關于優(yōu)化
你的代碼是否符合規(guī)范?至少有注釋(寫代碼不寫注釋的人都是腦殘)。很多時候定位問題,以及項目交接的時候,不寫注釋梳理起來真的很費心。不是別人不會看代碼,你寫的代碼又不是牛逼到飛起,但是從頭梳理起來真的很耗時。
別做缺德事,所以代碼加注釋。
有了注釋,代碼是否格式化?即,是否整齊。
在上面的基礎上,代碼的性能怎么樣?是否能進行優(yōu)化,如果你學過深入Java虛擬機,你就應該知道,方法中的變量屬性等等的存儲是否合理。
日志打印是否有效合理,即不會打印一些無法定位具體問題,且無效的日志。
方法執(zhí)行完畢后,是否會被虛擬機回收。
提供的接口或者服務是否會發(fā)生超時異常等等
寫在最后
平常多思考,多學學身邊技術大牛的工作方式,以及他們解決問題的方式,總有一天你的技術也會突飛猛進。