news 2026/8/30 21:24:36

腾讯后台开发笔试解析:C++与Linux核心考点拆解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
腾讯后台开发笔试解析:C++与Linux核心考点拆解

说实话,翻硬盘时翻出一份腾讯2015春招后台开发的练习卷,我盯着看了几分钟,脑子里全是当年刷题和笔试的画面。腾讯的后台开发岗,在2015年那会儿几乎是C++和Linux的天下,这套练习卷覆盖的知识面放到今天依然能打,很多考点在现在的校招笔试题里照样高频出现。它不是什么高深秘籍,就是一份非常典型的、能反映大厂后台基础能力考察逻辑的样本。如果你正在准备校招、跳槽大厂后台岗,或者自学后端想补基础,这份卷子值得一练,练完再看我下面的拆解,会有收获。

1. 2015年春招笔试生态:腾讯后台开发到底在筛什么人

现在回看2015年,后台开发的笔试套路和今天比已经变了不少。那时候微服务还没彻底普及,容器化生态远不如现在成熟,腾讯后台岗位的主流技术栈还是C++、Linux、TCP/IP、数据库那套硬功夫。笔试不是为了考倒你,而是为了在海量简历里快速筛出基础扎实、能直接上手干活的人。

1.1 为什么后台开发笔试绕不开“C++ + Linux”组合

2015年腾讯后台开发的核心业务场景,包括即时通讯、游戏服务端、社交后台,大部分核心模块都是C++写的。C++这门语言站在性能和可控性的制高点上,但同时也对开发者的内存管理、编译链接、底层机制理解有很高要求。笔试里大量考察指针、内存布局、编译过程,本质上是想确认你有没有能力在这套体系里写出稳定、高效的代码。

Linux则是后台服务运行的基座。你写的C++程序最终要部署在成千上万台Linux服务器上,要处理高并发连接、排查线上问题,不懂Linux命令和系统机制基本寸步难行。所以练习卷里出现操作系统、网络、Linux操作相关题目,一点不意外。

1.2 练习卷的题型结构与时间分配策略

从练习卷的整体分布来看,题型主要分三块:选择题、填空题、编程题。选择题大部分落在C++语法细节、操作系统原理、网络协议上,每道题考察的知识点很单一,但非常细腻,经常在边缘语法和易混淆概念上设陷阱。填空题偏向输出结果或补全代码,比如给你一段指针操作代码让你写出输出值。

编程题一般是两到三道,时间大概控制在60到90分钟。第一道通常是链表、二叉树、字符串处理这类经典数据结构题,第二道开始加大难度,可能出现海量数据处理、动态规划或者系统设计类的简化题。

我当时给自己的时间分配策略是:选择题最多40分钟,不会的果断先标记跳过去,编程题留足一个小时。笔试不是高考,每道题都死磕只会让你在后面的编程题上仓促应付。先把能拿的分拿稳,再回头啃难题,这是笔试最基本的生存法则。

提示:面试后台岗前,不要只在题库App上刷题。找一份像这样的完整练习卷,严格按照考试时间做一遍,才能真实暴露你在时间压力下的思维短板。

2. 选择题里的操作系统与网络:区分“背过”和“真懂”

操作系统和计算机网络是后台开发笔试的必考板块,也是不少人容易失分的地方。原因很简单,这两块知识在平时写业务代码时用得不够直接,很多人是考前突击背诵概念,一到变形题就露馅。

2.1 进程、线程与并发同步:从题目到真实后台场景

练习卷里几乎一定会出现的一道题是:进程和线程的区别。这种题看似简单,但选项里经常包含一些模糊表述,比如“进程是资源分配的最小单位,线程是CPU调度的最小单位”这句本身没问题,但出题人会在其他选项里掺入错误表述,比如“同一进程的多个线程共享独立的栈空间”“线程切换比进程切换开销一定更小”,让你去辨别。

这里我的经验是,遇到这种题别只看字面,要在脑子里建立一个完整的场景。比如线程为什么共享堆空间却拥有独立栈?因为每个线程需要保存自己的调用栈和局部变量,但堆上的对象是所有线程都能访问的。又比如线程切换开销真的“一定”比进程小吗?不一定,同一个进程内的线程切换确实比进程切换少了地址空间切换的开销,但跨进程的线程切换(比如Linux下线程本质也是轻量级进程)开销未必小多少,所以看到“一定”这种绝对化表述要格外警惕。

