01 前言

辛苦奋斗两个月,秋招终于圆满收官,拿到了头条、字节、菜鸟、腾讯、网易的offer,这要多亏了意外得到的这份资料文档,这么多面试全都靠它了,哈哈~~有好东西还是要分享出来给大家,一起学习呀

Java核心进阶宝典:JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。

异步复制

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三次握手的前两次握手)。

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

资料领取方式:戳这里免费下载

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

数据库、Linux、缓存、消息中间件、源码等相关面试题。**

[外链图片转存中…(img-avzPpX7S-1624003915255)]

Java技术篇!沈阳java培训哪家好相关推荐

  1. Java 技术篇-用java自带的内存检测工具排查内存泄漏问题,查看java垃圾回收情况,监控java堆内存变化

    在 java 的 bin 文件夹下有个 jvisualvm.exe 工具,使用它可以检测到 java堆内存 的变化情况,借此可以来检测使用 java 的程序是否存在内存泄漏问题. 我们左边选择程序对应 ...

  2. 沈阳java培训哪家教育机构比较好,BAT大厂面试总结

    阿里巴巴一面 自我介绍这个就不说了,开头必问的 说一下StringBuilder 和 StringBuffer Spring bean加载,实例化的过程 Spring AOP源码看过吗 java内存模 ...

  3. 零基础参加java培训哪家机构好

    零基础想要学会java技术,那么参加java培训机构是非常明智的选择,为什么这么说呢?因为如果选择自学,那么不仅学到的技术杂乱无章,后期工作也会有很大阻碍,系统的学习就会好很多,那么如今零基础参加ja ...

  4. Java培训哪家机构好

    ​ java编程语言技术在职场的就业率是非常高的,近几年,越来越多的人都开始学习java技术,很多人都想知道Java培训哪家机构好?那么来看看下面小编的分析就知道了. ​ Java培训哪家机构好? 1 ...

  5. 福州java培训哪里好_南京Java培训哪家好?

    Java软件编程一直以来都是比较火热的计算机语言,因为Java的应用无处不在,面对众多编程语言,Java因应用领域的广泛从而脱颖而出,无论是移动平台还是pc,到处都是Java编程语言的范例,从而得到众 ...

  6. 福州java培训哪里好_南通java培训哪家好

    渡课IT教育成立于2006年,14年来,我们累计输送学员达 6000 +,其中南通地区输送50%,上海 40%,其他地区 10%,学员1年后的平均薪水达 9860 元:受到1000+用人单位的赞誉与支 ...

  7. 字节跳动最新开源!沈阳java培训哪个好

    一面(个人感觉回答得还不错) 1. 自我介绍 2. 说项目,项目问的非常深(本人提到之前做过的一篇关于FULL GC的问题定位和优化的项目以及一个多并发的项目) 2.1 对于自己产于过项目的系统定位是 ...

  8. Java 技术篇-java连接并操作数据库实例演示,执行查询、插入、更新和删除操作

    Java 操作数据库 第一章:Java 代码四个类实现 ① 项目结构展示 ② 数据库连接类 ③ 数据库查询类 ④ 数据库更新类 ⑤ 数据库主类 第二章:查询和更新操作实例演示 ① 查询操作演示 ② 更 ...

  9. Java 技术篇-IntelliJ IDEA 导入数据库驱动jar包实例演示

    本文介绍通过 File 的 Project Structure 来导入驱动. Java 操作数据库可以查看: Java 技术篇-java连接并操作数据库实例演示,执行查询.插入.更新和删除操作 点击 ...

最新文章

  1. fileZilla连接oracle服务器,传DMP文件
  2. freemarker中js里面取字符串,换行导致报错的解决办法
  3. 打开word或者office程序报错:Microsoft Visual C++ Runtime Library. Runtime Error!
  4. 蚂蚁森林快捷指令_利用快捷指令实现钉钉自动化打卡
  5. pytorch中resnet_ResNet代码详解
  6. 使用ELK堆栈进行日志聚合
  7. 淘票票首次公开小程序开发秘籍,踩过坑才知道怎么走!
  8. 串行通信接口:RS-232、RS-485和RS-422简述
  9. 09-Git-补丁patch操作
  10. 微信小商店设置服务器,微信小商店绑定运营者微信号步骤流程
  11. linux创建两块20G的磁盘,Linux 创建及扩展逻辑卷
  12. 华为手机照片如何出现时间地点天气,教你30秒,一学就会
  13. 【Python 实战基础】如何绘制直方图分析张三成绩数据
  14. 【Leetcode】周赛204 罗布乐思
  15. 一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米,第10次反弹多高
  16. 2.5D立体字体 html+css
  17. Windows7旗舰版性能优化
  18. 数据技术前沿趋势、TiDB 产品方向、真实场景 Demo… 丨PingCAP DevCon 2022 产品技术论坛预览
  19. AutoLISP 学习 (一)
  20. 学习理发去哪里_学美发去哪里学习好

热门文章

  1. buffalo助手函数
  2. 华为手机上有什么好用的备忘录软件?
  3. Java基础题(四)
  4. 怎么把cad转换成pdf格式
  5. 教你玩转Excel 2013(干货整理)
  6. 气动管道传输系统概述
  7. 如何引入先验知识——Embedding Symbolic Knowledge into Deep Networks——纯属个人思考,极有可能出错,自行取用
  8. 《C Primer Plus》学习笔记—第12章
  9. 微信小程序图片上传、多图拖拽排序功能
  10. JavaScrip(对象)