# 2018年年終總結
這一年經歷了很多,哪怕在同一家公司也做了許許多多方面的事。有很多很多17年立的flag已經做完了,或者還在做。生活中有驚喜也有悲傷。更多的難受其實是來自家人的不理解,對IT行業的不了解。覺得工作一兩年的程序員拿一萬多的薪資都是別人家的孩子,然后逼我回南京落戶找工作,拿著其他行業最低的工資標準做著碼農的工作……這種感覺我不知道該怎么去形容。
之前也沒怎么回顧經歷,感觸也是一陣一陣的。馬上工作三年了,簡單回顧下:
2016年,大四只身去了北京獨自寫簡歷,從無人問津到一天兩三家。后來因為想讓自己的人生履歷華麗點兒,在大興區政府績效辦做了幾個月的行政管理。
2017年,辭掉了政府的工作,海投前端面了獵豹移動,之后回學校畢設答辯完又去面了京東。明白了自己的實力后找了一家有大佬帶的小電商公司拼了近7個月。最后走的時候老板開出了一萬想留我(那家公司股東拿的7千月薪)。當時的我技術水平在北京前端行業應該是15K左右的身價。
2018年,家里人讓我來南京落了戶,不想讓我一直在北京一直漂著,說以后北京房子、戶口、孩子上學、balabala……接著在南京拿著微薄的薪水干著JAVA兼前端的工作……不過我對薪資不在意,至少這個薪資我在南京不愁衣食住行。
簡單回顧就到這兒,接下來進入正題:
2018年技術總結
運籌帷幄之中,決勝千里之外。
——引子
雖然現在編程大環境還處于基本西化的狀態,但是我一直想著把編程東方化,糅雜傳統文化、東方哲學思想在編程里。之所以這么做應該是受到了國內各位大神前輩的影響,比如用中文編程的易語言等等,一代人影響一代人。最近才意識到大學看那么多亂七八糟書的原因。因此這篇“隨筆總結”打算先用文人畫的描述來引出我之前的編程態度,再結合工作這兩年多來對開發大觀園的實踐所養成的編程態度,做一個詳盡匯總。
【文人畫】
“繪畫中的一切都是假的,不要把繪畫當真。你畫這幅畫的心情要比畫這幅畫重要,無所謂畫完不畫完,逸筆草草、恰到好處。它是文玩味,是無窮無盡的享受,是糅合媒材,筆、紙、墨水之間的高級游戲。”
摘出幾個重點來跟實際編程做映射,如下:
* 媒材—畫作的載體 《====》 生產環境。
* 筆紙墨—實現畫作的工具 《====》 編程語言與開發環境。
* 繪畫內容—畫作的樣子 《====》 業務。
* 繪畫心情—完成畫作的心態 《====》 內在驅動力。
* 無所謂畫完不畫完—畫作的開始與結束 《====》 完成周期。
* 恰到好處—畫作的好與壞 《====》 完成情況。
【OKR考核】
“明確公司與團隊的目標,以及明確每個目標達成的可衡量的關鍵結果,目標是設定一個定性的時間目標,關鍵的結果是由量化指標形式呈現的,在目標時期結束時,要對每個目標的的每個關鍵結果進行評估。"
再從績效角度來一個編程映射,完全與工資掛鉤的內容,如下:
* 目標—任務的指標上限 《====》 代碼質量指標
* 可衡量—任務的內容 《====》 代碼的業務實現
* 關鍵結果—任務帶來的效益 《====》 代碼性能、終端兼容性、業務流量等
* 時間—任務完成的期限 《====》 代碼工期
* 評估—任務回顧 《====》 代碼復盤
* 明確目標—任務分配 《====》 根據自身情況去量化代碼
簡單總結:
從上面兩個角度我們不難看出中式思維和西式思維的差別,同時很大程度說明了在整個歷史長河上為什么東方傳統文化會被西方文化侵蝕、甚至“強奸”。因此,我們要去學習歷史,尊重歷史,敬畏歷史。另外想要長盛不衰持續下去一定要抱著空杯心態。去接受、去學習、去實踐,最后才能做到發揚和傳承。
【REST架構】
想了很久怎么開篇合適,最后還是覺得康威定律恰到好處:
“Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. - Melvin Conway(1967)”
翻譯:任何組織在設計一套系統(廣義概念上的系統)時,所交付的設計方案在結構上都與該組織的溝通結構保持一致。
--------------------------------------
< Situation >
項目大到分布到不同的地點,甚至跨時區了。協調成本會急劇增加,很可能會下意識地減少溝通,迭代的速度就會降低甚至停止變更。微服務提倡組成小團隊,由小團隊負責整個系統的設計和實現,團隊內部可以頻繁地、細粒度地溝通。業務架構總是和團隊組織的架構相匹配,當把一個大的系統拆分成小的服務時,團隊也會隨之拆分變化。是否使用微服務不僅僅是一個技術棧的問題,而且是上升到了團隊組織結構層面的管理問題。微服務的架構的問題是團隊之間的運作和管理問題。
< Target >
因為目前我是把上家電商公司的前端業務代碼單獨拿來用java搭建restful架構從而實現個人項目。所以很多坑其實是不需要去踩的——市面上有大量的實現代碼和書籍教程。但是為了使基礎更加的牢固可靠,將來更從容地應對技術變革,有些流程,大量的坑還是很有必要去踩的。編程經驗這樣驅動我的技術成長。
< Project Flow >
ORM -> MVC -> RPC -> SOA
它是一個項目從小做大肯定會經歷的四個迭代階段,即從All in one 到 業務微服務化 + ESB總線。
< DATA Flow >
一、訪問主機
1\. 先去DNS服務器去把域名轉換成IP地址
2\. 使用IP地址去訪問目標主機
3\. 如果該主機沒有啟動對外的服務(默認訪問80端口),則返回無法訪問目標主機
二、前端代理(假設該IP的主機啟動了最復雜的網絡架構)
該IP地址的主機配置了nginx服務器進行端口映射虛擬主機、或進行了反向代理
```utf-8
同一局域網內不同子網段下啟動了多臺主機來執行相同的程序(負載均衡),不同的程序(PC端,WAP端),通過輪詢算法把大量請求平均分配在這些主機上。
eg: 192.168.0.1:80 (外網默認訪問主機)作為網關服務,把外網請求平均轉發到下面四個IP主機
192.168.0.51:8080 負載服務器 PC
192.168.0.52:8080 負載服務器 PC
192.168.0.91:8080 負載服務器 WAP
192.168.0.92:8080 負載服務器 WAP
```
先把靜態資源返回給用戶,接著通過主機IP地址+端口號去訪問后臺服務獲取API數據,最后在客戶端拼裝視圖模型來給用戶展示網站內容。
觸發前端交互事件后需同時發送兩個請求:一個GET請求獲取靜態資源(同時偽裝URL),一個POST請求發送token驗證并獲取真實數據資源。
三、后端代理
配置了網關服務器配置,例如SpringCloud的Zuul,使用了RESTful架構進行了反向代理。
```utf-8
同一局域網內不同子網段下啟動了多臺主機來執行相同的程序(負載均衡),不同的程序(微服務),通過輪詢算法把大量請求平均分配在這些主機上。
eg: 192.168.1.1:80 (外網默認訪問主機)作為網關服務,把外網請求平均轉發到下面六個IP主機
192.168.1.11:8080 負載服務器 商品微服務
192.168.1.12:8080 負載服務器 商品微服務
192.168.1.21:8080 負載服務器 訂單微服務
192.168.1.22:8080 負載服務器 訂單微服務
192.168.1.31:8080 負載服務器 用戶微服務
192.168.1.32:8080 負載服務器 用戶微服務
```
先把redis緩存服務器里的數據封裝成視圖Json對象返回給客戶端,如果沒有緩存則訪問數據庫。最后生成Json的API去給前端調用。
< Layer >
## 頂層設計
網站開發其實就是下面該邏輯表達式求解的過程:[WHO] —》 [WHEN] —》 [HOW] —》 [WHAT] === [STATE]
## 功能實現
### database設計
* 三范式和反范式
* 業務級聯
### DAO & DO
DAO層主要實現RPC接口, 編寫mapper
* sql實現增刪改查
* sql執行結果與DO層綁定
* 封裝數據實體
具體技術
* proto數據轉換,跨語言操作數據庫
* 數據庫存儲過程
* redis緩存集群,消息隊列
測試
* AIR模型
* 獲取數據庫操作結果
* 驗證數據庫連接、操作是否正常
### Manager & VO & DTO
Manager層主要實現RPC接口, 通用業務層
* 組合DAO層的數據為VO數據,DTO對象,與三方平臺數據交互
* 第三方平臺數據封裝、預處理、轉換異常信息
* service能力下沉,緩存處理、中間件
* 包裝異常信息并上拋
* 開始記錄日志
具體技術
* 枚舉封裝常量、異常信息
* 多態封裝接口
* Slf4j日志五個級別:error/info/warn/fatal/debug 來包裝錯誤信息
* 通過配置日志的不同級別來輸出事故現場信息的logs文件(部分信息)
Manager層測試
* BCDE模型
* 驗證三方數據輸入、dao層輸出是否正確
* 根據傳參返回不同的數據包、打印日志
* 響應請求結果
### Service & VO & DTO
Service層主要實現RPC接口
* Manager層拼接邏輯實現(操作接口)數據為VO、DTO對象
* 業務拼接邏輯實現(行為接口)對應VO層(方便Service返回數據的一個封裝,行為結果,成功失敗的原因)
* 截獲manager層上拋的異常信息,并輸出最終日志。
* 系統性能監測
* 數據統計
* 定時任務
具體技術
* 枚舉封裝常量
* 多態封裝接口
* 日志最終截獲層,輸出日志
Service層測試
* 驗證數據輸出是否正確
* 根據傳參返回不同的數據包
* 響應請求結果
### WEB
Web層主要實現RESTful接口和請求轉發
* 參數校驗
* 鑒權控制
* 疲勞度控制
* 轉義數據
* 處理POST請求
* 請求控制轉發,Service或Server層
### API層
API層主要實現RPC, 通過WEB層實現RESTful接口
* 返回GET請求,下沉POST請求到WEB層
* 數據過濾
* CSRF校驗
* 鑒權控制
* 網關控制
* 流量控制
根據不同的業務輸出不同的數據格式
### Client層
PC、WAP、APP三端
PC
Jquery-1.12.4 + CSS3 + H5
為了兼容到IE678,盡量少寫花里胡哨的CSS3效果,畢竟重繪也有性能代價。必要時進行優雅降級
WAP
VUE + VUEX + vue-router
【后記】
首先我不會告訴你們我寫不行了,粘了好多平時寫下的總結……
感謝大家花費不少時間看我寫的文章,希望各位都能有所收獲
留一些彩蛋給大家:
http://3ae.store 這個網站剛部署了nginx服務,打算前后端分離
http://api.3ae.store:10080/mall/order/detail/1000 接口地址,正在做端口映射
http://mall.3ae.store:10080 個人商城的首頁啦。嘿嘿,希望大家喜歡
最后獻上該項目的github地址:
http://github.com/xiaomin1473/3aeStore
- 2023-4-8__成長之路
- 技術雜談
- 程序員境界
- 走進猿類
- 做一個程序員
- 什么是猿類
- 愛亂吹的猿
- 業余生活
- 我的書架
- 高效程序員的45個習慣
- 敏捷—高效軟件開發之道
- 態度決定一切
- 學無止盡
- 交付用戶想要的軟件
- 敏捷反饋
- 敏捷編碼
- 敏捷調試
- 藝術人生
- 摘自藝術的境界
- 如何欣賞畫
- 《的》
- 我的文檔
- 小白學習前那些說不完的事
- 計算機語言都一樣
- 嘗試理解他人代碼
- 做為旁觀者的思考
- 怎樣才算懂計算機
- 工欲善其事,必先利其器
- 教案日志
- 十天學電腦
- 一,認識計算機
- 二、認識編程語言
- 三、認識程序內涵
- 四,認識數據結構
- 五、認識電腦系統
- 六、認識通信原理
- 七、郵箱管理
- 八、重新審視電腦
- 九、理解終生學習
- 十、感悟三千世界
- c語言
- C語言——我覺得好簡單
- c學好不怕沒飯碗—2014.7.21
- C語言——我想的有點兒簡單
- 或多或少的c語言知識
- c語言初探篇
- 初探c語言底層
- 初探整型和浮點型
- 初探二進制數---原反補移
- 初探有無符號
- 初探c是如何跑起來的
- 初探指針
- 初探數組
- 初探順序表
- 初探棧,隊列
- 初探c語言編程
- c語言進階篇
- c語言自身的那些事
- 結構詳解
- c語言大成篇
- 人類思維——模式匹配
- 論c語言面試
- 數據結構
- 核心概念,沒有之一順序表
- 線性表代碼實現
- Sq_list
- 不存在的鏈表
- 只是一種思想——棧
- 只是一種思想——隊列
- 不存在的樹
- 只是一種思想——二分法
- 不存在的圖
- 算法原理
- 傅里葉變換
- 算法導論
- 算法導論——c語言實現
- 算法導論——java實現
- 組成原理
- 操作系統
- 初探操作系統
- 深究操作系統
- 操作系統如何跑起來
- 進程就像細胞
- 系統就像生命
- 進程樹pstree
- 進程
- 進程何時更名為生命
- 初探進程映像
- 程序如何成為進程映像
- PCB
- PCB解讀之——信號量(p_sig)
- 進程同步
- 進程通信
- 進程調度
- 用戶
- PPDA
- 存儲系統
- I/O系統
- 網絡原理
- 通信簡史
- 通信是網絡基礎
- 趣談網絡
- 自我介紹
- 快遞公司
- 小D的自述
- 網絡架構
- OSI/RM
- 應用層
- 表示層
- 會話層
- 傳輸層
- 網絡層
- 數據鏈路層
- 物理層
- TCP/IP四層模型
- 五層模型
- 網絡劃分
- IP史
- 信息安全
- 社會工程學
- 信息收集
- 誘導
- 偽裝
- 如何成為任何人
- 社會心理學
- 思維模式
- 說服的力量
- 代碼審計
- 災難恢復
- 安全注入
- 網絡工程
- 802.11
- CCNA
- CWNA
- 社會工程
- 社會心理
- 信息誘導
- 身份偽裝
- 系統框架
- web前端框架
- smarty框架
- bootstrap框架
- thinkphp框架
- zend框架
- yii框架
- ci框架
- 網站開發
- 五大難題
- 網站工作原理
- 數據庫原理
- 服務器原理
- 前端開發
- 前端技能基礎
- html
- css
- javascript
- 瀏覽器兼容
- 前端總結
- 后臺開發
- 或多或少的JS
- js初探篇
- 理解Javascript
- JS繼承
- 數組
- 操作方法
- DOM事件
- 數據傳輸
- JS面試題
- 數據對象
- 學生管理系統
- 學生管理首頁
- 粗略學了一遍后的總結
- 零碎知識
- js初探篇第二版
- javascript構成
- 基本類型
- 基本語句與判斷類型
- 基本對象與操作函數
- 基本判斷與甄別數據
- 內置對象與操作函數
- 對象認識與深淺復制
- DOM級別與BOM
- 嚴格模式與混雜模式
- ES5和ES6
- js進階篇
- 上傳圖片
- js實戰篇
- 或多或少的PHP
- 詳解url結構
- html基礎
- html初識
- html-組成頁面的基礎標簽
- ie兼容
- 教學方法
- 論php——編程思想
- 論php——底層實現
- 中華國學
- 易經
- 黃帝內經
- 山海經
- 道德經
- 騙經
- 中華哲學
- 一花一世界
- 道可道非常道
- 一瞬
- 宇宙
- 心得體會
- 電腦叫智能生命體更準確
- 計算機不是漢語模式
- 瑣事日記
- 成長與人性
- 祝單身狗快樂
- 人其實過的很單薄
- 都怪自己不夠優秀
- 那是幾個人的世界
- 認清世界,認清自己
- 陪伴繁華逝去的平凡
- 俯拾仰取
- 技術手冊
- 網站開發
- 準備工作
- firewalld
- mysql
- redis
- 開發流程
- 整體配置
- 環境配置
- tomcat配置
- 數字證書配置
- 項目配置
- 數據設計
- 用戶管理
- 整站設計
- user
- user_group
- user_role
- 服務端
- 了解學習
- quartz
- HelloWorld
- HelloJob
- HelloQuartz
- HelloScheduler
- Job
- JobDataMap
- Trigger
- Scheduler
- properties
- spring
- AOP
- 使用
- svnkit
- svn init
- FSFS
- server
- Java
- 測試
- 任務調度
- 網站架構
- 網站前端
- pc端
- 移動端
- native
- ios
- android
- ipad
- hybrid
- 技術日志
- 2018-9-26
- 2018-11-26
- 資源收集
- UED資源
- 技術架構
- 云平臺
- 工作方面
- 實習工作經驗
- 草稿1
- 草稿2
- 草稿3
- 草稿4
- 草稿5
- 草稿6
- 草稿7
- 大學總結
- 面經
- 一、職能定位
- 細節
- 前端
- 工作總結
- 簡歷
- 職業規劃
- 一年規劃
- 整理歸檔
- 2015/11/10以前
- 2015/11/10
- 2015/11/11
- 2015/11/12
- 2015/11/13
- 2015/11/14
- 2015/11/15與16
- 2015/11/17
- 2015/11/18
- 2015/11/19與20
- 2015/11/21
- 2015/11/22
- 2015/11/23
- 2015/11/24
- 2015/11/25
- 2015/11/26
- 2015/11/27
- 2015/11/28
- 2015/11/29
- 2015/11/30-12/6
- 2015/12/7-2016/4/18
- 2016/4/19
- 2016/4/20~2017/6/27
- 2017/6/28-2017/7/4
- 2017/7/5-2018/1/11
- 2018/1/12
- 2018/1/13-2018/4/19
- 2018/4/20
- 2018/4/21-2018/5/10
- 2018/5/11
- 2018/5/12-2018/5/16
- 2018/5/17-2018/5/30
- 2018/5/30-2018/10/15
- 2018/10/15-2018/10/18
- 2018/10/19-2018/11/17
- 2018/11/17-2018/12/31
- 結束----------------開始
- 2019/2/18
- 2020/7/30
- 2020/9/5
- 2021/5/6
- 回收站
- 以前文件
- 2015-10-17__成長之路
- 2018-10-15__成長之路
- 2020-3-29__成長之路
- 畢業三年總結
- 浙大之旅
- 2020
- 英語
- 基礎3000單詞
- 第一周
- 百詞斬__126
- 百詞斬__126翻譯
- 百詞斬__252
- 百詞斬_252翻譯
- 百詞斬__392
- 百詞斬__532
- 百詞斬__672
- 第二周
- 百詞斬__812
- 聽力
- 新東方演講稿
- 庫克杜克大學演講全文版
- 庫克杜克大學演講演講英文對照版