c++开发面经总结

文章目录


一、c++基础

1. c++特点

  1. C++兼容C语言,在C语言(面向过程)基础上引入了面对对象的机制,提高了代码的易用性、扩充性、复用性、维护性及运行效率
  2. 增加了模板的概念,进一步提高了代码的复用性
  3. c++是不断发展的语言,如c++11新特性引入了const常量、引用、右值引用、四类cast转换、try_catch函数、智能指针、auto变量、lambda函数等特性,使得代码更加安全、简洁、复用性高等
  4. C++面向对象三大特性(1)封装。(2)继承。(3)多态;(延展到c++三大特性)

1.1 include头文件的顺序以及双引号""和尖括号<>的区别

  1. 区别:
    ⅰ. 尖括号<>的头文件是系统文件,双引号""的头文件是自定义文件。
    ⅱ. 编译器预处理阶段查找头文件的路径不一样
  2. 查找路径:
    ⅰ. 使用尖括号<>的头文件的查找路径:编译器设置的头文件路径–>系统变量。
    ⅱ. 使用双引号""的头文件的查找路径:当前头文件目录–>编译器设置的头文件路径–>系统变量。

2 封装、继承、多态

封装继承多态

3. c++与其他面向对象语言的区别(python,java)

4. c++内存管理

4.1 内存分区

4.2 内存对齐

4.3 局部变量、全局变量、静态全局和局部变量的作用域及生命周期

4.4 new/delete及与malloc/free

5. 指针和引用

5.1 函数指针

6. 深拷贝、浅拷贝

6.1 值传递、引用传递、指针传递

7. 左值和右值

7.1 左值引用、右值引用

8. class和struct

8.1 c++中两者区别

structclass
一般用于数据集合一般用于封装对象
默认访问和继承权限为public默认访问和继承权限为private
不可用于定义模板可用于定于模板

8.2 c和c++中的struct的区别

cc++
不允许有成员函数存在可以有成员函数
c中的访问权限只有publicc++中访问权限可设置成public、protected、private
不允许从其他结构体那继承属性和方法允许继承
c中使用结构体必须带上struct,或者用typedef取别名才可省略该关键字c++可省略struct关键字直接使用

9. 拷贝构造、移动构造

10. 运算符与逻辑运算符的执行顺序

11. C++从代码到可执行二进制文件的过程

在这里插入图片描述
ⅰ. 预编译:这个过程主要的处理操作如下:
1. 将所有的#define删除,并且展开所有的宏定义
2. 处理所有的条件预编译指令,如#if、#ifdef
3. 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。
4. 过滤所有的注释
5. 添加行号和文件名标识。

ⅱ. 编译:这个过程主要的处理操作如下:
  1.  词法分析:将源代码的字符序列分割成一系列的记号。
  2.  语法分析:对记号进行语法分析,产生语法树。
  3.  语义分析:判断表达式是否有意义。
  4.  代码优化:
  5. 目标代码生成:生成汇编代码。
  6. 目标代码优化:
  
ⅲ. 汇编:这个过程主要是将汇编代码转变成机器可以执行的指令。

