Linux下的C++后台开发知识点汇总

2023-05-16

 

 

计算机操作系统(Linux):

  1. 命令:

netstat :

  • netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

  • 详细见:https://www.cnblogs.com/ftl1012/p/netstat.html

tcpdump :

  • tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

  • 详细见:https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

  • tcpdump -i eth1  :如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0。

ipcs:

  • 多进程间通信常用的技术手段包括共享内存、消息队列、信号量等等,Linux系统下自带的ipcs命令是一个极好的工具,可以帮助我们查看当前系统下以上三项的使用情况,从而利于定位多进程通信中出现的通信问题。

  • 详细见:https://blog.csdn.net/dalongyes/article/details/50616162

ipcrm:

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

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

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

grep、sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了。只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言来介绍。

grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率要比其他的高很多;

sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果你处理的数据是针对行进行处理的,可以使用sed;

awk:报告生成器,格式化以后显示。如果对处理的数据需要生成报告之类的信息,或者你处理的数据是按列进行处理的,最好使用awk。

 

grep

 

grep(关键字: 截取) 文本搜集工具, 结合正则表达式非常强大
主要参数 []
-c : 只输出匹配的行
-I : 不区分大小写
-h : 查询多文件时不显示文件名
-l : 查询多文件时, 只输出包含匹配字符的文件名
-n : 显示匹配的行号及行
-v : 显示不包含匹配文本的所有行(我经常用除去grep本身)
基本工作方式: grep 要匹配的内容 文件名, 例如:
       grep 'test' d* 显示所有以d开头的文件中包含test的行
       grep 'test' aa bb cc 显示在 aa bb cc 文件中包含test的行
       grep '[a-z]\{5}\' aa 显示所有包含字符串至少有5个连续小写字母的串

 

 

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

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

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

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

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

  6. 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(使用前将#替换为@)

Linux下的C++后台开发知识点汇总 的相关文章

随机推荐