## 程序员素养

---

在日常工作中肯定会遇到各种棘手问题，需要我们去查资料、认真思考，不断充实自己，提高自己。象大地之神盖亚的儿子——乌拉诺斯，每次跌倒都能站起来，并且拥有比之前更大的能量。


#### 心得体会：

*	写代码往小的方面讲是完成一个功能，往大的方面讲是做一个平台。抽象和枚举分寸拿捏恰当，做到最大通用性。需求变更和新功能接入时，做到最少的改动。做到这一点才称的上最佳程序员。

* 	关注最新流行的开源框架，能快速分析其优缺点。做好技术框架选型、测试、集成，上线使用。

*	对于很多框架要知道其如何使用、然后要深入了解其原理。做到知其然，知其所以然。

*	框架设计尽量要考虑其业务场景，每个领域都有其个性特征，大而全且通用的设计很难满足需求。

*	做优化时要结合数据反馈，不能盲目瞎搞。

*	墨菲定律：任何事情都没有表面看起来那么简单。所有的事都比你预估的时间长。

*	集中式调用改为HSF分布式远程调用，走的网络调用。为了提高性能，封装client二方包，通过xml bean配置控制逻辑，先从tair中查询，然后再走远程调用。


#### 工作经验：


1.流控

双11期间，对于一些重要的接口（比如帐号的查询接口，店铺首页）做流量控制，超过阈值直接返回失败。
另外对于一些不重要的业务也可以考虑采用降级方案，大促—>邮件系统。根据28原则，提前将大卖家约1W左右在缓存中预热，并设置起止时间，活动期间内这部分大卖家不发交易邮件提醒，以减轻SA邮件服务器的压力。

2.容灾

最大程度保证主链路的可用性，比如我负责交易的下单，而下单过程中有优惠的业务逻辑，此时需要考虑UMP系统挂掉，不会影响用户下单（后面可以通过修改价格弥补），采用的方式是，如果优惠挂掉，重新渲染页面，并增加ump屏蔽标记，下单时会自动屏蔽ump的代码逻辑。
另外还会记录ump系统不可用次数，一定时间内超过阈值，系统会自动报警。

3.第三方系统可能会不稳定，存在接口超时或宕机，为了增加系统的健壮性，调用接口时设置超时时间以及异常捕获处理。

4.做好容量规划、系统间强弱依赖关系梳理。

5.早期的订单采用oracle存储，随着订单的数量越来越多，查询缓慢，考虑数据迁移，引入历史表，将已归档的记录迁移到历史表中。当然最好的方法是分库分表。
