计算机基础知识复习7.29

mysql主从复制

mysql的主从复制依赖于binlog,也就是记录mysql上的所有变化并以二进制形式保存在磁盘上。复制的过程就是将binlog中的数据从主库传输到从库中。

mysql集群主从复制的三个阶段:

写入binlog:主库写binlog日志,提交事务,并更新本地存储数据

同步binlog:把binlog复制到所有从库中,每个从库把binlog写到暂存日志中

回放binlog:回放binlog,并更新存储引擎中的数据

具体详细过程:

mysql主库在收到客户端提交事务的请求之后,会先写入binlog,再提交事务,更新存储引擎中的数据,事务提交完成后,返回给客户端操作成功的响应。

从库会创建一个专门的I/O线程,连接住哭的log dump线程,来接收主库的binlog日志,再把binlog日志写入relay log的中继日志里,再返回给主库复制成功的响应

从库会创建一个用于回放binlog的线程,去读relay log中继日志,然后回放binlog更新存储引擎中的数据,最终实现主从一致。

在完成主从复制之后,就可以在写数据时只写主库,在读数据时只读从库,这样即使写请求会锁表或者锁记录,也不会影响读请求的执行

InnoDB 为什么选择 B+ 树,优势有哪些

B+树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引又存记录的B树,B+树的非叶子节点可以存放更多的索引,因此B+树可以比B树更矮胖,查询底层节点的磁盘I/O次数会更少

B+树有大量的冗余节点,这样使得删除一个节点的时候,可以直接从叶子节点中删除,甚至可以不动非叶子节点,这样删除非常快

B+树的插入也是相同,有冗余节点,插入可能存在节点的分裂(如果节点饱和),但是最多只涉及树的一条路径。而且B+树会自动平衡。

B+树在范围查询时,所有叶子节点间还有一个双向链表进行连接,这种设计对范围查询很有帮助

介绍一下JMM内存模型?介绍JMM的三个特性

原子性:一次操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么都不执行

可见性:当一个线程对共享变量进行修改,那么另外的线程都是立即可以看到修改后的最新值

有序性:代码执行的顺序和编写代码的顺序保持一致

双重检查的单例模式怎么用Volatile保证指令重排

对于singleton=new Singleton()

该语句非原子操作,实际是三个步骤

1.给singleton分配内存

2.调用singleton的构造函数来初始化成员变量

3.将给singleton对象指向分配的内存空间(此时singleton才不为null)

当发生指令重排时,线程1执行顺序为1,3,2,当线程1执行完步骤3,线程2发现单例对象不为空,就直接返回单例对象,实际上单例对象并没有初始化完全

Object中有哪些方法

hashCode()返回对象的哈希码

equals()判断两个对象的内存地址是否相等

toString()返回类的名字实例的哈希码的16进制的字符串

notify()唤醒等待的线程

wait()暂停线程的执行

finalize()实例被垃圾回收器回收的时候触发的操作

线程创建的常见方式

继承Thread类并重写run方法

实现Runnable接口并实现run方法

实现Callable接口并实现call方法

参考资源:

Java 面试指南 | JavaGuide

小林coding

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值