JAVA面试

Mysql

全局锁
表级锁
表锁

表锁分为两类:表共享读锁(读锁)、表独占写锁(写锁)

读锁不会阻塞其他客户端的读,但是会阻塞写。写锁既会阻塞其他客户端的读,又会阻塞其他客户端的写。

元数据锁

元数据可以理解为表结构(表中数据类型、键值等);

当对表进行增删改查时、自动加入MDL读锁(此时防止替它线程修改表结构、从而导致读写不准确);当对表结构进行变更操作时、自动加入MDL写锁(此时要防止其它线程读到表结构)

注意,教程这儿错了,当对一张表进行查的时候,加MDL读锁SHARED_READ,当对一张表进行增删改的时候,加MDL写锁SHARED_WRITE,当对表结构进行变更操作,加排他锁EXCLUSIVE

意向锁

undo log和redo log的区别

MVCC

RC是读提交、每次查询都新建一个readreview;

其实不用记公式、找到事务开启前、已经提交的事务就行;

RR是可重复读、每次查询都用最开始的readview;

小结:

JAVA集合

多线程

线程和进程的区别

当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。

并发和并行的区别

创建线程的方式有哪些

小结:共有四种方式可以创建线程,分别是:

继承Thread类

实现runnable接口

实现Callable接口

线程池创建线程

使用runnable和callable都可以创建线程,它们有什么区别呢?

在启动线程的时候,可以使用run方法吗?run()和 start()有什么区别?

线程包括哪些状态、状态之间是如何变化的

阻塞状态就是当前线程没有拿到锁、要等待其它线程释放锁;

等待状态、就是当前线程获取到锁后、执行到里面的wait()、此时释放锁;其它线程获取锁、然后通知notify()、当当前线程再次获取到锁时、然后执行后续方法;

计时状态就是等待当前线程内的sleep(500)、时间过后继续执行;

新建T1、T2、T3三个线程,如何保证它们按顺序执行

notify()和notifyAll()有什么区别

notifyAll:唤醒所有wait的线程;notify:只随机唤醒一个wait线程

wait和sleep方法的不同

如何停止一个正在运行的线程

方法一:

线程1的方法会打印两次、然后线程关闭(线程1、主线程是并发的);

方法三:

synchronized关键字的底层原理

进阶回答

Monitor实现的锁属于重量级锁,你了解过锁升级吗?

重量级锁

对象怎么关联上的Monitor?

每个Java对象都可以关联一个Monitor 对象,如果使用synchronized给对象上锁(重量级)之后,该对象头的Mark Word 中就被设置指向Monitor对象的指针;

轻量级锁

在很多的情况下,在Java程序运行时,同步块中的代码都是不存在竞争的,不同的线程交替的执行同步块中的代码。这种情况下,用重量级锁是没必要的。因此VM引入了轻量级锁的概念。

就是我这个东西 一个线程执行 先获取锁、调用的方法还有一把锁、它们是相同的锁,它们不会发生竞争;但是如果外面还有线程也调用这个方法 就会产生竞争

同一个线程中的代码块不存在竞争、没必要用重量级锁(Monitor)、

偏向锁

只做一次CAS操作、把线程id记录、biased_lock设置1;后续不做CAS操作、只比对线程id即可;

小结:

谈谈JMM(java内存模型)

知道CAS吗

CSA:保证线程在无锁状态下对共享变量操作的原子性

就是自旋重置、它没有涉及到任何锁 也能保证原子性 主要还是通过自旋不断的判断 底层是基于unsafe;

谈谈volatile

用volatile修饰共享变量,能够防止编译器等优化发生,让一个线程对共享变量的修改对另一个线程可见;(针对JIT自动优化的情况;其余简单情况、不加volatile、比如这里线程2也能读到stop=true)

指令重排序问题:

简单说就是JVM为了对代码进行优化提高性能会在不影响结果的情况下把代码执行顺序改变,但多线程就可能会出现结果不对的问题;

volatile使用技巧:

.写变量让volatile修饰的变量的在代码最后位置

.读变量让volatile修饰的变量的在代码最开始位置

小结:

什么是AQS

多个线程共同去抢这个资源是如何保证原子性的呢?

CAS保证原子性;CSA:保证线程在无锁状态下对共享变量操作的原子性

AQS是公平锁吗,还是非公平锁?

可实现公平锁也可实现非公平锁;

小结:

ReentrantLock的实现原理

JAVA基础

相关推荐
小陈工3 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
0xDevNull7 小时前
MySQL数据冷热分离详解
后端·mysql
科技小花7 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸7 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain7 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希8 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神8 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员8 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java8 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿8 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb