11月c、c++面试总结必考题

DOC
  • 阅读 60 次
  • 下载 0 次
  • 页数 35 页
  • 大小 302.000 KB
  • 2023-08-30 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档5.00 元 加入VIP免费下载
此文档由【精品优选】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
11月c、c++面试总结必考题
可在后台配置第一页与第二页中间广告代码
11月c、c++面试总结必考题
可在后台配置第二页与第三页中间广告代码
11月c、c++面试总结必考题
可在后台配置第三页与第四页中间广告代码
11月c、c++面试总结必考题
11月c、c++面试总结必考题
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 35
  • 收藏
  • 违规举报
  • © 版权认领
下载文档5.00 元 加入VIP免费下载
文本内容

【文档说明】11月c、c++面试总结必考题.doc,共(35)页,302.000 KB,由精品优选上传

转载请保留链接:https://www.ichengzhen.cn/view-328531.html

以下为本文档部分文字说明:

本人呕心沥血制作,经历6次面试所遇的题目,基本上在这个上面,主要面试的是c/c++软件工程师,希望对大家有所帮助。下面一C语言部分1、问:在嵌入式开发中,为什么能通过C语言去直接操作硬件?答:因为有指针,指针是C语言的灵魂,他

可以直接访内存。2、问:链表的作用?答:用于内存管理,链表节点中的指针域可以将不连续的内存彼此关联起来,从而实现内存的动态管理。3、问:什么变量不能用指针指向?答:寄存器变量(register修饰),因为这个变量会优先选择存放到CPU寄存器中,而指针只能指向内存的任务区域,但不能指向寄存器。

4、问:有符号字符型和无符号字符型变量的最大值和最小值分别是多少(十六进制多少),为什么?答:有符号(-128——127,-0x80——0x7F);无符号(0——255,0——0xFF)5、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。6、全局变量

和局部变量的区别。全局变量,储存在静态区.进入main函数之前就被创建.生命周期为整个源程序。局部变量,在栈中分配.在函数被调用时才被创建.生命周期为函数内.7、头文件中的ifndef/define/endif干什么用?防止重复包含8、#include<filename

.h>和#include“filename.h”有什么区别?#include<filename.h>:<>告诉预处理器在标准系统目录中寻找文件。#include“filename.h”:""告诉预处理器先在当前目录中寻找文件,找不到则再在标准目录下寻找文件。9、cons

t有什么用途?(请至少说明两种)(1)定义const常量(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。//指向常整形数的指针变量constchar*p1=name;//指针所指向的

内容不能变,指针指向的地址可变。constchar*p;//和charconst*p//指向整形数的常指针char*constp2=name;//地址不可变,内容可变。//指向常量的常指针constchar*constna

me="chen";//地址不变,内容不变。10.数组与链表的区别。数组中的数据在内存是顺序存储的,插入需要移动很多值。由于链表是随机存储的,链表访问需要遍历。11、内存的分配:1、栈区(stack)―由编译器自动分配释放,存放函数的参数值,

局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)―一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(

static)——全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后有系统释放4、文字常量区―常量字符串

就是放在这里的。程序结束后由系统释放5、程序代码区―存放函数体的二进制代码。12、sizeof和strlen()的区别参考答案:①sizeof是运算符,计算数据所占的内存空间;strlen()是一个函数,计算字符数组的字符数;②size

of可以用类型作参数;strlen()只能用char*作参数,必须是以’/0’结束③数组做sizeof的参数不退化,传递给strlen就退化为指针了;④sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型。该类型保证能容纳实现建立的最大对象的字节大小1

3、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?答:c++可以重载,c语言不可以被重载,c++函数提供了c语言连接交换指定函数extern“c”来解决名字问题。14.头文件的作用是什么?答:1

.通过头文件调用库2、实现安全检查15、头文件中的ifndef/define/endif的作用?答:防止头文件被重复引用。16、如果一个HEADER头文件要被多个源文件同时#include,如何避免对HEADER中变量的重复定义?答:在某个源文件中对变量定义,在HEAD

ER中仅对变量进行声明,即前面加extern;16、分别写出BOOL,int,float,指针类型的变量a与“零”的比较语句。答:BOOL:if(!a)orif(a)int:if(a==0)or(a!=0)float:const

EPSSION0.000001if(X>=-EPSSION)&&(X<=EPSSION)pointer:if(a!=NULL)orif(a==NULL)17、const与#define相比有何优点•const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而#define

只作简单的字符串替换,无类型安全检查。•const检查定的类型,如constfloatpi=3.141592653,实际的pi是3.141593,因为float类型的有效位限制。•const在编译时分配存储空间;而#define在预编译时编译,不分