并发同步的必考点是互斥锁、信号量、条件变量和死锁。练习卷里通常会出一道经典的死锁题:给定两个线程分别持有锁A等待锁B、持有锁B等待锁A,问最终状态是什么。答案当然是死锁。但更进阶一点,它会考死锁的四个必要条件——互斥、持有并等待、不可剥夺、循环等待。这里我的建议是别死记四条,而是去理解这四条如何对应真实的加锁流程。你在后台服务里写多线程代码时,真正常见的是持有并等待和循环等待,这就是为什么很多工程规范要求“按固定顺序加锁”。

2.2 TCP/UDP细节:那些必考的状态与参数

网络部分,TCP的三次握手和四次挥手是绝对的主角。练习卷里比较常见的出法有两种,一种是直接问状态流转,比如客户端发送FIN后进入什么状态、服务端收到FIN后返回什么;另一种是给你一段异常场景,比如客户端崩溃了,服务端会发生什么,这就涉及到TCP的保活机制和超时重传。

TIME_WAIT是每次笔试几乎必考的状态。为什么主动关闭连接的一方要停留在TIME_WAIT状态2MSL?有两点原因:第一,确保最后的ACK能到达对端,如果丢失可以让对端重发FIN;第二,让本连接的所有报文在网络中自然消失,避免影响后续使用相同四元组的新连接。放到真实后台场景里,你负责的服务如果短连接特别多,线上就会看到大量TIME_WAIT状态的连接,这时候怎么调优就是另一个工程问题了。

TCP的滑动窗口和拥塞控制偶尔会以选择题形式出现,但比例不算太高。我建议你把重点放在“顺序号与确认号如何计算”和“拥塞窗口与慢启动阈值的关系”上。2015年的练习卷里出现过类似“发送方收到确认号100,下一个要发送的字节序号是多少”的题,答案应该是100,因为确认号表示期望收到的下一个字节序号。这类题只要理解了TCP字节流的语义,基本送分。

UDP的考察点反而更集中,一般只考无连接不可靠、头部开销小、支持广播多播,以及和TCP的应用场景对比。比如问适合用UDP的场景,选视频直播、DNS查询、游戏实时对战。真实后台开发中,腾讯的音视频和游戏服务大量使用UDP或基于UDP改造的自研协议,这个知识点完全不是纸上谈兵。

重要:整理网络题时,尽量把每个协议状态和实际抓包对应起来。用Wireshark抓一次三次握手和四次挥手,远比背十遍状态迁移图来得深刻。

3. C/C++内存与编译链接:一道题暴露真实功底

有些知识是面试时聊出来的,有些是笔试时写出来的,但C++的底层功底,往往一道选择题就能看出来。后台开发的技术栈核心是C++,笔试在这部分从来不手软。练习卷里关于内存、指针、编译链接的题目,我建议你逐题吃透,别只对答案。

3.1 指针、内存布局和sizeof的经典套路

每次笔试必有一道sizeof相关题目。比如定义char str[] = "hello",问你sizeof(str)是多少。答案是6,因为字符串末尾还有一个隐藏的\0。但如果定义char *p = "hello"sizeof(p)在32位平台是4,在64位平台是8,这就考察指针大小与运行平台的关系。

再进阶一点,结构体内存对齐几乎是腾讯笔试的保留节目。比如一个结构体包含char a; int b; char c;,问你sizeof(struct x)是多少。在默认对齐规则下,答案是12而不是理论上的6,因为int要按4字节对齐,char c后面还要填充3字节让整个结构体大小是最大对齐数的整数倍。我当年第一次做这种题也栽过,后来记了一个经验:结构体大小一定是最大成员对齐数的整数倍,每个成员偏移量必须是自身大小的整数倍。

指针和引用的区别也是高频题。引用是别名,不分配新内存;指针是变量,存的是地址。引用不能改绑,指针可以随时指向别处。有一道经典辨析题:函数参数传值和传引用的区别,结合修改外部变量、拷贝开销、空值可能性来出。真正理解这些之后,你才会明白为什么C++代码规范里频繁强调“大对象用const引用传参”。

3.2 编译链接与static/extern,隐藏的必考题

编译链接过程在2015年练习卷里出现过不少。一个C++源文件到可执行文件,经历预处理、编译、汇编、链接四个阶段。笔试题常问的是每个阶段做了什么事,比如预处理阶段处理宏定义和头文件展开,编译阶段生成汇编代码,链接阶段解析符号和重定位。印象很深的一道题是:多个源文件里都定义了同名全局变量,链接时会发生什么?答案是重复定义错误。但如果你给变量加了static修饰,每个源文件各自持有一份,互不影响,这个区别很能体现对“内部链接”和“外部链接”的理解。

static关键字在不同场景下的含义,也是必考常客。static全局变量限定在文件内可见,static局部变量延长生命周期到程序结束但作用域不变,static成员函数不依赖对象实例可以直接通过类名调用。extern则相反,它声明变量或函数在别的编译单元中定义,用来实现跨文件访问。

这些知识点看起来零碎,但后台开发几乎每天都在跟它们打交道。比如你在一个模块里定义了全局配置项,如果没加static又不加extern声明,多文件编译时很容易出重复符号链接错误;你要是把本该内部使用的函数写成非static,还会污染全局命名空间,这在大型项目里是实打实的工程质量问题。

注意:很多人在笔试时吃亏,不是因为不知道某个知识点,而是因为不知道题目在“变形”考察同一个知识点。比如sizeof和内存对齐放在一起考察,static与链接放在一起考察,单独背知识点是扛不住组合拳的。

4. 编程题从“能写出来”到“写得漂亮”,差在哪儿

编程题是笔试的重头戏,也是拉开分数差距的关键。练习卷里的编程题并不偏难怪,但很考验代码的完整性和鲁棒性。很多人一道题能写出来,但边界条件考虑不周、复杂度不达标,最后只能拿到一部分分数。这才是最可惜的。

4.1 链表、二叉树、哈希表:常考题型与万能思路

链表题几乎必考一道,最常见的是单链表反转。这题本身不难,但至少有三种写法:迭代反转、递归反转、头插法。面试官想在笔试卷上看到的是你能否写出既清楚又无bug的版本。我建议把迭代反转写成标配,核心逻辑就三步:保存next、翻转指针、移动prev和current。边界条件是链表为空或只有一个节点,别漏掉。

二叉树的高频题包括前中后序遍历、层序遍历、求最大深度、判断平衡二叉树。练习卷里通常会出现“重建二叉树”或“最近公共祖先”这类稍难题。做二叉树题我的感觉是,递归版本是最容易写对的,但你要清楚递归调用栈的深度在极端情况下会爆栈,所以涉及到深度时最好改成迭代版本,或者在写递归时先说明假设。

哈希表在笔试里往往不是单独考察,而是作为优化手段出现。比如判断两个字符串是否字母异位词,你的第一反应如果是双重循环,那就是O(n²)的解法;用哈希表统计每个字符出现次数,一下就降到O(n)。后台开发对算法复杂度的敏感度非常重要,因为线上服务处理的是海量请求,一个O(n²)的循环在数据量上来后就是灾难。

4.2 海量数据题目:思路比代码更值钱

2015年腾讯的练习卷已经开始出现海量数据处理的简化版题目,比如“从100亿个数中找出最大的100个数”或者“大文件里统计出现频率最高的前10个词”。这类题在笔试里不要求你真在一台机器上处理PB级数据,而是考察你有没有处理大数据问题的工程嗅觉。

标准答案往往是大顶堆或者小顶堆。找最大的100个数,就维护一个大小为100的小顶堆,堆顶是当前第100大的数,遍历完所有数据后堆里的100个元素就是答案。时间复杂度是O(n log m),其中m是堆的大小。如果你能顺便说清楚这样可以避免把所有数据全部载入内存,就已经超过很多人了。

但思路对了不代表满分,你还要考虑数据如何分布。如果数据是分布式的,能不能用MapReduce类似的思想做分片统计?如果100亿个数分布在不同机器上,每台机器算top100,最后再做一次归并。这些是后台开发工程思维的一部分,笔试卷上能体现出来,说明你真的理解海量数据问题不是单纯算法问题。

