c++面试须知

指针,多态(虚函数表、内存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很少有普招的,都是组里自己面。

一定要自己动手做,亲手做的东西,永远不会忘记;就算忘记了,几个关键字,就能想起来了。

最后一定不要忘记数据结构和算法的分量。

--

时间: 2024-10-18 21:28:28

c++面试须知的相关文章

面试须知:通常都要知道的TCP、HTTP知识点

TCP 要说http就绕不开tcp,TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.但是,http是基于tcp协议的. TCP/IP 协议分层模型 物理层将二进制的0和1和电压高低,光的闪灭和电波的强弱信号进行转换 链路层代表驱动 网络层 使用 IP 协议,IP 协议基于 IP 转发分包数据 IP 协议是个不可靠协议,不会重发 IP 协议发送失败会使用ICMP 协议通知失败 ARP 解析 IP 中的 MAC 地址,MAC 地址由网卡出厂提供 IP 还隐含链路层的

Java 程序员 面试前必备知识

前言 正文 自我介绍 数据结构和算法 Java篇 Java EE知识点储备 计算机网络 操作系统 数据库相关 XML 常识性知识 总结 前言 准备了接近两个月的面试笔试,现在终于是可以休息下了.真真是应了那句老话"台上一分钟, 台下十年功.". 人嘛,越努力,才会越幸运.机会总是留给有准备的人的. 下面分享一下我的Java实习生准备所看过的材料,(虽然至今还有些依然看不懂地方.) 希望对这方面的同学有点帮助. 正文 自我介绍 先针对自己的情况写段自我介绍,真实一些就好了,这方面我倒是没

c++ 核心知识-基于c++ primer第5版

如果一味的记录语法,为什么要我来说呢?而且学习编程语言重要的学会知识的核心,背后的逻辑和思想.记住一点,背后的逻辑和思想是为了解决问题而产生的. c++ primer第5版的第一章,后续我只会写第几章,不会再指明是依据c++primer第5版了. 第一章实际上是一些初步的介绍,初步的介绍了初学者的一些操作,基本的输入输出,函数,以及C++的核心类的初步介绍. 背后的核心和可以自我提问和回答的东西我觉得有这些. main函数,为什么一定要有main函数,很多人会告诉你一定要有main函数,为什么?

前端工程师必须知道的vue前端面试题目汇总

①:说说Vue和Angular.ReactJS的相同点和不同点 ②:简单描述一下Vue中的MVVM模型③:v-if和v-show指令有什么区别?④:如何阻止Vue中的绑定事件不发生冒泡⑤:父.子组件间是如何通信的?⑥:非父子层级的组件如何实现通信?⑦:什么是动态组件?他的作用是什么?⑧:为什么组件中的data属性的值必须是一个函数?答案与详解Q说说Vue和Angular.ReactJS的相同点和不同点与React的相同:●都使用了Virtual DOM●提供了响应式和组件化的视图组件●将注意力集

你必须知道的495个C语言问题,学习体会五

本文是 你必须知道的495个C语言问题 系列的第五篇,主要还是来了解下字符和字符串相关的东西,同时也会涉及内存相关的知识. 一般来说,字符串以及字符的处理都是编程语言中的常客,在C语言中,我们被给予了很好的灵活性,但是同时字符也成了最诡秘的处理单元. 在指针的内容里,我基本上讲解了字符串和字符数组的差异,所以这里就不再赘述了. 我们知道字符的英语翻译是character,这也是为什么字符类型为char的原因,我们使用单引号''来标示一个字符而使用双引号""来标示字符串.实际上,在C语言

从零开始学习jQuery(剧场版) 你必须知道的javascript

原文:从零开始学习jQuery(剧场版) 你必须知道的javascript 一.摘要 本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些javascript细节.  适合希望巩固javascript理论知识和基础知识的开发人员阅读.   二.前言 最近面试过一些人, 发现即使经验丰富的开发人员, 对于一些基础的理论和细节也常常会模糊. 写本文是因为就我自己而言第一次学习下面的内容时发现自己确实有所收获和感悟.  其实我们容易忽视的javascrip

linux常用命令大全(linux基础命令+命令备忘录+面试复习)

作者:蓝藻 时间:2018.7.3 前言 本文特点 授之以渔:了解命令学习方法.用途:不再死记硬背,拒绝漫无目的: 准确无误:所有命令执行通过(环境为centos7),拒绝复制粘贴: 实用性高:命令多为实际工作中用到的,实例讲解,拒绝纯理论: 条理清晰:分类归纳,快速找到想要的命令,拒绝天马行空: 总结性强:只列常用语法,易错情况强调,拒绝照搬照套. 学前须知 适用人群:开发.测试.运维 文档用途:linux命令学习.命令备忘录.面试复习 学习途径:书籍(鸟哥的Linux私房菜).视频:慕课网等

C++面试考点

后端开发面试题 =================== #后端开发面试知识点大纲: ##语言类(C++): ###关键字作用解释: volatile作用 Volatile关键词的第一个特性:易变性.所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新从内存中读取. Volatile关键词的第二个特性:“不可优化”特性.volatile告诉编译器,不要对我这个变量进行各种激进的优化,甚至将变量直接消除,保证程序员写在代码中

[转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 我之前想总结 一直懒 这次国庆加班 也本来计划来着 感冒了 作罢 .. 作者:蓝藻(罗蓝国度) 创建时间:2018.7.3编辑时间:2019.7.16 前言 本文特点 授之以渔:了解命令学习方法.用途:不再死记硬背,拒绝漫无目的: 准确无误:所有命令执行通过(环境为centos7),拒绝复制粘贴: 实用性高:命令多为实际工作中用到的,实例讲解,拒绝纯理论: 条理清晰:分类归纳,快速找到想要的命