配存储空间。•有些集成化的调试工具可以对const进行调试,但不能对宏进行调试。18.简述数组与指针的区别?数组要么在静态存储区被创建(全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。19.变量的声明和定义有什么区

别?答:声明变量不分配空间,定义变量要分配空间。声明主要是告诉编译器,后面的引用都按声明的格式。定义其实包含了声明的意思,同时要分配内存空间。20.解释堆和栈的区别。答:堆(heap)——一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。栈(stack)——由编译器自动

分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。由系统自动分配,速度较快。但程序员是无法控制的。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。速度比较慢,而且容易产生内存碎片,不过用起来最方便。21、一个指针可以是volati

le吗?可以,因为指针和普通变量一样,有时也有变化程序的不可控性。常见例子:子中断服务子程序修改一个指向buff的指针时,必须用volatile22、内存的分配方式的分配方式有几种?答:1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。

2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何

时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。23、.函数模板与类模板有什么区别?答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。24.嵌入式系统中经常要用到无限循环,你怎么

样用C编写死循环呢?答:while(1){};loop:gotoloop;25、关键字static的作用是什么?((1)用于全局变量;(2)用于局部变量;(3)用于函数)在C语言中,关键字static有三个明显的作用:static全局变量只初使化一次,防止在其他文件单元中被引用;stat

ic局部变量只被初始化一次,下一次依据上一次结果值;static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝;26、什么是预编译,何时需要预编译:1、总是使用不经常改动的大型代码体。2、程序由多个

模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。27、结构与联合有和区别?1.结构和联合都是由多个不同的数据类型成员组成,但在任何同一时刻,联合中只存放了一个被选中的成员(所有成员共用一块地址空间),而结

构的所有成员都存在(不同成员的存放地址不同)。2.对于联合的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了,而对于结构的不同成员赋值是互不影响的。28、简述什么是值传递,什么是地址传递,两者区别是什么?参考答案:值传递主调函数传递给被调函数的是值的拷贝,不是原值;地址传递主调

函数传递给被调函数的是值的地址。区别是值传递被调函数中的操作不改变主调函数的值,而地址传递则不同。30、比较union和struct的不同;在分配空间时,union中的各个域的空间是重叠的,struct中的各个域的空间是不重叠的。31、操作

系统的内存分配一般有哪几种方式,各有什么优缺点?定长和变长。变长:内存时比较灵活,但是易产生内存碎片。定长:灵活性差,但分配效率较高,不会产生内存碎片。32、操作系统的致命错误有哪些?致命错误主要包括启动配置错、内部资源耗尽和各种其它类型的不可恢复性错误。32、关键

字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述)。用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里重新读取它的值,并

不要随意针对它作优化。建议使用volatile变量的场所:(1)并行设备的硬件寄存器(2)一个中断服务子程序中会访问到的非自动变量(全局变量)(3)多线程应用中被几个任务共享的变量33)中断(interrupt,如键盘中断)与异常(e

xception,如除零异常)有何区别?异常:处理器遇到编程失误,特殊情况时,必须内核处理(cpu时钟同步执行)中断:外部硬件产生一个电信号,打断cpu的执行。34.malloc与callocmalloc:直接申请空间,并不改变内存的内容calloc:把内存区域的空间写0;realloc:重新申

请空间。35、操作系统的致命错误有哪些?致命错误主要包括启动配置错、内部资源耗尽和各种其它类型的不可恢复性错误。36、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆)中。二系统编程1、问:什么是程序

?什么是进程?本质区别?答:程序是一些指令的有序集合进程是程序执行的过程。本质区别:程序是静态的,进程是动态的。2、问:无名管道为什么只能在具有公共祖先的进程间通信?管道的特点?答:管道无法打开,只能够通过继承的方法获取文件描述

符。管道的特点:1.半双工特性,一个时间只能一个方向流通。2.只在父子之间使用。3.管道对于管道两端而言,只是一个文件,但是存放在内存中。4.数据从管道的一端写入,从另一端读出。5.没有名字。6.管道的缓冲区是有限的。7.管道所传送的数据是无格式的

,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。8.写入管道的数据读完之后就从管道中消失。3、问:管道与消息队列的区别?答:管道和无名管道收发数据都是先进先出的,消息队列可以实现按消息的类型随机读取。5

、问:有名管道相比无名管道最大的优点是什么?答:实现不同信号之间的相互通信。6、问:什么是信号量,有什么特点,简述pv操作?答:信号量就是个计数器,计数器的值只能是非负的。操作计数器的方法是pv操作,pv操作具有原子性(不可中断),要执行就一定要执行成功,要么就不执行。P操作使信号量的值减一。

