JUC
1. 并发基础1. 多线程实现1. 实现方法分类 继承 Thread 类,重写 run 方法 实现 Runnable 接口,实现 run 方法 2.两种方法对比 实现 runnable 接口更好 Java 只支持单继承,继承 Thread 类导致程序拓展性不好 解耦,将创建线程和线程任务调度分离了 两种方法本质区别对比 继承 Thread 类是通过重写 Thread 类的方法 实现 Runnable 是在 Thread 类中调用 Runnable 实现类的 run 方法 思考题:同时使用两种方法实现多线程 123456789101112131415public class BothRunnableThread { public static void main(String[] args) { new Thread(() -> { //实现Runnable接口的方法 System.out.println("我来自Runnable"); ...
Mysql技术内幕-第一章
1. 定义数据库和实例概念 数据库**: **操作系统或者是内存中数据库类型文件的集合。 实例: 数据库实例是真正操作数据库的对象。通过数据库实例完成对数据库文件的增删改查。 MySQL 是一个单进程多线程的数据库。MySQL 数据库实例在系统上表现的就是一个进程。 2. MySQL 体系结构1. 结构图 2. MySQL 组成部分1. 8 大组成部分 连接池 管理服务和工具组件 Sql 接口组件 查询分析器 优化器 缓存 插件式存储引擎 物理文件 存储引擎是基于表的,而不是数据库。 3. MySQL 存储引擎1. InnoDB 存储引擎(最常用的 5.5.8 后默认存储引擎)1. 特点 行锁设计 支持外键 类似于 Oracle 的非锁定读 2. 主要功能 InnoDB 使用多版本并发控制(MVCC)来实现高并发性。 实现了 4 种隔离级别。默认的为 REPEATABLE 级别 使用next-key locking 策略来避免幻读现象 提供了插入缓冲(insert buffer)、二次写、自适应哈希索引、预读等高性能和高可用功能 数据的存储的采用了聚集的方式,表的数据 ...
Mysql-锁
1. 锁的分类:根据加锁范围: 全局锁 表级锁 行锁 2. 全局锁全局读锁命令 全局锁就是对整个数据库实例加锁,Mysql 提供了一个加全局读锁的命令。可以让整个数据库处于只读状态。 导致数据的增删改、建表修改表语句、事务的提交语句失效。 1Flush tables with read lock 场景:全库的逻辑备份(**也可以开启可重复读事务级别来进行备份**) 另一种方式是使用 mysqldump 工具使用参数-single-transaction 进行数据库备份。前提:数据库中所有的表支持可重复读。 场景:用户买课和买课后的余额。不加锁导致两个表的数据前后不一致。 3. 表级锁 两种表锁 表锁 元数据锁 表锁 作用:锁定表只能进行读或读和写操作。不允许操作其他表。(**处理并发的常用方式**) 1lock tables t1 read, t2 write; 只能对 t1 表进行读,t2 表进行读和写。直到执行unlock tables之前不允许对其他表进行读写操作。 MDL ( meatadata lock) 作用:保证读写的正确性。防止 DDL(加字 ...
LeetCode-11-盛水最多的容器
题目题目链接 一、解题思路这题其实就是要求那两个点的面积最大。有两种解题思路。 1. 暴力破解通过两层循环遍历任意两点的所有组合情况,然后求出两点的面积值,然后取最大值。这种方法是最容易想到的。但是当我们使用这种方法提交上去时,会出现超时错误。不要问我为什么!!!懂得都懂。所以我们要通过一种要想出一种时间复杂度更低的方法。 2.双指针法首先双层循环时肯定不行的,所以我们就来试试单层循环。单层循环我们要获取最大的面积我们首先要确定如何遍历。这点很关键!!!我们不能再向之前双层循环从头遍历到尾。单层循环我们需要通过从两头开始遍历。那这就产生了一种限制。我们每次往中间移的话长度都是再变小!!!然后我们又不希望要获取面积的慢慢随着长度的变小而变小,所以我们需要让我们的高度变高。而高度是由较小的高度来决定,所以我们要让高度变大,只需要让高度较小的一番往中间移。当两条线重合或者超过的时候就遍历完了。 二、方法代码12345678910111213141516171819202122232425262728293031323334353637383940//暴力破解 public int maxAr ...







