下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 笔试题华为笔试+华为笔试[1].doc华为笔试.doc

笔试题华为笔试+华为笔试[1].doc华为笔试.doc.doc

笔试题华为笔试+华为笔试[1].doc华为笔试.doc

passionthean
2018-09-07 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《笔试题华为笔试+华为笔试[1].doc华为笔试.docdoc》,可适用于工程科技领域

为笔试题By 半匹狼发表于:: 华为从事通信网络技术与产品的研究、开发、生产与销售是中国电信市场的主要供应商之一并已成功进入全球电信市场。写出判断ABCD四个表达式的是否正确,若正确,写出经过表达式中a的值(分)inta=(A)a=(a)(B)a=(a)(C)(a)=a(D)(a)=(a)a=答:C错误左侧不是一个有效变量不能赋值可改为(a)=a改后答案依次为,,,某位系统下,C程序请计算sizeof的值(分)charstr=“wwwibegroupcom”char*p=strintn=请计算sizeof(str)=?()sizeof(p)=?()sizeof(n)=?()voidFoo(charstr){请计算sizeof(str)=?()}void*p=malloc()请计算sizeof(p)=?()答:()()()()()回答下面的问题(分)()头文件中的ifndefdefineendif干什么用?预处理答:防止头文件被重复引用()#include<filenameh> 和#include“filenameh”有什么区别?答:前者用来包含开发环境提供的库头文件后者用来包含自己编写的头文件。()在C程序中调用被C编译器编译后的函数为什么要加extern“C”声明?答:函数和变量被C编译后在符号库中的名字与C语言的不同被extern"C"修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同C程序不能直接调用C函数。C提供了一个C连接交换指定符号extern“C”来解决这个问题。()switch()中不允许的数据类型是答:实型回答下面的问题(分)()VoidGetMemory(char**p,intnum){*p=(char*)malloc(num)}voidTest(void){char*str=GetMemory(str,)strcpy(str,"hello")printf(str)}请问运行Test函数会有什么样的结果?答:输出“hello”()voidTest(void){char*str=(char*)malloc()strcpy(str,“hello”)free(str)if(str!=){strcpy(str,“world”)printf(str)}}请问运行Test函数会有什么样的结果?答:输出“world”()char*GetMemory(void){charp="helloworld"returnp}voidTest(void){char*str=str=GetMemory()printf(str)}请问运行Test函数会有什么样的结果?答:无效的指针输出不确定编写strcat函数(分)已知strcat函数的原型是char*strcat(char*strDest,constchar*strSrc)其中strDest是目的字符串strSrc是源字符串。()不调用CC的字符串库函数请编写函数strcat答:VC源码:char*cdeclstrcat(char*dst,constchar*src){char*cp=dstwhile(*cp)cp*findendofdst*while(*cp=*src)*Copysrctoendofdst*return(dst)*returndst*}()strcat能把strSrc的内容连接到strDest为什么还要char*类型的返回值?答:方便赋值给其他变量MFC中CString是类型安全类么?答:不是其它数据类型转换到CString可以使用CString的成员函数Format来转换C中为什么用模板类。答:()可用来创建动态增长和减小的数据结构()它是类型无关的因此具有很高的可复用性。()它在编译时而不是运行时检查数据类型保证了类型安全()它是平台无关的可移植性()可用于基本数据类型CSingleLock是干什么的。答:同步多个线程对一个数据类的同时访问NEWTEXTMETRIC是什么。答:物理字体结构用来设置字体的高宽大小程序什么时候应该使用线程什么时候单线程效率高。答:.耗时的操作使用线程提高应用程序响应.并行操作时使用线程如CS架构的服务器端并发线程响应用户的请求。.多CPU系统中使用线程提高CPU利用率.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程成为几个独立或半独立的运行部分这样的程序会利于理解和修改。其他情况都使用单线程。Windows是内核级线程么。答:见下一题Linux有内核级线程么。答:线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分线程有两种类型:“用户级线程”和“内核级线程”。用户线程指不需要内核支持而在用户程序中实现的线程其不依赖于操作系统核心应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。这种线程甚至在象DOS这样的操作系统中也可实现但线程的调度需要用户程序完成这有些类似Windowsx的协作式多任务。另外一种则需要内核的参与由内核完成线程的调度。其依赖于操作系统核心由内核的内部需求进行创建和撤销这两种模型各有其好处和缺点。用户线程不需要额外的内核开支并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求但是当一个线程因IO而处于等待状态时整个进程就会被调度程序切换为等待状态其他线程得不到运行的机会而内核线程则没有各个限制有利于发挥多处理器的并发优势但却占用了更多的系统开支。WindowsNT和OS支持内核线程。Linux支持内核级的多线程C中什么数据分配在栈或堆中New分配数据是在堆还是栈中?答:栈:存放局部变量函数调用参数,函数返回值函数返回地址。由系统管理堆:程序运行时动态申请new和 malloc申请的内存就在堆上使用线程是如何防止出现大的波峰。答:意思是如何防止同时产生大量的线程方法是使用线程池线程池具有可以同时提高调度效率和限制资源使用的好处线程池中的线程达到最大数时其他线程就会排队等候。函数模板与类模板有什么区别?答:函数模板的实例化是由编译程序在处理函数调用时自动完成的而类模板的实例化必须由程序员在程序中显式地指定。一般数据库若出现日志满了会出现什么情况是否还能使用?答:只能执行查询等读操作不能执行更改备份等写操作原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。SQLServer是否支持行级锁有什么好处?答:支持设立锁机制主要是为了对并发操作进行控制对干扰进行封锁保证数据的一致性和准确性行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。如果数据库满了会出现什么情况是否还能使用?答:见关于内存对齐的问题以及sizof()的输出答:编译器自动对齐的原因:为了提高程序的性能数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于为了访问未对齐的内存处理器需要作两次内存访问然而对齐的内存访问仅需要一次访问。inti=,j=,k=k*=ijk最后的值是?答:此题考察优先级实际写成:k*=(ij)赋值运算符优先级最低对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现答:将操作多个表的操作放入到事务中进行处理TCPIP建立连接的过程(wayshake)答:在TCPIP协议中TCP协议提供可靠的连接服务采用三次握手建立一个连接。  第一次握手:建立连接时客户端发送syn包(syn=j)到服务器并进入SYNSEND状态等待服务器确认第二次握手:服务器收到syn包必须确认客户的SYN(ack=j)同时自己也发送一个SYN包(syn=k)即SYNACK包此时服务器进入SYNRECV状态  第三次握手:客户端收到服务器的SYN+ACK包向服务器发送确认包ACK(ack=k)此包发送完毕客户端和服务器进入ESTABLISHED状态完成三次握手。ICMP是什么协议,处于哪一层答:Internet控制报文协议处于网络层(IP层)触发器怎么工作的答:触发器主要是通过事件进行触发而被执行的当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时数据库就会自动执行触发器所定义的SQL语句从而确保对数据的处理必须符合由这些SQL语句所定义的规则。winsock建立连接的主要实现步骤答:服务器端:socker()建立套接字绑定(bind)并监听(listen)用accept()等待客户端连接。客户端:socker()建立套接字连接(connect)服务器连接上后使用send()和recv()在套接字上写读数据直至数据交换完毕closesocket()关闭套接字。服务器端:accept()发现有客户端连接建立一个新的套接字自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据直至数据交换完毕closesocket()关闭套接字。动态连接库的两种方式答:调用一个DLL中的函数有两种方法:.载入时动态链接(loadtimedynamiclinking)模块非常明确调用某个导出函数使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库导入库向系统提供了载入DLL时所需的信息及DLL函数定位。.运行时动态链接(runtimedynamiclinking)运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后模块可以通过调用GetProcAddress获取DLL函数的出口地址然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。IP组播有那些好处答:Internet上产生的许多新的应用特别是高带宽的多媒体应用带来了带宽的急剧消耗和网络拥挤问题。组播是一种允许一个或多个发送者(组播源)发送单一的数据包到多个接收者(一次的同时的)的网络技术。组播可以大大的节省网络带宽因为无论有多少个目标地址在整个网络的任何一条链路上只传送单一的数据包。所以说组播技术的核心就是针对如何节约网络资源的前提下保证服务质量。Paper: 找错voidtest(){charstringchar*str=""strcpy(string,str)}答:表面上并且编译都不会错误。但如果string数组原意表示的是字符串的话那这个赋值就没有达到意图。最好定义为charstring这样最后一个元素可以存储字符串结尾符''voidtest(){charstring,strfor(intI=I<I){strI='a'}strcpy(string,str)}答:strcpy使用错误strcpy只有遇到字符串末尾的''才会结束而str并没有结尾标志导致strcpy函数越界访问不妨让str=''这样就正常了。voidtest(char*str){charstringif(strlen(str)<=){strcpy(string,str)}}答:这又会出现第一道改错题的错误了。strlen(str)算出来的值是不包含结尾符''的如果str刚好为个字符+结尾符string就得不到结尾符了。可将strlen(str)<=改为strlen(str)<。找错#defineMAXSRMDSNgetSRMno(){staticintSRMnointIfor(I=I<MAXSRMI,SRMNO){SRMno=MAXSRMif(MYSRMstate==IDLE){break}}if(I>=MAXSRM)return(SRM)elsereturnSRMno}答:我不知道这段代码的具体功能但明显有两个错误SRMno没有赋初值由于static的声明使该函数成为不可重入(即不可预测结果)函数因为SRMno变量放在程序的全局存储区中每次调用的时候还可以保持原来的赋值。这里应该去掉static声明。写出程序运行结果intsum(inta){autointc=staticintb=c=b=return(abc)}voidmain(){intIinta=for(I=I<I){printf("d,",sum(a))}}答:,,,,该题比较简单。只要注意b声明为static静态全局变量其值在下次调用时是可以保持住原来的赋值的就可以。intfunc(inta){intbswitch(a){case:b=case:b=case:b=default:b=}returnb}则func()=答:func()=因为没有break语句switch中会一直计算到b=。这是提醒我们不要忘了break。:intaa=a=a=int*p,*qp=aq=a则aqp=答:aqp=a=这题是要告诉我们指针的运算特点定义int**a,则变量占有的内存空间为:答:此处定义的是指向指针的指针数组对于位系统指针占内存空间字节因此总空间为××=。编写一个函数要求输入年月日时分秒输出该年月日时分秒的下一秒。如输入年月日时分秒则输出年月日时分秒。答:*输入年月日时分秒输出年月日时分秒的下一秒输出仍然在原内存空间*voidNextMinute(int*nYear,int*nMonth,int*nDate,int*nHour,int*nMinute,int*nSecond){intnDays(*nSecond)秒加if(*nSecond>=)秒满做出特殊处理下面时日月等类同{*nSecond=(*nMinute)if(*nMinute>=){*nMinute=(*nHour)if(*nHour>=){*nHour=(*nDate)switch(*nMonth){case:case:case:case:case:case:case:nDays=breakcase:判断闰年if(*nYear==||*nYear!=*nYear==){nDays=}else{nDays=}breakdefault:nDays=break}if(*nDate>nDays){*nDate=(*nMonth)if(*nMonth>){*nMonth=(*nYear)}}}}}}*示例可运行代码*voidmain(){intnYear=,nMonth=,nDate=,nHour=,nMinute=,nSecond=NextMinute(nYear,nMonth,nDate,nHour,nMinute,nSecond)printf("Theresult:dddd:d:d",nYear,nMonth,nDate,nHour,nMinute,nSecond)}paper:.请你分别画出OSI的七层网络结构图和TCPIP的五层结构图。答:OSI七层网络结构图:应用层表示层会话层传输层网络层数据链路层物理层TCPIP的五层结构图:应用层运输层网络层数据链路层物理层.请详细地解释一下IP协议的定义在哪个层上面?主要有什么作用?TCP与UDP呢?答:IP是InternetProtocol的简称是网络层的主要协议作用是提供不可靠、无连接的数据报传送。TCP是TransmitControlProtocol(传输控制协议)的缩写在运输层TCP提供一种面向连接的可靠的字节流服务UDP是UserDatagramProtocol(用户数据报协议)的缩写在运输层UDP提供不可靠的传输数据服务.请问交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的?答:交换机属于OSI第二层即数据链路层设备。它根据MAC地址寻址通过站表选择路由站表的建立和维护由交换机自动进行。路由器属于OSI第三层即网络层设备它根据IP地址进行寻址通过路由表路由协议产生。交换机最大的好处是快速路由器最大的好处是控制能力强。.请问C的类和C里面的struct有什么区别?答:struct的成员的默认访问说明符为Public而class的成员的默认访问说明符为Private。其他没有区别.请讲一讲析构函数和虚函数的用法和作用。答:析构函数是在对象生存期结束时自动调用的函数用来释放在构造函数分配的内存。虚函数是指被关键字virtual说明的函数作用是使用C语言的多态特性.全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?答:一些变量在整个程序中都是可见的它们称为全局变量。一些变量只能在一个函数中可知称为局部变量。这就是他们的区别。在任何函数外面定义的变量就是全局变量在函数内部定义的变量是局部变量这是它们在程序中的实现过程。操作系统和编译器是根据程序运行的内存区域知道他们的程序的全局数据放在所分配内存的全局数据区程序的局部数据放在栈区。.是多少位的系统?在数据总线上是怎么实现的?答:的机器字长是位使用个引脚的个做地址数据复用引腿来传输数据一次读写过程由一个基本总线周期完成它由个时钟(CLK)周期组成按时间顺序定义为T、T、T、T。在T期间发出访问目的地的地址信号和地址锁存选通信号ALET期间发出读写命令信号RD、WR及其它相关信号T期间完成数据的访问T结束该总线周期。可见地址与数据信号不会同时出现在一个时钟(CLK)周期二者可以分时复用同一组引线。普天C笔试题By 半匹狼发表于:: 普天是南京一家通信公司全称为:南京普天通信股份有限公司实现在双向链表中删除一个节点P和在节点P后插入一个节点写出这两个函数template<typenameElemType>typedefstructDulNode{   structDulNode*prior              前驱指针   ElemTypedata                    数据   structDulNode*next            后继指针}DulNode,*DuLinkList删除操作StatusListDeleteDuL(DuLinkListL,inti,ElemTypee){        if(!(p=GetElemPDuL(L,i)))           returnERROR        e=p>data        p>prior>next=p>next        p>next>prior=p>prior        free(p)          returnOK}插入操作StatusListInsertDuL(DuLinkListL,inti,ElemTypee){      if(!(p=GetElemPDuL(L,i)))             returnERROR   DuLinkList*s      if(!(s=(DuLinkList)malloc(sizeof(DuLNode))))             returnERROR      s>data=e      s>prior=p>prior      p>prior>next=s      s>next=p      p>prior=s             returnOK} 写一个函数将其中的t都转换成个空格。答:该函数命名为convert,参数的意义为:*strDest目的字符串,*strSrc源字符串,length源字符串的长度函数实现为:char*convert(char*strDest,constchar*strSrc,intlength){char*cp=strDestinti=while(*strSrci{if(*strsrc="blog='"t')将t转换成个空格{for(intj=j<j)*cp=''}else否则直接拷贝*cp=*strSrcstrSrci}returnstrDest}Windows程序的入口是哪里?写出Windows消息机制的流程。答:Windows程序的入口是WinMain函数消息机制:系统将会维护一个或多个消息队列所有产生的消息都会被放入或是插入队列中。系统会在队列中取出每一条消息根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统。如何定义和实现一个类的成员函数为回调函数?答:所谓的回调函数就是预先在系统的对函数进行注册让系统知道这个函数的存在以后当某个事件发生时再调用这个函数对事件进行响应。定义一个类的成员函数时在该函数前加CALLBACK即将其定义为回调函数函数的实现和普通成员函数没有区别C里面是不是所有的动作都是main()引起的?如果不是请举例。答:不是比如中断引起的中断处理不是直接由main()引起的而是由外部事件引起的。C里面如何声明constvoidf(void)函数为C程序中的库函数答:在该函数前添加extern“C”声明下列哪两个是等同的intbAconstint*a=bBconst*inta=bCconstint*consta=bDintconst*consta=b答:各式表示的意思分别为:Aconstint*a=b*a是const,但指针a可变Bconst*inta=ba是const但*a可变Cconstint*consta=ba和*a都是const,常量和指针的值都不能改变Dintconst*consta=ba和*a都是const,常量和指针的值都不能改变因此CD两者是相同的。总结个技巧:如果const位于星号的左侧则const就是用来修饰指针所指向的变量即指针指向为常量如果const位于星号的右侧const就是修饰指针本身即指针本身是常量。内联函数在编译时是否做参数类型检查答:做类型检查因为内联函数就是在程序编译时编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来代替。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/14

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利