程序员面试宝典整理

上传人:平*** 文档编号:13743299 上传时间:2017-10-25 格式:DOCX 页数:5 大小:28.47KB
返回 下载 相关 举报
程序员面试宝典整理_第1页
第1页 / 共5页
程序员面试宝典整理_第2页
第2页 / 共5页
程序员面试宝典整理_第3页
第3页 / 共5页
程序员面试宝典整理_第4页
第4页 / 共5页
程序员面试宝典整理_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《程序员面试宝典整理》由会员分享,可在线阅读,更多相关《程序员面试宝典整理(5页珍藏版)》请在金锄头文库上搜索。

1、程序员面试宝典第五章 程序设计基本概念1、 int i=1;void main()int i=i; /i 是一个未定义的值2、类型转换C+定义了一组内置类型对象之间的标砖转换:1) 如果一个操作数的类型是 long double,另一个操作数将转换成 long double2) 如果都不是 long double,其中一个是 double,则另一个转换成 double3) 同理,一个是 float,其他的转换成 float4) 如果两个操作数都不是 3 种浮点数类型之一,它们一定是某种整值类型,在确定共同的目标提升类型之前,编译器将在所有小于 int 的整值类型上施加一个被称为整值提升的过程。

2、3、运算符问题1) unsigned char a=0xA5;uUnsigned char b=a4+1;cout1) (729,271)=5004)不用 if 等判断语句,找出两个数中较大的值int max=(a+b)+abs(a-b)/25)如何将两个值进行交换,并且不适用任何中间变量a=ab; b=ab; a=ab;4、 C 和 C+的关系1)在 C+程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”C+提供了 C 连接交换指定符号解决名字匹配问题2)头文件中的 ifndef/define/endif防止该头文件被重复引用第六章 预处理、const 与 sizeof1

3、、宏定义1)用一个宏定义 FIND 求一个结构体 struc 里某个变量相对 struc 的偏移量:#define FIND(struc,e) (size_t)&(struc*)0)-e第七章 指针和引用1、 class A public: int a; A() a=1; void print()couta;class B:public Apublic:int a; B() a=2 ;B b; b.print(); coutb.a; /结果是 1 22、函数指针1)float(*def)10 def 是一个二级指针,它指向的是一个一维数组的指针,数组元素是 float2)double*(*gh

4、)10 gh 是一个指针,它指向一个一维数组,数组元素都是 double*3)double(*f10)() 函数指针数组,f 是一个数组,元素是函数的指针4)int*(*b)10) 一维数组的指针5)Long (*fun)(int) 函数指针6)Int(*(*F)(int,int)(int) F 是一个函数的指针,指向的函数的类型是有两个 int 参数并且返回一个函数指针的函数,返回的函数指针指向有一个 int 参数且返回 int 的函数7)int(*ptr) 指向整形数组的指针8)int *ptr 指针数组9)int(*a10)(int) 一个有 10 个指针的数组,该指针指向一个函数,该函

5、数有一个整形参数并返回一个整形值3、指针数组和数组指针1)int a=1,2,3,4,5int *ptr=(int *)(&a+1) /&a+1 指向数组后面cout*(ptr-1); /输出 52)C+中有了 malloc/free,为什么还需要 new/delete对于非内部数据类型的对象而言,只用 malloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前需要自动执行析构函数。由于 malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于 malloc/free。因此 C+语言需要一个能完成动

6、态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符 delete。New 和 delete 不是库函数,是运算符4、指针和句柄1)句柄和指针的区别和联系是什么?句柄是一种指向指针的指针句柄和指针其实是两个截然不同的概念。Windows 系统用句柄标记系统资源,隐藏系统的信息。你只要知道有这个东西,然后去调用就行了,它是个 32bit 的 unit。指针则标记某个物理内存地址,两者是不同的概念第八章 循环、递归与概率第九章 STL 模板与容器1、泛型编程1)什么事泛型编程?STL 代表用一致的方式编程是可能的。它并不是试图用 C+编程,只是试图找到一种正确的方式来处理

7、软件,寻找一种可以表达我们的想法的语言而已。泛型编程是一种基于发现高效率算法的最抽象表示的编程方法,也就是说,以算法为起点并寻找能使其工作有效率的最一般的必要条件集,并且这些必要条件有多种不同的实现方式。第十章 面向对象第十一章 继承与接口1、 以下代码的输出结果是什么?class A protected: int m_data; public:A(int data=0)m_data=data;int GetData()return doGetData(); virtual int doGetData()return m_data;class B: public A protected: in

8、t m_data; public:B(int data=1)m_data=data;int doGetData()return m_data;class C: public B protected: int m_data; public:C(int data=2)m_data=data;c.GetData() C 未定义,调用 B 中,B 未定义,调用 A 中。A 中为虚,调用 B 中c.A:GetData()A 为虚,C 未定义,调用 B 中c.A:doGetData()直接调用 A 中2、 三种继承方式公有继承:基类的公有成员和保护成员可见,基类的公有成员和保护成员作为派生类得成员时,它们

