ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:24.39KB ,
资源ID:30024996      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30024996.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机面试题.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机面试题.docx

1、计算机面试题Q2:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用? TCP与UDP呢?解:与IP协议配套使用的还有三个协议:ARP-地址解析协议RARP逆地址解析协议ICMP因特网控制报文协议ICMPIP协议网际协议IP地址、IP包头Q3:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?将网络互相连接起来要使用一些中间设备(或中间系统),的术语称之为中继(relay)系统。根据中继系统所在的层次,可以有以下五种中继系统: 1.物理层(即常说的第一层、层1)中继系统,即转发器(repeater)。 2.数据链路层(即第二层,层2),即网桥或桥接器(bridge)

2、。 3.网络层(第三层,层3)中继系统,即路由器(router)。 4.网桥和路由器的混合物桥路器(brouter)兼有网桥和路由器的功能。 5.在网络层以上的中继系统,即网关(gateway). 当中继系统是转发器时,一般不称之为网络互联,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。高层网关由于比较复杂,目前使用得较少。因此一般讨论网络互连时都是指用交换机和路由器进行互联的网络。本文主要阐述交换机和路由器及其区别。第二层交换机和路由器的区别:传统交换机从网桥发展而来,属于第二层即数据链路层设备。它根据地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行。路由器属于 第三层即网络

3、层设备,它根据地址进行寻址,通过路由表路由协议产生。因特网的路由选择协议:内部网关协议IGP和外部网关协议EGP第三层交换机和路由器的区别:在第三层交换技术出现之前,几乎没有必要将路由功能器件和路由器区别开来,他们完全是相同的:提供路由功能正在路由器的工作,然而,现在第三层交换机完全能够执行传统路由器的大多数功能。综上所述,交换机一般用于的连接,交换机归于网桥,是数据链路层的设备,有些交换机也可实现第三层的交换。路由器用于 之间的连接,可以解决异性网络之间转发分组,作用于网络层。他们只是从一条线路上接受输入分组,然后向另一条线路转发。这两条线路可能分属于不同的网络, 并采用不同协议。相比较而言

4、,路由器的功能较交换机要强大,但速度相对也慢,价格昂贵,第三层交换机既有交换机线速转发报文能力,又有路由器良好的控制功 能,因此得以广播应用。Q4:请问C+的类和C里面的struct有什么区别?c+中的类具有成员保护功能,并且具有继承,多态这类oo特点,而c里的struct没有Q5:请讲一讲析构函数和虚函数的用法和作用?析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载。知识在类对象生命期结束的时候,由系统自动调用释放在构造函数中分配的资源。这种在运行时,能依据其类型确认调用那个函数的能力称为多态性,或称迟后联编。另:析构函数一般在对象撤消前做收尾工作,比如回收内

5、存等工作,虚拟函数的功能是使子类可以用同名的函数对父类函数进行重载,并且在调用时自动调用子类重载函数,如果是纯虚函数,则纯粹是为了在子类重载时有个统一的命名而已。Q6:全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?全局变量的生命周期是整个程序运行的时间,而局部变量的生命周期则是局部函数或过程调用的时间段。其实现是由编译器在编译时采用不同内存分配方法。全局变量在main函数调用后,就开始分配,如果是静态变量则是在main函数前就已经初始化了。而局部变量则是在用户栈中动态分配的(还是建议看编译原理中的活动记录这一块)Q7:一些寄存器的题目,主要是寻址和内存管理等一些知识

6、。Q8:8086是多少尉的系统?在数据总线上是怎么实现的?8086系统是16位系统,其数据总线是20位C+一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10 分)请写出 BOOL flag 与“零值”比较的 if 语句。(3 分)标准答案:if ( flag )if ( !flag )如下写法均属不良风格,不得分。if (flag = TRUE)if (flag = 1 )if (flag = FALSE)if (flag = 0)请写出 float x 与“零值”比较的 if 语句。(4 分)标准答案示例:const float EPSINON = 0.00

