1、白盒测试方法中,逻辑覆盖发现错误的能力,从强到弱排序为:
路径覆盖、条件组合、判定+条件覆盖、条件覆盖、判定覆盖、语句覆盖
2、解决IP地址资源有限问题:当前使用最多的是NAT方式(多个内网共享一个IP),未来主要通过ipv6方式解决
3、malloc函数与free函数:内存分配函数
(1)malloc:将可用内存块连接为一个长链表
(2)free
**用户free一段内存后,仍然可用调用该指针:因为free只是告诉系统内存可回收,但内存仍然可用访问(值可能发生变化),这种情况叫做野指针。正确的操作是free后把该指针指向null
char *str=(char*)malloc(10); 指向整型的指针str指向一个大小为10字节的内存的地址
strcpy(str,"CSDN");
free(str)
print("str=%s",str); // 输出结果为:str=
4、new/delete函数
int *p=new int(); //在可存储区分配创建了一个int对象,并返回该对象地址给指针p
delete p; //释放p指向的内存,p不再有效
p=null;
5、实施缺陷跟踪的原因:软件质量无法控制、问题无法量化、重复问题接连产生、解决问题的知识无法保留
6、C++内联函数:以 inline 修饰,可以提升程序运行效率
//如果定义的inline函数体内有递归/循环等,编译时会自动忽略掉内联
//Inline必须与函数定义放在一起,才能成为内联函数,仅将内联放在声明前是不起作用的
7、数据链路层的三个基本问题:封装成帧、透明传输、差错检测
8、修饰符 volatile
在 Java 中 volatile、synchronized 和 final 实现可见性,synchronized 和在 lock、unlock 中操作保证原子性
使用volatile修饰的变量是共享的,变量的更新将被通知到其他线程
在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。
9、java四种访问修饰符:
修饰符 | 类 | 包 | 子类 | 其他包 | 备注 |
public | √ | √ | √ | √ | 公开可用 |
protect | √ | √ | √ | × | 继承类可访问 |
defalut | √ | √ | × | × | 包访问权限 |
private | √ | × | × | × | 本类,以及类内部方法可以访问 |
10、Linux静态/动态库的命名方式
(1)静态库:libXXX.a,其中XXX为静态库名
(2)动态库:libXXX.so
11、内存与CPU间加cache(高速缓存)有什么用:cache速度高于内存,可以提高CPU处理效率
12、final修饰方法的重载与覆盖:
final方法不能被覆盖,可以被重载(重载时方法名相同,参数不同)
13、避免死锁:银行家算法
14、一小时分钟与秒针有59次重合,一天中分钟与时针有22次重合
// 一天之中只有两个12点的时候三个针是完全重合在一起的
15、一个源程序到一个可执行程序的过程:预编译、编译、汇编、链接
预编译:主要处理源代码文件中的以“#”开头的预编译指令
编译:生成汇编代码
汇编:将汇编代码转换为机器指令
链接:组装模块,使各个模块能正确衔接
16、C语言中,函数名代表函数的入口地址
17、Android四大组件:Activity(交互界面)、广播接收器、内容提供者、服务(后台解决方案)
18、测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。
19