当进行带阻塞的p操作的时候,如果信号量的值已经是0了,p操作就会阻塞。V操作使得信号量的值加一。7.死锁的四个条件及处理方法。(进程死锁的原因:资源竞争及进程推进顺序非法)(1)互斥条件:一个资源每次只能被一个进程使用。(2)请求与保持条件:一个进程因请求资源而阻塞时,对已

获得的资源保持不放。(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。解决死锁的方法分为死锁的预防,避免,检测与恢复四种8、问:什么是进程?什么是线程,它们之间的关系?实现多任务的

优缺点?答:进程是系统资源分配的基本单位,拥有独立的资源分配。线程是cpu调度和分配的基本单位。关系:1:一个进程中可以有多个线程,线程必须依赖于进程存在,如果进程结束了,线程也就不存在了。2:每个进程都至少有一个线程,称为主线程。多任务优缺点:进程:优点:父子进程资源独享。缺点:资源开销比较

大,子进程完全复制父进程的地址空间,父子进程共享数据不方便。线程:优点:资源开销比较小,共享数据比较方缺点:资源共享,多个线程共享资源比较麻烦。11、.什么是“zombie”进程?在我们的程序中如何防止“zombie”进程?

(试说出其中的三种方法)僵尸进程:一个已经终止,但其父进程没有对其进行处理的子进程称为僵尸进程。防止僵尸进程:1)用waitpid(wait)等待子进程返回.2)两次fork也能够实现12、系统调用与库函数的关系:并不是所有的系统调用都被封装成库函数,系统

提供的许多功能都必须通过系统调用才能完成。10.进程同步机制,并比较优缺点。进程同步是进程之间直接的相互作用进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。11、标准I/O提供三种类型的缓冲:全缓冲、行缓冲、不带缓冲12、linu

x内核有几种锁,它们有什么不同?Linux的内核锁主要是自旋锁和信号量。自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能

立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列

中的一个任务将被唤醒,从而便可以获得这个信号量。信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。13、请说明C++中动态链接库和静态链接库的区别?答:a)动态链接是指在生

成可执行文件时不将所有程序用到的函数链接到一个文件,当程序运行时直接从操作系统中找,动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入;b)静态链接就是把所有用到的函数全部链接到exe文件中,所有的代码和

数据都复制到本模块中,运行时就不再需要库了。14、请说明调用动态链接库DLL的2种方式?答:a)载入时动态链接(load-timedynamiclinking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,

导入库向系统提供了载入DLL时所需的信息及DLL函数定位。b)运行时动态链接(run-timedynamiclinking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL

载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。15、请说明在程序中使用线程的好处是什么?答:a)耗时的操作使用线程,提高应用程序响应b)并行操作时使用线程,如C/S架构的服务器端并发线程响应用户

