盘点腾讯linux C++后台开发面试题
nanshan 2025-04-06 19:28 14 浏览 0 评论
鹅厂是cpp的主战场,而以cpp为背景的工程师大都对os,network这块要求特别高,不像是Java这种偏重业务层的语言,之前面试Java的公司侧重还是在数据结构、网络、框架、数据库和分布式。所以OS这块吃的亏比较大。
面试分为以下几大块
- C/C++
- 网络
- 操作系统
- Linux系统
- MongoDB
- Redis
- mysql
- 算法
- 设计模式
- 分布式架构
- 系统设计
- 等等,未完待续
C/C++
- const
- 多态
- 什么类不能被继承(这个题目非常经典,我当时答出了private但是他说不好,我就没想到final我以为那个是java的)
网络
- 网络的字节序
- 网络知识 tcp三次握手 各种细节 timewait状态
- tcp 与 udp 区别 概念 适用范围
- TCP四次挥手讲一下过程,最后一次ack如果客户端没收到怎么办,为什么挥手不能只有三次,为什么time_wait。
- 对于socket编程,accept方法是干什么的,在三次握手中属于第几次,可以猜一下,为什么这么觉得。
- tcp怎么保证有序传输的,讲下tcp的快速重传和拥塞机制,知不知道time_wait状态,这个状态出现在什么地方,有什么用?
- 知道udp是不可靠的传输,如果你来设计一个基于udp差不多可靠的算法,怎么设计?
- http与https有啥区别?说下https解决了什么问题,怎么解决的?说下https的握手过程。
- tcp 粘包半包问题怎么处理?
- keepalive 是什么东东?如何使用?
- 列举你所知道的tcp选项,并说明其作用。
- socket什么情况下可读?
- nginx的epoll模型的介绍以及io多路复用模型
- SYN Flood攻击
- 流量控制,拥塞控制
- TCP和UDP区别,TCP如何保证可靠性,对方是否存活(心跳检测)
- tcpdump抓包,如何分析数据包
- tcp如何设定超时时间
- 基于socket网络编程和tcp/ip协议栈,讲讲从客户端send()开始,到服务端recv()结束的过程,越细越好
- http报文格式
- http1.1与http1.0区别,http2.0特性
- http3了解吗
- http1.1长连接时,发送一个请求阻塞了,返回什么状态码?
- udp调用connect有什么作用?
操作系统
- 进程和线程-分别的概念 区别 适用范围 它们分别的通讯方式 不同通讯方式的区别优缺点
- 僵尸进程
- 死锁是怎么产生的
- CPU的执行方式
- 代码中遇到进程阻塞,进程僵死,内存泄漏等情况怎么排查。
- 有没有了解过协程?说下协程和线程的区别?
- 堆是线程共有还是私有,堆是进程共有还是私有,栈呢
- 了解过协程吗(我:携程???不了解呜呜呜)
- 共享内存的使用实现原理(必考必问,然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?)
- c++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)
- ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意.bss段)
- 使用过哪些进程间通讯机制,并详细说明(重点)
- 多线程和多进程的区别(重点 面试官最最关心的一个问题,必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)
- 信号:列出常见的信号,信号怎么处理?
- i++是否原子操作?并解释为什么???????
- 说出你所知道的各类linux系统的各类同步机制(重点),什么是死锁?如何避免死锁(每个技术面试官必问)
- 列举说明linux系统的各类异步机制
- exit() _exit()的区别?
- 如何实现守护进程?
- linux的内存管理机制是什么?
- linux的任务调度机制是什么?
- 标准库函数和系统调用的区别?
- 补充一个坑爹坑爹坑爹坑爹的问题:系统如何将一个信号通知到进程?(这一题哥没有答出来)
Linux系统
- linux的各种命令 给你场景让你解决
- Linux了解么,查看进程状态ps,查看cpu状态 top。查看占用端口的进程号netstat grep
- Linux的cpu 100怎么排查,top jstack,日志,gui工具
- Linux操作系统了解么
- 怎么查看CPU负载,怎么查看一个客户下有多少进程
- Linux内核是怎么实现定时器的
- gdb怎么查看某个线程
- core dump有没有遇到过,gdb怎么调试
- linux如何设置core文件生成
- linux如何设置开机自启动
- linux用过哪些命令、工具
- 用过哪些工具检测程序性能,如何定位性能瓶颈的地方
- netstat tcpdump ipcs ipcrm (如果这四个命令没听说过或者不能熟练使用,基本上可以回家,通过的概率较小 ^_^ ,这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程序的经验)
- cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握
- awk sed需掌握
- gdb调试相关的经验,会被问到
MongoDB
- 关于大数据存储的(mongodb hadoop)各种原理 mongodb又问的深入很多
Redis
- Redis内存数据库的内存指的是共享内存么
- Redis的持久化方式
- Redis和MySQL有什么区别,用于什么场景。
- redis有没有用过,常用的数据结构以及在业务中使用的场景,redis的hash怎么实现的
- 问了下缓存更新的模式,以及会出现的问题和应对思路?
- redis的sentinel上投票选举的问题 raft算法
- redis单线程结构有什么优势?有什么问题? 主要优势单线程,避免线程切换产生静态消耗,缺点是容易阻塞,虽然redis使用io复用epoll和输入缓冲区把命令按照队列先进先出输入等等
- 你觉得针对redis这些缺点那些命令在redis上不可使用? 比如keys、hgetall等等这些命令 建议用scan等等 这方面阐述
- 你觉得为什么项目中没有用mysql而用了es,redis在这里到底起到了什么作用?因为架构上这里理解不清楚,最后回答自己都觉得有漏洞了
- 你觉得redis什么算有用? 有用? 是说存进去了还是说命中缓存?最后把缓存命中率是什么说了一遍
- 你们这边redis集群是怎么样子的
- 平常redis用的多的数据结构是什么,跳表实现,怎么维护索引,当时我说是一个简单的二分,手写二分算法,并且时间复杂度是怎么计算出来的 (2的k次方等于n k等于logn)
MySQL
- 你们后端用什么数据库做持久化的?有没有用到分库分表,怎么做的?
- 索引的常见实现方式有哪些,有哪些区别?MySQL的存储引擎有哪些,有哪些区别?InnoDB使用的是什么方式实现索引,怎么实现的?说下聚簇索引和非聚簇索引的区别?
- mysql查询优化
- MySQL的索引,B+树性质。
- B+树和B树,联合索引等原理
- mysql的悲观锁和乐观锁区别和应用,ABA问题的解决
- 项目性能瓶颈在哪,数据库表怎么设计
- 假设项目的性能瓶颈出现在写数据库上,应该怎么解决峰值时写速度慢的问题
- 假设数据库需要保存一年的数据,每天一百万条数据,一张表最多存一千万条数据,应该怎么设计表
- 数据库自增索引。100台服务器,每台服务器有若干个用户,用户有id,同时会有新用户加入。实现id自增,统计用户个数?不能重复,好像是这样的。
- mysql,会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标
算法
- 堆栈
- 有序数组排序,二分,复杂度
- 常见排序算法,说下快排过程,时间复杂度
- 有N个节点的满二叉树的高度。1+logN
- 如何实现关键字输入提示,使用字典树,复杂度多少,有没有其他方案,答哈希,如果是中文呢,分词后建立字典树?
- hashmap的实现讲一下吧,讲的很详细了。讲一下红黑树的结构,查询性能等。
- 快排的时间复杂度,冒泡时间复杂度,快排是否稳定,快排的过程
- 100w个数,怎么找到前1000个最大的,堆排序,怎么构造,怎么调整,时间复杂度。
- 一个矩阵,从左上角到右下角,每个位置有一个权值。可以上下左右走,到达右下角的路径权值最小怎么走。
- 四辆小车,每辆车加满油可以走一公里,问怎么能让一辆小车走最远。说了好几种方案,面试官引导我优化了一下,但是还是不满意,最后他说跳过。
- MySQL的索引,B+树性质。
- 十亿和数找到前100个最大的,堆排序,怎么实现,怎么调整。
- 布隆过滤器
- hash表解决冲突的方法
- 跳表插入删除过程
- 让你实现一个哈希表,怎么做(当时按照Redis中哈希表的实现原理回答)
设计模式
- 对于单例模式,有什么使用场景了,讲了全局id生成器,他问我分布式id生成器怎么实现,说了zk,问我zk了解原理不,讲了zab,然后就没问啦。
- 除了单例模式,知道适配器模式怎么实现么,有什么用
分布式架构
- CAP BASE理论
- 看你项目里面用了etcd,讲解下etcd干什么用的,怎么保证高可用和一致性?
- 既然你提到了raft算法,讲下raft算法的基本流程?raft算法里面如果出现脑裂怎么处理?有没有了解过paxos和zookeeper的zab算法,他们之前有啥区别?
- rpc有没有了解
系统设计
- 朋友之间的点对点关系用图维护,怎么判断两人是否是朋友,并查集,时间复杂度,过程。
- 10g文件,只有2g内存,怎么查找文件中指定的字符串出现位置。
- Linux大文件怎么查某一行的内容。
- 秒杀系统的架构设计
- 十亿个数的集合和10w个数的集合,如何求它们的交集。
- 回到网络,刚才你说到直播场景,知道直播的架构怎么设计么,要点是什么,说了几个不太对,他说要避免广播风暴,答不会。
- 针对自己最熟悉的项目,画出项目的架构图,主要的数据表结构,项目中使用到的技术点,项目的总峰值qps,时延,以及有没有分析过时延出现的耗时分别出现在什么地方,项目有啥改进的地方没有?
- 如果请求出现问题没有响应,如何定位问题,说下思路?
- 除了公司项目之外,业务有没有研究过知名项目或做出过贡献?
- go程和线程有什么区别? 答:1 起一个go程大概只需要4kb的内存,起一个Java线程需要1.5MB的内存;go程的调度在用户态非常轻量,Java线程的切换成本比较高。接着问为啥成本比较高?因为Java线程的调度需要在用户态和内核态切换所以成本高?为啥在用户态和内核态之间切换调度成本比较高?简单说了下内核态和用户态的定义。接着问,还是没有明白为啥成本高?心里瞬间崩溃,没完没了了呀,OS这块依旧是痛呀,支支吾吾半天放弃了。
- 服务器CPU 100%怎么定位?可能是由于平时定位业务问题的思维定势,加之处于蒙蔽状态,随口就是:先查看监控面板看有无突发流量异常,接着查看业务日志是否有异常,针对CPU100%那个时间段,取一个典型业务流程的日志查看。最后才提到使用top命令来监控看是哪个进程占用到100%。果然阵脚大乱,张口就来,捂脸。。。 本来正确的思路应该是先用top定位出问题的进程,再用top定位到出问题的线程,再打印线程堆栈查看运行情况,这个流程换平时肯定能答出来,但是,但是没有但是。还是得好好总结。
- 最后问了一个系统设计题目(朋友圈的设计),白板上面画出系统的架构图,主要的表结构和讲解主要的业务流程,如果用户变多流量变大,架构将怎么扩展,怎样应对? 这个答的也有点乱,直接上来自顾自的用了一个通用的架构,感觉毫无亮点。后面反思应该先定位业务的特点,这个业务明显是读多写少,然后和面试官沟通一期刚开始的方案的用户量,性能要求,单机目标qps是什么等等?在明确系统的特点和约束之后再来设计,而不是一开始就是用典型互联网的那种通用架构自顾自己搞自己的方案。
- 设计一个限流的算法
- 定时器除了小根堆,还可以怎么做
- 项目性能瓶颈在哪,数据库表怎么设计
- .在高并发的生产环境中(非调试场景下),如果出现数据包的丢失,如何定位问题
- 补充一个最最重要,最最坑爹,最最有难度的一个题目:一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和I/O操作,如果让你设计,你怎么设计?
道友总结
- tcp/udp,http和https还有网络这块(各种网络模型,已经select,poll和epoll)一定要非常熟悉
- 一定要有拿的出手的项目经验,而且要能够讲清楚,讲清楚项目中取舍,设计模型和数据表
- 分布式要非常熟悉
- 常见问题定位一定要有思路
- 操作系统,还是操作系统,重要的事情说三遍
- 系统设计,思路,思路,思路,一定要思路清晰,一定要总结下系统设计的流程
- 一点很重要的心得,平时blog和专栏看的再多,如果没有自己的思考不过是过眼云烟,根本不会成为自己的东西,就像内核态和用户态,平常也看过,但是没细想,突然要自己说,还真说不出来,这就很尴尬了。勿以浮沙筑高台,基础这种东西还是需要时间去慢慢打牢,多去思考和总结。
C/C++Linux高级开发路线
对标腾讯C++后端开发
更多的专业C/C++ Linux技术栈知识可以私信“资料”
相关推荐
- ubuntu24.04下kubernetes1.30环境搭建
-
设置root用户密码#在Ubuntu系统中,默认情况下root用户是被禁用的(没有设置密码)#而是通过sudo命令让普通用户临时获取管理员权限,#如果需要启用或修改root密...
- Canonical 在 Ubuntu 24.10 发布之前对 Snap 进行了更多改进
-
作为Ubuntu桌面临时工程总监,OliverSmith介绍了Ubuntu24.10的最新进展。在Ubuntu24.10功能冻结之前,GNOME47测试版已经登陆Ubuntu...
- Ubuntu Touch OTA-5手机系统发布:细化电源配置等
-
IT之家8月2日消息,UBports基金会于7月30日发布UbuntuTouch20.04OTA-5版本更新,距离上次OTA-4更新发布相隔6个月时间。Ubuntu...
- Ubuntu更契合英特尔酷睿Ultra,综合性能比Win11高15%
-
IT之家12月23日消息,英特尔本月推出酷睿UltraMeteorLake处理器,那么Win11和Ubuntu发行版两者时间,谁能更好地发挥其性能呢?国外科技媒体phoron...
- 针对英特尔酷睿CPU优化,Canonical发布Ubuntu实时内核
-
IT之家7月27日消息,Canonical今天宣布针对支持时序协调运算(TCC)和时间敏感网络(IEEETSN)的英特尔酷睿处理器,推出优化版实时Ubuntu内核。Canonical...
- 在Ubuntu/Debian上设置永久DNS域名服务器
-
在Linux上设置自定义DNS服务器可以提高性能和安全性,甚至可以通过DNS阻止一些使用地理屏蔽的网站。有几种方法可以做到这一点,包括在许多Linux发行版中包括的NetworkManagerGUI...
- 宣布延期:Ubuntu 24.04 LTS第一个版本发布推迟两周
-
Ubuntu开发团队原计划于8月19日星期四发布Ubuntu24.04.1LTS。然而,由于发现几个重大升级错误,发布被推迟。Ubuntu24.04.1LTS的新发布日期现定为...
- Ubuntu系统已经十岁了 10月新推14.10版
-
|责编:李鑫比较非主流的Ubuntu系统刚刚推出了14.10版,同时大家也可能不知道其实它已经十岁了!它的第一次公布时间为2004年的10月呢。在这次十周年更新中,Ubuntu为用...
- wsl2在休眠后的时间偏差问题的修复
-
笔记本电脑在日常使用中,常常会有进入休眠状态的情况。休眠对于wsl2而言,却造成了时间偏差的问题,休眠期间wsl2的时间停止了。这个问题的根治,需要等微软。本文提供的是一种简单的修复办法。ntp是网络...
- 基于Ubuntu22.04源码安装配置RabbitVCS过程记录
-
基于Ubuntu22.04源码安装配置RabbitVCS过程记录安装开始时间开始时间:2025年7月18日17:09(北京时间)系统:Ubuntu22.04用户:itgather时区:A...
- GNOME 46桌面环境发布,Ubuntu 24.04 LTS和Fedora 40率先预装
-
IT之家3月21日消息,GNOME团队今天发布公告,正式推出代号为“Kathmandu”的GNOME46桌面环境,并已经开放下载。Fedora40发行版将于4月发布,率先预装...
- 如果大家同意的话 Ubuntu可能很快就会有一个新的垃圾桶图标
-
Ubuntu贡献者目前正在构思一个新的垃圾桶图标,该图标最早可能在10月份Ubuntu25.10发布时出现在Dock栏中。关于Ubuntu垃圾桶图标外观的讨论在2019年持续进...
- Ubuntu 25.10 通过更安全地获取时间来提供进一步的安全性提升
-
Canonical宣布将从Ubuntu25.10开始使用一款名为chrony的软件,以实现更安全的时间管理。最终用户无需过于担心这一变化,但它将增强系统安全性,尤其是在加密操作和证书验证方...
- Linux 修改系统时间的两种方式
-
一:更新系统时间的方式1、手动修改通过相关工具来手动修改系统的时间。2、自动同步使用NTP自动同步系统时间。二:手动修改系统时间1、date工具作用:显示和设置系统时间选项:-d<字符串&g...
- Ubuntu计划下版本为RISC-V设置RVA23基线,大量硬件无法升级
-
IT之家7月14日消息,主要Linux发行版之一的Ubuntu计划在其接下来的一个大版本25.10中将对RISC-V处理器的准入门槛设置从此前的RVA20配置文件更新至最新...
你 发表评论:
欢迎- 一周热门
-
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
手机如何设置与显示准确时间的详细指南
-
NAS:DS video/DS file/DS photo等群晖移动端APP远程访问的教程
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
一加手机与电脑互传文件的便捷方法FileDash
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
- 最近发表
-
- ubuntu24.04下kubernetes1.30环境搭建
- Canonical 在 Ubuntu 24.10 发布之前对 Snap 进行了更多改进
- Ubuntu Touch OTA-5手机系统发布:细化电源配置等
- Ubuntu更契合英特尔酷睿Ultra,综合性能比Win11高15%
- 针对英特尔酷睿CPU优化,Canonical发布Ubuntu实时内核
- 在Ubuntu/Debian上设置永久DNS域名服务器
- 宣布延期:Ubuntu 24.04 LTS第一个版本发布推迟两周
- Ubuntu系统已经十岁了 10月新推14.10版
- wsl2在休眠后的时间偏差问题的修复
- 基于Ubuntu22.04源码安装配置RabbitVCS过程记录
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)