干货|腾讯 Linux C/C++ 后端开发岗面试

金九银十秋招季正酣,每一个程序员心中都有一个大厂梦,这不仅仅是薪资水平的跃升,更是技术深度的体现! 如今企业招聘越来越看重实战能力,尤其是在C/C++开发领域,仅仅会背八股文远远不够。

今天带来腾讯 Linux C/C++ 后端面经,从面试流程到核心考点,再到避坑技巧,希望能帮正在备战的你少走弯路。

腾讯的面试流程以 技术深度系统性考察 为核心,涵盖 C++基础、操作系统、网络编程、算法与数据结构、系统设计 等多个领域。

接下来我们进入面试流程:

前言腾讯面试全流程

请做好 "持久战" 准备

腾讯的面试流程不算快,前后持续一个多月,整体节奏是 "技术面层层深入 + 综合考察",具体环节如下:

  • 一轮/二轮:电话技术面(项目+基础)
  • 三轮/四轮:现场笔试+面试(代码+原理)
  • 五轮:复试(综合能力+技术视野)
  • 六轮:HR面(稳定性+职业规划)
  • 终面:Offer Call + 确定薪资

全程无 "海投式刷人" 感,每轮都有明确考察目标 ------ 前两轮筛基础,中间两轮看能力深度,后两轮定人岗匹配,建议每轮结束后及时复盘,针对性补短板。

Part1一面

电话面,围绕计算机网络、操作系统。内容包括TCP拥塞控制算法、TCP和UDP区别、进程和线程区别等等。都是常规的题目展开,都是常见的八股文。

列举几个:

Q1:TCP 拥塞控制算法是怎样的?

A:TCP 拥塞控制主要有四个阶段:慢启动、拥塞避免、快速重传和快速恢复

首先是慢启动,拥塞窗口以指数方式增长;接着进入拥塞避免阶段,拥塞窗口改为线性增长;当收到 3 次冗余 ACK 时,触发快重传,立即重传相应报文;之后进入快恢复阶段,拥塞窗口减半后再线性增长。整个过程的核心是为了避免网络因数据过多而出现过载。

Q2:TCP 和 UDP 有什么区别?

A:TCP 是面向连接的协议,通信前需要建立三次握手,通信后要进行四次挥手,能保证数据的可靠传输、有序交付,还具有流量控制和拥塞控制机制,但开销较大,适用于对可靠性要求高的场景,如文件传输。UDP 是无连接的协议,通信前无需建立连接,不保证数据的可靠传输和有序交付,开销小、传输速度快,适用于对实时性要求高的场景,如视频通话。

Q3:进程和线程有什么区别?

A:进程是资源分配的基本单位,每个进程有独立的地址空间、文件描述符等资源,进程间切换开销大;线程是调度的基本单位,线程共享所属进程的资源,线程间切换开销小。一个进程可以包含多个线程,线程的存在让进程内的多个任务能并发执行。

Part2二面

仍旧是电话面,时隔6天,整个面试时长大概20分钟。

核心面试点:C++虚函数、进程管理、数据结构、Linux命令:

Q1. 构造函数可以是虚函数吗?

A:不可以。原因有两点:

构造对象的时候,必须知道对象的实际类型。而虚函数行为是在运行期间确定实际类型的,在构造对象时,对象还没有构造成功,编译器无法知道对象的实际类型是该类本身还是其派生类。

虚函数的运行依赖于虚函数指针,而虚函数指针在构造函数中进行初始化,让它指向正确的虚函数表,而在对象构造期间,虚函数指针还未构造完成。

Q2. 网络字节序是大端序还是小端序?

A:大端序。

Q3. Linux 中如何创建进程以及创建进程后如何区分子进程?

A:使用 fork () 调用创建子进程,fork () 调用返回两个值,大于 0 的表示父进程,等于 0 的表示子进程。

Q4. fork 创建的子进程继承了父进程哪些内容?

A:子进程继承了父进程的地址空间、打开的文件描述符等。

Q5. fork 创建的子进程继承了父进程打开的文件描述符,如何让这种继承不发生?

A:可以在打开文件的时候,设置 FD_CLOSEXEC 标志位,如果文件描述符中这个标志位置位,那么调用 exec 时会自动关闭对应的文件。

