什么是 mvcc

mvcc,Multi-version Concurrency Control,即多版本并发控制。mvcc 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存

MVCC 在 mysql InnoDB 中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读

什么是当前读和快照读

1.当前读

阅读全文 »

查询日志尾部最后 10 行的日志

tail -n 10 test.log

查询 10 行之后的所有日志

tail -n +10 test.log

查询前 10 行

阅读全文 »

raft 算法是一种简单易懂的共识算法,它依靠状态机和主从同步的方式,在各个节点之间实现数据的一致性

raft 的两个核心要点:

1.选取主节点

2.同步数据

raft 算法在选取主节点的过程,也是通过多个节点之间的投票竞争

阅读全文 »

new Object()占多少个字节

  • mark word(8 字节)+klass(4 字节,默认开启指针压缩)+padding(4 字节) = 16 字节

  • mark word(8 字节)+klass(8 字节,不开启指针压缩) = 16 字节

User (int id,String name) User u = new User(1,”李四”)

mark word(8 字节)+klass(4 字节,默认开启指针压缩)+instance data int(4 字节) + 开启普通对象指针压缩后 String(4 字节)+padding(4 字节) = 24 字节

线程交替打印

阅读全文 »

1.线程间同步

为何要使用同步?

java 允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时,将会导致数据的不准确,相互之间产生冲突,因此可以加入同步锁以避免在该线程没有完成对数据的操作之前,数据被其他线程调用,从而保证了该变量的唯一性和准确性

同步的方式

1.同步方法或同步代码块:synchronized 关键字或 Lock 锁

阅读全文 »

mysql 客户端和服务端之间如何通信

1.通信类型:长连接或短连接(mysql 都支持,一般为长连接,放在连接池中)

查看连接:show full processlist;

查看连接参数:show global status like ‘Thread%’

mysql-interview-2021-03-26-13-30-5220210326133051

阅读全文 »

1.代理模式概念

为某个对象提供一个代理,以控制这个对象的访问;代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理

通过代理类,能有效控制对委托类对象的直接访问,也可以很好的隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性

2.静态代理和动态代理的区别

  • 静态代理要求委托类和代理类都实现同一个接口,代理对象的一个接口只服务于一种类型的对象

  • 静态代理中代理类在编译期就已经确定,而动态代理则是运行期间动态生成

  • 静态代理的效率相对来说更高一些,但是代码冗余大,一旦需要修改接口,代理类和委托类都需要修改

  • 动态代理依靠反射来生成代理类

阅读全文 »

1.什么是事务

事务是访问数据库的一个操作序列,数据库应用系统通过事务来完成对数据库的存取。事务的正确执行使得数据库从一个状态转换为另一个状态

事务有 ACID 的原则:

  • 原子性(atomicity):即不可分割,事务要么全部被执行,要么全部不被执行,如果事务中所有的子事务全部提交成功,则所有的数据库操作都被提交,数据库状态会发生变化;如果有子事务失败,则其他子事务的数据库操作全部被回滚,数据库回到执行事务之前的状态,不回发生状态变化

  • 一致性(consistency):事务的执行使数据库从一种正确状态转换为另一种正确状态

  • 隔离性(isolation):在事务正常提交之前,不允许把该事务对数据库数据的任何改变提供给其他事务,即在事务正确提交之前,它可能的结果对其他事务不可见

  • 持久性(durability):事务正确提交之后,其结果将永远保存在数据库中,即使在事务提交之后有了其他故障,事务的处理结果也会得到保存

2.并发下事务会产生的问题

阅读全文 »

1.数组和集合的区别

  • 数组能存放基础数据类型和对象,而集合存放的都是对象,集合无法存放基础数据类型.数组和集合存放的都是对象的引用地址
  • 数组容量固定无法动态改变,集合容量可以动态改变
  • 数组无法判断其中实际存放多少元素,length 只告诉了数组的容量,而集合的 size()可以确切知道元素的个数
  • 集合有多种实现方式和不同适用场景,不像数组仅采用顺序表方式
  • 集合以类的形式存在,具有继承,封装,多态等面向对象特性,通过简单的方法和属性即可以实现各种复杂操作,大大提高了软件开发的效率

2.java 集合分类

Collection 和 Map,是集合框架的接口

Collection 的子接口

阅读全文 »