歲月劃過生命線(2016 年終總結 -季度之星)

歲月劃過生命線(2016 年終總結)

-季度之星

標籤 : coder


年假結束, 明天就要回到杭州, 回到我fighting的戰場. 回首過去的2016, 放縱了許多, 但也收穫了很多: n個項目、n個框架、第一個季度之星、頭像第一次登上CSDN以及第一個年度超越預期的KPI一位願意懂你並能夠真正懂你的人

回顧2016, 有兩個人不得不感謝: 團隊老大-康瑜@康康, 曾經的師兄-周盼@盼爺. 因爲康康, 我最終選擇了微店, 選擇了杭州業務技術部一個溫馨的團隊, 同時在工作上給予我支持和我鼓勵. 因爲盼爺的信任和幫助, 可以讓我放心、放手去幹, 去勝任一份可以從中獲取成就感的研發工作.

還好有時常總結的習慣, 2016年2~10月份的內容(如自身提高、項目、開源框架等部分內容)已經在歲月劃過生命線(16.02 ~ 10)中提到, 在此就不再贅述.


I. 工作 - 代碼

隨着獨立負責整個動態中心系統的時間愈久, 對項目開發/管理也愈有感覺, 處理線上/線下問題也越來越順手, 但所做的事情也越來越複雜、越來越零碎.
以前一個業務過來, 總會有師兄將項目按模塊劃分然後分配下來, 我只需要做好我負責的模塊並跟其他同學協調/聯調好就可以了. 當師兄轉崗和組內一個實習生離職, 整個動態中心繫統由內到外, 由上到下全部的責任都壓在了自己身上, 不再有人幫你劃分模塊, 不再有人在旁叮囑提醒, 任何雞毛蒜皮的小事(產品經理需要了解下實現原理、運營同學需要開通下權限)、任何線上問題(如線程池滿、連接池滿、Full GC頻繁)都需要你一力承擔, 24小時on call等待線上報警、客戶投訴.


1. 項目

除了年底接了一個一元奪寶項目, 參與開發抽獎開獎等功能之外, 幾乎沒再接其他大型的項目. 反而是已經已經接手很長時間的動態中心: 需要不斷的重構架構、優化實現才能滿足不斷增長的用戶量、數據量以及新業務的接入. 這段時間遇到了很多比較有意思的問題: 緩存連接池滿MQ消費速度過慢導致消息堆積MQ消費速度過快導致MySQL壓力過大MySQL壓力大/響應緩慢導致線程池滿觸發任務拒絕策略線程池滿導致新請求無法及時響應單臺Redis緩存由於數據量大導致響應緩慢必須切換爲集羣等問題. 由於這些問題只會在線上環境暴露, 因此解決起來非常棘手且緊急, 有時需要連續幾天加班/週末不休息地去嘗試新的解決方案. 在傳統的解決方案解決不了的情況下很多激進的優化方案也會被放到線上測試.

很多優化方案由於公司保密原因在此無法展出, 但有很多的思想借鑑了Java併發編程實戰深入理解Java虛擬機以及Java併發編程的藝術等幾本書, 感興趣的同學可以參考下.


2. 框架

除了曾在歲月劃過生命線(16.02 ~ 10)一文中提到過的Cacher原cache-annotation)、TouchScriptEngine三個框架在16年的最後一個季度都有非常大的升級改動外, 還將常用的業務/功能組件抽取/集合成一個類Guava的通用類庫組件jbox、基於JMX開發了一款VM監控工具-VMX, 不過由於後來在網上找到了Apache Sirona, 他能夠提供功能更強大、界面更簡潔、配置更簡單的監控方案, 因此也就沒有再繼續推VMX.

  • Cacher(原cache-annotation)
    最新版的Cacher借鑑了spring-cache很多特性: 基於SpEL表達式的條件緩存、多緩存產品管理、常量key緩存、統一key前綴…, 同時3.1版本的cacher默認支持從in-heap-cache到off-heap-cache到off-process-cache到disk-cache一直到cluster-cache的九款緩存實現, 真正做到拆箱可用.

    上圖ICache實現爲微店內部版本, 開源版本可能會有部分出入.
    project: https://github.com/feiqing/Cacher

  • Touch
    最新版的Touch除了刪除了基於web.xml的配置、開始支持基於classpath:touch.xmlhttp://www.vdian.net/touch.xsd的配置、支持屬性映射修改等功能外, 沒有其他大方面的功能性改進. 而是致力於在保持配置簡潔、對原代碼低侵入的同時提升Touch的性能以及降低對原系統應用的影響.

    project: https://github.com/feiqing/Touch

  • ScriptEngine
    最新版的ScriptEngine不再依賴一個統一的後臺, 而是開發了一款Idea插件, 可以在IDE內書寫JavaScript、Groovy、Java代碼直接發送到線上執行並拿到返回結果, 由於沒有了統一後臺的權限校驗, 因此在數據傳輸的過程中添加了加解密規則、使用Zookeeper提供服務自動註冊/發現, 在提升易用性的同時提升安全性.

    project: https://github.com/feiqing/ScriptEngine

  • jbox
    定製的線程池(擴展ExecutersThreadPool接口)、性能監控工具(Trace、RT、QPS)、對象字節大小SizeOf, 反射工具(List轉Map、List屬性抽取)、flood AB簡易測試框架、通用調用框架等.

    project: https://github.com/feiqing/jbox

最後公司年會又一次在三亞舉辦, high了幾天…


II. 非工作 - Body-Building

由於工作的壓力這段時間的讀書和body-building時間被壓榨殆盡, 但也利用週末和年假空閒讀了幾部經典, 並稍事鍛鍊.


