当前位置: 首页 > article >正文

C++面试速通宝典——16

268. 进程之间的通信方式有哪些?

  1. 管道(Pipe)
  2. 信号(Signal)
  3. 消息队列(Message Queue)
  4. 共享内存(Shared Memory)
  5. 信号量(Semaphore)
  6. 套接字(Socket)

269. 两个进程想用同一个端口可以做到么?

‌‌‌‌  通常情况下,同一时间内两个进程不能监听同一个端口
‌‌‌‌  但如果第二个进程设置了SO_REUSEADDRSO_REUSEPORT套接字选项,则可能允许绑定到同一个接口,这取决于操作系统的实现。

270. TimeWait是干嘛的?是主动断开方的状态还是被动段开方的状态?

‌‌‌‌  TIME_WAIT是TCP连接断开流程中的一个状态,他是主动关闭方在发送最后一个ACK应答后进入的状态。这个状态的作用是确保最后一个ACK能到达对方,避免由于网络延迟导致的连接重置,以及确保所有旧的数据包在网络上消失,防止他们干扰新的连接。

271. 出现大量time wait怎么继续用端口快速建立连接

‌‌‌‌  大量的TIME_WAIT 状态可能会使新的连接无法立即使用这些端口。为了解决这个问题,可以采取以下措施:

  1. 开启TCP的timewait复用功能,可以设置/proc/sys/net/ipv4/tcp_tw_reuse为1。
  2. 减小TIME_WAIT的超时时间,可以调整/proc/sys/net/ipv4/tcp_fin_timeout的值。这个值代表TCP连接在结束后还需要等待多久才能被完全释放。
  3. 使用不同的本地端口进行连接,通过在较大范围内选择源端口,这样可以避免端口用尽的情况。

272. socket有个参数可以重用连接,了解吗?

存在两个套接字选项可以影响连接的重用:

  1. SO_REUSEADDR:允许其他套接字绑定到正在使用中或TIME_WAIT状态的端口。这对于服务器快速重启非常有用,不必等待端口从TIME_WAIT状态中解除。
  2. SO_REUSEPORT(取决于操作系统支持):允许多个套接字实例在相同的端口上监听,分担入站连接。这有助于在多核处理器上实现负载均衡。

273. Innodb索引

InnoDB是MySQL的一个存储引擎,它使用的主要索引类型是B+树索引,包括两种:

  1. 主键索引直接存储数据行的实际内容。在InnoDB中,表数据按主键顺序组织存储。
  2. 辅助索引存储主键的值以及指向对应的数据行的指针,不直接包含行数据。查询时,先通过辅助索引找到主键,再通过主键索引定位到数据行。

解释

‌‌‌‌  要理解 InnoDB 的索引机制,首先要了解它的存储和索引结构。

InnoDB的存储和索引结构

‌‌‌‌  InnoDB 是 MySQL 的一种存储引擎,它支持事务和行级锁定,并且它的数据和索引都存储在一种称为 B+ 树的数据结构中。B+ 树是一种平衡的树结构,适用于数据库的高效查找、插入和删除操作。

主键索引

  1. 主键索引(Clustered Index):

    • InnoDB 使用主键索引来组织和存储数据。在 InnoDB 中,主键索引不仅仅是一个索引,它还包含了实际的数据行。
    • 数据库表的数据行按照主键的顺序存储在一起。主键索引中的叶子节点包含了完整的数据行。
    • 由于数据行按主键顺序存储,因此在通过主键进行查询时,查找效率非常高。

    示例: 假设有一个表 employees,有主键 id。在 InnoDB 中,数据按照 id 的顺序存储:

B+ 树节点(主键索引):
| 1 | 2 | 3 | 4 | 5 |
|数据行|

辅助索引

  1. 辅助索引(Secondary Index):

    • 辅助索引用于加速非主键列上的查询。它们不包含实际的数据行,而是包含主键的值和指向数据行的指针。
    • 辅助索引的叶子节点存储的是主键的值。通过辅助索引查找数据时,首先在辅助索引中找到主键的值,然后通过主键索引定位到实际的数据行。
    • 辅助索引并不会影响表的数据存储顺序,它只是为查询提供了额外的路径。

    示例: 假设有一个表 employees,有辅助索引 name。在 InnoDB 中,辅助索引存储 name 和主键 id

辅助索引 (name):
| Alice  -> 3 |
| Bob    -> 1 |
| Charlie -> 2 |

主键索引 (id):
| 1 | 2 | 3 |

