博文
sizeof详解(2007-09-09 15:48:00)
摘要:1、什么是sizeof
首先看一下sizeof在msdn上的定义:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
看到return这个字眼,是不是想到了函数?错了,sizeof不是一个函数,你见过给一个函数传参数,而不加括号的吗?sizeof可以,所以sizeof不是函数。网上有人说sizeof是一元操作符,但是我并不这么认为,因为sizeof更像一个特殊的宏,它是在编译阶段求值的。举个例子:
cout<<sizeof(int)<<endl; // 32位机上int长度为4
cout<<sizeof(1==2)<<endl; // == 操作符返回bool类型,相当于 cout<<sizeof(bool)<<endl;//输出为1
在编译阶段已经被翻译为:
cout<<4<<endl;
cout<<1<<endl;
这里有个陷阱,看下面的程序:
int a = 0;
cout<<sizeof(a=3)<<endl;
cout<<a<<endl;
输出为什么是4,0而不是期望中的4,3???就在于sizeof在编译阶段处理的特性。由于sizeof不能被编译成机器码,所以sizeof作用范围内,也就是()里面的内容也不能被编译,而是被替换成类型。=操作符返回左操作数的类型,所以a=3相当于int,而代码也被替换为:
&nbs......
华为面试题(2007-09-09 15:01:00)
摘要:、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。要用全局变量,需要使用"::"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2、如何引用一个已经定义过的全局变量?
答:extern
可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错
4、语句for( ;1 ;)有什么问题?它是什么意思?
答:和while(1)相同。
5、do……while和while……do有什么区别?
答:前一个循环一遍再判断,后一个判断以后再循环
6、请写出下列代码的输出内容
#include<stdio.h>
main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:%d,%d,%d",b,c,d);
return 0;
}
答:10,12,120
7、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件......
微软亚洲技术中心面试题(2007-09-09 14:57:00)
摘要:.进程和线程的差别。
线程是指进程内的一个执行单元,也是进程内的可调度实体.
与进程的区别:
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
2.测试方法
人工测试:个人复查、抽查和会审
机器测试:黑盒测试和白盒测试
2.Heap与stack的差别。
Heap是堆,stack是栈。
Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。
Stack空间有限,Heap是很大的自由存储区
C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。
程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行。
3.Windows下的内存是如何管理的?
4.介绍.Net和.Net的安全性。
5.客户端如何访问.Net组件实现Web Service?
6.C/C++编译器中虚表是如何完成的?
7.谈谈COM的线程模型。然后讨论进程内/外组件的差别。
8.谈谈IA32下的分页机制
小页(4K)两级分页模式,大页(4M)一级
9.给两个变量,如何找出一个带环单链表中是什么地方出现环的?
一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方
10.在IA32中一共有多少种办法从用户态跳到内核态?
通过调用门,从ring3到ring0,中断从ring3到ring0,进入vm86等等
11.如果只想让程序有一个实例运行,不能运行两个。像winamp一样,只能开一个窗口,怎样实现?
用内存映射或全局原子(互斥变量)、查找窗口句柄..
FindWindow,互斥,写标志到文件或注册表,共享内存。.
12.如何截取键盘的响应,让所有的‘a’变成‘b’?
......
c、c++面试题剖析(2007-09-09 14:55:00)
摘要:本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。
分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增强自身的内功。
2.找错题
试题1:
void test1()
{
char string[10];
char* str1 = "0123456789";
strcpy( string, str1 );
}
试题2:
void test2()
{
char string[10], str1[10];
int i;
for(i=0; i<10; i++)
{
str1[i] = 'a';
}
strcpy( string, str1 );
}
试题3:
void test3(char* str1)
{
char string[10];
if( strlen( str1 ) <= 10 )
{
strcpy( string, str1 );
}
}
解答:
试题1字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界;
对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到strin......
一道关于堆栈的难题(2007-09-08 23:14:00)
摘要:题目:
在不传递参数的情况下对数组array进行排序,排序函数为void sort();
提示代码如下:
#include <stdio.h>
void sort();
int main()
{
int m, array[]={1,25,36,82,14,26};
sort();
}
void sort()
{
...........
}
解题后程序:
#include <stdio.h>
void sort();
int main()
{
int m, array[]={1,25,36,82,14,26};
sort();
printf("\n\n\n\n");
for(m=0;m<6;m++)
printf("%d ",array[m]);
}
void sort()
{
int i=0,contorl=1,max=0,*p;
p=&max;
while(contorl)
{
&nb......
看看什么叫爱情(2007-09-06 14:35:00)
摘要:
老公啊,我们什么时候能结婚啊?
“老公啊,我们什么时候能结婚啊?”女人一脸好奇的问,从声音分辨,她是很轻快的询问!
他们在一起时间不久,两年而已,相处两年的情侣到处都是,随便就能抓出一大把,而现在的人,
能有几个在交往的时候考虑结婚的?
“现在工作上也没什么突破,过两年吧!”男人轻轻柔柔道!
“哦!”没有失落亦没有兴奋,似乎预料中!
“老公啊,那假如有孩子了怎么办?”
“你有了?”男人严肃的握住女人的手,眼神犀利的盯住她!
“你抓痛我了啦!”女人喊了出来,“我是问问而已,有了我会告诉你的!”
“老婆,你记得,以我们现在并不适合要孩子,经济上也许可以不用顾忌但是心理上还无法接受,
养育一个孩子不是养育一只小宠物那么简单;如果有了要告诉我,我会陪你去医院的,明白吗?”
听了女人的话,男人放下心来,也柔下声音来对女人说着自己的观点!
“你放心好了啦,我不会那么不注意的,即便是有了也不会瞒你的,嘿嘿!”女人清爽的声音再度响起!
但在心底,女人不知道是否该赞同男人的话,彼此工作其实都不错也算稳定;已经多次思考过,
男人只是交往初期提到过结婚,而当彼此交往变得稳定后就没有涉及过婚姻;女人虽然大大咧咧但不是真的傻!
其实真不知道他们之间的问题到底出在哪?是不爱吗?虽然感觉不到爱却也没感觉到哪不爱,也许是时间让彼此都沉静了!
现在他们住的房子,一半是女人出钱按揭的;她习惯平衡!平日逛街,他也从来没有陪过她,她从来不觉得有什么不舒服,
毕竟习惯自娱是最容易快乐的方式,这时候却想到这个动作是否也能衡量他的感情。
“老公啊,今天你陪我逛街好不好?你还从来没陪我上过街呢!”女人撒娇的说。
“忙呢!乖,怎么今天想到要我陪了?”男人漫不经心的问!
“那你要不要嘛?”
“自己去吧,要买什么自己去提款就是!”男人的眼光始终专注在文件上!
“老公,我突然想嫁给你了,怎么办?”清纯美丽的小脸上闪亮的大眼无辜的望着男人;这句话把男人的注意力拉回到她身上。
男人望着眼前这个没被现实的残忍划下太多痕迹的女子,隐隐的不耐与无力!
“那张纸对你来说是什么意义?”男人放下手上的工作打算和女人好好的谈一次!
“不知道!想和你结婚跟那张纸有牵连吗?”
“你想结婚不......
stl排序算法介绍(2007-08-25 21:33:00)
摘要:
对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算法,而且会一次又一次陷入一些由于自己疏忽而产生的bug中。这时,你想找一种工具,已经帮你实现这些功能,你想怎么用就怎么用,同时不影响性能。你需要的就是STL, 标准模板库!
西方有句谚语:不要重复发明轮子!
STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已不用拘泥于算法本身,从而站在巨人的肩膀上去考虑更高级的应用。
排序是最广泛的算法之一,本文详细介绍了STL中不同排序算法的用法和区别。
1 STL提供的Sort 算法
C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点。STL 排序算法同样需要保持高效。因此,对于不同的需求,STL提供的不同的函数,不同的函数,实现的算法又不尽相同。
1.1 所有sort算法介绍 所有的sort算法的参数都需要输入一个范围,[begin, end)。这里使用的迭代器(iterator)都需是随机迭代器(RadomAccessIterator), 也就是说可以随机访问的迭代器,如:it+n什么的。(partition 和stable_partition 除外)
如果你需要自己定义比较函数,你可以把你定义好的仿函数(functor)作为参数传入。每种算法都支持传入比较函数。以下是所有STL sort算法函数的名字列表:
函数名
功能描述
sort
对给定区间所有元素进行排序
stable_sort
对给定区间所有元素进行稳定排序
partial_sort
对给定区间所有元素部分排序
partial_sort_copy
对给定区间复制并排序
nth_element
找出给定区间的某个位置对应的元素
is_sorte......
kmp算法(2007-08-25 09:17:00)
摘要: 设有主串s和子串t,子串t定位是指在主串s中找到一个与子串t相等的子串。通常把主串s称为目标串,把子串t称为模式串,因此定位也称作模式匹配。模式匹配成功是指在目标串s中找到一个模式串t。
传统的字符串模式匹配算法(也就是BF算法)就是对于主串和模式串双双自左向右,一个一个字符比较,如果不匹配,主串和模式串的位置指针都要回溯。这样的算法时间复杂度为O(n*m),其中n和m分别为串s和串t的长度。
KMP 算法是由Knuth,Morris和Pratt等人共同提出的,所以成为Knuth-Morris-Pratt算法,简称KMP算法。KMP算法是字符串模式匹配中的经典算法。和BF算法相比,KMP算法的不同点是匹配过程中,主串的位置指针不会回溯,这样的结果使得算法时间复杂度只为O(n+m)。下面说说KMP算法的原理。
假设我们有个模式串为“abdabcde”存于数组t,我们要求的就是模式串的next值,见下表所示:
i
0
1
2
3
4
5
6
7
t[i]
a
b
d
a
b
c
d
e
next[i]
-1
0
0
0
1
2
0
0
求模式t的next[i](称为失效函数)的公式如下:
next[i] =
( 上面的公式中非t字母和数字组成的为数组下标)
应该如何理解next数组呢?在匹配过程中,如果出现不匹配的情况(当前模式串不匹配字符假定为t[i]),它所对应的next[i]的数值为接下来要匹配的模式串的字符的索引;也就是说,出现不匹配的情况时,模式串的索引指针要回溯到中next[i]所对应的位置,而主串的索引指针保持不变。
&n......
听力训练的方法(2007-08-24 10:24:00)
摘要:一.听说训练中应注意几个问题
一般英语学习者,在全面提高英语的前提下,要提高听、说能力,应首先注意以下三点:
1.注意区分和模仿正确的语音、语调 在英语里有不少读音相近,但意思却截然不同的词汇,象cure[kjue](医愈)和 kill[kill](杀死),menu(菜单)和manure(肥料)等。设想如果有一个医生想说:"I'll cure you."(我要治好你的病。)却因发音不好,说成:"I'll kill you."(我要杀死你。)那病人会吓成什么样子。又比如,有人对你说:" I am thirty.My wife is thirty,too."而你听到的却是:" I am dirty. My wife is dirty,too."你一定会莫名其妙。实际上,所差之外就是一个音素。因此,我们从一开始就 要注意区分和模仿正确的语音,语调。在这个基础上提高听、说,才能收到良好效果。
2.创造一定的听、说环境 听、说是一种语言交流,没有一个外语环境或一定的听、说条件,只靠单枪匹马很难收效 。当然,现代科学为我们提供了录音机这一工具,我们可以把课文,对话和中外成品磁带 录制下来反复听和模仿。还可以把自己的口头作文和复述录下来,仔细审听,发现问题, 及时纠正。但是,在自 然条件下,听与说是不能分的。一个人听的过程实际是另一个人说的过程。如果有条件的 话,最好能把自学的伙伴组织起来,定期开展会话活动,或利用社会上,公园中提供的" 外语之角"等条件,既练了说,又练了听,在实际的语言环境中练习,才能取得长足的进 步。
3.要有不怕听错,说错,不断苦练的精神 练习听、说的学习者,特别是成年人,往往必听错、说错,不敢主支张口练习。然而,语 言是一种习惯,没有反复的操练和实践难以产生熟练的技巧。会话重在达意,只要达到交 流思想的目的,这种听、说实践就应该说是基本成功的。出了错,注意总结经验,自学改正就是了。
二.听力训练的四个阶段
⑴入门阶段
这个阶段适合初学者。在学完字母及一些简单句型和词汇后即可开始。一般 可以进行三各听力练习:
1)句型练习: 做这项练习时,可以把句型、词汇及语法三项结合起来。这方面有不少 国内外出版的句型练习教科书及录音带,如:《英语九百句》(English 900)和《情景对 话》(Situational Dial......
中国足球想要说爱你不容易啊(2007-08-13 00:38:00)
摘要:我是足球爱好者,从小踢到大,曾经梦想过当一名足球运动员,但由于各方面原因我的梦想夭折了,但我从来没有减少过对足球的热爱,在中学时,在体校上的,所以我看球,踢球,和同学谈球,都入了迷。现在到了大学,我依然爱它。但是一直让我失望的时中国足球,过去那些就不说了,但看最近吧,国足亚洲杯小组不出现,无论时队员,教练,还时足协,我看都时垃圾。再看中超吧,我时山东人当然时看鲁能了,我一直都很喜欢鲁能,但从第二阶段开始鲁能就和梦游一样踢球,我从鲁能看到国足的样子,再看看其他球队都时这样的,要这样下去,中国足球永远落后。哎呀,中国足球想说爱你不容易啊,以后改欧洲五大联赛(那才叫足球)......