的请求。c)多CPU系统中,使用线程提高CPU利用率d)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。16、用户进程间通信主要哪几种方式?(1)管道(Pipe

):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。(2)命名管道(namedpipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。

命名管道通过命令mkfifo或系统调用mkfifo来创建。(3)信号(Signal):pv操作控制信号,实现信号的同步互斥。(4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列systemV消息队列。有足够权限的进程可以向队

列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺(5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信

机制,如信号量结合使用,来达到进程间的同步及互斥。(6)信号量(semaphore):通过信号处理器控制同步与互斥。(7)套接字(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。三、

网络编程1、TCP/IP(传输控制协议)中的TCP和IP(网际协议)分别承担什么责任?TCP负责你的应用软件(例如你的浏览器)和你的网络软件之间的通讯。IP负责与其他计算机的通讯(发送主机的ip地址+接收主机的ip地址

)TCP负责在数据被发送以前把它分装到IP包,然后在数据接受以后再组装起来。IP负责把数据包发送到正确的目标计算机。例题1:在tcp/ip模型中进程到进程之间通信属于(传输)层,主机到主机属于(网络)层,设备到

设备属于(数据链路)层,程序到程序属于(应用)层2.四层模型?七层模型?TCP/IP协议包括?这7层是:应用层,表示层、会话层,传出层(udp/tcp),网络层(IP),数据链路层(交换机),物理层(集成线(hub))这4层分别为:应用层:传输层:网络层:链路层。TC

P/IP协议族包括(IP)、(ARP)、(ICMP)、(UDP)、(TCP)、(RIP)、Telnet、(SMTP)、DNS等协议。3、请简述DNS、活动目录、域的概念。参考答案:DNS:域名服务,作用是将网络域名解析成IP地址;域:网络系统的

一个安全边界,在一个域当中,计算机和用户共享一些列的安全信息。4、问:select()函数的作用?答:用于一个进程同时监听多个文件描述符,还可以设置监听超时时间。5、问:tcp、udp、ip、http、telnet协议分别位于TCP/I

P协议哪一层?答:tcp、udp位于传输层//说出TCP/IP分别对应OSI七层中的哪一层传输层,网络层Ip协议位于网络层。http及telnet位于应用层。6、问:路由器工作在TCP/IP协议中的那一层?答:网络层。7.端口的作用?端口

是一个软件结构,一个端口对应一个16比特的数。服务进程通常使用一个固定的端口。端口标识通信的进程:作用:1、区分系统里的多进程2、被客户程序或服务进程用来发送和接收信息端口号分类:知名端口号(IANA):21号非配给ftp80号端口分配给http动态端口号8、网络通信过程?1、面向

无连接:需携带地址(邮政系统服务的抽象)。2、面向连接:无需地址,本质上连接是一个管道。(电话系统服务模式的抽象)。8.物理地址转换成IP地址的协议?反之?RARP(物理转IP)ARP(IP转物理)9.MAC层通信协议

有哪些?ISO2110,IEEE802,IEEE802.2网卡MAC是由6组什么组成的4有16进制数据组成,前三组表示厂商,有IEEE来分配,并可以在细分,后三组表示该制造商所制造的某个网络产品(如网卡)的系列号。10.对WLAN的了解。WLAN是

指应用无线通信技术将计算机设备互联起来,构成可以互相通信和实现资源共享的网络体系。无线局域网本质的特点是不再使用通信电缆将计算机与网络连接起来,而是通过无线的方式连接,从而使网络的构建和终端的移动更加灵活。12、问:什么是tcp协议与udp协议(提

供进程间通信的能力)?他们的区别及优缺点?答:tcp:面向连接,可靠的传输层协议面向连接:建立连接-->使用连接-->释放连接(虚电路)可靠性:对包进行排序并检错,而损坏的包可以重传。tcp数据包包含序号和确认序号窗口式流量控制、慢启动和拥塞避免(服务对象:telne

t,ftp,Rlogin,STMP等)udp:无连接,不可靠的传输层通信协议面向无连接:发送数据之前不需要建立连接。不可靠:不对数据包的顺序进行检查没有错误检测和重传机制服务对象:主要用于那些面向查询——应答的服务(NFS(网络文件系统)/NTP(网络时间协议)/DNS(域名解

析协议))13、问:ip地址192.168.220.22属于什么IP?(IP地址:主机ID和子网ID,主机ID全为0的ip地址表示网段地址,主机ID全为1的地址广播地址)答:私有IP地址。14、问:什么是大端什么是小端字节序?网络字节

序是大端的还是小端的?答:小端:低地址存放低字节,高地址存放高字节;大端:相反;网络字节序是:大端。15、网络中,如果客户端突然掉线或者重启,服务器端怎么样才能立刻知道?若客户端掉线或者重新启动,服务器端会收到复位信号。16、腾讯笔试题:tcp三次握手的过程,accept发生在三次握手

哪个阶段?accept发生在三次握手之后。第一次握手:客户端发送syn包(syn=j)到服务器。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。第三次握手:客户端收到服务器的SYN+A

CK包,向服务器发送确认包ACK(ack=k+1)。三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接。tcp面向连接的四次挥手过程:(1)第一次挥手:Client发送一个FIN,用来关闭Client到Ser

ver的数据传送,Client进入FIN_WAIT_1状态。(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。(3)第三次挥手:Server

发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Se

rver进入CLOSED状态,完成四次挥手。(2)为什么建立连接是三次握手,而关闭连接却是四次挥手呢?这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的F

IN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。17、腾讯笔试题:用UDP协议通讯时怎样

得知目标机是否获得了数据包可以在每个数据包中插入一个唯一的ID,比如timestamp或者递增的int。发送方在发送数据时将此ID和发送时间记录在本地。接收方在收到数据后将ID再发给发送方作为回应。了解:路由(网络层):可以分割子网,广播域,提

供防火墙功能。交换机(数据链路层):依据mac地址进行寻址。18、在子网210.27.48.21/30种有多少个可用地址?分别是什么?可用地址是两个,一个网段地址,一个广播地址。19、从SOCKET编程到底层以太网物理包要经过哪几次封装?SOCKET包、IP包、以太网包20.列出3个

常用网络协议使用的端口。答:HTTP协议用80端口,FTP协议用21端口,POP3协议用110端口四C++与QT(类:具有共性的实体的抽象。)3.Windows程序的入口是哪里?写出Windows消息机制的流程。答:Windows程序

的入口是WinMain函数消息机制:系统将会维护一个或多个消息队列,所有产生的消息都会被放入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并

根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统。1.面向对象的三个基本特征,并简单叙述之?答:1)封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private,protected,public)2)继承:实

现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。3)多态:允许将子类类型的指针赋值给父类类型的指针。(1).多态的作用?答:

主要是两个:1)隐藏实现细节,使得代码模块化。2)类的继承与派生的时候,接口重用。2.重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?答:从定义上来说:重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,