1. 讀書

  • JVM
    我一直主張每位開發同學都要了解一些系統底層知識, 如JVM 、計算機系統原理… 哪怕不像撒迦(莫樞)那樣可以深入到HotSpot VM內部代碼實現, 但如果能夠了解其底層實現原理(如內存分配、GC原理、JMM對程併發的優化等), 則可以讓我們寫出對VM更加友好的代碼(提供更高性能).
    這方面我推薦深入理解計算機系統(未讀完(⊙﹏⊙))、深入理解Java虛擬機:JVM高級特性與最佳實踐兩部書以及併發編程網InfoQImportNew等網站的文章/視頻, 以及自己親手做實驗驗證、總結. 經過兩個多月的努力, JVM方面終於得以入門, 結合線上Server的配置以及曾經遇到過的問題組織了團隊內部的分享, 並總結出博客發表出來, 收到了不錯的反饋. 詳見我的博客JVM分類.

年會無聊時又發現一部VM相關書籍Java性能優化權威指南. 這部書將着眼點放了性能調優方面, 介紹了很多性能監控、分析、調優方法, 雖然也有JVM相關內容, 但行文方式與深入理解Java虛擬機有很大不同, 可以結合一起閱讀.

  • Effective Java
    瞭解JVM可以寫出對VM更友好的代碼, 而瞭解與Java語言深度結合的實踐經驗則不光可以寫出更高性能的代碼, 還可以使其更易於閱讀、易於擴展, 而Effective Java則將Java語言的最佳實踐經驗總結並展現在我們眼前(作者是Java Collections Framework作者, Google 首席Java架構師, 詳見你應當知道的Java牛人 v2.0). 雖然以前斷斷續續讀過其中部分章節, 但一直未能從頭至尾的吸收其精華, 因此就利用閒暇時間和年假假期好好的精度了一遍. 其中大部分章節(如類和接口泛型通用程序設計異常等)講解精彩絕倫, 但也有部分章節拖沓冗長、過於追求理論上的完美, 但瑕不掩瑜, 仍是非常值得一讀.

不過本書的中文版翻譯實在拙劣, 錯字連篇, 讓我誤以爲亞馬遜開始賣盜版書, 甚至幾位中文譯者是不是存心毀了這本書? 但翻閱原著, 發現原文行文也確實有些蹩腳難懂.


2. 鍛鍊

由於天氣漸冷、工作漸忙, 堅持了8個月的跑步沒有再繼續下去, 雖然也辦了健身卡, 但也只去跑了幾次步就沒有堅持下去了. 不過每週陪室友去學游泳倒讓放下許久的游泳又堅持了下來, 放鬆的同時也趁機也學會了自由泳. 年會在三亞一起游泳時也讓同事驚訝於一年前還什麼都不會的我最近一年來的進步(~ ̄▽ ̄)~.
另外我還競選了團隊“體育委員”一職, 雖然自己的羽毛球球技一直以來未曾進步, 但在工作的間隙組織團隊與其他部門同學聯誼打球, 推動團隊body-building, 大家在一起拋開工作說說笑笑, 也讓團隊氣氛更加融洽.

早晨起來稱一下體重, 由於幾個月來的辛(hao)苦(chi)工(lan)作(zuo), 已經從74kg漲到了79kg, 因此在新年目標中又增加了一項: 體重從79降到72.


III. 季度之星

微店每個季度會從不同的方向(技術、運營、產品、客服、行政….)評選出一批優秀員工予以獎勵 -是爲季度之星. 雖然是一名畢業不久的應屆生, 但對這一隆重獎項也覬覦良久, 但也從想過這麼快就能夠得到. 當得知自己獲獎的一刻, 意外 & 激動 溢於言表, 感謝團隊成員和公司的肯定.


IV. 規劃 - 未來(2017.01 ~ 2017.04)

其實我是來給書做廣告的 ╮(╯_╰)╭ …
現在以及未來的5個月初步計劃要完成下列內容的學習(1~3 必須完成, 4~6視情況而定):

1. Java基礎

  • Effective Java
  • 深入理解Java虛擬機(複習)
  • Java多線程編程的藝術(Java併發編程實戰)
  • Java性能優化權威指南(HotSpot實戰)

2. 分佈式 & NoSQL

  • Zookeeper: 從Paxos到ZooKeeper.
  • 大型網站系統與Java中間件實踐.
  • 分佈式消息隊列MQ: RabbitMQ實戰(RocketMQ的實踐 & 設計理念).
  • Redis設計與實現

3. Spring實戰 & 原理

  • Spring實戰
  • Spring揭祕

附: 人文

  • 文明之光(第2冊: 從牛頓到航天)
  • 彷徨之刃(當法律無力逞兇, 人們該去往何處?)

*4. 算法

  • 算法之道
  • 算法(第4版)
  • 算法設計與分析基礎(第3版)

*5. 存儲: MySQL & 分佈式

  • MySQL技術內幕 - SQL編程
  • MySQL技術內幕 - InnoDB存儲引擎(MySQL調優)
  • 大規模分佈式存儲系統:原理解析與架構實戰(OB存儲核心)

*6. 大數據

  • Hadoop(MR/HDFS): Hadoop基礎教程(Hadoop權威指南)
  • HBase: HBase權威指南
  • Hive: Hive編程指南

*附. 其他

  • 原理: TCP/IP、操作系統、計算機系統
  • 搜索引擎、機器學習入門
  • 腳本語言: Node.js、Python、Groovy

給時光以生命, 而不是給生命以時光.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章