C/C++笔试题纸风车韦

线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

人工测试:个人复查、抽查和会审机器测试:黑盒测试和白盒测试

Heap是堆,stack是栈。Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。Stack空间有限,Heap是很大的自由存储区C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行

5.客户端如何访问.Net组件实现WebService?

小页(4K)两级分页模式,大页(4M)一级

一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方??

通过调用门,从ring3到ring0,中断从ring3到ring0,进入vm86等等

用内存映射或全局原子(互斥变量)、查找窗口句柄..FindWindow,互斥,写标志到文件或注册表,共享内存。.

键盘钩子SetWindowsHookEx

存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程用于实现频繁使用的查询、业务规则、被其他过程使用的公共例行程序

存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快

(1)冒泡排序;(2)选择排序;(3)插入排序;(4)快速排序;(5)堆排序;(6)归并排序;

structmybitfields{unsignedshorta:4;unsignedshortb:5;unsignedshortc:7;}test

voidmain(void){inti;test.a=2;test.b=3;test.c=0;

i=*((short*)&test);printf("%d/n",i);}

unsignedinti=3;cout<

inta;intb;intc;

voidF1(){b=a*2;a=b;}

voidF2(){c=a+1;a=c;}

main(){a=5;//StartF1,F2inparallelF1();F2();printf("a=%d/n",a);}

(1)Byte转换为RGB时,保留高5、6bits;(2)RGB转换为Byte时,第2、3位置零。

(1)增加一个元素;(2)获得头元素;(3)弹出头元素(获得值并删除)。

1。InC++,whatdoes"explicit"meanwhatdoes"protected"mean

c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,在某些情况下,我们要求类的使用者必须显示调用类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题。

protected控制的是一个函数对一个类的成员(包括成员变量及成员方法)的访问权限。protected成员只有该类的成员函数及其派生类的成员函数可以访问

1.在C++中有没有纯虚构造函数?

构造函数不能是虚的。只能有虚的析构函数

static是加了访问控制的全局变量,不被继承。

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.代码voidfunc(){staticintval;…}中,变量val的内存地址位于:A.已初始化数据段B.未初始化数据段C.堆D.栈

4.同一进程下的线程可以共享以下A.stackB.datasectionC.registersetD.threadID

5.TCP和IP分别对应了OSI中的哪几层?A.ApplicationlayerB.DatalinklayerC.PresentationlayerD.PhysicallayerE.TransportlayerF.SessionlayerG.Networklayer

6.shorta[100],sizeof(a)返回?A2B4C100D200E400

7.以下哪种不是基于组件的开发技术_____。AXPCOMBXPCCOMDCORBA

8.以下代码打印的结果是(假设运行在i386系列计算机上):structst_t{intstatus;short*pdata;charerrstr[32];};

st_tst[16];char*p=(char*)(st[2].errstr+32);printf("%d",(p-(char*)(st)));

A32B114C120D1112

9.STL中的哪种结构是连续形式的存储AmapBsetClistDvector

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,但是代码中有一些问题,请做尽可能少的修改使之正确。1staticintf1(constchar*errstr,unsignedintflag){2intcopy,index,len;3conststaticchar**__err={“err1”,“err2”,“err3”,“err4”};45if(flag&0x10000)6copy=1;7index=(flag&0x300000)>>20;89if(copy){10len=flag&0xF;11errstr=malloc(len);12if(errstr=NULL)13return-1;14strncpy(errstr,__err[index],sizeof(errstr));15}else16errstr=__err+index;17}1819voidf2(intc){20char*err;22swtch(c){23case1:24if(f1(err,0x110004)!=-1)25printf(err);26case2:27if(f2(err,0x30000D)!=-1)28printf(err);29}30}

三、编程题: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定义的数。输出:13…

四、设计题: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_ID3)添加一个新的SONG_ID4)给定一个URL_ID,将其置为不可用

限制条件:内存占用不超过1G,单个文件大小不超过2G,一个目录下的文件数不超过128个。

为获得最佳性能,请说明设计的数据结构、搜索算法,以及资源消耗。如果系统数据量扩大,该如何多机分布处理?

Q:Whenspeakingofsoftwareproducts,howdoyoudefinetheterm“quality”.问:当说到软件产品的时候,你如何定义术语“质量”

MeetingcustomerrequirementsQ:WhatistheroleofsoftwaredebelopersandqualityassuranleengineersinensuringthequalityoftheproductHowareotherfunctionalareasimportanttodevelopingaqualityproduct问:在确定产品的质量方面,什么是软件开发工程师和质量保证工程师要做的?其他的功能对如何发展产品质量有什么重要?

软件测试是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。Qualityassuranleengineers:useasetofactivitiesdesignedtoensurethedevelopmentprocesstomeettherequirements.Q:Whatiscyclomaticcomplexity问:(这是一个复杂度模型吧)

一种代码复杂度的衡量标准,中文名称叫做圈复杂度。圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。Q:Whatareblack-boxtexingandwhite-boxtexting问:什么是黑盒测试和白盒测试?

Blackboxtesting:atestingwithoutknowledgeoftheinternalworkingoftheitembeingtested.whiteboxtesting:usespecificknowledgeofprogrammingcodetoexamineoutputs.

Q:Thefollowingfunctiondividesabybandoutputtoc,returns-1aserror.Intdivide(inta,intb,intc)Listyoutestcasesinablack-boxtesting.问:对Intdivide(inta,intb,intc)函数写出黑盒测试用例

先等价,后边界值

abc预期结果gg506201-1010-10-1010.010.0Q:Intactivity(intnage,boolbmale){if(nage<60)returnzoo;elseif(bmale)returngolf;elsereturnmovie;}用cyclomaticcomplexity,共有多少条路径3Q:Thefollowingfunctiontestswhetherthethreenumberscanbethelengthsofthethreesidesofatriangle.Booltriangle(floata,floatb,floatc)Listyoutestcasesinablack-boxtesting.问:也是让写黑盒测试用例,是一个三个数是否是三角形的三条边的测试

abc预期结果gj0-1221023234225666

IQ,EQ题

然后是英文的数据结构,c/c++,数据库,3D建模,软件工程,软件测试

题目几乎都是英文的

后面还要填表格,一张中文的,一张英文的

一般有三个步骤首先会笔试。笔试题分为EQ题和专业题,EQ题没什么好说的,大家自由发挥就行,不过其中有一些逻辑推理题要注意。专业题目全英文,考的内容很多,数据结构,C/C++语法,COM,3D建模,软件测试基础知识,如黑盒,白盒测试等,题不难,每方面有三到五题左右。笔试成绩达到一定分数过后才能进入第二轮人事部面试。这部分面试一般是五人一组在一房间里,面试人员会问很多问题,然后每个人做答,问题很随机,当时好像问了“最尊敬的人是谁,最难忘的事是什么,有何职业规划,如何处理与同事之间的关系矛盾等等”。这轮过后就到技术部面试,会问一些基础知识,如数据结构常用的有哪些,如何用C/C++写出其中的一种,面象对像有哪些特性,XML是什么等等,可能他会用英语问你这些问题,各位练下听力口语哈(当时俺被问的很郁闷)

COM:

(COM),是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。

开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX,DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。COM所含的概念并不止是在MicrosoftWindows操作系统下才有效。COM并不是一个大的API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。有的组件必须满足两个条件:第一,组件必须动态链接;第二,它们必须隐藏(或封装)其内部实现细节。动态链接对于组件而言是一个至关重要的要求,而消息隐藏则是动态链接的一个必要条件。对于COM来讲,接口是一个包含一个函数指针数组的内存结构。每一个数组元素包含的是一个由组件所实现的函数地址。

1.写出判断ABCD四个表达式的是否正确,若正确,写出经过表达式中a的值(3分)

inta=4;

(A)a+=(a++);(B)a+=(++a);(C)(a++)+=a;(D)(++a)+=(a++);

a=

答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a)+=a;

改后答案依次为9,10,10,11

2.某32位系统下,C++程序,请计算sizeof的值(5分).

charstr[]=“www.ibegroup.com”

char*p=str;

intn=10;

请计算

sizeof(str)=?(1)

sizeof(p)=?(2)

sizeof(n)=?(3)

