c++ 面试题

文章目录

c++面试准备

语法

c++ 11

auto 和 decltype

auto为自动推导变量类型

c++ 复制代码
auto a = 10;

decltype为推导表达式,用于从已存在变量返回一个类型

cpp 复制代码
auto b = 2;
decltype(b) c = 3;

左值右值和移动语义

  1. 左值是可被取址有名字可被赋值的对象,右值不可被取址或没名字。如运算表达式中间变量,lambda表达式这些都是右值
  2. 在有些情况比如函数返回了一个对象,我们定义了一个对象用来接收这个将返回的对象。在这个过程中我们使用了一次拷贝构造和一次析构.这种情况开销会变大,所以如果可以把将销毁的对象移动到新定义的变量这样就舒服多了,语法如下
c++ 复制代码
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))

前++和后++

  1. STL中只能使用前++, 返回的是迭代对象引用,否则返回一个无用且已销毁的对象
  2. 针对基础类型前++先加后返回,后++ 先返回再加

网络

简述三次握手

client server SYN=1,SEQ=J 请求新建连接 客户端发送后进入SYN_SENT, 服务端收到后进入SYN_RVCD SYN=1,ACK=1,ack=J+1,seq=K 服务端应答并发送自身随机码 客户端收到后进入ESTABLISHED ACK=1,ack=K+1 服务端发送ack应答 服务端进入ESTABLISHED状态 client server

简述四次握手

client server FIN=M请求断开连接 客户端进入FIN_WAIT_1,服务端收到后进入CLOSE_WAIT ack=M+1 客户端进入FIN_WAIT_2 FIN=N 服务端进入LAST_ACK,客户端进入到TIMEWAIT ACK=1, ack=N+1 等待2MSL事件后client进入到CLOSE状态 client server

简述epeo select模型区别

select 基于轮询, epeo基于io通知机制,即文件描述符变化回调,select 最大队列1024,epeo则没有限制。但select优点是开发速度快,

poll和select类似,都是轮询,只是使用的fd结构体不同,没有最大数量限制

内存

程序在内存中如何分布

程序一般运行在虚拟内存上,通过映射,程序可以看起来运行在一段连续的内存上,内存地址从低到高分别放着, 系统预留空间,程序代码段,data段(用来存放全局static,文本常量),bss段(存放未初始化的static),堆,栈

数据库

索引失效的发生场景

使用explain SQL查看执行计划

  1. select * from tableA where 带索引的字段条件 or 不带索引的字段条件
  2. select * from tableA where 带索引字段 like '%XXX'
  3. select * from tableA where 字符串字段 = 2222 ;这里必须用引号包起来
  4. select * from tableA where 带索引字段 - 5 = 6; 不能在索引字段上进行计算
  5. 联合索引只查索引后边的单个字段

常用索引

  1. unique 唯一索引
  2. parimary key 主键索引
  3. index 普通索引
  4. fulltext 全文索引
  5. 组合索引

常用索引结构

  1. B tree 普通二叉树,应注意数据不能偏向太大,否则一端太长会变成线性查找
  2. RBT (red-black-tree) 红黑树,接近平衡二叉树,但允许出现 max_deep - min_deep <= 1,所以相对调整次数更少,同时兼顾索引调整速度
  3. 太深了,后边再学

什么是ACID(数据库事务特性)

  1. 原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚
  2. 一致性(Consistency),数据库事务必须从一个状态一起切换到另一个状态,比如交易成功,并扣款成功
  3. 隔离性(Isolation)AB两个用户同时操作,只能有一个生效后才让另一个开始编辑
  4. 持久性(Durability)事务一旦提交对数据库的修改是要被长久保存下去的

mysql的锁分为哪些类别

  1. 按模式
    • 悲观锁
    • 乐观锁
  2. 按范围
    • 行锁
    • 页锁
    • 表锁
    • 全局锁
  3. 按属性
    • 共享锁
    • 排他锁
相关推荐
Zenova EdgeOS5 分钟前
Python 工业边缘 redis-py 异步实战
开发语言·redis·python
君顾141 分钟前
西安 24 小时自助健身房系统开发实战指南
java·开发语言·健身房
Elsa️7461 小时前
算法一周刷题总结
c++·算法
风合星语1 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
小羊没烦恼!1 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#
程序猿编码2 小时前
两张 3090 扛 27B:Qwen3.8-27B 大模型 DFlash2 加速版生产级落地
开发语言·gpt·深度学习·神经网络·大模型·qwen
welfare9622 小时前
新号别搞:内存管理+模板初阶+STL简介
开发语言·c++
敲代码的瓦龙2 小时前
Jetpack?ViewModel!!!
android·开发语言·kotlin·android-studio
白远山2 小时前
智慧场馆解决方案软件开发实战:从架构设计到落地部署指南
java·开发语言·架构·需求分析
IT笔记2 小时前
Rust 迭代器多级链式调用执行顺序笔记
开发语言·笔记·rust