文章目录
- c++面试准备
- 语法
- c++ 11
- auto 和 decltype
- 左值右值和移动语义
- 前++和后++
- 网络
- 简述三次握手
- 简述四次握手
- 简述epeo select模型区别
- 内存
- 程序在内存中如何分布
- 数据库
- 索引失效的发生场景
- 常用索引
- 常用索引结构
- 什么是ACID(数据库事务特性)
- mysql的锁分为哪些类别
c++面试准备
语法
c++ 11
auto 和 decltype
auto为自动推导变量类型
auto a = 10;
decltype为推导表达式,用于从已存在变量返回一个类型
auto b = 2;
decltype(b) c = 3;
左值右值和移动语义
- 左值是可被取址有名字可被赋值的对象,右值不可被取址或没名字。如运算表达式中间变量,lambda表达式这些都是右值
- 在有些情况比如函数返回了一个对象,我们定义了一个对象用来接收这个将返回的对象。在这个过程中我们使用了一次拷贝构造和一次析构.这种情况开销会变大,所以如果可以把将销毁的对象移动到新定义的变量这样就舒服多了,语法如下
class AA{public:AA():A1(5), A2(6) {}AA(AA&& rvalue) noexcept: A1(std::move(rvalue.A1)),A2(std::move(rvalue.A2)) {}private:int A1;int A2;};
AA AA1();
AA AA2(std::move(AA1))
前++和后++
- STL中只能使用前++, 返回的是迭代对象引用,否则返回一个无用且已销毁的对象
- 针对基础类型前++先加后返回,后++ 先返回再加
网络
简述三次握手
简述四次握手
简述epeo select模型区别
select 基于轮询, epeo基于io通知机制,即文件描述符变化回调,select 最大队列1024,epeo则没有限制。但select优点是开发速度快,
poll和select类似,都是轮询,只是使用的fd结构体不同,没有最大数量限制
内存
程序在内存中如何分布
程序一般运行在虚拟内存上,通过映射,程序可以看起来运行在一段连续的内存上,内存地址从低到高分别放着, 系统预留空间,程序代码段,data段(用来存放全局static,文本常量),bss段(存放未初始化的static),堆,栈
数据库
索引失效的发生场景
使用explain SQL查看执行计划
- select * from tableA where 带索引的字段条件 or 不带索引的字段条件
- select * from tableA where 带索引字段 like ‘%XXX’
- select * from tableA where 字符串字段 = 2222 ;这里必须用引号包起来
- select * from tableA where 带索引字段 - 5 = 6; 不能在索引字段上进行计算
- 联合索引只查索引后边的单个字段
常用索引
- unique 唯一索引
- parimary key 主键索引
- index 普通索引
- fulltext 全文索引
- 组合索引
常用索引结构
- B tree 普通二叉树,应注意数据不能偏向太大,否则一端太长会变成线性查找
- RBT (red-black-tree) 红黑树,接近平衡二叉树,但允许出现 max_deep - min_deep <= 1,所以相对调整次数更少,同时兼顾索引调整速度
- 太深了,后边再学
什么是ACID(数据库事务特性)
- 原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚
- 一致性(Consistency),数据库事务必须从一个状态一起切换到另一个状态,比如交易成功,并扣款成功
- 隔离性(Isolation)AB两个用户同时操作,只能有一个生效后才让另一个开始编辑
- 持久性(Durability)事务一旦提交对数据库的修改是要被长久保存下去的
mysql的锁分为哪些类别
- 按模式
- 悲观锁
- 乐观锁
- 按范围
- 行锁
- 页锁
- 表锁
- 全局锁
- 按属性
- 共享锁
- 排他锁