c++面试须知
这些都是从zhihu上看到的。
指针,多态(虚函数表、内存layout),作用域,内存的管理
算法与数据结构,数据结构上由掌握哈希、优先级队列,算法上有字符串处理,简单的DFS、BFS、动态规划
系统的知识,进程、线程、协程、锁的使用,消息队列、共享内存、还有网络协议,epoll,select等。问题有,通过哈希来划分,通过队列来序列化操作。会结合你实际做过的项目来提问,写过web server,key-val数据库,度过redis源码,可以结合系统知识考察,确认是不是真的理解这些东西,是不是真的吸收了;
--------------------------
from zhihu chencw2ly
c++的知识,c++特性,多态,虚函数,vector和list实现的原理
多线程相关的,比如高并发,通信,然后还有和锁有关的东西;
数据库方面主要有,常用的sql语句,怎么提高数据库的性能,mysql和oracle的特性。
网络通信方面:主要就是tcp/ip和http,tcp/ip的几次握手,简单的客户端服务端的实现,http主要是http协议中的东西,比如http的格式,重要的有get/post的区别
linux会问一些常用的命令,比如查看进程,产看网络,修改权限,gcc相关的东西,
答的不好的话,就会进行白板编程。
建议:应届生,多刷题目,笔试成绩好的话,就好办。
---------------------------------
OOP三大项目:封装、继承、多态,v func是怎么实现的,v table是啥?前面的pure storagexx多重继承虚函数指针在内存中是什么样子的?
把所有的const static 各种情况都熟悉一遍,const pointer和pointer to const以及两者合体的区别?static 放在不同的地方不是一回事。
内存泄露肯定是会被问的,rule of three是基础,exception safe是难点。解决方法很简单,在工业界smart pointer就完了,没有那么多花样,工业界基本看不到裸指针。别小看exception safe,很耗时间去学的。
然后就是stl,大多数自诩懂c++的人,基本都将不明白 allocator是怎么回事。
RAII是啥玩意?至少听过。
os操作系统还是要好好看的。os学校出来的人基本都会集中在两个知识点上,进程管理和文件系统;进程管理堆非infra的开发类很重要,infra类两者都很重要。基本上知道进程是什么玩意,什么事context switch,现实中你干什么会触发它且cost什么。virtual mem和physical mem分别是什么?
分布式;
后端的话,好好看看和REST。以及js的single page application的原理(很多应用需要这个原理去减少延迟),以及c++是如何实现的,你对node和engin x多少需要点基础了解的。
看看mvc
设计模式
明白进程,stack和heap,给一个简单的程序,你能够在内存中给我画出来从头到尾的经过。
concurrent programming一般不会考到,也是最需要实际经验成长的。简单的例子最好能写出来,race conditon有些很复杂你看不出但简单的要能够说明白。
明白cpu cache是怎么运作的,为什么很多数据结构或算法明明很耗却很慢。Locality,局部性原理
如果你很好的明白concurrent,那instructions pipeline要是能够将明白更好了。
敏捷开发你要明白是真么一回事,code review,测试流程多少要有个概念。
template平时没有用过太过野性的方法,都是中规中矩。metaprogramming多少要明白好处在哪里?这玩意玩好了很厉害,美国在火星上那小车里面几乎都是metaprogramming。
static linking, dynamic linking优缺点。
怎么避免环形依赖。
从compile到linking到最后每一阶段所做的事情。
同样,如何manage 大型的c++ code,怎么分成模块,合理的继承。最最重要的就是怎么分模块进行测试。
让你现场写程序记得能加const就加const,小程序全部inline,能穿ref就别copy。开头一定要有哨兵,就是#ifndef #define #endif
出手就是namespace,告诉别人你是干过活的。
去看google c++规范,c++是不同代码风格能写成截然不同的语言。
能用stl绝对不要自己写,tranform那些要会用。要会自己写comparator,尤其是传给set/map的。
一定要有进程的概念,比如如果只有一台机子,你自己弄个in mem cache肯定比redis块。
讲到smart pointer一定要提到一个思想,就是谁拥有这个指针。
大多数人看书只看第一章,所以用宏做计算的风险很可能会被考到,scott meyers effective c++第二章。
补充:
c++11不需要过度的在意,先看好继承,大多数工业界的人自己还在学习阶段,而且除了fancy的新项目,成熟的项目一般不会跟风追新。
但是smart pointer一定要看好,一般c++做出点样子的公司,内部都有自己的c++标准,很早就基本处于03和11之间的状态,主要就是smart pointer。
你能会自然就好,但是一般不会强求。和metaprogramming一样,面你的人在这方面可能还是停留在理论帝的水平,太多东西都是私下玩,很多东西工作中不一定总能碰到。
如果有时间,scott meyers的四本effectvie 绝对经典。
如果你能够上youtube,搜jon kalb在cppcon上的exception safe,讲的非常好,当年cppcon最佳talk。
最后心态:面试官一般不会指望应届生能够回答出所有的问题,但会倾尽所能地去问,这样虽然没几个人能全部回答上来,但是可以对这一批candiates得到一个很清晰都的层次,谁强谁弱。面试没有硬性分数线,谁做的更好,谁就能够脱颖而出。
还要注意打开话题,可以了解在学校时的非课堂技术爱好,了解到与人交流的能力。
强者留下,弱者离开,不会因为是应届生就放水什么的,何况大家都是应届生。
experienced有experienced的面法,一般会偏向做深入到领域层面看其是否和组里做的东西锲合。experienced很少有普招的,都是组里自己面。
一定要自己动手做,亲手做的东西,永远不会忘记;就算忘记了,几个关键字,就能想起来了。
最后一定不要忘记数据结构和算法的分量。
--
c++面试须知的更多相关文章
- JAVA 面试须知
本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...
- python后端面试第八部分:制作简历和如何面试--长期维护
############### 就业指导 ################ 这里面有套路,你懂了这个套路,你会找到更好的工作,你会更快的找到工作, ,如何制作简历,五颗星 ,如何投递简历 ...
- 面试前必须知道的MySQL命令【explain】
前言 只有光头才能变强 刷面试题的时候,不知道你们有没有见过MySQL这两个命令:explain和profile(反正我就见过了).. 之前虽然知道这两个命令大概什么意思,但一直没有去做笔记.今天发现 ...
- Java面试——你必须知道的122题
1.Java面向对象中所有类的最终基类是什么? 参考答案 object,所有类都默认最终继承object,object是所有类的基类 2.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语 ...
- mysql经典面试必须知道的
http://www.cnblogs.com/wangshouchang/p/6930443.html 在华三的时候就问道了数据集的事务的四种特性,事务的隔离级别,事务的存储过程等
- 面试阿里,字节跳动,华为必须知道的Java创建对象的5种方式
Java创建对象的5种方式 1.直接new,调用了构造器2.通过clone(),没有调用构造器3.通过反射,调用了构造器4.通过反序列化,没有调用构造器5.通过Unsafe类的allocateInst ...
- 从零开始学习jQuery(剧场版) 你必须知道的javascript
原文:从零开始学习jQuery(剧场版) 你必须知道的javascript 一.摘要 本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些javascri ...
- 《程序员面试金典(第5版)》【PDF】下载
<程序员面试金典(第5版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382252 内容简介 本书作者Gayle Laakma ...
- Python机器学习笔记:不得不了解的机器学习面试知识点(1)
机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...
随机推荐
- COGS 750. 栅格网络流
★★☆ 输入文件:flowa.in 输出文件:flowa.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太难了,他不知道如何解决 ...
- IDA逆向:结构体的逆向
源代码: int _tmain(int argc, _TCHAR* argv[]) { struct v1 { int a; short b; char c; int d; double e; }; ...
- js 中//<![CDATA[ 意义
CDATA内部所有东西都会被解析器忽略,加入文本中包含了大量< 和 $符号,就像编程中经常出现的情况一样,那么这个元素就可以被定义为一个CDATA部分 ,CDATA 区段开始于 "&l ...
- 无效的 JSON 基元 解决办法
在AJAX中进行如下修改: 加入: dataType: "json", 移除: contentType: 'application/json', 然后检查参数名称,类型是否符合后台 ...
- POJ 3041 Asteroids (对偶性,二分图匹配)
题目:POJ 3041 Asteroids http://poj.org/problem?id=3041 分析: 把位置下标看出一条边,这显然是一个二分图最小顶点覆盖的问题,Hungary就好. 挑战 ...
- Finite Encyclopedia of Integer Sequences(找规律)
6617: Finite Encyclopedia of Integer Sequences 时间限制: 1 Sec 内存限制: 128 MB提交: 375 解决: 91[提交] [状态] [讨论 ...
- 2018.6.24 oracle数据库的 事务及视图
第06章 事务及视图 本章内容 事务 视图 1 事务 1.1 什么是事务 事务也称工作单元,是一个或多个SQL语句组成的序列,这些个SQL操作作为一个完整的工作单元要么全部执行,要么全不执行. ...
- python实现剑指offer删除链表中重复的节点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- 理解dropout
理解dropout 注意:图片都在github上放着,如果刷不开的话,可以考虑FQ. 转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/490 ...
- 已解决: mybatis报错 org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'xxx' in 'class java.lang.String'
最近在练习MyBatis时 进行姓名的模糊查询时候出现 org.apache.ibatis.exceptions.PersistenceException: ### Error querying da ...