前言

redis简单来说 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。所以在面试中我们经常可以看到redis的身影,今天给大家带来一道redis的面试真题以及解析,后面会给大家分享今年来redis常考试的一些真题。

异步复制

MySQL的复制默认是异步的,主从复制至少需要两个MYSQL服务,这些MySQL服务可以分布在不同的服务器上,也可以在同一台服务器上。

MySQL主从异步复制是最常见的复制场景。数据的完整性依赖于主库BINLOG的不丢失,只要主库的BINLOG不丢失,那么就算主库宕机了,我们还可以通过BINLOG把丢失的部分数据通过手工同步到从库上去。

注意:主库宕机的情况下,DBA可以通过mysqlbinlog工具手工访问主库binlog,抽取缺失的日志并同步到从库上去;也可以通过配置高可用MHA架构来自动抽取缺失的数据补全从库,或者启用Global Transaction Identifiers(GTID)来自动抽取缺失binlog到从库。

MySQL在BINLOG中记录事务(或SQL语句),也就是说对于支持事务的的引擎(例如InnoDB)来说,每个事务提交时都需要写BINLOG;对于不支持事务的引擎(例如MyISAM)来说,每个SQL语句执行完成时,都需要些BINLOG。为了保证Binlog的安全,MySQL引入sync_binlog参数来控制BINLOG刷新到磁盘的频率。

show variables like 'sync_binlog';

  • 在默认情况下,sync_binlog=1,表示事务提交之前,MySQL都需要先把BINLOG刷新到磁盘,这样的话,即使出现数据库主机操作系统崩溃或者主机突然掉电的情况,系统最多损失prepared状态的事务;设置sync_binlog=1,尽可能保证数据安全。
  • sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制文件缓存的刷新。
  • sync_binlog=N,如果N不等于0或者1,刷新方式同sync_binlog=1类似,只不过此时会延长刷新频率至N次binlog提交组之后。

以上是传统的异步复制,在MySQL5.7的并行复制技术(也称多线程复制)到来之前,为人诟病最多的还是效率问题,slave延迟是一个顽疾,虽然之前已经出现了schema级别的并行复制,但实际效果并不好。

多线程复制

在MySQL5.7中,带来了全新的多线程复制技术,解决了当master同一个schema下的数据发生了变更,从库不能并发应用的问题,同时也真正将binlog组提交的优势充分发挥出来,保障了从库并发应用Relay Log的能力。

在MySQL8.0中,多线程复制又进行了技术更新,引入了writeset的概念,而在之前的版本中,如果主库的同一个会话顺序执行多个不同相关对象的事务,例如,先执行了Update A表的数据,又执行了Update B表的数据,那么BINLOG在复制到从库后,这两个事务是不能并行执行的,writeset的到来,突破了这个限制。

增强半同步复制

前面介绍的复制是异步操作,主库和从库的数据之间难免会存在一定的延迟,这样存在一个隐患:当在主库上写入一个事务并提交成功,而从库尚未得到主库的BINLOG日志时,主库由于磁盘损坏、内存故障、断电等原因意外宕机,导致主库上该事务BINLOG丢失,此时从库就会损失这个事务,从而造成主从不一致。

为了解决这个问题,从MySQL5.5开始,引入了半同步复制,此时的技术暂且称之为传统的半同步复制,因该技术发展到MySQL5.7后,已经演变为增强半同步复制(也成为无损复制)。在异步复制时,主库执行Commit提交操作并写入BINLOG日志后即可成功返回客户端,无需等待BINLOG日志传送给从库,如图所示。

而半同步复制时,为了保证主库上的每一个BINLOG事务都能够被可靠地复制到从库上,主库在每次事务成功提交时,并不及时反馈给前端应用用户,而是等待至少一个从库(详见参数rpl_semi_sync_master_wait_for_slave_count)也接收到BINLOG事务并成功写入中继日志后,主库才返回Commit操作成功给客户端(不管是传统的半同步复制,还是增强的半同步复制,目的都是一样的,只不过两种方式有一个席位地方不同,将在下面说明)