或许参数类型不同,或许两者都不同)。重写:是指子类重新定义复类虚函数的方法。从实现原理上来说:重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。重写:当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的

调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。3、使用new与malloc分配内存有什么区别?1、new是c++中的操作符,malloc是c中的一个函数2、new不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,

而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。4、new和malloc效率比较new可以认为是malloc加构造函数的执行。new出

来的指针是直接带类型信息的。而malloc返回的都是void指针4.C++中,关键字struct和class的区别仅仅在于:struct定义的类的缺省成员为公有的,而class定义的类的缺省成员为私有的;5.C

++函数中值的传递方式有哪几种?答:C++函数的三种传递方式为:值传递、指针传递和引用传递。7、构造函数可以是虚函数吗?为什么?答:不可以,创建对象时必须确定类型。8、析构函数可以是虚函数吗?为什么?答:可以。释放指向子类的基类指针

时,不会造成内存泄露。默认的析构函数不是虚的,当类中至少有一个虚函数时,需要虚析构函数。9、C++语言中的static关键字的作用是什么?答:在函数体内,一个被声明为静态的变量在这函数被调用过程中维持其值不变。在

模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外的其他函数所问。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。10、面向对象的程序设计思想是什么?答:把数据结构

和对数据结构进行操作的方法封装形成一个个的对象。11、什么是类?答:把一些具有共性的对象归类后形成一个集合,也就是类。12、对象都具有两方面特征是什么?分别是什么?答:对象具有的特征是静态特征与动态特征。静态特征是只能描述对象的属性(成员变量

),动态属性是指对象表现出来的行为(成员函数)13、在头文件中进行声明,在对应的实现文件中进行类的定义有什么意义?答:这样可以提高编译效率只要编译一次对应的.obj文件后,再次应用该类的地方,这样类就无法再次编译,从而提高编译效率。14、在类的内部定义成员函数的函数体,这种函数会具备那种

属性?答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。15.成员函数通过什么来区分不同对象的成员数据?为什么它能够区分?答:通过this指针指向对象的首地址来区分的。16、C++编译器自动为类产生的四个缺省函数是什么?答:默认构造函数,拷贝构造函数,析构函

数,赋值函数。18.构造函数与普通函数相比在形式上有什么不同?(构造函数的作用,它的声明形式来分析)答:构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化对象成员变量的。构造函数的名字必须与类名相同,它不具有

任何类型,不返回任何值。19、.什么时候必须重写拷贝构造函数?答:当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。20.构造函数的调用顺序是什么?答:1.先调用基类构造函数2.按声明顺序初始化数据成员3.最后调用自己的构造函数。21、哪几种情况必须用到初始化成员列表?答:

类的成员是常量成员初始化;类的成员是对象成员初始化,而该对象没有无参构造函数。类的成员为引用时。22、什么是常对象?答:常对象是指在任何场合都不能对其成员的值进行修改的对象。23、静态函数存在的意义?静态私有成员在类外不能被访问,可通过类的静态成员函数来访问;当类的构造函数是私有的时,不像普通类

那样实例化自己,只能通过静态成员函数来调用构造函数。24、在类外有什么办法可以访问类的非公有成员?答:友元,继承,公有成员函数。25、什么叫抽象类?答:不用来定义对象而只作为一种基本类型用作继承的类。26、运算符重载的意义?答:为了对用户

自定义数据类型的数据的操作与内定义的数据类型的数据的操作形式一致。27、不允许重载的5个运算符是哪些?答:1..*(成员指针访问运算符号)2.::域运算符3.Sizeof长度运算符号4.?:条件运算符号5..(成员访问符)28、运算符重载的三种方式?答:普通函数,友元函数,类

成员函数。29、流运算符为什么不能通过类的成员函数重载?一般怎么解决?答:因为通过类的成员函数重载必须是运算符的第一个是自己,而对流运算的重载要求第一个参数是流对象。所以一般通过友元来解决。30、赋值运算符和拷贝构造函数的区别

