mysql事务和锁
MySQL事务概念事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。
MySQL数据库中事务默认自动提交
123456789101112事务提交的两种方式: 自动提交: mysql就是自动提交的 一条DML(增删改)语句会自动提交一次事务。 手动提交: Oracle 数据库默认是手动提交事务 需要先开启事务,再提交修改事务的默认提交方式: 查看事务的默认提交方式:SELECT @@autocommit; -- 1 代表自动提交 0 代表手动提交 修改默认提交方式: set @@autocommit = 0;
事务的四大特征(ACID)1. 原子性(Atomicity)事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。
回滚可以用回滚日志(Undo Log)来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。
2. 一致性(Consistency)数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的。
3. 隔 ...
mysql的in和exist区别
in确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。
exists指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。
区别1、运用情况不同
sql中in适用于子查询得出的结果集记录较少,主查询中的表较大且又有索引的表,。sql中exist适用于外层的主查询记录较少,子查询中的表大,又有索引的时候。
2、驱动顺序不同
IN是先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。exists是以外层表为驱动表,先被访问。
3、执行次数不同。
IN 语句:只执行一次,确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。
EXISTS语句:执行次数根据表的长度而定。指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就 ...
mysql必知必会
第3章 使用MySQL123456789101112use crashcourse; #指定使用的数据库show databases; # 了解数据库,返回数据库列表show tables; # 返回数据库内表的列表show columns from customers; # 查看customers表中的所有列设置describe customers; # 同上,查看customers表中的所有列设置show status; # 用于显示广泛的服务器状态信息show create database crashcourse; #查看创建数据库crashcourse的mysql代码语句show create table productnotes; #查看创建表productnotes表的mysql代码语句show grants; #显示授予用户(所有用户或特定用户)的安全权限# show errors; # 显示服务器错误内容# show warnings; #显示服务器警告内容
第4章 检索数据1234567891011121314151617181920212223# sel ...
操作系统-常见面试题
常见面试题1. 什么是操作系统操作系统是运行在计算机.上最重要的一种软件,它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层。
通常情况下,计算机上会运行着许多应用程序,他们都需要对内存和CPU进行交互,操作系统就是为了保证这些访问和交互能够准确无误的进行。
2. 操作系统的主要目的是什么操作系统是-种软件,它的主要目的有三种
管理计算机资源,这些资源包括CPU、内存、磁盘驱动器、打印机等。
提供一种图形界面,就像我们前面描述的那样,它提供了用户和计算机之间的桥梁。
为其他软件提供服务,操作系统与软件进行交互,以便为其分配运行所需的任何必要资源。
3. 什么是按需分页在操作系统中,进程是以页为单位加载到内存中的,按需分页是一种虛拟内存的管理方式。在使用请求分页的系统中,只有在尝试访问页面所在的磁盘并且该须面尚未在内存中时,也就发生了缺页异常,操作系统才会将磁盘页面复制到内存中。
4. 多处理系统的优势随着处理器的不断增加,我们的计算机系统由单机系统变为了多处理系统,多处理系统的吞吐量比较高,多处理系统拥有多个并行的处理器,这些处理器共享时钟、内存、总 ...
操作系统-设备管理
设备管理一、I/O系统1.1设备分类按设备的共享属性分类:
独占设备:在一段时间内只允许一个用户进程使用的设备。
共享设备:在一段时间内允许多个进程使用的设备。
虚拟设备:指通过虚拟技术将一台独占设备改造成若干台逻辑设备,供若干个用户进程同时使用。通常把这种经过虚拟技术处理后的设备称为虚拟设备。
按信息交换单位分类:
块设备:处理信息的基本单位是字符块。一般块的大小为512B~4KB,如磁盘、磁带等是块设备。
字符设备:处理信息的基本单位是字符。如键盘、打印机和显示器是字符设备。
1.2 I/O控制方式I/O控制方式发展过程中始终贯穿的宗旨是尽量减少主机对I/O控制的干预。常用的输入/输出控制方式有下述几种:
程序直接控制方式
中断控制方式
直接存储器访问控制方式
通道控制方式
1.2.1 程序直接控制方式早期计算机系统中无中断机构,设备控制采用程序直接控制方式。程序直接控制方式也称为轮询方式。即定期对设备状态进行查询,然后做出相应的处理。
以输入为例,其过程为:程序直接控制方式特点:工作方式简单,但CPU的利用率低。
1.2.2 中断控制方式现代计算机系统中对设备的控制广 ...
操作系统-内存管理
内存管理一、内存的连续分配1.1 单一连续分配方式内存在此方式下分为系统区和用户区
系统区仅提供给操作系统使用,通常在低地址部分
用户区是为用户提供的、除系统区之外的内存空间
优点:简单、无外部碎片,可以釆用覆盖技术,不需要额外的技术支持
缺点:只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低
1.2 固定分区分配固定分区分配是最简单的一种多道程序存储管理方式。
将用户内存空间划分为若干个固定大小的区域,每个分区只装入一道作业。
当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环。
划分分区方法:
分区大小相等
分区大小不等
存在的问题:
程序可能太大而放不进任何一个分区中,这时用户不得不使用覆盖技术来使用内存空间
主存利用率低,当程序小于固定分区大小时,也占用了一个完整的内存分区空间,产生内部碎片
1.3 动态分区分配又称为可变分区分配,这种分区方法不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统中分区的大小和数目是可变的。
动态分区分配算法
首次适应(F ...
操作系统-进程管理
进程管理一、进程1.1 进程定义进程是对正在运行中程序的一种抽象,操作系统所有的内容都是围绕进程展开。
在许多多道程序系统中,CPU会在进程间快速切换,使每个程序运行几十或者几百毫秒。然而,严格意义来说,在某一个瞬间,CPU只能运行一个进程,然而我们如果把时间定位为1秒内的话,它可能运行多个进程。这样就会让我们产生并行的错觉。有时候人们说的伪并行(pseudoparallelism)就是这种情况,以此来区分多处理器系统(该系统由两个或多个CPU来共享同一个物理内存)
进程实体=程序段+相关数据段+PCB(进程控制块)
进程是资源分配的基本单位。
进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。
下图显示了 4 个程序创建了 4 个进程,这 4 个进程可以并发地执行。
在一个给定的时间只有一个线程在运行
1.2 进程的执行1.2.1 顺序执行
顺序性。 每个操作都必须在前一个操作结束后才能开始
封闭性。 程序一旦开始运行,其运行结果不会受到外界因素的影响
可再现性。 程序运行结果仅 ...
操作系统-认识
操作系统
认识操作系统程序员不会直接和这些硬件打交道,而且每位程序员不可能会掌握所有计算机系统的细节,这样我们就不用再编写代码了,所以在硬件的基础之.上,计算机安装了一层软件,这层软件能够通过响应用户输入的指令达到控制硬件的效果,从而满足用户需求,这种软件称之为操作系统,它的任务就是为用户程序提供一个更好、更简单、更清晰的计算机模型。
面对一般用户,通过(操作命令)方式控制操作系统;面对编程人员,通过(系统调用)控制。
这是一个操作系统的简化图,最下面的是硬件,,在硬件之上是软件。大部分计算机有两种运行模式:内核态 和用户态,软件中最基础的部分是操作系统,它运行在内核态中, 内核态也称为管态和核心态,它们都是操作系统的运行状态,只不过是不同的叫法而已。操作系统具有硬件的访问权,可以执行机器能够运行的任何指令。软件的其余部分运行在用户态下。
用户接口程序(shell或者GUI) 处于用户态中,并且它们位于用户态的最低层,允许用户运行其他程序,例如Web浏览器、电子邮件阅读器、音乐播放器等。而且,越靠近用户态的应用程序越容易编写,如果你不喜欢某个电子邮件阅读器你可以重新写一个或者换 ...
java集合-HashMap
HashMap数组+链表 (jdk7及之前)
数组+链表+红黑树 (jdk 8)
JDK7实现原理1234HashMap<String, String> map = new HashMap<>();map.put("K1", "V1");map.put("K2", "V2");map.put("K3", "V3");
新建一个 HashMap,默认大小为 16;
插入 <K1,V1> 键值对,先计算 K1 的 hashCode 为 115,使用除留余数法得到所在的桶下标 115%16=3。
插入 <K2,V2> 键值对,先计算 K2 的 hashCode 为 118,使用除留余数法得到所在的桶下标 118%16=6。
插入 <K3,V3> 键值对,先计算 K3 的 hashCode 为 118,使用除留余数法得到所在的桶下标 118%16=6,在用equals比较是否相同
不相同,插在 <K2,V ...
java集合-ConcurrentHashMap
ConcurrentHashMap1.7如果对于hashmap中添加元素,如果加锁,会导致如果2个元素放的不是同一个位置上也会进行阻塞。
存储结构
123ConcurrentHashMap Segment[] table; 每一个中table包含多个个HashEntry[] tab
123456static final class HashEntry<K,V> { //与hashmap相似 final int hash; final K key; volatile V value; volatile HashEntry<K,V> next;}
ConcurrentHashMap 和 HashMap 实现上类似,最主要的差别是 ConcurrentHashMap 采用了分段锁(Segment),每个分段锁维护着几个桶(HashEntry),多个线程可以同时访问不同分段锁上的桶,从而使其并发度更高(并发度就是 Segment 的个数)。Segment 继承自 ReentrantLock。
构造方法与HashM ...