百度商务搜索研发(C++)面试(2012.05)

一面

1.      自我介绍

2.      malloc/new的其别

3.      说出你知道的排序算法;非递归实现归并排序

#define MAX_SIZE   200

void Merge( int *pData, int nL, int nR)

{

         intvTmp[MAX_SIZE];

         intl(0), r(nL);

         intpos(0);

         while(l<nL && r<nL+nR)

         {

                   if( *(pData+l)<*(pData+r) )

                            vTmp[pos++]= *(pData+(l++));

                   else

                            vTmp[pos++]= *(pData+(r++));

         }

         while( l<nL )

                   vTmp[pos++]= *(pData+(l++));

         while( r<nL+nR )

                   vTmp[pos++]= *(pData+(r++));

 

         while( --pos>=0 )

                   *(pData+pos)= vTmp[pos];

}

 

void MergeSort(int *pData, int nSize)

{

         assert(pData!=NULL);

 

         ints(2), i(0);

         while( s<=nSize )

         {

                   i= 0;

                   while( i+s<=nSize )

                   {

                            Merge(pData+i,s/2, s/2);

                            i+= s;

                   }

                   if(i+s!=nSize && nSize-i>s/2)  //<=s/2is processed by last while loop

                            Merge(pData+i,s/2, (nSize-i)-s/2);

 

                   s*= 2;

         }

         if(s!=nSize )

                   Merge(pData,s/2, nSize-s/2 );

}

 

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

#include <time.h>

#include "MergeSort.h"

int main(int argn, char *argv[])

{

         srand((unsignedint)time(NULL));

         inti(0);

         intvData[100];

         intN = 1;

 

         FILE*pFile(NULL);

         pFile= fopen( "test.txt", "w");

         fclose(pFile);

         pFile= fopen( "test.txt", "a");

        

         for(; N<100; ++N)

         {

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

                            vData[i]= rand()%200-100;

 

                   MergeSort(vData,N);

 

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

                            fprintf(pFile,"% 4d", vData[i]);

 

                   fprintf(pFile,"\n");

         }

 

         fclose(pFile);

         //

         printf("\n");

         system("pause");

         return0;

}

 

4.      单链表排序

快速排序是否有必要??感觉有点无病呻吟, 单链表本来就不适合排序...

5.      完成如下功能:

(1)输入:this is a demo\0             输出:siht si aomed\0

(2)输入:this is a demo\0             输出:demo a isthis\0


#include <assert.h> 

//时间复杂度: 2M*N=O(M*N)

//空间复杂度: O(1)

//this is --> siht si

void Rvrs( char *pStr, char cTok)

{

         assert(pStr!=NULL);

 

         char*pBegin(pStr);

         char*pEnd(pStr), *pE(NULL);

         charcTmp(0);

         while(true)

         {

                   while(*pEnd!='\0' && *pEnd!=cTok)

                            ++pEnd;

                   if(*pEnd!=cTok)

                            break;

 

                   pE= pEnd - 1;

                   while(pBegin<pE)

                   {

                            cTmp= *pBegin;

                            *pBegin++= *pE;

                            *pE--= cTmp;

                   }

 

                   pBegin= pEnd = pEnd + 1;

         }

 

         --pEnd;

         while(pBegin<pEnd)

         {

                   cTmp= *pBegin;

                   *pBegin++= *pEnd;

                   *pEnd--= cTmp;

         }

}

 

//时间复杂度: 3M*N=O(M*N)

//空间复杂度: O(1)

//this is --> is this

void Rvrs2(char *pStr, char cTok)

{

         Rvrs(pStr, cTok);

         char*pEnd(pStr), *pBegin(pStr);

         charcTmp(0);

         while( *(++pEnd)!='\0');

         --pEnd;

         while(pBegin<pEnd)

         {

                   cTmp= *pBegin;

                   *pBegin++= *pEnd;

                   *pEnd--= cTmp;

         }

}

 

6.      商店打折优惠,每消费100元即返回10元,返回的10元不做消费限制。问:顾客的100元实际消费水平是多少元?

 

 

二面

1.      介绍下你参与的某个工程项目

2.      介绍在该项目中你的设计流程

3.      介绍一种项目中用到的比较重要的技术或模块设计;该模块的优劣分析,如何改进?(设计思想)

4.      一台高性能服务器,一台数据库客户机。数据库服务器保存了亿量级的key/value记录,并且通过key检索value的时间为1ms(一次检索多条是时间增量忽略)。服务器通过IP网络从数据库客户机查询信息,每次查询网络耗时100ms;服务器负责查询的线程池共10个线程,每个线程的处理容量是10条/s;查询有服务器的inquire(item *, result*)实现, 每次可多条查询。现在,每秒有100万个用户通过服务器查询结果。问:如何实现该系统? 说明设计思路,写出设计结果。

考点:软件设计时要抓问题的主要矛盾。本题主要矛盾是网络耗时,所以设计的核心是减少网络耗时,即减少网络查询次数。

 

 

三面

1.      自我介绍

2.      malloc/new的区别;new失败后会有什么操作;new对象为内置类型时是否调用默认构造函数

3.      C++ STL中容器的内存结构是怎样的?举例说明

4.      C++中多态的实现原理?

5.      举例说明动态规划的原理

6.      对C语言是否熟悉? 用C语言实现KMP算法

7.      给定字符串abcdefgh,用123替换里面所有的cd,要求时间复杂度o(n),空间复杂度o(1)。(替换与被替换的个数可能不一致)

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值