前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发指南:防御性编程(Defensive Programming)

开发指南:防御性编程(Defensive Programming)

作者头像
崔认知
发布2023-06-19 16:50:58
3280
发布2023-06-19 16:50:58
举报
文章被收录于专栏:nobody

防御性编程思想


子程序应该不因传入错误数据而被破坏,哪怕是由其它子程序产生的错误数据。

其核心思想是:我们要承认程序都会有问题的,都是需要被修改,聪明的程序员应该根据这一点来编写代码

防御性编程案例


1、保护程序免遭非法输入数据的破坏

如何应对?

(1)参数验证:检查所有来源于外部的数据的值;

数值取值范围、字符串长度、sql注入字符串等。

(2)检查子程序所有输入参数的值;

(3)决定如何处理错误的输入数据;

(4)redis大key、大value;

(5)重复请求,业务接口幂、分布式锁等;

(6)接口是否越权、返回敏感数据;

2、断言

3、错误处理技术

(1)返回中立值;

(2)换用下一个正确的数据;

(3)返回与前次相同的数据;

(4)换用最接近的合法值;

(5)报告信息 记录到日志文件中;

(6)返回一个错误吗;

(7)调用错误处理子程序或对象;

(8)当错误发生时显示出错消息;

(9)用最稳当的方式在局部处理错误;

(10)关闭程序;

4、异常

5、隔离程序,使之包容由错误造成的损害

(1)使用线程池隔离;

(2)熔断、降级、限流、业务开关等;

(3)拆分服务、拆分服务依赖的资源如数据库、redis等;

6、资源枯竭,内存泄露,导致OOM

(1)不要无限制的创建资源,要重复利用;

(2)使用容量限制的容器;

(3)分页查询数据,不要全量全表查询;

7、线程安全

8、接口升级,版本兼容性

9、缓存设计,缓存击穿要兜底,过期设计去热点,存储容量需考虑

10、数据库读写分离,需要考虑数据库主从延迟,引起的数据一致性问题

11、接口超时重试,需要保证幂等、数据一致性


参考

[代码大全2中文版(完整清晰版)].pdf: https://url97.ctfile.com/f/36436597-577967978-b8f29b?p=1988 (访问密码:1988)

https://interrupt.memfault.com/blog/defensive-and-offensive-programming

https://enterprisecraftsmanship.com/posts/defensive-programming/

https://blog.csdn.net/doctor_who2004/article/details/123297487?spm=1001.2014.3001.5501

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 认知科技技术团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档