经验:编程题写完后,至少留三分钟自查。检查四件事:边界条件处理了吗?循环会不会死循环?有没有使用未初始化的变量?返回类型和题目要求一致吗?我自己因为最后一项吃过亏——函数逻辑全对,返回值却写错了,一道题直接扣掉一半分。

5. 数据库和Linux实操:笔试里最容易拉开差距的部分

很多人复习腾讯后台开发笔试时,把时间全压在C++和算法上,结果在数据库和Linux题目上栽了跟头。这部分题量不一定大,但每一道都在考察你是否具备真实的后台开发工作能力。毕竟写代码只是基本功,部署、运维、排查问题才是日常。

5.1 索引与事务:SQL题背后的设计意图

数据库题目主要涉及MySQL。练习卷里常考的SQL题包括:查询优化、索引选择、事务隔离级别。有一条很容易混淆的经典题:在什么情况下索引会失效?比如对索引列使用函数、隐式类型转换、左模糊匹配、OR条件中包含非索引列。我当时复习时把每种情况都整理成一条笔记,面试时再被问到就能脱口而出。

事务隔离级别的考察也很典型,MySQL默认的隔离级别是REPEATABLE READ,而Oracle默认是READ COMMITTED。这个差异在后台开发里经常被拿来讨论,因为由隔离级别引起的脏读、不可重复读、幻读问题,在不同数据库下表现完全不同。练习卷中常见的是给一个业务场景,让你判断用了哪种隔离级别会出现什么现象,然后问如何用间隙锁或者MVCC解决。

索引字段设计这道题,练习卷的出现率也很高。比如一张用户表有id、user_id、mobile、created_at几个字段,现在有一条查询条件是“根据手机号查用户信息”,你会不会在mobile字段上建索引?答案是分情况,如果这个查询是高频且区分度高的,那必须建;如果这张表只是批量导入用的临时表,那建了反而增加写开销。后台开发做表设计,索引不是越多越好,而是在读写之间找平衡。

5.2 Linux命令和排查思路,怎么在笔试题里体现工程经验

Linux部分的笔试题目通常分两类:一类直接考命令参数,比如查看端口占用用什么命令、查看进程的CPU和内存占用用什么命令。答案分别是netstatss,以及topps。但更值得关注的是第二类综合题:给你一个线上故障场景,让你列出排查思路。

练习卷里出现过类似这样一道题:一台服务器CPU使用率接近100%,你如何定位是哪个进程的哪个线程导致的?完整思路是:先用top查看是哪个进程CPU高,再用top -H -p PID查看该进程内哪个线程占用高,接着把线程ID转成十六进制,用jstackgdb查看线程栈,确定是代码里哪一块逻辑在空转或死循环。这套排查路径直到今天都适用,它在笔试卷上考察的不是单一命令的记忆,而是你是否真的处理过线上问题。

另一个经常出现的是查看日志。比如应用日志在滚动,你想实时追踪最新写入的日志,用tail -f;你想从一个非常大的日志文件里找出所有包含“ERROR”的行并统计出现次数,用grep ERROR app.log | wc -l。这些命令单独问谁都会,但放在一个综合场景里,就能看出你是不是只会在本地跑跑demo。

提示:不要小看笔试里的Linux题,更不要只背命令不带场景。建议在本地虚拟机或云服务器上主动制造几个故障——比如故意写一个死循环、疯狂创建线程、把磁盘空间占满,然后逐个用命令排查,这个过程比背一百道面试题都有效。

6. 做完这套练习卷之后:我建议你这样复盘

练习卷做完了,对完答案就扔到一边,这是大多数人复习效率低的核心原因。笔试题目本身就包含大量可挖掘的知识关联,做一遍的价值和深度复盘一遍的价值,至少差三倍。我分享几个自己复盘这类练习卷的方法,都是当年踩过坑之后总结出来的。

6.1 不要按题目复盘,按知识点网格复盘

