c++ 后端linux开发常见问题

2023-05-16

计算机操作系统(Linux):

  1. 命令:netstat tcpdump ipcs ipcrm

    这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验

  2. cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握

  3. 文本处理三剑客:grep awk sed

  4. 共享内存的使用实现原理、然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?

  5. c++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)

  6. ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意.bss段)

  7. 使用过哪些进程间通讯机制,并详细说明

  8. makefile编写,虽然比较基础,但是会被问到

  9. gdb调试相关的经验,会被问到。

  • 可以参考这篇博文:常用的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语言

基础篇

  1. C语言的基本变量类型有哪些?

  2. 宏定义和展开(精通)

  3. 位操作(精通)

  • 计算二进制数中1的个数

  • 清零操作

  1. 指针操作和计算(精通)

  2. 各类库函数必须非常熟练的实现

  • strcpy

  • strcat

  1. 哪些库函数属于高危函数,为什么?(strcat、strcpy等)

进阶篇

(待补充)

C++语言

基础篇

  1. 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++)

进阶篇

  1. 虚函数的作用和实现原理(必问)

  • 虚函数、纯虚函数:分别如何定义(网易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++)哪些容器在插入和删除的时候迭代器会失效,哪些不会?

常用数据结构与经典算法

  1. 《离散数学》范围内的一切问题皆由可能被深入问到(这个最坑爹,最重要,最体现功底,最能加分,特别是各类树结构的实现和应用)

  2. 各类排序:大根堆的实现,快排(如何避免最糟糕的状态?),bitmap的运用等

  3. 哈希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什么情况下可读?

数据库与分布式系统

常用数据库有:MySql、Redis、Memcache

基础篇

  1. MySQL事务的四大特型。

  2. MySQL隔离级别。

  3. 会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标

  4. 设计题:一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和I/O操作,如果让你设计,你怎么设计?

  5. 设计题:一台数据库服务器,请问如何找出写入该数据库的大流量?

进阶篇

  1. MySQL优化方案。

  2. 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 来观察之间的差距

HR面(综合面)

  1. 做一下自我介绍(侧重综合能力方面)

  2. 都投了哪些公司?为什么选择腾讯?(腾讯)为什么选择京东?(京东)

  3. 为什么选择这个现在的这个岗位?(腾讯)

  4. 腾讯相对其他公司有什么优势和不足?(腾讯)你认为京东和BAT相比有哪些优势和劣势?(京东)

  5. 谈一下你个人相对其他人的优势。(腾讯)

  6. 工作和生活冲突了怎么办等(滴滴新锐计划)

  7. 问我当初高考为什么读这个学校,高考多少名啊?考研保研啊?读研为什么不去更好的学校?(腾讯基础研究)讲一讲为什么考上研究生?上研究生什么感受?(京东)

  8. 怎么评价自己?觉得自己是什么样的人?别人是怎么看你的?(腾讯基础研究)

  9. 看你有比赛的经历,讲一讲你的比赛。比赛中你最大的收获是什么?(京东)

  10. 介绍项目,担任什么角色在项目中,遇到什么困难,怎么解决的?(京东)

  11. 你的职业发展规划是什么?(京东)(网易C++)

  12. 你在学校或者实习做过什么项目?讲一下你最有意义的一次项目经历。(网易C++)

  13. 以后准备留在杭州,你父母考虑过吗?你女朋友呢?(网易C++)

  14. 自己的学习方式、对于开源的看法和使用程度、对于上级需求变化的看法以及处理方式。(去哪儿java)

  15. 平时看什么书?(腾讯C++)

总结:

hr面主要看你的交流能力,以及语言的组织能力,大家正常发挥就好了。

学习建议

https://blog.csdn.net/igiqoanw/article/details/38387177

  1. 最好在找实习之前,先把C++ primer刷几遍,不懂的可以做个笔记,下次再看。当你看《对象模型》的时候,你会发现Primer中看不懂的知识都能在《对象模型》中迎刃而解。

  2. 《STL源码解析》最好也看看。面试官很喜欢问vector,map等的底层实现或者动态增长,如果不看书,关靠看博客和面经的话可能理解起来比较困难。

  3. 剑指offer是大部分公司一面的算法题,我觉得最好把每个题目都看懂吧。leetcode的话前100题确实很经典,二分查找,hash,动态规划,二叉树等的知识也可以通过刷题来巩固。

  4. 网络的话肯定是TCP/IP详解 卷1,有时间的话可以再看看Unix网络编程。时间更充裕的话最好刷一刷陈硕的《linux多线程服务器编程》,对多线程的知识会有一个了解。

  5. 最后一个建议就是越早准备越好,投递简历、面试期间只适合整理牛客网上的面经以及自己的面经,补缺补漏。毕竟面试题都是随机的,想要在面试中表现好一些,最好还是平时多积累。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ 后端linux开发常见问题 的相关文章

