网桥:2层,数据链路层,跟据mac地址决定转发。
路由器:3层,网络层,根据ip地址决定转发。
网关:4层,传输层,根据段口号决定转发。
1、explain
答案:操作系统(operating
2、new,
答案:malloc与free是c++/c语言的标准库函数,new/delete是c++的运算符。它们都可用于申请动态内存和释放内存。new是c++用来动态内存分配的,如要在内存中开辟一个空间,用来存放int型变量,则int
3.
答案:无论是public还是private派生,基类中的private成员在派生类中都是不可见的,public派生时,基类中的public成员相当于派生类中的public成员,private派生时,基类中的public成员相当于派生类的private成员。
4.
答案:sizeof可以用来计算某个类型在内存中占多少个字节,而strlen只是用来计算字符串的长度,且必须以‘\0′结束,不是用来计算内存的。sizeof是算符,而strlen是函数。
5.
答案:typeid操作符:返回指针或者引用所指对象的实际类型。运行时获知变量类型名称
6.
答案:*为指针的间接引用,&是取地址运算符,也可以用作引用,如int
7.
构函数(destructor)
以c++语言为例,析构函数名也应与类名相同,只是在函数名前面加一个波浪符~,例如~stud(
析构函数可以设置为虚函数,但是构造函数不行。
8.
逆向地址解析协议在
9.
network
broadcast
10.
进程是程序的一次执行。线程可以理解为进程中执行的一段程序片段。进程间是独立的,这表现在内存空间,上下文环境上;线程运行在进程空间内。一般来讲(不使用特殊技术),进程无法突破进程边界存取其他进程内的内存空间;而线程由于处在进程空间内,所以同一进程所产生的线程共享同一内存空间。同一进程中的两段代码不能够同时执行,除非引入线程。线程属于进程的,当进程退出时,该进程所产生的线程都会被强制退出并清除。线程占用的资源少于进程所占用的资源。进程和线程都可以有优先级。
11、rename
12.
13.
???同步通信方式
14.
非均匀量化是根据信号的不同区间来确定量化间隔的。对于信号取值小的区间,其量化间隔也小;反之,量化间隔就大。它与均匀量化相比,有两个主要的优点:当输入量化器的信号具有非均匀分布的概率密度时,非均匀量化器的输出端可以较高的平均信号量化噪声功率比;
15、ngn解释
nextgeneration
ngn是指下一代网络。所谓“下一代网络”,从字面上理解,应该是以当前网络为基点的下一代网络。它是电信史一块里程碑,标志着新一代电信网络时代的到来。从网络功能层次上看,ngn在垂直方向从上往下依次包括业务层、控制层、媒体传输层和接入层,在水平方向应覆盖核心网和接入网乃至用户驻地网。网络业务层负责在呼叫建立的基础上提供各种增值业务和管理功能,网管和智能网是该层的一部分;控制层负责完成各种呼叫控制和相应业务处理信息的传送;媒体层负责将用户侧送来的信息转换为能够在网上传递的格式并将信息选路送至目的地,该层包含各种网关并负责网络边缘和核心的交换/选路;接入层负责将用户连至网络,集中其业务量并将业务传送至目的地,包括各种接入手段和接入节点。ngn的网络层次分层可以归结为一句话:ngn不仅实现了业务提供与呼叫控制的分离,而且还实现了呼叫控制与承载传输的分离。
16、手机短信发送sms的原理是什么?
短消息业务(sms-short
17、信道编码的目的
信道编码主要的目的应该是将模拟信号转换为数字信号在空中传输,这样就提高数据传输的可靠性,同时也提高了抗干扰的能力以及检错和纠错的能力,在现代无线通信领域里,信道编码还有另外的作用,那就是用于区分不同物理链路链接,这是利用编码的自相关性,当然也可以对不同的业务进行区分
18、repeater、bridge、router的区别
应该指的是中继器,桥接器,路由器吧。
中继器:是个网络互联设备,功能单一。工作在物理层,就是看的见的东西。主要用来加强信号的。一般信号传输较远时使用,相当于放大器。集线器(HUB)也是工作在物理层。
桥接器:桥接器作用在osi架构的数据链路层,它可以分辨封包的mac位址。在实际运作上,桥接器会将所收到资料的封包位置与它已知的网路区段位址做比对,如果封包位址不在同一个网路区段,就将资料转送出去。网桥也工作在这层。网关工作在传输层。
交换机:局域网交换机拥有许多端口,每个端口有自己的专用带宽,并且可以连接不同的网段。交换机各个端口之间的通信是同时的、并行的,这就大大提高了信息吞吐量。为了进一步提高性能,每个端口还可以只连接一个设备。
路由器:路由器工作在osi模型中的第三层,即网络层。路由器利用网络层定义的“逻辑”上的网络地址(即ip地址)来区别不同的网络,实现网络的互连和隔离,保持各个网络的独立性。路由器不转发广播消息,而把广播消息限制在各自的网络内部。发送到其他网络的数据茵先被送到路由器,再由路由器转发出去。
19、
df
举例:
[root@localhost
filesystem
/dev/hda8
/dev/shm
/dev/sda1
我们从中可以看到,系统安装在/dev/hda8
20、写出存储结构从高速到低速的四个划分
顺序、链接、索引、散列
21、多任务系统分为那两类?
基于进程和基于线程
22、模拟信号到数字信号的三个步骤
抽样
23、现代通信网的四个部分
传送网
24、三种多址
频分
25、三种交换
电路交换
电路交换是建立一条临时的专用通路,使用完以后拆除链接,适合打数据量的实时通信。
报文交换不在通信节点建立通路,将信息组合成报文,采用虚储-转发机制,线路的利用率高,但延迟大。
分组交换是数据包定长的报文交换,交换节点的缓冲区可减小,传播时延也更小;一般分为数据包、虚电路、信元交换。
1)电路交换:面向连接的交换,首先呼叫请求(有传播时延)+路由选择时间+传播时延+。。。直到到达目的结点后————反回呼叫确认信号(此时不需要路径选择)————建立起通信线路————发送数据(数据发送需要时间)
2)报文交换:有数就发送就好,只有传送时延(电信号传送速率200每微秒),发送的是整块数据,要求转接设备内存足够
3)分组交换:把报文分成分组,分组1。。。分组N
A-B-C-D;数据从A-》D的过程如下
分组1发送到B结点时,则分组2即可以开始传送,当分组1到C,分组2已到B,则分组3即可以发送,以此类推,可以看出时间比报文交换要少的多,相当于流水线。
面向连接的:传输数据之前要建立一个连接,电路交换是面向连接,数据所走的路径是相同。
无连接的:传数据之前不需要建立连接,报文交换和分组交换都是无连接的,无序传送,不一定走同一链路。
区别:
1)组成数据帧的格式不同,面向连接的数据帧中不需要包括序号字段,而无连接的数据帧中必须包括序与字段。
2)面向无连接的网络中必须有存储转发设备。
26、3g
3g是英文3rdgeneration的缩写,指第三代移动通信技术。相对第一代模拟制式手机(1g)和第二代gsm、tdma等数字手机(2g),第三代手机一般地讲,是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统。它能够处理图像、音乐、视频流等多种媒体形式,提供包括网页浏览、电话会议、电子商务等多种信息服务。为了提供这种服务,无线网络必须能够支持不同的数据传输速度,也就是说在室内、室外和行车的环境中能够分别支持至少2mbps(兆字节/每秒)、384kbps(千字节/每秒)以及144kbps的传输速度。
所谓3g手机通俗地说就是指第三代(thethirdgeneration)手机。随着科技和经济的发展,手机现在已不再是白领们的专利了,而且,目前的手机的品种和型号也是多的让人目不暇接,从第一代模拟制式手机到第二代的gsm、tdma等数字手机,再到现在的第三代手机,手机已经成了集语音通信和多媒体通信相结合,并且包括图像、音乐、网页浏览、电话会议以及其它一些信息服务等增值服务的新一代移动通信系统。
许多人和3g手机的第一次接触始于诺基亚的一个手机广告。一个快乐的旅游者手持3g手机徘徊在一个陌生的城市,手机里显示的街道地图指引他顺利抵达了目的地。3g手机的名称繁多,国际电联称之为”imt-2000″,欧洲的电信业巨头们则称其为”umts”(通用移动通信系统),3g手机可能应用的技术标准有wcdma、cdma-2000、td-scdma等等。3g手机完全是通信业和计算机工业相融合的产物,和此前的手机相比差别实在是太大了,因此越来越多的人开始称呼这类新的移动通信产品为”个人通信终端”。即使是对通信业最外行的人也可从外形上轻易地判断出一台手机是否是”第三代”:大多数的3g手机都有一个超大的彩色显示屏,往往还是触摸式的。
具备强大功能的基础是3g手机极高的数据传输速度,目前的gsm移动通信网的传输速度为每秒9.6k字节,而第三代手机最终可能达到的数据传输速度将高达每秒2兆字节。而为此做支撑的则是互联网技术充分糅合到3g手机系统中,其中最重要的就是数据打包技术。在现有gsm上应用数据打包技术发展出的gprs目前已可达到每秒384k字节的传输速度,这相当于d-isdn传输速度的两倍。3g手机支持高质量的话音,分组数据,多媒体业务和多用户速率通讯,将大大扩展手机通讯的内涵。
想知道什么是真正的3g生活吗?你的眼镜、手表、化妆盒、旅游鞋,任何一件你能看到的物品都有可能成为3g终端。当带宽和技术具备时,这个集成许多功能的终端使我们不仅可以随时随地通信,更可以双向下载传递资料、图画、影像,当然更可以和从未谋面的陌生人网上联线对打游戏。据专家介绍,3g时代的手机除了能高质量的完成目前手机所做的语音通信外,还能进行多媒体通信。用户可以在3g手机的触摸显示屏上直接写字、绘图,并将其传送给另一台手机,而所需时间可能不到一秒。当然,也可以将这些信息传送给一台电脑,或从电脑中下载某些信息;用户可以用3g手机直接上网,查看电子邮件或浏览网页;将有不少型号的3g手机自带摄像头,这将使用户可以利用手机进行电脑会议,甚至使数字相机成为一种”多余”。
27、gprs
gprs—general
由于使用了”分组”的技术,用户上网可以免受断线的痛苦(情形大概就跟使用了下载软件netants差不多)。此外,使用gprs上网的方法与wap并不同,用wap上网就如在家中上网,先”拨号连接”,而上网后便不能同时使用该电话线,但gprs就较为优越,下载资料和通话是可以同时进行的。从技术上来说,声音的传送(即通话)继续使用gsm,而数据的传送便可使用gprs,这样的话,就把移动电话的应用提升到一个更高的层次。而且发展gprs技术也十分”经济”,因为只须沿用现有的gsm网络来发展即可。gprs的用途十分广泛,包括通过手机发送及接收电子邮件,在互联网上浏览等。
现在手机上网的口号就是”always
而gprs的最大优势在于:它的数据传输速度不是wap所能比拟的。目前的gsm移动通信网的传输速度为每秒9.6k字节,gprs手机在今年年初推出时已达到56kbps的传输速度,到现在更是达到了115kbps(此速度是常用56kmodem理想速率的两倍)。所以敬请大家珍惜手上的nokia7110及motorolal2000,相信到了gprs手机推出时,他们都要让路。
gprs的应用,迟些还会配合bluetooth(蓝牙技术)的发展。到时,数码相机加了bluetooth,就可以马上通过手机,把像片传送到遥远的地方,也不过一刻钟的时间,够酷吧,这个日子将距离我们不远了
28、osi模型
iso将整个通信功能划分为七个层次,划分层次的原则是:
1、网中各节点都有相同的层次。
2、不同节点的同等层次具有相同的功能。
3、同一节点能相邻层之间通过接口通信。
4、每一层使用下层提供的服务,并向其上层提供服务。
5、不同节点的同等层按照协议实现对等层之间的通信。
第一层:物理层(physicallayer),规定通信设备的机械的、电气的、功能的和规程的特性,用以建立、维护和拆除物理链路连接。具体地讲,机械特性规定了网络连接时所需接插件的规格尺寸、引脚数量和排列情况等;电气特性规定了在物理连接上传输bit流时线路上信号电平的大小、阻抗匹配、传输速率距离限制等;功能特性是指对各个信号先分配确切的信号含义,即定义了dte和dce之间各个线路的功能;规程特性定义了利用信号线进行bit流传输的一组操作规程,是指在物理连接的建立、维护、交换信息时,dte和dce双方在各电路上的动作系列。
在这一层,数据的单位称为比特(bit)。
属于物理层定义的典型规范代表包括:eia/tia
第二层:数据链路层(datalinklayer):在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(frame)在信道上无差错的传输,并进行各电路上的动作系列。
数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
在这一层,数据的单位称为帧(frame)。
数据链路层协议的代表包括:sdlc、hdlc、ppp、stp、帧中继等。
第三层是网络层(network
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息-
如果你在谈论一个ip地址,那么你是在处理第3层的问题,这是“数据包”问题,而不是第2层的“帧”。ip是第3层问题的一部分,此外还有一些路由协议和地址解析协议(arp)。有关路由的一切事情都在第3层处理。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。
在这一层,数据的单位称为数据包(packet)。
网络层协议的代表包括:ip、ipx、rip、ospf等。
第四层是处理信息的传输层(transport
传输层协议的代表包括:tcp、udp、spx等。
第五层是会话层(session
这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。
第六层是表示层(presentation
这一层主要解决用户信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于osi系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩,加密和解密等工作都由表示层负责。例如图像格式的显示,就是由位于表示层的协议来支持。
第七层应用层(application
应用层协议的代表包括:telnet、ftp、http、snmp等。
通过
osi
对于从上一层传送下来的数据,附加在前面的控制信息称为头,附加在后面的控制信息称为尾。然而,在对来自上一层数据增加协议头和协议尾,对一个
当数据在各层间传送时,每一层都可以在数据上增加头和尾,而这些数据已经包含了上一层增加的头和尾。协议头包含了有关层与层间的通信信息。头、尾以及数据是相关联的概念,它们取决于分析信息单元的协议层。例如,传输层头包含了只有传输层可以看到的信息,传输层下面的其他层只将此头作为数据的一部分传递。对于网络层,一个信息单元由第三层的头和数据组成。对于数据链路层,经网络层向下传递的所有信息即第三层头和数据都被看作是数据。换句话说,在给定的某一
例如,如果计算机
计算机
一个
tcp/ip模型实际上是osi模型的一个浓缩版本,它只有四个层次:
1.应用层
2.运输层
3.网际层
4.网络接口层
与osi功能相比:
应用层对应着osi的
运输层对应着osi的传输层
网际层对应着osi的网络层
网络接口层对应着osi的数据链路层和物理层
29、voip
voip是
voip的基本原理是:通过语音的压缩算法对语音数据编码进行压缩处理,然后把这些语音数据按
在用户拨打长途电话时,网关根据电话区号数据库资料,确定相应网关的
30、qos
qos的英文全称为”quality
在正常情况下,如果网络只用于特定的无时间限制的应用系统,并不需要qos,比如web应用,或e-mail设置等。但是对关键应用和多媒体应用就十分必要。当网络过载或拥塞时,qos
31、什么是虚函数?有什么作用?
虚函数是c++多态的一种表现
例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virturl(虚函数)。使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。
如果父类的函数(方法)根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为virturl
32、linux下进程间通信的几种主要手段简介
1.管道(pipe)及有名管道(named
2.信号(signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持unix早期信号语义函数sigal外,还支持语义符合posix.1标准的信号函数sigaction(实际上,该函数是基于bsd的,bsd为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
3.报文(message)队列(消息队列):消息队列是消息的链接表,包括posix消息队列systemv消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
5.共享内存:使得多个进程可以访问同一块内存空间,是最快的可用ipc形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
6.信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
7.套接口(socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由unix系统的bsd分支开发出来的,但现在一般可以移植到其它类unix系统上:linux和system
下面将对上述通信机制做具体阐述。
附1:参考文献[2]中对linux环境下的进程进行了概括说明:
一般来说,linux下的进程包含以下几个关键要素:
1.有一段可执行程序;
2.有专用的系统堆栈空间;
3.内核中有它的控制块(进程控制块),描述进程所占用的资源,这样,进程才能接受内核的调度;
4.具有独立的存储空间
5.进程和线程有时候并不完全区分,而往往根据上下文理解其含义。
34、
(1)
编译的几个阶段
词法分析
目标代码生成
(2)软件开发的几个过程
需求分析,总体设计,详细设计,系统实现,测试,验收
35、7号信令
7号信令(七号信令)系统是一种国际性的标准化的通用公共信令系统,其基本特点是:
1,最适合由数字程控交换机和数字传输设备所组成的综合数字网。
2,能满足现在和将来传送呼叫控制、遥控、维护管理信令及处理机之间事务处理信息的要求。
3,信令传送相当可靠。
no.7号信令能满足多种通信业务的要求,当前应用的主要有:
1,局与局之间的电话网通信。
2,局与局之间的数据网通信。
3,局与局之间综合业务数字网。(例如:isdn
4,可以传送移动通信网中的各种信息。
5,支持各种类型的智能业务。
6,局端到用户端之间的电话网以及数据网的通信
36、
cdma2000即为cdma2000
cdma2000
36、
每个ip地址是由4个字节共32位的数字串组成,这4个字节通常用小数点分隔。每个字节可用十进制或十六进制表示,如129.45.8.22或0×8.0×43.0×10.0×26;就是用十进制或十六进制表示的ip地址。ip地址也可以用二进制表示。每个ip地址包括两个标识码(id),即网络id和宿主机id。同一个物理网络上的所有主机都用同一个网络id,网络上的一个主机(包括网络上工作站。服务器和路由器等)有一个主机id与其对应。据此把ip地址的4个字节划分为2个部分,一部分用以标明具体的网络段,即网络id;另一部分用以标明具体的节点,即宿主机id。在这32位地址信息内有五种定位的划分方式,这五种划分方法分别对应于a类、b类、c类、d类和e类ip地址。
1.a类ip地址
一个a类ip地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”.
1.0.0.0?
2.b类ip地址
一个b类ip地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”。
128.0.0.0到191.255.255.255
3.c类ip地址
一个c类地址是由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“ll0”。
192.0.0.0
4.d类地址用于多点播送。
第一个字节以“lll0”开始。因此,任何第一个字节大于223小于240的ip地址是多点播送地址。全零(“0.0.0.0”)地址对应于当前主机。全“1”的ip地址(“255.255.255.255”)是当前子网的广播地址。
5.e类地址
以“llll0”开始,为将来使用保留。
6.几个用作特殊用途的ip地址
①凡是主机段,即宿主机id全部设为“0”的ip地址称之为网络地址,如129.45.0.o就是8类网络地址。
②广播地址。凡是主机id部分全部设为“1”的ip地址称之为广播地址,如129.45.255.255就是b类的广播地址。
③保留地址。网络id不能以十进制“127”作为开头,在人类地址中数字127保留给诊断用。如127.1.1.1用于回路测试,同时网络id的第一个8位组也不能全置为“0”,全“0”表示本地网络。网络id部分全部为“0”和全部为“1”的ip地址被保留使用。
internet的设计者也不清楚它会怎样发展。一些研究者设想一个internet会是包含有许多主机的几个网。另一些人则预言有许多的网而每一个网上的主机并不太多,作为折中,
37、
第一次握手:建立连接时,客户端发送syn包(syn=j)
到服务器,并进入syn_send状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个syn包(syn=k),即syn+ack包,此时服务器进入syn_recv状态;
第三次握手:客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=k+1),此包发送完毕,客户端和服务器进入established状态,完成三次握手。
38、编写一个calloc(n,size),返回一个指向n个大小为size的对象的指针,用malloc(size)写
void
{
void
size_t
nbytes
ptr
if(ptr!=null){
return
}
39、请解释死锁deadlock,以及防止死锁的方法。
所谓死锁:
产生死锁的四个必要条件:
(1)
mutual
(2)
hold
(3)
no
(4)
circular
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
40、
c版本:
int
{
if(n==1)
{
return
}
else
{
return
}
}
main()
{
unsigned
unsigned
printf(”%d”,result);
getchar();
return
}
java版本:
public
{
public
{
int
int
result=digui(n);
system.out.println(result);
}
static
{
int
if(n==1)
{
return
}
else
{
return
}
}
}
41、i
ii
c
java
42、
类是面象对象编程(oop)的基本概念。oop将数据和函数封装到称为类的玩意中。
继承是软件复用的一种形式,实现这种形式的方法是从现有的类建立新类,新类继承了现有类的方法和属性,同时新类又可以定义自己的方法和属性。软件复用缩自短了开发时间。继承的魅力在于能够添加基类没有的特点从而对基类进行改进。
例如:在vc开发环境中有类库(mfc,atl),他们就是已经编好了的类,你在开发软件时可以对类库中的类进行扩展、改进,这在实际的开发中经常用到。做法就是以类库中的类为基类构造自己的类。说白了,继承是面向对象的基本特征,其最大的用处是可以软件复用。
多态是比较高级的特性,另一个高级特性是模板,这两个在构造复杂系统时才用得上,如mfc类库中大量运用了多态特性,而atl将模板运用得淋漓尽致。然而我们在学习c++之初对多态、模板并不重视,而将大量精力放在了指针、继承、重载等之上。当然这是合理的,因为指针、继承等是最基本的知识。
和你一样,在学习c++之初对多态没有正真理解,直到学了mfc后我才真正理解了多态有如些大的用途,c++是如此有魅力,而学了atl之后我才明白原来模板可以这么用。下面我给你介绍一下多态吧,分享一下,但我不是老师,讲得不一定很好。
多态分为模板的静态多态表现和类继承的动态绑定两种.
c++编译器在编译的时候,要确定每个对象调用的函数的地址,这称为早期绑定。与之对应的就是晚绑定。动态多态就是其中一种。
动态多态主要体现在虚函数的调用。在c++中,虚函数的调用使用的是动态绑定,也有人说是晚绑定、运行时绑定,也就是在程序运行时才决定调用的函数。这是通过类的虚表实现的(了解即可)
请注意,c++中多态的实现只在通过基类指针调用虚函数时才会实现。
关于多态下面举个例子就明白了:
如我们定义了一个动物类,动物都有一个共同的行为就是呼吸,那么把呼吸定义在基类中(这很好理解)。
在设计软件时我们可能会基于程序的灵活性或算法特殊要求而使用基类指针来调用派生类的方法。
比如基于上述类我们开发一个展示动物呼吸的程序,定义了几百种动物并实现了每种动物的breathe方法,使用者通过鼠标点击决定看哪一种动物的呼吸方式。
设计时考虑到,使用者并不是每次都想看完这几百种动物的呼吸,所以我们没有必要预先产生各种动物的对象,而只要在使用者点了某种动物后使用new操作符动态创建该对象即可,这样可以简化程序设计和节省内存空间。
c++语言:
#include
class
{
public:
virtual
{
coutbreathe();
delete
getchar();
}
java语言:
class
{
public
{
//父类不实现,交给子类去实现电脑打开的功能
}
}
class
{
public
{
system.out.println(“pc
}
}class
{
public
{
system.out.println(“nb
}
}
class
static
{
computer.turnon();
}
public
{
go(new
}
}
43、什么是白盒测试、黑盒测试、回归测试?
白盒测试就是将被测程序看做一个打开的盒子,根据程序的内部结构进行测试用例设计,检验内部操作是否按规定执行.
黑盒测试不考虑程序的内部结构和内部特性,根据程序的外部特性或输入输出进行测试用例设计和执行.
回归测试就是验证修改完提交的缺陷或增加了新功能等进行的程序修改后是否导致原有正常功能失效或引起新的bug.
44、测试脚本的内容
关于脚本的一些问题及其问题解答
1.什么是测试脚本,它和测试用例之间是一种什么关系?
什么是测试脚本,它是用来表示测试用例的么?确定了一个测试用例的具体内容以后,是不是就要用测试脚本将这些内容表示出来,在编写测试脚本的时候,会使用什么样的脚本语言来描述,或者用其他的语言来描述,
现在一般采用什么脚本语言?
请高手指点。
回答1:手工测试一般不会涉及到测试脚本。在自动化测试中,需要采用自动化测试工具,每种自动化测试工具都有自己的测试脚本,通过编写测试脚本,实现某个测试用例,运行测试脚本,既可执行该测试用例,并可以通过脚本自动检查测试用例的执行结果
——————————————————————————————————————————————————————
回答2:脚本语言根据你自己的情况可以使用不同的语言.
——————————————————————————————————————————————————————
回答3:测试脚本就是用户对业务操作的记录,将测试用例用测试脚本表述出来,那我们就不用手工执行测试了,就可以通过执行测试脚本来执行测试
——————————————————————————————————————————————————————
回答4:这个是我自己的回答,其实测试脚本就是相当于手工测试的测试用例,测试用例最关键的是预期的输入和输出。测试脚本在录制的时候相当于写手动测试的测试用例步骤,而插入各种检查点(qtp)就是预期的输出,通过检查点判断结果是否正确。而lr的测试脚本的预期输出实际上是客户的性能需求
45、软件测试的22种类型
黑盒测试:不基于内部设计和代码的任何知识,而是基于需求和功能性。
等价分类法、边沿值分析法、错误推测法和因果图等技术
白盒测试:基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。路径测试技术和事务处理流程技术
单元测试:最微小规模的测试;以测试某个功能或代码块。典型地由程序员而非测试员来做,因为它需要知道内部程序设计和编码的细节知识。这个工作不容易作好,除非应用系统有一个设计很好的体系结构;
集成测试:一个应用系统的各个部件的联合测试,以决定他们能否在一起共同工作。部件可以是代码块、独立的应用、网络上的客户端或服务器端程序。这种类型的测试尤其与客户服务器和分布式系统有关。
功能测试:用于测试应用系统的功能需求的黑盒测试方法。这类测试应由测试员做,这并不意味着程序员在发布前不必检查他们的代码能否工作(自然他能用于测试的各个阶段)。
累积综合测试:当一个新功能增加后,对应用系统所做的连续测试。它要求应用系统的不同形态的功能能够足够独立以可以在全部系统完成前能分别工作,或当需要时那些测试驱动器已被开发出来;
系统测试:基于系统整体需求说明书的黑盒类测试;应覆盖系统所有联合的部件。
端到端测试:类似于系统测试;测试级的“宏大”的端点;涉及整个应用系统环境在一个现实世界使用时的模拟情形的所有测试。例如与数据库对话,用网络通讯,或与外部硬件、应用系统或适当的系统对话。
比较测试:与竞争伙伴的产品的比较测试,如软件的弱点、优点或实力。
alpha
beta
健全测试:典型地是指一个初始化的测试工作,以决定一个新的软件版本测试是否足以执行下一步大的测试努力。例如,如果一个新版软件每5分钟与系统冲突,使系统陷于泥潭,说明该软件不够“健全”,目前不具备进一步测试的条件。
衰竭测试:软件或环境的修复或更正后的“再测试”。可能很难确定需要多少遍再次测试。尤其在接近开发周期结束时。自动测试工具对这类测试尤其有用。
接受测试:基于客户或最终用户的规格书的最终测试,或基于用户一段时间的使用后,看软件是否满足客户要求。
负载测试:测试一个应用在重负荷下的表现,例如测试一个
强迫测试:在交替进行负荷和性能测试时常用的术语。也用于描述象在异乎寻常的重载下的系统功能测试之类的测试,如某个动作或输入大量的重复,大量数据的输入,对一个数据库系统大量的复杂查询等。
性能测试:在交替进行负荷和强迫测试时常用的术语。理想的“性能测试”(和其他类型的测试)应在需求文档或质量保证、测试计划中定义。
安装/卸载测试:对软件的全部、部分或升级安装/卸载处理过程的测试。
恢复测试:测试一个系统从如下灾难中能否很好地恢复,如遇到系统崩溃、硬件损坏或其他灾难性问题。
安全测试:测试系统在防止非授权的内部或外部用户的访问或故意破坏等情况时怎么样。这可能需要复杂的测试技术。
可用性测试:对“用户友好性”的测试。显然这是主观的,且将取决于目标最终用户或客户。用户面谈、调查、用户对话的录象和其他一些技术都可使用。程序员和测试员通常都不宜作可用性测试员。
兼容测试:测试软件在一个特定的硬件/软件/操作系统/网络等环境下的性能如何。
46、回归测试
说到回归测试用例,先说什么是回归测试。顾名思义,回归测试就是修改完bug之后对程序的新的一轮测试,据微软的统计,按照他们的经验,一般开发人员解决3~4个bug会衍生出一个新的bug,这就是必须作回归测试的原因。简单的说,就是检测一下解决了bug之后有没有带进新的问题,以免把聋子给治成哑巴,就得不偿失了~~
一般的软件测试的流程是后期快速迭代的,bug在后期是快速收敛的,debug和测试的周期也是越来越短,频率是越来越高,譬如说第一轮测试需要花上10天跑用例,那么到后期就没那么长的时间,可能就是1~2天的测试时间,在后期有时候一天就有一个新的版本,这时候就要求测试人员能快速的进行一轮回归测试。
一般来说,覆盖越高,风险越低,但是效率就越差,反之亦然。所以如果时间允许的话,能把所有的用例都再跑一边是最好不过的,但是一般不会有那么多的时间,这就需要在效率和覆盖之间有一个适当的平衡,选择其中一部分测试用例用来作回归测试。
选择回归测试的时候,首先要确定的是,回归测试用例的比例,这个要根据时间情况了,100%是最好了,一般这个比例在60%左右。然后要确定回归测试用例的优先级。
第一,新修改的功能,这个显然是重点
第二,新修改的功能的关联功能,就是有耦合的部分,这个一般最好咨询一下开发人员
第三,程序最有卖点或者说亮点的部分,这个地方一旦有问题,会使程序质量大打折扣
第四,程序中最致命的部分,譬如说安全隐患,数据泄露,加密注册,
第五,程序中比较脆弱的部分,这个要咨询开发人员,一般就是他们心中最没底的地方
第六,程序的主干功能
第七,如果以上做完,还有时间的话,最好把用例中级别比较高的用例再执行一遍。
ok
其实,即使这样做,还是有风险的。最根本的解决方法是自动化测试工具加上手工测试。具体就是常用的程序主干功能,主要功能,用自动化测试,保证每一个版本都能够执行一遍,其他修改频繁的小功能手工测试了。
回归测试的终极解决方案是:
a.作每日构建
b.基线功能自动化
c.编写用例时一定要分级(按照风险度,常用度,重要度)
d.手工执行回归测试用例
47、programming
找出100到1000里素数的个数
- int
GetPrimeNumber(int maxNum) - {
- int
Max[maxNum/2]; // 在栈上分配,栈上空间要求一般都在2M之间, - // 如果你需要更大空间,请在堆上申请空间(就是通过malloc,new来申请).素数的个数很少
- // 所以没有必要申请和所求数字同样大小的空间。
- memset(Max,0,maxNum);
- Max[0] = 2;// 放入第一个素数,有人说2不是素数,如果你是其中一员,就改成3吧
- int
cout = 1;// 记录素数个数 -
- // 挨个数进行验证
- bool
bflag = true; - for(int
i = 3; i < MAX_NUMBER; ++i) - {
- bflag = true;
- // 需要是使用数学库(math.h)中sqrt
- int
iTemp = (int)sqrt((float)i);// 强制转换成int类型,有的人在这里使用i+1就是为了增加sqrt的精度 - // 没有特殊函数,你也可以使用int iTemp = (int)sqrt(i)+1;来提高进度
- for
(int j = 2; j < iTemp; ++j) - {
- if(i%j == 0)// 求余,如果为0说明,可以整除,不是素数。
- {
- bflag = false;
- break;
- }
- }
- // 经过验证是素数,放入数组。
- if(bflag)
- {
- Max[cout++] = i;
- }
- }
- return
cout; - }
-
- int
num; //100到1000的素数个数 - num = GetPrimeNumber(1000) - GetPrimeNumber(100);