开发语录

1. 如果在计算里有除法,比如a/b,一定要判断b是否为零,任何情况下。如果将str转化成int,一定要判断异常,因为str可能是''或者各种字符串,转化不成功。

2. 如果要存储到一个文件,比如检查文件是否存在,任何情况下。

3. 不要信任别人传过来的参数,一定要检查,检查格式,检查内容,检查是否空,任何情况下。

4. 在量大的情况下,小概率事件,一定会发生,不可能发生的事情,一定会发生,发生的频率会高到不可思议,带来许多麻烦。

5. 如果一个功能/一个接口/一个页面,如果是开放出去给是十个以上的人使用,一定要做到无论输入什么,都不崩溃,都能提示出错,否则就会有大麻烦。

6. 一个功能/页面/接口出错,程序必需把用户名,所在文件,时间,上下文,调用参数,返回值等等诸多参数以邮件/微信/短信等形式发送给研发、产品、运维以备快速定位快速解决。

7. 不要加人,要加变态--特别有驱动力的严谨苛刻偏执效率狂。

8. 解决这些问题,第一原则搜集全覆盖的大量真实现实的数据/案例/,第二原则是逻辑链和因果链。

10. 每一种服务,一旦上线使用,就必需保证在任意情况下都能稳定持续可靠的提供服务。要以十倍冗余,十倍故障,十倍正常流量,检查一切服务组件内存硬盘cpu网络带宽jvm调优等等,一切可能出错问题都必然会出错,而且通常是在最关键最不能出错的时候出错。比如进行极其严格苛刻全面的测试和运行监控,才能提供合格的服务。

11. 你文档和api里告诉客户的东西,不管是临时的还是永久的,客户都会永久的用。所以,把什么告诉客户是一个极其慎重的问题!你想不到客户会怎么用数据,但你未来不能轻易改,改了客户会出大麻烦!

12. 你必需熟悉你服务器上的每一样东西,每个东西都有文档,随时能搞定。比如cpu占用, 磁盘空间,数据库占用,每个请求处理时间,log切分,每次部署会增加多少磁盘占用。哪个地方你不熟悉,迟早会要你好看。时刻检查极其重要。

12. 一切服务都要做成开机自动启动,不要指望手工。否则你会很惨。

13. 要做有价值的事情,不要加班。加班,通常都是愚蠢的表现。

14. 一个完整项目通常由多个组件构成,出现故障和性能瓶颈的时候,需要逐个组件检查,熟悉各种细节。比如,一个线上项目,一开始出现数据库连接过多,于是就加大最大连接,仍然出现延时,经过检查发现原来是数据库连接使用了外网ip,导致连接速度太慢,连接占满,超时严重,修改成内网ip之后,一切都正常了。

15. 要确保每一步都是对的。如果某一步不能确定是对的,那么要以小成本小批量进行足够的试错。

16. 如果产品是给大基数用户使用的,就必需保证“用户无论怎么用都能正常使用”,“永远不要有任何出错的可能”,“任何小概率错误”在大基数用户下都会出现。“正常使用”,意味着用户要么沿着正确的路线操作成功,要么得到合理的提示以及后续操作指南。“永远不出错”。

17.如果计划做一个对公众服务的网站,公司里需要有一个人专门负责研究对自家官网做攻击/入侵/ddos,要做到固若金汤,否则,一点有点名气后会被黑产/骇客定上勒索,一旦遭到大规模攻击停服,会导致公司一瞬间完蛋。后果是极其可怕。必须先做充分研究和应对。

18.必需做到,能监控整个系统的一切细节,任何地方出了问题,都要能在几秒内立刻观测到。

19. 必需做到,任何系统上线之后,要做十倍量的压力测试,保证系统能够维持十倍的流量冲击。且,能在极短的时间内,立刻将负载能力动态提升十倍。否则,一旦上量,就会出不可预计的问题。

20. 必需做到,任何系统,都要对外部调用严防死守,因为恶意客户和愚蠢的客户,都有可能给系统带来巨大的风险。防止一切可能出现的漏洞。