与联系?答:相同点:都是将一个对象copy到另一个中去。不同点:拷贝构造函数涉及到要新建立一个对象。拷贝构造函数:complexA(100);exampleB=A;31、拷贝构造函数在哪几种情况下会被调用?答:1.当类的一个对象去初始化该类的另

一个对象时;2.如果函数的形参是类的对象,调用函数进行形参和实参结合时;3.如果函数的返回值是类对象,函数调用完成返回时。32、对象间是怎样实现数据的共享的?答:通过类的静态成员变量来实现对象间的数据共享。静态成员变量占有自己独立的空间不为某个对

象所私有。33、友元关系有什么特性?(类的外部访问类的私有成员)答:单向的,非传递的,不能继承的。34、内联函数和宏的区别在于:宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。35、结构与联合有和区别?1.结构和联合都是由多个不同的数据类型成员组成,但在任何同一时刻

,联合中只存放了一个被选中的成员(所有成员共用一块地址空间),而结构的所有成员都存在(不同成员的存放地址不同)。2.对于联合的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了,而对于结构的不同成员赋值是互不影响的。36、用什么函数开启新进程、线程。(4分)答:Cr

eateProccess()创建进程;CreateThread()创建线程MFC中还提供了_beginthread()与_beginthreadex()函数创建线程MFC中SendMessage和PostMes

sage的区别?答:PostMessage和SendMessage的区别主要在于是否等待应用程序做出消息处理。PostMessage只是把消息放入队列,然后继续执行;而SendMessage必须等待应用程序处理消息后才返回继续执行。这两个函数的返

回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。38.MFC中,大部分类是从哪个类继承而来(CCmdTarget、CObject

、CWinApp、CWnd)?(2分)__CObject__39.WaitForSingleObject有何作用;m_pThrd的类型是CWinThread*时,WaitForSingleObject(m_pThrd->m_hThread,INFINITE);有何作用。(4分)答:WaitF

orSingleObject是表示等待线程的一个函数。参数为INFINITE表示一直等待线程CWinThread执行结束后,再继续处理自身程序。6.__stdcall、__cdecl、__pascal在什么方面有所不同。(4分)答:这些都是一些函数参数的调用约

定,告诉编译器函数参数压栈的顺序,以及压入堆栈的内容由谁来清除,是调用者还是函数本身清除堆栈的内容。简单列表如下:DirectiveParameterorderClean-upPassesparametersinregisters?p

ascalLeft-to-rightRoutineNocdeclRight-to-leftCallerNostdcallRight-to-leftRoutineNo1、为什么要使用命名空间?解决命名冲突的问题

。定义类的名称以及不同厂商。2、内联函数和宏的区别宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。3、voidfunc(intx,inty=40,intz=49);//只能在声明时设置默认参数缺省参数都必须是从右到左

定义,使用时却是从左到右。4、只要函数参数的类型不同,或者参数的个数不同,或者二者兼而有之,两个或两个以上的函数可以使用相同的函数名5、引用与指针有什么区别?1)引用必须被初始化,指针不必。2)引用初始化以后不能被改

变,指针可以改变所指的对象。2)不存在指向空值的引用,但是存在指向空值的指针。6、结构与类的区别:默认访问权限不同。struct默认public;class默认为private;数据成员可以是任何类型,但是不能用auto,regist

er,extern。4、调用析构函数的条件:1、对象自动退出生命周期2、程序员手动释放对象指针。5、delete与delete[]区别delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。6、虚函数的作用?

接口重用2.构造函数可以是虚函数吗?为什么?答:不可以,创建对象时必须确定类型。从内存分配,虚函数的用处等方面来讲都可以。3.析构函数可以是虚函数吗?为什么?答:可以。释放指向子类的基类指针时,不会造成内存泄露。默认的析构函数不是虚的,当类中至少

有一个虚函数时,需要虚析构函数。7.MFC中CString是类型安全类么?答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转QT学习:1、问:QT区别于其它应用开发工

具有什么优点及缺点?答:1、有很强的移植性;2、开源的开发工具;3、用C++语言实现,效率相对于其它面向对象语言执行效率更高;4、强大的通信机制(信号和槽,比MFC回调好);5、支持openGL可得到更加完美2D/3D效果。2、问:你怎么理解QT,QT是一门语言吗?答:QT,是一套应用程

序开发框架,也叫做是开发工具或一套图形库,用C++语言来实现的3、问:QT中信号和槽的主要作用是什么?答:主要用来在对象间进行通信4、问:QT中对事件的处理是通过什么方法实现的?答:通过虚函数的方法,重

