最新腾讯等大厂c/c++后端 linux开发常见面试题汇总
Posted linux大本营
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最新腾讯等大厂c/c++后端 linux开发常见面试题汇总相关的知识,希望对你有一定的参考价值。
计算机操作系统(Linux):
1、命令:netstat tcpdump ipcs ipcrm
这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验
2、cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握
3、文本处理三剑客:grep awk sed
4、共享内存的使用实现原理、然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?
5、c++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)
6、ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意.bss段)
7、使用过哪些进程间通讯机制,并详细说明
8、makefile编写,虽然比较基础,但是会被问到
9、gdb调试相关的经验,会被问到。
10.如何定位内存泄露?
11.动态链接和静态链接的区别
12.32位系统一个进程最多多少堆内存
13.多线程和多进程的区别(重点 必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回 答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)
14.写一个c程序辨别系统是64位 or 32位
15.写一个c程序辨别系统是大端or小端字节序
16.信号:列出常见的信号,信号怎么处理?
17.i++是否原子操作?并解释为什么???????
18.说出你所知道的各类linux系统的各类同步机制(重点)
- 什么是死锁?如何避免死锁(必问)
19.列举说明linux系统的各类异步机制
20.exit()与_exit()的区别?
21.什么是守护进程?如何实现守护进程?
22.linux的内存管理机制是什么?
23.linux的任务调度机制是什么?
24.标准库函数和系统调用的区别?
25.系统如何将一个信号通知到进程?
相关视频推荐
C语言
基础篇
- C语言的基本变量类型有哪些?
- 宏定义和展开(精通)
- 位操作(精通)
- 计算二进制数中1的个数
- 清零操作
- 指针操作和计算(精通)
- 各类库函数必须非常熟练的实现
- strcpy
- strcat
- 哪些库函数属于高危函数,为什么?(strcat、strcpy等)
进阶篇
(待补充)
C++语言
基础篇
- C语言和CPP有什么区别?(网易CPP)
- 大体讲了 一下,继承、多态、封装、异常处理等
2.C++特有的变量类型有哪些?
3.面向对象
- 面向对象和面向过程理解。
Java和C++的区别?(去哪儿) - 介绍一下C++面向对象的三大特性。(腾讯)
封装
继承
多态:多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载) (网易C++)
4.define与typedef
5.sizeof一个类求大小(注意成员变量,函数,虚函数,继承等等对大小的影响)
6.指针和引用的区别(必问)
7.多重类构造和析构的顺序
- 必须在构造函数初始化列表中进行初始化的数据成员有哪些?(网易C++)
- 类的封装:private,protected,public(网易C++)
8.链接指示extern “C”是干啥的?
- 必须将编译器的函数名修饰的机制解答得很透彻
9.volatile的作用
- 注意:必须将cpu的寄存器缓存机制回答得很透彻
10explicit是干什么用的?(网易C++)
11.关键字static、const等的用法
- 指针和const的用法?(就四种情况说一下)
- const关键字的作用?(const成员函数,函数传递,和define的区别)(网易C++)
- static关键字的作用。(static变量和static函数)
- 静态成员函数和数据成员有什么意义? (网易C++)
12.内联函数
- 讲了一下内联函数的优点以及和宏定义的区别。(网易C++)
13.操作符重载
- 分类:友元函数重载和成员函数重载
- +操作符,具体如何去定义?(网易C++)
- 让把操作符重载函数原型说一遍(网易C++)
14.智能指针
- 谈一下对智能指针的理解。
- 说一下智能指针auto_ptr类。(网易C++)
15.类型转换
- 为什么要用static_cast转换而不用C语言中的转换?(网易C++)
- C和C++类型转换(四种类型转换,分别举例说明)分别有哪些?
- 四种类型转换中哪一个是类型安全的转换?
16.模板
- 模板怎么实现?(网易C++)
- 函数模板与类模板
- 模版特化的概念,为什么特化?(网易C++)
17.异常机制是怎么回事?(网易C++)
进阶篇
- 虚函数的作用和实现原理(必问)
- 虚函数、纯虚函数:分别如何定义(网易C++)
- 虚函数的实现机制。(腾讯C++)
- 说一下虚函数表,虚函数表里面内存如何分配?(网易C++)
- 动态绑定怎么实现?(问一下基类与派生类指针和引用的转换问题) (网易C++)
- 基类的析构函数必须为虚函数吗?为什么? (腾讯C++)
- 基类的构造函数可以声明为虚函数么?(腾讯C++)
- 类默认生成的所有函数为什么不都是虚函数?(腾讯C++)
2.堆栈、内存分配(精通)
- 谈谈malloc的认识?relloc和calloc呢?
- new的具体实现机制是什么样的?(先分配内存,再调用构造函数)(腾讯C++)
- new与malloc的区别,delet和free的区别?(网易C++)
- 内存对齐的原则?(原则叙述了一下并举例说明)(网易C++)
- 字节对齐以及为什么要字节对齐?字节对齐的相关规则。举例一个char型数据,在内存中会分配多少字节?(腾讯C++)
- 如何实现只能动态分配类对象,不能定义类对象?(网易C++)
- 内存溢出有那些因素?(网易C++)
3.String类的完整实现必须很快速写出来
- 拷贝构造函数与拷贝复制运算符的区别
- 注意:赋值构造,operator=是关键
4.继承问题
- 谈一下菱形继承问题及其解决方案,画一下继承体系下各个类的内存分布情况。(网易C++)
- 继承机制中对象之间是如何转换的?(网易C++)
- 继承机制中引用和指针之间如何转换? (网易C++)
- sizeof(A) sizeof(B) 如果B继承于A,二者大小关系如何(腾讯C++)
5.STL各容器的实现原理(必问)
- 你个人常用的STL容器有哪些?(对STL有什么了解?STL容器有哪些?)
- 对连续型容器、关联型容器做了一些简单的介绍(腾讯C++)
- vector、list以及map、set这些的数据结构是怎么样的?(连续型内存,类似数组;红黑树)(腾讯C++)
- 上述结构中插入数据和删除数据的时间复杂度是怎么样的?(腾讯C++)
- 对比vector和set?(网易C++)
- map和hash_map的区别(腾讯C++)
- hash_map内部是如何处理冲突的(腾讯C++)
- vector内存增长方式(腾讯C++)
- vector和list 区别(腾讯C++)
- map的数据结构(腾讯C++)
- 迭代器的失效问题:迭代器删除元素的会发生什么?(网易C++)哪些容器在插入和删除的时候迭代器会失效,哪些不会?
相关视频推荐
90分钟了解Linux内存架构,numa的优势,slab的实现,vmalloc的原理
常用数据结构与经典算法
- 《离散数学》范围内的一切问题皆由可能被深入问到(这个最坑爹,最重要,最体现功底,最能加分,特别是各类树结构的实现和应用)
- 各类排序:大根堆的实现,快排(如何避免最糟糕的状态?),bitmap的运用等
- 哈希hash(必问)
- 为什么一般hashtable的桶数会取一个素数?
- 如何有效避免hash结果值的碰撞?
- 什么是一致性哈希
计算机网络与网络编程
1、TCP与UDP的区别(必问)
2、UDP调用connect()函数有什么作用?
3、TCP连接中时序图,状态图,必须非常非常熟练
4、Socket服务端的实现,Select和Epoll的区别(必问)
5、Epoll哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认)
6、大规模连接上来,并发模型怎么设计
7、tcp结束连接怎么握手,time_wait状态是什么,为什么会有time_wait状态?哪一方会有time_wait状态,如何避免time_wait状态占用资源(必须回答的详细)
8、TCP头多少字节?哪些字段?(必问)
9、什么是滑动窗口(必问)
10、connect会阻塞,怎么解决?(必问)
- 提示:设置非阻塞,返回之后用select检测状态
11.如果select返回可读,结果只读到0字节,什么情况?
12.keepalive 是什么东西?如何使用?
13.列举你所知道的tcp选项,并说明其作用。
14.socket什么情况下可读?
相关视频推荐
tcpip,accept,11个状态,细枝末节的秘密,还有哪些你不知道
数据库与分布式系统
常用数据库有:mysql、Redis、Memcache
基础篇
- MySQL事务的四大特型。
- MySQL隔离级别。
- 会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标
- 设计题:一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和I/O操作,如果让你设计,你怎么设计?
- 设计题:一台数据库服务器,请问如何找出写入该数据库的大流量?
进阶篇
- MySQL优化方案。
- mysql的复制原理以及流程。
- 先问基本原理流程,3个线程以及之间的关联。
- 再问一致性,延时性,数据恢复。
- 再问各种工作遇到的复制bug的解决方法
3.MySQL中引擎myisam与innodb
问5点不同(至少5点):
- InnoDB支持事物,而MyISAM不支持事物
- InnoDB支持行级锁,而MyISAM支持表级锁
- InnoDB支持MVCC, 而MyISAM不支持
- InnoDB支持外键,而MyISAM不支持
- InnoDB不支持全文索引,而MyISAM支持。
二者的索引的实现方式:
- 虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。
- 第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。
- 而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
4.innodb的事务与日志的实现方式
有多少种日志
- 错误日志:记录出错信息,也记录一些警告信息或者正确的信息
- 慢查询日志:设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中。
- 二进制日志:记录对数据库执行更改的所有操作
- 查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行。
日志的存放形式
innodb_data_file_path = ibdata1:100M:autoextend:max:500M
事务是如何通过日志来实现的,说得越深入越好。
- 隔离性: 通过 锁 实现
- 原子性、一致性和持久性是通过 redo和undo来完成的。
在Innodb存储引擎中,事务日志是通过redo和innodb的存储引擎日志缓冲(Innodb log buffer)来实现的,当开始一个事务的时候,会记录该事务的lsn(log sequence number)号; 当事务执行时,会往InnoDB存储引擎的日志的日志缓存里面插入事务日志;当事务提交时,必须将存储引擎的日志缓冲写入磁盘(通过innodb_flush_log_at_trx_commit来控制),也就是写数据前,需要先写日志。这种方式称为“预写日志方式”,innodb通过此方式来保证事务的完整性。也就意味着磁盘上存储的数据页和内存缓冲池上面的页是不同步的,是先写入redo log,然后写入data file,因此是一种异步的方式。通过 show engine innodb status/G 来观察之间的差距
需要C/C++ Linux服务器架构师学习资料及大厂面试题 加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
最后给大家分享一个直接对标腾讯T9技术栈的学习路线
(学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂)
(零声教育 第11代 Linux C/C++后端服务器架构开发 成长体系课程)
由于技术点较多,图片压缩后无法清晰显示,详细技术可以点击上面的地址
以上是关于最新腾讯等大厂c/c++后端 linux开发常见面试题汇总的主要内容,如果未能解决你的问题,请参考以下文章