几道面试题
2011-09-03 09:02
435 查看
1)下列程序片段运行时间排序
代码1:
for(uint i = 0;i<1024;++i)
{
char* url = (char*)malloc(4096);
memset(url,0x0,4096);
free(url);
}
代码2:
for(uint i = 0;i<1024;++i)
{
char* url = (char*)malloc(4096);
free(url);
}
代码3:
char* url = (char*)malloc(4096);
for(uint i = 0;i<1024;++i)
{
memset(url,0x0,4096);
}
free(url);
代码4:
for(uint i = 0;i<10*1024;++i)
{
char* url = (char*)malloc(4096);
free(url);
}
给出你认为的代码耗时排序?
2)写出下面代码所犯的错误,并指出这种错误导致的后果
void to_upper(char* s,char* buffer)
{
buffer =(char*)malloc((strlen(s)+1)*sizeof(char));
memset(buffer,0x0,strlen(s)+1);
for(uint32_t i = strlen(s)-1;i>=0;--i)
{
unsigned char t = s[i] - 'a';
buffer[i] = s[i] +('A'-'a')*(t<='z'-'a'?1:0);
}
}
int main(void)
{
char string[] = "123 , goodmorning { ABC";
char* buffer = NULL;
to_upper(string,buffer);
cout<<buffer<<endl;
free(buffer);
}
3)写出下面C++代码的错误,并指出可能的改进
前提:strcpy的基本语义
1)原串不能被修改。
2)拷贝的原串和目的串可能非常大,比如:10M字节。
3)拷贝过程或者成功,或者失败,不会出现拷贝一部分成功,一部分失败
4)拷贝失败返回NULL
假定:
1)目的串和原串都是\0结尾的合法字符串
char* strcpy(char* dst,const char *src)
{
char *ret = dst;
while ((*dst++ = *src++));
return ret;
}
4)下面两个结构体定义中,为什么第二个结构体要加一个padding,这有什么好处?
struct s_nopadding{
char a;
char b;
char c;
};
struct s_withpadding{
char a;
char b;
char c;
char padding;
};
5) 第三题中的结构体中,如果定义s_nopadding t[1024];,则sizeof(t)是1024*3还是1024*4?
6)请问下面这段代码这样写的好处?
typedef void(*pattern_fun)(uint32_t* code,uint32_t* data,size_t n);
pattern_fun PACK[]={PACK0,PACK1,PACK2,PACK3};
void PACK0(uint32_t* code,uint32_t* data,size_t n) //PACK1,PACK2,PACK3均类似,直接返回。
{
return;
}
int main
{
XXXX //一些初始化code,data,n的代码
for(int i = 0;i<4096;++i)
{
PACK[i%4](code,data,n);
XXXX // 一些后续代码
}
}
7)什么是稳定的排序,举一个使用稳定排序的例子?
8)如果设计一个快表,你会从哪些方面考虑,并给出你的设计?
9)分享一个你感兴趣的领域或者技术,并通过专研达到了某种技术高度。
10) 现代操作系统地址的单位是什么?
下列代码有什么用处?
#define PACKET uint32_t //PACKET表示一种数据封装的类型,可以是整形
char* char_ptr = NULL;
for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof (PACKET) - 1)) != 0; ++char_ptr)
{
...
}
代码1:
for(uint i = 0;i<1024;++i)
{
char* url = (char*)malloc(4096);
memset(url,0x0,4096);
free(url);
}
代码2:
for(uint i = 0;i<1024;++i)
{
char* url = (char*)malloc(4096);
free(url);
}
代码3:
char* url = (char*)malloc(4096);
for(uint i = 0;i<1024;++i)
{
memset(url,0x0,4096);
}
free(url);
代码4:
for(uint i = 0;i<10*1024;++i)
{
char* url = (char*)malloc(4096);
free(url);
}
给出你认为的代码耗时排序?
2)写出下面代码所犯的错误,并指出这种错误导致的后果
void to_upper(char* s,char* buffer)
{
buffer =(char*)malloc((strlen(s)+1)*sizeof(char));
memset(buffer,0x0,strlen(s)+1);
for(uint32_t i = strlen(s)-1;i>=0;--i)
{
unsigned char t = s[i] - 'a';
buffer[i] = s[i] +('A'-'a')*(t<='z'-'a'?1:0);
}
}
int main(void)
{
char string[] = "123 , goodmorning { ABC";
char* buffer = NULL;
to_upper(string,buffer);
cout<<buffer<<endl;
free(buffer);
}
3)写出下面C++代码的错误,并指出可能的改进
前提:strcpy的基本语义
1)原串不能被修改。
2)拷贝的原串和目的串可能非常大,比如:10M字节。
3)拷贝过程或者成功,或者失败,不会出现拷贝一部分成功,一部分失败
4)拷贝失败返回NULL
假定:
1)目的串和原串都是\0结尾的合法字符串
char* strcpy(char* dst,const char *src)
{
char *ret = dst;
while ((*dst++ = *src++));
return ret;
}
4)下面两个结构体定义中,为什么第二个结构体要加一个padding,这有什么好处?
struct s_nopadding{
char a;
char b;
char c;
};
struct s_withpadding{
char a;
char b;
char c;
char padding;
};
5) 第三题中的结构体中,如果定义s_nopadding t[1024];,则sizeof(t)是1024*3还是1024*4?
6)请问下面这段代码这样写的好处?
typedef void(*pattern_fun)(uint32_t* code,uint32_t* data,size_t n);
pattern_fun PACK[]={PACK0,PACK1,PACK2,PACK3};
void PACK0(uint32_t* code,uint32_t* data,size_t n) //PACK1,PACK2,PACK3均类似,直接返回。
{
return;
}
int main
{
XXXX //一些初始化code,data,n的代码
for(int i = 0;i<4096;++i)
{
PACK[i%4](code,data,n);
XXXX // 一些后续代码
}
}
7)什么是稳定的排序,举一个使用稳定排序的例子?
8)如果设计一个快表,你会从哪些方面考虑,并给出你的设计?
9)分享一个你感兴趣的领域或者技术,并通过专研达到了某种技术高度。
10) 现代操作系统地址的单位是什么?
下列代码有什么用处?
#define PACKET uint32_t //PACKET表示一种数据封装的类型,可以是整形
char* char_ptr = NULL;
for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof (PACKET) - 1)) != 0; ++char_ptr)
{
...
}
相关文章推荐
- 0074 几道面试题
- 07-关于inode与block的几道面试题(转自网络)
- 几道基础的面试题
- Java继承中的几道面试题
- 重解几道华为经典C语言面试题
- 几道大数据面试题
- 几道经典C语言面试题
- 7道C语言面试题,7分钟完成。你能做对几道?
- 关于数组的几道面试题
- 为面试准备的超经典的Java面试题,总会碰到那几道
- 几道php基础面试题
- Java 几道常见String面试题
- 几道嵌入式的面试题
- 某厂几道C/C++面试题
- 关于数组的几道面试题
- CSDN上看到的几道PHP面试题
- 林锐高质量编程中的几道面试题
- 记录几道面试题留着之后看
- 重解几道华为经典C语言面试题
- 几道坑人的PHP面试题 试试看看你会不会也中招