事务

Spring面试题部分总结【慨念】

眉间皱痕 提交于 2020-02-29 11:25:54
什么是Spring? spring是一个企业级应用的开源开发框架,主要用来开发java应用,spring框架目标就是简化企业级应用开发。 Spring用到了那些设计模式? spring里面用到了大量的设计模式,这里举例比较有代表性的: 代理模式:在aop中使用比较多 单例模式:在spring配置文件定义的bean默认为单例模式 模板模式:用来解决代码重复问题 工厂模式:BeanFactory用来创建对象的实例。 使用Spring框架有什么好处? 1.轻量:spring是轻量的,基本版本大约2MB 2.控制反转;spring通过这个实现了松散耦合,对象给他们依赖,而不是创建对象 3.spring支持面向切面的编程,并且把业务逻辑和系统服务分开 4.spring容器包含管理应用中对象的声生命周期和配置 什么是Spring IOC容器? spring IOC 负责创建对象,管理对象(通过依赖注入),装配对象,配置对象,并管理对象的生命周期 IOC的优点是什么? IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,最小的代价和最小的侵入性使松散耦合得以实现 ApplicationContext通常实现的是什么? ClassPathXmlApplicationContext :此容器从一个xml文件中加载beans的定义。xml bean 配置文件的全路径名必须提供给他的构造函数。

数据库

我怕爱的太早我们不能终老 提交于 2020-02-29 11:08:53
一、 mysql 安装与介绍 (一) 概念介绍 数据库 : 存储数据的仓库。对数据进行存储,并且提供增、删、改、查的数据操作。 数据库建模:使用数据库来表达业务和业务的关系,数据建模成功与否决定了项目 的成败。 业务逻辑:实体业务之间的关系,比如 : 养殖场,猪和饲养员的关系。 事务: 事务:是作为一个单元的一组有序的数据库操作,如果组当中所有操作都成功,则事务执行成功,如果有一个操作执行失败,则事务执行失败,回滚操作。 事务的特性: 原子性:事务包含的所有操作全部成功,要么全部失败回滚;成功必须完全应 用到数据库,失败则不能不能对数据库产生影响。 一致性:事务执行前和执行后必须处于一致状态。 隔离性:当多用户并发访问数据库时候,数据库为每一个用户开启一个事务, 这个事务不被其他事务操作干扰,多个并发事务直接互相隔离。 持久性:一旦事务被提交了,那么数据库当中的数据改变是永久性的,即便数 据库系统发生故障,也不会丢失事务操作。 事务的回滚: 事务是用户定义的一组数据库操作。这些操作要么全做,要么全不做,回滚会自动是将该事务完成的操作撤销。 数据库提供的四种隔离等级: 如果我们不考虑隔离性,会导致 脏读 在一个事务处理的过程当中读取另一个没有提交的事务当中的数据,然后使用了数据。 A 向 B 转账 100 元, A 通知 B 查看账户, B 发现已经到账,转账操作过程当中

MySQL(一)

混江龙づ霸主 提交于 2020-02-29 10:50:17
1. MySQL 为什么使用MySQL 1、mysql性能卓越,服务稳定,很少出现异常宕机。 2、mysql开放源代码且无版权制约,自主性及使用成本低。 3、mysql历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助。 4、mysql软件体积小,安装使用简单,并且易于维护,安装及维护成本低。 5、mysql品牌口碑效应,使得企业无需考虑就直接用之,lamp,lnmp流行架构。 6、mysql支持多种操作系统,提供多种API接口,支持多种开发语言,特别对流行的PHP语言有很好的支持。 MySQL是什么 MySQL 是最流行的 关系型数据库管理系统 ,在WEB应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统) 应用 软件 之一。 关系型数据库 数据库中的 记录是有行有列的数据库 就是关系型数据库,与之相反的就是NoSQL数据库了。 数据库管理系统 指一种 操作和管理数据库 的 大型软件, 用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。 2. SQLyog使用 输入用户名、密码,点击连接按钮,进行访问MySQL数据库进行操作 在Query窗口中,输入SQL代码,选中要执行的SQL代码,按F8键运行

php -- PDO事务处理

泪湿孤枕 提交于 2020-02-29 09:33:28
事务处理流程 开启事务 PDO::beginTransaction 事务操作 所有的实务操作就是增删改 事务提交 PDO::commit:成功后提交数据 PDO::rollback:失败后回滚数据 <?php //PDO事务处理 //连接认证 $pdo = new PDO('mysql:host=localhost;dbname=project','root','root'); //1. 开启事务 $res = $pdo->beginTransaction(); //var_dump($res); //2. 事务处理(多条SQL语句执行) $sql = "update pro_student set s_age = 28 where s_id = 20"; $lines = $pdo->exec($sql); //var_dump($lines); $sql = "select * from pro_student where s_id = 20"; $stmt = $pdo->query($sql); //var_dump($stmt->fetch(PDO::FETCH_ASSOC)); //3. 提交事务 if($lines){ //更新成功 $pdo->commit(); }else{ //更新失败 echo '失败'; $pdo->rollback(); } 注意

MySQL insert性能优化

