设为首页 加入收藏

TOP

C++开发工程师面试题库 1~50道(二)
2014-11-23 20:14:47 来源: 作者: 【 】 浏览:85
Tags:开发 工程师 试题库
=pC.而pB强制转换后,只能取到C中B的部分.所以pB在pC向后偏移4个BYTE,(即m_nA)的空间



7,请写出能匹配”[10]:dddddd ”和”[9]:abcdegf ”,不匹配”[a]:xfdf ”的正则表达式________,linux下支持正则的命令有:___find,grep_________


8.如下程序:


int i=1,k=0;


long *pl=NULL;


char *pc=NULL;


if(k++&&i++)


k++, pl++, pc++;


if(i++||k++)


i++, pl++, pc++;


printf(“i=%d,k=%d,pl=%ld,pc=%ld\n”,i,k,(long)pl,(long)pc);



打印结果为__i=3,k=1,pl=4,pc=1________


主要测试逻辑表达式的短路操作.


&&操作中,前一个表达式为0,后一表达式不执行


||操作中, 前一个表达式为1,后一表达式不执行



9. 以下程序的输出为______________


#include


using std::cout;


class A


{


public:


void f(void){


cout<< ”A::f” <<’ ‘;


}


virtual void g(void)


{


cout <<”A::g” << ‘ ‘;


}


};



class B : public A


{


public:


void f(void)


{


cout << “B :: f “ << ‘ ‘;


}


void g(void)


{


cout << “B:: g “ << ‘ ‘;


}



};



int main()


{


A* pA =new B;


pA->f();


pA->g();


B* pB = (B*)pA;


pB->f();


pB->g();


}


A::f B:: g B :: f B:: g


多态中虚函数调用.


f()为非虚函数,这样强制转换后,执行本类的同名函数.


G()为虚函数,指针总是执行虚函数,这就是多态..


10.下列代码的作用是删除list lTest 中值为6的元素:


list :: iterator Index = ITest .begin();


for( ; Index != ITest .end(); ++ Index)


{


if((*Index) = = 6)


{


ITest .erase(Index);


}


}


请问有什么错误____ Index = ITest .erase(Index);____________________,


STL的游标处理,erase已经将Index破坏掉,需要用新的Index,否则下一循环的++Index被破坏掉


请写出正确的代码,或者在原代码上修正.



11.找错误_以下程序:


char* ptr = malloc(100);


if(!ptr)


{



}



//ptr 指向的空间不够需要重新分配


ptr = realloc(ptr,200);


if(!ptr)


{



}



请问有什么错误___if(ptr ==NULL)____________________,请写出正确的代码,或者在原代码上修正.



12.以下为window NT 下32 位C++程序,请填写如下值


class myclass


{


int a ;


int b;


};


char *p = “hello”;


char str[] = “world”;


myclass classes[2];


void *p2= malloc(100);



sizeof(p)=_4__


sizeof(str)=_6_


sizeof(classes)=_16__


sizeof(p2)=_4___



13.直接在以下程序中的错误的行数后的填空栏中打叉


程序1:


int main(void)


{


int i=10;_____


int *const j=&i;_______


(*j)++;____


j++;___*_____


}


程序2:


int main(void)


{


int i=20;_____


const int *j=&i;_________


*j++;______


(*j)++;____*____


}



主要考const 出现在*前后不同含意,const 在*后表示指针本身不能改,const 在*前面指针内容不能改,程序1中j不能修改指针,所以j++是错,程序2,j不能改改内容,所以



14.用C/C++代码实现以下要求:从1-100中挑选出10个不同的数字,请把可能的所有组合打印出来.



15.有一个非常大的全局数组int a[],长度n超过2的24次方,写一个针对该数组的查找算法unsigned search(int value)(返回值下标),插入算法insert(int value,unsigned index).再次注意该数组的长度很长.


题目不太清,可能可以把数值本身作下标.并且按顺序排序.


16.有两个单向链表,表头pHeader1,pHeader2,请写一个函数判断这两个链表是否有交叉.如果有交叉,给出交叉点.程序不能改变链表的内容,可以使用额外的空间,时间复杂度尽量小,最好给出两种解.(双重循环的解由于时间复杂度高,不算正解).


1.移动链表指针,如果最终


17.编写程序,将一棵树从根节点到叶子的所有最长路径都打印出来.比如一棵树从跟到最末端的叶子最远要经


过4个节点,那么就把到所有要经过4个节点才能到达的叶子的搜索路径(所有途径节点)都分别打印出来.



18.请分别对一个链表和一个数组进行排序,并指出你排序的算法名称以及为何选择该算法


数组可用交换法排序




19.有单向链表,其中节点结构为Node{int value;Node *pNext};只知道指向某个节点的指针pCurrent;并且知道该节点不是尾节点,有什么办法把他删除吗 要求不断链.


从链表头开始,找到pCurrent上一个结点pPrev,然后 pPrev->pNext = pCurrent->pNext;



20.问题A:用什么方法避免c/c++编程中的头文件重复包含 问题B:假设解决了重复包含问题,但是又需要在两个不同的头文件中引用各申明的类,应该如何处理 具体代码如下:


在头文件Man.h中


….


Class Cman


{


….


CFace m_face;


};


….


在头文件Face.h中



Class CFace


{



Cman *m_owner;


};


….


这样类CMan.CFace就相互引用了,该如何处理呢



1.#ifndef ….


#define …..


2.类的前向声明



21.多线程和单线程各自分别在什么时候效率更高


多线程在并发,并且各线程无需访问共享数据情况详细最高


如果多线程过于频繁切换,或共享数据很多情况下,使用单线程较好



22.在程序设计中,对公共资源(比如缓冲区等)的操作和访问经常需要使用锁来进行保护,但在大并发系统中过多的锁会导致效率很低,通常有那些方法可以尽量避免或减少锁的使用


减少锁的粒度,每次尽可能减少锁范围


采用队列处理,这样无需使用锁.


23.请详细阐述如何在release版本(windows程序或linux程序都可以)中,查找段错误问题.


可以用编译器生成map文件来定位源码.通过地址反查源码



24.假设你编译链接release版本后得到一个可执行程序(由多个cpp文件和H文件编译),结果可执行程序文件非常大,你如何找到造成文件太大的可能原因,可能的原因是什么


使用一个已经初始化的巨大的全局数组


25.在编写C++赋值运算符时有哪些要注意的地方


返回值,参数最好用引用


减少友元函数使用,移植有问题.


26.假设你是参与设计嫦娥卫星的嵌入式单板软件工程师,其中有一个快速搜索可能要用到哈希变或者平衡二叉树,要求不管什么条件下,单板必须在指定的短时间内有输出,你会采取那种算法 为什么用这种算

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇误删oracle中dbs文件如何恢复? 下一篇在ASP.NET中如何进行文件上传?

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: