「Linux」C++后台开发面试总结(献给进击BAT的你)
本文将讲述(Linux)服务器后台开发岗位的要求,包含了大部分会遇到的面试题目。掌握文中提到的技术,也算少许入门水平了,此文既是面经,也是后台开发的入门手册。无论社招还是校招,都可作为一个参考。
本文内容收集自知乎和其他博客,在此整理成章。
另外还有一些各大名企的面试题精选,需要的朋友可以扫码加群获取获取
校招:以C++基础为主,数据结构和常见算法(ACM经典题目)是必须掌握的。
技术类面试跟学校的经验 / 社团经验 / 学习成绩 挂钩不太高,当然不是说两者没关系。成绩好面试官可喜欢了,但成绩一般的同学不用灰心,入选初面的条件是简历上突出你的技术水平,不需要写一堆学习绩点高,其实是没很大意义的,HR看简历是关键字!关键字!必须突出项目/实验中使用到的技术,如多线程编程,Socket编程,Linux环境搭建,内存泄漏或BUG的检测手段,STL-标准库的使用。
非985-211同学,请重点参考简历制作过程中突出关键字这条规则!
社招:社招的同学,无论是1-3年经验,还是中途转行,都可参考。
写简历必须有针对性,以后台开发为例,请去拉勾网 / 猎聘 / 智联招聘等网站,多看看后台开发的JD.,有针对性地突出自身优势,每种岗位的技术需求的不一样的!不一样的!做简历千篇一律,必将石沉大海。同样道理,必须突出项目/实验中使用到的技术关键字。
互联网企业流动量很大,岗位是很缺的,如果简历投中了,一般几天内一波面完,基本形式是 初面-复面-HR面。BAT的流程相对很长,通常有4-6轮面试,每轮之间甚至隔很久,进大厂请做好持久战准备。
温馨提示:面试官也是普通员工,可能是你未来的经理或总监,他们也没有专业培训怎样面试,题目都是网上找的,所以多刷经典题。
校招的面试官是有些套路的,有题库,所以还是多刷题。
社招时,他们多半基于自身项目用到的知识,问你有没有相关经验,经验比技术重要。没经验不要紧,赶紧做个相关的例的,放在Github,面试时秀出来并详细介绍,狠狠的加分。
C和C++语言基础
参考书籍:《C++ primer》,《effective C++》,《STL源码解析》,《深度搜索C++对象模型》《C++高级进阶编程》
后台开发必考C++五大储存区和map or set用法,别问我为什么。
extern关键字的作用
static关键字作用
volatile关键字作用
说说const的作用,越多越好。const代表只读/不可修改,而不仅仅是常量。
new和malloc的区别
sizeof的运算结果,针对结构体对象,带虚函数类对象,指针,字符串,数组深入了解。
C++多态性与虚函数表
• C++多态的实现?虚函数的作用?了解一下。
虚函数用于实现多态,虚函数在设计上还要封装和抽象的作用,比如抽象工厂模式。
• 虚函数表是针对类还是针对对象的?同一个类的两个对象的虚函数表是怎么维护的?一个类是三角继承关系,它的虚函数表是什么形式?有多少个表?
• 纯虚函数如何定义,为什么对于存在虚函数的类中需要将虚构函数定义为虚函数?
• 析构函数能抛出异常吗?构造函数呢?
• 构造函数和析构函数中调用虚函数吗?
• 动态绑定是如何实现的?静态多态和动态多态的区别。
关于虚函数和继承,笔试题必考。考察输出和函数调用。指针和引用的区别
指针和数组千丝万缕的联系
智能指针是怎么实现的,什么适合改变引用计数?
auto_ptr是C99的内容,share_ptr,weak_ptr是C11的新内容。C++四种类型的转换。static_cast, dynamic_cast, const_cast, reinterpret_cast
内存对齐的原则,结构体中变量声明顺序不同时sizeof的大小。为什么要内存对齐。
内联函数有什么优点?内联函数与宏定义的区别?
• 宏定义用于计算时,有括号与没括号计算结果是不同的。C++内存管理。五大内存区(栈,堆,全局/静态区,常量区,代码区)
• static和const声明的变量放在哪个区?
• 全局数组最大可声明多少?局部数组最大可声明多少,如果栈不够用怎么办,可以改吗?STL标准库,基础中的要点,笔试必考,面试也必问。
• map和set是基于什么实现的?红黑树的特点。
• vector和list在储存上的区别。多维数组在储存上是连续的吗?
• queue和stack的实现,是数组还是链表?
• map中的元素是自定义结构体,这个结构体有什么要求?(需要重载operator<)必须在构造函数初始化列表里初始化的数据成员有哪些?
什么是原子操作?++i是原子操作吗,为什么?
• ++i和i++的区别,++i = (j++)+(++i) 结果是什么迭代器/游标使用需要注意什么?
iterator中remove和erase的区别?
数据结构与算法
手写strcoy, strcat, strcmo, memcpy等函数
合并两个升序单链表
求一个数组中的序列的最大和
检测是否二叉查找树
删除单链表的倒数k节点;反向打印链表(递归);链表是否有环
海量数据量中检测重复多的数值(鹅厂喜欢考,海量QQ号找重复的)
• 一百万个整数中,前100个最大的数。(划重点)
• 一百万个整数中出现频率最高的100个数。
海量数据的十种问题10机制转16进制
排序算法,其实面试很少现场写快排,但要懂算法思路,算法复杂度等。排序是经典中经典,不考也要看。
实现一个string类,基础题大题。
这一块考察范围很广,多刷题。牛客网,剑指OFFER,LeetCode等。
鹅厂习惯手写代码,写的问题不难,都是经典算法。
华为有机测,做的题目以考察编码逻辑为主。三道题。
百度的题比较有深度,也是经典算法,保不准要你写个查找树的删除算法,都赶上微软了。
大疆有机测,题目以一般基础知识为准。编程题与牛客网上的类似。
阿里用的是JAVA,偏向推荐算法和广告大数据,本人未见过。
其他公司,有拿个mac现场把类补全实现的;有口述加板书描述的;有一口气说N个问题,看你思路怎样的;但不管怎样,还是多刷题!算法是加分项,过不了也别担心,思路必须清晰。
再啰嗦一句,写算法时判空和判越界和判NULL等必须写出来!
树
二叉树的结构,二叉查找树的实现和搜索。
二叉树的6种遍历,按层遍历。一般不会问算法题,简述即可。
什么是红黑树,与AVL树有什么区别?
树很重要,因为map和MySQL的实现都与树有关,二叉树结构的搜索和删除插入效率都极高。树结构能用在很多地方提高性能。
Socket编程 - TCP/IP HTTP
参考书籍:《图解TCP/IP》,《TCP/IP详解 卷一》,《图解HTTP》,《HTTP权威指南》
后台开发必考TCP三次握手四次挥手,重点!
后台开发必考TCP多连接问题,如高并发(社招)
后台开发必考HTTP状态码和方法集,重点!
TCP和UDP之间的区别
• IP首部,TCP首部,UDP首部。一般不直接考,但要懂。
• TCP和UDP的应用场景。
• 如何实现可靠的UDP。(可靠的UDP,其实就是TCP好不。)TCP的三次握手和四次挥手。
• 其中的细节要了解清楚,例如2MSL,CLOSE_WAIT,TIME_WAIT.
• 一定要会画出整个过程图,最好是每个符号都画出来。TCP中六个标识位的作用
Socket编程知识,请理解每个函数的返回值,参数值和特殊字段含义。
• Client和Server的使用,函数调用过程是怎样的。
• listen函数,第二个参数什么作用。
• recv函数的返回值是什么含义。
• 怎么判断字符接受完毕。(设计一个结束符,通常是 ‘\n’)
• accpet函数返回的套接字和listen中套接字的关系。TCP重发机制
TCP的拥塞控制使用的算法和具体过程
Http/Https 1.0 1.1 2.0的特点和区别
Http返回状态码
• 302 和 303有什么区别
• 1xx 2xx 3xx 4xx 5xx 分别代表什么类型含义
• 500什么时候会出现,怎么解决
Http有什么方法集
Https和Http的区别,如何实现加密传输?加解密方法是什么?
浏览器中输入一个URL会发生什么,用到哪些协议?
请描述服务器过程,客户端到服务器中间的过程描述一下。
数据库 (MySQL)
主要参考书籍:《数据库系统概念》,《高性能MySQL》
SQL语言,内外连接,子查询,分组,聚集,嵌套,逻辑。手写一些例子。
MySQL索引方法?索引的优化。
InnoDB和MyISAM区别
什么是NoSQL
查询优化,从索引上优化,从SQL语言上优化。
B-树和B+树区别。MySQL的内核是棵B+树
注意二叉树,B树,B-树,B+树,B*树的区别。B树和B-树是一个意思。B树是M阶查找,当B树是二阶时就是二叉查找树。MySQL的联合索引,又称多列索引是什么,生效的条件是什么?
分库分表
进程与线程
- 进程间的通讯方法
方式一:管道 pipe
方式二:消息队列 msgget
方式三:信号 signal
方式四:信号量 semget
方式五:共享储存区 shmget
方式六:共享文件映射 mmap
方式七:套接字 socket
线程和进程有什么区别?
线程比进程有哪些优势?
什么时候有多线程,什么时候用多线程?
Linux中进程和线程使用的几个函数是什么?
线程的同步方法有哪些?
在Windows下线程同步的方式有:互斥量,信号量,事件,关键代码段,全局变量,临界区。
在Linux下线程同步的方式有:互斥锁,自旋锁,读写锁,屏障(并发完成同一项任务时,屏障的作用特别好使) 知道这些锁之间的区别,使用场景?关于进程调度 了解一下
Linux进程分为两种,实时进程和非实时进程
优先级分静态优先级和动态优先级,优先级的范围
调度策略
交互进程通过平均睡眠时间而被奖励死锁,及死锁产生的必要条件,怎么防止死锁? 重点!很常考。
什么是线程安全,线程安全是否完全由线程安全的类构成?
内存管理问题(社招)
后台开发必考内存类问题,没固定,多看。开发过程中最怕遇到内存泄漏,一定要会及时查找内存BUG,也要注意内存碎片,进程使用内存问题。不要爆内存,不要降性能。
会内存管理的校招同学,有加分。
什么是内存泄漏,怎么定位内存泄漏。定位内存泄漏
• 在windows平台下通过CRT中的库函数进行检查
• Linux下通过工具valgrind检测什么是内存碎片,怎么避免内存碎片。
new申请大量不连续的空间后,剩余可用内存分布零散,无法被有效使用。这些零散的可用内存叫内存碎片。
避免内存碎片使用伙伴算法。C++五大储存区,上文已提及。
32位系统一个进程最多可以占用多少内存。64位呢。
栈空间的最大是多少,堆空间的最大是多少。
虚拟内存的作用,虚拟内存的实现。
操作系统对内存的管理。
线程池,内存池的作用及实现方法,STL里内存池的实现方法。
Linux的内存管理机制是什么。浅谈Linux的内存管理机制
Linux操作
主要参考书籍:《现代操作系统》,《APUE》,《UNP》,《LINUX内核设计与实现》,《深入理解LINUX内核》
怎么查看计算机状态,内存使用情况等(任务管理器)
cpu,内存,硬盘,等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 ,tcp网络状态查看,各进程状态,抓包相关等相关命令 必须熟练掌握。(top, free, df, fdisk)netstat tcpdump ipcs ipcrm这几个命令是什么作用?这是网络相关的命令,请熟悉。
sed, awk, grep 三个超强大的命令,分别用于格式化修改,统计,和正则查找。请熟悉。
select, poll, epoll的区别。用select实现一个连接的大概步骤。
frok和vfork的区别。
fork和vfork都用于创建子进程。但是vfork创建子进程后,父进程阻塞,直到子进程调用exit()或者excle()。
对于内核中过程fork通过调用clone函数,然后clone函数调用do_fork()。do_fork()中调用copy_process()函数先复制task_struct结构体,然后复制其他关于内存,文件,寄存器等信息。fork采用写时拷贝技术,因此子进程和父进程的页表指向相同的页框。但是vfork不需要拷贝页表,因为父进程会一直阻塞,直接使用父进程页表。exit() 与 _exit()的区别
exit()清理后进入内核,_exit()直接陷入内核。孤儿进程是怎么产生的?僵尸进程是怎么产生的?
僵死进程的危害有哪些?怎么避免?
其他遇到的题目
有哪些东西是编译期间确定的,哪些是运行期间确定的?
考察编译和运行的了解。编译期间确定数组大小空间,宏定义,内联函数展开,extern变量等。运行期间确定new大小,多态类对象的函数调用,未赋值全局指针的指向等。怎么判断大小端,怎么判断程序是32位还是64位?
主要实现为static静态方法,首先为long分配了8个字节内存,然后为long分配了值,之后拿出long的第一个字节,如果为数据的高位,那么平台采用的是大端字节序,如果为数据的低位,那么平台采用的是小端字节序。
sizeof 指针等于4是32位,8是64位。内存只有2GB,怎么读入3GB的文件。
使用mmap了解一下。
社招面试,很多会先问你做过的项目,技术大牛会从中深入,建议大家先打个草稿,突出重点,并避开自己不足的地方,临场发挥很容易踩雷。
面试内容远不止这些,更多后续补充…
末尾让大家思考一道题,什么情况下,等式5+5=11在数学意义下是正确的。
「Linux」C++后台开发面试总结(献给进击BAT的你)相关推荐
- 【Linux】C++后台开发面试
本文将讲述(Linux)服务器后台开发岗位的要求,包含了大部分会遇到的面试题目.掌握文中提到的技术,也算少许入门水平了,此文既是面经,也是后台开发的入门手册.无论社招还是校招,都可作为一个参考. 本文 ...
- java高性能阻塞队列,Linux c/c 后台开发组建之:高性能阻塞队列
Linux c/c 后台开发组建之:高性能阻塞队列 (2015-12-01 06:01:47) 标签: Linux c/c 杂谈 分类: c/c 阻塞队列是后台开发中多线程异步架构的基本数据结构, ...
- steam 32位 linux 下载地址,「Linux」- 安装 Steam 客户端
「Linux」- 安装 Steam 客户端 更新日期:2020年09月30日 问题描述 虽然不经常玩游戏(有玩的冲动,但是打开游戏之后又不想玩了),但是还是会安装 Steam 客户端 该笔记将记录:在 ...
- 有道 linux 安装路径,「Linux」- 安装有道词典
「Linux」- 安装有道词典 更新日期:2019年07月10日 @IGNORECHANGE 系统环境 系统环境:Debian 安装依赖 #!/bin/bash apt-get install pyt ...
- 「Linux」- 运行任天堂红白机游戏(“小霸王”) @20210308
问题描述 # 02/16/2021 今天,闲来无事(其实也有事,就是累了,想休息一下),想再玩一玩这些小游戏,重温经典,所以就有了这篇文章,来记录这一过程.当我们不会去买一个红白机,虽然有卖的.我们想 ...
- docker运行linux桌面,「Linux」- 在 Docker 中,运行桌面应用(以向日葵远程客户端为例)...
「Linux」- 在 Docker 中,运行桌面应用(以向日葵远程客户端为例) 更新日期:2021年01月15日 @IGNORECHANGE @WIP 问题描述 我们使用 Debian 发行版,但是某 ...
- Linux C/C++后台开发高级架构师进阶指南-剑指腾讯T9
C++后台开发是一个庞杂的技术栈,因为没有统一的开发框架并且应用行业非常广泛.所有涉猎广泛,这里就把C/C++++后台开发的技术点进行整理总结,看完以后,不会让你失望的. -------------- ...
- 「Linux」- 禁用 IPv6 协议栈 @20210403
问题描述 为什么禁用 IPv6 协议栈?因为很多配套的基础设置还未到位,因此使用 IPv6 会遇到很多问题,比如 a 5-second delay 问题. 该笔记将记录:在 Linux 中,如何禁用 ...
- 后台接收数组_「面试必备」最新整理出的腾讯C++后台开发面试笔记
文章是由笔试面试腾讯笔记整理而来,主要是针对面试的C++后台开发岗位,涵盖了大部分C++后台开发相关可能会考察和被问到的技术点. 自认为这篇笔记是比较全面的总结,不管你是已经工作准备参加社招,还是在校 ...
最新文章
- 专家:香港拥有人民币资产配置独特优势
- 从零开始玩转JMX(一)——简介和Standard MBean
- Worker Service in ASP .NET Core
- Windows下solr的安装与部署
- sublime-text-2相关快捷键
- AndEngine 动态更新Text文本内容时报ArrayIndexOutOfBoundsException错误的解决
- 必知必会JVM垃圾回收——对象搜索算法与回收算法
- memcached学习笔记(1)——memcached原理
- Nicescroll滚动条插件的用法
- COAP协议全面分析
- Echarts实现饼图+饼图中心文字显示
- 不是广告!!迎来1w粉丝,本号送书啦!|原创
- 【小强推歌】---Shania Twain 经典歌曲收藏
- [tools]-excel的一些操作
- Linux 命令一览表,持续更新中
- fpu测试_【测试】拯救者Y9000X性能amp;散热数据
- Java个人对接口的理解
- 【React生命周期】
- 【CSDN官方】C技能树深度测评
- 数控机床工作平台位置伺服系统的的数学建模与仿真
热门文章
- 动态规划常见类型总结
- hive sql 分组拼接同一列字符串和hive sql 分组多行拼接为一行的实现方式
- 怎么画六面体网格_Hypermesh 0002 六面体网格画法2
- 【Python】用Python下载壁纸并自动更换桌面
- 事务隔离级别和传播行为_?Spring事务的传播行为案例分析
- 恢复EdrawProject软件未保存的项目文件步骤
- python调用可执行文件,如何从Python脚本调用可执行文件?
- 智能客服系列3 seq2seq+attention【Python十分钟写出聊天机器人】基于Keras实现seq2seq模型
- 金三银四已接近尾声,进大厂,你准备好了吗?过五关斩六将七轮面试终拿互联网大厂Offer!!(建议收藏)
- php 文本框如何输入的数字有限制,3种Jquery限制文本框只能输入数字字母的方法...