随机推荐

  • 二分搜索binary search和贪婪算法

    二分搜索binary search 定义 xff1a 二分搜索也称折半搜索 xff0c 是一种在有序数组中查找某一特定元素的搜索算法 运用前提 xff1a 必须是排好序的 输入并不一定是数组 xff0c 也可能是给定一个区间和终止的位置 优
  • 面试题52. 两个链表的第一个公共节点

    面试题52 两个链表的第一个公共节点 难度简单51收藏分享切换为英文关注反馈 输入两个链表 xff0c 找出它们的第一个公共节点 如下面的两个链表 xff1a 在节点 c1 开始相交 示例 1 xff1a 输入 xff1a intersec
  • 求解两个字符串的最长公共子序列

    一 xff0c 问题描述 给定两个字符串 xff0c 求解这两个字符串的最长公共子序列 xff08 Longest Common Sequence xff09 比如字符串1 xff1a BDCABA xff1b 字符串2 xff1a ABC
  • leetcode刷题6.16 树的层序遍历,树的序列化

    给你一个二叉树 xff0c 请你返回其按 层序遍历 得到的节点值 xff08 即逐层地 xff0c 从左到右访问所有节点 xff09 示例 xff1a 二叉树 xff1a 3 9 20 null null 15 7 3 9 20 15 7
  • 深度优先及广度优先算法

    深度优先搜索算法DFS 广度优先搜索算法BFS 在猪呢个算法知识点中占比非常大 xff0c 应用最多的地方是对图进行遍历 xff08 树以为是图的一种 xff09 深度优先搜索算法DFS DFS解决的 是连通性的问题 xff0c 及给定两个
  • 厄拉多塞筛法 快速求质数 /回文子串

    西元前250年 xff0c 希腊数学家厄拉多塞 Eeatosthese 想到了一个非常美妙的质数筛法 xff0c 减少了逐一检查每个数的的步骤 xff0c 可以比较简单的从一大堆数字之中 xff0c 筛选出质数来 xff0c 这方法被称作厄
  • Docker部署Sonarqube

    1 下载镜像 docker pull registry span class token punctuation span cn span class token operator span shenzhen span class toke
  • leetcode刷题 旋转链表

    92 反转链表 II 难度中等393 反转从位置 m 到 n 的链表 请使用一趟扫描完成反转 说明 1 m n 链表长度 示例 输入 1 gt 2 gt 3 gt 4 gt 5 gt NULL m 61 2 n 61 4 输出 1 gt 4
  • 分布式实时处理系统——C++高性能编程 RAII resource acquisition is initialization

    分布式实时处理系统 C 43 43 高性能编程 前言 基于通信基础 xff0c 介绍Hurricane实时处理系统的工程实现 xff0c 主要使用C 43 43 语言 一 IPC socket 异步I O epoll 二 C 43 43 1
  • 6月21 刷题思考

    1 RALL相关知识点 2 std set的使用 xff1f xff1f 不熟练 3 一个无序整数数组中找到最长连续序列 4 Two Sum 问题 Data structure design 5 i 43 43 在两个线程里边分别执行100
  • V2X就是Vehicle To Everything 国标中有五种消息BSM、RSI、RSM、SPAT、MAP

    前面讲到V2X就是Vehicle To Everything xff0c 即车队外界所有信息的交换 xff0c 这里的X代表Everything xff0c 在V2X概念中 xff0c 我们将它看作四大部分 xff0c 车与车通信 xff0
  • 6月23 leetcode 二进制求和

    67 二进制求和 难度简单404收藏分享切换为英文关注反馈 给你两个二进制字符串 xff0c 返回它们的和 xff08 用二进制表示 xff09 输入为 非空 字符串且只包含数字 1 和 0 示例 1 输入 a 61 34 11 34 b
  • 利用栈实现树的中序遍历

    94 二叉树的中序遍历 难度中等537收藏分享切换为英文关注反馈 给定一个二叉树 xff0c 返回它的中序 遍历 示例 输入 1 null 2 3 1 2 3 输出 1 3 2 进阶 递归算法很简单 xff0c 你可以通过迭代算法完成吗 x
  • STL中的set详解

    1 关于set C 43 43 STL 之所以得到广泛的赞誉 xff0c 也被很多人使用 xff0c 不只是提供了像vector string list等方便的容器 xff0c 更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构
  • 你真的了解二分查找吗?

    传统的二分查找算法 提到二分查找 xff0c 相信很多人都不陌生 xff0c 大学学数据结构的时候老师都讲过 xff0c 它是一种效率较高的查找方法 xff0c 基于顺序存储结构的线性表 xff0c 且要求表中元素按关键字有序排列 假设元素
  • 二叉树DFS/BFS实现(C++)

    深度优先搜索算法 xff08 Depth First Search xff09 DFS是搜索算法的一种 它沿着树的深度遍历树的节点 xff0c 尽可能深的搜索树的分支 当节点v的所有边都己被探寻过 xff0c 搜索将回溯到发现节点v的那条边
  • 当TCP建立连接过程中出现问题了,如何检查?

    netstat命令 stat状态说明 TCP协议规定 xff0c 对于已经建立的连接 xff0c 网络双方要进行四次握手才能成功断开连接 xff0c 如果缺少了其中某个步骤 xff0c 将会使连接处于假死状态 xff0c 连接本身占用的资源
  • 本地服务器上传代码到gitee仓库

    把gitlab仓库里的node day01项目传到本地服务器 再把本地服务器里的node day01项目传到Gitee代码仓库 1 登录Gitlab xff0c 复制代码仓库地址 2 拷贝一刚复制的Git 仓库到本地 root 64 ubu
  • 牛客网刷刷刷刷

    作者 xff1a 故事的小黄瓜 链接 xff1a https www nowcoder com discuss 436386 来源 xff1a 牛客网 1 xff0e 线程池如何开启一个新线程 xff1f 2 xff0e 线程池初始化的步骤
  • c++ 后端linux开发常见问题

    计算机操作系统 xff08 Linux xff09 命令 xff1a netstat tcpdump ipcs ipcrm 这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验 cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