(转载)C++面试宝典2011版 (18)

7.国内的一些帖吧,如baidu,有几十万个主题,假设每一个主题都有上亿的跟帖子,怎么样设计这个系统速度最好,请描述思想,写出算发(c语言),空间和时间复杂度,

#include   string.h

main(void)

{   char   *src="hello,world";

char   *dest=NULL;

dest=(char   *)malloc(strlen(src));

int   len=strlen(str);

char   *d=dest;

char   *s=src[len];

while(len--!=0)

d++=s--;

printf("%s",dest);

}

找出错误!!

#include   "string.h"

#include "stdio.h"

#include "malloc.h"

main(void)

{  

char   *src="hello,world";

char   *dest=NULL;

dest=(char   *)malloc(sizeof(char)*(strlen(src)+1));

int   len=strlen(src);

char   *d=dest;

char   *s=src+len-1;

while(len--!=0)

*d++=*s--;

*d=\'\0\';

printf("%s",dest);

}

105.判断字符串是否为回文

bool IsSymmetry(const char* p)

{

assert(p!=NULL);

const char* q=p;      

int len=0;

while(*q++!=\'\0\')

{

len++;

}       

bool bSign=true;

q=p+len-1;

if (0<len)

{

for (int i=0;i<len/2;i++)

{

if(*p++!=*q--){ bSign=false;break;};

}

}

if(bSign==true)

{

printf("Yes!\n");

}

else

{

printf("No!\n");

}

return bSign;

}

107.ASDL使用的是什么协议?并进行简单描述? 108.Static 作用是什么

首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。

109.什么是预编译,何时需要预编译?

预编译又称为预处理,是做些代码文本的替换工作。处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。

c编译系统在对程序进行通常的编译之前,先进行预处理。c提供的预处理功能主要有以下三种:1)宏定义 2)文件包含 3)条件编译

1、总是使用不经常改动的大型代码体。 
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

110.进程和线程的区别

什么是进程(Process):普通的解释就是,进程是程序的一次执行,而什么是线程(Thread),线程可以理解为进程中的执行的一段程序片段。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别:

进程间是独立的,这表现在内存空间,上下文环境;线程运行在进程空间内。 一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。 同一进程中的两段代码不能够同时执行,除非引入线程。线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。线程占用的资源要少于进程所占用的资源。 进程和线程都可以有优先级。在线程系统中进程也是一个线程。可以将进程理解为一个程序的第一个线程。

线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
(4)二者均可并发执行.

111.插入排序和选择排序

插入排序基本思想:(假定从大到小排序)依次从后面拿一个数和前面已经排好序的数进行比较,比较的过程是从已经排好序的数中最后一个数开始比较,如果比这个数,继续往前面比较,直到找到比它大的数,然后就放在它的后面,如果一直没有找到,肯定这个数已经比较到了第一个数,那就放到第一个数的前面。那么一般情况下,对于采用插入排序法去排序的一组数,可以先选 取第一个数做为已经排好序的一组数。然后把第二个放到正确位置。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwfdg.html