Q6. C++ 虚函数原理是什么?

A:虚函数是依赖于虚函数指针实现的,每个拥有虚函数的类都有一个虚表,类的对象存在一个虚函数指针,指向实际类型的虚表。虚函数运行的时候,会根据虚函数指针找到正确的虚表,从而执行正确的虚函数。

Q7. C++ 多态的实现方式是什么?

A:多态分为两种,一种是运行时的多态,一种是编译时的多态。前者称为动态绑定,后者称为静态绑定。动态绑定是由虚函数来实现的,静态绑定是由函数重载来实现的。

Q8. C++ vector 和 list 的区别?

A:vector 是动态数组,会动态进行分配内存,进行扩容操作。list 是双向链表。

Q9. 访问 vector 的迭代器的时候可以删减元素吗?list 呢?

A:任何对 vector 的修改都将导致 vector 的迭代器失效。list 因为是双向链表,所以不会失效。

Q10. C++ vector 的底层实现原理是什么?

A:vector 底层是基于动态数组实现的。

Q11. C++ map 的底层实现是什么?

A:map 的底层实现是基于红黑树的。

Q12. 红黑树的特点以及常见的二叉平衡树有哪些?

A:红黑树性能比较高,插入删除时间复杂度保持在 logn。和 AVL 相比,要求不是那么严格,它只要求到叶节点的最长路径不超过最短路径的两倍。相比之下,AVL 要求左右子树相差高度不超过一,简单的插入或者删除都会导致树的不平衡需要旋转操作。常见的二叉平衡树有 AVL 树、红黑树等。

Q13. C++ 空类的 sizeof 大小是多少?

A:C++ 空类的大小为 1,如果含有虚函数的话,大小为指针的大小。32 位系统指针大小是 4。C++ 要求即使是空类,对象也要有存储空间。含有虚函数的空类则是因为对象有虚函数指针。

Q14. 快速排序的时间复杂度是多少?

A:快速排序平均时间复杂度为 nlogn,最差 O (n²)。

Q15. nlogn 是排序最好的时间复杂度吗?

A:不是,还有 O (n) 的算法,比如说基数排序。

Q16. 基数排序的原理?

A:按数字的位数分桶排序(从低位到高位),适用于整数或字符串,缺点是处理负数较复杂。

Q17. 负载均衡的应用场景?

A:分布式系统中分发请求到多个服务器(如Nginx反向代理、DNS轮询)。

Q18. HTTP协议是否用过?

A:未直接使用,但了解其基于TCP的无状态请求-响应模型。

Q19. protobuf协议?

A:公司使用JSON协议,未接触过protobuf(Google开发的高效序列化协议)。

Q20. 数据库经验?

A:未涉及生产环境数据库开发,仅学习过SQL语法。

Q21. Redis经验?

A:用Python+Flask开发过基于Redis的聊天程序(使用list结构)。

Q22. 线程安全和可重入函数的区别?

A:线程安全:多线程调用时需加锁保护共享资源。

可重入函数:无需加锁,允许多个线程同时调用(无静态/全局变量)。

Q23. Linux中top命令的cache和buffer区别?

A:Buffer:块设备I/O缓冲(如磁盘读写)。Cache:文件系统缓存(如文件内容)。

Q24. 常用Linux命令?

A:strace(跟踪系统调用)、netstat(查看网络连接)、tcpdump(抓包分析)。

Q25. 动态库的连接顺序是否重要?

A:重要。依赖库需放在后面(如gcc main.o -lmylib -lotherlib)。

Q26. 智力题:100本书,两人轮流拿1~5本,先拿者如何必胜?

A:先拿4本,后续每次与对手拿书数量之和为6(如对手拿3,自己拿3),最终拿到最后一本。

Linux教程

分享Linux、Unix、C/C++后端开发、面试题等技术知识讲解

Part3三面

通过二面后,将进入现场面试环节(线下笔试+双人面试)。

笔试时给了一张试卷,限时一个半小时。难度中等,考查范围较基础且全面,涵盖 C++、操作系统、计算机网络、算法与数据结构等。

面试环节,两位面试官参与。面试流程主要围绕简历展开,要求详细介绍项目内容、技术难点及架构设计等。随后考察软件工程原理。