理解这段话的关键点

  • 主键索引存储实际数据行:在 InnoDB 中,主键索引是簇索引,叶子节点包含了实际的数据行。这意味着通过主键索引查找数据行非常高效。
  • 表数据按主键顺序存储:InnoDB 表的数据行按主键值的顺序存储,这有助于快速通过主键查找和范围查询。
  • 辅助索引存储主键值和指针:辅助索引的叶子节点不包含实际的数据行,而是存储主键值和指向主键索引中相应数据行的指针。查询时,需要先通过辅助索引找到主键值,再通过主键索引找到实际的数据行。

查询过程示例

  • 通过主键查询

    • 查询语句:SELECT * FROM employees WHERE id = 3;
    • InnoDB 直接通过主键索引找到数据行,效率高。
  • 通过辅助索引查询

    • 查询语句:SELECT * FROM employees WHERE name = 'Alice';
    • InnoDB 先在辅助索引中找到 nameAlice 对应的主键值 3,然后通过主键索引找到主键值 3 对应的数据行。

‌‌‌‌  总结来说,InnoDB 使用主键索引和辅助索引来高效地组织和查找数据。主键索引直接存储数据行,辅助索引存储主键值并通过主键值指向数据行。这种结构确保了数据存储和查询的高效性。

274. 主键索引和联合索引的区别

  1. 主键索引:主键索引是表中唯一的,用于保证数据的唯一性。每个表只有一个主键索引。
  2. 联合索引:联合索引是一种在多个列上创建的索引。是由两个或多个列的值创建一个单一的、有序的索引。

解释

要理解主键索引和联合索引之间的区别,可以通过以下几个方面进行详细分析:

主键索引

  1. 唯一性

    • 主键索引是表中唯一的索引,用于保证数据的唯一性。每个表只能有一个主键索引。
    • 主键列的值必须唯一且不能为空,这样可以确保每一行数据都能被唯一标识。
  2. 索引结构

    • 在 InnoDB 中,主键索引是簇索引(Clustered Index),它不仅是索引,还包含了实际的数据行。
    • 数据按主键索引的顺序存储在表中,主键索引的叶子节点存储的是完整的数据行。
  3. 效率

    • 由于数据行按主键值的顺序存储,通过主键索引进行查询非常高效,尤其是范围查询。

联合索引

  1. 多个列组合

    • 联合索引是基于两个或多个列创建的单一索引。它将这些列的值组合在一起形成一个有序的索引。
    • 例如,创建一个包含列 AB 的联合索引:CREATE INDEX idx_ab ON table(A, B);
  2. 索引结构

    • 联合索引的叶子节点存储的是联合列的值以及指向数据行的指针(或者主键值)。
    • 联合索引在逻辑上是按联合列的顺序进行排列的。
  3. 查询效率

    • 联合索引可以加速涉及多个列的查询,尤其是联合列的前缀列的查询。
    • 例如,如果有联合索引 (A, B),查询 AAB 都可以使用这个索引。但是,如果查询只涉及 B 列,这个联合索引的效果就不明显了。

举例说明

假设有一个表 employees,其结构如下:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    department_id INT,
    ...
);

主键索引
  • 定义id 是主键,创建主键索引。
  • 用途:主键索引确保 id 的唯一性,并且数据行按 id 的顺序存储。
  • 示例查询SELECT * FROM employees WHERE id = 1;
联合索引
  • 定义:创建联合索引 first_namelast_name
CREATE INDEX idx_name ON employees (first_name, last_name);

  • 用途:联合索引加速按 first_namelast_name 组合查询的数据检索。
  • 示例查询
    • SELECT * FROM employees WHERE first_name = 'John';
    • SELECT * FROM employees WHERE first_name = 'John' AND last_name = 'Doe';

总结

  1. 主键索引

    • 是表中唯一的索引,用于保证数据的唯一性。
    • 每个表只能有一个主键索引。
    • 在 InnoDB 中,主键索引是簇索引,直接存储数据行。
  2. 联合索引

    • 基于两个或多个列创建的索引。
    • 用于加速涉及多个列的查询,特别是按联合列顺序的查询。
    • 联合索引的叶子节点存储联合列的值及指向数据行的指针。

通过以上分析,我们可以更好地理解主键索引和联合索引在数据库中的作用和区别。

275. 主键索引在索引表上只存有索引数据嘛

‌‌‌‌  不完全是。InnoDB引擎中,主键索引是一种特殊类型的索引,存储了索引数据以及与之对应的表数据。这意味着,主键索引实际上包含整个表的数据。