voidFoo(charstr[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”有什么区别?

答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。

答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern"C"修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一个C连接交换指定符号extern“C”来解决这个问题。

(4).switch()中不允许的数据类型是

答:实型

4.回答下面的问题(6分)

(1).VoidGetMemory(char**p,intnum){

*p=(char*)malloc(num);

voidTest(void){

char*str=NULL;

GetMemory(&str,100);

strcpy(str,"hello");

printf(str);

请问运行Test函数会有什么样的结果?

答:输出“hello”

(2).voidTest(void){

char*str=(char*)malloc(100);

strcpy(str,“hello”);

free(str);

if(str!=NULL){

strcpy(str,“world”);

答:输出“world”

(3).char*GetMemory(void){

charp[]="helloworld";

returnp;

str=GetMemory();

答:无效的指针,输出不确定

5.编写strcat函数(6分)

已知strcat函数的原型是char*strcat(char*strDest,constchar*strSrc);

其中strDest是目的字符串,strSrc是源字符串。

(1)不调用C++/C的字符串库函数,请编写函数strcat

答:

VC源码:

char*__cdeclstrcat(char*dst,constchar*src)

{

char*cp=dst;

while(*cp)

cp++;/*findendofdst*/

while(*cp++=*src++);/*Copysrctoendofdst*/

return(dst);/*returndst*/

(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这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似Windows3.x的协作式多任务。另外一种则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因I/O而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。WindowsNT和OS/2支持内核线程。Linux支持内核级的多线程

13.C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?

答:栈:存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理

堆:程序运行时动态申请,new和malloc申请的内存就在堆上

14.使用线程是如何防止出现大的波峰。

答:意思是如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提高调度效率和限制资源使用的好处,线程池中的线程达到最大数时,其他线程就会排队等候。

15函数模板与类模板有什么区别?

答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。

16一般数据库若出现日志满了,会出现什么情况,是否还能使用?

答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。

17SQLServer是否支持行级锁,有什么好处?

18如果数据库满了会出现什么情况,是否还能使用?

答:见16

19关于内存对齐的问题以及sizeof()的输出

答:编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。

20inti=10,j=10,k=3;k*=i+j;k最后的值是?

答:60,此题考察优先级,实际写成:k*=(i+j);,赋值运算符优先级最低

21.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现

答:将操作多个表的操作放入到事务中进行处理

22.TCP/IP建立连接的过程(3-wayshake)

答:在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-timedynamiclinking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。

2.运行时动态链接(run-timedynamiclinking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了

27.IP组播有那些好处

答:Internet上产生的许多新的应用,特别是高带宽的多媒体应用,带来了带宽的急剧消耗和网络拥挤问题。组播是一种允许一个或多个发送者(组播源)发送单一的数据包到多个接收者(一次的,同时的)的网络技术。组播可以大大的节省网络带宽,因为无论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。所以说组播技术的核心就是针对如何节约网络资源的前提下保证服务质量。

托管代码

使用基于公共语言运行库的语言编译器开发的代码称为托管代码;托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。

重载

每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,就称作重载。

2.写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。#defineMIN(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停止编译并显示错误信息死循环(Infiniteloops)4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。我首选的方案是:while(1){}一些程序员更喜欢如下方案:for(;;){}这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是:“我被教着这样做,但从没有想到过为什么。”这会给我留下一个坏印象。第三个方案是用gotoLoop:...gotoLoop;应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。

基本概念,涉及到C++、Java、软件测试、EJB、ASP和ASP.NET的知识。

今天群硕笔试,考了好多内容,其中Java占很大部分!

本试卷中最有难度的编程题:给定一个数组,这个数组中既有正数又有负数,找出这个数组中的子数组,此子数组的和最大!

#includevoidmain(){inta[15]={2,3,-4,5,6,-5,-1,14,9,-10,1,-71,75,4,-9};intb[15];//计算和intnum=a[14];intc[15];//最大尾数标志数组intn=14;inti,j=0;for(i=14;i>=0;i--)//从后计算和放入b中{c[i]=n;b[i]=num;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的区别(因为经常考)

finally—再异常处理时提供finally块来执行任何清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。

finalize—方法名。Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

最容易疏忽的题:main(){Cc;}在前面已经定义了C的类,这个地方容易迷糊的就是,没有new,照样执行构造函数,没有free,照样执行析构函数。

最迷糊的题:一个无向图是否能够存到树中?为什么?

最然我感到有差距的题:EJB中一定包括()interface,()interface,()class

不用任何变量交换a,b两个变量

用递归求最大公约数

举一个多态的例子二叉平衡树(特性,内插入和外插入)UNIX进程包括那三个部分:...(简单)new动态分配失败会抛出什么异常,C++中提供了那两个标准函数来设定异常处理HANLDER(有点难度)EJB包含那几种区别(压根没听过)asp和asp.net的区别(假期做项目的时候碰到过,嘿嘿)JAVA中的interface和abstractclass区别(照着c里面的感念随便写了点)logicthinking:检测电冰箱(我用软件工程的思想随便写写)

1.内连接与外连接的区别。3.内联的定义,什么情况下选择内联。4.什么是多态,用一段代码说明。5.不经过第三者变量来交换两个整型数。6.EJB都有那些Beans.7.什么是平衡二叉树。8.当new出错后怎么处理。9.asp与asp.net的最大区别。10.如何证明一个电冰箱是否是好的

1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?

templatestructSumArr{staticintGetValue(T*arr){returnarr[index]+SumArr::GetValue(arr);}};templatestructSumArr{staticintGetValue(T*arr){returnarr[0];}};intmain(){intarry[11]={1,2,3,4,5,6,7,8,9,10,2};printf("%d",SumArr::GetValue(arry)-11*5);}

1_1什么叫做多态性在C++中是如何实现多态的

解:多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其中主要的方式。

1_2什么叫做抽象类抽象类有何作用抽象类的派生类是否一定要给出纯虚函数的实现

这个派生类仍然是一个抽象类。

晚上参加了autodesk笔试,留下了一丝的残念,mfc好久没有用几乎忘光了,com学院没有开这门课,还得靠自学T_T晚上听了报告,发现autodesk公司真的很不错.在cadc部门能接触到autocad最核心的代码,这是在另外很多外企所碰不到的.autolove部分那张脸上充满笑容忘着远方的小女孩的照片很让人感动,很钦佩autodesk公司所做的公益活动.得复习一下专业知识了,以后还将有很多的招聘会.

附笔试题目:

1.Whatisvirtualfunction?whatisvtableusedfor?虚函数主要用于实现多态用,基类的某个函数前加个Virtual用来告诉编译系统,遇到这个处理过程时,要等到执行时再确定到底调用哪个类的处理过程;

每一个虚函数都会有一个入口地址,虚函数表保存所有虚函数的入口地址2.What'sthedifferencebetween"struct"and"class"inc++struct成员默认类型为public,class成员默认类型为private。即为数据的封装。

如果没有多态和虚拟继承,在C++中,struct和class的存取效率完全相同!简单的说就是,存取class的datamember和非virtualfunction效率和struct完全相同!不管该datamember是定义在基类还是派生类的。如果不是为了和C兼容,C++中就不会有struct关键字。

3.WhatdoweneedtomakedestructorvitualwhyCObject的析构函数设为virtual型,则所有CObject类的派生类的析构函数都将自动变为virtual型,这保证了在任何情况下,不会出现由于析构函数未被调用而导致的内存泄露4.Whattodeclarememberfunctionasconstvoidfun1(inta)const;const的作用是指在该函数内部不会改变此类的成员变量(除非该成员变量定义时加上violate关键字),否则修改了该成员变量就会报错.5.WhatistheMessagereflectioninMFC6.Howmanywaystogetthehandleofamodeldialogwhatarethey7.Howtochangethedefaultwindowprocedureafterthewindowshowsup8.WhatisthedifferencebetweenSTAandMTAinCOM9.WhatismarshalinginCOM10.WhatisdualinterfaceinCOM11.WhatisthedifferencebetweenaggregatedandcontainedobjectinCOM12.Writeaninsertfunctionforasortedsinglylinkedlistpleasetakeintoconsiderationsofvariousconditionsincludingerrorconditions13.智力题目.甲乙丙丁是血缘关系,其中一个与其他三个性别不同,其中有甲的母亲,乙的哥哥,丙的父亲,丁的女儿。知道其中年龄最大的和最小的性别不同,问谁和其他人性别不同。

1.dynamicbinding

2.defaultprivate

3.forsafedeletingbaseclasses

4.sometypefooconst;

5.usesomemacro,createamessagetable

6-12.i'llkeepitblank...

13.丁最大,男的

Autodesk笔试题目

MFC(不太会做,记不清楚了)1,怎么为窗口自定义消息

2,SendMessage和PostMessage的区别

sendmessage是消息发送给指定的callback函数后立即执行。。当前的调用挂起。。postmessage只是把消息发送到消息队列。。然后返回。。。所以在消息循环中。。用的是postmessage而不是sendmessage。。

3,CRuntimeClass是由什么用的?他是怎样得到的

4,怎样通过一个句柄得到CWnd的指针

fromhandle函数可以得到指定cwnd的m_hwnd。。

早上起的早了一点,刚好看到版上置顶的帖子第一个是博朗,反正也没有别的事,抄了一份简历过去。

三态:运行态,就绪态,等待态

硬件中断

有限自动向量机

有限自动机(FiniteAutomata):有限自动机=有限控制器+字符输入带

如果有限状态机每次转换后的状态是唯一的则称之为确定有限状态机(DFA);如果转换后的后继状态不是唯一的则称之为不确定有限自动机(NFA);

数据库

链表操作(出入新元素,很简单)

数据结构中的树,

加密问题

PING的协议(ICMP?)

ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。在Unix/Linux,序列号从0开始计数,依次递增。而Windowsping程序的ICMP序列号是没有规律。

UML知识(全军覆没,没接触过这玩意)

UML的组成

在UML中,一个用例模型由若干个用例图描述,用例图主要元素是用例和执行者。用例(usecase)从本质上讲,一个用例是用户与计算机之间的一次典型交互作用。在UML中,用例表示为一个椭圆。执行者(Actor)执行者是指用户在系统中所扮演的角色。其图形化的表示是一个小人。

在UML中,类和对象模型分别由类图和对象图表示.UML规定类的属性的语法为:可见性属性名:类型=缺省值{约束特性}图1"客户"类中,"客户名"属性描述为"-客户名:字符串=缺省客户名"。

常用的可见性有Public、Private和Protected三种,在UML中分别表示为"+"、"-"和"#"。

关联类通过一根虚线与关联连接。

聚集和组成聚集(Aggregation)是一种特殊形式的关联。聚集表示类之间的关系是整体与部分的关系。一辆轿车包含四个车轮、一个方向盘、一个发动机和一个底盘,这是聚集的一个例子。在需求分析中,"包含"、"组成"、"分为……部分"等经常设计成聚集关系。聚集可以进一步划分成共享聚集(SharedAggregation)和组成。

已知后序,中序,求前序

堆的结构。

答的惨不忍睹啊,数了数,大概就10个能对的,其他是一点吃不准。

考完软件,立刻考逻辑,就是一大堆的数据,40个题目,40min要做完。可怜我还没有计算器,做的我累死了。到最后还有10几个没勾,我也懒得乱勾了。交卷。

有几点点要bs一下这个公司,

Java中除了使用new,还有其他的实例化方法吗?(我说了ClassLoader和Class.forName,他就继续问了些,然后我感觉没底)2.java.util包中你最常用那些类?(我说Collection)Collection分那两类?List和Set有什么区别自定义对象如何保证在Set中的唯一性?(我回答equals&hashCode)3.谈谈JDBC中的DataSource4.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服务器用过哪些?说了些软件,然后我主动说里面的机理不熟。

2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。循环链表,用取余操作做

3.不能做switch()的参数类型是:switch的参数不能为实型。

4.static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域

7.引用与指针有什么区别?1)引用必须被初始化,指针不必。2)引用初始化以后不能被改变,指针可以改变所指的对象。2)不存在指向空值的引用,但是存在指向空值的指针。

9.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈

10.什么是平衡二叉树?左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1

11.堆栈溢出一般是由什么原因导致的?没有回收垃圾资源

14.写出floatx与“零值”比较的if语句。if(x>0.000001&&x<-0.000001)

16.Internet采用哪种网络协议?该协议的主要层次结构?tcp/ip应用层/传输层/网络层/数据链路层/物理层

17.Internet物理地址和IP地址转换采用什么协议?ARP(AddressResolutionProtocol)(地址解析协议)

18.IP地址的编码分为哪俩部分?IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。

1.用宏定义写出swap(x,y)#defineswap(x,y)x=x+y;y=x-y;x=x-y;

答案:方法1:如果数就是1-N-1,那么求出a[N]的和,然后减去1-N-1就行了。(确定数字1-N)

S=N*(N-1)/2;inti;ints=0;for(i=0;i

方法2.a[]中的某元素a[i]看做是pi[]数组的下标,元素a[i]存储到对应数组下标pi[a[i]]的地址中

#include#defineN10voidmain(){inta[N]={1,2,3,4,5,6,7,7,8,9};intpi[N]={0};intkey=0;for(inti=0;i

3一语句实现x是否为2的若干次幂的判断位运算

inti=512;cout<

4.unsignedintintvert(unsignedintx,intp,intn)实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b00010001,p=4,n=3转换后x=0b01100001unsignedintintvert(unsignedintx,intp,intn){unsignedint_t=0;unsignedint_a=1;for(inti=0;i

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

1、写一个“标准”宏,这个宏输入两个参数并返回较小的一个。#defineMin(X,Y)((X)>(Y)(Y):(X))注意结尾没有;

2、嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。while(1){}或者for(;;)

3、关键字static的作用是什么?定义静态变量

4、关键字const有什么含意?表示常量不可以修改的变量。

5、关键字volatile有什么含意?并举出三个不同的例子?提示编译器对象的值可能在编译器未监测到的情况下改变。

3.写出程序运行结果intsum(inta){autointc=0;staticintb=3;c+=1;b+=2;return(a+b+c);}voidmain(){intI;inta=2;for(I=0;I<5;I++){printf("%d,",sum(a));}}//考察static会保存上次结果输出:8,10,12,14,16,4.intfunc(inta){intb;switch(a){case1:30;case2:20;case3:16;default:0}returnb;}则func(1)=//b定义后就没有赋值。

5:inta[3];a[0]=0;a[1]=1;a[2]=2;int*p,*q;p=a;q=&a[2];则a[q-p]=a[2]=2解释:指针一次移动一个int但计数为1今天早上的面试题9道,比较难,向牛人请教,国内的一牛公司,坐落在北京北四环某大厦:1、线形表a、b为两个有序升序的线形表,编写一程序,使两个有序线形表合并成一个有序升序线形表h;答案在严锐敏《数据结构第二版》第二章例题,数据结构当中,这个叫做:两路归并排序Linklist*unio(Linklist*p,Linklist*q){linklist*R,*pa,*qa,*ra;pa=p;qa=q;R=ra=p;while(pa->next!=NULL&&qa->next!=NULL){if(pa->data>qa->data){ra->next=qa;qa=qa->next;取两线性表的大值放入ra,并将取值的表指针加1}else{ra->next=pa;pa=pa->next;}}if(pa->next!=NULL)ra->next=pa;if(qa->next!=NULL)ra->next==qa;returnR;}

2、运用四色定理,为N个局域举行配色,颜色为1、2、3、4四种,另有数组adj[][N],如adj[i][j]=1则表示i区域与j区域相邻,数组color[N],如color[i]=1,表示i区域的颜色为1号颜色。四色填充

3、用递归算法判断数组a[N]是否为一个递增数组。递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束:boolfun(inta[],intn){if(n==1)returntrue;if(n==2)returna[n-1]>=a[n-2];returnfun(a,n-1)&&(a[n-1]>=a[n-2]);}

4、编写算法,从10亿个浮点数当中,选出其中最大的10000个。(google,百度,腾讯)一种是用外部排序,在《数据结构》书上有《计算方法导论》在找到第n大的数的算法上加工?

另外一种是用一个有序容器保存10000个数,然后其他的数字依次和容器中的最小数字比较,如果大于容器已有的,就插入容器并删除原先最小的那个,而容器仍旧保持有序。

5、编写一unix程序,防止僵尸进程的出现.

为什么说用PHP开发大型系统令人不爽

笔者在过去的四年里一直致力于PHP应用的开发。PHP确实十分容易编写。但是PHP也有一些十分严重的缺陷。

下面笔者会给出自己的理由,为什么PHP不适合于比小型业余网站更大的网站。

1.对递归的不良支持

递归是一种函数调用自身的机制。这是一种强大的特性可以把某些复杂的东西变得很简单。有一个使用递归的例子是快速排序(quicksort)。不幸的是,PHP并不擅长递归。Zeev,一个PHP开发人员,说道:“PHP4.0(Zend)对密集数据使用了栈方式,而不是使用堆方式。也就是说它能容忍的递归函数的数量限制和其他语言比起来明显少。”见bug1901。这是一个很不好的借口。每一个编程语言都应该提供良好的递归支持。

2.许多PHP模块都不是线程安全的

在几年前,Apache发布了Web服务器的2.0版。这个版本支持多线程模式,在这个模式下,软件一个一部分可以同时运行多个。PHP的发明者说PHP的核心是线程安全的,但是非核心模块不一定是。但是十次有九次,你想要在PHP脚本中使用这种模块,但这又使你的脚本不能合适Apache的多线程模式。这也是为什么PHP小组不推荐在Apache2的多线程模式下运行PHP。不良的多线程模式支持使PHP常被认为是Apache2依然不流行的原因之一。

请阅读这篇讨论:Slashdot:SitesRejectingApache2.

3.PHP由于商业原因而不健全

通过使用缓存,PHP的性能可以陡增500%[见基准测试]。那么为什么缓存没有被构建在PHP中呢?因为Zend——PHP的制造者,它在销售自己的ZendAccelerator,所以当然,他们不想抛弃自己的商业产品这块肥肉。

但是有另一个可选择的:APC.(Zend后来推出ZendOptimizer,免费的加速器——译者)

4.没有命名空间

设想某个人制作了一个PHP模块用来阅读文件。模块中一个函数叫做read。然后另一个人的模块可以读取网页的,同样包含一个函数read。然后我们就无法同时使用这两个模块了,因为PHP不知道你要用哪个函数。

但是有一个很简单的解决方法,那就是命名空间。曾经有人建议PHP5加入这个特性,但不幸得是他没有这么做。现在,没有命名空间,每个函数都必须加上模块名作为前缀,来避免名称冲突。这导致了函数名恐怖得长,例如xsl_xsltprocessor_transform_to_xml让代码难于书写和理解。

5.不标准的日期格式字符

很多程序员对日期格式字符都很熟悉,它是从UNIX和C语言中来的。其他一些编程语言采用了这个标准,但是很奇怪的,PHP有它自己的一套完全不兼容的日期格式字符。在C中,“%j”表示一年中的当天,在PHP中他表示一个月中的当天。然而使事情更混乱的是:Smarty(一个很流行的PHP模版引擎)的strftime函数和date_format函数,却使用了C/UNIX的格式化字符。

6.混乱的许可证

你也许认为PHP是免费的,所有的在手册中提到的PHP模块也是免费的。错了!例如,如果你想在PHP中生成PDF文件,你会在手册中发现两个模块:PDF和ClibPDF。但是这两个都是有商业许可证的。所以,你所使用的每个模块,你都要确保你同意他的许可证。

7.不一致的函数命名规则

有些函数名称是有多个单词组成的。一般有三种单词组合的习惯:

直接拼接:getnumberoffiles

用下划线分开:get_number_of_files

骆驼法则:getNumberOfFiles

大部分语言选择其中一中。但是PHP都用到了。

例如,你想要把一些特殊字符转换成HTML实体,你会使用函数htmlentities(直接拼接单词)。如果你要使用相反的功能,你要用到它的小弟弟html_entity_decode。由于某些特殊的原因,这个函数名是由下划线分隔单词。怎么能这样呢?你知道有一个函数叫strpad。或者他是str_pad?每次你都要查看一下到底这个符号是什么或者直接等他出现一个错误。函数是不分大小写的,所以对于PHP来说rawurldecode和RawUrlDecode之间没有什么区别。这也很糟糕,因为两个都使用到了同时他们看上去还不一样,混淆了阅读者。

8.魔法引用的地狱

魔法引用(Magicquote)可以保护PHP脚本免受SQL注入攻击。这很好。但是出于某些原因,你可以在php.ini中关闭这个配置。所以你如果要写出一个有弹性的脚本,你总要检查魔法引用是开启还是关闭。这样一个“特性”应该让编程更简单,而事实上变得更复杂了。

9.缺少标准框架

一个成长中的网站没有一个整体框架,最终会变成维护的噩梦。一个框架可以让很多工作变得简单。现在最流行的框架模型时MVC-模型,在其中表现层、业务逻辑和数据库访问都分离开了。

总结

什么问题

对于非常小的项目,它可以是一个十分符合人意的编程语言。但是对于较大的和更为复杂的项目,PHP就显出他的薄弱了。当你不断地摸索之后,你会发现笔者提到的某些问题的解决方案。所以,当解决方案已知之后,为什么不能修正他呢?另外为什么这些修补不在手册中提到呢?

一个开源的语言十分流行是一件好事。但不幸得是,它不是一个伟大的语言。笔者希望所有的问题能有一天得到解决(也许在PHP6?),然后我们就将拥有一个开源语言,他既开源,又好用。

到现在,当你要启动一个多于5个脚本页面的项目的时候,你最好考虑C#/ASP.Net或者Java/JSP或者也许Python同样是一个更好的选择。

C语言最长平台算法

已知一个已经从小到大排列好的数组,说这个数组中的一个平台(Plateau),就是连续的一串相同的元素,并且这一串元素不能再延伸.例如,在1,2,2,3,3,3,4,5,5,6中1,2.2,3.3.3,4,5.5,6都是平台.编写程序把这个数组中最长的平台找出来.

#includeintlongest_plateau(intx[],intn){intlength=1;inti;for(i=1;i

本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增强自身的内功。2.找错题试题1:

voidtest1(){charstring[10];char*str1="0123456789";strcpy(string,str1);}

试题1字符串str1需要11个字节才能存放下(包括末尾的’’),而string只有10个字节的空间,strcpy会导致数组越界;试题2:

voidtest2(){charstring[10],str1[10];inti;for(i=0;i<10;i++){str1[i]='a';}strcpy(string,str1);}

对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string,str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分;试题3:

voidtest3(char*str1){charstring[10];if(strlen(str1)<=10){strcpy(string,str1);}}

对试题3,if(strlen(str1)<=10)应改为if(strlen(str1)<10),因为strlen的结果未统计’’所占用的1个字节。剖析:考查对基本功的掌握:(1)字符串以’’结尾;(2)对数组越界把握的敏感度;(3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:

char*strcpy(char*strDest,constchar*strSrc){assert((strDest!=NULL)&&(strSrc!=NULL));char*address=strDest;while((*strDest++=*strSrc++)!=‘’);returnaddress;}从2分到10分的几个答案我们可以清楚的看到,小小的strcpy竟然暗藏着这么多玄机,真不是盖的!需要多么扎实的基本功才能写一个完美的strcpy啊!(4)对strlen的掌握,它没有包括字符串末尾的''。读者看了不同分值的strcpy版本,应该也可以写出一个10分的strlen函数了,完美的版本为:intstrlen(constchar*str)//输入参数const

{assert(strt!=NULL);//断言字符串地址非0intlen;while((*str++)!=''){len++;}returnlen;}

试题4:

voidGetMemory(char*p){p=(char*)malloc(100);}voidTest(void){char*str=NULL;GetMemory(str);//!!!strcpy(str,"helloworld");printf(str);}

试题4传入中GetMemory(char*p)函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完

char*str=NULL;GetMemory(str);后的str仍然为NULL;试题5:

char*GetMemory(void){charp[]="helloworld";returnp;}voidTest(void){char*str=NULL;str=GetMemory();printf(str);}

试题5中

charp[]="helloworld";returnp;的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。

试题6:

voidGetMemory(char**p,intnum){*p=(char*)malloc(num);}voidTest(void){char*str=NULL;GetMemory(&str,100);strcpy(str,"hello");printf(str);}

试题6的GetMemory避免了试题4的问题,传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句*p=(char*)malloc(num);后未判断内存是否申请成功,应加上:

if(*p==NULL){...//进行申请内存失败处理}

试题6的Test函数中也未对malloc的内存进行释放。试题7:

voidTest(void){char*str=(char*)malloc(100);strcpy(str,"hello");free(str);...//省略的其它语句}

试题7存在与试题6同样的问题,在执行char*str=(char*)malloc(100);后未进行内存是否申请成功的判断;另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上:str=NULL;

剖析:试题4~7考查面试者对内存操作的理解程度,基本功扎实的面试者一般都能正确的回答其中50~60的错误。但是要完全解答正确,却也绝非易事。对内存操作的考查主要集中在:(1)指针的理解;(2)变量的生存期及作用范围;(3)良好的动态内存申请和释放习惯。再看看下面的一段程序有什么错误:

swap(int*p1,int*p2){int*p;*p=*p1;*p1=*p2;*p2=*p;}

在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。在VC++中DEBUG运行时提示错误“AccessViolation”。该程序应该改为:

swap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}3.内功题试题1:分别给出BOOL,int,float,指针变量与“零值”比较的if语句(假设变量名为var)解答:BOOL型变量:if(!var)int型变量:if(var==0)float型变量:constfloatEPSINON=0.00001;if((x>=-EPSINON)&&(x<=EPSINON)指针变量:if(var==NULL)剖析:考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int型变量也可以写成if(!var),指针变量的判断也可以写成if(!var),上述写法虽然程序都能正确运行,但是未能清晰地表达程序的意思。一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),表明其为“逻辑”判断;如果用if判断一个数值型变量(short、int、long等),应该用if(var==0),表明是与0进行“数值”上的比较;而判断指针则适宜用if(var==NULL),这是一种很好的编程习惯。浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if(x==0.0),则判为错,得0分。

试题2:以下为WindowsNT下的32位C++程序,请计算sizeof的值

voidFunc(charstr[100]){sizeof(str)=}void*p=malloc(100);sizeof(p)=

解答:

sizeof(str)=4sizeof(p)=4

剖析:Func(charstr[100])函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。数组名的本质如下:

(1)数组名指代一种数据结构,这种数据结构就是数组;例如:charstr[10];cout<

输出结果为10,str指代数据结构char[10]。(2)数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改;

charstr[10];

str++;//编译出错,提示str不是左值

(3)数组名作为函数形参时,沦为普通指针。WindowsNT32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof(str)、sizeof(p)都为4。

试题3:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事?least=MIN(*p++,b);

#defineMIN(A,B)((A)<=(B)(A):(B))

MIN(*p++,b)会产生宏的副作用

剖析:这个面试题主要考查面试者对宏定义的使用,宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对“参数”进行的是一对一的替换。程序员对宏定义的使用要非常小心,特别要注意两个问题:(1)谨慎地将宏定义中的“参数”和整个宏用用括弧括起来。所以,严格地讲,下述解答:

#defineMIN(A,B)(A)<=(B)(A):(B)#defineMIN(A,B)(A<=BA:B)

都应判0分;(2)防止宏的副作用。宏定义#defineMIN(A,B)((A)<=(B)(A):(B))对MIN(*p++,b)的作用结果是:((*p++)<=(b)(*p++):(*p++))这个表达式会产生副作用,指针p会作三次++自增操作。除此之外,另一个应该判0分的解答是:

#defineMIN(A,B)((A)<=(B)(A):(B));

这个解答在宏定义的后面加“;”,显示编写者对宏的概念模糊不清,只能被无情地判0分并被面试官淘汰。

试题4:为什么标准头文件都有类似以下的结构?

#ifndef__INCvxWorksh#define__INCvxWorksh#ifdef__cplusplusextern"C"{#endif/*...*/#ifdef__cplusplus}#endif#endif/*__INCvxWorksh*/

解答:头文件中的编译宏

#ifndef__INCvxWorksh

#define__INCvxWorksh#endif的作用是防止被重复引用。

作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在symbol库中的名字与C语言的不同。例如,假设某个函数的原型为:

voidfoo(intx,inty);

试题5:编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”函数头是这样的:

//pStr是指向以''结尾的字符串的指针//steps是要求移动的nvoidLoopMove(char*pStr,intsteps){//请填充...}

正确解答1:

voidLoopMove(char*pStr,intsteps){intn=strlen(pStr)-steps;chartmp[MAX_LEN];strcpy(tmp,pStr+n);//将要移动的部分放入tmp的前部strcpy(tmp+steps,pStr);//将原字符串放入tmp的后部*(tmp+strlen(pStr))='';//保持tmp和原字符串长度一致strcpy(pStr,tmp);}

正确解答2:

voidLoopMove(char*pStr,intsteps){intn=strlen(pStr)-steps;chartmp[MAX_LEN];memcpy(tmp,pStr+n,steps);memcpy(pStr+steps,pStr,n);memcpy(pStr,tmp,steps);}剖析:这个试题主要考查面试者对标准库函数的熟练程度,在需要的时候引用库函数可以很大程度上简化程序编写的工作量。最频繁被使用的库函数包括:(1)strcpy(2)memcpy(3)memset

试题6:已知WAV文件格式如下表,打开一个WAV文件,以适当的数据结构组织WAV文件头并解析WAV格式的各项信息。WAVE文件格式说明表

偏移地址

字节数

数据类型

内容

文件头

00H

4

Char

"RIFF"标志

04H

int32

文件长度

08H

"WAVE"标志

0CH

"fmt"标志

10H

过渡字节(不定)

14H

2

int16

格式类别

16H

通道数

18H

采样率(每秒样本数),表示每个通道的播放速度

1CH

波形音频数据传送速率

20H

数据块的调整数(按字节算的)

22H

每样本的数据位数

24H

数据标记符"data"

28H

语音数据的长度

解答:将WAV文件格式定义为结构体WAVEFORMAT:

typedefstructtagWaveFormat{charcRiffFlag[4];UIN32nFileLen;charcWaveFlag[4];charcFmtFlag[4];charcTransition[4];UIN16nFormatTag;UIN16nChannels;UIN16nSamplesPerSec;UIN32nAvgBytesperSec;UIN16nBlockAlign;UIN16nBitNumPerSample;charcDataFlag[4];UIN16nAudioLength;}WAVEFORMAT;假设WAV文件内容读出后存放在指针buffer开始的内存单元内,则分析文件格式的代码很简单,为:

WAVEFORMATwaveFormat;memcpy(&waveFormat,buffer,sizeof(WAVEFORMAT));

直接通过访问waveFormat的成员,就可以获得特定WAV文件的各项格式信息。剖析:试题6考查面试者组织数据结构的能力,有经验的程序设计者将属于一个整体的数据成员组织为一个结构体,利用指针类型转换,可以将memcpy、memset等函数直接用于结构体地址,进行结构体的整体操作。透过这个题可以看出面试者的程序设计经验是否丰富。

试题7:编写类String的构造函数、析构函数和赋值函数,已知类String的原型为:

classString{public:String(constchar*str=NULL);//普通构造函数String(constString&other);//拷贝构造函数~String(void);//析构函数String&operate=(constString&other);//赋值函数private:char*m_data;//用于保存字符串};解答:

operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:

classAa,b,c;(a*b)=c;//对a*b的结果赋值

操作(a*b)=c显然不符合编程者的初衷,也没有任何意义。剖析:惊讶吗?小小的static和const居然有这么多功能,我们能回答几个?如果只能回答1~2个,那还真得闭关再好好修炼修炼。这个题可以考查面试者对程序设计知识的掌握程度是初级、中级还是比较深入,没有一定的知识广度和深度,不可能对这个问题给出全面的解答。大多数人只能回答出static和const关键字的部分功能。4.技巧题

试题1:请写一个C函数,若处理器是Big_endian的则返回0;若是Little_endian的则返回1解答:

intcheckCPU(){{unionw{inta;charb;}c;c.a=1;return(c.b==1);}}剖析:嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址

存放内容

0x4000

0x34

0x4001

0x12

而在Big-endian模式CPU内存中的存放方式则为:

32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

0x78

0x56

0x4002

0x4003

联合体union的存放顺序是所有成员都从低地址开始存放,面试者的解答利用该特性,轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。如果谁能当场给出这个解答,那简直就是一个天才的程序员。试题2:写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)解答:

intSum(intn){return((long)1+n)*n/2;//或return(1l+n)*n/2;}剖析:对于这个题,只能说,也许最简单的答案就是最好的答案。下面的解答,或者基于下面的解答思路去优化,不管怎么“折腾”,其效率也不可能与直接return(1l+n)*n/2相比!

intSum(intn){longsum=0;for(inti=1;i<=n;i++){sum+=i;}returnsum;}所以程序员们需要敏感地将数学等知识用在程序设计中。

6.C++中引用与指针的区别;答:1引用实际上是所引用的对象或变量的别名,而指针是包含所指向对象或变量的地址的变量。2引用在定义时必须初始化,而指针在定义时不初始化。3不可以有努NULL的引用,而可以有指向NULL的指针。4引用在初始化后不可以改变引用关系,而指针可以随时指向其他对象(非const指针)。

8.以下关键字的含义与用法:extern,extern“C”,static,explicit,register,#undef,#ifndef

9.什么是函数重载与覆盖?为什么C不支持函数重载?为什么C++能支持函数重载?10.VC中,编译工具条内的Debug与Release选项是什么含义?

Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。Debug带有大量的调试代码,运行时需要相应的运行库,发布模式程序紧凑不含有调试代码和信息,直接可以运行(如果不需要运行库)

11.编写my_memcpy函数,实现与库函数memcpy类似的功能,不能使用任何库函数;void*mymemcpy(void*pvTo,constchar*pvFrom,size_tsize){assert((dest!=NULL)&&(src!=NULL));byte*psTo=(byte*)pvTo;byte*psFrom=(byte*)pvFrom;while(size-->0){*psTo++=*psFrom++;}returnpvTo;}

12.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数;答:char*my_strcpy(char*strdest,constchar*strsrc){assert((strdest!=NULL)&&(strsrc!=NULL))char*address=strdest;while((*strdest++=*strsrc++)!=NULL)returnaddress;}

13.编写gbk_strlen函数,计算含有汉字的字符串的长度,汉字作为一个字符处理;已知:汉字编码为双字节,其中首字节<0,尾字节在0~63以外;(如果一个字节是-128~127)

14.函数assert的用法答:断言assert是仅在debug版本起作用的宏,用于检查“不应该“发生的情况。程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。

15.为什么在头文件的最前面都会看到这样的代码:#ifndef_STDIO_H_#define_STDIO_H_

头文件中的#ifndef一般格式是这样的#ifndef<标识>,#define<标识>;<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h

#ifndef_STDIO_H_#define_STDIO_H_

16.为什么数组名作为参数,会改变数组的内容,而其它类型如int却不会改变变量的值?答:当数组名作为参数时,传递的实际上是地址。而其他类型如int作为参数时,由于函数参数值实质上是实参的一份拷贝,被调函数内部对形参的改变并不影响实参的值。

选择、填空、简答、程序都有。基本上是C和网络方面的DD,还有几道概率和推理

snmp,arp,ospf协议,c++的异常处理,局部静态变量,全局变量的存放问题,

一道是测试时的那个覆盖问题,一道是int型溢出问题(没考虑到!),其他的基本满分^_^程序题为把一个unint转4进制村数组,考验编程的严密性,还有一道是比较发散的思路题

前面50分10个选择题,前七个是C程序,后三个数学题。都计较简单,呵呵。中间是两个填空题,各填三空,题一为比较两个输入字符串的大小,简单。题二是填写程序注释,对内存进行操作方面的,如检查内存溢出,内存泄漏,避免产生野指针之类的。后面是两道综合题,题一写C程序函数,将一个整数转换为4进制的字符串;题二要求提供解决一个代理服务器由于应答无响应而导致的资源得不到释放的解决方案。题一简单,题二偶就模仿TCP虚电路连接的算法,写了一下自己的思路和主要步骤,感觉应该不会偏得很远!

做完这些题后还剩十分钟,后面还有10道选择题为通讯知识题,为附加题,都是关于网络,偏数据链路层和网络层的知识,

刚刚考完华为3com的软件笔试,从9:00-10:00,共一小时。前面50分10个选择题,前七个是C程序,后三个数学题。中间是两个填空题,各填三空,题一为比较两个输入字符串的大小,简单。题二是填写程序注释,对内存进行操作方面的,如free(p)什么作用。后面是两道综合题,题一写C程序函数,将一个整数转换为4进制的字符串;题二要求提供解决一个代理服务器由于应答无响应而导致的资源得不到释放的解决方案。最后20分共10道选择题为通讯知识题,关于路由器,网络方面的知识,如果看过的话不难。

二面是hr面,基本都是常规问题,什么别人对我的评价啊,自己的职业规划啊,可不可以提前上班啊,云云!二面完后填了个表,都到11点了,被通知不早了,明天早上继续三面。

c题目比较多,一道网络选择,几道操作系统题目选择,还有两道大题,关于双向链表和哈希算法的。内存拷贝memcopy问题,插入排序问题

笔试20题通讯多选,10题计算机多选。通讯考的都是基础知识,但是不是通讯专业的一般都要靠摸的,计算机考的比较有深度,主要是c和c++;类的继承关系(初始化顺序);二*树的先序、中序、后序,知道其中两个,推导剩下的一个;i++和++i问题。例如:inti=1;intj;j=(++i)+(++i)+(++i)+(++i);//j=15

inti=1;intj;j=(++i)+(++i)+(i++)+(i++)+(++i);//j=16moto面试中英语口语很重要,技术面试一开始就是用英语的,后来不行了,只好用中文。第二面的那个人力资源的主管就是全英文了,一路面下来不吐一个汉字。二面的时候主要就是聊天了,问问你的爱好,和同学关系什么的,主要是看口语,以及你个人的性格。moto待遇6000+770。干满三年一次性发6000*20%的住房公积金

//计算字符串长度的函数intstrlen_mod(char*str){intcount=0;while(str[count]!='/0'){++count;}returncount;}//将字符串反转输出的函数voidprint_reverse(char*str){size_tsize=strlen(str);intsize2=strlen_mod(str);printf("Thelengthof%sis%d###%d/n",str,size,size2);inti;chartemp='';for(i=0;i

Whatwillprintout输出结果是main(){char*p1=“name”;char*p2;p2=(char*)malloc(20);memset(p2,0,20);//while(*p2++=*p1++);printf(“%sn”,p2);}Answer:emptystring.Whatwillbeprintedastheresultoftheoperationbelow:main(){intx=20,y=35;x=y+++x++;y=++y+++x;printf(“%d%dn”,x,y);}Answer:5794

Whatwillbeprintedastheresultoftheoperationbelow:main(){intx=5;printf(“%d,%d,%dn”,x,x<<2,x>>2);}Answer:5,20,1Whatwillbeprintedastheresultoftheoperationbelow:#defineswap(a,b)a=a+b;b=a-b;a=a-b;voidmain(){intx=5,y=10;swap(x,y);printf(“%d%dn”,x,y);swap2(x,y);printf(“%d%dn”,x,y);}intswap2(inta,intb){inttemp;temp=a;b=a;a=temp;return0;}Answer:10,510,5

charx[]="programming";

chary[]="Fortran";

inti=0;

while(x[i]!='/0'&&y[i]!='/0')

{if(x[i]==y[i])printf("%c",1);

elsei++;}

【1】A)x[i++]B)y[++i]C)x[i]D)y[i]*218D下面描述正确的是__.A)两个字符串所包含的字符个数相同时,才能比较字符串B)字符个数多的字符串比字符个数少的字符串大C)字符串"STOP"与"STOp"相等D)字符串"hat"小于字符串"he"

A)aaB)aa()aaD)aabb

bbbbbbcc

ccccdddd

ccddddee

*225D当运行以下程序时,从键盘输入:abcdd(表示回车),则下面程序的运行结果是#include#difineN6main(){charc[N];inti=0;for(;ifor(i=0;i

实现思想:

把两个无序的数组首先排序,然后再按照链表结构把它们分别构造好,然后再把两个有序链表合并。

intconstarray1_size=5;//数组1的长度intconstarray2_size=7;//数组2的长度//链表结构体typedefstructListNode{intdata;ListNode*next;}ListNode;

//合并两个有序链表返回不带头结点的头指针ListNode*MergeList(ListNode*p,ListNode*q){ListNode*h,*r;h=newListNode;h->next=NULL;r=h;while(p!=NULL&&q!=NULL){if(p->data<=q->data){r->next=p;r=p;p=p->next;}else{r->next=q;r=q;q=q->next;

}}if(p!=NULL)r->next=p;elser->next=q;p=h;h=h->next;deletep;returnh;}

//构造一个链表(没有头结点的)ListNode*GenerateList(intarray[],intlength){ListNode*h,*temp,*old_head;h=newListNode;h->next=NULL;temp=h;for(inti=0;idata=array[i];temp->next=p;temp=p;}temp->next=NULL;old_head=h;h=h->next;deleteold_head;returnh;}//打印链表voidPrint_List(ListNode*h){ListNode*p;p=h;for(;p!=NULL;p=p->next)printf("%d",p->data);

}//引入冒泡排序算法

voidSwap(int*a,int*b){inttemp;temp=*a;*a=*b;*b=temp;}voidBubble_Sort(int*array,intlength){intpass,j;for(pass=1;pass<=length-1;pass++)for(j=0;j<=length-2;j++)if(array[j]>array[j+1])Swap(&array[j],&array[j+1]);}

/*********************OK,所有准备工作已经做好,开始main()函数**********/

//输入字符表示结束int_tmain(intargc,_TCHAR*argv[]){charend;intList1[array1_size]={9,5,6,10,45};intList2[array2_size]={3,1,4,6,7,9,0};Bubble_Sort(List1,array1_size);Bubble_Sort(List2,array2_size);ListNode*m_list1,*m_list2,*m_list;m_list1=GenerateList(List1,array1_size);m_list2=GenerateList(List2,array2_size);m_list=MergeList(m_list1,m_list2);Print_List(m_list);scanf("%c",&end);return0;}

classA{public:A(){doSth();}virtualvoiddoSth(){printf("IamA");}};classB:publicA{public:virtualvoiddoSth(){printf("IamB");}};Bb;

执行结果是什么?为什么?答:执行结果是IamA因为b对象构造时调用基类A的构造函数A(),得此结果。

3、输入二个64位的十进制数,计算相乘之后的乘积。答:以下代码为网上别人贴出的,输入任意位数十进制数(包括小数,负数)都可以得出正确结果。思路是:将大数当作字符串进行处理,也就是将大数用10进制字符数组进行表示,然后模拟人们手工进行“竖式计算”的过程编写乘法。

intel的面试题:不用任何局部和全局变量实现intstrlen(char*a)

intstrlen(char*a)

if(0==*a)

return0;else

return1+strlen(a+1);

传说中的baidu笔试题(另一个版本)

一、选择题:15分共10题1.已知一个线性表(38,25,74,63,52,48),采用的散列函数为Hash($Key)=$Keymod7,将元素散列到表长为7的哈希表中存储。请选择后面两种冲突解决方法分别应用在该散列表上进行等概率成功查找的平均查找长度,拉链法,线性探测法.A.1.0B.1.5C.1.7D.2.0E.2.3F.7/6G.4/3H.3/2

2.需要将OS缓冲区的数据刷新到硬盘,可以调用的函数有(多选):A.fflush()B.fsync()C.sync()D.writev()

3.下面哪个shell语句不能打印出用户主目录的路径?A.echo“$HOME”B.echo~C.echo`$HOME`D.echo$HOME

4.最坏情况下,合并两个大小为n的已排序数组所需要的比较次数A.2nB.2n-1C.2n+1D.2n-2

5.一个B类网的子网掩码是255.255.240.0,这个子网能拥有的最大主机数是:A.240B.255C.4094D.65534

6.以下代码执行后,val的值是___:unsignedlongval=0;chara=0x48;charb=0x52;val=b<<8|a;A20992B21064C72D0

7.内存的速度远远高于磁盘速度,所以为了解决这个矛盾,可以采用:A并行技术B虚存技术C缓冲技术D通道技术

9.同一进程下的线程可以共享以下A.stackB.datasectionC.registersetD.threadID

10.以下哪种操作最适合先进行排序处理?A找最大、最小值B计算算术平均值C找中间值D找出现次数最多的值

2.(14分)函数A将字符串str1转成小写,并打印出转化前后的字符串。另外,改错时不能改变函数的接口和主要思路。改错时,请指出行号。1#include2#include5char*str1="ABDFLjlero我们都是saf";7char*ToLower(chars[])8{9staticsize_ti=sizeof(s);1011for(i;i>=0;i--){12if(s[i]>"A"&&s[i]<"Z"){13s[i]+=26;14}15}16returns;

}19intA()20{21printf("oldstr[%s]afterlower[%s]n",str1,ToLower(str1));22}

1.两个已排序的整型数组,求交集,最快算法输入:两个已排序的整型数组(inta[m],b[n])输出:两个数组的交集

四、设计题:35分共1题注意:请尽可能详细描述你的数据结构、系统架构、设计思路等。建议多写一些伪代码或者流程说明。1.考虑一个字符串替换的过程,在一个文本文件中含有一些文本内容和一些需要替换的变量,变量的格式为“$Var$”,原来的“$”使用“$$”进行转义,原来的“$$”表示为“$$$”。我们将含有变量的文件称为模板(文件名为t),文本文件的平均长度为100K。另外,还有一系列的变量文件,里面为变量名和变量值的对应关系(文件名为1.v,2.v…n.v),每个变量文件包含的变量数在百万数量级,且变量排列次序不定。现要求将,模板里的变量分别用变量文件里的变量替换,并将生成的文件写成(1.r,2.r…n.r)。要求:从算法和实现上和实现技术上的细节对程序进行优化,尽量使程序高效。程序运行环境为2G内存,4CPU。阐明主要思路,给出伪码和说明,可以着重指出你使用的优化技术。例子:模板文件为Thisisan$FF$$$.Ilike$FF$and$FA$。变量文件为1.vFF:bananaFA:apple2.vFA:苹果FF:香蕉则生成文件为1.rThisisanbanana$$.Ilikebananaandapple。2.rThisisan香蕉$$.Ilike香蕉and苹果。

百度笔试题:

写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。函数接口为:intfind_orderk(constint*narry,constintn,constintk)要求算法复杂度不能是O(n^2)

参考答案:

1

/***************************************输入:n:数组元素的个数k:第几大的数a:待查找的数组元素****************************************/#include

#include

#include

#defineN100

voidRand_select(int*,int,int);

intpartition(int*,int,int);

intswap(int&,int&);

intk,ans;

intmain()

intn,a[N],i;

while(scanf("%d%d",&n,&k)!=EOF)

srand(time(NULL));

k--;

for(i=0;i

scanf("%d",a+i);

Rand_select(a,0,n-1);

printf("%d/n",ans);

return0;

voidRand_select(inta[],intp,intq)

intm;

if(p<=q)

m=partition(a,p,q);

if(k==m)

ans=a[m];

return;

elseif(k>m)

Rand_select(a,m+1,q);

else

Rand_select(a,p,m-1);

intpartition(inta[],intp,intq)

intlast,i;

if(q!=p)

swap(a[rand()%(q-p)+p],a[p]);

for(i=p+1,last=p;i<=q;i++)

if(a[i]>=a[p])

swap(a[i],a[++last]);

swap(a[last],a[p]);

returnlast;

intswap(int&p,int&q)

inttemp=p;

p=q;

q=temp;

2可以先用快速排序进行排序,其中用另外一个进行地址查找代码如下,在VC++6.0运行通过。//快速排序

#includeusingnamespacestd;intPartition(int*L,intlow,inthigh){inttemp=L[low];intpt=L[low];while(low=pt)--high;L[low]=L[high];while(low>t;while(t!=-1){narry[sum]=t;addr[sum-1]=t;sum++;cin>>t;}sum-=1;QSort(narry,1,sum);for(inti=1;i<=sum;i++)cout<>k;intaa=1;intkk=0;for(;;){if(aa==k)break;if(narry[kk]!=narry[kk+1]){aa+=1;kk++;}

cout<<"TheNO."<

难得啊,居然在今天看到这个题。我去年笔试baidu的时候也作过,当时写的是这个答案,高手分析下:#include#include#include#include#includeusingnamespacestd;#definen10#definek5intmain(intargc,char*argv[]){srand((unsigned)time(NULL));if(k>n){cout<<"error!"<src;cout<<"源"<maxNum;//顺序存入最大k个数,第一个为最大的,最后一个为第k大for(i=0;i=maxNum[j])//比当前的大,则放入当前位置,后面的数字依次后退{for(inti1=maxNum.size()-1;i1>j;i1--){maxNum[i1]=maxNum[i1-1];}maxNum[j]=src[i];break;}}}

思想:1.considerif(k>n)exit(0)2.ifnumbernisabigone,usepile/stacksort3.ifnumbernisasmallone,usequicksort;4;findyourknumberandprintinthescreen;find_orderk(constint*narry,constintn,constintk){if(n>k)exit(0);sort(*narry);for(i=0;i

===================================================================函数功能:返回一个第K小的元素(采用快排思想)参数:(Ta[]目标数组||intl左边界||intr右边界||intk第几小元素)=================================================================templateTselect(Ta[],intl,intr,intk){if(l>=r)returna[l];//参数错误直接返回inti=l;intj=r+1;Tpivot=a[i];while(true){do{i=i+1;}while(a[i]>pivot);do{j=j-1;}while(a[j]=j){break;}Swap(a[i],a[j]);}if(j-l+1==k)//如果当前基准适合的位置刚好是K的话,则满足了条件返回基准值{returnpivot;}a[l]=a[j];a[j]=pivot;if(j-l+1

分析程序:

#include

classA

public:

staticintnumA;

A()

num++;

};

~A()

num--;

virtualvoidprint(void)

printf("classA,mum:%d/n",num);

voidtest(void)

printf("classAtest/n");

print();

classB:publicA

staticintnumB;

B()

~B()

virtualvoidprint()

printf("classB,num:%d/n",num);

printf("classBtest/n");

classC

printf("classB/n");

intA::numA=0;

intB::numB=0;

voidmain()

Bb;

b.print();

b.test();

printf("1/n");

A*a;

B*p=new(classB);

p->print();

p->test();

a=p;

a->print();

a->test();

delete(a);

printf("sizeof(C):%d/n",sizeof(C));

classA1

A1(){doSth();}

virtualvoiddoSth(){printf("IamA/n");}

voidtest(){doSth();}

classB1:publicA1

virtualvoiddoSth(){printf("IamB/n");}

B1*b=newB1;

b->test();

1用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。

classClxBase{public:ClxBase(){};virtual~ClxBase(){};virtualvoidDoSomething(){cout<<"DosomethinginclassClxBase!"<

ClxBase*pTest=newClxDerived;pTest->DoSomething();deletepTest;

的输出结果是:

DosomethinginclassClxDerived!OutputfromthedestructorofclassClxDerived!

这个很简单,非常好理解。但是,如果把类ClxBase析构函数前的virtual去掉,那输出结果就是下面的样子了:

THE END
1.shake是什么意思,shake怎么读,shake翻译为:摇动;震动;哆嗦;混...shake shake是什么意思,shake怎么读语音: 英音[?e?k] 美音[?ek] shake 基本解释 vt.动摇;摇头;使发抖;使心绪不宁[烦恼,惊吓] vi.摇(出),抖(掉);握手;(嗓音)颤抖 n.摇动;震动;哆嗦;混合饮料 shake 变化形式 第三人称单数: shakes 过去式: shook...https://fy.tingclass.net/w/shake
2.shake怎么读shake的意思shake怎么读 shake的意思百步穿杨 小学教育 精选回答 1、shake单词发音:英[?e?k],美[?ek]。 2、shake,英语单词,名词、动词,作动词时译为“动摇;摇动;震动;握手;动摇;摇动;发抖”,作名词时译为“摇动;哆嗦,奶昔”。 3、第三人称单数:shakes。 4、现在分词:shaking。 5、过去式:shook。 6、过去分词:...https://edu.iask.sina.com.cn/jy/2WxlEawL3zR.html
3.shake怎么读shake怎么读 扫码下载作业帮搜索答疑一搜即得 答案解析 查看更多优质解析 解答一 举报 英[?e?k]美[?ek] 解析看不懂?免费查看同类题视频解析查看解答 相似问题 shake 怎么读? shake怎么读? shake head怎么读? 特别推荐 热点考点 2022年高考真题试卷汇总 2022年高中期中试卷汇总 2022年高中期末试卷汇总 ...https://qb.zuoyebang.com/xfe-question/question/e124592a5eac1b1d0852d2d01060d206.html
4.shake是什么意思shake怎么读shake的同义词shake的反义词查字典(chazidian.com.cn)在线英汉词典为您提供:shake是什么意思,shake怎么读,关于shake的例句,关于shake的谚语,关于shake的名言,shake的同义词,shake的反义词等信息。http://www.hanyucidian.cn/w/shake/
1.shake怎么读常见问题shake怎么读 杭州编辑 2022-03-08 13:53 音标 英语音标:[?e?k] 美语音标:[?ek] 翻译 v.摇动;震动;握手 n.片刻;摇晃;奶昔 例句 Give the bottle a good shake before opening. 打开瓶子前,先使劲摇一摇。 This announcement is bound to shake the confidence of the industry. 这个声明必将...https://hz.xhd.cn/m/ycwz/902786.html
2.shake是什么意思shake怎么读中文意思用法shake shake是什么意思、shake怎么读 读音:英[?e?k] 美[?ek] shake 基本解释 vt. 动摇;摇头;使发抖;使心绪不宁[烦恼,惊吓] vi. 摇(出),抖(掉);握手;(嗓音)颤抖 n. 摇动;震动;哆嗦;混合饮料 shake 词性变化 过去式:shook 现在分词:shaking 过去分词:shaken 第三人称单数:shakes 名词复数形式:...https://danci.gjcha.com/shake.html
3.shakeone'shead英语怎么读,翻译成中文是什么意思单词shake one's head英语怎么读,用英语怎么说,美式、英式音标读音;shake one's head英语翻译成中文是什么意思;写典通,为您提供shake one's head英语词典真人发音.https://yingyu.xiediantong.com/cidian/7ad90b6f2b199ce8/
4.SHAKE怎么读奇幻SHAKE怎么读TXT免费下载《SHAKE怎么读》情节跌宕起伏、扣人心弦,是一本情节与文笔俱佳的奇幻小时,小华出大作文学网']?>转载收集SHAKE怎么读最新章节。http://www.xhcxdz.com/novel/BSo1uHRnDY.html
5.shake什么意思怎么读?单词用法记忆法发音音标反义词同义...单词:shake发音、音标、怎么读? shake音标:[?e?k] 单词:shake的单词意思解释释义 n. 摇动, 震动vt. 摇动, 动摇, 使震动, 挥舞vi. 震动, 发抖, 动摇【机】 木材裂纹, 摇动; 摇荡, 震动相关词组: shake and be friends give...the shake in half a shake put sb on the shake put the shake ...https://english.downyuan.com/index.php?a=index&aid=o5579&c=View&m=home
6.shakeit是什么意思shakeit的中文翻译例句用法shakeit是什么意思 shakeit怎么读 shakeit在线翻译 shakeit中文意思 shakeit的意思 shakeit的翻译 shakeit的解释 shakeit的发音 shakeit的同义词 shakeit的反义词 shakeit的用法与例句 shakeit的相关词组短语 shakeit意思是什么 shakeit怎么翻译 shakeit的中文翻译 shakeit的意思翻译 shakeit在线翻译查询 英汉词典...https://danci.gei6.com/Shakeit.html
7.汾酒怎么读,xun这个拼音怎么读青花汾酒好喝再看看别人怎么说的。 6,shake怎么读 shake英 [?e?k]美 [?ek]vt.动摇; 摇头; 使发抖; 使心绪不宁[烦恼,惊吓]vi.摇(出),抖(掉); 握手; (嗓音)颤抖n.摇动; 震动; 哆嗦; 混合饮料 岁K 7,汾念什么可以组什么词 读音: [fén] 部首: 氵 五笔: IWVN 释义: 〔~河〕水名,在中国山...https://www.meijiu.com/cs/780780.html
8.震怎么读震怎么念震怎么拼音震字组词震怎么读,震怎么念,震拼音,震组词震 拼音zhèn 部首雨部 五笔fdfe 笔画15 画 组词震组词 震字基本解释 震zhèn疾雷(霹雳)使物体振动:“震夷伯之庙”。震霆。雷:“烨烨震电。”巨大的力等使物体剧烈颤动:震撼。震荡。震颤。震响。震动。声震遐迩。迅速或剧烈地颤动:地震。身子不由得一震。特指“地震”...https://m.055401.com/dictionary18951.html
9.英语阅读理解及答案49. Why did the poor man shake his head when Edward spoke to him? A. He couldn’t understand the boy B. He wouldn’t accept the money C. He didn’t like the boy’s language D. He was too cold to say anything 50. How much did Edward give the poor family? A. One dollar B....https://m.ruiwen.com/yuedulijie/8199732.html