核心面试点:C++底层、操作系统、算法、软件工程

Q1. Linux 互斥锁里面递归锁和非递归锁的使用方式,返回值是怎样的?

A:(需结合实际使用场景作答,递归锁允许同一线程多次获取锁,非递归锁不允许,返回值通常为 0 表示成功,非 0 表示失败,具体需根据不同实现说明)

Q2. Golang Map 是否是线程安全的?如何设计一个无锁保护的 Map?

A:Golang Map 不是线程安全的。设计无锁保护的 Map 可能可以使用 CAS(比较并交换)机制。

Q3. 程序的地址空间分布是怎样的?

A:程序的地址空间通常从低到高分为:文本段(存放代码)、数据段(存放已初始化全局变量和静态变量)、BSS 段(存放未初始化全局变量和静态变量)、堆(动态分配内存区域,向上增长)、栈(存放局部变量、函数参数等,向下增长)。

Q4. 介绍 Linux 内存管理机制、涉及到的算法?

A:Linux 内存管理主要涉及物理内存管理和虚拟内存管理。物理内存管理通过分页机制实现,将物理内存分为页框,虚拟内存分为页面,通过页表建立映射。涉及的算法有伙伴系统算法(用于分配连续物理内存)、Slab 分配器(用于小内存块分配)等。

Q5. 如何设计一个内存池?

A:设计内存池可分三步:①预分配大块内存(减少 malloc 调用);②按大小划分内存块(适配不同需求);③用链表管理空闲块(快速分配 / 回收)。还可考虑线程安全,加互斥锁或用线程本地缓存。

Q6. 如何设计一个定时器?

A:(可从定时器的触发机制、任务管理等方面作答,比如基于时间轮、最小堆等数据结构来管理定时任务,设置触发检查机制)

Q7. 解释时间轮?

A:时间轮是一种高效的定时器实现方式,类似时钟,有多个槽位,每个槽位对应一段时间,槽位上挂接该时间段内需要执行的任务,时间轮转动时触发对应槽位的任务。

Q8. Golang 里面 CGO 原理是什么?

A:CGO 是 Golang 用于调用 C 代码的机制,它允许在 Golang 代码中嵌入 C 代码,通过相关工具进行编译链接,实现 Golang 与 C 的交互。

Q9. awk 和 sed 是啥?咋用?

A:awk 是一种文本处理工具,用于对文本进行格式化处理、提取信息等,通过模式匹配和动作来实现;sed 也是文本处理工具,主要用于文本的替换、删除、插入等操作。

Q10. TCP 粘包怎么解决?

A:TCP 粘包可通过以下方式解决:在数据包前添加长度字段,接收方根据长度字段确定数据包边界;使用特殊分隔符标记数据包边界;约定固定的数据包长度。

Q11. 如何设计线程池?

A:设计线程池需考虑:线程池的创建(初始化一定数量线程)、任务队列(存放待执行任务)、任务提交与执行机制(线程从队列取任务执行)、线程池的销毁等。还可设置核心线程数、最大线程数、空闲线程存活时间等参数。

Q12. Golang defer 语句调用顺序是怎样的?

A:Golang defer 语句的调用顺序是后进先出(LIFO),即最后声明的 defer 语句最先执行。

Q13. TIME_WAIT 状态有啥用?

A:TIME_WAIT 状态是 TCP 四次挥手过程中,主动关闭连接的一方在发送最后一个 ACK 后进入的状态。其作用是:确保被动关闭方收到最后的 FIN 报文;防止已失效的连接报文段干扰后续新的连接。

Q14. 画出四次挥手原理图?

A:(需手绘或文字描述四次挥手过程:客户端发送 FIN 报文,服务器回 ACK;服务器发送 FIN 报文,客户端回 ACK;客户端进入 TIME_WAIT 状态)

Q15. define 和 inline 区别?

A:define 是预处理指令,进行简单的文本替换,没有类型检查,可能会产生副作用;inline 是关键字,用于建议编译器将函数展开,避免函数调用开销,有类型检查,是编译阶段的处理。

Q16. 定义常量指针和指针常量?

A:常量指针是指指向常量的指针,指针指向的内容不能修改,定义为:const int *p;指针常量是指指针本身是常量,不能指向其他地址,定义为:int *const p。

