1. 程式人生 > >2018年終總結-從我所在的團隊回首一年技術變遷

2018年終總結-從我所在的團隊回首一年技術變遷

目錄

前言

今天是2018年的最後一天,獨自一人關上房門,靜坐回想一年來的總總,當作總結吧。
作為傳統的it公司,不是網際網路企業,能逐漸轉型到各種流行的技術,不容易。如果剛好看到此文章的您是網際網路公司的,請不要見笑。

微服務

spring cloud

微服務近兩年很火,特別是spring推出了spring cloud後。2016年用的人不多,所以市面只是零星出了幾本書籍,到了2017年,經過了一年多的使用,用的公司多了,書也多了,2018年出了更多的spring cloud書,雖然很多內容相似,但也可以看出火爆。

版本更新也非常快,從之前的config+eureka+zuul,到今年zuul從1升級2,但spring cloud官方卻推出gateway,並且不支援zuul2。

不管怎樣,我終於用spring cloud實現了一個系統。它涉及寫程式碼的不多,更多的是配置。而大部分的配置,都是我來弄的,也算是一種小幸運吧。

有些奇怪的是,不少的人把微服務和spring boot總拉到一塊,雖然你要使用spring cloud就必須得使用spring boot,但無論如何,boot只是spring的簡化與整合,它為什麼是微服務呢?比如市面上有一本書名為使用spring boot構建微服務;還有一次會議上,一個經理說:前臺用vuejs實現,後臺咱們就用微服務實現吧,呃,不需要用spring cloud這麼複雜,就用spring boot吧。

可能大家想說的是RESTful api吧,這個spring mvc裡就有了,並不是真正的微服務,可能錯的人多了,這樣稱呼也是對的吧。

dubbo

dubbo是很早就有了,2015年的專案我就接觸過,雖然我在專案裡沒有真正的寫dubbo程式碼。搞不懂是dubbo推動了微服務還是微服務帶旺了dubbo。今年感覺dubbo也發展的不錯,也推出了spring cloud dubbo的整合。公司也有用,但是RPC寫起程式碼我自己覺得還是比較麻煩,定義interface,打成jar包提供給外。也許天生就沒有rest優雅,畢竟關注的是效率。

k8s

雖然聽說也提供微服務,但用起來好像更偏向於容器那一塊,今年我沒有機會接觸到,看看明年公司是否有機會給我弄弄這個。

其他

一個東西火了之後,一切都好說。華為也推出了微服務,有技術沉澱就是好,說弄就弄出來。晚舟被抓沒事,咱們技術跟上就行。

微軟也出了微服務,不過沒太關注.net發展,不是很清楚細節。

前端框架

Vue.js

今年公司大力在推。基本作為首要的前端框架,無論pc端還是移動端。大把大把的專案在用。用的基本都是Vue2,好在。1和2的差距還是有些的。如果在寫2的程式碼,拿著一本1的書在看,估計比較難受。Vue3也出來了,有什麼新變化呢?

和react、angular這三巨頭,react還是佔有率最大,但是增長勢頭卻比不上vue。vue有可能將來超越react嗎?雖然尤雨溪當時在google,但是畢竟是國人,現在也回來了,vue也入選osc了,如果它能厲害點,還是開心一點。開源中國去年它還排第四,今年居然是冠軍了。

layui

這名字。。。我總看成layer,或者和很多類似的一大把ui框架名字很相似:ligerui、easyui等等。但它竟然在2017年ocs排名第一!雖然今年倒退到第四,但是估計國內用的專案還是不少的。很多後端的人都說好用。

bootstrap

想不到這麼多年了,在ui、css上這框架還是這麼火。不知道和國內的同樣比較流行的element比如何,都是柵格系統。

這三個框架,今年都沒能深入弄,2019年我要在前端技術上再積累多一點,不要老搞後端的,不然領導分配個前端的任務給我我還不會,太丟人了。

SSM框架

終於轉型ssm了!你沒聽錯,我今年之前並不會spring和mybatis(很久前用過,包括hibernate,但是那時候都是配置xml的,這麼多年了,連xml裡是啥都不記得了)。

S所代表的spring已經基本都預設用spring boot替代了。第一個的S也早不是struts1或2,現在沒有新專案不用spring mvc了把?

