计算机专业面试题目doc.docx

上传人:b****4 文档编号:12098618 上传时间:2023-04-17 格式:DOCX 页数:26 大小:28.86KB
下载 相关 举报
计算机专业面试题目doc.docx_第1页
第1页 / 共26页
计算机专业面试题目doc.docx_第2页
第2页 / 共26页
计算机专业面试题目doc.docx_第3页
第3页 / 共26页
计算机专业面试题目doc.docx_第4页
第4页 / 共26页
计算机专业面试题目doc.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

计算机专业面试题目doc.docx

《计算机专业面试题目doc.docx》由会员分享,可在线阅读,更多相关《计算机专业面试题目doc.docx(26页珍藏版)》请在冰豆网上搜索。

计算机专业面试题目doc.docx

计算机专业面试题目doc

计算机专业而试题集

计算机随笔2008-05-0519:

28:

18阅读2083评论0字号:

大中小订阅一些面试准备题(包括高质量C++题)

constchar*,charconst*,char^const的区别问题几乎是C++面试中每次都会冇的题目。

事实上这个概念谁都冇只是三种声明方式非常相似很容易记混。

Bjarne在他的TheC++ProgrammingLanguage里面给出过一个助记的方法:

把一个声明从右向左读。

char*constcp;(*读成pointerto)

constcp指向字符$;即指向字符串的常指针;

constchar*p;

p指向字符串常量,即指向字符串常量的指针;

charconst*p;

这个和上面的事一样的,表达的意思也是指向字符串常量的指针

同上因为C++里而没冇const*的运算符,所以const只能屈于前而的类型。

下面这个程序执行后会有什么错误或者效果:

#defineMAX255

intmain()

{

unsignedcharA[MAX],i;

for(i=0;i<=MAX;i++)

A[i]=i;

}

解答:

MAX=255

数组A的下标范圉为:

0..MAX-l,这是其一・・

其二•当i循环到255时,循环内执行:

A[255]=255;

这句本身没冇问题••但是返回for(i=0;iv二MAX;i++)语句时,

由于unsignedchar的取值范围在(0・.255),i++以后i乂为0了..无限循环下去.注:

