- 同步机制应该遵循的基本准则
-
空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态,允许一个请求进入临界区的进程立即进入临界区,以有效利用临界资源
-
忙则等待:当已有进程处于临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问
-
有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态
-
让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态
- 进程和线程
-
进程
一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。 -
线程
进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。
与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。 -
区别
线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。
根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位
资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的
影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行
- 特点
- 五种状态
- 线程状态之间的调度运行关系
-
MD5(信息摘要算法)
一种散列算法;指纹摘要的长度为128位;可用来校验数据的完整性 -
手机软件的压力测试包括:存储压力、响应能力压力、网络流量压力、并发压力
手机软件的系统测试包括:功能模块测试,交叉事件测试,压力测试
对手机可以是假的压力测试类型主要包括:存储压力,边界压力响应能力,网络流量压力,容量测试,兼容性测试,易用性、用户体验测试
- 数据库以及线程发生死锁的原理:(1)系统资源不足(2)进程运行推进的顺序不合适(3)系统资源不足
- 产生死锁的四个必要条件:
(1)互斥条件:一个资源每次只能被一个进程使用
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
(3)不可剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源系统 - 四种处理死锁的策略:
(1)鸵鸟策略
(2)检测死锁并恢复
(3)仔细对资源进行分配,动态的避免死锁
(4)通过破坏引起死锁的四个必要条件之一,防止死锁的产生
- 并行、并发
- 并发(Concurrent):指两个或多个事件在同一时间间隔内发生,即交替做不同事的能力,多线程是并发的一种形式。例如垃圾回收时,用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。
- 并行(Parallel):指两个或者多个事件在同一时刻发生,即同时做不同事的能力。例如垃圾回收时,多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
- 区别
并行是物理的,两个内核同时处理两个计算;
并发是liangge
-
hash碰撞解决方法
(1)线性探测法
(2)二次探测
(3)拉链法
(4)双重散列
(5)多重散列 -
耦合
耦合可以分为以下几种,它们之间的耦合度由高到低排列如下:
(1)内容耦合。当一个模块直接修改或操作另一个模块的数据时,或一个模块不通过正常入口而转入另一个模块时,这样的耦合被称为内容耦合。内容耦合是最高程度的耦合,应该避免使用之。
(2)公共耦合。两个或两个以上的模块共同引用一个全局数据项,这种耦合被称为公共耦合。在具有大量公共耦合的结构中,确定究竟是哪个模块给全局变量赋了一个特定的值是十分困难的。
(3)外部耦合。一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
(4)控制耦合。一个模块通过接口向另一个模块传递一个控制信号,接受信号的模块根据信号值而进行适当的动作,这种耦合被称为控制耦合。
(5)标记耦合。若一个模块A通过接口向两个模块B和C传递一个公共参数,那么称模块B和C之间存在一个标记耦合。
(6)数据耦合。模块之间通过参数来传递数据,那么被称为数据耦合。数据耦合是最低的一种耦合形式,系统中一般都存在这种类型的耦合,因为为了完成一些有意义的功能,往往需要将某些模块的输出数据作为另一些模块的输入数据。
(7)非直接耦合。两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。 -
对应的网络协议
-
对执行时间短的进程有利的算法:时间片轮转法、高响应比优先调度算法
-
DNS的作用:就是把域名翻译为IP,
(1)客户机向DNS服务器发送域名查询请求;
(2)DNS服务器告知客户机web服务器的IP地址;
(3)客户机与web服务器通信; -
输入域名(www.baidu.com)后,会去访问DNS服务器(运营商提供,电信,移 动),找与之相匹配的IP,接着找到IP对应的具体的服务器,之后再由容器(tomcat)提供访问的服务,在通过接口对tomcat发起请求,再去调用代码,在里面 执行sql语句,SQL语句再去调用数据库,最后一步步返回,展示在页面上
-
有4个进程A、B、C、D,设它们依次进入就绪队列,因相差时间很短可视为同时到达。4个进程按轮转法分别运行11,7,2和4个时间单位,设时间片为1.四个进程的平均周转时间为_________
-
一个关系数据库文件中的各条记录,前后顺序可以任意颠倒,不影响库中的数据关系
-
内存泄漏(Memory Leak):指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
-
性能测试:测试系统在负载情况下,系统的响应时间,吞吐量等。目的是为了获取系统的指标。
-
负载测试:通过不断的加大负载来确定在满足性能指标情况下所能够承受的最大用户数。所以它的目的是为了获取最大用户数。
-
压力测试,也叫强度测试。测试该系统在极限状态长时间运行是否稳定。包括系统指标,服务器性能指标。通过长时间的运行较性能测试更能容易发现内存泄露的问题。
负载测试是个方法,性能测试是一个过程。压力测试是个高压力下的性能测试
-
软件开发阶段一般又划分成需求分析、概要设计、详细设计、编码与单元测试、组装与系统测试以及安装与验收等6个阶段。系统测试是将软件系统与硬件、外设和网络等其他因素结合,对整个软件系统进行测试。常见的系统测试主要有恢复测试、安全性测试、强度测试、性能测试、可靠性测试和安装测试等。
-
等值分析测试=等价类划分+边界值分析测试
-
ios测试框架:
OCUnit 是 OC 官方测试框架, 现在被 XCTest 所取代。
XCTest 是与 Foundation 框架平行的测试框架。
GHUnit 是第三方的测试框架。
OCMock都是第三方的测试框架。
(NSXML是微软的xml语言解析器,用来解释xml语言的)
- Junit单元测试框架
基于java语言对的主流单元测试框架
- @beforeClass:位于数据准备前期或者其他前期准备(测试类调用前)
–用于提取代码中的共用部分减少冗余,只能声明注解一次
–必须在public static void,方法名随意,只运行一次。 - @AfterClass:位于所有用例运行之后,处理测试后续工作。
–测试类被调用运行结束之前,只能声明注解一次。
–必须在public static void,方法名随意,,只运行一次。 - @Test:在Junit3中通过对测试类和测试方法的命名来确定是否为测试
–在Junit4中,只要在方法前加@Test就行,此注解必为单元测试。
–在一个测试类可多次注解,每个只被执行一次,必须是public void
–可以抛异常 - 使用Assert断言
1、断言相等:assertEquals(100,x),判断对象是否为同一个
断言不相等:assertNotEquals(100,x),判断对象是否不为同一个
2、断言数组内容相等:assertArrayEquals({1,2,3},x)
3、断言浮点数相等:assertEquals(3.1416, x, 0.0001)(必须设置误差值)
4、断言为null:assertNull(x)
5、断言真伪性:assertTrue(x > 0)/assertFalse(x < 0)
6、校准测试函数,使用操作符’=='比较实际和预期的是否重复
- SRS:需求分析文档;
HLD:概要设计文档;
LLD:详细设计文档;
BD:基本设计;
DD:详细设计;
FD:结构设计;