新实现相应的事件函数。5、问:面向对象设计与面向过程设计的最大区别是什么?答:面向对象的设计中,程序是由一个或多个对象组成的,每个对象负责不同的任务,一起让整个应用程序运行起来,每一个对象又是由不同的类实现,使得程序模块化更强。而面向过程的设计,就是程序从头到尾执行的一个过程

,需要自己去划分模块。五平台与驱动部分1、问:Bootloader在嵌入式系统中处于什么地位?bootloader的主要作用是什么?答:Bootloader是系统加电后、内核运行之前执行的一段代码,处于嵌入式系统的最底层。Bootloader的主要作用有两个:一、

为启动内核准备好正确的软硬件环境,软件主要指堆、栈等,硬件主要指内存、系统时钟等,最终将内核由固态存储器加载到内存中;二是为更新、备份、恢复系统提供控制平台。u-boot的配置与编译过程:配置u-boo

t:例如运行make名字_config调用mkconfig脚本文件。2、问:简述s3c2440NAND/NOR两种启动方式的异同?答:Nor启动:系统加电后会从0x000000开始的三总线位置读取第一条指令进行工作,norFLASH采用总线结构,可以直接

连在三总线的0x00000位置上,所以将bootloader烧到norflash0x0000位置上,系统加电后即可运行bootloader的第一条代码,单片机一般采用此种启动方式。优点:硬件连接简单、可靠缺点:no

rflash由于结构的原因,容量一般做不了太大,而且其读写速度也较慢。Nand启动:因为nand不支持总线线性寻址,所以CPU会从nand自动拷4K代码到内部RAM,并从这段RAM开发运行程序,所以这4k代码往往

是bootloader的第一阶段代码,其作用为将bootloadr的主要部分搬到内存中运行,然后进行后续工作优点:此方案充分利用了nand大容量存储、sdram高速运行的特点,解决了嵌入式系统存储与运行的容量与速度问题缺点:中间包含了多次的搬运过程,效率稍

稍有些低。3、问:为什么bootloader大多由两阶段启动构成?以你熟悉的bootloader为例讲解一下两阶段分别干什么事情?答:bootloader会直接对硬件进行操作,为了分离硬件相关性,一般bootloader有两部分代码组成,第一部

分一般由汇编完成,完成与体系结构相关代码、功能的实现。第二部分由C语言完成,完成与系统机构无关的通用功能的实现。vivi的stage1实际完成的主要任务://引导内核,从flash拷贝到sdram。1.禁用看门狗、关闭所有中断、初始化系统时钟2.设置S3C241

0的和内存相关的13个寄存器3.初始化调试指示灯(可选)4.初始化UART,作为调试口(可选)5.从NAND或NORFLASH复制代码到SDRAM6.跳转到main,进入stage2vivi的stage2实际完成的主要任务//启动内核1.ste

p1:打印版本信息2.step2:初始化GPIO3.step3:MMU初始化4.step4:堆初始化5.step5:MTD设备初始化6.step6:存放vivi的私有参数7.step7:添加vivi支持的命令8.step8:根据用户选择进入vivi命令模式或启动内核4、问:Linux

内核由哪几部分组成,各自有什么作用?答:进程管理:管理linux中的任务调度,比如多进程、多线程、信号、进程间通信等内存管理:管理进程调度中伴随的内存分配与释放文件系统管理:管理系统中的存储设备,如:U盘

、SD卡、FLASH、硬盘等设备管理:管理系统中的各种字符设备,如LCD、触摸屏、串口、传感器等网络管理:管理系统中的网络设备,为用户提供各种网络服务5、问:简述Linux模块编程的含义及意义答:Linux中采用了模块的机制,允许用户将内核代码如驱动等编译成模块

,而不是直接编译进内核这样可以有效的减小内核的开发周期,减小最终内核的体积,避免调试bug对内核的影响,使得开发更加迅速。6、问:Linux有哪几种常见的根文件系统格式?简述其各自特点?答:cramfs/jffs2/yaffs/yaffs2/yaffs/y

affs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统,其特点是可读可写。cramfs是Linux的创始人LinusTorvalds参与开发的一种只读的压缩文件系统在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入

式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本JFFS文件系统最早是由瑞典AxisCommunications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS主要用于NOR型闪存

,基于MTD驱动层。7、问:简述boa服务器与CGI程序通信过程?答:通过Internet把用户请求送到服务器,服务器接收用户请求并交给CGI程序处理,CGI程序把处理结果传送给服务器,服务器把结果送回到用户。8、问:同步与异步串行通信息的区别?答:同步是通信息双方使用同一时钟线,而一