21. 如果遇到不靠谱的员工,要在第一时间立刻开掉,因为这个人将来一定一定会制造麻烦。遇到不靠谱的leader,也要第一时间立刻做某种隔离,否则将来一定一定会遇到麻烦。

22.做成一件事情是极其不容易的,要每一个细节都关注到,不能出任何差错。如临深渊,如履薄冰。

23.一个人的负荷是有限的,达到65%的时候,就要不能再加负荷了,必须找其他人分担,永远绝对不要超过70%,留有足够冗余。一个人不能做所有的事情。

24. 优秀的人,是做成事情的第一要素。要请聪明人做事。提高薪资是招到聪明人的必要条件。聪明人,最节约时间,时间是最大的成本。

25.开发人员必须是专职,普通人无法同时承受两种极两种以上角色; Java架构师,java工程师,安全工程师,php工程师,数据架构师,数据仓库工程师,数据库管理员,爬虫架构师,爬虫工程师,各负其责。

26. 所有的风险项目,必需定期进行演习,演习等同实战。

27.每个关键节点,必须由一个100%神域的人守护,否则一旦出了问题,肯定会重大事务要死人的。一个人只有有了神域,哪怕很小很小,才算是一个有价值的人。

28.商标,专利,软件著作权,合规,都要实现做好申请,否则将来会比较麻烦。提前做是最好的。

29.有律师顾问,涉及到法律的合同,协议,比如非常严谨,一字入公文,九牛拖不回。

30.如果你无法招聘到合格的员工,包括开发和支持维护,就必需把系统做的非常细致,让技术水平很差的人也能用起来做很简单的工作,否则你无法脱身,只能去干烂活脏活低价值的活。因为只有你知道如何解决问题,不得不干脏活烂活,这些活没人能做。所以,在一开始,你就要定下解决这个问题的策略,不要被低价值的工作绑死。

31.系统设计的第一步,就是要能在时间和空间上,监控每一个功能的每一个时序时间的每一处细节和每一个尺度的细节,因为将来必然是有一个需求,要能检查/复现/跟踪任意尺度上的故障或者性能不畅是如何发生的。

32.卓越组织四个要点:1.远景和实现步骤贯彻整个组织成员; 2.从上到下身先士卒以身作则身体力行言行一致先忧忧后乐乐; 3.从战略到战术有远见有睿智意志坚定; 4.无神论。

33.任何程序,都需要一个完备的log系统。这个log系统,可以分布式部署,能存储半年内的系统每一个log信息,在需要的时候,能以任意种方式进行查询,然后以指定的格式进行输出。这个log系统,可以做成一个套docker镜像,几分钟到半小时内在云上部署成功,系统默认值已经提供了足够好的功能,常规用户免配置。这个log系统,能支持任意语言的任意log库(比如http方式)。

34.数据库:必需考虑当一个表的记录数量大规模增长的时候,程序里是否使用了没有索引的键,这会导致大量的延迟,阻塞应用。

35. 一种错误或者一种故障,如果第二次出现,就必须系统性加以解决,除非你知道没问题或者仅仅是一个成本问题。

36.工作计划必需强制性写成[1],[1.1][1.2],[2.]...等一步步极其明确的形式。这也是抽象的树结构。否则不可执行。

37. 使用gtd和思维导图。

38. 对外请求,必须有重连机制,包括但不限于mysql,redis,mongodb

39.最底层的核心代码,要写成永远不需要变动的形式。就像砖块永远不变一样。就像原子永远不变一样。最上层负责变动。跟功夫一样。tpc/ip七层协议。

40.py的服务,必需注明py版本和库的版本,要使用虚拟环境virtualenv进行配置。

41.所有线上系统,任何一个组件都可以不停机迁移是一个必要的设计原则。

42.每个函数都有返回值,必须返回某个东西,严禁返回空值,因为难以判断,会带入错误处理 bug。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值