Q17. accept 是在三次握手哪一次?

A:accept 是在三次握手的第三次握手之后,当服务器收到客户端的 SYN+ACK 的确认 ACK 后,三次握手完成,服务器的 accept 函数返回,建立连接。

Q18. backlog 作用?

A:backlog 在 socket 编程中用于指定监听队列的最大长度,即处于 SYN_RECV 状态的连接的最大数量,它限制了同时等待被服务器接受的连接数。

Part4四面

现场面,一开始就给了一道很有意思的面试题

面试官提供了一篇关于 memcpy 标准库函数的博客,要求我对其进行优化。起初,我颇为困惑,心想标准库函数既然已被广泛使用,自然经过了充分优化,为何还需我再次优化?但既然面试官提出要求,必定存在优化空间,只能硬着头皮尝试。

仔细端详了近一分钟,感觉其实现已相当完美,逐个字符复制似乎是最直接有效的方式,不知还能从何处着手优化。于是向面试官询问能否给予一些提示,面试官回应说不用着急,慢慢思考。又思索了一会儿,依然没有头绪。这时,面试官提示道:"你不觉得逐个复制的方式有些慢吗?"

随后,我用 long long 类型复制,即每次复制 8 个字节,并手写了实现代码。接着,面试官问我,若地址未对齐该如何处理?

当时,在对齐问题的处理上,我确实没有很好的思路,只能暂时跳过。整场面试下来,深感面试官水平极高,这道题目也极具深度。

复制代码
// 回家后写的
#include <stdint.h>
#include <string.h>


void* memmove_opt(void* dest, const void* src, size_t len) {
    uint8_t* d = dest;
    const uint8_t* s = src;


    // 处理内存重叠情况
    if (d < s) {
        // 前向复制:先逐字节对齐,再用long long复制
        while (((uintptr_t)d % sizeof(long long)) != 0 && len > 0) {
            *d++ = *s++;
            len--;
        }


        // 用long long批量复制(每次8字节)
        long long* d_ll = (long long*)d;
        const long long* s_ll = (const long long*)s;
        while (len >= sizeof(long long)) {
            *d_ll++ = *s_ll++;
            len -= sizeof(long long);
        }


        // 处理剩余字节
        d = (uint8_t*)d_ll;
        s = (const uint8_t*)s_ll;
    } else {
        // 后向复制
        d += len;
        s += len;


        // 逐字节对齐
        while (((uintptr_t)d % sizeof(long long)) != 0 && len > 0) {
            *--d = *--s;
            len--;
        }


        // 用long long批量复制
        long long* d_ll = (long long*)d;
        const long long* s_ll = (const long long*)s;
        while (len >= sizeof(long long)) {
            *--d_ll = *--s_ll;
            len -= sizeof(long long);
        }


        d = (uint8_t*)d_ll;
        s = (const uint8_t*)s_ll;
    }


    // 处理剩余字节
    while (len-- > 0) {
        *d++ = *s++;
    }


    return dest;
}

Q1. N 个 M 长度数组求交集,求最优解并给出时间复杂度和空间复杂度?

A:优化方案:先对每个数组进行去重处理,然后用哈希表统计每个元素在所有数组中出现的次数,出现次数等于 N 的元素即为交集元素。时间复杂度约为 O (N*M),空间复杂度约为 O (M)(取决于元素数量)。

Q2. 用 C++ 手写单例模式?

A:

复制代码
class Singleton {
private:
    static Singleton* instance;
    Singleton() {}
public:
    static Singleton* getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
};
Singleton* Singleton::instance = nullptr;

因为我简历中的项目有涉及shell开发,于是面试官问了第三道题:

Q3. 给定一个日志文件,每行包括日期,IP 地址,错误码,请你使用 shell 搜索指定日期,指定 IP,指定错误的日志出现次数?

A:grep -rns "指定日期 指定 IP 指定错误码" 日志文件 | wc -l

Q4. 在前一题基础上,日志每行除日期、IP、错误码,还有第四列 content 且每行不同,如何搜索指定日期、IP、错误码的日志出现次数?

A:awk -F"|" "print112 $3" | grep -rns "date + IP + error" | wc -l

