C++开发工程师面试题库 150~200道

151.简述需求分析的过程和意义

 

152.网状、层次数据模型与关系数据模型的最大的区别是什末

 

153.软件质量保证体系是什末 国家标准中与质量保证管理相关的几个标准是什末 编号和全称是什末号和全称是什末

 

153文件格式系统有哪几种类型?分别说说win95、win98、winMe、w2k、winNT、winXP分别支持那些文件系统

 

154.我现在有个程序,发现在WIN98上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?
155.有关P2P点对点文件传输的原理

 

156.一台计算机的IP是192.168.10.71子网掩码255.255.255.64与192.168.10.201是同一局域网吗?
157.internet中e-mail协仪,IE的协仪,NAT是什么,有什么好处,能带来什么问题?DNS是什么,它是如何工作的?
158.PROXY是如何工作的?
169.win2k系统内AT命令完成什么功能,Messenger服务是做什么,怎么使用?
170进程,线程的定义及区别
171,32位操作系统内,1进程地址空间多大,进程空间与物理内存有什么关系?
172.网络攻击常用的手段,防火墙如何保证安全.
173.如何配静态IP,如何测网络内2台计算机通不通,PING一次返几个数据包?
174.WIN9X与WINNT以上操作系统有”服务”吗,服务是什么,如何停止服务?
175.AD在WIN2KSERVER上建需什么文件格式,AD是什么?XP多用户下”注销”与”切换”的区别.

176.UDP可以跨网段发送吗?

177.最简单的确认远程计算机(win2K以上)某个监听端口是正常建立的?

178. 找错

 

void test1()

{

char string[10];

char* str1=”0123456789″;

strcpy(string, str1);

}

 

答:表面上并且编译都不会错误。但如果string数组原意表示的是字符串的话,那这个赋值就没有达到意图。最好定义为char string[11],这样最后一个元素可以存储字符串结尾符’\0′;

 

 

void test2()

{

char string[10], str1[10];

for(int I=0; I<10;I++)

{

str1[I] =’a';

}

strcpy(string, str1);

}

 

答:strcpy使用错误,strcpy只有遇到字符串末尾的’\0′才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str1[9]=’\0′,这样就正常了。

 

 

void test3(char* str1)

{

char string[10];

if(strlen(str1)<=10)

{

strcpy(string, str1);

}

}

 

答:这又会出现第一道改错题的错误了。strlen(str1)算出来的值是不包含结尾符’\0′的,如果str1刚好为10个字符+1结尾符,string就得不到结尾符了。可将strlen(str1)<=10改为strlen(str1)<10。

 

179. 找错

 

#define MAX_SRM 256

 

DSN get_SRM_no()

{

static int SRM_no;

int I;

for(I=0;I<MAX_SRM;I++,SRM_no++)

{

SRM_no %= MAX_SRM;

if(MY_SRM.state==IDLE)

{

break;

}

}

if(I>=MAX_SRM)

return (NULL_SRM);

else

return SRM_no;

}

 

答:我不知道这段代码的具体功能,但明显有两个错误

1,SRM_no没有赋初值

2,由于static的声明,使该函数成为不可重入(即不可预测结果)函数,因为SRM_no变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。这里应该去掉static声明。

 

180. 写出程序运行结果

 

int sum(int a)

{

auto int c=0;

static int b=3;

c+=1;

b+=2;

return(a+b+c);

}

void main()

{

int I;

int a=2;

for(I=0;I<5;I++)

{

printf(“%d,”, sum(a));

}

}

 

答:8,10,12,14,16

该题比较简单。只要注意b声明为static静态全局变量,其值在下次调用时是可以保持住原来的赋值的就可以。

 

 

 

181.

 

int func(int a)

{

int b;

switch(a)

{

case 1: b=30;

case 2: b=20;

case 3: b=16;

default: b=0;

}

return b;

}

 

则func(1)=?

答:func(1)=0,因为没有break语句,switch中会一直计算到b=0。这是提醒我们不要忘了break。呵呵。

 

182:

 

int a[3];

a[0]=0; a[1]=1; a[2]=2;

int *p, *q;

p=a;

q=&a[2];

 

则a[q-p]=?

答:a[q-p]=a[2]=2;这题是要告诉我们指针的运算特点

 

183.

定义 int **a[3][4], 则变量占有的内存空间为:_____

答:此处定义的是指向指针的指针数组,对于32位系统,指针占内存空间4字节,因此总空间为3×4×4=48。

 

184.

编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。

答:

 

/*输入年月日时分秒,输出年月日时分秒的下一秒,输出仍然在原内存空间*/

bool NextMinute(int *nYear,int *nMonth,int *nDate,int *nHour,int *nMinute,int *nSecond)

{

if(*nYear12 || *nMonth23 || *nHour59 || *nSecond59) return false;

int nDays;

switch(*nMonth)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

nDays=31;

break;

case 2:// 判断闰年

if(*nYear%400==0||*nYear%100!=0&&*nYear%4==0)

{

nDays=29;

}

else

{

nDays=28;

}

break;

default:

nDays=30;

break;

}

