计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。
假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。
进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。
一个车间里,可以有很多工人。他们协同完成一个任务。
线程就好比车间里的工人。一个进程可以包括多个线程。
车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。
可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。
一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫“互斥锁”(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。
还有些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做“信号量”(Semaphore),用来保证多个线程不会互相冲突。
不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。
操作系统的设计,因此可以归结为三点:
- (1)以多进程形式,允许多个任务同时运行;
- (2)以多线程形式,允许单个任务分成不同的部分运行;
- (3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
- (https://www.cnblogs.com/deeper/p/7730203.html)
- 21、HTTP状态码有哪些?
- 答:HTTP状态码总的分为五类:1开头:信息状态码、2开头:成功状态码、3开头:重定向状态码、4开头:客户端错误状态码、5开头:服务端错误状态码
- [attach]129917[/attach]
- 22、如何保障测试的充分度?
- 答:从代码覆盖率和业务覆盖率来定义充分度模型,代码覆盖率比较直观,业务覆盖率可以基于流量场景挖掘技术及fuzz技术来补充度量
- 23、自动化测试用例如何设计?
- 答:自动化用例的设计依据场景诉求构造合理输入及输出断言,测试用例需要满足健壮性,有效性,可扩展,时效性要求
- 24、如何对测试用例进行优化与提炼,精简不必要测试用例?
- 答:等价划分,可从代码路径,业务要素,领域模型三个方面做最大覆盖最小流量用例精简,也可以考虑在变更基础上的精准测试
- 25、自动化测试框架设计中的分层如何实现,有哪几类分层?
- 答:自动化框架设计包含数据流,执行流,数据流解决测试数据存储及使用方式,执行流定义标准测试流程,一个标准的测试框架流程应该是数据清理,数据准备(入参,db,外部依赖),结果验证
- 26、如何准备完整的测试数据?
- 答:这个问题没啥可答的,要让一个用例能够符合预期就需要构造合理的输入,数据准备,需要依赖对于系统设计及业务的了解,没啥方法,但是可以借助实时流量提供准备数据效率
- 27、自动化测试执行前后,分别需要进行何种操作,以确保自动化不会影响系统运行?
- 答:用例运行可独立部署集群或者线下集群,一般很少在生产环境运行
- 28、如何基于Mock实现数据结果的返回,实现外部接口的测试?
- 答:mockito这些工具类可以看一下,也可以写拦截器构造返回对象
- 29、如何评判系统是否具备可测性?
- 答:这个问题比较广泛,我需要点时间整理出来
- 30、自动化测试执行中,如何对多个用例进行并发运行?
- 答:并发运行testng具备,其余的可看一下jenkins的多job或者自己写并发调度
- 31、在较大自动化用例运行压力下,如何实现自动化测试框架的分布式集群?
- 答:要做到这个点用例需要具备隔离性,其余的均衡调度就可以了
- 待更新