发布于 2014-12-30 23:56:51 | 207 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

百度(Baidu)中文搜索引擎

百度(Nasdaq简称:BIDU)是全球最大的中文搜索引擎,2000年1月由李彦宏、徐勇两人创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。


本文为大家整理的是一份百度2014校园招聘笔试题-PC客户端开发-南京站,感兴趣的同学参考下。

一、问答题:50分

   1、写出new和malloc、delete和free的区别

   从面向对象来说,new/delete和malloc/free的区别是:malloc/free只是单纯的进行内存空间的分配和释放,而使用new/delete时,不仅分配了内存空间,若new/delete的是一个类,还会调用类(经测试,基本类型好像不会进行默认初始化)的构造函数或析构函数。

   简单来说,两者的区别主要有:

   1. malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符,与”+“、”-“、”*“、”/“有一样的地位。

   2. new/delete是可以重载的,而重载之后,就成为了函数。

   3. malloc在申请内存的时候,必须要提供申请的长度,而且返回的指针是void*型,必须要强转成需要的类型。

   4. 当new/delete在类中被重载的时候,可以自定义申请过程,比如记录所申请内存的总长度,以及跟踪每个对象的指针。

   5. new/delete,其实内部也调用了malloc/free。

   两者的共同点有:

   1. 都必须配对使用,防止内存泄露。

   2. 都可用于申请动态内存和释放内存,都是在堆中分配内存。

   3. free和delete可以释放NULL指针。

   2、写两个继承类,解释虚表指针和虚表的作用

   每一个类都有虚表。

   虚表可以继承,如果子类没有重写虚函数,那么子类虚表中仍然会有该函数的地址,只不过这个地址指向的是基类的虚函数实现。如果基类有3个虚函数,那么基类的虚表中就有三项(虚函数地址),派生类也会有虚表,至少有三项,如果重写了相应的虚函数,那么虚表中的地址就会改变,指向自身的虚函数实现。如果派生类有自己的虚函数,那么虚表中就会添加该项。

   派生类的虚表中虚函数地址的排列顺序和基类的虚表中虚函数地址排列顺序相同。

   3、写出static的用法和作用

   static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。函数内部定义的变量,在程序执行到它的定义处时,编译器为它在

   栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至

   下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的

   访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。 需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装

   性,即要求此成员隐藏在类的内部,对外不可见。

   4、写出计算机的存储器层次,及原因

   以处理器为中心,计算机系统的存储依次为寄存器、高速缓存、主存储器、磁盘缓存、磁盘和可移动存储介质等7个层次。距离处理器越近的存储工作速度越高,容量越小。其中,寄存器、高速缓存、主存储器为操作系统存储管理的管辖范围,磁盘和可移动存储介质属于操作系统设备管理的管辖范围。

   5、写出对windows中的句柄的理解

   所谓句柄实际上是一个数据,是一个Long (整长型)的数据。

   句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。

二、算法题:30分

   1、计算字符串的相似度-《编程之美》3.3

   int calStringDis(string strA, int pABegin,int pAEnd,string strB, int pBBegin,int pBEnd)

   {

   if (pABegin > pAEnd)

   {

   if (pBBegin > pBEnd)

   return 0;

   else

   return pBEnd – pBBegin + 1;

   }

   if (pBBegin > pBEnd)

   {

   if(pABegin > pAEnd)

   return 0;

   else

   return pAEnd – pABegin + 1;

   }

   if (strA[pABegin] == strB[pBBegin])

   {

   return calStringDis(strA,pABegin+1,pAEnd,strB,pBBegin+1,pBEnd);

   }

   else

   {

   int t1 = calStringDis(strA,pABegin+1,pAEnd,strB,pBBegin+2,pBEnd);

   int t2 = calStringDis(strA,pABegin+2,pAEnd,strB,pBBegin+1,pBEnd);

   int t3 = calStringDis(strA,pABegin+2,pAEnd,strB,pBBegin+2,pBEnd);

   return minValue(t1,t2,t3)+1;

   }

   }

   2、判断链表是否存在闭环

   //using step1 and step2 here

   //if exists a loop, then the pointer which use step2 will catch up with the pointer which uses step1

   int HasLoop(LinkList L)

   {

   int step1 = 1;

   int step2 = 2;

   LinkList p = L;

   LinkList q = L;

   //while (p != NULL && q != NULL && q->next == NULL)

   while (p != NULL && q != NULL && q->next != NULL)

   {

   p = p->next;

   if (q->next != NULL)

   q = q->next->next;

   printf("p:%d, q:%d n", p->data, q->data);

   if (p == q)

   return 1;

   }

   return 0;

   }

三、系统设计题:选做一题 20分

   1、连连看游戏中,写出两种算法的大致原理,来判断两个图案是否能够连线。并详细解释,写出其中一个算法的伪代码。

   2、解释 延迟过程调用deferred procedure call (DPC)和异步过程调用asynchronous procdure call (APC)的工作机制。详细描述利用APC实现DLL注入。



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务