让你轻松拿到offer的面试题(一)

序:
之前买kafka书籍的时候附送了一本面试手册,在这里和大家分享一下,同时加深我的印象。

1.程序设计基本概念

写法甄别

A.
if('A' == a) a++;
B.
if(a == 'A') a++;

上面两种写法,A种写法更好。因为,编译器不允许对常量赋值,这样就更容易检查到错误。在B种,若写成=号,会造成一定的debug成本。

在c++程序中如何调用被C编译后的函数?

c++提供了C连接交换指定符号extern “C” 来解决名字匹配问题。因为c++语言支持函数重载,而c不支持。而且,函数被c++编译后在库中的名字与c语言的也不同。为了解决这些矛盾,采用extern "C"写法来兼容C的函数。

评价C与C++各自特点

C是一种结构化语言,重点在于算法和数据结构。C程序设计首先考虑如何通过一个过程,对输入进行运算处理得到输出。而对于C++,首先考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程控制。

选择语言:大量运算 and 友好界面软件交互

对于大规模数值运算,C语言和JAVA没有明显的性能差异。但是,如果涉及向量计算、矩阵计算,可以使用MATLAB或者FORTRAN编写计算组件。

对于用户界面的开发可以考虑.NET进行,.NET同COM的互操作十分容易,同时对数据库的访问也相当友好。

2.指针和引用

初始化问题

初始化值,指针可以为空,但引用不能为空。同时,若指针没有指向某个地址,是不能对它进行赋值的。类似地,const常量进行赋值时,必须同时初始化。

句柄和指针的区别和联系

我们知道,指针是一个内存地址,而句柄则是一种指向指针的指针。在Windows系统中,对象的物理地址是不断变化的,程序是不能直接通过物理地址来访问对象。这时,操作系统会腾出一些内存地址,专门用来登记各个应用对象在内存的地址变化,而这个记录地址的地址是不变的。因此,句柄是用来记录系统资源,隐藏系统的信息。你只要知道有这个东西,然后去调用就行了,它是一个32bit的uint

指针和引用的差别

1)非空区别。指针可空,引用非空
2)合法性测试。引用不需要测试合法性,指针要测试非空
3)可修改区别。指针可改变指向,引用不可改变
4)应用区别。若是对象可为空或者需要频繁更改对象的,建议使用指针;其余情况建议使用引用

C++中已经有malloc/free,为什么还要new/delete

前者是C语言中的标准库函数,后者是运算符。它们都可以用于申请动态内存和释放内存。

对于非内部数据类型的对象而言,只用malloc无法满足动态对象的要求。因为,对象的生成和消亡需要使用构造函数和析构函数。由于malloc是库函数而不是运算符,不在编译器的控制权限之内,因此它们无法构造和析构。

而new和delete作为运算符,可以动态分配内存以及释放内存。

3.面向对象

面向对象设计三原则

封装、继承、多态

C++空类默认产生哪些类成员函数

默认构造函数、析构函数、复制构造函数、赋值函数

structure 和 class 的区别

class的默认变量是private,struct中的默认变量是public。struct可以有构造函数、析构函数,也可以继承。C++中有struct的关键字就是为了让C程序员有个归属感hhh

析构函数可以为virtual,为什么构造函数不能呢?

虚函数采用一种虚调用的方法。虚调用可以在只有部分信息的情况下工作,特别允许我们调用一个只知道接口但不知道确切对象类型的函数。但如果要创建一个对象,势必要知道对象的准确类型,因此构造函数不能为虚。

如果虚函数这么有效,能否将所有函数都virtual?

不行,每个虚函数的对象都要维护一个虚函数表,并产生一个系统开销。如果只是一个很小的类,且不想派生,则没有必要使用虚函数。

什么是多态?

简单概括就是:一个接口,多个方法;在程序运行中才决定调用的函数。多态是面向对象编程的核心。

多态性允许子对象和父对象设置一个或多个同名接口。同时,允许将子类的指针赋值给父类的指针,也就是父对象可以根据当前赋值的子对象的特性运作。反之,父类的指针不能赋值给子类的指针。简而言之,父可以变子,但子不可以变父,继承具有单向性。在C++中多态性就是通过虚函数实现的。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白速龙王的回眸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值