0
点赞
收藏
分享

微信扫一扫

java基础题库含答案,2021大厂Java面试集合

前言

2021春季社招正在火热招聘当中,很多人都挂在了技术知识掌握还是不够广,不够深,甚至连一些基础的问题都只能模模糊糊的回答出来。你说,这跳槽不是跳了个寂寞吗?

其实,根本原因还是对于自己的技术栈掌握的不够系统化。从目前招聘要求来看,夯实的基础是一个程序员必备的技术点,除此之外,对于技术栈的广度以及深度你更需要去探索,形成一份自己的技术路线X-Mind。

近日,经过一朋友的透露,Alibaba自爆了一份“Java核心架构笔记”,里面记载的知识点非常齐全,看完之后才知道,差距真的不止一点点!

这份笔记按照开发经验对程序员进行分层,可以很清晰的知道在哪个阶段你应该掌握哪些技术栈,下面我会介绍到这份笔记主要涵盖的知识点,由于篇幅限制,仅只能展示部分截图内容,完整的内容可以在文末下载。

java基础题库含答案,2021大厂Java面试集合

锁种类

Mysql中锁的分类按照不同类型的划分可以分成不同的锁,按照「锁的粒度」划分可以分成:「表锁、页锁、行锁」;按照「使用的方式」划分可以分为:「共享锁」「排它锁」;按照思想的划分:「乐观锁」「悲观锁」

下面我们对着这几种划分的锁进行详细的解说和介绍,在了解设计者设计锁的概念的同时,也能深入的理解设计者的设计思想。

「表锁」是粒度最大的锁,开销小,加锁快,不会出现死锁,但是由于粒度太大,因此造成锁的冲突几率大,并发性能低。

Mysql中「MyISAM储存引擎就支持表锁」,MyISAM的表锁模式有两种:「表共享读锁」「表独占写锁」

当一个线程获取到MyISAM表的读锁的时候,会阻塞其他用户对该表的写操作,但是不会阻塞其它用户对该用户的读操作。

相反的,当一个线程获取到MyISAM表的写锁的时候,就会阻塞其它用户的读写操作对其它的线程具有排它性。

「页锁」的粒度是介于行锁和表锁之间的一种锁,因为页锁是在BDB中支持的一种锁机制,也很少没人提及和使用,所以这里制作概述,不做详解。

「行锁」是粒度最小的锁机制,行锁的加锁开销性能大,加锁慢,并且会出现死锁,但是行锁的锁冲突的几率低,并发性能高。

行锁是InnoDB默认的支持的锁机制,MyISAM不支持行锁,这个也是InnoDB和MyISAM的区别之一。

行锁在使用的方式上可以划分为:「共享读锁(S锁)「和」排它写锁(X锁)」

当一个事务对Mysql中的一条数据行加上了S锁,当前事务不能修改该行数据只能执行度操作,其他事务只能对该行数据加S锁不能加X锁。

若是一个事务对一行数据加了X锁,该事物能够对该行数据执行读和写操作,其它事务不能对该行数据加任何的锁,既不能读也不能写。

「悲观锁和乐观锁是在很多框架都存在的一种思想,不要狭义地认为它们是某一种框架的锁机制」

数据库管理系统中为了控制并发,保证在多个事务执行时的数据一致性以及事务的隔离性,使用悲观锁和乐观锁来解决并发场景下的问题。

Mysql中「悲观锁的实现是基于Mysql自身的锁机制实现,而乐观锁需要程序员自己去实现的锁机制」,最常见的乐观锁实现就锁机制是「使用版本号实现」

乐观锁设计思想的在CAS的运用也是比较经典,之前我写过一篇关于CAS的文章,大家感兴趣的可以参考这一篇[]。

从上面的介绍中说了每一种锁的概念,但是很难说哪一种锁就是最好的,锁没有最好的,只有哪种业务场景最适合哪种锁,具体业务具体分析。

下面我们就具体基于Mysql的存储引擎详细的分析每一种锁在存储引擎中的运用和实现。

MyISAM

MyISAM中默认支持的表级锁有两种:「共享读锁」「独占写锁」。表级锁在MyISAM和InnoDB的存储引擎中都支持,但是InnoDB默认支持的是行锁。

Mysql中平时读写操作都是隐式的进行加锁和解锁操作,Mysql已经自动帮我们实现加锁和解锁操作了,若是想要测试锁机制,我们就要显示的自己控制锁机制。

Mysql中可以通过以下sql来显示的在事务中显式的进行加锁和解锁操作

《一线大厂Java面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源

Java开发优秀开源项目:

  • ali1024.coding.net/public/P7/Java/git

  • github.com/spring-projects

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”

举报

相关推荐

0 条评论