但时钟线太长就容易受到干扰,如SPI,I2C等等,所以常用于短距离通信;而异步通信是双方使用各自的时钟,如uart、USB等,传输距离更远。9、问:设备驱动框架中的宏描述信息那一个是不能省略的:答:MODULE_LICENSE("GPL");即GPL是不能省的。10、问:设备驱动开发中,常用

到__init__exit声明函数,其作用是什么?答:表示被修饰的函数所占内存资源用完是可以回收的。11、问:驱动开发中用到的各个寄存器地址,物理地址吗?如果不是那怎么得到虚拟地址的?答:不是物理地址,是通过ioremap()宏进行重映射的。12、问:驱动开发中,用于并

发操作保护的信号量和自旋锁有什么区别?答:信号量是睡眠锁,等待期间不占用CPU资源,但唤醒切换时很消耗时间,所以常用于使用不态频繁且阻塞时间较长的地方;而自旋锁是忙等待,即会被CPU调度,所以不能长时间等待,用于等待时间比较短或频繁使用的地方。13、问:内核中的工作队

列是作什么用的?答:用于某些函数需要延时处理的地方,也常用于中断下半部,从而缩短中断服务程序的处理的时间。14、.怎样实现并发控制答:用到锁和事务处理,做为一个事务的应用程序访问一个表时,用锁对该表设置一个优先级,如果设置成功就

进行下一步操作,不成功的话就事务回滚,返回到最初状态,保证一个程序操作完数据库后,才允许其它程序操作15.Linux驱动程序流程及功能。设备驱动程序的功能:对设备初始化和释放把数据从内核传送到硬件和从硬件读取数据读取应用程序传送给设备文件的数据和回送应用程序请求的数据检测

和处理设备出现的错误16、Linux内核引导时,从文件/etc/fstab中读取要加载的文件系统。17、什么是GPIO寄存器?GPIO寄存器就是cpu分配给GPIO的地址。使用软件访问这些地址就可以访问对应的硬件引脚。分类:上拉寄存器、控制

寄存器、驱动寄存器、数据寄存器常见问题:chara[]=“hello”;a[0]=‘X’;cout<<a<<endl;char*p=“world”;//注意p指向常量字符串p[0]=‘X’;//编译器不能发现该错误cout<<p<<e

ndl;常量字符串不能被修改注意:当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针四、有关内存的思考题(这个题目见一次考一次)voidGetMemory(char*p){p=(char*)malloc(100);cha

r*GetMemory(void){charp[]="helloworld";}voidTest(void){char*str=NULL;GetMemory(str);strcpy(str,"helloworld");printf("%s",s

tr);}请问运行Test函数会有什么样的结果?答:str并没有指向新开辟的内存空间,出段错误,访问了不该访问的内存returnp;}voidTest(void){char*str=NULL;str=Get

Memory();printf("%s",str);}请问运行Test函数会有什么样的结果?答:打印结果不确定voidGetMemory2(char**p,intnum){*p=(char*)malloc(num);}voidTest(void){char

*str=NULL;GetMemory(&str,100);strcpy(str,"hello");printf("%s",str);}请问运行Test函数会有什么样的结果?答:打印出hello,有可能存在内存泄露问题voidTest(void){char*str=(char*)mall

oc(100);strcpy(str,“hello”);free(str);if(str!=NULL){strcpy(str,“world”);printf("%s",str);}}请问运行Test函数会有什么样的结果?答:打印出world,

也有可能出段错误,因为访问未知的内存空间五、c++编写类String的构造函数、析构函数和赋值函数已知类String的原型为:classString{public:String(constchar*str=NULL);//普通构造函数String(

constString&other);//拷贝构造函数~String(void);//析构函数String&operate=(constString&other);//赋值函数private:char

*m_data;//用于保存字符串};请编写String的上述4个函数。这个题目在尚米网络科技公司考过六、编写strcpy函数已知strcpy函数的原型是char*strcpy(char*strDest,constchar

*strSrc);其中strDest是目的字符串,strSrc是源字符串。(1)不调用C++/C的字符串库函数,请编写函数strcpychar*strcpy(char*strDest,constchar*strSrc);{assert((strDest!=NULL)&&(strSr

c!=NULL));//2分assert是个宏如果条件为假整个程序将退出,可自己判断char*address=strDest;//2分while((*strDest++=*strSrc++)!=‘\0’)//2分;r

eturnaddress;//2分}(2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值?为了支持链式操作,即可以将函数的返回值做为另一个函数的参数。如:strcpy(strDest,strcpy(strDest1,s

trSrc));可以将strSrccopy到strDest1,strDest。

精品优选
精品优选
该用户很懒,什么也没有留下。
  • 文档 34925
  • 被下载 0
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?