1、要把c语言的基打实
2、理解cQ+语言中一些概念以及它们之间的区别Q需要深ȝ解)Q?/p>
Q?Q局部变?全局变量 静态变?const帔R 寄存器变?宏定义的帔R static变量
注:包括它们的内存分配区域,作用域,初始化等{?/p>
Q?Q理解malloc与new之间的区别,以及free与delete之间区别
Q?Q内联函C宏定义的区别Q它们各有什么优?/p>
Q?Q内存分配有哪几UŞ式?分别ZQ区别是什么?对编译速度影响是何Q?/p>
Q?Q理解什么是重蝲、覆盖、隐藏,区别是何Q可否D例?
Q?Q什么是多态?举个例子试试
Q?Qstruct 和class有什么区别?c语言中的struct 和cQ+中的struct一样么Q有什么区别?
Q?Q说说什么是野指针?野指针什么情况下出现Q(没有初始化,delete后没有赋gؓNULLQ?/p>
Q?Q你熟悉预编译指令么Q条件编译是用来做什么的Q你会写么?
Q?QsizeofQ)q个函数你理解么Q你能说出各U变量类型在win 32 下的gQ?/p>
Q?0Q关于stringq个cM理解么?会写它的构造函敎ͼ析构函数Q拷贝构造函敎ͼ赋值函CQ会写strcpy吗?
Q?1Q知道断aASSERTQ)怎么样么Q一定要常用。它是函数还是宏Qؓ什么不能是函数Q?/p>
Q?2Q懂什么是链表么?会链表的一些基本操作么Q?/p>
Q?3Q明白队列,双链表,循环链表Q栈是怎么回事Q会写这些类?/p>
Q?4Q一定要知道二叉树的遍历有几U,一定要会写用递归的方式来遍历它们?/p>
Q?5Q在一个字W串中,你能计算里边“数字字符”的个CQ?/p>
Q?6Q知道sizeof(Type*)=4吗?注:win32?/p>
Q?7Qint array[5]= {}; sizeof(array)=?
int Fuction(int a[])
{
return sizeof(a);
}
Fuction(array)=?
Q?8Q你知道函数不能q回栈指针么Q?/p>
Q?9Q知道局部变量ؓ什么比全局变量快么Q?/p>
Q?0Q知道ؓ什么要Zؓ写拷贝构造函CQ?/p>
×××××××××××××××××××××××××××××××××××××××××××××××××××
?1条开始属于难?/p>
Q?1Q会用c语言实现重蝲与承么Q?/p>
Q?2Q能说出几种排序ҎQ它们的区别和各自的优点是什么?知道什么是内排序什么是外排序么Q?/p>
Q?3Q知道什么是struct中的寚w么?
Q?4Qextern c‘ 是干什么的Q?/p>
Q?5Q内存管理你懂多?Q包括内存泄漏,野指针知识,非法调用Q内存溢出等Q?/p>
Q?6Qmallocq回什么?怎么用?
Q?7Q待l?#8230;…
上次说了说关于c、cQ+的一些重点,现在说一些关于MFC中经常考的东西Q有些也不是专属于MFCQ但我们现在l常在MFC中用刎ͼ? ActiveX QCOMQ动态链接库的东西)Q其实在W试考试中,MFC的东西考的很少Q单位都注重c的基是否扎实Q面向对象思想是否理解的深刅R?/p>
1Q说说mfc中的cȝ承图的基本框Ӟq个题我被考过?/p>
2Q说说CViewcȝ子类都有什么?/p>
3QDLL的三U调用Ş式?/p>
4Q说说onpaintQ)和ondrawQ)的关pR?/p>
5Q说说CViewcMCDocument的关p(重要Q?/p>
6Q说SendMessageQ)与PostMessageQ)的区别?/p>
7Q简qCOM技术?/p>
8Q说说读写一个文件怎么来完成,分别用cQcQ+QMFC三种库函数来~写代码?/p>
9Q说说二q制文g和文本文件之间区别,举例子,会吗Q?/p>
10Q?net的技术优Ҏ何?
同学?道面试题Q应聘的职位是搜索引擎工E师Q后两道难,Q希望大家多l一些算发)
1.l两个数l和他们的大,q有一动态开辟的内存Q求交集Q把交集攑ֈ动态内存dongtaiQƈ且返回交集个?br>long jiaoji(long* a[],long b[],long* alength,long blength,long* dongtai[])
2.单连表的建立Q把'a'--'z'26个字母插入到q表中,q且倒叙Q还要打华ͼ
Ҏ1Q?br>typedef struct val
{ int date_1;
struct val *next;
}*p;
void main(void)
{ char c;
for(c=122;c>=97;c--)
{ p.date=c;
p=p->next;
}
p.next=NULL;
}
}
Ҏ2Q?br>node *p = NULL;
node *q = NULL;
node *head = (node*)malloc(sizeof(node));
head->data = ' ';head->next=NULL;
node *first = (node*)malloc(sizeof(node));
first->data = 'a';first->next=NULL;head->next = first;
p = first;
int longth = 'z' - 'b';
int i=0;
while ( i<=longth )
{
node *temp = (node*)malloc(sizeof(node));
temp->data = 'b'+i;temp->next=NULL;q=temp;
head->next = temp; temp->next=p;p=q;
i++;
}
print(head);
3.可怕的题目l于来了
象搜索的输入信息是一个字W串Q统?00万输入信息中的最热门的前十条Q我们每ơ输入的一个字W串Z过255byte,内存使用只有1G,
hq思想Q写出算发(c语言Q,I间和时间复杂度Q?br>4.国内的一些帖吧,如baidu,有几十万个主题,假设每一个主题都有上亿的跟帖子,怎么栯计这个系l速度最好,hq思想Q写出算发(c语言Q,I间和时间复杂度Q?br>
#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);
}
扑և错误Q!
#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);
}
1. qC个Linux驱动E序的主要流E与功能?br>
2. 请列举一个Y件中旉换空间或者空间换旉的例子?br>void swap(int a,int b)
{
int c; c=a;a=b;b=a;
}
--->IZ
void swap(int a,int b)
{
a=a+b;b=a-b;a=a-b;
}
6. 请问一下程序将输出什么结果?
char *RetMenory(void)
{
char p[] = “hellow world”;
return p;
}
void Test(void)
{
char *str = NULL;
str = RetMemory();
printf(str);
}
RetMenory执行完毕Qp资源被回Ӟ指向未知地址。返回地址Qstr的内容应是不可预的, 打印的应该是str的地址
写一个函?它的原Ş是int continumax(char *outputstr,char *intputstr)
功能Q?br>在字W串中找l最长的数字Ԍq把q个串的长度q回Qƈ把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数返?br>9Qoutputstr所指的gؓ123456789
int continumax(char *outputstr, char *inputstr)
{
char *in = inputstr, *out = outputstr, *temp, *final;
int count = 0, maxlen = 0;
while( *in != '\0' )
{
if( *in > 47 && *in < 58 )
{
for(temp = in; *in > 47 && *in < 58 ; in++ )
count++;
}
else
in++;
if( maxlen < count )
{
maxlen = count;
count = 0;
final = temp;
}
}
for(int i = 0; i < maxlen; i++)
{
*out = *final;
out++;
final++;
}
*out = '\0';
return maxlen;
}
不用库函?用C语言实现一整型数字转化为字W串
Ҏ1Q?br>int getlen(char *s){
int n;
for(n = 0; *s != '\0'; s++)
n++;
return n;
}
void reverse(char s[])
{
int c,i,j;
for(i = 0,j = getlen(s) - 1; i < j; i++,j--){
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void itoa(int n,char s[])
{
int i,sign;
if((sign = n) < 0)
n = -n;
i = 0;
do{/*以反序生成数?/
s[i++] = n%10 + '0';/*get next number*/
}while((n /= 10) > 0);/*delete the number*/
if(sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
Ҏ2:
#include <iostream>
using namespace std;
void itochar(int num);
void itochar(int num)
{
int i = 0;
int j ;
char stra[10];
char strb[10];
while ( num )
{
stra[i++]=num%10+48;
num=num/10;
}
stra[i] = '\0';
for( j=0; j < i; j++)
{
strb[j] = stra[i-j-1];
}
strb[j] = '\0';
cout<<strb<<endl;
}
int main()
{
int num;
cin>>num;
itochar(num);
return 0;
}
前几天面试,有一题想不明?h大家Q?br>typedef struct
{
int a:2;
int b:2;
int c:1;
}test;
test t;
t.a = 1;
t.b = 3;
t.c = 1;
printf("%d",t.a);
printf("%d",t.b);
printf("%d",t.c);
谢谢!
t.a?1,输出是1
t.b?1Q输出就是-1
t.c?Q输Z?1
3个都是有W号数int嘛?br>q是位扩展问?
01
11
1
~译器进行符h?br>
求组合数Q?求n个数Q?....nQ中k个数的组?...
如:combination(5,3)
要求输出Q?43Q?42Q?41Q?32Q?31Q?21Q?32Q?31Q?21Q?21Q?br>#include<stdio.h>
int pop(int *);
int push(int );
void combination(int ,int );
int stack[3]={0};
top=-1;
int main()
{
int n,m;
printf("Input two numbers:\n");
while( (2!=scanf("%d%*c%d",&n,&m)) )
{
fflush(stdin);
printf("Input error! Again:\n");
}
combination(n,m);
printf("\n");
}
void combination(int m,int n)
{
int temp=m;
push(temp);
while(1)
{
if(1==temp)
{
if(pop(&temp)&&stack[0]==n) //当栈底元素弹?amp;&为可能取的最|循环退?br>break;
}
else if( push(--temp))
{
printf("%d%d%d ",stack[0],stack[1],stack[2]);//§ä¨ì¤@?
pop(&temp);
}
}
}
int push(int i)
{
stack[++top]=i;
if(top<2)
return 0;
else
return 1;
}
int pop(int *i)
{
*i=stack[top--];
if(top>=0)
return 0;
else
return 1;
}
1、用指针的方法,字W串“ABCD1234efgh”前后对调昄
#include <stdio.h>
#include <string.h>
#include <dos.h>
int main()
{
char str[] = "ABCD1234efgh";
int length = strlen(str);
char * p1 = str;
char * p2 = str + length - 1;
while(p1 < p2)
{
char c = *p1;
*p1 = *p2;
*p2 = c;
++p1;
--p2;
}
printf("str now is %s\n",str);
system("pause");
return 0;
}
2、有一分数序列Q?/2,1/4,1/6,1/8……Q用函数调用的方法,求此数列?0的?br>#include <stdio.h>
double getValue()
{
double result = 0;
int i = 2;
while(i < 42)
{
result += 1.0 / i;//一定要使用1.0做除敎ͼ不能?Q否则结果将自动转化成整敎ͼ?.000000
i += 2;
}
return result;
}
int main()
{
printf("result is %f\n", getValue());
system("pause");
return 0;
}
4. static有什么用途?Q请臛_说明两种Q?br>1.限制变量的作用域
2.讄变量的存储域
7. 引用与指针有什么区别?
1) 引用必须被初始化Q指针不必?br>2) 引用初始化以后不能被改变Q指针可以改变所指的对象?br>2) 不存在指向空值的引用Q但是存在指向空值的指针?br>
8. 描述实时pȝ的基本特?br>在特定时间内完成特定的Q务,实时性与可靠?br>9. 全局变量和局部变量在内存中是否有区别Q如果有Q是什么区别?
全局变量储存在静态数据库Q局部变量在堆栈
10. 什么是q二叉树?
左右子树都是q二叉?且左叛_树的深度差值的l对g大于1
11. 堆栈溢出一般是׃么原因导致的Q?br>没有回收垃圾资源
12. 什么函C能声明ؓ虚函敎ͼ
constructor
13. 冒排序法的时间复杂度是什么?
O(n^2)
14. 写出float x ?#8220;零?#8221;比较的if语句?br>if(x>0.000001&&x<-0.000001)
16. Internet采用哪种|络协议Q该协议的主要层ơ结构?
tcp/ip 应用?传输?|络?数据链\?物理?br>17. Internet物理地址和IP地址转换采用什么协议?
ARP (Address Resolution Protocol)Q地址解析協議Q?br>18.IP地址的编码分为哪俩部分?
IP地址׃部分l成Q网l号和主机号。不q是要和“子网掩码”按位与上之后才能区分哪些是网l位哪些是主Z?br>
2.用户输入M,N|?至N开始顺序@环数敎ͼ每数到M输出该数|直至全部输出。写出CE序?br>循环链表Q用取余操作?br>3.不能做switch()的参数类型是Q?br>switch的参C能ؓ实型?br>
華為
1、局部变量能否和全局变量重名Q?br>{:能,局部会屏蔽全局。要用全局变量Q需要?::"
局部变量可以与全局变量同名Q在函数内引用这个变量时Q会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言Q在同一个函数内可以定义多个同名的局部变量,比如在两个@环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个@环体?br>2、如何引用一个已l定义过的全局变量Q?br>{:extern
可以用引用头文g的方式,也可以用extern关键字,如果用引用头文g方式来引用某个在头文件中声明的全局变理Q假定你那个变写错了,那么在编译期间会报错Q如果你用extern方式引用Ӟ假定你犯了同L错误Q那么在~译期间不会报错Q而在q接期间报错
3、全局变量可不可以定义在可被多?C文g包含的头文g中?Z么?
{:可以Q在不同的C文g中以static形式来声明同名全局变量?br>可以在不同的C文g中声明同名的全局变量Q前提是其中只能有一个C文g中对此变量赋初|此时q接不会出错
4、语句for( Q? Q?有什么问题?它是什么意思?
{:和while(1)相同?br>5、do……while和while……do有什么区别?
{:前一个@环一遍再判断Q后一个判断以后再循环
6、请写出下列代码的输出内?br>#include<stdio.h>
main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("bQcQdQ?dQ?dQ?d"QbQcQdQ?
return 0;
}
{:10Q?2Q?20
1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
?
局变量(外部变量)的说明之前再冠以static 构成了静态的全局变量。全局变量本n是静态存储方式, 静态全局变量当然也是静态存储方式?
q两者在存储方式上ƈ无不同。这两者的区别虽在于非静态全局变量的作用域是整个源E序Q?
当一个源E序由多个源文gl成Ӟ非静态的全局变量在各个源文g中都是有效的?而静态全局变量则限制了其作用域Q?卛_在定义该变量的源文g内有效,
在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文g内,只能源文件内的函数公用,
因此可以避免在其它源文g中引起错误?br>从以上分析可以看出, 把局部变量改变ؓ静态变量后是改变了它的存储方式x变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的用范围?br>static函数与普通函C用域不同。仅在本文g。只在当前源文g中用的函数应该说明为内部函?static)Q内部函数应该在当前源文件中说明和定义。对于可在当前源文g以外使用的函敎ͼ应该在一个头文g中说明,要用这些函数的源文件要包含q个头文?br>
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一ơ,防止在其他文件单元中被引?
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一ơ,下一ơ依据上一ơ结果|
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中l持一份拷?br>2、程序的局部变量存在于Q堆栈)中,全局变量存在于(静态区 Q中Q动态申h据存在于Q?堆)中?br>3、设有以下说明和定义Q?br>typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
则语?printf("%d",sizeof(struct date)+sizeof(max));的执行结果是Q___52____
{:DATE是一个union, 变量公用I间. 里面最大的变量cd是int[5], 占用20个字? 所以它的大是20
data是一个struct, 每个变量分开占用I间. 依次为int4 + DATE20 + double8 = 32.
所以结果是 20 + 32 = 52.
当然...在某?6位编辑器? int可能?字节,那么l果?int2 + DATE10 + double8 = 20
4、队列和栈有什么区别?
队列先进先出Q栈后进先出
5、写Z列代码的输出内容
#include<stdio.h>
int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
INCp=&inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf("%d\n",*arg2);
}
main()
{
int a;
show(multi,10,&a);
return 0;
}
{:110
7、请扑և下面代码中的所以错?br>说明Q以下代码是把一个字W串倒序Q如“abcd”倒序后变?#8220;dcba”
1?include"string.h"
2、main()
3、{
4?char*src="hello,world";
5?char* dest=NULL;
6?int len=strlen(src);
7?dest=(char*)malloc(len);
8?char* d=dest;
9?char* s=src[len];
10?while(len--!=0)
11?d++=s--;
12?printf("%s",dest);
13?return 0;
14、}
{:
Ҏ1Q?br>int main(){
char* src = "hello,world";
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要ؓ\0分配一个空?br>char* d = dest;
char* s = &src[len-1];//指向最后一个字W?br>while( len-- != 0 )
*d++=*s--;
*d = 0;//N要加\0
printf("%s\n",dest);
free(dest);// 使用完,应当释放I间Q以免造成内存汇泄?br>return 0;
}
Ҏ2Q?br>#include <stdio.h>
#include <string.h>
main()
{
char str[]="hello,world";
int len=strlen(str);
char t;
for(int i=0; i<len/2; i++)
{
t=str[i];
str[i]=str[len-i-1]; str[len-i-1]=t;
}
printf("%s",str);
return 0;
}
1.-1,2,7,28,,126请问28?26中间那个数是什么?Z么?
W一题的{案应该?^3-1=63
规律是n^3-1(当n为偶?Q?Q?)
n^3+1(当n为奇?Q?Q?)
{案Q?3
2.用两个栈实现一个队列的功能Q要求给出算法和思\Q?br>?个栈为A,B, 一开始均为空.
入队:
新元素push入栈A;
出队:
(1)判断栈B是否为空Q?br>(2)如果不ؓI,则将栈A中所有元素依ơpop出ƈpush到栈BQ?br>(3)栈B的栈元素pop出;
q样实现的队列入队和出队的^摊复杂度都还是O(1), 比上面的几种Ҏ要好?.在c语言库函C一个字W{换成整型的函数是atool()吗,q个函数的原型是什么?
函数? atol
?? 把字W串转换成长整型?
?? long atol(const char *nptr);
E序?
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
long l;
char *str = "98765432";
l = atol(lstr);
printf("string = %s integer = %ld\n", str, l);
return(0);
}
2.对于一个频J用的短小函数,在C语言中应用什么实?在C++中应用什么实?
c用宏定义Qc++用inline
3.直接链接两个信o点的一l链路称作什?
PPP点到点连?br>4.接入|用的是什么接?
5.voip都用了那些协?
6.软g试都有那些U类?
黑盒Q针对系l功能的试 白合Q测试函数功能,各函数接?br>7.定模块的功能和模块的接口是在Y件设计的那个队段完成?
概要设计阶段
8.enum string
{
x1,
x2,
x3=10,
x4,
x5,
}x;
问x= 0x801005Q?x8010f4 ;
9.unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问p1+5= ;
p2+5= ;
?选择?
1.Ethternet链接到Internet用到以下那个协议?
A.HDLC;B.ARP;C.UDP;D.TCP;E.ID
2.属于|络层协议的?
A.TCP;B.IP;C.ICMP;D.X.25
3.Windows消息调度机制?
A.指o队列;B.指o堆栈;C.消息队列;D.消息堆栈;
4.unsigned short hash(unsigned short key)
{
return (key>>)%256
}
请问hash(16),hash(256)的值分别是:
A.1.16;B.8.32;C.4.16;D.1.32
?N?
1.请问下面E序有什么错?
int a[60][250][1000],i,j,k;
for(k=0;k<=1000;k++)
for(j=0;j<250;j++)
for(i=0;i<60;i++)
a[i][j][k]=0;
把@环语句内外换一?br>2.#define Max_CB 500
void LmiQueryCSmd(Struct MSgCB * pmsg)
{
unsigned char ucCmdNum;
......
for(ucCmdNum=0;ucCmdNum<Max_CB;ucCmdNum++)
{
......;
}
d@?br>3.以下是求一个数的^方的E序,h出错?
#define SQUARE(a)((a)*(a))
int a=5;
int b;
b=SQUARE(a++);
4.typedef unsigned char BYTE
int examply_fun(BYTE gt_len; BYTE *gt_code)
{
BYTE *gt_buf;
gt_buf=(BYTE *)MALLOC(Max_GT_Length);
......
if(gt_len>Max_GT_Length)
{
return GT_Length_ERROR;
}
.......
}
?问答?
1.IP Phone的原理是什?
IPV6
2.TCP/IP通信建立的过E怎样Q端口有什么作用?
三次握手Q确定是哪个应用E序使用该协?br>3.1号信令和7号信令有什么区别,我国某前q泛使用的是那一U?
4.列D5U以上的电话C务?
微Y亚洲技术中心的面试题!Q!
1Q进E和U程的差别?br>U程是指q程内的一个执行单?也是q程内的可调度实?
与进E的区别:
(1)调度Q线E作度和分配的基本单位,q程作ؓ拥有资源的基本单?br>(2)q发性:不仅q程之间可以q发执行Q同一个进E的多个U程之间也可q发执行
(3)拥有资源Q进E是拥有资源的一个独立单位,U程不拥有系l资源,但可以访问隶属于q程的资?
(4)pȝ开销Q在创徏或撤消进E时Q由于系l都要ؓ之分配和回收资源Q导致系l的开销明显大于创徏或撤消线E时的开销?br>2.试Ҏ
人工试Q个人复查、抽查和会审
机器试Q黑盒测试和白盒试
2QHeap与stack的差别?br>Heap是堆Qstack是栈?br>Stack的空间由操作pȝ自动分配/释放QHeap上的I间手动分配/释放?br>StackI间有限QHeap是很大的自由存储?br>C中的malloc函数分配的内存空间即在堆?C++中对应的是new操作W?br>E序在编译期对变量和函数分配内存都在栈上q行,且程序运行过E中函数调用时参数的传递也在栈上进?br>3QWindows下的内存是如何管理的Q?br>4Q介l?Net?Net的安全性?br>5Q客L如何讉K.Netlg实现Web ServiceQ?br>6QC/C++~译器中虚表是如何完成的Q?br>7Q谈谈COM的线E模型。然后讨E内/外组件的差别?br>8Q谈谈IA32下的分页机制
页(4K)两分页模式Q大?4M)一U?br>9Q给两个变量Q如何找Z个带环单链表中是什么地方出现环的?
一个递增一Q一个递增二,他们指向同一个接Ҏ是环出现的地方
10Q在IA32中一共有多少U办法从用户态蟩到内核态?
通过调用门,从ring3到ring0Q中断从ring3到ring0Q进入vm86{等
11Q如果只惌E序有一个实例运行,不能q行两个。像winamp一P只能开一个窗口,怎样实现Q?br>用内存映或全局原子Q互斥变量)、查扄口句?.
FindWindowQ互斥,写标志到文g或注册表,׃n内存?
12Q如何截取键盘的响应Q让所有的‘a’变成‘b’Q?br>键盘钩子SetWindowsHookEx
13QApartment在COM中有什么用Qؓ什么要引入Q?br> 14Q存储过E是什么?有什么用Q有什么优点?
我的理解是一堆sql的集合,可以建立非常复杂的查询,~译q行Q所以运行一ơ后Q以后再q行速度比单独执行SQL快很?br> 15QTemplate有什么特点?什么时候用Q?br>16Q谈谈Windows DNAl构的特点和优点?br>
|络~程中设计ƈ发服务器Q用多q程 ?多线E?Q请问有什么区别?
1Q进E:子进E是父进E的复制品。子q程获得父进E数据空间、堆和栈的复制品?br>2Q线E:相对与进E而言Q线E是一个更加接q与执行体的概念Q它可以与同q程的其他线E共享数据,但拥有自q栈空_拥有独立的执行序列?br>两者都可以提高E序的ƈ发度Q提高程序运行效率和响应旉?br>U程和进E在使用上各有优~点Q线E执行开销,但不利于资源理和保护;而进E正相反。同ӞU程适合于在SMP机器上运行,而进E则可以跨机器迁UR?br>
思科
1. 用宏定义写出swapQxQyQ?br>#define swap(x, y)\
x = x + y;\
y = x - y;\
x = x - y;
2.数组a[N]Q存放了1至N-1个数Q其中某个数重复一ơ。写一个函敎ͼ扑և被重复的数字.旉复杂度必MؓoQNQ函数原型:
int do_dup(int a[],int N)
3 一语句实现x是否?的若q次q的判断
int i = 512;
cout << boolalpha << ((i & (i - 1)) ? false : true) << endl;
4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行{?pv始{化位,n为需要{换的长度,假设起始点在双.如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001
unsigned int intvert(unsigned int x,int p,int n){
unsigned int _t = 0;
unsigned int _a = 1;
for(int i = 0; i < n; ++i){
_t |= _a;
_a = _a << 1;
}
_t = _t << p;
x ^= _t;
return x;
}
慧通:
什么是预编?br>何时需要预~译Q?br>Q、L使用不经常改动的大型代码体?
Q、程序由多个模块l成Q所有模块都使用一l标准的包含文g和相同的~译选项。在q种情况下,可以所有包含文仉~译Z个预~译头?br>char * const p;
char const * p
const char *p
上述三个有什么区别?
char * const p; //帔R指针Qp的g可以修改
char const * pQ?/指向帔R的指针,指向的常量g可以?br>const char *pQ?//和char const *p
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char *str5 = "abc";
const char *str6 = "abc";
char *str7 = "abc";
char *str8 = "abc";
cout << ( str1 == str2 ) << endl;
cout << ( str3 == str4 ) << endl;
cout << ( str5 == str6 ) << endl;
cout << ( str7 == str8 ) << endl;
l果是:0 0 1 1
解答Qstr1,str2,str3,str4是数l变量,它们有各自的内存I间Q?br>而str5,str6,str7,str8是指针,它们指向相同的常量区域?br>
12. 以下代码中的两个sizeof用法有问题吗Q[C易]
void UpperCase( char str[] ) // ?str 中的写字母转换成大写字?br>{
for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )
if( 'a'<=str[i] && str[i]<='z' )
str[i] -= ('a'-'A' );
}
char str[] = "aBcDe";
cout << "str字符长度? " << sizeof(str)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;
{:
函数内的sizeof有问题。根据语法,sizeof如用于数l,只能出静态数l的大小Q无法检动态分配的或外部数l大。函数外的str是一个静?
定义的数l,因此其大ؓ6Q函数内的str实际只是一个指向字W串的指针,没有M额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,
一个指针ؓ4个字节,因此q回4?br>
一?2位的机器,该机器的指针是多位
指针是多位只要看地址ȝ的位数就行了?0386以后的机子都?2的数据ȝ。所以指针的位数是4个字节了?br>
main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
输出Q?,5
*(a+1Q就是a[1]Q?(ptr-1)是a[4],执行l果?Q?
&a+1不是首地址+1Q系l会认ؓ加一个a数组的偏U,是偏UM一个数l的大小Q本例是5个intQ?br>int *ptr=(int *)(&a+1);
则ptr实际?amp;(a[5]),也就是a+5
原因如下Q?br>&a是数l指针,其类型ؓ int (*)[5];
而指针加1要根据指针类型加上一定的|
不同cd的指?1之后增加的大不?br>a是长度ؓ5的int数组指针Q所以要?5*sizeof(int)
所以ptr实际是a[5]
但是prt?&a+1)cd是不一L(q点很重?
所以prt-1只会减去sizeof(int*)
a,&a的地址是一LQ但意思不一Pa是数l首地址Q也是a[0]的地址Q?amp;a是对象(数组Q首地址Qa+1是数l下一元素的地址Q即a[1],&a+1是下一个对象的地址Q即a[5].
1.请问以下代码有什么问题:
int main()
{
char a;
char *str=&a;
strcpy(str,"hello");
printf(str);
return 0;
}
没有为str分配内存I间Q将会发生异?br>问题出在一个字W串复制q一个字W变量指针所指地址。虽然可以正输出结果,但因界进行内在读写而导致程序崩溃?br>
char* s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错Q?br>"AAA"是字W串帔R。s是指针,指向q个字符串常量,所以声明s的时候就有问题?br>cosnt char* s="AAA";
然后又因为是帔RQ所以对是s[0]的赋值操作是不合法的?/p>
1、写一?#8220;标准”宏,q个宏输入两个参数ƈq回较小的一个?br>.#define Min(X, Y) ((X)>(Y)?(Y):(X))//l尾没有;
2、嵌入式pȝ中经常要用到无限循环Q你怎么用C~写d@环?br>while(1){}或者for(;;)
3、关键字static的作用是什么?
定义静态变?br>4、关键字const有什么含意?
表示帔R不可以修改的变量?br>5、关键字volatile有什么含意?qDZ个不同的例子Q?br>提示~译器对象的值可能在~译器未监测到的情况下改变?br>
int (*s[10])(int) 表示的是什么啊
int (*s[10])(int) 函数指针数组Q每个指针指向一个int func(int param)的函数?br>
1.有以下表辑ּQ?br>int a=248; b=4;int const c=21;const int *d=&a;
int *const e=&b;int const *f const =&a;
请问下列表达式哪些会被编译器止Qؓ什么?
*c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;
*c q是个什么东东,止
*d 说了是constQ?止
e = &a 说了是const 止
const *f const =&a; 止
2.交换两个变量的|不用第三个变量。即a=3,b=5,交换之后a=5,b=3;
有两U解? 一U用术法, 一U用^(异或)
a = a + b;
b = a - b;
a = a - b;
or
a = a^b;// 只能对int,char..
b = a^b;
a = a^b;
or
a ^= b ^= a;
3.c和c++中的struct有什么不同?
c和c++中struct的主要区别是c中的struct不可以含有成员函敎ͼ而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同Qstruct默认为publicQ而class默认为private
4.#include <stdio.h>
#include <stdlib.h>
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(str);
printf("%s/n",str);
free(str);
return 0;
}
E序崩溃Qgetmemory中的malloc 不能q回动态内存, freeQ)对str操作很危?br>5.char szstr[10];
strcpy(szstr,"0123456789");
产生什么结果?Z么?
长度不一P会造成非法的OS
6.列D几种q程的同步机Ӟq比较其优缺炏V?br>原子操作
信号量机?br>自旋?br>程Q会合,分布式系l?br>
7.q程之间通信的途径
׃n存储pȝ
消息传递系l?br>道Q以文gpȝ为基
11.q程死锁的原?br>资源竞争及进E推q顺序非?br>12.死锁?个必要条?br>互斥、请求保持、不可剥夺、环?br>13.死锁的处?br>鸵鸟{略、预防策略、避免策略、检与解除死锁
15. 操作pȝ中进E调度策略有哪几U?
FCFS(先来先服?Q优先Q时间片轮{Q多U反?br>8.cȝ静态成员和非静态成员有何区别?
cȝ静态成员每个类只有一个,非静态成员每个对象一?br>9.U虚函数如何定义Q用时应注意什么?
virtual void f()=0;
是接口,子类必须要实?br>10.数组和链表的区别
数组Q数据顺序存储,固定大小
q表Q数据可以随机存储,大小可动态改?br>
12.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?
应用?br>表示?br>会话?br>q输?br>|络?br>物理链\?br>物理?br>tcp /udp属于q输?br>TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等?br>?TCP 不同Q?UDP q不提供?IP 协议的可靠机制、流控制以及错误恢复功能{。由?UDP 比较单, UDP 头包含很的字节Q比 TCP 负蝲消耗少?br>tcp: 提供E_的传输服务,有流量控Ӟ~点是包头大Q冗余性不?br>udp: 不提供稳定的服务Q包头小Q开销?
1Q?void *)ptr ?(*(void**))ptr的结果是否相同?其中ptr为同一个指?br>.(void *)ptr ?(*(void**))ptr值是相同?br>2Qint main()
{
int x=3;
printf("%d",x);
return 1;
}
问函数既然不会被其它函数调用Qؓ什么要q回1Q?br>mian中,c标准认ؓ0表示成功Q非0表示错误。具体的值是某中具体出错信息
1Q要对绝对地址0x100000赋|我们可以?br>(unsigned int*)0x100000 = 1234;
那么要是惌E序跌{到绝对地址?x100000L行,应该怎么做?
*((void (*)( ))0x100000 ) ( );
首先要将0x100000强制转换成函数指??
(void (*)())0x100000
然后再调用它:
*((void (*)())0x100000)();
用typedef可以看得更直观些:
typedef void(*)() voidFuncPtr;
*((voidFuncPtr)0x100000)();
2Q已知一个数ltableQ用一个宏定义Q求出数据的元素个数
#define NTBL
#define NTBL (sizeof(table)/sizeof(table[0]))
面试? U程与进E的区别和联p? U程是否h相同的堆? dll是否有独立的堆栈?
q程是死的,只是一些资源的集合Q真正的E序执行都是U程来完成的Q程序启动的时候操作系l就帮你创徏了一个主U程?br>
每个U程有自q堆栈?br>DLL
中有没有独立的堆栈,q个问题不好回答Q或者说q个问题本n是否有问题。因为DLL中的代码是被某些U程所执行Q只有线E拥有堆栈,如果DLL中的代码?
EXE中的U程所调用Q那么这个时候是不是说这个DLL没有自己独立的堆栈?如果DLL中的代码是由DLL自己创徏的线E所执行Q那么是不是说DLL有独
立的堆栈Q?br>
以上讲的是堆栈,如果对于堆来_每个DLL有自q堆,所以如果是从DLL中动态分配的内存Q最好是从DLL中删除,如果你从DLL中分配内存,然后在EXE中,或者另外一个DLL中删除,很有可能DE序崩溃
unsigned short A = 10;
printf("~A = %u\n", ~A);
char c=128;
printf("c=%d\n",c);
输出多少Qƈ分析q程
W一题,~A Q?xfffffff5,int?为-11Q但输出的是uint。所以输?294967285
W二题,cQ?x10,输出的是intQ最高位?Q是负数Q所以它的值就?x00的补码就?28Q所以输出-128?br>q两道题都是在考察二进制向int或uint转换时的最高位处理?br>
分析下面的程序:
void GetMemory(char **p,int num)
{
*p=(char *)malloc(num);
}
int main()
{
char *str=NULL;
GetMemory(&str,100);
strcpy(str,"hello");
free(str);
if(str!=NULL)
{
strcpy(str,"world");
}
printf("\n str is %s",str);
getchar();
}
问输出结果是什么?希望大家能说说原因,先谢谢了
输出str is world?br>free 只是释放的str指向的内存空?它本w的D是存在的.
所以free之后Q有一个好的习惯就是将str=NULL.
此时str指向I间的内存已被回?如果输出语句之前q存在分配空间的操作的话,q段存储I间是可能被重新分配l其他变量的,
管q段E序实是存在大大的问题Q上面各位已l说得很清楚了)Q但是通常会打印出world来?br>q是因ؓQ进E中的内存管理一般不是由操作pȝ完成的,而是由库函数自己完成的?br>?
你malloc一块内存的时候,理库向操作pȝ甌一块空_可能会比你申L大一些)Q然后在q块I间中记录一些管理信息(一般是在你甌的内存前?
一点)Qƈ可用内存的地址q回。但是释攑ֆ存的时候,理库通常都不会将内存q给操作pȝQ因此你是可以l访问这块地址的,只不q。。。。。。。。楼
上都说过了,最好别q么qӀ?br>
char a[10],strlen(a)Z么等?5Q运行的l果
#include "stdio.h"
#include "string.h"
void main()
{
char aa[10];
printf("%d",strlen(aa));
}
sizeof()和初不初始化Q没有关p;
strlen()和初始化有关?br>
char (*str)[20];/*str是一个数l指针,x向数l的指针Q?/
char *str[20];/*str是一个指针数l,其元素ؓ指针型数据.*/
long a=0x801010;
a+5=?
0x801010用二q制表示为:“1000 0000 0001 0000 0001 0000”Q十q制的gؓ8392720Q再加上5是8392725|?br>
1)l定l构struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};问sizeof(A) = ?
l定l构struct A
{
char t:4; 4?br>char k:4; 4?br>unsigned short i:8; 8?
unsigned long m; // 偏移2字节保证4字节寚w
}; // ?字节
2)下面的函数实现在一个数上加一个数Q有什么错误?h正?br>int add_n ( int n )
{
static int i = 100;
i += n;
return i;
}
当你W二ơ调用时得不到正的l果Q难道你写个函数是Z调用一ơ?问题出?static上?
// 帮忙分析一?br>#include<iostream.h>
#include <string.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef struct AA
{
int b1:5;
int b2:2;
}AA;
void main()
{
AA aa;
char cc[100];
strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz");
memcpy(&aa,cc,sizeof(AA));
cout << aa.b1 <<endl;
cout << aa.b2 <<endl;
}
{案?-16和1
首先sizeof(AA)的大ؓ4,b1和b2分别?bit?bit.
l过strcpy和memcpy?aa?个字节所存放的值是:
0,1,2,3的ASC码,?0110000,00110001,00110010,00110011
所以,最后一步:昄的是q4个字节的前5位,和之后的Q位
分别为:10000,?1
因ؓint是有正负之分 所以:{案?16和1
求函数返回|输入x=9999;
int func Q?x Q?br>{
int countx = 0;
while ( x )
{
countx ++;
x = x&(x-1);
}
return countx;
}
l果呢?
知道了这是统?999的二q制数g有多个1的函敎ͼ且有
9999Q?×1024Q?12Q?56Q?5
9×1024中含?的个Cؓ2Q?br>512中含?的个Cؓ1Q?br>256中含?的个Cؓ1Q?br>15中含?的个Cؓ4Q?br>故共?的个Cؓ8Q结果ؓ8?br>1000 - 1 = 0111Q正好是原数取反。这是原理?br>用这U方法来?的个数是很效率很高的?br>不必M个一个地UM。@环次数最?br>
int a,b,c 请写函数实现C=a+b ,不可以改变数据类?如将c改ؓlong int,关键是如何处理溢出问?br>bool add (int a, int b,int *c)
{
*c=a+b;
return (a>0 && b>0 &&(*c<a || *c<b) || (a<0 && b<0 &&(*c>a || *c>b)));
}
分析Q?br>struct bit
{ int a:3;
int b:2;
int c:3;
};
int main()
{
bit s;
char *c=(char*)&s;
cout<<sizeof(bit)<<endl;
*c=0x99;
cout << s.a <<endl <<s.b<<endl<<s.c<<endl;
int a=-1;
printf("%x",a);
return 0;
}
输出Z么是
4
1
-1
-4
ffffffff
因ؓ0x99在内存中表示?100 11 001 , a = 001, b = 11, c = 100
当c为有W合数时, c = 100, 最?Cc敎ͼ负数在计机用补码表C,所以c = -4;同理
b = -1;
当c为有W合数时, c = 100,?c = 4,同理 b = 3
位域 Q?
?
些信息在存储Ӟq不需要占用一个完整的字节Q?而只需占几个或一个二q制位。例如在存放一个开关量Ӟ只有0? 两种状态,
用一位二q位卛_。ؓ了节省存储空_q处理便,Q语a又提供了一U数据结构,UCؓ“位域”?#8220;位段”。所?#8220;位域”是把一个字节中的二q位划分为几
个不同的区域Q?q说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作?
q样可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其Ş式ؓQ?
struct 位域l构?
{ 位域列表 };
其中位域列表的Ş式ؓQ?cd说明W?位域名:位域长度
例如Q?
struct bs
{
int a:8;
int b:2;
int c:6;
};
位域变量的说明与l构变量说明的方式相同?可采用先定义后说明,同时定义说明或者直接说明这三种方式。例如:
struct bs
{
int a:8;
int b:2;
int c:6;
}data;
说明data为bs变量Q共占两个字节。其中位域a?位,位域b?位,位域c?位。对于位域的定义有以下几点说明Q?
1. 一个位域必d储在同一个字节中Q不能跨两个字节。如一个字节所剩空间不够存攑֏一位域Ӟ应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如:
struct bs
{
unsigned a:4
unsigned :0 /*I域*/
unsigned b:4 /*从下一单元开始存?/
unsigned c:4
}
在这个位域定义中Qa占第一字节?位,?位填0表示不用,b从第二字节开始,占用4位,c占用4位?
2. ׃位域不允许跨两个字节Q因此位域的长度不能大于一个字节的长度Q也是说不能超q?位二q位?
3. 位域可以无位域名Q这时它只用来作填充或调整位|。无名的位域是不能用的。例如:
struct k
{
int a:1
int :2 /*?位不能?/
int b:3
int c:2
};
从以上分析可以看出,位域在本质上是一U结构类型, 不过其成员是按二q位分配的?
二、位域的使用位域的用和l构成员的用相同,其一般Ş式ؓQ?位域变量?#8226;位域?位域允许用各U格式输出?
main(){
struct bs
{
unsigned a:1;
unsigned b:3;
unsigned c:4;
} bit,*pbit;
bit.a=1;
bit.b=7;
bit.c=15;
pri
攚wQ?br>#include <stdio.h>
int main(void) {
int **p;
int arr[100];
p = &arr;
return 0;
}
解答Q?br>搞错?是指针类型不?
int **p; //二指针
&arr; //得到的是指向W一lؓ100的数l的指针
#include <stdio.h>
int main(void) {
int **p, *q;
int arr[100];
q = arr;
p = &q;
return 0;
}
下面q个E序执行后会有什么错误或者效?
#define MAX 255
int main()
{
unsigned char A[MAX],i;//i被定义ؓunsigned char
for (i=0;i<=MAX;i++)
A[i]=i;
}
解答Q死循环加数l越界访问(C/C++不进行数l越界检查)
MAX=255
数组A的下标范围ؓ:0..MAX-1,q是其一..
其二.当i循环?55?循环内执?
A[255]=255;
q句本n没有问题..但是q回for (i=0;i<=MAX;i++)语句?
׃unsigned char的取D围在(0..255),i++以后i又ؓ0?.无限循环下去.
struct name1{
char str;
short x;
int num;
}
struct name2{
char str;
int num;
short x;
}
sizeof(struct name1)=8,sizeof(struct name2)=12
在第二个l构中,Z证num按四个字节对齐,char后必ȝ?字节的空_同时Z证整个结构的自然寚wQ这里是4字节寚wQ,在x后还要补?个字节,q样是12字节?br>
intelQ?br>A.c 和B.c两个c文g中用了两个相同名字的static变量,~译的时候会不会有问?q两个static变量会保存到哪里Q栈q是堆或者其他的Q?
static的全局变量Q表明这个变量仅在本模块中有意义Q不会媄响其他模块?br>他们都放在数据区Q但是编译器对他们的命名是不同的?br>如果要变量在其他模块也有意义的话,需要用extern关键字?br>
struct s1
{
int i: 8;
int j: 4;
int a: 3;
double b;
};
struct s2
{
int i: 8;
int j: 4;
double b;
int a:3;
};
printf("sizeof(s1)= %d\n", sizeof(s1));
printf("sizeof(s2)= %d\n", sizeof(s2));
result: 16, 24
W一个struct s1
{
int i: 8;
int j: 4;
int a: 3;
double b;
};
?
Z是这LQ首先是i在相?的位|,?位一个字节,然后Qj在相对一个字节的位置Q由于一个位|的字节数是4位的倍数Q因此不用对齐,放在那?
了,然后是aQ要?位的倍数关系的位|上Q因此要UM位,?5位的位置上放下,目前d?8位,折算q来?字节2位的样子Q由于double?
字节的,因此要在相对0要是8个字节的位置上放下,因此?8位开始到8个字节之间的位置被忽略,直接攑֜8字节的位|了Q因此,d?6字节?br>
W二个最后会对照是不是结构体内最大数据的倍数Q不是的话,会补成是最大数据的倍数