这道题明显在考察awk的实战能力。给各位求职者的忠告:如果简历写了Shell开发技能,请确保精通awk和sed------这是面试官检验真伪的必考点。

Q5:有 N 个长度为 M 的数组,需要求这些数组的交集,你能给出最优解并说明其时间复杂度和空间复杂度吗?

A:我最初想到的方案是归并、去重、全排序。先对每个数组进行归并排序,然后对所有数组的元素进行去重处理,之后再进行全排序,最后找出在所有数组中都出现的元素作为交集。

Q6:那你为什么会选择用归并排序呢?

A:这需要结合快排、归并、堆排各自的优缺点和使用场景来看。快排的平均时间复杂度是 O (nlogn),但最坏情况会达到 O (n²),它是原地排序,空间复杂度低,不过不稳定,适合数据量较大且对稳定性要求不高的场景。归并排序的时间复杂度稳定在 O (nlogn),是稳定排序,但需要额外的空间来存储中间结果,适合对排序稳定性有要求,或者数据量较大且有足够内存的场景,这里考虑到需要稳定地处理数组元素,所以先想到了归并排序。堆排的时间复杂度也是 O (nlogn),原地排序,不过不稳定,它更适合需要实时获取最大或最小值的场景,在这个求交集的问题里不太契合。

Q7:那这个方案有没有更好的优化空间呢?

A:有的,我想到了一个优化方案。还是先对每个数组进行去重处理,这一步能减少后续处理的元素数量,然后用哈希表来统计每个元素在所有数组中出现的次数,当一个元素的出现次数等于数组的个数 N 时,这个元素就是交集的一部分。

Q8:这个优化方案的时间复杂度和空间复杂度是怎样的呢?

A:时间复杂度方面,对每个数组去重,每个数组处理时间是 O (M),N 个数组就是 O (NM);统计元素出现次数时,遍历所有去重后的元素,总次数也不超过 NM,所以整体时间复杂度约为 O (NM)。空间复杂度主要是哈希表的开销,取决于去重后元素的总数量,最坏情况下可能接近 O (NM),但通常会比这个小,大致可看作 O (M)(取决于实际元素数量)。

整个面试流程持续2个小时

Part5五面

等了整整七天,期间音讯全无,几乎以为我挂了。没想到突然接到复试通知电话:

Q1. 介绍前公司产品的功能、市场竞争力、自己负责的部分、产品的软件架构?

A:(需结合自身经历作答,如:前公司产品是 XX,功能包括 XX,在市场上相比同类产品,优势在于 XX;我负责 XX 模块,产品整体是 C/S 架构,分接入层、业务层、存储层等)

Q2. 路由 NAT 如何实现?

A:(未深入接触,画了个映射图描述:NAT 通过将内网 IP 地址和端口转换为外网 IP 地址和端口来实现内网主机与外网通信,通常会维护一个转换映射表)

Q3. 考察结构体字节对齐问题?

A:(根据具体结构体示例作答,结构体字节对齐遵循一定规则,如每个成员按自身对齐值对齐,结构体总大小按最大成员对齐值对齐等)

Q4. 概率题:两个红球一个白球,三个盒子。问第二个盒子至少一个红球的概率?

A:(刚开始以为是算法题,。想了一会儿没啥好方法,略显尴尬的说,使用枚举吧,列出所有可能的放置情况,计算满足条件的情况数占总情况数的比例)

Q5. 编程题:字符串去空格?

A:(可通过遍历字符串,将非空格字符复制到新位置实现)

Q6. 进程、线程区别。为什么有了多线程还是用多进程?

A:进程和线程的区别:进程是资源分配基本单位,线程是调度基本单位;进程有独立资源,线程共享进程资源;进程切换开销大,线程切换开销小。有了多线程仍用多进程的原因:进程地址空间相互隔离,安全性高;多个程序需要多个进程来运行;进程可利用多核资源,避免单进程内线程资源限制等。

Q7. 平时如何定位问题,core dump 怎么产生的?

A:通常线上问题先复现,再通过日志、调试工具等定位。core dump 产生:当程序有未处理的信号(如段错误)时,内核会自动生成 core dump;能否生成受 ulimit -c 限制,需设置允许生成 core 文件。

