面试题30天打卡-day11

news/2024/11/23 2:51:19/

1、MySQL 事务有哪些隔离级别、分别有什么特点,以及 MySQL 的默认隔离级别是什么?

  1. 读未提交:read uncommitted (最低的隔离级别) 《提交之前就可以读到》

    • 事务A可以读取到事务B未提交的数据
    • 可能会出现 脏读 (Dirty read)、不可重复度、幻读现象
    • 理论情况下
  2. 读已提交:read committed (提交之后才能读到)

    • 事务A只能读取到事务B提交之后的数据
    • 解决了脏读现象,但它是不可重复读取数据
    • 每一次读取到的数据是真实数据
  3. 可重复读:repeatable read (提交之后也读不到 :读取到开启事务时的数据。事务不结束数据就不会改变)

    • 事务A开启之后,每一次在事务A中读取到的数据都是一致的。即使事务B修改数据,事务A中读取到的数据依然没有改变。
    • 解决了不可以重复读问题
    • 出现幻影读:读取的数据都是幻想
  4. 序列化 / 串行化:serializable (最高的隔离级别)

    • 效率最高,解决所有问题

    • 事务要进行排队,不能并发,并发新能低,开销大。

默认情况下MySQL的隔离级别为可重复读

面试官问到这个问题,可能想了解你对 MySQL 事务隔离级别的了解程度,以及你对事务隔离级别对数据的影响、如何选择合适的隔离级别等方面的理解。同时,也可能会考察你对数据库的基本概念和原理的掌握程度。

2、讲一下 Redis 的单线程模型,IO 多路复用是什么?

Redis 是一个基于内存的高性能 key-value 数据库,其单线程模型是指 Redis 在主线程中通过事件循环来处理客户端的请求和内部的任务。Redis 主线程通过阻塞式地监听文件描述符,来实现异步事件的处理。这种单线程模型可以避免多线程之间的竞争和加锁等问题,同时也可以让 Redis 轻松地实现高并发、高吞吐量的处理。

Redis 单线程模型中的 IO 多路复用是指利用操作系统的一些特性,通过同时监听多个文件描述符来实现同时处理多个连接的 I/O 操作。在 Redis 中,通过使用多路复用技术,主线程可以同时监听多个客户端的连接,当某个客户端的连接出现了 I/O 事件时,主线程便可以及时地处理该事件,从而提高了 Redis 的 I/O 效率。

在 Redis 的单线程模型中,虽然主线程只有一个,但是它可以通过 IO 多路复用技术来同时处理多个连接的 I/O 操作,从而实现高效的异步事件处理。

3、什么是 BIO、NIO、AIO?

BIO、NIO、AIO都是Java中网络编程的I/O模型。

BIO(Blocking IO )是JDK1.4之前的传统IO模型,特点就是同步阻塞等待数据,直到数据读取完毕才会返回结果,线程会一直阻塞在read/write 方法上,不能处理其他的IO请求,它的并发性能比较差。

NIO(Non-Blocking IO)是Java 1.4之后新增的IO模型,它支持同步非阻塞式的IO操作。NIO采用了多路复用器来处理IO请求,通过一个线程处理多个IO请求,实现了高并发处理。NIO主要有三个核心概念:Selector、Channel、Buffer。Selector负责监听多个Channel上的事件,Channel可以理解为对原始IO的封装,Buffer则是对数据的封装。

AIO(Asynchronous IO)是Java 1.7之后新增的IO模型,它支持异步非阻塞IO操作。与NIO不同的是,AIO在进行读写操作时不需要像NIO一样一直轮询,而是通过回调函数的方式在数据准备好后通知应用程序进行数据的读取,这样可以更加高效地利用系统资源,提高吞吐量。但是AIO在处理小文件和小数据量时的性能并不如NIO。

三者区别

BIOAIONIO
处理IO方式阻塞IO非阻塞IO异步IO
缺点并发性能差实现fu’z虽弥补了并发能力,NIO代码比较复杂
适合场景连接数较小且固定链接数非常多且链接时间比较长连接数多且变化较少

http://www.ppmy.cn/news/53288.html

相关文章

Python 依赖库管理:pipreqs、pigar、pip-tools、pipdeptree

在 Python 的项目中,如何管理所用的全部依赖库呢?最主流的做法是维护一份“requirements.txt”,记录下依赖库的名字及其版本号。 那么,如何来生成这份文件呢?一种常规的方法: pip freeze > requiremen…

C plus plus ——【面向对象编程】

系列文章目录 C plus plus 面向对象编程 文章目录 系列文章目录前言一、编程语言概述1.1低级语言概述1.2高级语言概述1.3面向过程、面向对象概述 二、面向过程编程的特性三、面向对象编程的特性四、类和对象4.1 类的概述4.2 类的声明与定义4.3 类的实现4.4 对象的生命 五、构造…

HTML5 <span> 标签

实例 HTML5 <span>标签内的内容独立于文档&#xff0c;当对该标签应用样式时&#xff0c;包含在其中的内容会呈现出不同的视觉效果。请参考下述示例&#xff1a; 使用 <span> 元素对文本中的一部分进行着色&#xff1a; <p>我的母亲有 <span style&quo…

计算机网络学习10(ARP协议详解)

ARP 协议&#xff0c;可以说是在协议栈中属于一个偏底层的、非常重要的、又非常简单的通信协议。 开始阅读这篇文章之前&#xff0c;你可以先看看下面几个问题&#xff1a; ARP 协议在协议栈中的位置&#xff1f; ARP 协议在协议栈中的位置非常重要&#xff0c;在理解了它的工…

OpenGLES 实验室之2D篇 第三弹 の 直播白板

本文字数&#xff1a;4555字 预计阅读时间&#xff1a;12分钟 笔者之前发表的音视频文章&#xff0c;有图像的处理&#xff0c;音频的重采样等等&#xff0c;都属于入门级别。通过阅读它们&#xff0c;读者能对音视频有了了解。可在 Gitee 上面回顾。 2023 年&#xff0c;笔者将…

LeetCode_回溯_中等_93.复原 IP 地址

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 有效 IP 地址正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1”…

08_ThreadPool线程池

1. 架构说明 Java中的线程池是通过Executor框架实现的&#xff0c;该框架中用到了Executor&#xff0c;ExecutorService&#xff0c;ThreadPoolExecutor这几个类。 Executor接口是顶层接口&#xff0c;只有一个execute方法&#xff0c;过于简单。通常不使用它&#xff0c;而是…

基于异常值鲁棒性问题的极限学习机的回归问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…