char类型为一个字节,取值范围是[-128,127],unsignedchar[0,2551

编写用C语言实现的求n阶阶乘问题的递归算法:

*******仅仅只要是一个算法就ok,不用管那么多,能用就行。

longintfact(intn)

{

intx;

longinty;

if(n<0)

printf(Herror!

n);

if(n==O)

return1;

x=n-1;

y=fact(x);〃这是一个递归调用过程,

return(n*y);

}

Longintfact(intn)

{

If(n<0)

{

PrintfC

}

If(n==0)

Return1;

Else

Returnn*fact(n-l);

}

二分查找算法:

〃已经在排好序的情况下进行查找

1、递归方法实现:

intBSearch(elemtypea[],elemtypex,intlow,inthigh)

/*在下届为low,上界为high的数组a中折半查找数据元素x*/{

intmid;

if(low>high)return-1;//error

mid=(low+high)/2;

if(x==a[mid])returnmid;

if(x

elsereturn(BSearch(a,x,mid+1.high));

}

Intbase(elemtypea[],elemtypex,intlow,inthigh)

{

Intmid;

If(low>high)

Return-1;

Mid=(low+high)/2;

If(x==a[mid])

Returnmid;

If(x

Elaereturnbase(a,x,mid+l,high);

}

2、非递归方法实现:

intBSearch(elemtypea[],keytypekey.intn)

intlow,high,mid;low=0;high=n-l;while(low<=high)

mid=(low+high)/2;

if(a[mid]•key==key)returnmid;elseif(a[mid].key

}

return-1;

}

非递归计算如下递归函数的值(斐波拉契):

f(l)=lf

(2)=l

f(n)=f(n-l)+f(n-2)n>2

解:

intf(intn)

{

inti,s,sl,s2;

sl=l;/*sl用于保存f(n-l)的值*/s2=l;/*s2用于保存f(n-2)的值*/s=l;

for(i=3;i<=n;i++)

{

s=sl+s2;

s2=sl;

sl=s;

}

return(s);

}

交换两个数,不用第三块儿内存:

inta=;

intb=;

a=a+b;

b=a・b;

a=a-b;

Ql:

请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?

1、OSI毎层功能及特点

a物理层为数据链路层提供物理连接,在其上串行传送比特流,即所传送数据的单位是比特。

此外,该层中还具冇确定连接设备的电气特性和物理特性等功能。

b数据链路层负责在网络节点间的线路上通过检测、流量控制和重发等手段,无差错地传送以帧为单位的数据。

为做到这一点,在每一帧中必须同时带有同步、地址、差错控制及流量控制等控制信息。

c网络层为了将数据分组从源(源端系统)送到目的地(目标端系统),网络层的任务就是选择合适的路由和交换节点,使源的传输层传下來的分组信息能够正确无误地按照地址找到目的地,并交付给相应的传输层,即完成网络的寻址功能。

d传输层传输层是高低层之间衔接的接口层。

数据传输的单位是报文,当报文较长吋将它分割成若干分组,然后交给网络层进行传输。

传输层是计算机网络协议分层中的最关键一层,该层以上各层将不再管理信息传输问题。

e会话层该层对传输的报文提供同步管理服务。

在两个不同系统的互相通信的应用进程之间建立、组织和I•办调交互。

例如,确定是双工还是半双工工作。

f表示层该层的主要任务是把所传送的数据的抽象语法变换为传送语法,即把不同计算机内部的不同表示形式转换成网络通信屮的标准表示形式。

此外,对传送的数据加密(或解密)、正文压缩(或还原)也是表示层的任务。

g应用层该层直接面向用户,是OSI中的最高层。

它的主耍任务是为用户提供应用的接口,即捉供不同计算机间的文件传送、访问与管理,电子邮件的内容处理,不同计算机通过网络交互访问的虚拟终端功能等。

2、TCP/IP

a网络接口层这是TCP/IP协议的最低一层,包括冇多种逻辑链路控制和媒体访问协议。

网络接II层的功能是接收IP数据报并通过特定的网络进行传输,或从网络上接收物理帧,抽取出IP数据报并转交给网际层。

b网际网层(IP层)该层包扌舌以下协议:

IP(网际协议)>ICMP(InternetControlMessageProtocol,因特网控制报文协议)、ARP(AddressResolutionProtocol,地址解析协议)、RARP(ReverseAddressResolutionProtocol,反向地址解析协议)。

该层负责相同或不同网络中计算机Z间的通信,主要处理数据报和路由。

在IP层屮,ARP协议用于将IP地址转换成物理地址,RARP协议用于将物理地址传换成IP地址,ICMP协议用于报告差错和传送控制信息。

IP协议在TCP/IP协议组中处于核心地位。

c传输层该层提供TCP(传输控制协议)和UDP(UserDatagramProtocol,用户数据报协议)两个协议,它们都建立在IP协议的基础上,其中TCP提供可靠的而向连接服务,UDP捉供简单的无连接服务。

传输层捉供端到端,即应用程序之间的通信,主要功能是数据格式化、数据确认和丢失重传等。

d应用层TCP/IP协议的应用层相当于OSI模型的会话层、表示层和应用层,它向用户提供一组常用的应用层协议,其中包括:

TelnetSMTP、DNS等。

此外,在应用层中还包含有用户应用程序,它们均是建立在TCP/IP协议组Z上的专用程序。

3、OSI参考模型和TCP/IP参考模型的区别:

aOSI模型冇7层,TCP/IP只冇4层;

bOSI先于协议出现,因此不会偏向于任何一组特定的协议,通用性更强,但有些功能不知该放哪一层上,因此不得不加入一些子层;TCP/IP后于协议出现,仅是将己有协议的一个描述,因此两者配合的非常好;但他不适合其他的协议栈,不容易描述其他非TCP/IP的网络;

cOSI中网络层同时支持无连接和面向连接的通信,但在传输层上只支持面向连接的通信;TCP/IP屮网络层只支持无连接通信,传输层同时支持两种通信;d在技术发主变化时,OSI模型比TCP/IP模型中的协议更容易被替换。

Q2:

请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用?

TCP与UDP呢?

解:

与IP协议配套使用的还有三个协议:

ARP・地址解析协议

RARP—逆地址解析协议

ICMP—因特网控制报文协议ICMP

IP协议一网际协议

IP地址、IP包头

Q3:

请问交换机和路由器分别的实现原理是什么?

分别在哪个层次上面实现的?

将网络互相连接起来要使用一些中间设备(或中间系统),ISO的术语称之为屮继(relay)系统。

根据屮继系统所在的层次,可以有以下五种屮继系统:

1.物理层(即常说的第一层、层L1)中继系统,即转发器(repeater)。

2.数据链路层(即第二层,层L2),即网桥或桥接器(bridge)o

3•网络层(第三层,层L3)中继系统,即路由器(router)o

4.网桥和路由器的混合物桥路器(brouter)兼有网桥和路由器的功能。

5.在网络层以上的中继系统,即网关(gateway)・

当中继系统是转发器时,一般不称之为网络互联,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。

高层网关由于比较复杂,目丽使用得较少。

因此一般讨论网络互连时都是指用交换机和路由器进行互联的网络。

本文主要阐述交换机和路由器及其区别。

第二层交换机和路曲器的区别:

传统交换机从网桥发展而來,屈于0SI第二层即数据链路层设备。

它根据MAC地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行。

路由器属于0SI第三层即网络层设备,它根拯IP地址进行寻址,通过路由表路由协议产生。

因特网的路由选择协议:

内部网关协议IGP和外部网关协议EGP第三层交换机和路曲器的区别:

第三层交换技术出现Z前,几乎没有必要将路由功能器件和路由器区别开来,他们完全是相同的:

捉供路由功能正在路由器的工作,然而,现在第三层交换机完全能够执行传统路由器的大多数功能。

综上所述,交换机一般用于LAN-WAN的连接,交换机归于网桥,是数据链路层的设备,冇些交换机也口J实现第三层的交换。

路由器用于WAN-WAN之间的连接,可以解决异性网络Z间转发分组,作用于网络层。

他们只是从一条线路上接受输入分组,然后向另一条线路转发。

这两条线路可能分屈于不同的网络,并采用不同协议。

相比较而言,路由器的功能较交换机要强大,但速度相对也慢,价格昂贵,第三层交换机既有交换机线速转发报文能力,又有路由器良好的控制功能,因此得以广播应用。

Q4:

请问C++的类和C里面的struct有什么区别?

C++中的类具冇成员保护功能,并且具冇继承,多态这类oo特点,而c里的struct没有

Q5:

请讲一讲析构函数和虚函数的用法和作用?

析构函数也是特殊的类成员函数,它没冇返回类型,没冇参数,不能随意调用,也没有重载。

知识在类对象生命期结束的时候,由系统口动调用释放在构造函数屮分配的资源。

这种在运行吋,能依据其类型确认调用那个函数的能力称为多态性,或称迟后联编。

析构函数一般在对象撤消前做收尾工作,比如回收内存等工作,熄拟函数的功能是使子类可以用同

名的函数对父类函数进行重载,并且在调用吋自动调用子类重载函数,如果是纯虚函数,则纯粹是为了

在了类重载时有个统一的命名而已。

Q6:

全局变量和局部变量有什么区别?

实怎么实现的?

操作系统和编译器是怎么知道的?

全局变量的生命周期是整个程序运行的时间,而局部变量的生命周期则是局部函数或过程调用的时

间段。

其实现是由编译器在编译时采用不同内存分配方法。

全局变量在main函数调用后,就开始分配,

如果是静态变量则是在main函数前就已经初始化了。

而局部变量则是在用户栈中动态分配的(还是建议

看编译原理屮的活动记录这一块)

Q7:

—些寄存器的题目,主要是寻址和内存管理等一些知识。

Q8:

8086是多少尉的系统?

在数据总线上是怎么实现的?

8086系统是16位系统,其数据总线是20位

C++

一、请填写BOOL,float,指针变量与“零值吐匕较的if语句。

(10分)请写出BOOLflag与“零值"比较的if语句。

(3分)

标准答案:

if(flag)

if(!

flag)

如下写法均属不良风格,不得分。

if(flag=TRUE)

if(flag=1)

讦(flag==FALSE)

讦(flag==0)

请写出floatx与“零值"比较的if语句。

(4分)

标准答案示例:

constfloatEPSINON=0.00001;

讦((x>=・EPSINON)&&(x<=EPSINON)

不可将浮点变量用“二才或“!

才与数字

比较,应该设法转化成“>="或《此

类形式。

如卜•是错误的写法,不得分。

讦(x==0.0)

if(x!

=0.0)

请写出char*p与“零值叫匕较的if语句。

(3分)

标准答案:

if(p==NULL)

讦(p!

=NULL)

如下写法均属不良风格,不得分。

if(p==0)

if(p!

=0)

if(P)

if(!

二、以下为WindowsNT下的32位C++程序,请计算sizeof的值(10分)voidFunc(charstrflOO])

{

请计算

sizeof(str)=4(2分)

}

charstr[]二“Hello";

char*p=str;

intn=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对于#include“filename.tr,编译器从用户的工作路径开始搜索filename.h

3、const有什么用途?

(请至少说明两种)(5分)

答:

(1)可以定义const常量

(2)const可以修饰函数的参数、返冋值,甚至函数的定义体。

被const修饰的东

西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在C++程序中调用被C编译器编译后的函数,为什么要加extern4tC"?

(5

分)

答:

C++语言支持函数重载,C语言不支持函数重载。

函数被C++编译后在库中的名字

与C语言的不同。

假设某个函数的原型为:

voidfoo(intx,inty);

该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_intZ类的名字。

C++靈供了C连接交换指定符号exteEC来解决名字匹配问题。

5、请简述以下两个for循环的优缺点(5分)

for(i=0;i

{

if(condition)

DoSomethingO;

else

DoOtherthingO;

}

if(condition)

{

for(i=0;i

DoSomethingO;

}

else

{

for(i=0;i

DoOtherthingO;

}

优点:

程序简洁

缺点:

多执行了N・1次逻辑判断,并且

打断了循环“流水线"作业,使得编译

器不能对循环进行优化处理,降低了效

率。

优点:

循环的效率高

缺点:

程序不简洁

四、有关内存的思考题(每小题5分,共20分)voidGetMemory(char*p)

{

p=(char*)malloc(I00);

}

voidTest(void)

{

char*str=NULL;

GetMemory(str);

strcpy(str,"helloworld1');

printf(str);

}

请问运行Test函数会冇什么样的结果?

答:

程序崩溃。

因为GetMemory并不能传递动态内存,Test函数中的str一直都是NULL。

strcpy(str,"helloworld");将使程序崩溃。

char*GetMemory(void)

{

charp[]="helloworld”;

returnp;

}

voidTest(void)

{

char*str=NULL;

str=GetMemory();

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

可能是乱码。

因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原现的内容已经被清除,新内容不可知。

voidGetMemory2(char**p,intnum)*p=(char*)malloc(num);

}

voidTest(void)

char*str=NULL;

GetMemory(&str,100);

strcpy(str,"hello");

printf(str);

}

请问运行Test函数会冇什么样的结果?

答:

(1)能够输出hello

(2)内存泄漏

voidTest(void)

{

char*str=(char*)malloc(lOO);

strcpy(str,"hello");

free(str);

if(str!

=NULL)

{

strcpy(str,“world");

printf(str);

}

}

请问运行Test函数会冇什么样的结果?

答:

篡改动态内存区的内容,后果难以预

料,非常危险。

因为free(str);±,后,str成为野指针,

if(str!

=NULL)语句不起作用。

五、编strcpy函数(10分)

已知strcpy函数的原型是

char*strcpy(char*strDest,constchar*strSrc);

其中strDest是目的字符串,strSrc是源字符串。

(1)不调用C++/C的字符串库函数,请编写函数strcpy

char*strcpy(char*strDest,constchar*strSrc);

{

assert((strDest!

=NULL)&&(strSrc!

=NULL));//2分

char*address=strDest;//2分

while((*strDest++=*strSrc++)!

=“\0‘)//2分

NULL;

returnaddress;//2分

}

(2)strcpy能strSrc的内容复制到strDest,为什么还要char*类型的返回值?

答:

为了实现链式表达式。

〃2分

例如intlength=strlen(strcpy(strDest,"helloworld^^));

六、编写类String的构造函数、析构函数和赋值函数(25分)已知类String的原型为:

classString

public:

String(constchar*str=NULL);〃普通构造函数

String(constString&other);//拷贝构造函数

~String(void);//析构函数

String&operate=(constString&other);//赋值函数private:

char*m_data;//用于保存字符串

};

请编写String的上述4个函数。

标准答案:

//String的析构函数

String:

>String(void)//3分

{

delete[]m_data;

//由Fm_data是内部数据类型,也可以写成deletem_data;

}

//String的普通构造函数

String:

:

String(constchar*str)//6分

{

if(str==NULL)

{

m_data=newchar[ll;//若能加NULL判断则更好

*m_data=4\0?

;

}

else

{

intlength=strlen(str);

m_data=newchar[length+l];//若能加NULL判断则更好strcpy(m_data,str);

}

}

//拷贝构造函数

String:

:

String(constString&other)//3分

{

intlength=strlen(other.m_data);

m_data=newchar[length+l];//若能加NULL判断则更好strcpy(m_data,othei\m_data);

}

//赋值函数

String&String:

:

operate=(constString&other)//13分

{

//(l)检查自赋值〃4分

if(this==&other)

return*this;

//

(2)释放原有的内存资源〃3分

delete[]m_data;

//(3)分配新的内存资源,并复制内容〃3分intlength=strlen(other.m_data);

m_data=newchar[length+l];//若能加NULL判断则更好strcpy(m_data,other.m_data);

//(4)返冋木对象的引用〃3分

return*this;

}

winsocket编程

#include

#include

voidmain()

{

WORDwVersionRequested;

WSADATAwsaData;

interr;

wVersionRequested=MAKEWORD(1,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

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

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