spring各種註解,學起來很爽。mybatis確實沒有hibernate有技術含量,不過,好用就行了,應對複雜業務。

資料庫

接著,該輪到資料庫上場了。

mycat

mycat在2017年還是很不錯的,但是在今年卻連osc的前20都進不了。可能大家確實覺得bug有點多吧。我用了了父子表,竟然有事務的bug,想該原始碼,又不知道怎麼改,專案進度壓力在那,沒時間慢慢看。後來放棄了父子表就好了,雖然要xml里加個rule並且不能關聯表查詢。

QQ群也是一個莫名其妙的存在,入群要交30元。我很驚訝一個開源的軟體要交錢入群。雖然我不知道緣由。

但作為國內的開源分散式mysql解決方案,並且基本是唯一的解決方案,還是不錯的。我很想知道,大家是怎麼用mysql的?不用mycat,難道都是自己公司造一個輪子,大家都這麼厲害?

mysql

我今年終於認真的用mysql進行開發了,之前幾年都是在打醬油。細細研究,和oracle差別巨大。建表時每個欄位的定義都有講究,還有json格式,json,是一個好東西,出現在各處。

redis

五種資料型別我在一個專案裡用了四種,zset以後會有機會的。我從沒用過redis,也沒寫過程式碼,但是大家卻用我設計的redis來開發,還沒發現什麼問題,非常神奇,redis是一個好工具。叢集和非叢集還需要繼續學習,分別用Jedis和JedsCluster操作。

mongodb

同事在用,所謂文件,很多是json、或者圖片吧?明年看看是否可以接觸下。

訊息佇列

訊息佇列竟然單獨一章節,很神奇。多年前,只知道jms。

kafka和RabbitMQ還是選擇了前者。效率優先。rocketmq那些就更沒機會了。kafka的主題和分割槽怎麼定,我的經驗還是欠缺,多向同事學習,畢竟搞了幾十個還是上百個broker。大資料量,大併發才有意思。需要寫磁碟的,為什麼還能這麼高效?

Web伺服器

nginx

2018年apacke雖然繼續第一,但nginx也不弱,第二。而且增長勢頭第一。apache主要是國外php用所以才多吧?國內java的世界,估計nginx更火。

剛剛幾天前用了最新的1.14.2,前幾月還用1.12.幾,還有漏洞,nginx的發展也不慢。

細細看,功能還不少:反向代理、rewrite、快取等等。學習起來真的不比tomcat簡單,反而更難,特別如果用lua開發,基於openresty。

keepalived

開始弄,走了不少彎路。keepalived+nginx是最成熟的方案了吧,如果不用F5硬體負載的話。keepalived相對簡單很多,只要掌握了虛擬ip,和防火牆的配置注意事項。今年終於用上了這個不算新的技術,不錯。

tomcat、jetty、undertow

spring boot預設支援的三劍客。既然必須要用tomcat,那weblogic和Websphere就可以歇歇了。我真正需要拿起多年的tomcat6的書籍看看。雖然我在用的是tomcat9。

session共享是用tomcat cluster配置,還是用更高效的redis?都和Weblogic差別很大。

基於nio和少佔用記憶體,undertow和jetty也是可以嘗試。謝謝阿里的許進他們給我的一點提示。

程式語言

java8

終於用上java8了,不容易。原因大概就是spring cloud不支援java6。既然升,沒理由只升到7而已。可惜oracle馬上就說java8要收費。總不能停留在java8的某一個小版本吧?

公司也許會找人基於openjdk來一個的,我覺得。會不會找我呢?

或者改用go?net?不太可能。改了也沒啥,我也挺有興趣。

java8的lambda很有意思,在多執行緒、集合和列印日誌都嘗試了,除錯是一個麻煩事。java9和java10是不是都不太火?

python

大家搞機器學習和深度學習的都在談論,但我們也有人用來shell。是的,也是一個不錯的選擇,我也這麼幹了。比寫shell舒服很多。解析性的語言學習成本極低。適合搞數學的人拿來就用。

但是安裝包是一個非常麻煩的事情,jar簡單很多。python2和python3也在各個平臺不一樣。

es6、nodejs