276. 事务的隔离级别

  1. 读未提交(Read Uncommitted):可以读取未被其他事务提交的数据。
  2. 读已提交(Read Committed):只能读取已被其他事务提交的数据。
  3. 可重复读(Repeatable Read):在事务开始后,外界对数据库的更新不会影响到本事务的操作。
  4. 串行化(Seralizable):事务顺利执行,避免并发问题,实现最高级别的隔离。

277. 幻读是什么?

‌‌‌‌  幻读是指在一个事务处理的过程中,由于其他事务插入了新行,当查询重复时,会出现新的、“幻”的数据。这主要在低隔离级别的事务中发生,尤其在非串行化的隔离级别下常见。它与不可重复读类似,但不可重复读通常是指同一行的数据的变化,而幻读是针对由其他事务所插入的新行

278. 哪个隔离级别可以解决幻读?

‌‌‌‌  串行化(Serializable)隔离级别可以解决幻读问题。在这个隔离级别下,事务是完全串行执行的,因此可以防止幻读,也能防止其他读写冲突的情况。

279. 常用的Linux命令

  1. ls - 列出目录内容。
  2. cd - 改变目录。
  3. pwd - 显示当前目录的路径。
  4. mkdir - 创建新目录。
  5. rmdir - 删除空目录。
  6. rm - 删除文件或目录。
  7. cp - 复制文件或目录。
  8. mv - 移动或重命名文件或目录。
  9. touch - 创建空文件或修改文件时间戳。
  10. chmod - 改变文件权限。
  11. chown - 改变文件拥有者。
  12. grep - 搜索文件内容。
  13. find - 在目录树中搜索文件。
  14. tar - 打包和解包文件。
  15. wget - 从网络上下载文件。
  16. curl - 传输数据命令。
  17. top - 显示系统任务和资源占用。
  18. ps - 显示当前进程。
  19. kill - 结束进程。
  20. sudo - 以其他用户身份执行命令,通常为超级用户。

280. linux如何查看cpu的核数

查看CPU的核数:

cat/proc/cpuinfo | grep 'cpu cores' | uniq

这个命令会显示CPU核心的数量

281. 说一下文件权限

在Linux系统中,每个文件或目录都有三种基本权限三个基本的用户类别

基本权限包括:

  1. 读取(r):允许文件被读取。
  2. 写入(w):允许文件被修改。
  3. 执行(x):允许文件被执行。

基本的用户类别包括:

  1. 用户(u):文件的所有者。
  2. 组(g) :包含有权访问该文件的用户的组。
  3. 其他(o):对该文件没有特权的所有其他用户。

‌‌‌‌  因此,一个文件的权限可能看起来像这样:rwxr-xr–。这表示,文件所有者有读、写、执行权限;同一组的其他用户有读和执行权限;其他所有用户只有读权限。

解释

通过 rwxr-xr-- 权限字符串可以理解:

  • 文件所有者(第一组 rwx:拥有读、写和执行权限。
  • 同一组的其他用户(第二组 r-x:拥有读和执行权限,但没有写权限。
  • 其他所有用户(第三组 r--:只有读权限,没有写和执行权限。

282. 查看日志的命令

查看日志的命令包括:

  1. cat- 直接查看整个日志文件内容。
  2. less- 分页查看日志文件内容。
  3. tail- 查看日志文件的最后几行,常用tail-f实时跟踪最新日志。
  4. grep- 在日志文件中搜索特定的文本字符串。
  5. head- 查看日志文件的前几行。

http://www.kler.cn/news/334565.html

相关文章:

  • Spring Boot大学生就业招聘系统的设计与优化
  • 9.29 LeetCode 3304、3300、3301
  • Kubernetes云原生存储解决方案之 Rook Ceph实践探究
  • 【可答疑】基于51单片机的智能台灯(含仿真、代码、报告、演示视频等)
  • 用Spring Boot搭建IT交流与学习平台
  • 机器学习系列篇章0 --- 人工智能机器学习相关概念梳理
  • 【复习】CSS中的选择器
  • 定时器TIM输出比较及其应用
  • 幂等性接口实现
  • 前端公共资源CDN存储库大全
  • Pikachu-unsafe upfileupload-getimagesize
  • 【深度学习】— softmax回归、网络架构、softmax 运算、小批量样本的向量化、交叉熵
  • 【C++ STL】手撕vector,深入理解vector的底层
  • 【分布式微服务云原生】掌握分布式缓存:Redis与Memcached的深入解析与实战指南
  • 【RabbitMq源码阅读】分析RabbitMq发送消息源码
  • stm32定时器中断和外部中断
  • 深入探讨指令调优的局限性
  • 删除GitHub仓库的fork依赖 (Delete fork dependency of a GitHub repository)
  • 简单介绍Wiki和历史
  • pytorch和yolo区别