阿朗笔试题

网桥:2层,数据链路层,跟据mac地址决定转发。
路由器:3层,网络层,根据ip地址决定转发。
网关:4层,传输层,根据段口号决定转发。

 

1、explain “what’s winxp os?” to your grandmother in brief and common language 
答案:操作系统(operating system)是用户和计算机之间的界面. 一方面操作系统管理着所有计算机系统资源, 另一方面操作系统为用户提供了一个抽象概念上的计算机. 在操作系统的帮助下, 用户使用计算机时, 避免了对计算机系统硬件的直接操作.

 
2、new, malloc 
答案:malloc与free是c++/c语言的标准库函数,new/delete是c++的运算符。它们都可用于申请动态内存和释放内存。new是c++用来动态内存分配的,如要在内存中开辟一个空间,用来存放int型变量,则int a=new int,由new开辟的空间在使用完毕后由delete来释放空间。malloc是c用来动态内存分配的,如int a=(int *)malloc(sizeof(int));用free来释放资源。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。既然new/delete的功能完全覆盖了malloc/free,为什么c++不把malloc/free淘汰出局呢?这是因为c++程序经常要调用c函数,而c程序只能用malloc/free管理动态内存。

3. public inherit 和 private inherit
答案:无论是public还是private派生,基类中的private成员在派生类中都是不可见的,public派生时,基类中的public成员相当于派生类中的public成员,private派生时,基类中的public成员相当于派生类的private成员。


4. sizeof 和 strlen
答案:sizeof可以用来计算某个类型在内存中占多少个字节,而strlen只是用来计算字符串的长度,且必须以‘\0′结束,不是用来计算内存的。sizeof是算符,而strlen是函数。


5. typeid(*pb)
答案:typeid操作符:返回指针或者引用所指对象的实际类型。运行时获知变量类型名称


6. *,&
答案:*为指针的间接引用,&是取地址运算符,也可以用作引用,如int f=1;int *p=&f; 则指针p指向f的地址,*p==f;而引用 int f=1;int &rf=f;? rf是f的一个引用,引用必须初始化,实际上rf和f是同一个变量


7. 析构函数
构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
以c++语言为例,析构函数名也应与类名相同,只是在函数名前面加一个波浪符~,例如~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。所以许多简单的类中没有用显式的析构函数。

析构函数可以设置为虚函数,但是构造函数不行。


8. rarp在 ip layer/ link layer/ physical layer/ tcp layer?
逆向地址解析协议在 ip layer


9. network address和broadcast address
network address(网络地址):网络层地址,指的是网络设备的逻辑地址,而非物理地址。也称它为协议地址。
broadcast address(广播地址): 专门用于同时向网络中所有工作站进行发送的一个地址。在使用tcp/ip 协议的网络中,主机标识段hostid 为全1 的ip 地址为广播地址,广播的分组传送给hostid 段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ),当发出一个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机。

10. process和thread
进程是程序的一次执行。线程可以理解为进程中执行的一段程序片段。进程间是独立的,这表现在内存空间,上下文环境上;线程运行在进程空间内。一般来讲(不使用特殊技术),进程无法突破进程边界存取其他进程内的内存空间;而线程由于处在进程空间内,所以同一进程所产生的线程共享同一内存空间。同一进程中的两段代码不能够同时执行,除非引入线程。线程属于进程的,当进程退出时,该进程所产生的线程都会被强制退出并清除。线程占用的资源少于进程所占用的资源。进程和线程都可以有优先级。

11、rename folder in unix system 
   mv oldfilename newfilename


12. chmod 755 tt.sh
 ??

13. synchronization(term in telecommunication), general type of synchronization
???同步通信方式

14. a-law non-uniform. quantizing
非均匀量化是根据信号的不同区间来确定量化间隔的。对于信号取值小的区间,其量化间隔也小;反之,量化间隔就大。它与均匀量化相比,有两个主要的优点:当输入量化器的信号具有非均匀分布的概率密度时,非均匀量化器的输出端可以较高的平均信号量化噪声功率比; 非均匀量化时,量化噪声功率的均方根值基本上与信号抽样值成比例。因此,量化噪声对大、小信号的影响大致相同,即改善了小信号时的量化信噪比。

