一面
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)。(替换与被替换的个数可能不一致)