Defensive Programming 随笔

1.Check Parameters

参数检查

–Don’t trust the inputs

–Fail quickly and cleanly

–Document exceptions that will be thrown including unchecked exceptions

-For unexported (non-public) methods, assert the validity of parameters

2.Exceptions are not for control flow

*异常仅用于例外情况,尽量使用标准异常库

-Exceptions should never be used for ordinary control flow

-Well-designed APIs do not force clients to program to exceptions

3.Cater for client assumptions

-Return empty arrays or collections, not nulls

4.Defensive copying

对于每个可变参数的赋值和构造进行防御性拷贝

-Make defensive copies when needed

*Perform defensive copying before checking validity

*For get methods, return defensive copies of mutable internal fields

5.Immutability

时间: 2024-10-05 11:12:06

Defensive Programming 随笔的相关文章

[MySQL Reference Manual] 6 安全性

6. 安全性 在Mysql安装配置时要考虑安全性的影响,以下几点: Ÿ   常规因素影响安全性 Ÿ   程序自身安全性 Ÿ   数据库内部的安全性,即,访问控制 Ÿ   网络安全性和系统安全性 Ÿ   数据文件的备份,日志文件和配置文件的安全性 6. 安全性... 1 6.1 常规安全性问题... 2 6.1.1安全性最佳实践... 2 6.1.2 保持密码安全性... 2 6.1.2.1终端用户密码安全性最佳实践... 2 6.1.2.2 密码管理方法... 3 6.1.2.3 密码和日志..

Immutable(不可变)集合

不可变集合,顾名思义就是说集合是不可被修改的.集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变. 为什么要用immutable对象?immutable对象有以下的优点: 对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 线程安全的:immutable对象在多线程下安全,没有竞态条件 不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis) 可以被使用为一个常量,并且期望在未来也是保持不

Sonar 常用代码规则整理

摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处id: 83 name: A method/constructor shouldnt explicitly throw java.lang.Exception type: CODE SMELL severity: MAJOR Comment: It is unclear which exceptions that can b

Java开发—乘风破浪

最近需要上线很多新的JAVA项目,然而很多JAVA的相关库都不太熟悉,项目实现起来遇到了不小阻力,熬了好几天夜.现在手头的工作基本完成了,因此打算好好来归纳下java的相关工具库,将来需要借助你们,好好的在JAVA的汪洋下,乘风破浪.(希望成为电影中如小马一样程序员J) 乘风破浪会有时,直挂云帆济苍海—李白 首先通过一张思维导图,来熟悉常用的java基础工具包,掌握好工具是对一个优秀工程师的基本要求哦!J 图中标红星表示必须精通的内容,黄星为需要熟练掌握的内容,其他为补充内容,本文主要会介绍下基

【APUE】Chapter15 Interprocess Communication

15.1 Introduction 这部分太多概念我不了解.只看懂了最后一段,进程间通信(IPC)内容被组织成了三个部分: (1)classical IPC : pipes, FIFOs, message queues, semaphores, and shared memory (2)network IPC : sockets mechanism (3)advanced features of IPC 15.2 Pipes Pipes是“the oldest form of UNIX Syst

C/C++程序设计基础

C与C++的各自特点 C是结构化语言,重点在于算法和数据结构.C程序的设计首先考虑的是如何通过过程,对输入进行运算处理得到输出.对于C++,首先考虑如何构建对象模型,让模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程控制. 头文件中ifndef/define/endif作用 阻止该头文件被重复引用. C++调用C编译后函数加上extern C C++支持函数重载,而C语言不支持函数重载.函数被C++编译后在库中的名字与C语言有所不同.假设函数原型为 void fo

Objective-C 02 复合

复合: 编程中的复合(composition)就好像音乐中的作曲(composition)一样:将多个组件组合在一起,配合使用,从而得到完整的作品. 在Objective-C中,复合是通过包含作为实例变量的对象指针实现的. 在软件开发中,程序员可能会使用一个Pedal(脚踏板)对象和一个Tire(轮胎)对象组合出虚拟的Unicycle(独轮车). 虚拟的独轮车应该拥有一个指向Pedal对象的指针和一个指向Tire对象的指针.Code 如下: @interface Unicycle : NSObj

poll

Marek's totally not insane idea of the day Epoll is fundamentally broken 1/2 I/O multiplexing part #3 20 February 2017 https://idea.popcount.org/ In previous articles we talked about: The history of the Select(2) syscall Select(2) being fundamentally

(转)Awesome Courses

Awesome Courses  Introduction There is a lot of hidden treasure lying within university pages scattered across the internet. This list is an attempt to bring to light those awesome courses which make their high-quality material i.e. assignments, lect