考点介绍:
数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。
本期分享的数据库之锁相关,分为试题、文章以及视频三部分。
答案详情解析和文章内容可点击下方链接即可查看!
一、考点题目
1.数据库死锁如何解决?
解答:死锁是指多个事务在同一资源上相互占用并请求锁定对方占用的资源而导致恶性循环的现象。当多个事务试图以不同顺序锁定资源时就可能会产生死锁,多个事务同时锁定同一个资源时也会产生死锁。为了解决死锁问题,数据库系统实现了各种死锁检测和死锁超时机制。越复杂的系统,例如InnoDB 存储引擎,越能检测到死锁的循环依赖,并立即返回一个错误……
2.数据库锁的类型有哪些?
解答: 按照锁的粒度可以将MySQL锁分为三种:MyISAM默认采用表级锁,InnoDB默认采用行级锁。从锁的类别上区别可以分为共享锁和排他锁。共享锁:共享锁又称读锁,简写为S锁,一个事务对一个数据对象加了S锁,可以对这个数据对象进行读取操作,但不能进行更新操作。并且在加锁期间其他事务只能对这个数据对象加S锁,不能加X锁……
3.MySQL中InnoDB引擎的行锁模式及其是如何实现的?
解答:行锁模式,在存在行锁和表锁的情况下,一个事务想对某个表加X锁时,需要先检查是否有其他事务对这个表加了锁或对这个表的某一行加了锁,对表的每一行都进行检测一次这是非常低效率的,为了解决这种问题,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁,两种意向锁都是表锁……
4.什么是数据库的乐观锁和悲观锁,如何实现?
解答:乐观锁:系统假设数据的更新在大多数时候是不会产生冲突的,所以数据库只在更新操作提交的时候对数据检测冲突,如果存在冲突,则数据更新失败。乐观锁实现方式:一般通过版本号和CAS算法实现。悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。通俗讲就是每次去拿数据的时候……
(答案点击下方链接查看哦)
二、考点文章
1.【校招VIP】java 关于锁常见面试题
synchronized作用于静态方法和非静态方法的区别。非静态方法:给对象加锁(可以理解为给这个对象的内存上锁,注意 只是这块内存,其他同类对象都会有各自的内存锁),这时候在其他一个以上线程中执行该对象的这个同步方法(注意:是该对象)就会产生互斥。静态方法:相当于在类上加锁(*.class……
2.【校招VIP】Java实现锁的几种方式
锁和同步,学习多线程避不开的两个问题,Java提供了synchronized关键字来同步方法和代码块,还提供了很多方便易用的并发工具类,例如:LockSupport、CyclicBarrier、CountDownLatch、Semaphore…有没有想过自己实现一个锁呢……
3.【校招VIP】Java中有哪些锁?
学习目标:Java中有哪些锁。学习产出:1、乐观锁 & 悲观锁,(1)两种锁只是一种概念(2)乐观锁:乐观锁认为一个线程去拿数据的时候不会有其他线程对数据进行更改,所以不会上锁……
三、考点视频
1.String、StringBuilder的区别
本题是面试常考题之一,但是很多同学没有真实理解或使用过相应的类,只靠记忆。在面试的时候,容易被问住。三个对象底层都是基于数组实现,数组就存在连续内存的扩张。即会产生性能和线程安全问题……
可以做个参考
不错,慢慢看