半同步复制保证了事务成功提交后,至少有两份日志记录,一份在主库的BINLOG日志上,另一份在至少一个从库的中继日志Relay Log上,从而更进一步保证了数据的完整性。

在传统的半同步复制中,主库写数据到BINLOG,且执行Commit操作后,会一直等待从库的ACK,即从库写入Relay Log后,并将数据落盘,返回给主库消息,通知主库可以返回前端应用操作成功,这样会出现一个问题,就是实际上主库已经将该事务Commit到了事务引擎层,应用已经可以可以看到数据发生了变化,只是在等待返回而已,如果此时主库宕机,有可能从库还没能写入Relay Log,就会发生主从库不一致。增强半同步复制就是为了解决这个问题,做了微调,即主库写数据到BINLOG后,就开始等待从库的应答ACK,直到至少一个从库写入Relay Log后,并将数据落盘,然后返回给主库消息,通知主库可以执行Commit操作,然后主库开始提交到事务引擎层,应用此时可以看到数据发生了变化。增强半同步复制的大致流程如下图所示。

半同步复制模式下,假如在传送BINLOG日志到从库时,从库宕机或者网络延迟,导致BINLOG并没有即使地传送到从库上,此时主库上的事务会等待一段时间(时间长短由参数rpl_semi_sync_master_timeout设置的毫秒数决定),如果BINLOG在这段时间内都无法成功发送到从库上,则MySQL自动调整复制为异步模式,事务正常返回提交结果给客户端。

半同步复制很大程度上取决于主从库之间的网络情况,往返时延RTT越小决定了从库的实时性越好。通俗地说,主从库之间的网络越快,从库约实时。

注意:往返时延RTT(Round-Trip Time)在计算机网络中是一个重要的性能指标,它表示从发送端发送数据开始到发送端接收到接收端的确认,总共经历的时长(这里可能有点拗口,我们可以理解为TCP三次握手的前两次握手)。

最后

Java架构进阶面试及知识点文档笔记

这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理

Java分布式高级面试问题解析文档

其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!

互联网Java程序员面试必备问题解析及文档学习笔记

Java架构进阶视频解析合集
问题解析及文档学习笔记**

[外链图片转存中…(img-AY49pj9Q-1652419239687)]

Java架构进阶视频解析合集

