整理一些C++面试容易被问到的问题及其答案

这是陈硕在知乎给出的几个问题(针对校招)
  • 标准库各容器的基本操作的复杂度。标准库算法的复杂度,例如 std::sort() 的平均复杂度、最坏复杂度(答 O(N^2) 和 O(N log N) 都算对),最坏情况什么时候出现。
  • 标准库各容器(deque 除外)的数据结构(标准党勿喷,主流 STL 实现的数据结构都差不多),以及 vector 的容量增长方式。如果回答得特别好,还可以补充问为什么 vector::push_back() 的复杂度是分摊之后的 O(1),作为加分。
  • 出一道使用 lower_bound / upper_bound 能轻松解决的简单算法题;或者实现 set_intersection() 或 set_union() 或 merge();或者实现 word count,统计每个单词出现的次数(最多十几行代码),如果有时间,输出时再按出现次数排序。
还有一点:
我一般会循序渐进的问问题,以C++的虚函数为例。
  1. 了解多态么?它是怎么实现的?什么时候应该使用它?
  2. 在语言层面,虚函数是怎样实现的?为什么还要区分虚函数和普通函数,都成虚函数不好么?
  3. 虚表里存储的是什么?
  4. 如果基类定义先声明了f函数后声明了g函数,子类定义会反过来(真正面试的时候会有样例代码给出),那么虚表里第一项是什么?
  5. 如果有多继承,虚表内会怎样?
  6. 等等。。。
这只是个大体思路,关键是看求职者的 现场反应能力和链接能力,比如:
  • 第一题,如果提到静态多态,并且简单询问后确认懂得什么是静态多态则有额外加分。
  • 第二题,提到和其他语言的对比(如java oc python 等),有额外加分。
  • 第四题,关键不在于答案,而在于回答的思路。如果在回答出大体原理之后加以说明这东西是undefined,不应该依赖于这个结果,有额外加分。
  • 第五题,如果一开始求职者不太了解这个事情,但是通过我简单的提示,能够沿着这个思路走下去,无论对错,均有额外加分。
如果在面试中会询问到了求职者之前没有思考过的问题,我会给出适当的提示,逼迫其现场思考。

如果中间被求职者带跑了,比如问第一题的时候扯到模板元编程了,我的态度就是随着他跑,在他自己最擅长的领域才能看出他的思路究竟是怎样的。

总之,尽量通过方方面面探知求职人员对技术核心思想的把握能力,如果在面试之前他就考虑的很透彻,这是上上之选(原因是其会自己沿着正确的方向独立思考),如果在面试中可以现场考虑出大概,这是上之选(原因是其逻辑思维还不错)。

思维方式很重要,某种程度上,这东西决定一个人的命运。

下次有空自己整理一些:

老套路,先挖坑再填。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值