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)
机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...
随机推荐
- HDU 2191 悼念汶川地震(多重背包)
思路: 多重背包转成01背包,怎么转?把一种大米看成一堆单个的物品,每件物品要么装入,要么不装.复杂度比01背包要大.时间复杂度为O(vns)(这里S是所有物品的数量s之和).这个做法太粗糙了,但就是 ...
- linux 命令——41 ps(转)
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- [Rails学习之路]初识Ruby(一)
Ruby是一门动态的.强类型的.纯面向对象的编程语言.它和Python非常相似,但比Python面向对象更加彻底.使用更加灵活.语法更加复杂.也更为有趣. 抛开做事情到底应该有多少种方法这个问题,我相 ...
- noip模拟赛#24
这套题我只会写第二题...我... T1:给出一个含有向边和无向边的混合图,如何确定无向边的方向使得图中不存在环.保证有解.多解情况输出任意解. =>我往最大流的残量网络的方向去想了...因为混 ...
- Android(java)学习笔记75:ListViewProject案例(ListView + BaseAdapter + CheckBox)
这个案例可能稍微复杂一点,我会讲述详细一点: 1. 首先是AndroidManifest.xml: <?xml version="1.0" encoding="ut ...
- 注册Windows service及其相关
注册Windows service,.net写的 net stop "xxxxxx""%SYSTEMROOT%\Microsoft.NET\Framework\v2.0. ...
- form 表单 和 jQuery HTML / CSS 方法($().html 类似的样式)
1 有关链接 :http://www.runoob.com/tags/tag-form.html https://www.cnblogs.com/Jxwz/p/4509618.html https:/ ...
- Java基础面试操作题: 获取 1-20 之间的随机数,共计 20 个,要求不能重复 获取 1-20 之间的随机数,共计 10 个,要求不能重
package com.swift; import java.util.HashSet; import java.util.Random; import java.util.Set; public c ...
- 第18题:在O(1)时间删除链表结点+删除链表中重复的节点
题目描述:题目描述在O(1)时间删除链表结点 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 考查创新编程能力. 思路: 1.如果从头到尾遍历,时间O(n) 2.如果将待删 ...
- 51nod——1402最大值、2479小b分糖果 (套路)
1402最大值:正向从1到n,如果没有限制,就依次递增1,如果有限制,就取那个限制和递增到这的最小值.这样保证1和每个限制点后面都是符合题意的递增,但是限制点前面这个位置可能会有落差(之前递增多了). ...