15、ngn解释
nextgeneration networking (ngn) is broad term for certain kind ofemerging computer network architectures and technologies. it generallydescribes networks that natively encompass data and voice (pstn)transmissions, as well as (optionally) additional media such as video.
ngn是指下一代网络。所谓“下一代网络”,从字面上理解,应该是以当前网络为基点的下一代网络。它是电信史一块里程碑,标志着新一代电信网络时代的到来。从网络功能层次上看,ngn在垂直方向从上往下依次包括业务层、控制层、媒体传输层和接入层,在水平方向应覆盖核心网和接入网乃至用户驻地网。网络业务层负责在呼叫建立的基础上提供各种增值业务和管理功能,网管和智能网是该层的一部分;控制层负责完成各种呼叫控制和相应业务处理信息的传送;媒体层负责将用户侧送来的信息转换为能够在网上传递的格式并将信息选路送至目的地,该层包含各种网关并负责网络边缘和核心的交换/选路;接入层负责将用户连至网络,集中其业务量并将业务传送至目的地,包括各种接入手段和接入节点。ngn的网络层次分层可以归结为一句话:ngn不仅实现了业务提供与呼叫控制的分离,而且还实现了呼叫控制与承载传输的分离。


16、手机短信发送sms的原理是什么?
短消息业务(sms-short message service)的实现原理很简单,但用户在手机上输入文字的过程却比较麻烦。sms有两大突出优点:第一是存储转发机制。sms传送数据包的工作由移动网络中的短消息中心而不是终端用户来完成,如果用户不在服务区内,短消息就被存储在短消息中心,等用户出现之后再转发给他,这是gprs等业务所不具备的。第二是传递确认机制在电路交换数据环境中,连接是端到端的,所以用户能够知道连接是否完成,以及数据传递的情况,但在gprs环境中,附属于gprs承载体的终端是“永远在线”的,它在任何时候都准备透明地(相对于用户而言)传送或接收数据,这样一来,检查数据包是否发送成功的任务就落到了用户头上,对于每一次分组数据业务,其相应的成本也会比sms高。


17、信道编码的目的
信道编码主要的目的应该是将模拟信号转换为数字信号在空中传输,这样就提高数据传输的可靠性,同时也提高了抗干扰的能力以及检错和纠错的能力,在现代无线通信领域里,信道编码还有另外的作用,那就是用于区分不同物理链路链接,这是利用编码的自相关性,当然也可以对不同的业务进行区分


18、repeater、bridge、router的区别
应该指的是中继器,桥接器,路由器吧。
中继器:是个网络互联设备,功能单一。工作在物理层,就是看的见的东西。主要用来加强信号的。一般信号传输较远时使用,相当于放大器。集线器(HUB)也是工作在物理层。
桥接器:桥接器作用在osi架构的数据链路层,它可以分辨封包的mac位址。在实际运作上,桥接器会将所收到资料的封包位置与它已知的网路区段位址做比对,如果封包位址不在同一个网路区段,就将资料转送出去。网桥也工作在这层。网关工作在传输层。
交换机:局域网交换机拥有许多端口,每个端口有自己的专用带宽,并且可以连接不同的网段。交换机各个端口之间的通信是同时的、并行的,这就大大提高了信息吞吐量。为了进一步提高性能,每个端口还可以只连接一个设备。
路由器:路由器工作在osi模型中的第三层,即网络层路由器利用网络层定义的“逻辑”上的网络地址(即ip地址)来区别不同的网络,实现网络的互连和隔离,保持各个网络的独立性。路由器不转发广播消息,而把广播消息限制在各自的网络内部。发送到其他网络的数据茵先被送到路由器,再由路由器转发出去。


