海尔空调这样调制冷调到冷风,A/C关闭也出凉风,只是没有开着凉。A/C关着怎么还出凉风?压缩机不是应该关着?

3.4K152 条评论分享收藏感谢收起weixin.qq.com/r/lDuCmqPEFv5pref5926G (二维码自动识别)赞同 1.3K150 条评论分享收藏感谢收起╱/.不要让任何事情成为你不去学习的理由oоΟ优秀只是一种习惯
c/c++笔试题
微软亚洲技术中心的面试题!!!
1.进程和线程的差别。
线程是指进程内的一个执行单元,也是进程内的可调度实体.
与进程的区别:
(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’?
键盘钩子SetWindowsHookEx
13.Apartment在COM中有什么用?为什么要引入?
14.存储过程是什么?有什么用?有什么优点?
&&&&存储过程(Stored Procedure)是一组为了完成特定功能的SQL&语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程用于实现频繁使用的查询、业务规则、被其他过程使用的公共例行程序
存储过程在创建时即在服务器上进行编译,所以执行起来比单个&SQL&语句快
15.Template有什么特点?什么时候用?
16.谈谈Windows DNA结构的特点和优点。
17.网络编程中设计并发服务器,使用多进程与多线程&,请问有什么区别?
1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
区别:两者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
MSRA Interview Written Exam(December 2003,Time:2.5 Hours)
1写出下列算法的时间复杂度。
(1)冒泡排序;&
(2)选择排序;&
(3)插入排序;&
(4)快速排序;&
(5)堆排序;&
(6)归并排序;
2写出下列程序在X86上的运行结果。
struct mybitfields&
unsigned short a : 4;&
unsigned short b : 5;&
unsigned short c : 7;&
void main(void)&&
test.a=2;&
test.b=3;&
i=*((short *)&test);&
printf(&%d/n&,i);&
3写出下列程序的运行结果。
unsigned int i=3;&
cout&&i * -1;
4写出下列程序所有可能的运行结果。
void F1()&
void F2()&
c=a+1;&
//Start F1,F2 in&parallel&
F1(); F2();&
printf(&a=%d/n&,a);&
5考察了一个CharPrev()函数的作用。
6对&16 Bits colors的处理,要求:
(1)Byte转换为RGB时,保留高5、6bits;&
(2)RGB转换为Byte时,第2、3位置零。
7一个链表的操作,注意代码的健壮和安全性。要求:
(1)增加一个元素;&
(2)获得头元素;&
(3)弹出头元素(获得值并删除)。
8一个给定的数值由左边开始升位到右边第N位,如&0010&&1 == 0100&或者&
&&4 == &请用C或者C++或者其他X86上能运行的程序实现。
附加题(只有在完成以上题目后,才获准回答)
1。In C++, what does &explicit& mean? what does &protected& mean?
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,在某些情况下,我们要求类的使用者必须显示调用类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题。
protected控制的是一个函数对一个类的成员(包括成员变量及成员方法)的访问权限。protected成员只有该类的成员函数及其派生类的成员函数可以访问
1.&&在C++中有没有纯虚构造函数?
构造函数不能是虚的。只能有虚的析构函数
2.&&在c++的一个类中声明一个static成员变量有没有用?
在C++类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,也就是说不管创建多少对象,static修饰的变量只占有一块内存。其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员(变量或函数)。
static是加了访问控制的全局变量,不被继承。&&
3。在C++的一个类中声明一个静态成员函数有没有用?&(同上?)
4。如何实现一个非阻塞的socket?
5。setsockopt, ioctl都可以对socket的属性进行设置,他们有什么不同?&(linux)
6。解释一下进程和线程的区别?&(重复,参见微软亚洲技术中心笔试)
7。解释一下多播(组播)和广播的含义?
组播:主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。
广播:主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要).
8。多播采用的协议是什么?
9。在c++中纯虚析构函数的作用是什么?请举例说明。
10。编程,请实现一个c语言中类似atoi的函数功能(输入可能包含非数字和空格)
一、选择题:15分&共10题&
1.&&&&在排序方法中,关键码比较次数与记录地初始排列无关的是&&& .&
A. Shell排序&&&&& B.&归并排序&&&&&& C.&直接插入排序&&&& D.&选择排序
2.&&&&以下多线程对int型变量x的操作,哪几个需要进行同步:&
A. x=y;&&&&&&&& B. x++;&&&&&&&& C. ++x;&&&&&&&&&&& D. x=1;
3.&&&&代码&
void func() {&
&&&&&&& … }&中,变量val的内存地址位于:&
A.&已初始化数据段&&& B.未初始化数据段&&&&& C.堆&&&&&&&&&&&&& D.栈
4.&&&&同一进程下的线程可以共享以下&
A. stack&&&&&&&&&&&&B. data section&&&C. register set&&&&&&& D. thread ID
5.&&& TCP和IP分别对应了&OSI中的哪几层?&
A.& Application layer&
B.& Data link layer&
C.& Presentation layer&
D.& Physical layer&
E.& Transport layer&
F.& Session layer&
G.& Network layer
6.&&& short a[100],sizeof(a)返回?&
A 2&&&& B 4&&&&&& C 100&&&&&& D 200&&&&&&& E 400
7.&&&&以下哪种不是基于组件的开发技术_____。&
A XPCOM&&&&&&&&B XP&&&&&&&&&& C COM&&&&&&&&&&&&&&& D CORBA
8.&&&&以下代码打印的结果是(假设运行在i386系列计算机上):&
&&& struct st_t&
&&&&&&& int&&&&
&&&&&&& short*&
&&&&&&& char&& errstr[32];&
&&& st_t& st[16];&
&&& char* p = (char*)(st[2].errstr + 32);&
&&& printf(&%d&, (p - (char*)(st)));
A 32&&&&&&&&& B&114&&&&&&&C&120&&&&&&&& D 1112
9.&&& STL中的哪种结构是连续形式的存储&
A& map&&&&& B& set&&&&&&&& C& list&&&&& D& vector
10.&&&&一个栈的入栈序列是A,B,C,D,E,则栈的不可能的输出序列是(&)&
A、EDCBA;&& B、DECBA;&&&&C、DCEAB;&&& D、ABCDE
参考答案:D /ABC/ A/ BC /EG /D /B/ C/ D/ C
二、简答题:20分,共2题
1.&&&&(5分)重复多次fclose一个打开过一次的FILE *fp指针会有什么结果,并请解释。&
考察点:导致文件描述符结构中指针指向的内存被重复释放,进而导致一些不可预期的异常。
2.&&&&(15分)下面一段代码,想在调用f2(1)时打印err1,调用f2(2)时打印err4,但是代码中有一些问题,请做尽可能少的修改使之正确。&
1&&& static int f1(const char *errstr, unsigned int flag) {&
2&&&&&&& int copy, index,&
3&&&&&&& const static char **__err = {“err1”, “err2”, “err3”, “err4”};&
5&&&&&&& if(flag & 0x10000)&
6&&&&&&&&&&& copy = 1;&
7&&&&&&& index = (flag & 0x300000) && 20;&
9&&&&&&& if(copy) {&
10&&&&&&&&&&& len = flag & 0xF;&
11&&&&&&&&&&& errstr = malloc(len);&
12&&&&&&&&&&& if(errstr = NULL)&
13&&&&&&&&&&&&&&& return -1;&
14&&&&&&&&&&& strncpy(errstr, __err[index], sizeof(errstr));&
15&&&&&&& } else&
16&&&&&&&&&&& errstr =& __err +&&&&&
19&&& void f2(int c) {&
20&&&&&&& char *&
22&&&&&&& swtch(c) {&
23&&&&&&& case 1:&
24&&&&&&&&&&& if(f1(err, 0x110004) != -1)&
25&&&&&&&&&&&&&&& printf(err);&
26&&&&&&& case 2:&
27&&&&&&&&&&& if(f2(err, 0x30000D) != -1)&
28&&&&&&&&&&&&&&& printf(err);&
29&&&&&&& }&
三、编程题:30分&共1题&&&&注意:要求提供完整代码,如果可以编译运行酌情加分。
1.&&&&求符合指定规则的数。&
给定函数d(n) = n + n的各位之和,n为正整数,如&d(78)&= 78+7+8=93。&这样这个函数可以看成一个生成器,如93可以看成由78生成。&&
定义数A:数A找不到一个数B可以由d(B)=A,即A不能由其他数生成。现在要写程序,找出1至10000里的所有符合数A定义的数。&
四、设计题:35分&共1题&
注意:请尽可能详细描述你的数据结构、系统架构、设计思路等。建议多写一些伪代码或者流程说明。
1.&&&&假设一个mp3搜索引擎收录了2^24首歌曲,并记录了可收听这些歌曲的2^30条URL,但每首歌的URL不超过2^10个。系统会定期检查这些URL,如果一个URL不可用则不出现在搜索结果中。现在歌曲名和URL分别通过整型的SONG_ID和URL_ID唯一确定。对该系统有如下需求:&
1)&&&&通过SONG_ID搜索一首歌的URL_ID,给出URL_ID计数和列表&
2)&&&&给定一个SONG_ID,为其添加一个新的URL_ID&
3)&&&&添加一个新的SONG_ID&
4)&&&&给定一个URL_ID,将其置为不可用
限制条件:内存占用不超过1G,单个文件大小不超过2G,一个目录下的文件数不超过128个。
为获得最佳性能,请说明设计的数据结构、搜索算法,以及资源消耗。如果系统数据量扩大,该如何多机分布处理?
汉略曾考的测试题目
Q:When speaking of software products, how do you define the term“quality”.
问:当说到软件产品的时候,你如何定义术语“质量”
&&&&&&&Meeting customer requirements
Q:What is the role of software debelopers and quality assuranle engineers in ensuring the quality of the product? How are other functional areas important to developing a quality product?
问:在确定产品的质量方面,什么是软件开发工程师和质量保证工程师要做的?其他的功能对如何发展产品质量有什么重要?
 软件测试是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。Quality assuranle engineers: use a set of activities designed to ensure the development process to meet the requirements.