Q8. 构造函数调用虚函数可不可以?如果调用会出现啥情况?

A:不可以。若调用,会调用被调对象自己的版本(需结合实际测试说明)。

Q9. 算法题:给定电话号码加区号(区号占 4 位),如何快速查找对应地区?

A:可使用长度 10000 的数组做 hash,时间复杂度 O (1);关于提高空间利用率,暂未想到更好方法。

Q10. 常用的 IDE 有哪些?

A:C 语言使用 source insight,Golang 使用 liteide。

Q11. 线程调度问题?

A:线程调度有不同调度类和策略,底层通过 schedule () 函数实现。调度过程大致为:保存当前进程寄存器、上下文信息,加载被调度进程的上下文、寄存器信息等。

Q12. 不同编译器编译的库能否混用?

A:(未确定,可能与编译器版本、编译方式等有关,不同版本编译器编译的库可能不能混用,可能涉及 extern "C" 等问题)

Q13. 离职原因,离职这么久都干嘛去了?

A:(结合自身实际情况如实作答)

Q14. 阅读源码有啥好处?对以前的项目有没有啥改进之处?

A:(如:阅读源码能学习优秀的设计思想、提高编程能力等;对以前项目可从性能优化、架构改进等方面谈改进之处)

Q15. 有什么问题想问的?

A:(如:直播业务涉及的终端以及后台开发过程中使用到哪些中间件技术?腾讯的服务器内核是什么样子的?)

Part6六面(HR面)

Q1. 为什么学德语?

A:(结合自身兴趣、规划等作答)

Q2. 第一份工作学习到啥?

A:(如:专业技能的提升、团队协作能力、问题解决能力等)

Q3. 对腾讯怎么看?

A:(如:腾讯在互联网行业的地位、技术实力、企业文化等方面的看法)

Q4. 期望薪资以及依据?

A:(结合市场行情、自身能力和经验作答,如:了解到腾讯同岗位薪资范围 XX,基于我在 XX 项目中的贡献,期望薪资 XX)

Q5. 当前薪资、福利?

A:(如实作答)

Q6. 以前是通信的,对互联网怎么看?

A:(从行业发展、技术融合等方面谈看法)

Q7. 部门业务量很多,可能需要加班,你怎么看?

A:(如:高效完成工作优先,若有紧急需求,愿意配合团队赶进度)

Q8. 有什么问题想问的?

A:(根据自身关注点提问)

本轮面试结束后仅隔两天,便收到了腾讯的offer。复盘整个面试流程,技术考察始终围绕基础知识点展开,但要求深入理解而非浮于表面。扎实的基本功+系统性准备,才是突破大厂面试的核心竞争力。

总结

我想说一句话送给大家:

"面试的本质,是一场精准的表演。"

你不需要完美无缺,但你需要:

  • 在合适的时间,展现合适的自己
  • 把自己的优势清晰地表达出来
  • 让面试官感受到你的潜力、态度和匹配度

所以,别怕面试轮数多,它其实是给了你更多展示自己的机会。

如果你准备充分,每一轮都是加分项;如果准备不足,哪怕一轮也可能被淘汰。

提升面试通过率,大家可以从以下几个方面入手:

  • 技术基础要牢靠:八股文+编程题必须拿捏
  • 项目经历要清晰:每个项目都能讲出故事
  • 系统设计要有框架:掌握通用设计方法论
  • 沟通表达要自然:学会讲故事而不是背答案
  • 心态要稳得住:别紧张,把面试当交流

附:各个大厂的面试风格

每个厂之间的面试风格都不一样,甚至每个部门之间的风格都不一样;面不同的公司进行有针对性的准备可以提高成功几率。

头条飞书、富途证券(算法扎实优先考虑)

把这两个放在一起说是因为这两家都喜欢写算法题。

富途证券这边一共三轮技术面试,基本上每轮都两道以上的编程题或者概率题,全程基本不会问项目,只有第一轮面试会过一遍前端基础问题,后续基本写题就完事了;反馈非常快,大概面试完第二天就能知道面试结果。

头条这边面得是飞书,每轮面试官除了固定的编程题外,像是有明确的问题方向;第一轮偏重前端基础,第二轮偏重项目设计,第三轮主要是针对某一方向深入挖掘和有点压力面得感觉。