ⅳ. 链接:将不同的源文件产生的目标文件进行链接,从而形成一个可以执行的程序。
  1. 链接分为静态链接和动态链接。
    a. 静态链接,是在链接的时候就已经把要调用的函数或者过程链接到了生成的可执行文件中,就算你在去把静态库删除也不会影响可执行程序的执行;生成的静态链接库,Windows下以.lib为后缀,Linux下以.a为后缀。
    b. 动态链接,是在链接的时候没有把调用的函数代码链接进去,而是在执行的过程中,再去找要链接的函数,生成的可执行文件中没有函数代码,只包含函数的重定位信息,所以当你删除动态库时,可执行程序就不能运行。生成的动态链接库,Windows下以.dll为后缀,Linux下以.so为后缀。([动态库创建](https://editor.csdn.net/md/?articleId=124861119)[静态库创建](https://editor.csdn.net/md/?articleId=124853205))

二、STL容器

六大容器


三、c++语法细节

C++11新特性

1. 关键字

1.1 static

1.2 const

来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。
c++ const小结

  1. 修饰普通的变量,则该变量值不可修改

  2. 修饰指针
    int *p = a; //p为指向a的地址,*p为a的值
    a = &p; //解引用,得到指针指向的值

指针常量常量指针
const **const
const int* p(常用)/int const*pint *const p
const修饰*p,即指针指向的内容const修饰p,即指针指向的地址
则指针常量指向的值不可变,指向(地址)可变常量指针修饰的是指针,则指向(地址)不可变,指向的内容可变

const int * const p ,为常指针常量(指向常量的常指针),指向内容和指向均不可变

  1. 修饰函数的形参,
    一般与引用用在一起,避免值传递的缺点以及指针传递形式复杂性

  2. 修饰函数返回值,
    A:const 修饰内置类型的返回值,修饰与不修饰返回值作用一样。
    B: const 修饰自定义类型的作为返回值,此时返回的值不能作为左值使用,既不能被赋值,也不能被修改。
    C: const 修饰返回的指针或者引用,是否返回一个指向 const 的指针,取决于我们想让用户干什么。


1.3 final

final 是C++11新增,他可以用来修饰类,让类无法被继承;或用来修饰类的虚函数,让虚函数在子类中不能被重写。
深入理解final

  1. 修饰类:
    修饰的类不能被继承,类中的方法不能被重写,但能被重载,故一般abstract(抽象类关键字,抽象类必须要被重写,待补充)和final关键字不能同时修饰类

  2. 修饰成员变量:
    该成员变量不可变,若是基本类型,初始化后值不可变,若是指针或引用,指向不可变,即指向的地址不可变,内容可变

  3. 修饰成员方法:
    该方法不能被重写,但子类仍可使用父类中的权限内方法


1.4 final和const区别

final和const区别

  1. final 与 const 修饰的变量取值时机不同
    所谓取值时机不同,指的是 const 修饰的变量是在编译时已确定下来的值,而 final 修饰的变量是在运行时才确定下来的。

  2. 相同内容对象创建不同
    虽然创建了两个对象list1和list2,但是内容一致且都是const对象,所以其指向的是同一对象:
    final声明的变量,即使内容相同,也是重新创建新的对象:


1.5 abstract

1.6 virtual

1.3 define/typedef

1.4 decltype/auto

1.5 explicit

1.8 反射reflect(待确认)

1. 9 extern

  1. 在C++中,导入C函数的关键字是extern,表达形式为extern “C”,
  2. extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。
  3. 编译区别:由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。

1.10 override/overload(重载/重写/隐藏)

1.11 volatile

volatile 是“易变的”、“不稳定”的意思。volatile是 c++ 的一个关键字,用来解决在“共享”环境下容易出现的读取错误的问题。volatile详细用法介绍

3

2. 函数语法糖

2.1 strcpy()/memcpy()

2.2 sizeof()/strlen()

2.3 lambda函数

2.4 智能指针

2.5 进程、线程相关

2.6 异常处理

2.6.1 try-catch函数


三、操作系统

1. 进程、线程

2. 进程间通信

2.1 管道

2.2 信号量(锁机制)

2.3 消息队列

2.4 内存映射

2.5 共享内存

2.6 socket网络通信

TCP通信

3. 同步模型

3.1 生产者消费者模型

4. 死锁

4.1 死锁的条件

4.2 避免死锁的方法

5. I/O复用方式

5.1 select

5.2 poll

5.3 epoll

6. 内存管理

6.1 分页存储

6.2 分段存储

四、计算机网络

1. 计算机网络基础知识

1.1 七层模型

1.2 五层模型

1.3 网络传输过程中涉及的地址

1.3.1 IP地址(子网掩码)
1.3.2 MAC地址
1.3.3 端口号

1.4 流量控制和拥塞控制

1.5 cookie和session

2. 从输入URL到页面显示过程

3. 应用层

3.1 http/https

3.2 常用请求方法

3.2.1 get
3.2.2 post

3.3 状态码

3.4 请求消息和响应消息结构

4. 传输层

4.1 TCP/UDP区别

4.2 三次握手

4.3 四次挥手

4.4 可靠传输

5. 网络层

5.1 ARP/RARP

5.2 ping命令

6. 数据链路层

6.1 MAC地址

五、linux

1. linux基础命令

1.1 文件及目录的创建、删除、查看命令

1.2 文件压缩就、解压

1.3 程序编辑、调试、运行等命令

1.4 进程、线程相关命令

1.5 net连接、桥连接、本机连接区别

六、mysql

1. 数据库科普

2.创建表

3. 修改表信息(增、删、改)

4. 查找表信息

七、数据结构与算法(见另一分区)

八、设计模式(见另一分区)

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时是石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值