Q:What is cyclomatic complexity?
问:(这是一个复杂度模型吧)
一种代码复杂度的衡量标准,中文名称叫做圈复杂度。圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。
Q:What are black-box texing and white-box texting?
问:什么是黑盒测试和白盒测试?
(,又称为或)是把测试看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计的方法有:等价划分、边界值分析、错误推测、因果图和综合策略。黑盒测试注重于测试软件的功能性,也即黑盒测试使师派生出执行所有功能需求的输入条件。黑盒测试并不是的替代品,而是用于辅助白盒测试发现其他的错误。
(,又称,)是把测试看作一个打开的盒子。利用白盒测试法进行动态测试时,需要测试产品的内部结构和处理过程,不需测试软件产品的功能。白盒测试又称为结构测试和逻辑驱动测试。白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
Black box testing: a testing without knowledge of the internal working of the item being tested.
white box testing: use specific knowledge of programming code to examine outputs.
Q:The following function divides a by b and out put to c,returns -1 as error.
& Int divide (int a,int b,int c)
& List you test cases in a black-box testing.
问:对&Int divide (int a,int b,int c)函数写出黑盒测试用例
先等价,后边界值&
a & & & b & & & & c & & & &&预期&& & & &&结果&&&
& g & & & g &&
& 5 & & & 0 & &&
& 6 & & & 2 & &&
& 0 & & & 1 &&
& -10 & 10 &&
& -10 & & -10 &&
& 10.0 & 10.0 &
Q:Int a ctivity(int nage,bool bmale)
& {if (nage&60)
& & else if(bmale)
用cyclomatic & complexity,共有多少条路径&&&
Q:The following function tests whether the three numbers can be the lengths of the three sides of a triangle.
Bool triangle(float a,float b,float c)
List you test cases in a black-box testing.
问:也是让写黑盒测试用例,是一个三个数是否是三角形的三条边的测试
先等价,后边界值
a & & & b & & & & c & & & &&预期&& & & &&结果&&&
& g & & & j & & & & 0 &&
& -1 & & 2 & & & & & 2 &&
& 10 & & 2 & & & & 3 &&
& 2 & & & 3 & & & & 4 &&
& 2 & & & 2 & & & & 5 &&
& 6 & & & 6 & & & & 6 &
然后是英文的数据结构,c/c++,数据库,3D建模,软件工程,软件测试
题目几乎都是英文的
后面还要填表格,一张中文的,一张英文的
一般有三个步骤
首先会笔试。笔试题分为EQ题和专业题,EQ题没什么好说的,大家自由发挥就行,不过其中有一些逻辑推理题要注意。专业题目全英文,考的内容很多,数据结构,C/C++语法,COM,3D建模,软件测试基础知识,如黑盒,白盒测试等,题不难,每方面有三到五题左右。
笔试成绩达到一定分数过后才能进入第二轮人事部面试。这部分面试一般是五人一组在一房间里,面试人员会问很多问题,然后每个人做答,问题很随机,当时好像问了“最尊敬的人是谁,最难忘的事是什么,有何职业规划,如何处理与同事之间的关系矛盾等等”。
这轮过后就到技术部面试,会问一些基础知识,如数据结构常用的有哪些,如何用C/C++写出其中的一种,面象对像有哪些特性,XML是什么等等,可能他会用英语问你这些问题,各位练下听力口语哈(当时俺被问的很郁闷)
(COM),是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。
开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX, DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。
COM所含的概念并不止是在Microsoft Windows操作系统下才有效。COM并不是一个大的API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。&有的组件必须满足两个条件:第一,组件必须动态链接;第二,它们必须隐藏(或封装)其内部实现细节。动态链接对于组件而言是一个至关重要的要求,而消息隐藏则是动态链接的一个必要条件。对于COM来讲,接口是一个包含一个函数指针数组的内存结构。每一个数组元素包含的是一个由组件所实现的函数地址。
1.写出判断ABCD四个表达式的是否正确,&若正确,&写出经过表达式中&a的值(3分)
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) +=(D) (++a) += (a++);
答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) +=
改后答案依次为9,10,10,11
2.某32位系统下, C++程序,请计算sizeof&的值(5分).
char str[] = “www.ibegroup.com”
int n = 10;
sizeof (str ) =&?(1)
sizeof ( p ) =&?(2)
sizeof ( n ) =&?(3)
void Foo ( char str[100]){
sizeof( str ) =&?(4)
void *p = malloc( 100 );
sizeof ( p ) =&?(5)
答:(1)17&(2)4&(3)&4&(4)4&(5)4
3.&回答下面的问题. (4分)
(1).头文件中的&ifndef/define/endif&干什么用?预处理
答:防止头文件被重复引用
(2). #include&和&#include “filename.h”&有什么区别?
答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。
(3).在C++&程序中调用被&C&编译器编译后的函数,为什么要加&extern “C”声明?
答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern &C&修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调用C&函数。C++提供了一个C&连接交换指定符号extern“C”来解决这个问题。
(4). switch()中不允许的数据类型是?
4.&回答下面的问题(6分)
(1).Void GetMemory(char **p, int num){
*p = (char *)malloc(num);
void Test(void){
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, &hello&);
printf(str);
请问运行Test&函数会有什么样的结果?
答:输出“hello”
(2). void Test(void){
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL){
strcpy(str, “world”);
printf(str);
请问运行Test&函数会有什么样的结果?
答:输出“world”
(3). char *GetMemory(void){
char p[] = &hello world&;
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
请问运行Test&函数会有什么样的结果?
答:无效的指针,输出不确定
5.&编写strcat函数(6分)
已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);
其中strDest&是目的字符串,strSrc&是源字符串。
(1)不调用C++/C&的字符串库函数,请编写函数&strcat
char * __cdecl strcat (char * dst, const char * src)
char * cp =
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
(2)strcat能把strSrc&的内容连接到strDest,为什么还要char *&类型的返回值?
答:方便赋值给其他变量
6.MFC中CString是类型安全类么?
答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换
7.C++中为什么用模板类。
答:(1)可用来创建动态增长和减小的数据结构
(2)它是类型无关的,因此具有很高的可复用性。
(3)它在编译时而不是运行时检查数据类型,保证了类型安全
(4)它是平台无关的,可移植性
(5)可用于基本数据类型
8.CSingleLock是干什么的。
答:同步多个线程对一个数据类的同时访问
9.NEWTEXTMETRIC&是什么。
答:物理字体结构,用来设置字体的高宽大小
10.程序什么时候应该使用线程,什么时候单线程效率高。
答:1.耗时的操作使用线程,提高应用程序响应
2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
3.多CPU系统中,使用线程提高CPU利用率
4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
其他情况都使用单线程。
11.Windows是内核级线程么。
答:见下一题
12.Linux有内核级线程么。
答:线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两种类型:“用户级线程”和“内核级线程”。&用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。这种线程甚至在象&DOS&这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似&Windows 3.x&的协作式多任务。另外一种则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因&I/O&而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。&Windows
NT和OS/2支持内核线程。Linux&支持内核级的多线程
13.C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?
答:栈:&存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理
堆:&程序运行时动态申请,new&和 malloc申请的内存就在堆上
14.使用线程是如何防止出现大的波峰。
答:意思是如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提高调度效率和限制资源使用的好处,线程池中的线程达到最大数时,其他线程就会排队等候。
15函数模板与类模板有什么区别?
答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。
16一般数据库若出现日志满了,会出现什么情况,是否还能使用?
答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。
17 SQL Server是否支持行级锁,有什么好处?
答:支持,设立封锁机制主要是为了对并发操作进行控制,对干扰进行封锁,保证数据的一致性和准确性,行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的并发性。
18如果数据库满了会出现什么情况,是否还能使用?
19&关于内存对齐的问题以及sizeof()的输出
答:编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。
20 int i=10, j=10, k=3; k*=i+j; k最后的值是?
答:60,此题考察优先级,实际写成:&k*=(i+j);,赋值运算符优先级最低
21.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现?
答:将操作多个表的操作放入到事务中进行处理
22.TCP/IP&建立连接的过程?(3-way shake)
答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
23.ICMP是什么协议,处于哪一层?
答:Internet控制报文协议,处于网络层(IP层)
24.触发器怎么工作的?
答:触发器主要是通过事件进行触发而被执行的,当对某一表进行诸如UPDATE、&INSERT、&DELETE&这些操作时,数据库就会自动执行触发器所定义的SQL&语句,从而确保对数据的处理必须符合由这些SQL&语句所定义的规则。
25.winsock建立连接的主要实现步骤?
答:服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。
客户端:socket()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。
服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesocket()关闭套接字。
26.动态连接库的两种方式?
答:调用一个DLL中的函数有两种方法:
1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。
2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了
27.IP组播有那些好处?
答:Internet上产生的许多新的应用,特别是高带宽的多媒体应用,带来了带宽的急剧消耗和网络拥挤问题。组播是一种允许一个或多个发送者(组播源)发送单一的数据包到多个接收者(一次的,同时的)的网络技术。组播可以大大的节省网络带宽,因为无论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。所以说组播技术的核心就是针对如何节约网络资源的前提下保证服务质量。
使用基于公共语言运行库的语言编译器开发的代码称为托管代码;托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,就称作重载。
16道C语言面试题例子
预处理器(Preprocessor)
1.&用预处理指令#define&声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL&
我在这想看到几件事情:&
1). #define&语法的基本知识(例如:不能以分号结束,括号的使用,等等)&
2).&懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。&
3).&意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。&
4).&如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。
2.&写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) &= (B)?(A) : (B))&
这个测试是为下面的目的而设的:&
1).&标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。&
2).&三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。&
3).&懂得在宏中小心地把参数用括号括起来&
4).&我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?&
least = MIN(*p++, b);
3.&预处理器标识#error的目的是什么?
如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。#error&停止编译并显示错误信息
死循环(Infinite loops)
4.&嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
这个问题用几个解决方案。我首选的方案是:&
一些程序员更喜欢如下方案:&
这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是:“我被教着这样做,但从没有想到过为什么。”这会给我留下一个坏印象。&
第三个方案是用&goto&
应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。
数据声明(Data declarations)&
5.&用变量a给出下面的定义&
a)&一个整型数(An integer)&
b)&一个指向整型数的指针(A pointer to an integer)&
c)&一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)&
d)&一个有10个整型数的数组(An array of 10 integers)&
e)&一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)&
f)&一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)&
g)&一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)&
h)&一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(&An array of ten pointers to functions that take an integer argument and return an integer&)
a) // An integer&
b) int *a; // A pointer to an integer&
c) int **a; // A pointer to a pointer to an integer&
d) int a[10]; // An array of 10 integers&
e) int *a[10]; // An array of 10 pointers to integers&
f) int (*a)[10]; // A pointer to an array of 10 integers&
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer&
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
人们经常声称这里有几个问题是那种要翻一下书才能回答的问题,我同意这种说法。当我写这篇文章时,为了确定语法的正确性,我的确查了一下书。&但是当我被面试的时候,我期望被问到这个问题(或者相近的问题)。因为在被面试的这段时间里,我确定我知道这个问题的答案。应试者如果不知道&所有的答案(或至少大部分答案),那么也就没有为这次面试做准备,如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢?
6.&关键字static的作用是什么?
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:&
1).&在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。&
2).&在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。&
3).&在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。&
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。
7.关键字const是什么含意?&
我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?
&&&//a是一个常整型数
&&&//a是一个常整型数
const int *a; //一个指向常整型数的指针,整型数是不可修改的,但指针可以
int * //一个指向整型数的常指针,指针指向的整型数是可以修改的,指针不可修改
int const *//&一个指向常整型数的常指针,整型数不可修改,指针也是不可修改的
(主要看const靠近*还是int,不可修改的就是它)
前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:&
1).&关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)&
2).&通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。&
3).&合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
8.&关键字volatile有什么含意&并给出三个不同的例子。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:&
1).&并行设备的硬件寄存器(如:状态寄存器)&
2).&一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)&
3).&多线程应用中被几个任务共享的变量&
回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。&
假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。&
1).&一个参数既可以是const还可以是volatile吗?解释为什么。&
2).&一个指针可以是volatile&吗?解释为什么。&
3).&下面的函数有什么错误:&
int square(volatile int *ptr)&
return *ptr * *&
下面是答案:&
1).&是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。&
2).&是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。&
3).&这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:&
int square(volatile int *ptr)&
return a *&
由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:&
long square(volatile int *ptr)&
return a *&
位操作(Bit manipulation)
9.&嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a&的bit 3。在以上两个操作中,要保持其它位不变。
对这个问题有三种基本的反应&
1).&不知道如何下手。该被面者从没做过任何嵌入式系统的工作。&
2).&用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可重用的。我最近不幸看到Infineon为其较复杂的通信芯片写的驱动程序,它用到了bit fields因此完全对我无用,因为我的编译器用其它的方式来实现bit fields的。从道德讲:永远不要让一个非嵌入式的家伙粘实际硬件的边。&
3).&用&#defines&和&bit masks&操作。这是一个有极高可移植性的方法,是应该被用到的方法。最佳的解决方案如下:&
#define BIT3 (0x1&&3)&
void set_bit3(void)&
a |= BIT3;&
void clear_bit3(void)&
a &= ~BIT3;&
一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数,这也是可以接受的。我希望看到几个要点:说明常数、|=和&=~操作。
访问固定的内存位置(Accessing fixed memory locations)&
10.&嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。
这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下:&
ptr = (int *)0x67a9;&
*ptr = 0xaa55;
一个较晦涩的方法是:&
*(int * const)(0x67a9) = 0xaa55;
即使你的品味更接近第二种方案,但我建议你在面试时使用第一种方案。
中断(Interrupts)&
11.&中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。
__interrupt double compute_area (double radius)&
double area = PI * radius *&
printf(& Area = %f&, area);&
这个函数有太多的错误了,以至让人不知从何说起了:&
1). ISR&不能返回一个值。如果你不懂这个,那么你不会被雇用的。&
2). ISR&不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。&
3).&在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。&
4).&与第三点一脉相承,printf()经常有重入和性能上的问题。如果你丢掉了第三和第四点,我不会太为难你的。不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了。
代码例子(Code examples)
12 .&下面的代码输出是什么,为什么?
void foo(void)&
unsigned int a = 6;&
int b = -20;&
(a+b & 6) puts(&& 6&) : puts(&&= 6&);&
这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是“&6”。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。&因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。
13.&评价下面的代码片断:
unsigned int zero = 0;&
unsigned int compzero = 0xFFFF;&
/*1's complement of zero */
对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:
unsigned int compzero = ~0;
这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。&
到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试者不是很好,那么这个测试就在这里结束了。但如果显然应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错。提出这些问题,我希望更多看到应试者应付问题的方法,而不是答案。不管如何,你就当是这个娱乐吧…
动态内存分配(Dynamic memory allocation)
14.&尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么?
这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨论过了(主要是&P.J. Plauger,&他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!让应试者进入一种虚假的安全感觉后,我拿出这么一个小节目:下面的代码片段的输出是什么,为什么?
if ((ptr = (char *)malloc(0)) == NULL)&
puts(&Got a null pointer&);&
puts(&Got a valid pointer&);&
这是一个有趣的问题。最近在我的一个同事不经意把0值传给了函数malloc,得到了一个合法的指针之后,我才想到这个问题。这就是上面的代码,该代码的输出是“Got a valid pointer”。我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。
15. Typedef&在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:&
#define dPS struct s *&
typedef struct s * tPS;&
以上两种情况的意图都是要定义dPS&和&tPS&作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?&
这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子:&
dPS p1,p2;&
tPS p3,p4;
第一个扩展为&
struct s * p1, p2;
上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3&和p4&两个指针。
晦涩的语法
16. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?&
int a = 5, b = 7,&
c = a+++b;
这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:&
c = a++ +&
因此,&这段代码持行后a = 6, b = 7, c = 12。&
如果你知道答案,或猜出正确答案,做得好。如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大好处是:这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题
群硕笔试:
基本概念,涉及到C++、Java、软件测试、EJB、ASP和ASP.NET的知识。
今天群硕笔试,考了好多内容,其中Java占很大部分!
本试卷中最有难度的编程题:给定一个数组,这个数组中既有正数又有负数,找出这个数组中的子数组,此子数组的和最大!
#include&stdio.h&
void main()
int a[15]={2,3,-4,5,6,-5,-1,14,9,-10,1,-71,75,4,-9};
int b[15]; //计算和
int num=a[14];
int c[15]; //最大尾数标志数组
int i,j=0;
for(i=14;i&=0;i--) //从后计算和放入b中
c[i]=n;b[i]=
if(num&0){n=i-1;num=0;}
num=num+a[i-1];
printf(&/n&);
for(i=0;i&15;i++)
printf(&%d, &,b[i]);
printf(&/n&);
//找到最大字符子串
num=b[0];n=c[0];
for(i=0;i&15;i++)
if(b[i]&num){num=b[i];j=i;n=c[i];}
for(i=j;i&=n;i++)
printf(&%d, &,a[i]);
printf(&sum=%d&,num);
最不知道怎么答的题:在TCP/IP中最经常使用的编程方法?
最简单的题:final, finally, finalize的区别(因为经常考)
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为&abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally—再异常处理时提供&finally&块来执行任何清除操作。如果抛出一个异常,那么相匹配的&catch&子句就会执行,然后控制就会进入&finally&块(如果有的话)。
finalize—方法名。Java&技术允许使用&finalize()&方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在&Object&类中定义的,因此所有的类都继承了它。子类覆盖&finalize()&方法以整理系统资源或者执行其他清理工作。finalize()&方法是在垃圾收集器删除对象之前对这个对象调用的。
最容易疏忽的题:main(){C}在前面已经定义了C的类,这个地方容易迷糊的就是,没有new,照样执行构造函数,没有free,照样执行析构函数。
最迷糊的题:一个无向图是否能够存到树中?为什么?
最然我感到有差距的题:EJB中一定包括()interface,()interface,()class
不用任何变量交换a,b两个变量
用递归求最大公约数
举一个多态的例子
二叉平衡树(特性,内插入和&外&插入)
UNIX进程包括那三个部分:...(简单)
new动态分配失败会抛出什么异常,C++中提供了那两个标准函数来设定异常处理HANLDER(有点难度)
EJB包含那几种?区别(压根没听过)
asp和asp.net的区别(假期做项目的时候碰到过,嘿嘿)
JAVA中的interface&和&abstract class区别(照着c里面的感念随便写了点)
logic thinking:检测电冰箱(我用软件工程的思想随便写写)
1.内连接与外连接的区别。
3.内联的定义,什么情况下选择内联。
4.什么是多态,用一段代码说明。
5.不经过第三者变量来交换两个整型数。
6.EJB都有那些Beans.
7.什么是平衡二叉树。
8.当new出错后怎么处理。
9.asp与asp.net的最大区别。
10.如何证明一个电冰箱是否是好的
1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现&& &&
&&一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空&& &&
&&间,能否设计一个算法实现?
template & &typename & T, & int & index& &&
& struct & SumArr &&
& static & int & GetValue(T* & arr) &&
& return & arr[index] & + & SumArr&T, & index-1&::GetValue(arr); &&
& template & &typename & T& &&
& struct & SumArr&T, & 0& &&
& static & int & GetValue(T* & arr) &&
& return & arr[0]; &&
& int & main() &&
& int & arry[11] & = & {1,2,3,4,5,6,7,8,9,10,2}; &&
& printf(&%d&, & SumArr&int, & 10&::GetValue(arry) & - & 11 & * & 5); &&
1_1&&什么叫做多态性?&在C++中是如何实现多态的?
解:多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其中主要的方式。
1_2&&什么叫做抽象类?&抽象类有何作用?&抽象类的派生类是否一定要给出纯虚函数的实现?
解:带有纯虚函数的类是抽象类。抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。抽象类声明了一组派生类共同操作接口的通用语义,而接口的完整实现,即纯虚函数的函数体,要由派生类自己给出。但抽象类的派生类并非一定要给出纯虚函数的实现,如果派生类没有给出纯虚函数的实现,
这个派生类仍然是一个抽象类。
autodesk笔试
晚上参加了autodesk笔试,留下了一丝的残念,mfc好久没有用几乎忘光了,com学院没有开这门课,还得靠自学T_T晚上听了报告,发现autodesk公司真的很不错.在cadc部门能接触到autocad最核心的代码,这是在另外很多外企所碰不到的.autolove部分那张脸上充满笑容忘着远方的小女孩的照片很让人感动,很钦佩autodesk公司所做的公益活动.得复习一下专业知识了,以后还将有很多的招聘会.
附笔试题目:
1.What is virtual function&?what is vtable used for?
虚函数主要用于实现多态用,基类的某个函数前加个Virtual&用来告诉编译系统,遇到这个处理过程时,要等到执行时再确定到底调用哪个类的处理过程;
每一个虚函数都会有一个入口地址,虚函数表保存所有虚函数的入口地址
2.What's the difference between &struct& and &class& in c++?
&&struct成员默认类型为public,class成员默认类型为private。即为数据的封装。
如果没有多态和虚拟继承,在C++中,struct和class的存取效率完全相同!简单的说就是,存取class的data member和非virtual function效率和struct完全相同!不管该data member是定义在基类还是派生类的。如果不是为了和C兼容,C++中就不会有struct关键字。
3.What do we need to make destructor vitual?why?
CObject的析构函数设为virtual型,则所有CObject类的派生类的析构函数都将自动变为virtual型,这保证了在任何情况下,不会出现由于析构函数未被调用而导致的内存泄露
4.What to declare member function as const?
void fun1(int a) const;const的作用是指在该函数内部不会改变此类的成员变量(除非该成员变量定义时加上violate关键字),否则修改了该成员变量就会报错.
5.What is the Message reflection in MFC?
6.How many ways to get the handle of a model dialog?what are they?
7.How to change the default window procedure after the window shows up?
8.What is the difference between STA and MTA in COM?
9.What is marshaling in COM?
10.What is dual interface in COM?
11.What is the difference between aggregated and contained object in COM?
12.Write an insert function for a sorted singly linked list please take into considerations of various conditions including error conditions?
13.智力题目.&甲乙丙丁是血缘关系,其中一个与其他三个性别不同,其中有甲的母亲,乙的哥哥,丙的父亲,丁的女儿。知道其中年龄最大的和最小的性别不同,问谁和其他人性别不同。
1. dynamic binding
2. default private
3. for safe deleting base classes
5. use some macro, create a message table
6-12. i'll keep it blank...
13.&丁最大,男的
Autodesk笔试题目
C/C++ Programming
1,列出两个情况是必须使用成员初始化列表,而不在构造函数里面赋值
2,#define DOUBLE(x) x+x
i = 5 * DOUBLE(10)
这个时候i是什么结果?
正确的DOUBLE应该怎样写?
3,static_cast和dynamic_cast有什么区别?
4,namespace解决了什么问题?
5,auto_ptr是什么东西,有什么用?
Algorithm and GP
1,&写出三个你熟悉的排序法,以时间复杂度的大小排序
2,&写出一个使用递归来反转一个单向链表的函数
3,&写一个程序测试系统是Big_Endian的还是Little_Endian的(以前万老师发帖讨论过了)
C++ Programming
1,&C++有管理多种内存,分别写出他们是什么,他们的特性和性能如何?
2,&写出一个基于char*的string类,包括构造析构函数和赋值运算符,取字串长度等基本操作
Graphic(两题都不会,全忘了)
1,&称面粉(经典题)
2,&在平面上有一系列间距为2的无限长的平行线,在上面扔单位长度的线段,和平行线相交的概率是多少?
3,&A君和B君见到B君的三个熟人X,Y,Z
A君问B君:“他们的多大”
B君说:“他们的年龄之和是我们的年龄之和,他们的年龄的乘积是2450”
A说:“我还是不知道”
B说:“他们都比我们的朋友C要小”
A说:“那我知道了”
问C的年龄是多少?
MFC(不太会做,记不清楚了)
1,&怎么为窗口自定义消息
窗口自定义消息。。需用宏定义。。声明消息为WM_USER以后的消息号。。然后用USER_COMMAND做消息映射。。。最后。。自己搞个callback。。。
2,&SendMessage和PostMessage的区别
sendmessage是消息发送给指定的callback函数后立即执行。。当前的调用挂起。。postmessage只是把消息发送到消息队列。。然后返回。。。所以在消息循环中。。用的是postmessage而不是sendmessage。。
3,&CRuntimeClass是由什么用的?他是怎样得到的?
4,&怎样通过一个句柄得到CWnd的指针
fromhandle函数可以得到指定cwnd的m_hwnd。。
&&&&早上起的早了一点,刚好看到版上置顶的帖子第一个是博朗,反正也没有别的事,抄了一份简历过去。
&&&&&笔试分为两个部分,综合素质测试以及软件知识相关。软件考试如同考高程,一共20个题目。大概有操作系统的状态转换
三态:运行态,就绪态,等待态
有限自动向量机
有限自动机(Finite Automata):有限自动机=有限控制器+字符输入带
如果有限状态机每次转换后的状态是唯一的则称之为确定有限状态机(DFA);如果转换后的后继状态不是唯一的则称之为不确定有限自动机(NFA);
链表操作(出入新元素,很简单)
数据结构中的树,
PING的协议(ICMP?)
Ping命令是在互连网络中进行故障检测的工具,通俗地说就是它向指定的机器发送一个消息,然后通知是否成功地传送了该消息. ping利用了ICMP中的请求回显和应答回显的功能. ping&程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping&使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。
ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。在Unix/Linux,序列号从0开始计数,依次递增。而Windows ping程序的ICMP序列号是没有规律。
UML知识(全军覆没,没接触过这玩意)
用对象模型、动态模型、功能模型和,共同完成对整个系统的建模. UML的定义包括UML语义和UML表示法两个部分.从应用的角度看,当采用面向对象技术设计系统时,首先是描述需求;其次根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图(包含包)、对象图、和配置图等五个图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图和合作图等四个图形,是标准建模语言UML的动态建模机制。因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。&
&UML的组成
UML模型还可作为测试阶段的依据。系统通常需要经过、、和。不同的测试小组使用不同的UML图作为测试依据:单元测试使用类图和类规格说明;集成测试使用部件图和合作图;系统测试使用用例图来验证系统的行为;验收测试由用户进行,以验证系统测试的结果是否满足在分析阶段确定的需求。&&
UML的静态建模&机制包括用例图()、类图()、对象图(&)、包(Package)、构件图()和配置图()。
在UML中,一个用例模型由若干个用例图描述,用例图主要&元素是用例和执行者。用例(use case)&从本质上讲,一个用例是用户与计算机之间的一次典型交互作用。在UML中,用例表示为一个椭圆。执行者(Actor)&执行者是指用户在系统中所扮演的角色。其图形化的表示是一个小人。
在UML中,类&和对象模型分别由类图和对象图表示. UML规定类的属性的语法为:&可见性 属性名&: 类型&=&缺省值 {约束特性}&图1&客户&类中,&客户名&属性描述为&-&客户名&:&字符串&=&缺省客户名&。
常用的可见性有Public、Private和Protected三种,在U ML中分别表示为&+&、&-&和&#&。
关联类通过一根虚线与关联连接。
聚集和组成 聚集(Aggregation)是一种特殊形式的关联。聚集表示类之间的关系是&整体与部分的关系。一辆轿车包含四个车轮、一个方向盘、一个发动机和一个底盘,这是&聚集的一个例子。在需求分析中,&包含&、&组成&、&分为……部分&等经常设计成聚集关&系。聚集可以进一步划分成共享聚集(Shared Aggregation)和组成。
已知后序,中序,求前序
堆的结构。
&&答的惨不忍睹啊,数了数,大概就10个能对的,其他是一点吃不准。
&&&考完软件,立刻考逻辑,就是一大堆的数据,40个题目,40min要做完。可怜我还没有计算器,做的我累死了。到最后还有10几个没勾,我也懒得乱勾了。交卷。
&&&&有几点点要bs一下这个公司,
Java中除了使用new,还有其他的实例化方法吗?(我说了ClassLoader和Class.forNa
me,他就继续问了些,然后我感觉没底)
2.java.util包中你最常用那些类?(我说Collection)Collection分那两类?List和Set
有什么区别?自定义对象如何保证在Set中的唯一性?(我回答equals&hashCode)
3.谈谈JDBC中的DataSource
4.JSP中如何包含其他页面?(我回答jsp:include标签和include指令)然后他问我两个之
5.servlet中有哪些接口和方法?GET和POST请求有哪些区别?
6.分布式事务处理和RMI?(这些我不是很熟,只是接触过,所以就老实回答我不知道)
7.Applet和普通Application的区别?Applet如何获取哪些安全权限?(我回答了两种方
式和应用情况)然后他就问Java的安全机制有哪些?
8.谈谈PKI和数字证书(我的项目有PKI)
9.JDOM?DOM有哪些优缺点?SAX?
10.JAVA多线程如何实现?如何获得共享对象的副本?(我回答clone和并发控制,他觉得
不是很满意,可能我回答得不到点)
11.J2EE有哪些设计模式?会话外观是什么?
12.UML里你常用哪些图?用例图是什么?如何描述用例里面的流程?(我回答了用例描述
14.数据库和J2EE服务器用过哪些?说了些软件,然后我主动说里面的机理不熟。
这个东西有些参考价值,和同学讨论一下发现还是有些错误,
1.已知strcpy&函数的原型是:
char *strcpy(char *strDest, const char *strSrc);
其中strDest&是目的字符串,strSrc&是源字符串。不调用C++/C&的字符串库函数,请编写函数&strcpy
char *strcpy(char *strDest, const char *strSrc)
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest == strSrc)
return strD
char *tempptr = strD
while( (*strDest++ = *strSrc++) != ‘’);
2.已知类String&的原型为:
class String
String(const char *str = NULL); //&普通构造函数
String(const String &other); //&拷贝构造函数
~ String(void); //&析构函数
String & operate =(const String &other); //&赋值函数
char *m_ //&用于保存字符串
请编写String&的上述4&个函数。
String::String(const char *str)
if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断
m_data = new char[1] ;
m_data[0] = '' ;
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
String::String(const String &other)
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data,other.m_data);
String & String::operator =(const String &other)
if ( this == &other)
delete []m_
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data,other.m_data);
String::~ String(void)
delete []m_
3.1&头文件中的ifndef/define/endif&干什么用?
答:防止该头文件被重复引用。
3.2#include &filename.h&&和#include “filename.h”&有什么区别?
答:对于#include &filename.h&&,编译器从标准库路径开始搜索filename.h
对于#include “filename.h”,编译器从用户的工作路径开始搜索filename.h
3.3&在C++&程序中调用被C&编译器编译后的函数,为什么要加extern “C”?
答:C++语言支持函数重载,C&语言不支持函数重载。函数被C++编译后在库中的名字与C&语言的不同。假设某个函数的原型为:&void foo(int x, int y);
该函数被C&编译器编译后在库中的名字为_foo&,&而C++&编译器则会产生像_foo_int_int&之类的名字。
C++提供了C&连接交换指定符号extern“C”来解决名字匹配问题。
3.4&一个类有基类、内部有一个其他类的成员对象,构造函数的执行顺序是怎样的。(Autodesk)
答:先执行基类的(如果基类当中有虚基类,要先执行虚基类的,其他基类则按照声明派生类时的顺序依次执行),再执行成员对象的,最后执行自己的。
3.5&请描述一个你熟悉的设计模式(Autodesk)
3.6&在UML&中,聚合(aggregation)和组合(composition)有什么区别&Autodesk)
答案:聚合关系更强,类似于pages&和book&的关系;组合关系要弱,类似于books和bookshelf&的关系。
3.7C#和C++除了语法上的差别以外,有什么不同的地方?(Autodesk,Microsoft)
答案:(C#我只是了解,不是很精通)
(1) c#有垃圾自动回收机制,程序员不用担心对象的回收。(2)c#严禁使用指针,只能处理对象。如果希望使用指针,则仅可在unsafe&程序块中能使用指针。(3)c#只能单继承。(4)必须通过类名访问静态成员。不能像C++中那样,通过对象访问静态成员。(5)在子类中覆盖父类的虚函数时必须用关键字override,覆盖父类的方法要用关键字new
3.8ADO.net&和ADO&的区别?
答案:实际上除了“能够让应用程序处理存储于DBMS&中的数据“这一基本相似点外,两者没有太多共同之处。但是ADO&使用OLE DB&接口并基于微软的COM&技术,而ADO.NET&拥有自己的ADO.NET&接口并且基于微软的.NET&体系架构。众所周知.NET&体系不同于COM&体系,ADO.NET&接口也就完全不同于ADO和OLE DB&接口,这也就是说ADO.NET&和ADO是两种数据访问方式。ADO.net&提供对XML&的支持。
3.9 New delete&与malloc free&的区别&( Autodesk)
答案:用malloc&函数不能初始化对象,new&会调用对象的构造函数。Delete&会调用对象的destructor,而free&不会调用对象的destructor.
3.10 #define DOUBLE(x) x+x (Autodesk)
i = 5*DOUBLE(10);&i&是多少?正确的声明是什么?
答案:i&为60。正确的声明是#define DOUBLE(x) (x+x)
3.11&有哪几种情况只能用intialization list&而不能用assignment? (Autodesk)
答案:当类中含有const、reference&成员变量;基类的构造函数都需要参数;类中含有其他类的成员对象,而该类的构造函数都需要参数。
3.11 C++是不是类型安全的?&(Autodesk)
答案:不是。两个不同类型的指针之间可以强制转换。C#是类型安全的。
3.12 main&函数执行以前,还会执行什么代码?&(Autodesk)
答案:全局对象的构造函数会在main&函数之前执行。
3.13&描述内存分配方式以及它们的区别。&(Autodesk , Microsoft)
答案:1)&从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static&变量。
(2)&在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。
(3)&从堆上分配,亦称动态内存分配。程序在运行的时候用malloc&或new&申请任意多少的内存,程序员自己负责在何时用free&或delete&释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
3.14&什么是虚拟存储器?virtual memory&怎样映射到physical memory?页面替换算法有哪些?&(Microsoft)
见操作系统&p238&页。掌握的页面替换算法NRU,FIFO,第二次机会页面替换算法,LRU
3.15&有四个同样的容器,里面装满了粒数相同的药丸,正常药丸的质量为m,变质药丸的质量为m+1,现在已知这四个容器中,有一个装的全是变质药丸,用电子秤只称一次,找出哪个容器装的是变质药丸&(Microsoft)
答案:把四个容器依次编号为1、2、3、4,然后从中分别取出1、2、3、4&粒药丸,称这10&粒药丸的质量,如果质量为10m+1,则说明第一个容器装的是变质药丸,如果为10m+2&则说明第二个装的变质药丸,依次类推。
3.16&比较一下C++中static_cast&和&dynamic_cast&的区别。&(Autodesk)
dynamic_casts在帮助你浏览继承层次上是有限制的。它不能被用于缺乏虚函数的类型上,它被用于安全地沿着类的继承关系向下进行类型转换。如你想在没有继承关系的类型中进行转换,你可能想到static_cast
3.17 Struct&和class&的区别&(Autodesk)
答案:struct&中成员变量和成员函数默认访问权限是public,class&是private
3.18&当一个类A&中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。(Autodesk)
答案:肯定不是零。我举个反例,如果是零的话,声明一个class A[10]对象数组,而每一个对象占用的空间是零,这时就没办法区分A[0],A[1]…了
3.19&在8086&汇编下,逻辑地址和物理地址是怎样转换的?(Intel)
答案:通用寄存器给出的地址,是段内偏移地址,相应段寄存器地址*10H+通用寄存器内地址,就得到了真正要访问的地址。
3.20&描述一下C++的多态&(microsoft)
答案:C++的多态表现在两个部分,一个是静态连编下的函数重载,运算符重载;动态连编下的虚函数、纯虚函数(抽象类)
4.写出BOOL,int,float,指针类型的变量a&与零的比较语句。
BOOL : if ( !a )
int : if ( a == 0)
float : const EXPRESSION EXP = 0.000001
if ( a & EXP && a &-EXP)
pointer : if ( a != NULL)
5.请说出const&与#define&相比优点
(1)&const&常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
(2)&有些集成化的调试工具可以对const&常量进行调试,但是不能对宏常量进行调试。
6.简述数组与指针的区别
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。
(1)修改内容上的差别
char a[] = “hello”;
a[0] = ‘X’;
char *p = “world”; //&注意p&指向常量字符串
p[0] = ‘X’; //&编译器不能发现该错误,运行时错误
(2)&用运算符sizeof&可以计算出数组的容量(字节数)。sizeof(p),p&为指针得到的是一个指针变量的字节数,而不是p&所指的内存容量。C++/C&语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
char a[] = &hello world&;
cout&& sizeof(a) && // 12&字节
cout&& sizeof(p) && // 4&字节
计算数组和指针的内存容量
void Func(char a[100])
cout&& sizeof(a) && // 4&字节而不是100&字节
7.类成员函数的重载、覆盖和隐藏区别
成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual&关键字可有可无。
覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual&关键字。
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual&关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
8.There are two int variables: a and b, don’t use “if”, “? :”, “switch”
or other judgement statements, find out the biggest one of the two
答案:( ( a + b ) + abs( a – b ) ) / 2
9.如何打印出当前源文件的文件名以及源文件的当前行号?
cout && __FILE__ ;
cout&&__LINE__ ;
__FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的。
10.main&主函数执行完毕后,是否可能会再执行一段代码,给出说明?
答案:可以,可以用_onexit&注册一个函数,它会在main&之后执行int fn1(void), fn2(void), fn3(void), fn4 (void);
void main( void )
String str(&zhanglin&);
_onexit( fn1 );
_onexit( fn2 );
_onexit( fn3 );
_onexit( fn4 );
printf( &This is executed first./n& );
printf( &next./n& );
printf( &executed & );
printf( &is & );
printf( &This & );
The _onexit function is passed the address of a function (func) to be called when the program terminates normally. Successive calls to _onexit create a register of functions that are executed in LIFO (last-in-first-out) order. The functions passed to _onexit
cannot take parameters.
11.如何判断一段程序是由C&编译程序还是由C++编译程序编译的?
#ifdef __cplusplus
cout&&&c++&;
cout&&&c&;
12.文件中有一组整数,要求排序后输出到另一个文件中
void Order(vector&int& &data) //起泡排序
int count = data.size() ;
for ( int i = 0 ; i & i++)
for ( int j = 0 ; j & count - i - 1 ; j++)
if ( data[j] & data[j+1])
int temp = data[j] ;
data[j] = data[j+1] ;
data[j+1] =
if ( !tag )
void main( void )
vector&int&
ifstream in(&c://data.txt&);
cout&&&file error!&;
while (!in.eof())
data.push_back(temp);
in.close();
Order(data);
ofstream out(&c://result.txt&);
if ( !out)
cout&&&file error!&;
for ( i = 0 ; i & data.size() ; i++)
out&&data[i]&&& &;
out.close();
13.排序方法比较&(intel)
排序方法&平均时间&最坏时间&辅助存储
直接插入排序
简单选择排序
14.一个链表的结点结构
struct Node
typedef struct Node N
(1)已知链表的头结点head,写一个函数把这个链表逆序&( Intel)
Node * ReverseList(Node *head) //链表逆序
if ( head == NULL || head-&next == NULL )
Node *p1 =
Node *p2 = p1-&
Node *p3 = p2-&
p1-&next = NULL ;
while ( p3 != NULL )
p2-&next = p1 ;
p2-&next = p1 ;
head = p2 ;
(2)已知两个链表head1&和head2&各自有序,请把它们合并成一个链表依然有序。
Node * Merge(Node *head1 , Node *head2)
if ( head1 == NULL)
return head2 ;
if ( head2 == NULL)
return head1 ;
Node *head = NULL ;
Node *p1 = NULL;
Node *p2 = NULL;
if ( head1-&data & head2-&data )
head = head1 ;
p1 = head1-&
p2 = head2 ;
head = head2 ;
p2 = head2-&
p1 = head1 ;
Node *pcurrent =
while ( p1 != NULL && p2 != NULL)
if ( p1-&data &= p2-&data )
pcurrent-&next = p1 ;
pcurrent = p1 ;
pcurrent-&next = p2 ;
pcurrent = p2 ;
if ( p1 != NULL )
pcurrent-&next = p1 ;
if ( p2 != NULL )
pcurrent-&next = p2 ;
(2)已知两个链表head1&和head2&各自有序,请把它们合并成一个链表依然有序,这次要求用递归方法进行。&( Autodesk)
Node * MergeRecursive(Node *head1 , Node *head2)
if ( head1 == NULL )
return head2 ;
if ( head2 == NULL)
return head1 ;
Node *head = NULL ;
if ( head1-&data & head2-&data )
head = head1 ;
head-&next = MergeRecursive(head1-&next,head2);
head = head2 ;
head-&next = MergeRecursive(head1,head2-&next);
15.分析一下这段程序的输出&(Autodesk)
cout&&&default constructor&&&
cout&&&destructed&&&
B(int i):data(i)
cout&&&constructed by parameter& && data &&
B Play( B b)
int main(int argc, char* argv[])
B temp = Play(5);
请自己执行一下看看。
16.写一个函数找出一个整数数组中,第二大的数&(microsoft)
const int MINNUMBER = -32767 ;
int find_sec_max( int data[] , int count) //类似于1 4 4 4这样的序列将认为1是第二大数
int maxnumber = data[0] ;
int sec_max = MINNUMBER ;
for ( int i = 1 ; i & i++)
if ( data[i] & maxnumber )
maxnumber = data[i] ;
if ( data[i] & sec_max )
sec_max = data[i] ;
return sec_
17&写一个在一个字符串中寻找一个子串第一个位置的函数
这个题目的一般算法比较简单我就不给出了,如果要求高效率的话请参见数据结构中的KMP&算法,不过在笔试时间有限情况下,写出那个算法还是挺难的。
1. Introduce yourself in English
2. What is your great advantage you think of yourself?
3. What is your drawback you think of yourself?
Maybe I will feel very tense if I make a speech in front of a lot of people.
4. How do you feel shanghai?
C语言面试题大汇总
2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。
循环链表,用取余操作做
3.不能做switch()的参数类型是:
switch的参数不能为实型。
4. static有什么用途?(请至少说明两种)
1.限制变量的作用域
2.设置变量的存储域
7.&引用与指针有什么区别?
1)&引用必须被初始化,指针不必。
2)&引用初始化以后不能被改变,指针可以改变所指的对象。
2)&不存在指向空值的引用,但是存在指向空值的指针。
8.&描述实时系统的基本特性
在特定时间内完成特定的任务,实时性与可靠性
9.&全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
全局变量储存在静态数据库,局部变量在堆栈
10.&什么是平衡二叉树?
左右子树都是平衡二叉树&且左右子树的深度差值的绝对值不大于1
11.&堆栈溢出一般是由什么原因导致的?
没有回收垃圾资源
12.&什么函数不能声明为虚函数?
constructor
13.&冒泡排序算法的时间复杂度是什么?
14.&写出float x&与“零值”比较的if语句。
if(x&0.000001&&x&-0.000001)
16. Internet采用哪种网络协议?该协议的主要层次结构?
tcp/ip&应用层/传输层/网络层/数据链路层/物理层
17. Internet物理地址和IP地址转换采用什么协议?
ARP (Address Resolution Protocol)(地址解析协议)
18.IP地址的编码分为哪俩部分?
IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。
1.&用宏定义写出swap(x,y)
#define swap(x, y)
x = x +
2.数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:int do_dup(int a[],int N)
答案:方法1:如果数就是1-N-1,那么求出a[N]的和,然后减去1-N-1就行了。(确定数字1-N)
S = N * (N-1) / 2;
int s = 0;
for(i=0;i&N;++i)
s += a[i];
int res = s - S;
方法2.a[]中的某元素a[i]看做是pi[]数组的下标,元素a[i]存储到对应数组下标pi[a[i]]的地址中
#include&stdio.h&&
#define&N&10&
void&main()&
&int&a[N]={1,2,3,4,5,6,7,7,8,9};&
&int&pi[N]={0};&
&int&key=0;&
&for(int&i=0;i&N;i++)&
&{ &if(pi[a[i]]==0)&
&&&pi[a[i]]=a[i];&
&&&&{ key=a[i];&
&printf(&多余的数字是%d/n&,key);&
3&一语句实现x是否为2的若干次幂的判断
int i = 512;&&cout && boolalpha && ((i & (i - 1)) ? false : true) &&
4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b,p=4,n=3转换后x=0b
unsigned int intvert(unsigned int x,int p,int n){
unsigned int _t = 0;
unsigned int _a = 1;
for(int i = 0; i & ++i){
_a = _a && 1;
_t = _t &&
什么是预编译
何时需要预编译:
1、总是使用不经常改动的大型代码体。&
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
char const * p
const char *p
上述三个有什么区别?
char * //常量指针,p的值不可以修改
char const * p;//指向常量的指针,指向的常量值不可以改
const char *p;&//同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 ) &&
cout && ( str3 == str4 ) &&
cout && ( str5 == str6 ) &&
cout && ( str7 == str8 ) &&
结果是:0 0 1 1解答:str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。
一个32位的机器,该机器的指针是多少位
指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。
{ int a[5]={1,2,3,4,5};
&&int *ptr=(int *)(&a+1);
&&printf(&%d,%d&,*(a+1),*(ptr-1));
*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5;&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)int *ptr=(int *)(&a+1);&则ptr实际是&(a[5]),也就是a+5
原因如下:
&a是数组指针,其类型为&int (*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同a是长度为5的int数组指针,所以要加&5*sizeof(int)所以ptr实际是a[5]
但是prt与(&a+1)类型是不一样的(这点很重要),所以prt-1只会减去sizeof(int*);
a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].
1.请问以下代码有什么问题:
int main()
&&&char *str=&a;
&&&strcpy(str,&hello&);
&&&printf(str);
&&&return 0;
没有为str分配内存空间,将会发生异常。问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
char* s=&AAA&;
printf(&%s&,s);
printf(&%s&,s);
有什么错?
&AAA&是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosnt char* s=&AAA&;然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
1、写一个“标准”宏,这个宏输入两个参数并返回较小的一个。
#define Min(X, Y) ((X)&(Y)?(Y):(X))&&&&&&&注意结尾没有;
2、嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。
&&while(1){}或者for(;;)
3、关键字static的作用是什么?
&&定义静态变量
4、关键字const有什么含意?
表示常量不可以修改的变量。
5、关键字volatile有什么含意?并举出三个不同的例子?
提示编译器对象的值可能在编译器未监测到的情况下改变。
int (*s[10])(int)&表示的是什么
int (*s[10])(int)&函数指针数组,每个指针指向一个int func(int param)的函数。
1.有以下表达式:
int a=248; b=4;int const c=21;const int *d=&a;
int *const e=&b;int const *f const =&a;
请问下列表达式哪些会被编译器禁止?为什么?
*c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;
*c&这是个什么东东,禁止
*d&说了是const,&禁止
e = &a&说了是const&禁止
const *f const =&a;&禁止
2.交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;
有两种解法,&一种用算术算法,&一种用^(异或)
a = a +
a = a^b;//&只能对int,char..
3.c和c++中的struct有什么不同?
c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而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);
程序崩溃

我要回帖

更多关于 空调冷风25度冷吗 的文章

 

随机推荐