面试问题整理

分布式事务

所谓事务,就是提供一种机制,将一个活动涉及的所有操作纳入到一个不可分割的执行单元,只要其中任何一个操作执行失败,都将导致整个事务的回滚。简单的说,就是一种”要不什么都不做,要么做全套“机制。

数据库本地事务:
ACID原则
A:Atomicity 原子性
C:Consistency 一致性
I:Isolation 隔离性
D:Durability 持久性
而事务的ACID是通过InnoDB日志和锁来保证。事务的隔离性是通过数据库锁的机制实现的,持久性通过redo log(重做日志)来实现,原子性和一致性通过Undo log来实现。

所谓分布式事务,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。

CAP原则
C(数据强一致性)
A(数据可用性)
P(分区容错性)
三者不可兼得,一般是CP系统或AP系统

宝宝树面试
1、thread sleep()方法与wait()方法的区别
1️⃣sleep方法属于Thread类,而wait属于Object类
2️⃣sleep()方法导致了程序暂停执行指定的时间,让出 cpu 该其他线程,但是他的监控状态依然 保持者,当指定的时间到了又会自动恢复运行状态。
3️⃣在调用 sleep()方法的过程中,线程不会释放对象锁。而当调用 wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此
对象调用 notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。

2、volatile关键字能否杜绝并发
不能,加锁机制(即同步机制)既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性,原因是声明为volatile的简单变量如果当前值与该变量以前的值相关,那么volatile关键字不起作用,也就是说如下的表达式都不是原子操作:“count++”、“count = count+1”。
http://www.importnew.com/23535.html
3、如何优雅的终止一个线程
使用volatile标志位
https://blog.csdn.net/zhangliangzi/article/details/52484302
4、分库分表实现分页查询
5、当两个缓存value比较大,没有超过memcached、redis的value大小范围,且有频繁的读写操作,选用哪个存储

金山云面试
1、redis各种存储结构的性能考虑(什么情况下用相应的存储结构)
2、给定一个数,转换成二进制后,数里面1的个数,从节约时间复杂度方面考虑,怎么做
https://www.cnblogs.com/yihujiu/p/6632320.html
3、数据库事务,当写锁锁定数据后,能否读取该数,在更新过程中,读取的是写入之前的数据还是写入后的数据
https://blog.csdn.net/qq_41376740/article/details/81835713

延伸:数据的脏读、幻读、可重复读
脏读(read uncommitted):在两个事务中,一个事务读到了另一个事务未提交的数据(即事务A读取到事务B修改数据,当事务B未提交数据到数据库或出错时,事务A再进行读取发现数据已修改。例如:将对象放入缓存未同步到数据库,读取数据从缓存中进行读取)。
幻读(READ COMMIT):一个事务读取到另一个事务提交的数据(主要表现为某行数据修改–即事务A在操作前先对数据进行读取,事务B对某行数据进行修改,事务A再次读取数据发现数据已不一致)
可重复读(REPEATABLE READ):在事务提交前读取到的值始终为同一个,但是如果表中出现数据的增加和删除则读取的结果可能会有偏差(例如:事务A统计大于某行大于100数据,第一次统计为10个,此时事务B向表中插入数据,再次进行统计发现已经不是10个)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值