19、 unix/linux 中分析磁盘剩余空间命令为何?并描述其输出结果
df 是来自于coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置; 
举例: 
[root@localhost beinan]# df -lh 
filesystem 容量 已用 可用 已用% 挂载点 
/dev/hda8 11g 6.0g 4.4g 58% 
/dev/shm 236m 236m 0% /dev/shm 
/dev/sda1 56g 22g 35g 39% /mnt/sda1 
我们从中可以看到,系统安装在/dev/hda8 ;还有一个56g的磁盘分区/dev/sda1挂载


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 packet radioservice,通用无线分组业务,是一种基于gsm系统的无线分组交换技术,提供端到端的、广域的无线ip连接。通俗地讲,gprs是一项高速数据处理的技术,方法是以”分组”的形式传送资料到用户手上。虽然gprs是作为现有gsm网络向第三代移动通信演变的过渡技术,但是它在许多方面都具有显著的优势。目前,香港作为第一个进行gprs实地测试的地区,已经取得了良好的收效。
由于使用了”分组”的技术,用户上网可以免受断线的痛苦(情形大概就跟使用了下载软件netants差不多)。此外,使用gprs上网的方法与wap并不同,用wap上网就如在家中上网,先”拨号连接”,而上网后便不能同时使用该电话线,但gprs就较为优越,下载资料和通话是可以同时进行的。从技术上来说,声音的传送(即通话)继续使用gsm,而数据的传送便可使用gprs,这样的话,就把移动电话的应用提升到一个更高的层次。而且发展gprs技术也十分”经济”,因为只须沿用现有的gsm网络来发展即可。gprs的用途十分广泛,包括通过手机发送及接收电子邮件,在互联网上浏览等。
现在手机上网的口号就是”always online”、”ip inhand”,使用了gprs后,数据实现分组发送和接收,这同时意味着用户总是在线且按流量计费,迅速降低了服务成本。对于继续处在难产状态的中国移动/联通wap资费政策,如果将csd(电路交换数据,即通常说的拨号数据,欧亚wap业务所采用的承载方式)承载改为在gprs上实现,则意味着由数十人共同来承担原来一人的成本。
而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 rs-232、eia/tia rs-449、v.35、rj-45等。
第二层:数据链路层(datalinklayer):在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(frame)在信道上无差错的传输,并进行各电路上的动作系列。
数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
在这一层,数据的单位称为帧(frame)。
数据链路层协议的代表包括:sdlc、hdlc、ppp、stp、帧中继等。
第三层是网络层(network layer)
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。
如果你在谈论一个ip地址,那么你是在处理第3层的问题,这是“数据包”问题,而不是第2层的“帧”。ip是第3层问题的一部分,此外还有一些路由协议和地址解析协议(arp)。有关路由的一切事情都在第3层处理。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。
在这一层,数据的单位称为数据包(packet)。
网络层协议的代表包括:ip、ipx、rip、ospf等。
第四层是处理信息的传输层(transport layer)。第4层的数据单元也称作数据包(packets)。但是,当你谈论tcp等具体的协议时又有特殊的叫法,tcp的数据单元称为段(segments)而udp协议的数据单元称为“数据报(datagrams)”。这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所谓透明的传输是指在通信过程中传输层对上层屏蔽了通信传输系统的具体细节。
传输层协议的代表包括:tcp、udp、spx等。
第五层是会话层(session layer)
这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。
第六层是表示层(presentation layer)
这一层主要解决用户信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于osi系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩,加密和解密等工作都由表示层负责。例如图像格式的显示,就是由位于表示层的协议来支持。
第七层应用层(application layer),应用层为操作系统或网络应用程序提供访问网络服务的接口。
应用层协议的代表包括:telnet、ftp、http、snmp等。
通过 osi 层,信息可以从一台计算机的软件应用程序传输到另一台的应用程序上。例如,计算机 上的应用程序要将信息发送到计算机 b的应用程序,则计算机 a中的应用程序需要将信息先发送到其应用层(第七层),然后此层将信息发送到表示层(第六层),表示层将数据转送到会话层(第五层),如此继续,直至物理层(第一层)。在物理层,数据被放置在物理网络媒介中并被发送至计算机 。计算机 b的物理层接收来自物理媒介的数据,然后将信息向上发送至数据链路层(第二层),数据链路层再转送给网络层,依次继续直到信息到达计算机 b的应用层。最后,计算机 的应用层再将信息传送给应用程序接收端,从而完成通信过程。下面图示说明了这一过程。
osi 的七层运用各种各样的控制信息来和其他计算机系统的对应层进行通信。这些控制信息包含特殊的请求和说明,它们在对应的 osi 层间进行交换。每一层数据的头和尾是两个携带控制信息的基本形式。
对于从上一层传送下来的数据,附加在前面的控制信息称为头,附加在后面的控制信息称为尾。然而,在对来自上一层数据增加协议头和协议尾,对一个 osi 层来说并不是必需的。
当数据在各层间传送时,每一层都可以在数据上增加头和尾,而这些数据已经包含了上一层增加的头和尾。协议头包含了有关层与层间的通信信息。头、尾以及数据是相关联的概念,它们取决于分析信息单元的协议层。例如,传输层头包含了只有传输层可以看到的信息,传输层下面的其他层只将此头作为数据的一部分传递。对于网络层,一个信息单元由第三层的头和数据组成。对于数据链路层,经网络层向下传递的所有信息即第三层头和数据都被看作是数据。换句话说,在给定的某一 osi 层,信息单元的数据部分包含来自于所有上层的头和尾以及数据,这称之为封装。
例如,如果计算机 要将应用程序中的某数据发送至计算机 ,数据首先传送至应用层。 计算机 的应用层通过在数据上添加协议头来和计算机b 的应用层通信。所形成的信息单元包含协议头、数据、可能还有协议尾,被发送至表示层,表示层再添加为计算机 b的表示层所理解的控制信息的协议头。信息单元的大小随着每一层协议头和协议尾的添加而增加,这些协议头和协议尾包含了计算机 b的对应层要使用的控制信息。在物理层,整个信息单元通过网络介质传输。
计算机 中的物理层收到信息单元并将其传送至数据链路层;然后 中的数据链路层读取计算机 a的数据链路层添加的协议头中的控制信息;然后去除协议头和协议尾,剩余部分被传送至网络层。每一层执行相同的动作:从对应层读取协议头和协议尾,并去除,再将剩余信息发送至上一层。应用层执行完这些动作后,数据就被传送至计算机 中的应用程序,这些数据和计算机 的应用程序所发送的完全相同 
一个 osi 层与另一层之间的通信是利用第二层提供的服务完成的。相邻层提供的服务帮助一 osi 层与另一计算机系统的对应层进行通信。一个osi 模型的特定层通常是与另外三个 osi 层联系:与之直接相邻的上一层和下一层,还有目标联网计算机系统的对应层。例如,计算机 a的数据链路层应与其网络层,物理层以及计算机 的数据链路层进行通信。
tcp/ip模型实际上是osi模型的一个浓缩版本,它只有四个层次:
1.应用层
2.运输层
3.网际层
4.网络接口层
与osi功能相比:
应用层对应着osi的 应用层 表示层 会话层
运输层对应着osi的传输层
网际层对应着osi的网络层
网络接口层对应着osi的数据链路层和物理层