程式碼裡大家寫的各種let、const、imort、require開始時把我搞暈了,我技術太差,要不斷學習。
本來想把nodejs放在web伺服器裡寫,想想又感覺不對。還是放這。
也許是nodejs推動了es6吧?如果沒有了nodejs的出現會怎樣?npm、webpack這些還會不會出現呢?不知道。我只知道es6裡的promise、暫時性死區等等很難理解,要不斷看書。

安全:Https、加密

這兩年越來越重要。幾年前是很少聽見https的,所以傳統的、技術落後的公司,也不會錯過https的技術浪潮。安全很重要。

買證書、在nginx上配置;又或者用jdk、openssl等生成自簽名。很好玩。

加密的領域,國內慢慢起來了,國密不比什麼aes、rsa差,中國人的數學本來就很好。就看規範、標準的制定和推廣策略行不行了。

我用sm4寫了一個jar,晚點打算用android裡很流行的混淆技術用Intellij混淆成abc;又用oracle寫了一個基於aes+填充標準5的別人看不見我原始碼的function,感覺很神祕嘛。可惜oracle裡沒有國密。

敏捷

開始搞敏捷了。很痛苦。天天晨會,卻沒有scrum裡的8小時,也沒有xp裡的兩個人一起寫程式碼可以偷偷懶。唉:)

DevOps

jenkins

好像開始用了,但是我等了一年,這位同事還沒有幫我配置好,沒看到。

sonar

一樣,白等了一年。

maven、nexus

早就用了,今年算是平民化了。Gradle算是頹下去吧?業界感覺勢頭不行的?
nexus各團隊也搭建不少。
maven我感覺自己精通了,其實還有很多不會的。

git

開始替代svn了。搭建了各種各種的gitlab。[git],這個讀音大家要讀正確哦。

持續整合

沒看到,估計在某個團隊的某個角落裡執行中。但沒有喇叭嚇我,沒有視覺化螢幕。

這些東東放devops不知道對不對,放在沒地方放,放這把。我對這些沒啥興趣,幾年前都弄過了,也沒什麼技術含量。

Docker

沒有不在用的吧?但我卻還不會。我對自己說:Danni,你要趕緊學啊。是的。
不然一下子要釋出100臺機器怎麼辦?
年初我就不應該傻傻的寫scp的shell,也不應該直接用eureka的rest api來啟停釋出。

我只是一個小小的程式設計師,也許看到的只是公司的冰山一角。可能還有更多更多的技術變遷。

個人總結

  • 設計模式&UML:像難馴服的馬,又像深奧的佛學,總是用過了又不記得了,除了最簡單的策略模式。不過,今年我還是成功用到了命令模式、模板方法模式、門面(外觀)模式、介面卡模式。簡單工廠就不算了。
  • 分散式:大併發時還是不太會。
  • sso:用的cas,很難,記不住。但是多看幾次,也就那樣了。
  • MAC、工具:Windows轉向mac了。eclispe也轉向idea,webstorm了
  • JUnit:在spring和mybatis裡應用自如了,但現在好像又忘了。。。
  • 工作流(ExtJS、DWR):前陣子放下了,沒搞了。太老的技術。。
  • TCP/IP、http:想不到這些基礎技術還是很有用。比如:https裡從哪一步開始加密?加密哪些資料?
  • Gitee:比github快太多,如果不是和世界接軌,我都不想用github。
  • 微信小程式、公眾號、app、H5:玩玩就好,我不是搞這個的。不過H5和css3還是要弄。
  • json、日誌:忘了這個了,雖然是個小東西,但是fastjson、gson、jackson、net.sf等,logback、log4j2等。還不少東西。
  • 數學:想不到還挺重要。特別加密、機器學習裡。特別線性代數。
  • 區塊鏈、機器/深度學習:看看書就好,留給公司的專職去弄。看那個馬上出版的《程式設計師2018》也許繼續會有。

2019立flag

  • 學docker,用起來
  • 寫vuejs程式碼
  • 寫redis(+protobuf)和kafka程式碼
  • 學國內的開源框架/元件,支援一下國內。什麼dubbo、layui、element、iview、mybatisplus,啥都行。
  • 大併發、分散式
  • 好像怎麼明年目標這麼小?算了,還得幫公司幹活呢,也不能白養我,不能只顧著學習的。

希望這個flag能進到===true的程式碼分支吧!

2018.12.31 下午 Danni3 於家中