next

面试命中率90%的点——MySQL锁

醉酒当歌 提交于 2021-02-11 20:31:24
一、对MySQL的锁的了解 当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制。 就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用。 二、隔离级别与锁的关系 在Read Uncommitted级别下,读取数据不需要加共享锁,这样就不会跟被修改的数据上的排他锁冲突 在Read Committed级别下,读操作需要加共享锁,但是在语句执行完以后释放共享锁。 在Repeatable Read级别下,读操作需要加共享锁,但是在事务提交之前并不释放共享锁,也就是必须等待事务执行完毕以后才释放共享锁。 SERIALIZABLE 是限制性最强的隔离级别,因为该级别锁定整个范围的键,并一直持有锁,直到事务完成。 三、按照锁的粒度分数据库锁有哪些? 锁机制与InnoDB锁算法 在关系型数据库中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。 MyISAM和InnoDB存储引擎使用的锁: MyISAM采用表级锁(table-level locking)。 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁。 行级锁,表级锁和页级锁对比

Python的垃圾回收机制

*爱你&永不变心* 提交于 2021-02-11 18:57:20
总的来说, Python的垃圾回收机制是以引用计数为主,同时为了解决循环引用的问题以及提升效率,采取标记-清除和分代收集为辅助办法。 1. 引用计数 引用计数的核心思想是:每一个对象都有一个计数器 ob_refcnt 用来标记这个对象被引用的次数(比如被1个变量引用则为1,被2个变量引用则为2)。当引用次数为0时,系统会马上回收这个对象。 优点: 简单 实时性 缺点: 维护引用计数消耗资源 循环引用 详细介绍: 1.1 引用计数原理 首先介绍Python的对象是如何获取内存空间的。 下面举一个简单的例子 Class Node(object): def __init__ (self,val): self.value = val n1 = Node( " ABC " ) 当创建对象时Python立即向操作系统请求内存。(Python实际上实现了一套自己的内存分配系统,在操作系统堆之上提供了一个抽象层。为了简单,不展开说了) 假设我们已经创建了三个Python Node对象: 在内部,创建一个对象时,Python总是在对象的C结构体里保存一个整数,称为 引用数 。当对象刚被创建时,Python将这个值设置为1: 值为1说明分别有个一个指针指向或是引用这三个对象。假如我们现在创建一个新的Node实例,JKL: 与之前一样,Python设置JKL的引用数为1。然而

SpringBoot入门(一)——开箱即用

六月ゝ 毕业季﹏ 提交于 2021-02-11 18:55:55
本文来自 网易云社区 Spring Boot是什么 从根本上来讲Spring Boot就是一些库的集合,是一个基于“约定优于配置”的原则,快速搭建应用的框架。本质上依然Spring,在这之上帮我们省去了很多样板化的配置,使得我们能够更专注于应用程序功能的开发。 Spring Boot精要 SpringBoot将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心 自动配置:针对常见的应用功能,SpringBoot自动提供相关的配置,减少用于样板化配置的时间 起步依赖:指定基于功能的依赖,用更大粒度的依赖来降低依赖的复杂度 命令行界面:这是SpringBoot的可选特性,借此你只需要写代码就能完成完整的应用程序,无需传统项目构建 Actuator:让你能够深入运行中的SpringBoot应用程序一探究竟 从Spring开始 为了体现SpringBoot的优势,我们先来看看如果使用Spring开发一个简单的Hello World Web应用程序,我们需要做的事情: 一个项目结构,其中有一个包含必要依赖的Maven或者Gradle构件文件,最起码要有Spring MVC和Servlet API这些依赖 一个web.xml文件(或者一个WebApplicationInitializer实现),其中声明了Spring的DispatcherServlet

2018CCPC吉林赛区(重现赛)部分题解

一个人想着一个人 提交于 2021-02-11 15:50:29
##The Fool 题目链接 ###Problem Description The Fool is numbered 0 – the number of unlimited potential –and therefore does not have a specific place in the sequence of the Tarot cards. The Fool can be placed either at the beginning of the Major Arcana or at the end. The Major Arcana is often considered as the Fool’s journey through life and as such, he is ever present and therefore needs no number. Given n ∈ N+, print the parity of ∑i=1N [ni], where [x] = max a (a∈Z,a≤x) ###Input The first line of the input contains one integer T ≤ 100, denoting the number of testcases. Then T testcases follow. In

linux内核调试+qemu+eclipse【转】

橙三吉。 提交于 2021-02-11 07:04:50
本文转载自: https://blog.csdn.net/WANG__RONGWEI/article/details/54922727 一、调试环境: 在ubuntu16.04下,在虚拟机里边运行的ubuntu,装32位的运行较快,选择较新的ubuntu版本是因为安装qemu、eclipse比较简单,在安装软件上节约时间。 二、安装的软件 1----安装qemu相关软件:sudo apt-get install kvm qemu libvirt-bin virtinst virt-manager virt-viewer 创建一个kvm目录,以后会用到:sudo mkdir /opt/kvm 2----安装eclipse-cdt软件,当然不是安装jdk,eclipse cdt是一个非常强大的c/c++ ide:sudo apt install eclipse-cdt。 三、下载linux内核,建eclipse工程 在ubuntu16.04版本下,最好选择跟他本身差不多的内核版本--linux-4.4。 具体可参考: http://blog.csdn.net/ustc_dylan/article/details/5991490 ,描述比较详细,只不过如果我们选择的是较新的eclipse版本,有一点差别。 1---编译内核:内核可选择放在home目录下,好处就是以后运行eclipse

Java Iterator迭代器