7、001;if (x = - EPSINON) & (x =”或“=”此类形式。如下是错误的写法,不得分。if (x = 0.0)if (x != 0.0)请写出 char *p 与“零值”比较的 if 语句。(3 分)标准答案:if (p = NULL)if (p != NULL)如下写法均属不良风格,不得分。if (p = 0)if (p != 0)if (p)if (!)二、以下为Windows NT 下的32 位C+程序,请计算sizeof 的值(10 分)void Func ( char str100)请计算sizeof( str ) = 4 (2 分)char str = “Hell

8、o” ;char *p = str ;int n = 10;请计算sizeof (str ) = 6 (2 分)sizeof ( p ) = 4 (2 分)sizeof ( n ) = 4 (2 分)void *p = malloc( 100 );请计算sizeof ( p ) = 4 (2 分)三、简答题(25 分)1、头文件中的 ifndef/define/endif 干什么用?(5 分)答:防止该头文件被重复引用。2、#include 和 #include “filename.h” 有什么区别?(5 分)答:对于#include ,编译器从标准库路径开始搜索 filename.h对于#i

9、nclude “filename.h” ,编译器从用户的工作路径开始搜索 filename.h3、const 有什么用途?(请至少说明两种)(5 分)答:(1)可以定义 const 常量(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。4、在C+ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? (5 分)答:C+语言支持函数重载,C 语言不支持函数重载。函数被C+编译后在库中的名字与C 语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被

10、C 编译器编译后在库中的名字为_foo , 而C+编译器则会产生像_foo_int_int 之类的名字。C+提供了C 连接交换指定符号extern“C”来解决名字匹配问题。5、请简述以下两个for 循环的优缺点(5 分)for (i=0; iN; i+)if (condition)DoSomething();elseDoOtherthing();if (condition)for (i=0; iN; i+)DoSomething();elsefor (i=0; iN; i+)DoOtherthing();优点:程序简洁缺点:多执行了N-1 次逻辑判断,并且打断了循环“流水线”作业,使得编译器不

11、能对循环进行优化处理,降低了效率。优点:循环的效率高缺点:程序不简洁四、有关内存的思考题(每小题5 分,共20 分)void GetMemory(char *p)p = (char *)malloc(100);void Test(void)char *str = NULL;GetMemory(str);strcpy(str, hello world);printf(str);请问运行Test 函数会有什么样的结果?答:程序崩溃。因为GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。strcpy(str, hello world);将使程序崩溃。char *

12、GetMemory(void)char p = hello world;return p;void Test(void)char *str = NULL;str = GetMemory();printf(str);请问运行Test 函数会有什么样的结果?答:可能是乱码。因为GetMemory 返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str

13、, 100);strcpy(str, hello);printf(str);请问运行Test 函数会有什么样的结果?答:(1)能够输出hello(2)内存泄漏void Test(void)char *str = (char *) malloc(100);strcpy(str, “hello”);free(str);if(str != NULL)strcpy(str, “world”);printf(str);请问运行Test 函数会有什么样的结果?答:篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str 成为野指针,if(str != NULL)语句不起作用。五、

14、编写strcpy 函数(10 分)已知strcpy 函数的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。(1)不调用C+/C 的字符串库函数,请编写函数 strcpychar *strcpy(char *strDest, const char *strSrc);assert(strDest!=NULL) & (strSrc !=NULL); / 2分char *address = strDest; / 2分while( (*strDest+ = * strSrc+) != 0 )

15、 / 2分NULL ;return address ; / 2分(2)strcpy 能把strSrc 的内容复制到strDest,为什么还要char * 类型的返回值?答:为了实现链式表达式。 / 2 分例如 int length = strlen( strcpy( strDest, “hello world”) );六、编写类String 的构造函数、析构函数和赋值函数(25 分)已知类String 的原型为:class Stringpublic:String(const char *str = NULL); / 普通构造函数String(const String &other); / 拷贝

16、构造函数 String(void); / 析构函数String & operate =(const String &other); / 赋值函数private:char *m_data; / 用于保存字符串;请编写String 的上述4 个函数。标准答案:/ String 的析构函数String:String(void) / 3 分delete m_data;/ 由于m_data 是内部数据类型,也可以写成 delete m_data;/ String 的普通构造函数String:String(const char *str) / 6 分if(str=NULL)m_data = new cha

17、r1; / 若能加 NULL 判断则更好*m_data = 0;elseint length = strlen(str);m_data = new charlength+1; / 若能加 NULL 判断则更好strcpy(m_data, str);/ 拷贝构造函数String:String(const String &other) / 3 分int length = strlen(other.m_data);m_data = new charlength+1; / 若能加 NULL 判断则更好strcpy(m_data, other.m_data);/ 赋值函数String & String:

18、operate =(const String &other) / 13 分/ (1) 检查自赋值 / 4 分if(this = &other)return *this;/ (2) 释放原有的内存资源 / 3 分delete m_data;/ (3)分配新的内存资源,并复制内容 / 3 分int length = strlen(other.m_data);m_data = new charlength+1; / 若能加 NULL 判断则更好strcpy(m_data, other.m_data);/ (4)返回本对象的引用 / 3 分return *this;winsocket编程#includ

19、e #include void main()WORDwVersionRequested;WSADATA wsaData;int err; wVersionRequested = MAKEWORD(1,1);err = WSAStartup(wVersionRequested,&wsaData);if( err != 0) return; if(LOBYTE( wsaData.wVersion ) != 1| HIBYTE( wsaData.wVersion) != 1) WSACleanup(); return;SOCKET sockSrv=socket(AF_INET,SOCK_STREAM

20、,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);listen(sockSrv,5);SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);while(1) SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrC

21、lient,&len); char sendBuf100; sprint(sendBuf,Welcome %s to http:/www.sunxin.org, inet_ntoa(addrClient.sin_addr); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf100; recv(sockConn,recvBuf); printf(%sn,recvBuf); closesocket(sockConn); WSACleanup();注:这是Server端;File-New-Win32 Console Applicatio

22、n,工程名:TcpSrv;然后,File-New-C+ Source File,文件名:TcpSrv;在该工程的Setting的Link的Object/library modules项要加入ws2_32.lib#include #include void main()WORDwVersionRequested;WSADATA wsaData;int err; wVersionRequested = MAKEWORD(1,1);err = WSAStartup(wVersionRequested,&wsaData);if( err != 0) return; if(LOBYTE( wsaData

23、.wVersion ) != 1| HIBYTE( wsaData.wVersion) != 1) WSACleanup(); return;SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1); addrSrv.sin_family=AF_INET;addrSrv.sin_porthtons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)

24、;char recvBuf100;recv(sockClient,recvBuf,100,0);printf(%sn,recvBuf);send(sockClient,This is zhangsan,strlen(This is zhangsan)+1,0);closesocket(sockClient);WSACleanup();注:这是Client端;File-New-Win32 Console Application,工程名:TcpClient;然后,File-New-C+ Source File,文件名:TcpClient;同理,在该工程的Setting的Link的Object/li

25、brary modules项要加入ws2_32.libC#include class humanpublic:human() human_num+;static int human_num;human()human_num-;print();void print()couthuman num is: human_numendl;protected:private:;int human:human_num = 0;human f1(human x)x.print();return x;int main(int argc, char* argv)human h1;h1.print();human

26、h2 = f1(h1);h2.print();return 0;输出:110012分析:human h1; /调用构造函数,-hum_num = 1;h1.print(); /输出:human is 1human h2 = f1(h1); /再调用f1(h1)的过程中,由于函数参数是按值传递对象,调用默认的复制构造函数,它并没有对hum_num+,所以hum_num 仍= 1,所以x.print()输出:human is 1; 在推出f1函数时,要销毁X,调用析构函数(human_num-),输出:human is 0(,由于该函数返回一个human 对象,所以又调用默认构造函数,创建一个临时对象(human_num = 0;),把临时对象赋给h2,又调用默认构造函数( human_num = 0); h2.print(); /输出: human is 0;/在退出main()函数是,先销毁h2,调用析构函数(human_num-),输出 human_num is -1然后销毁h1,调用析构函数(-),输出human_num is -2冒泡排序:void BubbleSort(elemtype x,int n)int i,j;elemtype temp;for(i=1;in;i+) for(j=0;jn-i;j+) if(xj

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1