9、都保持原有的状态;基类的私有成员不可见,基类的私有成员仍然是私有的。在公有继承时,派生类的对象可以访问基类中的公有成员,派生类的成员函数可以访问基类的公有成员和保护成员。私有继承:基类的共有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类访问。保护继承:基类的公有成员和保护成员都作为派生类的保护成员。例:class Parentpublic: Parent(int var=-1)m_nPub=var;m_nptd=var;m_nptr=var;public: int m_nPub; protected: int m_nptd; private: int m_nPtr;class

10、 Child1: public Parentpublic: int GetPub()return m_nPub;int GetPtd()return m_nPtd; int GetPtr()return m_nPtr;class Child2: protected Parentpublic: int GetPub()return m_nPub;int GetPtd()return m_nPtd; int GetPtr()return m_nPtr;class Child3: private Parentpublic: int GetPub()return m_nPub;int GetPtd()

11、return m_nPtd; int GetPtr()return m_nPtr;Child1 cd1; Child2 cd2; Child3 cd3; int nVar=0;cd1.m_nPub=nVar;cd1.m_nPub=nVar; /父类保护变量,可以被公有继承派生类对象访问但不可以修改nVar=cd1.GetPtd();cd2.m_nPub=nVar;/保护继承的派生类对象不可以直接修改父类的公有变量nVar=cd2.GetPtd();cd3.m_nPub=nVar; nVar=cd3.GetPtd();/私有继承的派生类对象可以通过函数访问父类的保护变量第十二章 位运算与嵌入式编

12、程1、 建立一个联合体下面的程序运行结果是什么?union char a; int i;u; u.i=0xf0f1f2f3;couthexu.i; /f0f1f2f3couthexint(u.a); /f3 内存中数据低位字节存入低地址,数据的地址用低地址表示2、 写出程序运行结果int *pa=NULL; int *pb=pa+15;printf(“%x”,pb); /15*4=60,60 的十六进制结果是 3C3、 嵌入式编程中断服务子程序(ISR):ISR 不能反悔一个值;ISR 不能传递参数; ISR 应该是短而有效率的,在 ISR 中做浮点运算是不明智的;在 ISR 中一般不使用 p

13、rintf().4、 关键字 volatile 有什么含义?一个参数可以既是 const 又是 volatile 吗?指针可以是volatile 吗?定义为 volatile 的变量是说这变量可能会被意想不到地改变,这样,编译器就不会假设这个变量的值了,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。可以既是 const 又是 volatile,一个例子是只读寄存器可以是指针,一个例子是当一个终端服务子程序修改一个指向 buffer 的指针时5、 设置一绝对地址的值Int *ptr; ptr=(int *)0x67a9; *ptr=0xaa55;6、

14、 unsigned int compzero=0xFFFF;/这是不对的,应改为 unsigned int compzero=0;7、 char *ptr; if(ptr=(char *)malloc(0)=NULL) cout”null”; else cout”valid”;/Valid8、 在小尾字节系统中,这段 C 程序的结果是多少?struct bitstruct int b1:5; int: 2; int b2:2;bitstruct;bitstruct b; memcpy(&b,”EMC EXAMINATION”,sizeof(b); coutb.b1b.b2;E 和 M 的 AS

15、CII 值时 0x45 和 0x4D,1010 0010 1011 0010,bitstruct 是 9 位,b 在内存中如下:1010 0010 1,b1 占 5 位:1010 0,中间跳过两位 01 结果是 5 和-2第十五章 设计模式与软件测试1、 用设计模式的观点描述先有鸡还是先有蛋。先有鸡还是先有蛋问题只是对面向对象本质的一个理解,将人类的自然语言放在此处理解并不合适。根本不存在鸡与蛋大问题,而是型与值的问题,以及指针引用的问题,因为鸡和蛋两个对象间是引用关系而不是包含关系2、 用设计模式的思想描述蜡笔和毛笔的不同这是一个 Bridge 模式。为了一幅画需要准备 36 只型号不同的蜡笔,而改用毛笔 3 支就够了。通过该模式可以将乘法运算变为加法运算。该模式的用意是将抽象化与是鲜花脱藕,使得二者可以独立地变化。Bridge 模式将继承关系转换为组合关系,从而降低了系统间的耦合。3、 观察者模式观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题帮助。这个帮助对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。4、 软件测试1) 描述一个测试结束的准则:一个测试结束的标准可以查看已提交的 bug 是否已经全部解决并已验证关闭,一般 bug 验证率在 95%以上,并且没有打的影响功能的 bug 处于未解决

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号