29、voip
voip是 voice over internet protocol的缩写,指的是将模拟的声音讯号经过压缩与封包之后,以数据封包的形式在ip 网络的环境进行语音讯号的传输,通俗来说也就是互联网电话、网络电话或者简称ip电话的意思。voip技术是目前互联网应用领域的一个热门话题,成为2004年全球互联网与电子商务十大趋势之一(emarketer)。
voip的基本原理是:通过语音的压缩算法对语音数据编码进行压缩处理,然后把这些语音数据按 tcp/ip 标准进行打包,经过 ip网络把数据包送至接收地,再把这些语音数据包串起来,经过解压处理后,恢复成原来的语音信号,从而达到由互联网传送语音的目的。 ip电话的核心与关键设备是 ip 网关,它把各地区电话区号映射为相应的地区网关 ip 地址。这些信息存放在一个数据库中,数据接续处理软件将完成呼叫处理、数字语音打包、路由管理等功能。
在用户拨打长途电话时,网关根据电话区号数据库资料,确定相应网关的 ip 地址,并将此 ip 地址加入 ip数据包中,同时选择最佳路由,以减少传输时延, ip 数据包经 internet 到达目的地的网关。在一些 internet尚未延伸到或暂时未设立网关的地区,可设置路由,由最近的网关通过长途电话网转接,实现通信业务


30、qos
qos的英文全称为”quality of service”,中文名为”服务质量”。qos是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。
在正常情况下,如果网络只用于特定的无时间限制的应用系统,并不需要qos,比如web应用,或e-mail设置等。但是对关键应用和多媒体应用就十分必要。当网络过载或拥塞时,qos 能确保重要业务量不受延迟或丢弃,同时保证网络的高效运行。


31、什么是虚函数?有什么作用?
虚函数是c++多态的一种表现
例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virturl(虚函数)。使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。
如果父类的函数(方法)根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为virturl 函数名=0,我们把这样的函数(方法)称为纯虚函数。如果一个类包含了纯虚函数,称此类为抽象类