javaspringboot面试,挑战华为社招相关推荐

  1. 挑战华为社招:java开发面试问题大全及答案大全

    基本知识 1.学会分析源码 程序员每天都和代码打交道.经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码.但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码 ...

  2. 挑战华为社招:掌握数据库其实很容易

    前言 我的一个朋友,开发四年了,没跳过槽,四年时间也不过是从最开始的10K涨到了15K,经常和我吐槽工资低.去年8月份左右开始了他"骑驴找马"的行动,从各种地方找学习资料.刷面试题 ...

  3. 挑战华为社招:智慧树java程序设计答案

    一.阿里 (会员中台) 1. Java 重写hashcode()是否需要重写equals(),不重写会有什么后果 2. 并发 自旋锁和阻塞锁的区别 公平锁和非公平锁的区别 jdk中哪种数据结构或工具可 ...

  4. 挑战华为社招:2021Java高级面试题汇总解答

    前言 再过一周,马上将迎来新的一年,希望大家在2021年"牛气冲天,牛年大吉",一起迎接春暖花开之时. 金三银四马上就到了,很多粉丝朋友私信希望我出一篇面试专题或者分享面试相关的笔 ...

  5. 换工作记(五) --------- 华为社招2008面试经历

    =================== 特此声明:本文仅代表个人观点,不涉及商业意图和利益 ================== 这一次的面试经历准备采用倒序的方式来讲述. Result: 笔试,技术 ...

  6. 【面试招聘】社招如何拿到心仪公司的offer

    作者:被包养的程序猿,360广告算法工程师,负责排序相关工程和算法研究. 最近一段时间更新的比较慢,也是因为最近这边工作上也有一些变动,目前大致也确定了下来,也是打算做一个总结,希望能帮助到同样在社招 ...

  7. 面试归来——梳理社招面试以及浅述对程序员职业生涯的看法

    原谅我是一个后知后觉的人,已经在新的岗位工作了两个月,才写这篇文章. 本文会先讲述博主一个月的面试经历,梳理一下技术面试,浅述关于程序员职业生涯的一些看法. 从创业到再就业 大概4个月以前,终止创业已 ...

  8. 华为社招嵌入式软件面试_华为OD社招面试(技术二面完)--总结复盘

    一.华为OD简介: 首先来解释一下什么是华为OD面试,OD一般是指的是华为的"外包"公司,比如像德科这种.网上其实有很多人都吐槽过这个招聘模式,因为招进去的人不直接是华为内部的人, ...

  9. 华为社招嵌入式软件面试_华为嵌入式软件开发面试经验

    面试过程: 本人是国内211,985高校的CS专业小硕,成绩还算凑合.去年十月份就感到临近毕业的焦虑,心里着急投了一堆简历,结果大部分都石沉大海.有几家公司给了反应,面试时才发现自己知识的薄弱.然后我 ...

  10. 5年测试经验华为社招:半月3次面试,成功拿到Offer

    背景经历 当时我工作近5年,明显感觉到了瓶颈期.具体来说,感觉自己用过很多测试框架和测试工具.做过一些测试开发.也有过高并发的性能测试,但是从技术深度上感觉不足,到后期时做事也没有明显挑战,完全适应了 ...

最新文章

  1. ats 5.3.2中的header-rewrite插件调研
  2. 本地Windows远程桌面连接阿里云Ubuntu服务器
  3. ASP.NET服务器控件的生命周期分析
  4. 我在OSC的第一篇博文
  5. pip 安装 tensorflow_TensorFlow 学习笔记2-1:ubuntu下安装pip3amp;tensorflowamp;opencv
  6. maven依赖decoder_引入依赖maven打包报错
  7. c ++ 函数的esp指针_在C ++中通过指针访问成员函数
  8. javaweb基础(40)_jdbc框架
  9. 网络时代:我只是一个用户
  10. Python学习笔记:求一组数据的众数
  11. Android开发工具之DDMS
  12. 无线电波传播:频段、方式、衰落|瑞利分布、瑞利衰落非复制的解释
  13. 词法分析,语法分析,语义分析
  14. 牛逼!40行Python代码一键把html网页保存为pdf,太方便了!
  15. Bash命令光标移动和编辑
  16. 2022爱分析・工业互联网实践报告
  17. qbittorrent 等待_qBittorrent下载BT电影教程
  18. TCHAR数据类型介绍
  19. 迷宫问题 深度优先搜索【c++】
  20. 90后浙理工硕士论文登Nature,毕业却考取公务员!网友:宇宙尽头是考公

热门文章

  1. python里的str.format_详解Python中的str.format方法
  2. 暴走英雄坛怎么领服务器维护奖励,暴走英雄坛琅嬛福地奖励在哪里?福地奖励获取方法一览...
  3. 小米路由器连电信路由器,dhcp服务无响应
  4. 目标检测经典论文——YOLOv3论文翻译:YOLOv3: An Incremental Improvement(YOLOv3:增量式的改进)
  5. edg驱动 wobot通过ttyUSB0串口通信
  6. MongoDB学习总结四(详细记录使用MongoTemplate操作MongoDB数据库)
  7. 一年之计在于春丨看, 农田里的科技范儿
  8. 设置swiper中的高度
  9. PHP修改图片颜色(生成彩色二维码)
  10. 金蝶新建生产领料单,单据编号不能自动填写