我做错一道题后,不会只看正确答案就翻篇,而是把这个题涉及的知识点在脑子里画一张网。比如做错一个TCP的TIME_WAIT题,我会把所有相关知识点全部过一遍:TIME_WAIT出现在四次挥手的哪个阶段、主动关闭方是谁、为什么需要2MSL、MSL是多少、TIME_WAIT过多会有什么影响、如何调整内核参数、短连接场景和长连接场景各有什么表现。

这种复盘方式看似慢,但效率极高。一道选择题错过去,等于把TCP连接的整个生命周期重新理解了一遍,后面再遇到TCP相关的题目,无论怎么变都能应对。整理成文档后,考前复习也很方便,比重新翻一整套练习卷快得多。

6.2 把笔试题反向改造成面试题,自己考自己

练习卷里的编程题和简答题,本质上都是面试的素材。我在复盘时会做一件事:每道题都问问自己,如果我是面试官,我会顺着这道题追问什么。

比如笔试考了“进程和线程的区别”,我就问自己:为什么线程切换比进程切换开销小?协程和线程的区别是什么?一个进程最多能创建多少线程?创建线程失败通常是哪个资源不足?这些追问一旦能答上来,说明对这个知识点的理解才算真正到位。

编程题也一样。比如我写完了单链表反转,我会继续想:如果链表有环呢?如果是双向链表呢?如果要求原地反转不能开新空间呢?能不能用递归写并分析空间复杂度?这样一道算法题就变成了一组面试连环题,从笔试到面试的整个备考链路就打通了。

练习卷只是一面镜子,真正决定你水平的,是看到镜子里的自己之后,愿意花多少时间去弥补差距。2015年的题目和现在相比,考察的底层能力并没有本质变化,把基础打扎实,走遍大厂都不怕。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 21:21:24

PHP工程师二星级自测:从字符串截取到安全防护的全面避坑指南

有次跟同行聊招人,他说了句让我印象很深的话:来面试的都说自己会PHP,但一上手综合题就露馅。不是不会写,是写得太想当然。substr切中文切出乱码、和分不清、PDO预处理以为加个占位符就万事大吉……这些恰恰是“二星级”该考的东西…

作者头像 李华
网站建设 2026/8/30 21:20:23

复盘人人网2015研发笔试卷:算法、操作系统与数据库考点

前几天整理旧资料,翻出一份PDF,文件名写着《人人网2015研发笔试卷E》。说实话看到这个名字的时候愣了几秒——那会儿人人网还是很多应届生眼里的热门去处,从校内网改名之后,社交产品做得风生水起,研发笔试也出了好几套…

作者头像 李华
网站建设 2026/8/30 21:20:14

QGIS+QT+VS二次开发实战:从环境搭建到GIS应用构建

简介:本资源是一份面向GIS开发初学者与C桌面应用开发者的技术实践项目,聚焦于基于QGIS SDK与Qt框架在Visual Studio环境下开展轻量级GIS桌面工具的二次开发,重点解决矢量数据(Shapefile/GeoJSON/KML等)的加载、解析与基…

作者头像 李华
网站建设 2026/8/30 21:19:36

前端面试核心考点全拆解:原理、项目与手写题实战

1. 先说点实际的:金三银四,前端面试到底在考什么又到了金三银四,身边不少前端朋友都在准备换工作,私信问我最多的就是“现在前端面试到底考什么”“八股文还背不背”“项目怎么讲才加分”。说实话,我每年这时候都会帮身…

作者头像 李华
网站建设 2026/8/30 21:18:21

claude-skills Retrospectives实战:用complete-epic做好回顾

claude-skills Retrospectives实战:用complete-epic做好回顾 【免费下载链接】claude-skills 67 Specialized Skills for Full-Stack Developers. Transform Claude Code into your expert pair programmer. 项目地址: https://gitcode.com/GitHub_Trending/claud…

作者头像 李华
网站建设 2026/8/30 21:18:16

前端秋招面试核心考点与实战复盘:从简历到Offer的完整指南

9月底,秋招基本尘埃落定。投了八十多份简历,笔试做了二十来场,面试聊了三十多轮,最后手里攥着几个还算满意的前端offer,才终于有底气坐下来把这段经历完整复盘一遍。这篇文章不打算写成流水账,也不准备堆一…

作者头像 李华