什么是事务
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
特性
事务是恢复和并发控制的基本单位。
事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
什么是线程安全?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。 线程安全问题都是由全局变量及静态变量引起的。
若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。
线程和进程的区别
1、相同点:
(a)二者都具有ID,一组寄存器,状态,优先级以及所要遵循的调度策略。
(b) 每个进程都有一个进程控制块,线程也拥有一个线程控制块。
(c) 线程和子进程共享父进程中的资源;线程和子进程独立于它们的父进程,竞争使用处理器资源;线程和子进程的创建者可以在线程和子进程上实行某些控制,比如,创建者可以取消、挂起、继续和修改线程和子进程的优先级;线程和子进程可以改变其属性并创建新的资源。
2、不同点:
(a) 线程是进程的一部分, 一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。
(b) 启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。
(c)系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。而一个线程的数据可以直接为其他线程所用,这不仅快捷,而且方便。
(d) 与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。
(e) 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。
还有一些可以参考Jackie发表的日志《
线程,进程和程序的简单比较》。
接口和虚拟类的区别
区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。
区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。
区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。
区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。
如下给出两者的简单对比表格。
|
接口
|
抽象类
|
多继承
|
支持
|
不支持
|
类型限制
|
没有
|
有,只能是引用类型
|
方法实现
|
继承类型中必须给出方法实现
|
继承类中可以不给出
|
扩展性
|
比较麻烦
|
相对比较灵活
|
多层继承
|
比较麻烦,需要借助虚函数
|
比较灵活
|
分享到:
相关推荐
MLDN魔乐科技_直击面试2—Java WEB面试题 本次讲解的知识点: 1 jsp 和 servlet在面试中出现的题目 2 MVC 设计模式 (新得到的资源)
MLDN魔乐科技_直击面试2—Java WEB面试题 本次讲解的知识点: 1 jsp 和 servlet在面试中出现的题目 2 MVC 设计模式 (新得到的资源)
HR面试2.aac
UC优视Android逆向工程师的面试题,有兴趣的可以看一下。
零跑汽车一面 ...2. **面试经验**: - **自我介绍**:准备一个简洁明了的自我介绍,突出你的专业背景和为什么适合这个岗位。 - **项目介绍**:选择一个你最有成就感的项目详细介绍,包括你的角色、项目难点、
应届大学毕业生面试应答 涉世之初面试以实在取胜 毕业生面试四忌 着装与举止: 初次求职面试的适宜装扮 精心选择面试着装 求职面试中修饰与衣着 面试服装大忌 如何看待求职时的穿着 面试中的举止如何才算得当 ...
java 面试java 面试java 面试java 面试java 面试
2. **集合框架**:Java集合框架是面试的重点,包括List(ArrayList、LinkedList、Vector)、Set(HashSet、TreeSet)和Map(HashMap、TreeMap、Hashtable)。了解它们的特点、区别及应用场景,如线程安全、遍历方式...
面试鸭一个干净的面试刷题网站!专业面试刷题网站,助你成为面试达人!支持自由组卷、在线刷题、校招社招斩获大厂offer,求职必备! React + 云开发 / Node.js 全栈项目,包含网站前台 + 管理员后台的完整前后端代码...
用于2021年HCIE数通3.0版本面试。考面试之前需要通过笔试和...放平心态调整好,2021年面试的题库都在面试题库中,从面试题库里面抽取三道,希望大家能够平常多练习,2-3月备考通过IE很稳,助力大家一次通过HCIE面试。
JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...
网络安全面试 网络安全面试2 网络安全, 面试试题 题库
知识星球JavaGuide面试大全,包括大厂面试题,万字总结java面试题和答案(1),Java多线程,Java基础,java虚拟机,北京-百度-Java中级,北京-京东-Java中级,操作系统,杭州-阿里云-Java中级,计算机网络,数据结构与算法,数据库...
云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备...
JSD面试笔试题汇总JSD面试笔试题汇总JSD面试笔试题汇总JSD面试笔试题汇总JSD面试笔试题汇总JSD面试笔试题汇总JSD面试笔试题汇总JSD面试笔试题汇总JSD面试笔试题汇总JSD面试笔试题汇总JSD面试笔试题汇总JSD面试笔试题...
2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...
JAVA面试资料JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA...
Java架构面试资料合集Spring面试专题及答案MySQL面试Redis面试资料: BAT面试常问80题 Dubbo服务框架面试专题及答案整理文档 java筑基(基础)面试专题系列(一):Tomcat+Mysql+设计模式 java筑基(基础)面试专题...
2. **面向对象编程**:Java是一种面向对象的语言,面试中会关注类、对象、封装、继承、多态等概念。深入理解类与对象的关系,以及如何通过接口实现多态性,是展示编程思维的重要环节。 3. **集合框架**:Java集合...