面试题30天打卡-day15

这篇具有很好参考价值的文章主要介绍了面试题30天打卡-day15。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Ngnix 是什么?它有哪些应用场景?

Nginx是一款高性能的Web服务器软件,也可以作为反向代理服务器、负载均衡器、HTTP缓存和安全防护等多种用途。Ngnix可以将服务器上的静态文件(html、css、图片)通过HTTP协议返回给浏览器客户端。Ngnix是基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。

Nginx的应用场景包括:

  1. Web服务器:Nginx可以作为Web服务器,提供静态文件和动态文件(如PHP)的处理。如静态HTML页面、CSS、JavaScript、图片等,它能够快速响应客户端的请求,提高网站的访问速度。
  2. 反向代理服务器:Nginx可以作为反向代理服务器,将请求转发到后端服务器,实现负载均衡和高可用性。
  3. 负载均衡器:Nginx可以作为负载均衡器,将客户端的请求均衡分配到多个应用服务器上,从而达到分摊负载的效果,提高系统的可靠性和性能。
  4. HTTP缓存:Nginx可以作为HTTP缓存,缓存静态文件和动态文件,从而减少后端应用服务器的负载,提高网站的访问速度。
  5. 安全防护服务器:Nginx可以作为安全防护服务器,通过设置防火墙、反向代理等技术,防止恶意攻击和DDoS攻击,防止恶意攻击和DDoS攻击,保障网站的安全性,,保障网站的安全性。
  6. WebSocket服务器:Nginx支持WebSocket协议,可以作为WebSocket服务器,实现实时通信、即时聊天等功能。

2、MVCC 是什么?InnoDB 是如何实现 MVCC 机制的?

MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库(包括 MySQLOraclePostgreSQL 等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能

MVCC的实现原理是在每个数据行上维护多个版本,每个版本有一个时间戳,当一个事务读取数据时,它只能读取时间戳早于自己的版本,从而避免了读写冲突。当一个事务向数据库中插入或更新数据时,它会创建一个新的版本,并将新版本的时间戳设置为当前时间戳。

MVCC的优点是:

  1. 提高了数据库的并发性能,因为多个事务可以同时读取同一数据。
  2. 避免了读写冲突,从而提高了数据库的稳定性和可靠性。
  3. 支持数据库的多版本查询,可以查询某个时间点的数据,从而支持历史数据分析和审计等功能。

MVCC的缺点是:

  1. 需要占用更多的存储空间,因为每个数据行需要维护多个版本。
  2. 实现复杂度较高,需要在数据库引擎中进行支持。
  3. 在高并发的场景下,可能会出现大量的版本,从而导致查询性能下降。

InnoDB通过在每一行数据后面存储两个隐藏的列来实现MVCC,这两个列分别是创建时间和过期时间。当一个事务开始时,它会得到一个唯一的事务ID,这个事务ID会用于数据行的版本控制。

在InnoDB中,每个事务看到的数据版本是不同的,这是因为InnoDB根据事务的启动时间和数据行的版本创建一个视图。当一个事务开始时,InnoDB会为它创建一个新的视图,这个视图包含了当前所有活跃的事务和它们的版本号。在事务执行过程中,它只能看到在它启动之前已经提交的事务所创建的版本,而看不到其他事务正在修改的版本。

当一个事务向数据库中插入或更新数据时,InnoDB会创建一个新的数据版本,并将新版本的创建时间设置为当前时间戳,同时将过期时间设置为无穷大。当一个事务删除一条数据时,InnoDB会将这条数据的过期时间设置为当前时间戳,从而标记这条数据为已经过期。

当一个事务查询数据时,InnoDB会根据事务的启动时间和数据行的版本号来确定它所能看到的数据版本。如果查询的数据版本已经过期,那么这条数据就被视为不存在,从而避免了脏读的问题。

总之,InnoDB通过MVCC实现了高并发的数据库事务控制,保证了数据库的稳定性和可靠性。

以下是InnoDB如何实现MVCC的具体过程:

  1. InnoDB在每个数据行后面维护两个隐藏列,分别为创建时间和过期时间。
  2. 当一个事务开始时,InnoDB会为它创建一个新的视图,这个视图包含了当前所有活跃的事务和它们的版本号。
  3. 当一个事务插入或更新一条数据时,InnoDB会创建一个新的数据版本,并将新版本的创建时间设置为当前时间戳,同时将过期时间设置为无穷大。
  4. 当一个事务删除一条数据时,InnoDB会将这条数据的过期时间设置为当前时间戳,从而标记这条数据为已经过期。
  5. 当一个事务查询数据时,InnoDB会根据事务的启动时间和数据行的版本号来确定它所能看到的数据版本。如果查询的数据版本已经过期,那么这条数据就被视为不存在。
  6. 当一个事务提交时,InnoDB会将这个事务所创建的所有数据版本的过期时间设置为当前时间戳,从而将这些数据版本标记为已经过期。
  7. 当一个事务回滚时,InnoDB会将这个事务所创建的所有数据版本删除,并将这些数据版本从视图中移除。
  8. 当一个事务长时间占用一条数据行时,InnoDB会定期清理过期的数据版本,从而避免数据版本过多导致查询性能下降。

假设有两个事务T1和T2,T1在时间点t1开始,T2在时间点t2开始,它们操作同一行数据:

  1. 在时间点t1,T1开始执行,此时数据行的版本为V1,创建时间为t1,过期时间为无穷大。
  2. 在时间点t2,T2开始执行,此时数据行的版本为V1,创建时间为t1,过期时间为无穷大。
  3. 在时间点t3,T1更新了该数据行,此时数据行的版本为V2,创建时间为t3,过期时间为无穷大。
  4. 在时间点t4,T2查询该数据行,此时T2能够看到的数据版本是V1,因为T2的启动时间早于t3,所以它看不到T1更新的数据。
  5. 在时间点t5,T1提交了事务,此时T1所创建的所有数据版本的过期时间被设置为t5,从而将这些数据版本标记为已经过期。
  6. 在时间点t6,T2再次查询该数据行,此时T2能够看到的数据版本是V2,因为V1已经过期了,而V2是在T2启动之后创建的。

3、Redis 的持久化机制有哪些?说说各自的优缺点和应用场景?

Redis的持久化机制主要有两种: RDB(Redis DataBase)和 AOF(Append-Only File)。

  1. RDB

RDB是Redis的一种快照持久化方式,它会将Redis在某个时间点上的数据集合持久化到磁盘上的一个二进制文件中。RDB的优点是:

  • RDB文件非常紧凑,非常适合用于备份和灾难恢复。
  • RDB文件的生成和载入速度都比AOF快,适合大规模数据的恢复。

RDB的缺点是:

  • RDB是按照时间点快照的方式持久化数据,如果Redis在最后一次快照之后发生故障,那么最后一次快照之后的数据将会丢失。
  • RDB文件生成的频率比AOF低,如果Redis在两次快照之间发生故障,那么快照之后的数据将会丢失。

RDB适用于数据集较大,但是对数据完整性要求不高的场景,如备份和灾难恢复等。

  1. AOF

AOF是Redis的另一种持久化方式,它会将Redis的写命令追加到一个文件中,当Redis重启时,可以通过重新执行AOF文件中的写命令来恢复数据。

AOF的优点是:

  • AOF可以保证Redis的数据完整性,因为它是按照写命令来持久化数据的,即使Redis在最近一次写命令之后发生故障,也只会丢失最近一条写命令之后的数据。
  • AOF文件是一个普通文本文件,可以很容易地进行备份和恢复。

AOF的缺点是:

  • AOF文件通常比RDB文件大,因为它记录了所有的写命令。
  • AOF文件的载入速度比RDB慢,适合小规模数据的恢复。

AOF适用于数据完整性要求较高的场景,如金融、电信、电商等。文章来源地址https://www.toymoban.com/news/detail-428871.html

到了这里,关于面试题30天打卡-day15的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试题30天打卡-day19

    TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常用的传输层协议,两者的区别比较如下: TCP UDP 可靠性 可靠 不可靠 连接性 面向链接 无连接 报文 面向字节流 面向报文 效率 传输效率低 传输效率高 安全性 容易被攻击、安全性不如UDP 也会被攻击,相对TCP来说

    2024年02月02日
    浏览(27)
  • 面试题30天打卡-day12

    Redis 中的 String 是使用简单动态字符串(SDS)实现的。SDS 是一种可变长度的字符串实现,它可以动态地调整自己的大小,而不像 C 语言中的字符串一样需要预先分配固定大小的内存空间。 SDS 在 Redis 中的优点是: 空间预分配:SDS 内部的空间预分配策略避免了多次重分配的操

    2023年04月26日
    浏览(23)
  • 面试题30天打卡-day18

    单例是一种设计模式,应用该模式的类只会生成一个实例 ,单例模式保证了在程序的不同位置都可以且仅可以取到同一个对象实例,并提供一个访问它的全局访问点。 单列模式好处: 由于类只有一个实例,因此可以避免在多个地方创建多个实例,从而减少内存使用。 可以提

    2024年02月02日
    浏览(23)
  • 什么是比特币?它有哪些重要的特征?

    区块链 比特币是点对点形式的数字货币。其概念最早由中本聪在2009年提出,是依据特定算法,通过大量的计算而产生的,比特币使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保比特币在各个流通环节的安全性。我国

    2024年02月15日
    浏览(42)
  • Spark是什么?以及它有哪些应用场景呢?

    Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算, 拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS, 因此Spark能更好地适用于数据挖掘与机器学习等需

    2024年02月10日
    浏览(45)
  • 什么是Vue的Vetur插件?它有哪些功能

    在现代前端开发中,Vue.js已经成为了一个备受欢迎的JavaScript框架。随着Vue.js的流行,开发人员需要强大的工具来提高他们的生产力和Vue.js项目的质量。Vetur插件是一个为Vue.js开发者提供的强大工具,它不仅提供了丰富的功能,还能让你更轻松地编写和维护Vue.js应用程序。本文

    2024年02月06日
    浏览(33)
  • Facebook推出的Libra是什么?它有哪些特点?

    2019年6月18日,Facebook发布Libra白皮书。在西文中,Li-bra意为“天秤座”,同时又是“自由”的词根,Facebook选用这样一个词来命名自己的加密货币,可谓颇有深意。Libra区块链的软件是开源的,所有人都可以在此基础上开发构建产品,并通过其服务实现增值作用,而且创始人和

    2024年02月03日
    浏览(34)
  • 什么是Java集合框架,它有哪些常用的集合类?

    Java集合框架是一个非常实用的工具,它可以帮助我们更方便地处理数据。在Java中,集合类是一种特殊类型的对象,它们可以存储多个对象,并提供一些常用的操作方法,例如添加、删除、查找等。 Java集合框架它是一组用于处理数据结构的工具类,包括数组、列表、映射、堆

    2024年02月13日
    浏览(37)
  • 面试官:Zookeeper是什么,它有什么特性与使用场景?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟! 作为一名

    2024年02月02日
    浏览(30)
  • 为什么现代企业都在使用ERP系统 它有哪些优势

    随着科技的不断发展,企业管理方式也在不断地发生改变。在这个信息化的时代,企业要想取得成功,必须要善于利用先进的信息化技术工具。其中, ERP系统 是企业管理中不可或缺的重要工具。本文将探讨现代企业为什么会使用ERP系统,并介绍其主要优势。 一、ERP系统的定

    2023年04月12日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包