if(*nDatenDays) return false;

 

(*nSecond)++;  // 秒加1

if(*nSecond>=60)  // 秒满60,做出特殊处理,下面时,日,月等类同

{

*nSecond=0;

(*nMinute)++;

if(*nMinute>=60)

{

*nMinute=0;

(*nHour)++;

if(*nHour>=24)

{

*nHour=0;

(*nDate)++;

if(*nDate>nDays)

{

*nDate=1;

(*nMonth)++;

if(*nMonth>12)

{

*nMonth=1;

(*nYear)++;

}

}

}

}

}

return true;

}

/*示例可运行代码*/

void main()

{

int nYear=2004,nMonth=12,nDate=31,nHour=23,nMinute=59,nSecond=59;

bool res = NextMinute(&nYear,&nMonth,&nDate,&nHour,&nMinute,&nSecond);

if(res)

printf(“The result:%d-%d-%d %d:%d:%d”,nYear,nMonth,nDate,nHour,nMinute,nSecond);

else

printf(“Input error!\n”);

}

 

185. 写一个函数,判定运算环境(16位以上字长)是little-endian还是big-endian

 

186. 操作系统的主要组成部分?

 

187.操作系统中进程调度策略有哪几种?

 

188.进程间主要的通讯方式?

 

189.写出进程的主要状态?

 

190.以太网物理地址和IP地址转换采用什么协议?

 

191.IP地址的编码分为哪两部分?

 

192.写出以太网数据帧格式

 

/193.8031和8051的主要区别?

 

 

194.C++中的空类,默认产生哪些类成员函数?

 

 

分析以下程序的执行结果

#include

class base

{

public:

base(){cout<< “constructing base class”<<endl;}

~base(){cout<<”destructing base class”<<endl;}

};

class subs:public base

{

public:

subs(){cout<<”constructing sub class”<<endl;}

~subs(){cout<<”destructing sub class”<<endl;}

};

void main()

{

subs s;

}

 

195.指出下面程序的错误

#define SIZE 5

struct String

{

char *pData;

};

void  main()

{

char *pData;

};

void  main()

{

char acValue1[SIZE]={‘H’,’E’,’L’,’L’,’O’};

char acValue2[SIZE]={‘W’,’O’,’L’,’D’};

struct String a,b,c;

a.pData=malloc(SIZE*sizeof(char));

memcpy(a.pData,acValuel,SIZE);

b.pData=malloc(SIZE*sizeof(char));

mempcpy(b.pData,acValue2,SIZE);

b=a;

free(a.pData);

c=b;

}

 

 

196.指出下面两段程序的区别

【1】

main()

{

int loop=1;

int arr[10];

int i=0;

while(loop<5)

{

for(;i<=10;i++)

{

arr[i]=1;

}

loop++;

}

}

【2】

main()

{

int arr[10];

int loop=1;

int i=0;

while(loop<5)

{

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

{

arr[i]=1;

}

loop++;

}

}

 

197.指出下面程序的错误(函数GetValue返回 unsigned char类型的值)

#define  MAXNUM  400;

unsigned char uclndex,uclnputVar,aucArray[MAXNUM];

for(ucIndx =0;ucIndex<=MAXNUM;ucIndex++)

{

aucArray[ucIndex]=aucArray[ucIndex]+1;

}

ucInputVar=GetValue();

for(ucIndex=0;ucIndex>(ucInputVar-1);ucIndex++)

{

aucArray[ucIndex]=aucArray[ucIndex]*2+1;

}

 

198.什么是com和ActiveX,简述DCOM。
答:COM(Component Object Mode)即组件对象模型,是组件之间相互接口的规范。其作用是使各种软件构件和应用软件能够用一种统一的标准方式进行交互。COM不是一种面向对象的语言,而是一种与源代码无关的二进制标准。
ActiveX是Microsoft提出的一套基于COM的构件技术标准,实际上是对象嵌入与炼接(OLE)的新版本。基于分布式环境下的COM被称作DCOM(Distribute COM,分布式组件对象模型),它实现了COM对象与远程计算机上的另一个对象之间直接进行交互。DCOM规范定义了分散对象创建和对象间通信的机制,DCOM是ActiveX的基础,因为ActiveX主要是针对Internet应用开发(相比OLE)的技术,当然也可以用于普通的桌面应用程序。

199.列出3个常用网络协议使用的端口。
答:HTTP协议用80端口,FTP协议用21端口,POP3协议用110端口

 

199  什么是ODBC?
答:ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。ODBC的最大优点是能以统一的方式(用它提供的API访问数据库)处理所有的数据库。

200  结构化编程和goto语句的区别和关系?
答:结构化编程设计思想采用了模块分解与功能抽象和自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子程序,便于开发和维护。goto语句可以实现无条件跳转,改变程序流向,破坏结构化编程设计风格。但goto语句在结构化编程中并非不可使用,只是要受到限制的使用。

posted on 2016-03-15 10:16  lpx15312  阅读(605)  评论(0编辑  收藏  举报

导航