32、linux下进程间通信的几种主要手段简介
1.管道(pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
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 v的变种都支持套接字。
下面将对上述通信机制做具体阐述。
附1:参考文献[2]中对linux环境下的进程进行了概括说明:
一般来说,linux下的进程包含以下几个关键要素:
1.有一段可执行程序;
2.有专用的系统堆栈空间;
3.内核中有它的控制块(进程控制块),描述进程所占用的资源,这样,进程才能接受内核的调度;
4.具有独立的存储空间
5.进程和线程有时候并不完全区分,而往往根据上下文理解其含义。

 


34、 
(1)
编译的几个阶段
词法分析 语法分析 语义分析 中间代码生成 中间代码优化
目标代码生成 符号表管理 出错处理
(2)软件开发的几个过程
需求分析,总体设计,详细设计,系统实现,测试,验收


35、7号信令
7号信令(七号信令)系统是一种国际性的标准化的通用公共信令系统,其基本特点是:
1,最适合由数字程控交换机和数字传输设备所组成的综合数字网。
2,能满足现在和将来传送呼叫控制、遥控、维护管理信令及处理机之间事务处理信息的要求。
3,信令传送相当可靠。
no.7号信令能满足多种通信业务的要求,当前应用的主要有:
1,局与局之间的电话网通信。
2,局与局之间的数据网通信。
3,局与局之间综合业务数字网。(例如:isdn pri)
4,可以传送移动通信网中的各种信息。
5,支持各种类型的智能业务。
6,局端到用户端之间的电话网以及数据网的通信


36、 cdma2000
cdma2000即为cdma2000 1×ev,是一种3g移动通信标准。分两个阶段:cdma2000 1×ev-do(data only),采用话音分离的信道传输数据,和cdma2000 1×ev-dv(date and voice),即数据信道于话音信道合一。cdma2000也称为cdma multi-carrier,由美国高通北美公司为主导提出,摩托罗拉、lucent和後来加入的韩国三星都有参与,韩国现在成为该标准的主导者。这套系 统是从窄频cdma one数字标准衍生出来的,可以从原有的cdma one结构直接升级到3g,建设成本低廉。但目前使用cdma的地区只有日、韩和北美,所以cdma2000的支持者不如w-cdma多。不过 cdma2000的研发技术却是目前各标准中进度最快的,许多3g手机已经率先面世。
cdma2000 是一个3g移动通讯标准,国际电信联盟itu的imt-2000标准认可的无线电接口,也是2g cdma标准(is-95, 标志 cdma1x)的延伸。 根本的信令标准是is-2000。 cdma2000与另一个主要的3g标准w-cdma不兼容。


36、 ip地址类型
每个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? ~126.255.255.255
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 223.255.255.255
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会是包含有许多主机的几个网。另一些人则预言有许多的网而每一个网上的主机并不太多,作为折中, internet的地址是适合大网和小网的。它们被确定为32bit但有三种类型。地址是自定义的,它的最高位定义地址的类型。a类地址支持多个主机在一个网:最高位为0,跟随有7bit网络部份和24bii主机部份。在b类地址,最高位是非0,跟随有14bit网络号和16bii主机号。c类地址以110开始,跟随有2lbit网络号和8bit主机号。按常规,internet地址由加点的字符给出。地址由四部份10进制数组成,用点作分隔。例如,10.0,0.51和128.10.2.1分别是a类和b类的internet地址。


37、 tcp三次握手
第一次握手:建立连接时,客户端发送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 *calloc(size_t num, size_t size)
{
void *ptr null;
size_t nbytes 0;
nbytes num*size;
ptr malloc(nbytes);
if(ptr!=null){ memset(ptr, 0×0,nbytes); }
return ptr;
}


39、请解释死锁deadlock,以及防止死锁的方法。
所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程.
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
mutual exclusion–not required for sharable resources; must hold for nonsharable resources.
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
hold and wait–must guarantee that whenever process requests resource, it does not hold any other resources.
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
no preemption–if aprocess that is holding some resources requests another resource thatcannot be immediately allocated to it, then all resources currentlybeing held are released.
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
circular wait–imposea total ordering of all resource types, and require that each processrequests resources in an increasing order of enumeration.
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。


40、 写一个递归程序求“n!”,语言可以自选,最好用c/c++或java、delphi、pascal 
c版本:
int digui(int n)
unsigned int result=1;
if(n==1)
{
return result;
}
else
{
return n*digui(n-1);
}
}
main()
{
unsigned int n=5;
unsigned long result=digui(n);
printf(”%d”,result);
getchar();
return 0;
}
java版本:
public class digui
{
public static void main(string[] args)
{
int result=1;
int n=3;
result=digui(n);
system.out.println(result);
}
static int digui(int n)
{
int result=1;
if(n==1)
{
return result;
}
else
{
return n*digui(n-1);
}
}
}


41、i  the program that tranlate high level program into low_level program to be execute in computer 叫做什么?

   编译 compile  
ii c和java都是可移植的,但是是在不同的level,请指出它们分别在那个level上可以移植。
   c是处理器级别的,java是编译器级别的。c直接处理处理器资源,而java通过jvm这个中间虚拟机然后再对资源处理。
