数据结构真题回忆(初试)一、填空题:一个三维数组,要你求a[10][5][3]这种的存储地址。二、简答题:递归过程栈的变化比较各排序的优缺点、Dijkstra求最短路径过程三、大题1.用链表实现集合的交并补运算, 好像是求(AUB)-C。2.迷宫问题,四个方向可走,找出口。3.第二题由树的前序和中序序列来生成一颗树。4.村村通, 就是一个最小生成树的问题。复试:机试+笔试+面试笔试真题:一、计算机组成原理1.什么是控制器,控制器的输入信号(大概是)。2.存储器的位、字扩展。3.文件系统的文件逻辑结构和物理结构,管理大文件,200GB。4.解释指令的结构和组成。二、操作系统(操作系统出现填空题, 将之前的大题改成填空题,内容多分值小)1.磁盘调度,最短寻道时间优先2.页面调度,应该是 LRU3.进程的四个特性4.论述题, 操作系统如何提高CPU的利用率。5.进程的同步互斥, 一个读,一个移动,一个输出。三、离散数学 (离散今年也出现了填空题)1.集合的运算 {0,{0}} - 0 = ——2.平面图和边数的关系还是什么的。3.谓词逻辑病人喜欢医生,病人都不喜欢庸医结论是医生都不是庸医。(符号化,并推理)4.等价关系的证明iff我还以为是印刷错了... 没想到是当且仅当。4、5这两种关系的证明。5.偏序关系的证明6.有一个比赛四个人参加,三个人每人说了两句话,其中每人都只说对了一半,问最后真正的排名。免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用,不涉及商业盈利目的。如涉及版权问题,请联系本站管理员予以更改或删除。
计算机专业考研分析,哪些211院校值得选择?专业技能很重要!考研我们人生中的一大考试,但是在紧张的考试过后最令人头疼的还是选择院校和选择专业,常常有这样一句话:“选择大于努力”,所以在选专业和院校的重要问题上,也会随之影响你的就业之路。期间注意的事项会非常多,有着不同的学科、不同的专业,最后所参考的因素也是不同的,注重点也是不一样的。那么今天咱们就来说说计算机专业考研,到底该如何现在进行选择院校。说起计算机必然是属于理工科的学科,所以这个时候按照大的方向看,首先可以考虑专业维度。专业维度的意思就是说,可以选择一个看似学校整体实力都不是很强,但是这个学校的这个专业确实相当有竞争力和挑战性的,也就是说这个专业在此学校是重中之重的专业,并且不管从师资力量还是教学设备或者是发展看,都是最好的。但是需要注意的是:虽然理工科专业不用特别看重地域,但是还是建议你选择的学校所在地和你毕业之后三到五年的职业规划地匹配,只有这样,才能把学校的影响力、导师的能量、校友的资源发挥到最大。那么到底该如果选择学校呢?以计算机这个大类来说,南方比较好的211类院校还是不少的,比如南京理工大学、河海大学、苏州大学、南京航空航天大学、上海大学、武汉理工大学、暨南大学等;不过苏大、上大、武汉理工的报名人数还是非常火的,报考人数逐年激增。除了这些211类的学校,其实还有一些学校,虽然是双非,但是性价比还是比较高的,比如杭州电子科技大学、重庆邮电大学、浙江工业大学、南京邮电大学。这几个学校的计算机相关专业在全国排名都是不错的,像杭电都能够排名到全国前二十。所以,如果你在乎的是211学校名头,那你可以选择那些211类学校;如果你比较在乎专业技能的话,实际上你也可以选择我说的后面那几个学校,并且要知道专业技能是十分重要的,有一定的实践功底能力,才可以真正上手做事情。根据每个人的实际情况进行选择,相信你的未来也可以发光发热,走在人生前端。那么你认为对于计算机专业的同学来说,哪所学校更为合适呢?欢迎分享你的看法,让我们共同进步!
首先,当前计算机专业的毕业设计有很多题目可以选择,要想找一些相对简单的题目,可以重点考虑那些参考资料相对比较多的题目,但是要想取得较好的成绩,或者是想有一些创新,还需要重点关注一下近些年来的各种新技术,比如大数据、人工智能领域就有很多题目可以选择。对于本科生的毕业设计来说,虽然没有像研究生那样有明确的创新要求,但是要是能够把新技术与行业领域相结合,那么在毕业设计的过程中会得到更多的收获。当前大数据在技术体系上已经趋于成熟了,所以计算机专业的本科生,在做毕业设计的过程中,可以重点关注一下大数据相关的题目。大数据的行业应用场景非常多,比如大数据与金融、教育、医疗、装备制造等诸多领域都有大量的结合点,而且也有很多成熟的案例可以参加,所以可以结合自身的知识结构和发展规划,来选择一个适合自己的题目方向。在选择具体的题目时,还需要结合一下学校和导师的资源整合情况,比如在财经类大学就读,可以重点关注一下金融相关方向。本科生在完成毕业设计的过程中,除了要重视理论知识的学习之外,还需要重视实践能力的提升,尤其要重视程序设计能力的提升,比如当前大数据开发岗位的人才需求量就相对比较大,借助于毕业设计,也可以重点提升一下自身的就业竞争力,这对于还没有拿到offer的同学来说就更为重要了。我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以私信我!
大家好,恭喜大家过五关斩六将,通过初试进入复试。应海文考研老师的邀请,给大家做下研究生入学考试计算机复试阶段的经验分享,希望能够对大家有所帮助。复试中,由于项目比较多,它包括体检、专业课笔试、英语口语考试、专业课面试等环节,再加上有的同学可能已经习惯卷面答题,面试经验比较少,很容易出现紧张影响发挥的问题。因此,对于进入复试的同学来说,切不可大意,要继续扎扎实实掌握好每一个注意事项,走好复试每一个流程。一、复试流程1. 体检只有体检合格的同学才能录取,体检不合格不能录取,所以大家一定要按照学校规定进行体检。2. 复试笔试复试笔试是复试中的一场简单考试,只涉及专业课考试,其具体的参考书目可以在报考学校研究生招生官网查询。3. 英语考试英语考试因学校而异,如果报考学校明确提出有英语考试,那么在综合面试时,对英语方面的考察,比重会有所降低;如果复试没有英语笔试考试,那么在综合面试中必会涉及英文考察。计算机专业的学生应需要多记忆一些计算机相关的专业术语和略缩词。4. 机试若报考院校的计算机专业较好,一般都会安排机试,机试的目的就是刷人。所以,如果报考学校有机试,必须从初试结束后开始刷题,多写算法。如果复试中没有提到机试,则需要多加练习手写代码的能力。5. 综合面试综合面试是在复试过程中起决定性作用的环节。如果机试题目全部回答出来,那么面试可以相对其他考生有一定优势;如果机试完成的不好,则综合面试会比较麻烦。二、复试笔试以下所列参数书目皆是计算机相关专业应该熟悉的专业教材。如果有学生没有学过以上的部分教材,建议在学有余力的情况下,将其通读一遍。这些教材的内容除了在复试笔试中可能出现外,在复试的综合面试也很有可能会出现。需要注意,复试笔试最重要的是切记出现空白试题,即使不会也要尽可能把相关的内容写上。表-计算机类和软件类同学的参考书目三、复试机试机试需要提前准备,最好每天都刷几道题保持手感,对于参加 ACM 的同学来说,机试一般不会太难,如果是一般同学,就需要自己课下多练习,可以将牛客网的剑指 offer 题目全部做一遍,机试应该问题不大。机试语言的选择:机试语言不宜选择 C 语言之类的面向过程的语言,虽然 C语言是一门较好的练习编程的语言,但是由于其内置的函数库太少在机试的过程中会比较吃亏,选一门高级语言,如 Java 或 python 这种内置函数或类型较多的编程语言,在机试中比较占优势。例如:如果需要排序算法,使用 C 语言的可能需要自己写一个排序算法,但是使用 Java 就可以使用内置的排序函数,并且 java的排序函数还是快速排序。四、综合面试综合面试一般是复试中的最后一项。如果是本校的学生,综合面试会非常占有优势,如果是外校且学校不好的学生,就需要非常认真的对待,非常认真的准备。首先,综合面试需要准备一份个人简历和一份自我介绍。个人简历包含个人的重要信息(邮箱和电话)、初试分数、本科获得的奖励、本科的社会实践。对于初试分数而言,总分高就填写,总分低但数学或专业课分高也可以填写,各科都不占优势建议不写。本科所获得的奖励以市级和市级以上的为主,实在没有奖励可以写上校级的奖励。另外,如果有获得数学建模或挑战杯奖励的学生,建议把关于这两个比赛的材料和相关技术都好好复习一下,导师很有可能会问到。本科的社会实践以项目经验为主,但是凡事写到简历上的项目经验都需要自己把项目的相关技术好好看一下,以防导师提问。导师在看到你的个人简历后,极有可能会从你的项目经验中提问。自我介绍(包括中文和英文),虽然有可能会用不到,但每个学生都需要认真准备的。中文的自我介绍要在一两分钟内将自己的特长表达出来,有重要的项目经验或获奖经历最好都提到。英文的自我介绍,可以在网上找一个相关介绍内容,背的滚瓜烂熟,若条件允许可以找专业人士帮助纠正发音。综合面试中的导师提问环节一般是比较难的环节,导师的目的是摸清学生的水平,所以问题可能由易到难,或由难到易。在这一过程中,如果不会回答导师的问题,就直接告诉老师,切记不要随意瞎说。若导师对你进行压力测试的话,你需要保持良好的心态,如果在过程中你暴露出了性格方面的劣势,被刷掉的几率会大很多。压力测试的应对方法是不卑不亢,能对答如流自然好,不能对答如流也要给导师回应,千万不要使小性子,或低头不做声。最后祝大家复试顺利!谢谢!本文海文考研独家转载注明来源 违者必究
计算机专业,现在已经成为很多考研学子比较青睐选择的专业!但是,大家是否清楚该专业有3大分类呢?接下来,北京文都考研网小编就给2020考研者详细告知下,供考生参考。计算机专业有3大分类:一、与理工类交叉1.通信工程专业择校推荐:电子科技大学、北京邮电大学、西安电子科技大学、国防科技大学、北京交通大学2.数学与应用数学专业择校推荐:北京大学、清华大学、浙江大学、上海交通大学、南京大学、东南大学3.电子信息工程专业择校推荐:电子科技大学、西安电子科技大学、东南大学、清华大学、北京大学、北京邮电大学4.自动化专业择校推荐:哈尔滨工业大学、清华大学、北京航空航天大学、北京理工大学、东北大学、哈尔滨工程大学5.信息与计算科学专业择校推荐:清华大学、南京大学、苏州大学二、与文科艺术类交叉1.影视动画设计专业择校推荐:北京电影学院、成都大学2.环境艺术设计专业择校推荐:中国美术学院、浙江工业大学3.计算机美术设计专业择校推荐:云南大学、南京艺术学院、四川美术学院、重庆师范大学4.网页设计专业择校推荐:中央美术学院、首都师范大学如果选择艺术类院校的上述专业,大家要有思想准备,由于报考人数比较多,招生人数有限,有一定的门槛,竞争也比较大。三、计算机基础专业择校推荐:北京大学、清华大学、浙江大学、国防科技大学、北京邮电大学、电子科技大学、华中科技大学、哈尔滨工业大学以上是北京文都考研网给出的“2020考研计算机专业有3大分类,知否?”,希望上述内容对报考计算机的学子们,在择专业择学校方面有所帮助!
【导语】全套资料已上线,现分享给大家。本内容全面丰富,共分为4部分内容,助力全面备考。首先通过历年考研试题进行汇编,并配有考研试题视频的讲解,能够更好地帮助广大考生朋友有针对性、有重点的掌握专业课考试的侧重考点、核心知识点,总结命题规律和特点,做到知己知彼、针对性备考;教材是学习的基础,因此结合指定的参考教材的重难点笔记、配套练习题、课后练习题答案等分析等来帮助全方位地吃透、理解透教材,并配置了名师高清视频讲解,帮助进一步记忆和理解掌握考点难点;最后通过出题规律总结汇编了考研题库,含有部分兄弟院校相近试题,帮助考生朋友检验学习效果,重点突破,查缺补漏。资料来源:学爽学习网(1)历年考研汇编南京航空航天大学计算机科学与技术学院829计算机专业基础历年考题汇编(2)指定教材笔记和课后习题详解严蔚敏《数据结构》(C语言版)笔记和习题含考研详解汤子瀛《计算机操作系统》(第3版)笔记和课后习题含考研详解说明:南京航空航天大学“829计算机专业基础”的指定教材为:①《计算机组成与系统结构》(第2版),(袁春风,清华大学出版社,2015年);②《计算机组成与设计 硬件/软件接口》(第5版),(王党辉译,机械工业出版社,2015年);③《计算机操作系统》(第3版),(汤子瀛,西安电子科技大学出版社,2007年);④《数据结构》(C语言版),(严蔚敏编著,清华大学出版社,2007年)。(3)指定教材视频讲解【36小时高清视频】严蔚敏《数据结构》(C语言版)【教材精讲+考研解析】讲义与视频课程【36小时高清视频】(4)指定教材配套题库严蔚敏《数据结构》(C语言版)配套题库【名校考研+章节题库+模拟试题】汤子瀛《计算机操作系统》(第3版)配套题库【名校考研+课后习题+章节题库+模拟试题】(5)考研题库2021年数据结构考研题库【名校考研+章节题库+模拟试题】2021年操作系统考研题库【名校考研+经典教材课后习题+章节题库+模拟试题】(6)全国名校考题全国名校数据结构考题汇编全国名校计算机操作系统考研汇编考研目录(第一部分)2014年南京航空航天大学829计算机专业基础考题2015年南京航空航天大学829计算机专业基础考题2016年南京航空航天大学829计算机专业基础考题2017年南京航空航天大学829计算机专业基础考题2018年南京航空航天大学829计算机专业基础考题试读(部分内容)更多考研全套、资格考试、大学课程等学习考试干货内容分享来源于学爽学习网,转载请注明~
大家好,恭喜大家过五关斩六将,通过初试进入复试。应海文考研老师的邀请,给大家做下研究生入学考试计算机复试阶段的经验分享,希望能够对大家有所帮助。复试中,由于项目比较多,它包括体检、专业课笔试、英语口语考试、专业课面试等环节,再加上有的同学可能已经习惯卷面答题,面试经验比较少,很容易出现紧张影响发挥的问题。因此,对于进入复试的同学来说,切不可大意,要继续扎扎实实掌握好每一个注意事项,走好复试每一个流程。一、复试流程1. 体检只有体检合格的同学才能录取,体检不合格不能录取,所以大家一定要按照学校规定进行体检。2. 复试笔试复试笔试是复试中的一场简单考试,只涉及专业课考试,其具体的参考书目可以在报考学校研究生招生官网查询。3. 英语考试英语考试因学校而异,如果报考学校明确提出有英语考试,那么在综合面试时,对英语方面的考察,比重会有所降低;如果复试没有英语笔试考试,那么在综合面试中必会涉及英文考察。计算机专业的学生应需要多记忆一些计算机相关的专业术语和略缩词。4. 机试若报考院校的计算机专业较好,一般都会安排机试,机试的目的就是刷人。所以,如果报考学校有机试,必须从初试结束后开始刷题,多写算法。如果复试中没有提到机试,则需要多加练习手写代码的能力。5. 综合面试综合面试是在复试过程中起决定性作用的环节。如果机试题目全部回答出来,那么面试可以相对其他考生有一定优势;如果机试完成的不好,则综合面试会比较麻烦。二、复试笔试以下所列参数书目皆是计算机相关专业应该熟悉的专业教材。如果有学生没有学过以上的部分教材,建议在学有余力的情况下,将其通读一遍。这些教材的内容除了在复试笔试中可能出现外,在复试的综合面试也很有可能会出现。需要注意,复试笔试最重要的是切记出现空白试题,即使不会也要尽可能把相关的内容写上。表-计算机类和软件类同学的参考书目三、复试机试机试需要提前准备,最好每天都刷几道题保持手感,对于参加 ACM 的同学来说,机试一般不会太难,如果是一般同学,就需要自己课下多练习,可以将牛客网的剑指 offer 题目全部做一遍,机试应该问题不大。机试语言的选择:机试语言不宜选择 C 语言之类的面向过程的语言,虽然 C语言是一门较好的练习编程的语言,但是由于其内置的函数库太少在机试的过程中会比较吃亏,选一门高级语言,如 Java 或 python 这种内置函数或类型较多的编程语言,在机试中比较占优势。例如:如果需要排序算法,使用 C 语言的可能需要自己写一个排序算法,但是使用 Java 就可以使用内置的排序函数,并且 java的排序函数还是快速排序。四、综合面试综合面试一般是复试中的最后一项。如果是本校的学生,综合面试会非常占有优势,如果是外校且学校不好的学生,就需要非常认真的对待,非常认真的准备。首先,综合面试需要准备一份个人简历和一份自我介绍。个人简历包含个人的重要信息(邮箱和电话)、初试分数、本科获得的奖励、本科的社会实践。对于初试分数而言,总分高就填写,总分低但数学或专业课分高也可以填写,各科都不占优势建议不写。本科所获得的奖励以市级和市级以上的为主,实在没有奖励可以写上校级的奖励。另外,如果有获得数学建模或挑战杯奖励的学生,建议把关于这两个比赛的材料和相关技术都好好复习一下,导师很有可能会问到。本科的社会实践以项目经验为主,但是凡事写到简历上的项目经验都需要自己把项目的相关技术好好看一下,以防导师提问。导师在看到你的个人简历后,极有可能会从你的项目经验中提问。自我介绍(包括中文和英文),虽然有可能会用不到,但每个学生都需要认真准备的。中文的自我介绍要在一两分钟内将自己的特长表达出来,有重要的项目经验或获奖经历最好都提到。英文的自我介绍,可以在网上找一个相关介绍内容,背的滚瓜烂熟,若条件允许可以找专业人士帮助纠正发音。综合面试中的导师提问环节一般是比较难的环节,导师的目的是摸清学生的水平,所以问题可能由易到难,或由难到易。在这一过程中,如果不会回答导师的问题,就直接告诉老师,切记不要随意瞎说。若导师对你进行压力测试的话,你需要保持良好的心态,如果在过程中你暴露出了性格方面的劣势,被刷掉的几率会大很多。压力测试的应对方法是不卑不亢,能对答如流自然好,不能对答如流也要给导师回应,千万不要使小性子,或低头不做声。最后祝大家复试顺利!谢谢!本文海文考研独家转载注明来源 违者必究
计算机考研,第一个摆在同学们的面前就是学硕和专硕的问题,很多学生在考研初期就在纠结这个问题,关于到底是选择学硕还是专硕,怎么选择,有些同学可能会说到底是学硕好还是专硕好,哪个好我就考哪个。这个不是这样子划分的,学硕专硕各有优劣势,咱们先来看看两者区别,根据区别来挑选适合自己的。首先来说学术和专硕这一块,我们在研究生学习阶段,首先学硕和专硕来讲:1.我们研究生培养方案的目标就不一样,学术的话我们培养目标是培养教学和科研人才,但如果是专硕的话,我们的培养目标是培养特定职业高层次人才。2.学硕的话是单导师制,只有学术指导老师,那如果是专硕的话,我们基本上都是双导师制,有学术理论指导教师,也有实践活动指导老师。3.考试内容的不一样,特别是我们公共课,那像学硕的话哈,基本上我们都是考数一和英一的,那如果是专硕的话,我们这一块有可能考数二英二也有可能考数一英二,也有可能考数二英一这三种不一样的选择。4.关于下设方向的不一样,那学术的话它的下设方向是有很多的,那基本上很热门的一些方向它都会放在学硕下面,那如果是专硕的话,下面的研究方向的话是非常少的,这个的话是下设方向的一个不一样。5.涉及到我们对于未来人生的职业发展规划,因为学术的话是可以直博的,但是专硕不可以直博,专硕只能考博,如果是说我研究生毕业之后我不想读博了,我就是想直接就业的话,那其实老师这边是更推荐去考专硕的,这样子对未来就业的话是有一定的好处的。那如果是说我这边以后想研究生读完之后我想留校或者去大学任教,有这样子的一个想法的话,就可以去读学硕,这样子方便读博,也方便未来的职业发展。这边的话也要给大家说一个好消息,因为今年2020年的研究生招生比去年增加了18.9万,这个消息一出2020的学生,一片激动,但是同学们要注意这个是18.9万的增长,他不是每一个专业平等的去均分这个名额,这个18.9万的增长,重点在临床医学,公共卫生,集成电路,人工智能等专业,注意一下我标红的这个人工智能,其实指的就是咱计算机专业,人工智能就是计算机下面的一个方向,再往后看一下他这个重点投放的话,除了专业有重点,还有一个重点就是以专业学位培养为主,以高层次应用型人才专业学位为主,原因是啥,为什么往这些专业上面去投放,而且以专硕为主,是因为教育部也直接放话了,说这些专业今后一段时间社会需求是比较旺盛的。所以计算机的学生,考上研究生,未来的就业一片光明,非常的好呀。因为咱现在计算机专业的高层次应用型人才还是社会比较紧缺的。把这个好消息给大家说完了之后,前面已经说明学术和专硕的区别,那对于学生来说,学硕和专硕到底哪个好考?那其实从现在全国的一个研究生专业普遍数据来说,专硕比学硕是要好考一些的,首先第1个专硕考试内容比学硕是要简单一些的,第2个招生人数专硕也比学硕会多一些,那这种的情况就会避免神仙打架,有一些好学校的学硕统招生只招三四个人,那最后剩下去复试的人,基本上都是一些本科就是211或者985的学生,他们的分数也是非常非常高的,所以我们要避免和这一类同学遇到。如果你想考的那个学校,他的统招生名额低于5个人,那就建议大家就不要去报考了。
计算机专业是近些年来的一个考研热门专业,竞争相对比较激烈,一方面原因是互联网科技行业的结构性升级在不断推动人才结构的升级,另一方面原因是不少基础学科专业的学生也会跨考到计算机专业,比如数学、物理等专业就可以跨考到计算机专业。计算机专业考研的难度体现在三个方面,其一是计算机专业的本科生基数大,目前计算机专业(计算机科学与技术)是在读本科人数最多的专业之一,这就导致考研的人数相应增加;其二是研究生培养能力有限,随着教育部门对于计算机专业研究生培养单位考核指标的提升,一部分高校被剥夺了研究生的培养资格;其三是计算机专业的知识量比较大。对于想考计算机专业研究生的考生来说,如果想顺利走进研究生课堂,首先要根据自己的学习能力、时间规划和知识基础来选择适合的目标学校,如果时间相对比较宽松,比如在大二开始准备,那么可以定一个稍微高一点的目标学校(翘翘脚能够得上),但是如果时间相对比较紧张,就应该选择把握更大一点的高校。按照历史经验来看,计算机专业考研不仅初试难度较大,复试的难度也比较高,一部分高校不仅会进行多个科目的笔试,同时还会安排上机考核,这对于考生的动手实践能力要求还是比较高的。另外,一部分重点高校在复试过程中,会随机考察一门专业课,这也在很大程度上增加了考生的复习难度。最后,不论计算机专业考研有多难,只要有充分的准备和理性的报考,走进研究生课堂也是很有希望的。虽然每年报考人数比较多,但是不少考生会由于种种原因而放弃考试,所以能真正坚持走进考场的考生都有希望。我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言!
计算机考研复试面试常问问题 数据库篇在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更高!绝对良心之作!此系列一共有8篇:编程语言篇|数据结构篇|操作系统篇|组成原理篇|计算机网络篇|数据库篇|软件工程篇|计算机专业英语篇(还未全部完成,敬请期待,你们的支持和关注是我最大的动力!)需要pdf直接打印版,可在gongzonghao"程序员宝藏"回复复试上岸获取(会持续更新)相对于408初试,复试需要的少多了,加油,大家都可以上岸!!!让我们一起努力!!!1.事务概念:事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。ACID特性:(1)原子性 (Atomicity):事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。回滚可以用回滚日志来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。(2)一致性 (Consistency):数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。(3)隔离性 (Isolation):一个事务所做的修改在最终提交以前,对其它事务是不可见的。(4)持久性 (Durability):一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。使用重做日志来保证持久性。事务的 ACID 特性概念简单,但不是很好理解,主要是因为这几个特性不是一种平级关系:只有满足一致性,事务的执行结果才是正确的。在无并发的情况下,事务串行执行,隔离性一定能够满足。此时只要能满足原子性,就一定能满足一致性。在并发的情况下,多个事务并行执行,事务不仅要满足原子性,还需要满足隔离性,才能满足一致性。事务满足持久性是为了能应对数据库崩溃的情况。2.并发一致性问题丢失数据丢失数据: 和 两个事务都对一个数据进行修改, 先修改, 随后修改, 的修改覆盖了 的修改。简记为 同时修改。读脏数据读脏数据: 对一个数据做了修改, 读取这一个数据。若 执行 ROLLBACK 操作,则 读取的结果和第一次的结果不一样。简记为 读取失败的修改。最简单的场景是修改完成后,紧接着查询检验结果。不可重复读不可重复读: 读取一个数据, 对该数据做了修改。如果 再次读取这个数据,此时读取的结果和第一次读取的结果不同。简记为 读时修改,重复读取的结果不一样。幻影读幻影读: 读取某个范围的数据, 在这个范围内插入新的数据, 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。简记为 读时插入,重复读取的结果不一样。解决方案在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。产生并发不一致性问题的主要原因是破坏了事务的隔离性。解决方法是通过 并发控制 来保证隔离性。并发控制可以通过 封锁 来实现,但是封锁操作需要用户自己控制,相当复杂。数据库管理系统提供了事务的 隔离级别,让用户以一种更轻松的方式处理并发一致性问题。3.封锁封锁粒度MySQL 中提供了两种封锁粒度:行级锁 以及 表级锁。应尽量只锁定需要修改的那部分数据,而不是所有的资源。锁定的数据量越少,发生锁争用的可能就越小,系统的并发程度就越高。但是加锁需要消耗资源,锁的各种操作 (包括获取锁、释放锁、以及检查锁状态) 都会增加系统开销。因此封锁粒度越小,系统开销就越大。为此,我们在选择封锁粒度时,需在 锁开销 和 并发程度 之间做一个 权衡。封锁类型(1)读写锁排它锁 (Exclusive),简写为 X 锁,又称 写锁。共享锁 (Shared),简写为 S 锁,又称 读锁。有以下两个规定:一个事务对数据对象 A 加了 X 锁,就可以对 A 进行读取和更新。加锁期间其它事务不能对 A 加任何锁。一个事务对数据对象 A 加了 S 锁,可以对 A 进行读取操作,但是不能进行更新操作。加锁期间其它事务能对 A 加 S 锁,但是不能加 X 锁。(2)意向锁使用意向锁 (Intention Locks),可以更容易地支持多粒度封锁,使得行锁和表锁能够共存。在存在行级锁和表级锁的情况下,事务 T 想要对表 A 加 X 锁,就需要先检测是否有其它事务对表 A 或者表 A 中的任意一行加了锁,那么就需要对表 A 的每一行都检测一次,这是非常耗时的。意向锁在原来的 X/S 锁之上引入了 IX / IS,IX / IS 都是 表级别的锁,用来表示一个事务稍后会对表中的某个数据行上加 X 锁或 S 锁。整理可得以下两个规定:一个事务在获得某个数据行对象的 S 锁之前,必须先获得表的 IS 锁或者更强的锁;一个事务在获得某个数据行对象的 X 锁之前,必须先获得表的 IX 锁。封锁协议三级封锁协议一级封锁协议:事务 T 要修改数据 A 时必须加 X 锁,直到 T 结束才释放锁。防止同时修改,可解决 丢失修改 问题,因不能同时有两个事务对同一个数据进行修改,那么事务的修改就不会被覆盖。二级封锁协议:在一级的基础上,要求读取数据 A 时必须加 S 锁,读取完马上释放 S 锁。防止修改时读取,可解决 丢失修改 和 读脏数据 问题,因为一个事务在对数据 A 进行修改,根据 1 级封锁协议,会加 X 锁,那么就不能再加 S 锁了,也就是不会读入数据。三级封锁协议:在二级的基础上,要求读取数据 A 时必须加 S 锁,直到事务结束了才能释放 S 锁。防止读取时修改,可解决 丢失修改 和 读脏数据 问题,还进一步防止了 不可重复读 的问题,因为读 A 时,其它事务不能对 A 加 X 锁,从而避免了在读的期间数据发生改变。两段锁协议两段锁协议是指每个事务的执行可以分为两个阶段:生长阶段 (加锁阶段) 和衰退阶段 (解锁阶段)。两段封锁法可以这样来实现:事务开始后就处于加锁阶段,一直到执行 ROLLBACK 和 COMMIT 之前都是加锁阶段。ROLLBACK 和 COMMIT 使事务进入解锁阶段,即在 ROLLBACK 和 COMMIT 模块中 DBMS 释放所有封锁