另外头条比较好的地方是每轮面试记录比较详细,基本不会出现两轮面试之间问重复问题的情况;头条的反馈也是非常快的,基本上也是面完第二天就有反馈了。

这两家基本上要对自己的算法有一定信心才去尝试,因为算法题占面试的比重极大。

京东凹凸实验室(适合复杂工程化和nodejs方向)

京东也是三轮技术面试。

三轮技术面试基本偏宏观,比较少落到具体某个点的细节;凹凸实验室,场景比较核心(负责618和京东PC首页),内部平台使用nodejs;成员基本上全栈开发。

着重nodejs的工程化方案、部署运维(内存管理、监控方案);webpack内部原理和针对小程序的应用;面试官对小程序、多端方案、前端微服务这些比较感兴趣。

另外据反馈,商家平台经常挂(nodejs),所以有这方面经验的同学去面基本很稳;基础题极少。

腾讯(比较综合,但题目不算难)

腾讯面试轮次很多和流程较慢,如果下定决心要进腾讯的,要做好长期作战准备;五轮技术面,一轮GM,一轮HR一共七轮;前后一个多月的时间。

腾讯因为技术面比较多,所以总体问的会比较面面俱到,编程题、前端基础、项目、设计都会有所涉及;个人经历大概是组员负责面基础、leader会根据项目进行展开提问、总监(非前端)聊技术视野、面试委员会会比较难类似头条三面、GM聊人生;leader后面的面试基本都会问职业规范和跳槽原因;这些面试之中会穿插编程题。

总得来说,腾讯面试难度并不高,但是容错率比较低,一些问题没回答到点上就会挂;因为本身轮次也非常多,所以造成了面腾讯非常考验心态,两次面试之间的间隔非常随机,有可能隔一天,有可能隔一周;所以面试腾讯心态是最重要的。

阿里和蚂蚁

总体的面试风格比较务实,一面基础,二面会根据项目展开进行提问;二面之前会有道编程题并不难,但不能debug,到时间会自动提交;而且不知道执行结果。

个人建议的话,面阿里还是选择杭州的岗位比较靠谱。
往期推荐

京东一面:C++拷贝构造函数何时生成、如何使用?

【大厂标准】Linux C/C++ 后端进阶学习路线

解构内存池:C++高性能编程的底层密码

知识点精讲:深入理解C/C++指针

总被 "算法" 难住?程序员怎样学好算法?

小米C++校招二面:epoll和poll还有select区别,底层方式?

顺时针螺旋移动法 | 彻底弄懂复杂C/C++嵌套声明、const常量声明!!!

C++ 基于原子操作实现高并发跳表结构

为什么很多人劝退学 C++,但大厂核心岗位还是要 C++?

手撕线程池:C++程序员的能力试金石

打破认知:Linux管道到底有多快?

C++的三种参数传递机制:从底层原理到实战

顺时针螺旋移动法 | 彻底弄懂复杂C/C++嵌套声明、const常量声明!!!

阿里面试官:千万级订单表新增字段,你会怎么弄?

C++内存模型实例解析

字节跳动2面:为了性能,你会牺牲数据库三范式吗?

字节C++一面:enum和enum class的区别?

Redis分布式锁:C++高并发开发的必修课

相关推荐
爱倒腾的老唐5 小时前
24、Linux 路由管理
linux·运维·网络
程序员Aries5 小时前
自定义网络协议与序列化/反序列化
linux·网络·c++·网络协议·程序人生
泽02025 小时前
Linux之环境变量
java·linux·redis
正在努力的小河5 小时前
Linux 自带的 LED 灯驱动实验
linux·运维·服务器
Pafey5 小时前
MFC中一个类的成员变量值自动被篡改:多重继承带来的问题
c++·mfc
hsjkdhs5 小时前
C++之多层继承、多源继承、菱形继承
开发语言·c++·算法
阳光雨滴6 小时前
使用wpf用户控件编程落石效果动画
c++·wpf
檀越剑指大厂6 小时前
【Linux系列】Vim 中删除当前光标到行尾
linux·运维·vim
小贾要学习6 小时前
【数据结构】C++实现红黑树
数据结构·c++