是通过使用不同的编译器来实现在不同的 cpu 上移植。
java 是通过使用不同的虚拟机来实现在不同的操作系统上移植。

42、 什么叫多态,举个多态的例子
类是面象对象编程(oop)的基本概念。oop将数据和函数封装到称为类的玩意中。
继承是软件复用的一种形式,实现这种形式的方法是从现有的类建立新类,新类继承了现有类的方法和属性,同时新类又可以定义自己的方法和属性。软件复用缩自短了开发时间。继承的魅力在于能够添加基类没有的特点从而对基类进行改进。
例如:在vc开发环境中有类库(mfc,atl),他们就是已经编好了的类,你在开发软件时可以对类库中的类进行扩展、改进,这在实际的开发中经常用到。做法就是以类库中的类为基类构造自己的类。说白了,继承是面向对象的基本特征,其最大的用处是可以软件复用。
多态是比较高级的特性,另一个高级特性是模板,这两个在构造复杂系统时才用得上,如mfc类库中大量运用了多态特性,而atl将模板运用得淋漓尽致。然而我们在学习c++之初对多态、模板并不重视,而将大量精力放在了指针、继承、重载等之上。当然这是合理的,因为指针、继承等是最基本的知识。
和你一样,在学习c++之初对多态没有正真理解,直到学了mfc后我才真正理解了多态有如些大的用途,c++是如此有魅力,而学了atl之后我才明白原来模板可以这么用。下面我给你介绍一下多态吧,分享一下,但我不是老师,讲得不一定很好。
多态分为模板的静态多态表现和类继承的动态绑定两种.
c++编译器在编译的时候,要确定每个对象调用的函数的地址,这称为早期绑定。与之对应的就是晚绑定。动态多态就是其中一种。
动态多态主要体现在虚函数的调用。在c++中,虚函数的调用使用的是动态绑定,也有人说是晚绑定、运行时绑定,也就是在程序运行时才决定调用的函数。这是通过类的虚表实现的(了解即可)
请注意,c++中多态的实现只在通过基类指针调用虚函数时才会实现。
关于多态下面举个例子就明白了:
如我们定义了一个动物类,动物都有一个共同的行为就是呼吸,那么把呼吸定义在基类中(这很好理解)。
在设计软件时我们可能会基于程序的灵活性或算法特殊要求而使用基类指针来调用派生类的方法。
比如基于上述类我们开发一个展示动物呼吸的程序,定义了几百种动物并实现了每种动物的breathe方法,使用者通过鼠标点击决定看哪一种动物的呼吸方式。
设计时考虑到,使用者并不是每次都想看完这几百种动物的呼吸,所以我们没有必要预先产生各种动物的对象,而只要在使用者点了某种动物后使用new操作符动态创建该对象即可,这样可以简化程序设计和节省内存空间。
c++语言: c++实现多态
#include 
class animal
{
public:
virtual void breathe() //注意这是虑函数
{
coutbreathe();
delete pan;
getchar();
}
java语言: java实现多态
class computer
{
public void turnon()
{
//父类不实现,交给子类去实现电脑打开的功能
}
}
class pc extends computer
{
public void turnon()
{
system.out.println(“pc has turn on”);
}
}class nb extends computer
{
public void turnon()
{
system.out.println(“nb has turn on”);
}
}
class polymorphism{
static public void go(computer computer)
{
computer.turnon();
}
public static void main(string args [])
{
go(new pc());
}
}


43、什么是白盒测试黑盒测试、回归测试?
白盒测试就是将被测程序看做一个打开的盒子,根据程序的内部结构进行测试用例设计,检验内部操作是否按规定执行.
黑盒测试不考虑程序的内部结构和内部特性,根据程序的外部特性或输入输出进行测试用例设计和执行.
回归测试就是验证修改完提交的缺陷或增加了新功能等进行的程序修改后是否导致原有正常功能失效或引起新的bug.


44、测试脚本的内容
关于脚本的一些问题及其问题解答
1.什么是测试脚本,它和测试用例之间是一种什么关系? 
什么是测试脚本,它是用来表示测试用例的么?确定了一个测试用例的具体内容以后,是不是就要用测试脚本将这些内容表示出来,在编写测试脚本的时候,会使用什么样的脚本语言来描述,或者用其他的语言来描述,
现在一般采用什么脚本语言?
请高手指点。

回答1:手工测试一般不会涉及到测试脚本。在自动化测试中,需要采用自动化测试工具,每种自动化测试工具都有自己的测试脚本,通过编写测试脚本,实现某个测试用例,运行测试脚本,既可执行该测试用例,并可以通过脚本自动检查测试用例的执行结果
——————————————————————————————————————————————————————
回答2:脚本语言根据你自己的情况可以使用不同的语言. perl 就是一个很好的脚本语言. 当然如果是在windows上,使用vb也很好. 看你测试的目的和test harness的关系,可以选用不同的语言,主要就是为了方便容易调试.
——————————————————————————————————————————————————————
回答3:测试脚本就是用户对业务操作的记录,将测试用例用测试脚本表述出来,那我们就不用手工执行测试了,就可以通过执行测试脚本来执行测试
——————————————————————————————————————————————————————
回答4:这个是我自己的回答,其实测试脚本就是相当于手工测试的测试用例,测试用例最关键的是预期的输入和输出。测试脚本在录制的时候相当于写手动测试的测试用例步骤,而插入各种检查点(qtp)就是预期的输出,通过检查点判断结果是否正确。而lr的测试脚本的预期输出实际上是客户的性能需求


45、软件测试的22种类型
黑盒测试:不基于内部设计和代码的任何知识,而是基于需求和功能性。
等价分类法、边沿值分析法、错误推测法和因果图等技术

白盒测试:基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。路径测试技术和事务处理流程技术

单元测试:最微小规模的测试;以测试某个功能或代码块。典型地由程序员而非测试员来做,因为它需要知道内部程序设计和编码的细节知识。这个工作不容易作好,除非应用系统有一个设计很好的体系结构; 还可能需要开发测试驱动器模块或测试套具。

集成测试:一个应用系统的各个部件的联合测试,以决定他们能否在一起共同工作。部件可以是代码块、独立的应用、网络上的客户端或服务器端程序。这种类型的测试尤其与客户服务器和分布式系统有关。

功能测试:用于测试应用系统的功能需求的黑盒测试方法。这类测试应由测试员做,这并不意味着程序员在发布前不必检查他们的代码能否工作(自然他能用于测试的各个阶段)。

累积综合测试:当一个新功能增加后,对应用系统所做的连续测试。它要求应用系统的不同形态的功能能够足够独立以可以在全部系统完成前能分别工作,或当需要时那些测试驱动器已被开发出来; 这种测试可由程序员或测试员来做。

系统测试:基于系统整体需求说明书的黑盒类测试;应覆盖系统所有联合的部件。

端到端测试:类似于系统测试;测试级的“宏大”的端点;涉及整个应用系统环境在一个现实世界使用时的模拟情形的所有测试。例如与数据库对话,用网络通讯,或与外部硬件、应用系统或适当的系统对话。

比较测试:与竞争伙伴的产品的比较测试,如软件的弱点、优点或实力。

alpha 测试:在系统开发接近完成时对应用系统的测试;测试后,仍然会有少量的设计变更。这种测试一般由最终用户或其他人员员完成,不能由程序员或测试员完成。

beta 测试:当开发和测试根本完成时所做的测试,而最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其他人员员完成,不能由程序员或测试员完成。

健全测试:典型地是指一个初始化的测试工作,以决定一个新的软件版本测试是否足以执行下一步大的测试努力。例如,如果一个新版软件每5分钟与系统冲突,使系统陷于泥潭,说明该软件不够“健全”,目前不具备进一步测试的条件。

衰竭测试:软件或环境的修复或更正后的“再测试”。可能很难确定需要多少遍再次测试。尤其在接近开发周期结束时。自动测试工具对这类测试尤其有用。

接受测试:基于客户或最终用户的规格书的最终测试,或基于用户一段时间的使用后,看软件是否满足客户要求。

负载测试:测试一个应用在重负荷下的表现,例如测试一个 web 站点在大量的负荷下,何时系统的响应会退化或失败。

强迫测试:在交替进行负荷和性能测试时常用的术语。也用于描述象在异乎寻常的重载下的系统功能测试之类的测试,如某个动作或输入大量的重复,大量数据的输入,对一个数据库系统大量的复杂查询等。

性能测试:在交替进行负荷和强迫测试时常用的术语。理想的“性能测试”(和其他类型的测试)应在需求文档或质量保证、测试计划中定义。

安装/卸载测试:对软件的全部、部分或升级安装/卸载处理过程的测试。

恢复测试:测试一个系统从如下灾难中能否很好地恢复,如遇到系统崩溃、硬件损坏或其他灾难性问题。

安全测试:测试系统在防止非授权的内部或外部用户的访问或故意破坏等情况时怎么样。这可能需要复杂的测试技术。

可用性测试:对“用户友好性”的测试。显然这是主观的,且将取决于目标最终用户或客户。用户面谈、调查、用户对话的录象和其他一些技术都可使用。程序员和测试员通常都不宜作可用性测试员。

兼容测试:测试软件在一个特定的硬件/软件/操作系统/网络等环境下的性能如何。


46、回归测试
说到回归测试用例,先说什么是回归测试。顾名思义,回归测试就是修改完bug之后对程序的新的一轮测试,据微软的统计,按照他们的经验,一般开发人员解决3~4个bug会衍生出一个新的bug,这就是必须作回归测试的原因。简单的说,就是检测一下解决了bug之后有没有带进新的问题,以免把聋子给治成哑巴,就得不偿失了~~
一般的软件测试的流程是后期快速迭代的,bug在后期是快速收敛的,debug和测试的周期也是越来越短,频率是越来越高,譬如说第一轮测试需要花上10天跑用例,那么到后期就没那么长的时间,可能就是1~2天的测试时间,在后期有时候一天就有一个新的版本,这时候就要求测试人员能快速的进行一轮回归测试。
一般来说,覆盖越高,风险越低,但是效率就越差,反之亦然。所以如果时间允许的话,能把所有的用例都再跑一边是最好不过的,但是一般不会有那么多的时间,这就需要在效率和覆盖之间有一个适当的平衡,选择其中一部分测试用例用来作回归测试。
选择回归测试的时候,首先要确定的是,回归测试用例的比例,这个要根据时间情况了,100%是最好了,一般这个比例在60%左右。然后要确定回归测试用例的优先级。
第一,新修改的功能,这个显然是重点
第二,新修改的功能的关联功能,就是有耦合的部分,这个一般最好咨询一下开发人员
第三,程序最有卖点或者说亮点的部分,这个地方一旦有问题,会使程序质量大打折扣
第四,程序中最致命的部分,譬如说安全隐患,数据泄露,加密注册,
第五,程序中比较脆弱的部分,这个要咨询开发人员,一般就是他们心中最没底的地方
第六,程序的主干功能
第七,如果以上做完,还有时间的话,最好把用例中级别比较高的用例再执行一遍。
ok ,以上是回归测试用例的选择优先级。
其实,即使这样做,还是有风险的。最根本的解决方法是自动化测试工具加上手工测试。具体就是常用的程序主干功能,主要功能,用自动化测试,保证每一个版本都能够执行一遍,其他修改频繁的小功能手工测试了。
回归测试的终极解决方案是:
a.作每日构建
b.基线功能自动化
c.编写用例时一定要分级(按照风险度,常用度,重要度)
d.手工执行回归测试用例

 

47programming
找出1001000里素数的个数