风流意气都作罢 提交于 2020-02-29 06:01:09
对于一些数据量较大的系统,面临的问题除了是查询效率低下,还有一个很重要的问题就是插入时间长。我们就有一个业务系统,每天的数据导入需要4-5个钟。这种费时的操作其实是很有风险的,假设程序出了问题,想重跑操作那是一件痛苦的事情。因此,提高 大数据 量系统的 MySQL insert效率是很有必要的。 经过对MySQL的测试,发现一些可以提高insert效率的方法,供大家参考参考。 1. 一条SQL语句插入多条数据。 常用的插入语句如: INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0); INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1); 修改成: INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);

spring管理事务管理1----------编程式(以下源码均为spring2.5.6)

岁酱吖の 提交于 2020-02-29 00:27:34
Spring事务策略,有一个接口"PlatformTransactionManager"。 /* * Copyright 2002-2008 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing

MySQL多表&事务

无人久伴 提交于 2020-02-28 14:05:41
MySQL多表&事务相关 1. 多表查询 2. 事务 3. DCL 多表查询: * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部'); # 创建员工表 CREATE TABLE emp ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10), gender CHAR(1), -- 性别 salary DOUBLE, -- 工资 join_date DATE, -- 入职日期 dept_id INT, FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外键,关联部门表(部门表的主键) ); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2013-02-24',1); INSERT INTO emp(NAME,gender,salary,join_date,dept_id)

JAVA中的事务,事务模块总结

不想你离开。 提交于 2020-02-28 13:12:42
大家好,这是一个为了梦想而保持学习的博客。这是第二篇文章,分享一下我对【事务】的理解​。文章的风格会一直保持问答的方式讲述,这是我个人喜欢的一种风格,也是相当于模拟面试。 什么是事务? 简单的来说,一条SQL执行或则几条SQL一起执行时,我们希望这个SQL要么执行成功后提交,要么执行失败后回滚,这是我们最直观的理解。在上面这句话中,就包含了事务的几个必要属性: "执行成功后提交",意味着持久性;"执行失败后回滚",意味着一致性;"要么成功,要么失败",意味着原子性 。他们的具体理解如下: 原子性(A) :事务要么执行成功,要么执行失败,没有第三种状态。 一致性(C) :事务执行的前后数据要一致,也就是说执行成功后数据的更改和预期一致,执行失败需要回滚到更改前数据。 隔离性( I ) :多个事务并发执行时,相互隔离,互不影响。 持久性(D ):事务提交后,对数据的更改是永久性的。也就说,哪怕数据库崩溃了,那些数据也是可以被恢复过来的。 事务是如何实现的? 事务的实现分为两个部分,一个是数据库底层的事务实现,另外一个是基于Spring去实现事务管理。这里主要是讲数据库(mysql-innodb)层面的实现。下面会围绕上面所说的ACID属性来讲mysql的底层实现。 redo日志与原子性、持久性的关系 redo日志是mysql-innodb底层的一个日志文件

SQL Server 2014里的性能提升

有些话、适合烂在心里 提交于 2020-02-28 09:11:48
在这篇文章里我想小结下SQL Server 2014引入各种惊艳性能提升!! 缓存池扩展(Buffer Pool Extensions) 缓存池扩展 的想法非常简单:把页文件存储在非常快的存储上,例如SSD硬盘,用来扩展缓存池。缓存池扩展来得非常方便,如果你不能给你的数据库服务器物理上增加更多的内存,可以考虑使用缓存池扩展。 资源调控器(Resource Governor) 资源调控器 首次是在SQL Server 2008里引入的,但那个时候还不是个成熟的技术,因为你不能在存储级别调控I/O操作,对于指定工作负荷组,你不能限制缓存池大小。在SQL Server 2014里这些都改变了,因为现在你可以压制I/O操作。限制缓冲池使用率还是不行,但谁会知道在SQL Server 2016里会怎样呢:)。 锁优先级(Lock Priorities) 或许你已经知道,在企业版本里,SQL Server提供你在线操作,或者我可以称它们为“近乎在线操作”。它们近乎是在线的,因为内部SQL Server还是要获取一些锁,这会导致阻塞情况。因此SQL Server 2014引入了 锁优先级 ,在那里如果有这样的情况发生,你可以控制SQL Server如何应对。 聚集列存储索引(Clustered Column Store Indexes) 在SQL Server 2014里引入的最热门的提升是

事务隔离级别的遇到的坑

喜欢而已 提交于 2020-02-28 07:32:20
有以下四种隔离级别 1.READ-UNCOMMITTED(读取未提交内容)级别 2.READ-COMMITTED(读取提交内容)级别 3.REPEATABLE-READ(可重读)级别 4.SERIERLIZED(串行化) 。 如果在事务管理器中未设置事务隔离级别,就默认使用数据库的隔离级别,oracle为read_commit(读已提交) public class test { @Autowired private Dao dao; @Transactional(value = "thunderJpaTransactionManager", rollbackFor = Exception.class) public boolean saveAndReadTest() { User user = new User(); user.setId(1); dao.save(user); User user = dao.findById(1); //因为处于同一个事务中,所以是可以实时获取的 ...... } } 同一事务中,是可以读取未提交的数据 那么什么时候是不同的事务呢? 答:A线程调用saveAndReadTest()方法,B线程调用saveAndReadTest()方法,虽然调用的是相同的方法,但是事务是不同的,所以B线程中无法读取A中未提交的数据 我们可以通过dao