# 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
- 听力
- 新东方演讲稿
- 库克杜克大学演讲全文版
- 库克杜克大学演讲演讲英文对照版