待掌握的知识点
1.进程与线程的区别
2.进程间通信的方式有哪些
3.宏定义定义一个MIN 实现a,b中最小的那个数
4.为什么C++中调用C编译后的。cpp文件,需要声明“extern C”
5.冒泡排序
6.快速排序
7.堆排序
8.软件测试人员在整个项目开发过程中各个阶段的作用,测试人员在项目上线后需要做些什么?测试用例是在哪些阶段做的?
9.操作系统的层次,以及每一层的作用
10.strcpy()
11.strcmp(),C语言实现
12.最大子序列的和和相应的序列
13.提供差错控制的协议是?
14.IP协议是可靠的么,面向连接的么?
15.单链表逆转
16.aToi, 两个链表第一个公共节点
17.在C++如何调用。dll程序?
18.具有风险管理的软件设计模型是,瀑布?螺旋?增长?。。。
19.进程的3种状态
20.C++或C中的指针使用时需要注意的地方有哪些?
22。计算机网络最大的功能是?
1. 进程与线程的区别
一。什么是进程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
系统资源:线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。
进程的作用和定义:进程是为了提高CPU的执行效率,减少因为程序等待带来的CPU空转以及其他计算机软硬件资源的浪费而提出来的。进程是为了完成用户任务所需要的程序的一次执行过程和为其分配资源的一个基本单位,是一个具有独立功能的程序段对某个数据集的一次执行活动。
二。线程和进程的区别:
1、 线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程。
2、 一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。
3、 系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。那就是说,除了CPU之外(线程在运行的时候要占用CPU资源),计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
4、 与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。
5、 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。
三。线程相对进程的优点
进程切换比线程切换开销大是因为进程切换时要切页表,而且往往伴随着页调度,因为进程的数据段代码段要换出去,以便把将要执行的进程的内容换进来。本来进程的内容就是线程的超集。而且线程只需要保存线程的上下文(相关寄存器状态和栈的信息)就好了,动作很小。
2.进程间通信的方式有哪些
Linux 进程间通信的方式主要有:管道pipe, 消息队列,共享存储区,socket套接字,信号,信号量
进程间通信主要包括管道, 系统IPC(Inter-Process Communication,进程间通信)(包括消息队列,信号,共享存储), 套接字(SOCKET).
管道包括三种:1)普通管道PIPE, 通常有两种限制,一是半双工,只能单向传输;二是只能在父子或者兄弟进程间使用. 2)流管道s_pipe: 去除了第一种限制,可以双向传输. 3)命名管道:name_pipe, 去除了第二种限制,可以在许多并不相关的进程之间进行通讯.
识别
系统IPC的三种方式类同,都是使用了内核里的标识符来识别. FAQ1: 管道与文件描述符,文件指针的关系?
答: 其实管道的使用方法与文件类似,都能使用read,write,open等普通IO函数. 管道描述符来类似于文件描述符. 事实上, 管道使用的描述符,文件指针和文件描述符最终都会转化成系统中SOCKET描述符. 都受到系统内核中SOCKET描述符的限制. 本质上LINUX内核源码中管道是通过空文件来实现.
FAQ2: 管道的使用方法?
答: 主要有下面几种方法: 1)pipe, 创建一个管道,返回2个管道描述符.通常用于父子进程之间通讯. 2)popen, pclose: 这种方式只返回一个管道描述符,常用于通信另一方是stdin or stdout; 3)mkpipe:命名管道, 在许多进程之间进行交互.
FAQ3: 管道与系统IPC之间的优劣比较?
答: 管道: 优点是所有的UNIX实现都支持, 并且在最后一个访问管道的进程终止后,管道就被完全删除;缺陷是管道只允许单向传输或者用于父子进程之间.
系统IPC: 优点是功能强大,能在毫不相关进程之间进行通讯; 缺陷是关键字KEY_T使用了内核标识,占用了内核资源,而且只能被显式删除,而且不能使用SOCKET的一些机制,例如select,epoll等.
FAQ4: WINDOS进程间通信与LINUX进程间通信的关系?
答: 事实上,WINDOS的进程通信大部分移植于UNIX, WINDOS的剪贴板,文件映射等都可从UNIX进程通信的共享存储中找到影子.
FAQ5: 进程间通信与线程间通信之间的关系?
答: 因为WINDOWS运行的实体是线程, 狭义上的进程间通信其实是指分属于不同进程的线程之间的通讯.而单个进程之间的线程同步问题可归并为一种特殊的进程通信.它要用到内核支持的系统调用来保持线程之间同步. 通常用到的一些线程同步方法包括:Event, Mutex,信号量Semaphore,临界区资源等.
Linux
的进程间通信(IPC,InterProcess Communication)通信方法有管道、消息队列、信号、共享内存、套接口等。
3.宏定义定义一个MIN 实现a,b中最小的那个数
#define MIN(a,b)((a)<(b)?(a):(b))
4.为什么C++中调用C编译后的。cpp文件,需要声明“extern C”
5.冒泡排序
6.快速排序
7.堆排序
8.软件测试人员在整个项目开发过程中各个阶段的作用,测试人员在项目上线后需要做些什么?测试用例是在哪些阶段做的?
9.操作系统的层次,以及每一层的作用
10.strcpy()
11.strcmp(),C语言实现
12.最大子序列的和和相应的序列
13.提供差错控制的协议是?
14.IP协议是可靠的么,面向连接的么?
Ip地址32 位,不可靠,无连接。唯一的。
15.单链表逆转
16.aToi,两个链表第一个公共节点
17.在C++如何调用。dll程序?
18.具有风险管理的软件设计模型是,瀑布?螺旋?增长?。。。
具有风险管理的是:螺旋模型
螺旋模型总结了瀑布模型和快速原型模型的特点,增加了风险管理。每到一个阶段都会出一个新版本。
瀑布模型是本阶段的输出作为下一个阶段的输入。
快速原型模型是 在较短的时间内开发出一个原型系统,以便用户确认需求。
喷泉模型:对象驱动的、新型的
19.进程的3种状态
执行态、阻塞态、就绪态
进程的三种基本状态
进程在运行中不断地改变其运行状态。通常,一个运行进程必须具有以下三种基本状态。
就绪(Ready)状态
当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
执行(Running)状态
当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
阻塞(Blocked)状态
正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
2.进程三种状态间的转换
一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多次处于阻塞状态。图3_4描述了进程的三种基本状态及其转换。
(1) 就绪→执行
处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。
(2) 执行→就绪
处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。
(3) 执行→阻塞
正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。
(4) 阻塞→就绪
处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
例:
题目:某系统的状态转换图如图所示。
(1)分别说明引起状态转换1、2、3、4的原因,并各举一个事件。
(2)为什么在转换图中没有就绪到阻塞和阻塞到运行的转换方向?
(3)一个进程的状态变换能够引起另一个进程的状态变换,说明下列因果变迁是否可能发生,原因是什么?
(a)3→1(b)2→1(c)3→2(d)3→4(e)4→1
答: (1)
1:就绪->执行, 当前运行进程阻塞,调度程序选一个优先权最高的进程占有处理机;
2:执行->就绪, 当前运行进程时间片用完;
3:执行->阻塞,当前运行进程等待键盘输入,进入了睡眠状态。
4:阻塞->就绪,I/O操作完成,被中断处理程序唤醒。
(2)就绪进程没有占有处理机,也即没有经过运行,其状态就不会改变。
阻塞状态进程唤醒后先要进入就绪队列,才会被调度程序选中,进入了执行状态。
(3)
(a) 3→1: 可能,当前运行进程阻塞,调度程序选一个优先级最高的进程占有处理机。
(b)2→1:可能,当前运行进程优先级下降,调度程序选一个优先级最高的进程占有处理机。
(c)3→2: 不可能,占有CPU的一个进程不能同时进入两个状态;在单CPU的系统中,状态3发生后,cpu没有执行进程,故不会发生状态转换2。
(d)3→4:一般不可能,不相干的两个事件。状态转换3是由于运行进程等待资源而发生的,这并不会使得阻塞队列中的进程得到资源而进入就绪队列。但在Unix中,当系统的0#进程因runin标志而睡眠时,有(在内存)进程睡眠,就会唤醒0#进程,使其进入就绪状态,以便将该进程和在盘交换区就绪进程交换位置。
(e)4→1:一般无关,但当就绪队列为空时,一个进程被唤醒转入就绪队列后,调度程序使该进程占有处理机(但是同一个进程)。
20.C++或C中的指针使用时需要注意的地方有哪些?
1.指针未初始化。 float * a; a 的值是乱七八糟的数字。可以a=NULL,以后用到时可以使用if(a==NULL)来判断指针是否有效,否则不行。或者float* a=new float;
Float b; a=&b;
2.野指针。指针转移。容易造成内存泄露
3.指针越界
4.指向局部变量的指针。注意作用域。
22。计算机网络最大的功能是?
最大功能是:资源共享
其他功能:数据通信、提高可靠性和可用性(均可作为其他的备用机)、分布式处理
计算机网络主要具有如下4个功能。[1]
(1)数据通信:计算机网络主要提供传真、电子邮件、电子数据交换(EDI)、电子公告牌(BBS)、远程登录和浏览等数据通信服务。
(2)资源共享:凡是入网用户均能享受网络中各个计算机系统的全部或部分软件、硬件和数据资源。为最本质功能
(3)提高计算机的可靠性和可用性:网络中的每台计算机都可通过网络相互成为后备机。一旦某台计算机出现故障,它的任务就可由其他的计算机代为完成,这样可以避免在单击情况下,一台计算机发生故障引起整个系统瘫痪的现象,从而提高系统的可靠性。而当网络中的某台计算机负担过重时,网络又可以将新的任务交给较空闲的计算机完成,均衡负载,从而提高了每台计算机的可用性。
(4)分布式处理:通过算法将大型的综合性问题交给不同的计算机同时进行处理。用户可以根据需要合理选择网络资源,就近快速地进行处理。

浙公网安备 33010602011771号