  1. int GetPrimeNumber(int maxNum) 
  2. { 
  3. int Max[maxNum/2]; // 在栈上分配,栈上空间要求一般都在2M之间,
  4. // 如果你需要更大空间,请在堆上申请空间(就是通过mallocnew来申请).素数的个数很少
  5. // 所以没有必要申请和所求数字同样大小的空间。
  6. memset(Max,0,maxNum);
  7. Max[0] = 2;// 放入第一个素数,有人说2不是素数,如果你是其中一员,就改成3
  8. int cout = 1;// 记录素数个数
  9.  
  10. // 挨个数进行验证
  11. bool bflag = true;
  12. for(int i = 3; i < MAX_NUMBER; ++i) 
  13. { 
  14. bflag = true;
  15. // 需要是使用数学库(math.h)中sqrt
  16. int iTemp = (int)sqrt((float)i);// 强制转换成int类型,有的人在这里使用i1就是为了增加sqrt的精度
  17. // 没有特殊函数,你也可以使用int iTemp = (int)sqrt(i)1;来提高进度
  18. for (int j = 2; j < iTemp; ++j) 
  19. { 
  20. if(i%j == 0)// 求余,如果为0说明,可以整除,不是素数。
  21. { 
  22. bflag = false;
  23. break;
  24. } 
  25. } 
  26. // 经过验证是素数,放入数组。
  27. if(bflag) 
  28. { 
  29. Max[cout++] = i;
  30. } 
  31. } 
  32. return cout;
  33. } 
  34.  
  35. int num; //1001000的素数个数
  36. num = GetPrimeNumber(1000) - GetPrimeNumber(100);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值