面试时的那点事

面试时的那点事

      算来毕业也将近两年了,从刚回写程序开始,面试过的公司是屈指可数,难说算坏算好啊。主席老人家说过要在战斗中壮大自己,看来我历练的还远远不够,不过在有限的斗争中,也总结了些许,与大家共勉之。
      说来有些问题太过于tricky,如果过分沉浸在这些奇巧淫技里,反倒害了自己,不如把精力投入到更有效的地方。偏偏还能碰到有些人就喜欢追究这类问题,就像孔乙己一样因为知道回字的几种写法一样,而颇为洋洋得意。
      我自诩是C++程序员,因此这里就大概写写面试时曾经遇到的关于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的形式
这个我还写过一片blog专门讲过。
 
8 关于private继承
不知道多少人用过,用了又能有多少好处,而且有些语言已经禁止private继承了,纠缠这个有何意义呢。
 
9 关于STL的Iterator
STL有很多牛思想,不过我还没被问过,像Traits编程技法等等。面试常见的是,++前置与后置的效率问题。
 
10 关于C++的异常
C++有异常处理机制,虽然不够完善,但还是应该去仔细了解了解。
 
11 关于C++与C的效率问题
      这个问题最不好讲,效率的比较,环境是什么,先决条件又是什么呢,从语言层面讲C++比起C语言来主要的效率损失来自于virtual导致的非直接调用,这个Inside C++ Object Model讲的相当明确了。

关于读书

      C++程序员必读的几本书,Inside C++ Object Model,Effective C++,实在汗颜,Effective系列从来没有读完过,而且只能说是上面的很多错误用法我也不那么用,因此我也记不住。
      Inside C++是本值得研读多次的好书,强烈推荐。
      应付C++的面试问题的话,再把Effective C++系列多读两遍,把上面的条款记住,基本上就没什么问题了。(你会发现有很多问题其实都是那本书上的) 

程序员的根本是什么

      语言之外有太多的东西,比如数据结构与算法,当然不是死记,而是学会思想,我始终坚信这个比语言之流更重要千倍。

再如设计模式,我是越来越推崇它了;这些都是做开发的根基所在。如果不能使用到它们,基本上说明你做的是无价值的工作,难以有效的提升,真的。趁早打算吧,好好反思一下,规划规划。
其它的专项比如网络、比如操作系统,难以一一列举了。
 
      最后提一句,面试时切记不要说好像之类的不确定的词语,否则会被当作不够确定,而被怀疑和反问,被当作你不能确定,那你说冤不冤啊。
 

 

你可能感兴趣的:(数据结构,c,function,面试,object,语言)