自作多情 提交于 2021-02-11 02:40:36
迭代器(Iterator)   迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。   Java中的Iterator功能比较简单,并且只能单向移动:   (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。   (2) 使用next()获得序列中的下一个元素。   (3) 使用hasNext()检查序列中是否还有元素。   (4) 使用remove()将迭代器新返回的元素删除。   Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。 迭代器应用: list l = new ArrayList(); l.add( "aa" ); l.add( "bb" ); l.add( "cc" ); for (Iterator iter = l.iterator(); iter.hasNext();) { String str = (String)iter.next(); System

SSH客户端神器之 MobaXterm

a 夏天 提交于 2021-02-11 02:30:14
SSH客户端神器之 MobaXterm 由于需要连接远程 Linux 服务器,早期使用过 Putty , SecureCRT ,后面主要使用 Xshell 。 自从接触了 MobaXterm 之后,个人感觉比 Xshell 更好用,堪称 SSH客户端 的 神器 啊! MobaXterm 和 Xshell 的关系,就像 IntelliJ IDEA 和 Eclipse 的关系一样,功能更加强大,效果更加炫酷。 接下来,介绍 MobaXterm 的下载、安装、简单使用,以及其强大的功能亮点(优点)。 MobaXterm 下载 如果是个人使用,下载家庭版(免费的)就可以满足基本工作需求;如果想要使用更丰富的功能,可以使用专业版(收费的)。 个人使用的是家庭版 v12.3,已经足够满足工作需求了。 1、以下是MobaXterm家庭版的下载地址(当前 最新版本 是 v12.4 ): https://mobaxterm.mobatek.net/download-home-edition.html MobaXterm 安装 下载的是一个zip格式的压缩文件,如下: 解压后,双击 msi 文件进行安装 以下是安装界面(安装一路选择“next”即可): 安装完毕后,即可在桌面上看到 MobaXterm 的桌面快捷图标,如下图: MobaXterm 简单使用 1、双击桌面上的 MobaXterm 图标

Java的集合、Iterator迭代器

江枫思渺然 提交于 2021-02-11 02:24:18
集合 集合是java中提供的一种容器,可以用来存储多个数据。而且集合的长度是可变的。集合中存储的元素必须是引用类型数据(ArrayList) ArrayList类发现它继承了抽象类AbstractList同时实现接口List,而List接口又继承了Collection接口。Collection接口为最顶层集合接口 List接口允许重复的有序排列,Set接口不允许重复并且是无序排列 Collection基本用法 public class Demo { public static void main(String[] args) { Collection<String> col = new ArrayList<String>(); col.add("你好"); col.add("双十一"); col.add("买买买"); Object obj = col.remove("1"); //移除col集合中的1并返回一个布尔值 System.out.println(obj); System.out.println(col.contains("双十一")); //如果col包含此元素,返回一个布尔值 ArrayList<String> list = (ArrayList<String>) col; //向下转型 for (int i = 0; i < list.size(); i++) {

MySQL死锁系列-常见加锁场景分析

核能气质少年 提交于 2021-02-10 16:56:26
在上一篇文章 《锁的类型以及加锁原理》 主要总结了 MySQL 锁的类型和模式以及基本的加锁原理,今天我们就从原理走向实战,分析常见 SQL 语句的加锁场景。了解了这几种场景,相信小伙伴们也能举一反三,灵活地分析真实开发过程中遇到的加锁问题。 如下图所示, 数据库的隔离等级,SQL 语句和当前数据库数据会共同影响该条 SQL 执行时数据库生成的锁模式,锁类型和锁数量 。 下面,我们会首先讲解一下隔离等级、不同 SQL 语句 和 当前数据库数据对生成锁影响的基本规则,然后再依次具体 SQL 的加锁场景。 隔离等级对加锁的影响 MySQL 的隔离等级对加锁有影响,所以 在分析具体加锁场景时,首先要确定当前的隔离等级 。 读未提交(Read Uncommitted 后续简称 RU):可以读到未提交的读,基本上不会使用该隔离等级,所以暂时忽略。 读已提交(Read Committed 后续简称 RC):存在幻读问题, 对当前读获取的数据加记录锁 。 可重复读(Repeatable Read 后续简称 RR):不存在幻读问题,对当前读获取的数据加记录锁,同时对涉及的范围加间隙锁,防止新的数据插入,导致幻读。 序列化(Serializable):从 MVCC 并发控制退化到基于锁的并发控制,不存在快照读,都是当前读,并发效率急剧下降,不建议使用。 这里说明一下, RC 总是读取记录的最新版本

MySQL 加锁和死锁解析

让人想犯罪 __ 提交于 2021-02-10 16:32:36
##产生死锁的必要条件 多个并发事务(2个或者以上) 每个事物都持有了锁(或者是已经在等待锁) 每个事务都需要再继续持有锁(为了完成事务逻辑,还必须更新更多的行) 事物之间产生加锁的循环等待,形成死锁 常规锁模式 LOCK_S(读锁,共享锁) LOCK_X(写锁,排它锁) 锁的属性 LOCK _REC_NOT_GAP(锁记录) LOCK_GAP(锁记录前的GAP) LOCK_ORDINARY(同时锁记录+记录前的GAP,Next key锁) LOCK_INSERT_INTETION(插入意向锁) 锁组合(属性+模式) 可以任意组合 锁冲突矩阵 锁是加在那里的? 根据主键查找-锁加在主键上 如 begin;select * from tt_copy where id=4 for update; 加锁情况 index PRIMARY of table test . tt_copy trx id 1101588 lock_mode X locks rec but not gap 根据普通索引查找-锁加在普通索引和主键上 如 begin;select * from tt_copy force index(idx_a) where a=4 for update; 加锁情况 index idx_a of table test . tt_copy trx id 1101590 lock_mode