c++面试问题的几个方向
1 关于多态,面向对象的几个要点
作为面向对象的程序员,这个问题是必须要弄清楚的,网上、教科书上都是标准答案,关键是理解内涵哦。
2 关于虚函数表和RTTI
这个Inside C++ Object Model讲的相当明确
虚函数表的第一项就是关于RTTI的,RTTI就是Run Time Type Identification。
后面就是虚函数指针项了。
3 C++对象的内存布局
在引入了虚函数、继承、多继承、虚拟继承后,再加上内存对齐,这个问题就不那么简单了。
4 构造函数、析构函数与虚函数
一系列问题,作为一个C++程序员,这个务必要搞清楚。
5 虚函数的缺省参数问题
代码估计更能描述清楚问题:
class A
{
public:
virtual void function(int type = 0) {...}
}
class B : public A
{
public:
virtual void function(int type = 2) {...} // 注意这里type缺省值被改成了2
}
这样改有什么问题呢?
我们知道virtual是动态绑定的,为了效率考虑,缺省参数是静态绑定的,使用的是基类的缺省参数。这样一来上面的做法就会出现问题了。
如果能使用静态绑定和动态绑定来解释这个问题,那你就上了一个台阶了,我是从来没这样用过啊,不知道问题所在。有文章说没有吃过苦头的C++程序员不是好程序员,驯服不了C++这个怪物,此言非虚!?
6 关于运算符
重载的问题,运算符和函数
7 关于new与delete的形式
8 关于private继承
不知道多少人用过,用了又能有多少好处,而且有些语言已经禁止private继承了,纠缠这个有何意义呢。
9 关于STL的Iterator
STL有很多牛思想,不过我还没被问过,像Traits编程技法等等。面试常见的是,++前置与后置的效率问题。
为了编译器区分前置和后置++,C++规定后置形式有一个int类型参数 ,当函数被调用时,编译器传递一个0做为int参数的值给该函数。不这样规定,无法区分,因为都仅以自身对象为入参。
class CInt {
private:
int m_value;
//
CInt & CInt:: operator ++ () // 前置的是没有参数的,并且返回引用
{
this->m_value += ;
return *this;
}
const CInt CInt::operator++ (int) // 后置的有一个匿名参数,并且返回const值
{
CInt old = *this;
++(*this);
return old;
}
};
上面的实现解释了一个关键问题:前置比后置效率高 ,后置需要构造临时对象并返回。
为什么前置和后置返回参数不同呢?
前置仅仅是对自身进行运算,并将自身返回,这样外面可以直接对这个返回对象再进行操作 ,如(++it)->function()。
后置因其返回的不是原来的对象,此时再进行额外操作,改变的是临时对象的状态,并不异义 ,容易误解。
那为什么不返回const &呢?因为不能这么做,返回引用将无效,临时对象已经不存在了。
所以后置返回const 对象即限制对此临时对象进行误操作,并显式地告诉调用者此对象仅为原对象的副本。
10 关于C++的异常
C++有异常处理机制,虽然不够完善,但还是应该去仔细了解了解。
11 关于C++与C的效率问题
这个问题最不好讲,效率的比较,环境是什么,先决条件又是什么呢,从语言层面讲C++比起C语言来主要的效率损失来自于virtual导致的非直接调用,这个Inside C++ Object Model讲的相当明确了。
c++面试问题的几个方向的更多相关文章
- [灵魂拷问]MySQL面试高频100问(工程师方向)
作者:呼延十 juejin.im/post/5d351303f265da1bd30596f9 前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉 ...
- 2014面试总结--java、数据 方向
这里不讲详细的题目.仅仅是总结一下体会. 好一点的公司考察的都比較全面,主要看你对原理性的理解.还有你的思维逻辑:就眼下来讲,对深度的考察大于广度.而我个人如今这个阶段也比較专注于深度. 列一些常常问 ...
- 【转】阿里2015校招面试回忆(成功拿到offer)
原文转自:http://blog.jobbole.com/78722/ 1. 引言 继上次<百度2015校园招聘面试题回忆(成功拿到offer)>文章过后,大家都希望除了题目之外,最好能给 ...
- 阿里2015回顾面试招收学历(获得成功offer)
1. 引言 继上次"百度2015校园招聘面试题回顾录(成功拿到offer)"文章过后,大家都希望除了题目之外.最好能给出自己当时的回答情况,看看有没有什么回答技巧,这样更有參考价值 ...
- ofo C++面试
面试官不是C++方向,所以上来就是三个算法题. 1. 假设一个男生和他女朋友约吃饭,男生到的时间点是 6 点 到6点半,女生到的时间可能是 6点15到6点30,都是等概率的到达,问男生比女生到的晚的概 ...
- 写在19年初的后端社招面试经历(两年经验): 蚂蚁 头条 PingCAP
去年(18年)年底想出来看看机会,最后很幸运地拿到了 PingCAP,今日头条的 offer 以及蚂蚁金服的口头 offer.想着可以总结一下经验,分享一下自己这一段"骑驴找马"过 ...
- 阿里2015校招面试回忆录(成功拿到offer)
1. 引言 继上次“百度2015校园招聘面试题回忆录(成功拿到offer)”文章过后,大家都希望除了题目之外,最好能给出自己当时的回答情况,看看有没有什么回答技巧,这样更有参考价值. 嗯,建议的很对, ...
- HR面试:过五关斩六将后,小心阴沟翻船!(史上最全、避坑宝典)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 记2014“蓝桥杯全国软件大赛"决赛北京之行
5月29,30日 最终到了这一天.晚上有数据结构课,10点多的火车,我们就没有去上课,下午在宿舍里收拾东西,晚上8点左右从南校出发,9点半多到达火车站和老师学长学姐们会和. 第一次去北京,第一次买的卧 ...
随机推荐
- python2行代码调用程序
import win32api win32api.ShellExecute(0, 'open', r'C:\Users\TOPFEEL\AppData\Local\Postman\app-5.5.0\ ...
- epoll IO多路复用(异步阻塞AIO)
epoll的异步阻塞(AIO): 用户线程创建epoll后,其实是内核线程负责扫描 fd 列表(在网络服务器上可以是socket,socket在创建后返回的也是文件描述符),并填充事件链表.但是,并不 ...
- C#模拟百度登录并到指定网站评论回帖(三)
上次说到怎么获取BAIDUID,这个相信很多人都能够拿到就不多说了,今天一连说两个,获取token和raskey 2.利用以上获得的cookie直接访问页面 https://passport.baid ...
- Java 8 (6) Stream 流 - 并行数据处理与性能
在Java 7之前,并行处理集合非常麻烦.首先你要明确的把包含数据的数据结构分成若干子部分,然后你要把每个子部分分配一个独立的线程.然后,你需要在恰当的时候对他们进行同步来避免竞争,等待所有线程完成. ...
- 安卓TV盒子常见问题以及解决方法
1.为什么requestfocus无效 原因:requestfocus不支持在Touch模式下的Focus; 解法方案:再加一个requestFocusFromTouch函数. 2.摄像头打开问题,调 ...
- git 分支处理
git 创建常用(多)分支(如:Master 主分支.Develop 分.Feature 功能分支.Release 预发布分支.Hotfix(或者Fixbug) 分支)步骤1.mkdir 项目名 ...
- Spring框架之控制反转和依赖注入
学Spring框架必须理解控制反转和依赖注入.下面各自举一个例子,来说明控制反转和依赖注入. IOC(控制反转):应用本身创建和维护的依赖对象:现在交由外部容器(Spring)来创建和维护:这个控制权 ...
- Hibernate框架之Criteria 详解
自从学数据库以来,从SQL查询-HQL查询-到Criteria 查询.有人问我:掌握一种查询语句不就可以吗,为什么还要学Criteria 查询?我回答道:用到特定于数据库的SQL 语句,程序本身会依赖 ...
- POJ_1611_The Suspect
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 25149 Accepted: 12329 De ...
- PHP数据乱码
本文主要总结下PHP数据乱码的解决方案 要点:多个不同文件系统里一定要统一编码 [注意] (1)HTML编码与MySQL编码一致: (2)PHP编码与MySQL编码一致: (3)header头发送字符 ...