精华内容
下载资源
问答
  • 什么是QA?

    千次阅读 2018-12-23 20:05:22
      百度之:QA(QUALITY ASSURANCE)中文意思是“品质保证”,其在ISO8402。1994中的定义是“为了提供足够的信任表明实体能够满足品质要求,而在品质管理体系中...为什么说是管理呢? 因为QA结合了管理,分析和测...

    转载自:开心糖果的夏天  链接:https://www.jianshu.com/p/a348da2b155b

     

    百度之:QA(QUALITY ASSURANCE)中文意思是“品质保证”,其在ISO8402。1994中的定义是“为了提供足够的信任表明实体能够满足品质要求,而在品质管理体系中实施并根据需要进行证实的全部有计划和有系统的活动”。

    为什么说是管理呢?

    因为QA结合了管理,分析和测试三大行业的知识。公司的研发进度,产品研发初期的标准制定及产品后期的研发都需要QA的参与,缺一不可。QA可以有效的控制研发的进度和每个环节的质量。不管任何的产品,都是以适合人使用为前题的。在产品初期制定设计标准的时候,QA能够站在消费者的角度来看待这个产品,让产品更人性化。设计阶段,QA成为一个测试者,验证每一个环节的质量,是否达到了设计标准所规定的。用当局者迷,旁观者清来形容再贴切不过了。QA就是这个旁观者。任何产品不可能十全十美,出了问题,设计者不可能一一来查找问题,因为很难有单独一个人完成整个产品设计,这时候QA就是一个分析师,查找在哪部分出了问题,节约研发的时间,解决不必要的麻烦。任何的公司都有自己的产权,而QA能很好的保护公司的产权。健全的公司,QA有很大的权力控制公司的所有技术资料。任何设计工程师不可以私自给客户公司的技术资料,这些管理都是由QA来完成的。

    成为一个成熟的QA需要经过三个阶段的成长期。

    首先,先让自己成为一个优秀的测试者。

    有灵活的头脑,用逆向思维来思考如何做测试。做为一个测试者,还需要有良好的表达能力,要能将自己看见的现象描述清楚。有些人天生就对文字表达不擅长,但没关系,描述bug是有一定规则的。以下提供一个经常使用的格式:
      测试环境,软件版本,硬件版本,测试时间,此项测试的申请人。记录这些的目的是为了快速准确的找到相对应的人与开发环境。方便问题重现。bug是只出现在一个版本上,还是所有的版本都会出现,出现的几率是多少,大概出现在哪个产品模块。
      将操作步骤写清楚。此点并不容易描写清楚,给个建议,你不需要用太多麻烦的描述,只需要列出每一步做了什么,用最简单的语言描述你当时所做的操作,最好用列表式,用数字排列出步骤的先后顺序。
      列出问题点,只需要写出现象,不需要做过多解释,这样更容易让看报告的人明白。
       如果你做到了用逆向思维方式不约束的头脑去测试,用超强的记忆力,记录下自己所做的步骤,用敏锐的观察力去发现每一个不起眼的异常,用简单清楚的语言描述bug,那么你就是一名优秀的测试者了。

    在成为一名优秀的测试者后,不要满足喔,你还没成为真正的QA,你还需要具有分析问题的能力。

    这个需要时间和精力来完成,没有捷径,只有努力才可以达到。但也是有方向的,向大家指个方向。QA需要了解大量的专业知识,除了要让自己了解公司所有的规格标准技术资料外,更应该让自己成为一个博学者。每个人能力有限,博学不代表要精通,但至少要知晓相关知识的大概。QA的分析能力与经验有相当大的关连。QA需要长时间来积累自己的经验,积累经验也有要领的。每次出现一个问题,都要去问为什么,为什么问的越多,经验就越多,你会在为什么中不知不觉的成长。一般五年是QA的一个阶段,五年内,QA需要默默的学习,积累扎实的基本功和经验,如果你做到了,五年后,你将发现,你成了奇缺人材。

    最后一点要说的是管理。

    QA需要管理自己内部的资料,也需要管理整个研发团队的。首先要做到的是,QA需要有正直的人品,不要因为任何的外界的因素而改变自己对公司产品的严格要求,要勇敢地说不,对不合格产品严格地打回去重新做。其次,QA需要有完善的体系来管理工作。每家公司各不相同,但我认为需要以下几个方面体系:
      工作记录。此测试是何人完成的,何人申请的,进度如何,完成时间,要严格控制记录,如果出了问题方便找到相关的人,不是为了让谁去担这个责任,是为了能更快的解决问题。当然也有对测试者的约束力,要让每一个QA知道,要对公司负责。我通常采用一个工作记录表格,个人认为还有一个好处是给QA和其他部门的同事看。当QA全部在忙,研发工程师们可以内部自己调整case的重要性,暂时pause或者delay某个任务,调整工作,让QA的工作更有效率。
      Test Case管理系统。这个需要一个小型数据库,将每一个测试项目详细记录下来,测试者可以将自己的经验变成文字写在里面,让后来者可以为之所用,提高QA团队的整体力量。每一个Test Case都必须根据公司的设计规格书和行业标准来编写,通过此,测试者也可以更了解公司产品的标准。
      Bug管理系统。这个系统可以便于QA上报bug,研发工程师能很快的去解决,也可以帮QA控制产品的研发进度,push研发工程师按进度解决问题。也可以根据此来制定每一个版本的release时间表。
      Code mangerment. 一般的公司都有这种工具,就不需要我来特别说明了,通常用的是Perforce和CVS。说明一点的是,有些公司对code管理比较乱,客户打个电话code就release出去了。不成熟的产品出去了,会让客户觉得这家公司的产品为什么如此差劲。所以如果要对公司好,就一定不可以随便开放权限。健全公司的做法通常release全部由QA发布,最后再由相对应的客户服务经理发给客户。

     

    展开全文
  • 静脉识别技术特点及应用前景

    千次阅读 2019-02-15 15:22:35
    **静脉识别技术特点及应用前景** 静脉识别技术利用手指静脉血管的纹理进行身份验证,对人体无害,具有不易被盗取、伪造等特点。该识别技术可广泛应用于银行金融、政府国安、教育社保等领域的门禁系统,是比...

    @指静脉识别技术特点及应用前景
    指静脉识别技术利用手指静脉血管的纹理进行身份验证,对人体无害,具有不易被盗取、伪造等特点。该识别技术可广泛应用于银行金融、政府国安、教育社保等领域的门禁系统,是比指纹识别、虹膜识别等体表特征识别技术更安全、高效的技术。
      
      指静脉相对于其他生物识别的优点
      
      现有的生物主要有指纹识别、虹膜识别、面部识别技术、签名识别技术、声音识别技术、掌形识别技术、指静脉识别技术、掌静脉识别技术等,这些识别技术都已经很成熟,并走向市场。生物具有其固有的优点,但对每种识别又分别有其优缺点。
      
      作为一种安全性高,使用方便的方式,手指静脉技术有如下一些区别于其它生物技术的突出特点:
      
      (1)安全性高
      
      前面已经介绍到,手指静脉系统的原理是匹配手指内部静脉的纹路图。因为静脉血管是隐藏在手指内部的,因此极难复制和盗取,与别的利用人体体外特征进行的技术相比较,这种方式的安全性更高。同时,静脉能感知手指内的血液流动和血压情况,能够在识别的过程同时进行活体检测。
      
      (2)准确率高
      
      因为采样样本是在人体内部,所以匹配过程中受到外界的干扰非常小。手指静脉的准确性很高,根据严格的医学证明和数学统计,FRR(拒真率)小于0.01%,FAR(认假率)小于0.0001%,FTE(登录失败)为0%。
      
      (3)唯一性
      
      根据医学证明,不同人之间的手指静脉分布完全不同,左手和右手的静脉分布也不同,就算是双胞胎的相同手指,其中的静脉分布也是不同的。而且手指静脉的纹路分布在成年后是不会变化的[4]。对于未成年人,当他们手指静脉随着年龄的增长变化后,只需要花30秒就可以完成重新的注册登记。
      
      (4)非接触式
      
      相对于某些生物识别技术,手指静脉认识技术是非接触式的,在公共场合会比较卫生。
      
      (5)样本文件小
      
      由于手指的静脉血管相对稳定并且很容易拍摄下来,因此使用低分辨率的摄像头就可以达到取样要求。这样生成的静脉模板文件小,匹配速度快。
      
      随着基于计算机网络的信息技术飞速发展,全球经济一体化,个人信息的保护显得越来越重要。选择合理的技术是保证信息安全的必要因素。早期的技术是基于个人密码,而密码被破解或偷窥的概率越来越高。后来出现了智能IC卡,但这种方式同样存在被复制或者偷盗的安全隐患。
      
      生物将成为今后几年IT产业的重要变革。生物特征是通过计算机利用人体固有的生理特征或行为特征鉴别个人身份。生物识别技术具有不易遗忘和丢失,不易伪造和被盗,可以“随身携带”,随时随地使用等优点,已经被全世界所关注,并应用于身份、出入口管理,安防监控,电子商务、电子政务等各个领域。
      
      生物识别包括指纹识别、虹膜识别、人脸识别、掌纹识别、静脉识别、声音识别、签名识别、笔迹识别、手形识别及多种生物特征综合识别等多种类,已经有成熟的产品并有了一定的市场应用。
      
      纵观生物识别技术的发展史,20世纪60年代末,美国有人提出用计算机图像处理和模式识别方法进行指纹分析以代替人工对比,这就是指纹识别技术。从20世纪90年代起,掌形识别、脸部识别、虹膜识别的产品纷纷走向市场,每种技术都有各自的优缺点,占据一定的市场份额。
      
      2002年,指静脉生物产品发布,这是生物领域的一项全新技术。指静脉技术通过对手指中静脉图像进行活体识别来达到目的,安全性高、识别率高、简单宜用。这些优点使其迅速被市场认可。指静脉识别技术被广泛应用于金融系统、门禁系统、电脑安全等领域。
      
      指静脉系统原理
      
      手指静脉是一种新的生物特征识别技术,它利用手指内的静脉分布图像来进行身份识别。医学研究证明,手指静脉的形状具有唯一性和稳定性,即每个人的手指静脉图像都不相同,同一个人不同的手指的静脉图像也不相同;健康成年人的静脉形状不再发生变化。这就为指静脉提供了医学依据。
      
      静脉识别分以下四个步骤:
      
      (1)静脉扫描:LED在手指一方发射近红外线,透射手指,在手指另一方,照相机拍摄静脉图像;
      
      (2)图像校正:调整图像的位置和角度,使其符合规格;
      
      (3)特征提取:根据以上得到的图像,提取静脉分布图像,得到特征图;
      
      (4)图像对比与匹配:将以上得到的特征图与数据库中的原始模版进行比较,计算相关性。如果相匹配则通过,不匹配则被拒绝。
      
      指静脉在门禁系统的应用与展望
      
      门禁系统的历史由来已久,人类几千年来仅仅依靠机械装置与钥匙来进行出入管理,而无论这种结构设计得怎样精妙与坚固,总能够通过各种手段打开。而且如果一套系统中有一人将钥匙丢失的话,出于安全的考虑,系统管理人员不得不更换所有人的钥匙与门锁,这就是个非常。
      
      后来出现了磁卡门禁系统,克服了以上的困难,管理人员可以方便地注销丢失的磁卡。但是磁卡本身容易被复制,磨损度高,而且容易消磁,可靠性和准确性差。
      
      目前广泛应用的非接触IC卡解决了以上的问题,不但不容易磨损,某些高档的IC卡还提供用户信息加密的功能,极难复制。但是用户也必须随身携带IC卡,给使用带来不便。
      
      随着近代生物技术的发展,现代化安全防范系统要求原始的使用钥匙或卡片的门禁系统转化为以人体特征为基础的高安全性、高可靠性的系统。指静脉由于其安全性高、准确率高、唯一性、非接触等优点被广泛应用于门禁安全领域,为从办公环境到安居环境提供了一个理想的安全解决方案。
      
      应用于公司、工厂门禁
      
      办工环境是门禁系统应用最广泛的领域,并对安全性提出更高的要求。目前大部分公司与工厂采用IC卡作为门禁系统,但是出现如下几点不足之处:
      
      (1)员工需要随身携带IC卡片,可能发生丢失、损坏的情况;
      
      (2)对于大型公司或者工厂,在人数上千人的情况下,需要为每位员工配备IC卡片,这将提高系统的成本和工作流程繁锁程度;
      
      (3)由于IC卡并不是与人体生物特征相互依存,因此会经常出现员工代打卡的情况,对公司、工厂的管理造成混乱。
      
      应用了生物技术的门禁系统更方便员工使用,不需要员工使用或携带额外的标志,比如密码、IC卡等。
      
      指纹技术最早应用于门禁系统,但是指纹识别方式本身存在比较严重的安全隐患,这种暴露在人体外部的生物特征比较容易被复制,另外在公司这样用户比较多的场合,接触式的指纹方式并不符合卫生要求。而应用了手指静脉技术的门禁系统相对于指纹技术来讲,使用更加方便、卫生,更加人性化。
      
      目前也有些企业重要部门应用了虹膜识别技术,我们知道这种技术和手指静脉一样,是隐藏在人体内部的生物特征,因此极难复制,并且不容易受外界影响。但是虹膜识别系统要求对人的眼球扫描,会让用户的内心存在一定的抗拒感,同时戴眼镜的用户也不太方便使用。
      
      在实际的使用环境中,手指静脉系统能够和企业安防系统以及考勤系统相结合,详细记录员工出入管理日志,可按照不同的查询条件查询,并在发生危险的时候报警。
      
      手指静脉系统还具备双重功能,只有不同两人的不同手指先后通过,才有权限进入安全级别要求更高的场所。这将是高端企业比较好的安全解决方案。
      
      应用于公共场所
      
      随着社会的发展和生活节奏的加快,像地铁出入口,办公楼大厅,图书馆等公共场所的人流量越来越大,控制这些场所的正常运行和安全成为管理机构的重要任务。在这些场所的人数比在某个企业的员工数量大许多,使用IC卡片式的出入管理装置将是低率和不安全的做法。方便快捷的生物识别技术将是比较适合这些公共场所的生物识别技术。
      
      应用于智能楼宇系统
      
      最近几年,中国的房地产市场飞速发展,人们对住宅的要求也越来越高,期望一种舒心、便利,同时更安全的居住条件。智能楼宇技术应运而生,它融合了通信网络技术、计算机技术、自动控制技术、安全技术等。
      
      在人们在享受高科技带来的高质量生活的同时,居住环境的安全成为这一切的根本。目前某些高档住宅已经使用IC卡控制电子锁。但是往往出现老人和小孩忘记携带卡片的情况,造成生活上的不便。使用IC卡也容易被另有用心之人复制或者盗窃,造成财产的损失和人身的安全。
      
      而应用了手指静脉系统的智能楼宇系统,能够给住户带来更加方便和安全的居住体验。主人回家只需要轻轻将手指插入静脉系统。系统就能够验证有效性,并记录出入日志。更进一步,手指静脉系统能够和智能楼宇系统中的电梯联动。当用户在大堂门插入手指通过的瞬间,电梯将会自动降到一楼,并在住户进入电梯的时候,根据手指静脉系统数据库的记录,自动运行到用户所在楼层。而整个过程中,住户不用按任何按钮,能够方便快捷地回到家,这将是一种全新的生活体验。
      
      与智能住宅系统类似,将手指静脉系统应用于酒店管理也将会是非常方便,并且能够提升酒店档次的安全解决方案。
      
      综上所述,指静脉技术不仅满足了人们对“高度安全”的需求,而且识别率高、简单易用,为各种环境的门禁安防提供了理想的解决方案。相信在不久的将来,指静脉产品在门禁系统中得到更广泛的应用。

    展开全文
  • JavaBean实际上是一种特殊的Java类,它通常用来实现一些比较常用的简单功能,并可以很容易的被重用或者是插入其他应用程序中去。所有遵循一定编程原则的Java类都可以被称作JavaBean。一. Java Bean技术概述Java ...

    Bean的中文含义是“豆子”,顾名思义JavaBean是一段Java小程序。JavaBean实际上是指一种特殊的Java类,它通常用来实现一些比较常用的简单功能,并可以很容易的被重用或者是插入其他应用程序中去。所有遵循一定编程原则的Java类都可以被称作JavaBean。

    一. Java Bean技术概述

    Java Bean是基于Java的组件模型,由属性、方法和事件3部分组成。在该模型中,JavaBean可以被修改或与其他组件结合以生成新组件或完整的程序。它是一种Java类,通过封装成为具有某种功能或者处理某个业务的对象。因此,也可以通过嵌在JSP页面内的Java代码访问Bean及其属性。

    Bean的含义是可重复使用的Java组件。所谓组件就是一个由可以自行进行内部管理的一个或几个类所组成、外界不了解其内部信息和运行方式的群体。使用它的对象只能通过接口来操作。

    二. Java Bean编写规范

    Java Bean实际上是根据JavaBean技术标准所指定Bean的命名和设计规范编写的Java类。这些类遵循一个接口格式,以便于使函数命名、底层行为以及继承或实现的行为,其最大的优点在于可以实现代码的可重用性。Bean并不需要继承特别的基类(BaseClass)或实现特定的接口(Interface)。Bean的编写规范使Bean的容器(Container)能够分析一个Java类文件,并将其方法(Methods)翻译成属性(Properties),即把Java类作为一个Bean类使用。Bean的编写规范包括Bean类的构造方法、定义属性和访问方法编写规则。

    三.使用JavaBean的优点

    优点:1.实现界面和Java代码分离,便于日后维护和扩展

    2.可解决代码重复编写,减少代码冗余。

    Bean是随Sun的Bean开发包(BDK)开发出来的,并且能在任何主流操作系统平台的许多应用程序环境(人们所说的“容器”,container)中运行,包括浏览器,文字处理软件,以及一些其他应用。

    Bean也有持续性,持续性就是一种把一个组件的状态存在一个安全处的机制。有了这种持续性,它能使,比如说,一个组件(bean)“记住”某个特定用户在早些时候的用户对话中所输入的数据。

    展开全文
  • 什么是乐观锁,什么是悲观锁

    千次阅读 多人点赞 2020-10-24 21:40:32
    什么是乐观锁,什么是悲观锁 一、并发控制 当程序中可能出现并发的情况时,就需要通过一定的手段来保证在并发情况下数据的准确性,通过这种手段保证了当前用户和其他用户一起操作时,所得到的结果和他单独操作时的...

    什么是乐观锁,什么是悲观锁


    一、并发控制

    当程序中可能出现并发的情况时,就需要通过一定的手段来保证在并发情况下数据的准确性,通过这种手段保证了当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。

    没有做好并发控制,就可能导致脏读、幻读和不可重复读等问题。

     

    常说的并发控制,一般都和数据库管理系统(DBMS)有关。在 DBMS 中的并发控制的任务,是确保在多个事务同时存取数据库中同一数据时,不破坏事务的隔离性、一致性和数据库的统一性。

    实现并发控制的主要手段大致可以分为乐观并发控制和悲观并发控制两种。
    首先要明确:无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像 hibernate、tair、memcache 等都有类似的概念。所以,不应该拿乐观锁、悲观锁和其他的数据库锁等进行对比。乐观锁比较适用于读多写少的情况(多读场景),悲观锁比较适用于写多读少的情况(多写场景)。

    二、悲观锁(Pessimistic Lock)

    1️⃣理解
    当要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发。这种借助数据库锁机制,在修改数据之前先锁定,再修改的方式被称之为悲观并发控制【Pessimistic Concurrency Control,缩写“PCC”,又名“悲观锁”】。

     

     

    悲观锁,正如其名,具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度。因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。

    之所以叫做悲观锁,是因为这是一种对数据的修改持有悲观态度的并发控制方式。总是假设最坏的情况,每次读取数据的时候都默认其他线程会更改数据,因此需要进行加锁操作,当其他线程想要访问数据时,都需要阻塞挂起。悲观锁的实现:

    1. 传统的关系型数据库使用这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
    2. Java 里面的同步 synchronized 关键字的实现。

    2️⃣悲观锁主要分为共享锁和排他锁

    • 共享锁【shared locks】又称为读锁,简称S锁。顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。
    • 排他锁【exclusive locks】又称为写锁,简称X锁。顾名思义,排他锁就是不能与其他锁并存,如果一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据行读取和修改。

    3️⃣说明
    悲观并发控制实际上是“先取锁再访问”的保守策略,为数据处理的安全提供了保证。但是在效率方面,处理加锁的机制会让数据库产生额外的开销,还有增加产生死锁的机会。另外还会降低并行性,一个事务如果锁定了某行数据,其他事务就必须等待该事务处理完才可以处理那行数据。

    三、乐观锁(Optimistic Locking)

    1️⃣理解
    乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。乐观锁适用于读操作多的场景,这样可以提高程序的吞吐量。

    乐观锁机制采取了更加宽松的加锁机制。乐观锁是相对悲观锁而言,也是为了避免数据库幻读、业务处理时间过长等原因引起数据处理错误的一种机制,但乐观锁不会刻意使用数据库本身的锁机制,而是依据数据本身来保证数据的正确性。乐观锁的实现:

    1. CAS 实现:Java 中java.util.concurrent.atomic包下面的原子变量使用了乐观锁的一种 CAS 实现方式。
    2. 版本号控制:一般是在数据表中加上一个数据版本号 version 字段,表示数据被修改的次数。当数据被修改时,version 值会+1。当线程A要更新数据值时,在读取数据的同时也会读取 version 值,在提交更新时,若刚才读取到的 version 值与当前数据库中的 version 值相等时才更新,否则重试更新操作,直到更新成功。

    2️⃣说明
    乐观并发控制相信事务之间的数据竞争(data race)的概率是比较小的,因此尽可能直接做下去,直到提交的时候才去锁定,所以不会产生任何锁和死锁。

    四、具体实现

    1️⃣悲观锁实现方式
    悲观锁的实现,往往依靠数据库提供的锁机制。在数据库中,悲观锁的流程如下:

    1. 在对记录进行修改前,先尝试为该记录加上排他锁(exclusive locks)。
    2. 如果加锁失败,说明该记录正在被修改,那么当前查询可能要等待或者抛出异常。具体响应方式由开发者根据实际需要决定。
    3. 如果成功加锁,那么就可以对记录做修改,事务完成后就会解锁了。
    4. 期间如果有其他对该记录做修改或加排他锁的操作,都会等待解锁或直接抛出异常。

    拿比较常用的 MySql Innodb 引擎举例,来说明一下在 SQL 中如何使用悲观锁。

    要使用悲观锁,必须关闭 MySQL 数据库的自动提交属性。因为 MySQL 默认使用 autocommit 模式,也就是说,当执行一个更新操作后,MySQL 会立刻将结果进行提交。(sql语句:set autocommit=0)

     

     

    以电商下单扣减库存的过程说明一下悲观锁的使用:

    以上,在对id = 1的记录修改前,先通过 for update 的方式进行加锁,然后再进行修改。这就是比较典型的悲观锁策略。

    如果以上修改库存的代码发生并发,同一时间只有一个线程可以开启事务并获得id=1的锁,其它的事务必须等本次事务提交之后才能执行。这样可以保证当前的数据不会被其它事务修改。

    上面提到,使用 select…for update 会把数据给锁住,不过需要注意一些锁的级别,MySQL InnoDB 默认行级锁。行级锁都是基于索引的,如果一条 SQL 语句用不到索引是不会使用行级锁的,会使用表级锁把整张表锁住,这点需要注意。

    2️⃣乐观锁实现方式使用乐观锁就不需要借助数据库的锁机制了。

    主要就是两个步骤:冲突检测和数据更新。其实现方式有一种比较典型的就是 CAS(Compare and Swap)

     

     

    CAS 是项乐观锁技术,当多个线程尝试使用 CAS 同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。比如前面的扣减库存问题,通过乐观锁可以实现如下:

    乐观锁使用

    在更新之前,先查询一下库存表中当前库存数(quantity),然后在做 update 的时候,以库存数作为一个修改条件。当提交更新的时候,判断数据库表对应记录的当前库存数与第一次取出来的库存数进行比对,如果数据库表当前库存数与第一次取出来的库存数相等,则予以更新,否则认为是过期数据。

    以上更新语句存在一个比较严重的问题,即传说中的ABA问题

     

    ①比如说线程one从数据库中取出库存数3,这时候线程two也从数据库中取出库存数3,并且线程two进行了一些操作变成了2。
    ②然后线程two又将库存数变成3,这时候线程one进行 CAS 操作发现数据库中仍然是3,然后线程one操作成功。
    ③尽管线程one的 CAS 操作成功,但是不代表这个过程就是没有问题的。

     

     

    有一个比较好的办法可以解决 ABA 问题,那就是通过一个单独的可以顺序递增的 version 字段。优化如下:

    乐观锁每次在执行数据修改操作时,都会带上一个版本号,一旦版本号和数据的版本号一致就可以执行修改操作并对版本号执行+1操作,否则就执行失败。因为每次操作的版本号都会随之增加,所以不会出现 ABA 问题,因为版本号只会增加不会减少。除了 version 以外,还可以使用时间戳,因为时间戳天然具有顺序递增性。

    以上 SQL 其实还是有一定的问题的,就是一旦遇上高并发的时候,就只有一个线程可以修改成功,那么就会存在大量的失败。对于像淘宝这样的电商网站,高并发是常有的事,总让用户感知到失败显然是不合理的。所以,还是要想办法减少乐观锁的粒度。有一条比较好的建议,可以减小乐观锁力度,最大程度的提升吞吐率,提高并发能力!如下:

     

    以上 SQL 语句中,如果用户下单数为1,则通过quantity - 1 > 0的方式进行乐观锁控制。在执行过程中,会在一次原子操作中查询一遍 quantity 的值,并将其扣减掉1。

    高并发环境下锁粒度把控是一门重要的学问。选择一个好的锁,在保证数据安全的情况下,可以大大提升吞吐率,进而提升性能。

    五、如何选择

    在乐观锁与悲观锁的选择上面,主要看下两者的区别以及适用场景就可以了。
    1️⃣响应效率:如果需要非常高的响应速度,建议采用乐观锁方案,成功就执行,不成功就失败,不需要等待其他并发去释放锁。乐观锁并未真正加锁,效率高。一旦锁的粒度掌握不好,更新失败的概率就会比较高,容易发生业务失败。
    2️⃣冲突频率:如果冲突频率非常高,建议采用悲观锁,保证成功率。冲突频率大,选择乐观锁会需要多次重试才能成功,代价比较大。
    3️⃣重试代价:如果重试代价大,建议采用悲观锁。悲观锁依赖数据库锁,效率低。更新失败的概率比较低。
    4️⃣乐观锁如果有人在你之前更新了,你的更新应当是被拒绝的,可以让用户从新操作。悲观锁则会等待前一个更新完成。这也是区别。

    随着互联网三高架构(高并发、高性能、高可用)的提出,悲观锁已经越来越少的被应用到生产环境中了,尤其是并发量比较大的业务场景。

    展开全文
  • 疑难杂症:系统雪崩到底是为什么

    千次阅读 多人点赞 2021-03-27 14:23:13
    这周二笔者参加了由CSDN举办的“2021年创作扶持计划”宣讲会,笔者完全被副总裁于邦旭的激情...还是举“2021年创作扶持计划”的当中的例子,在直播时有网友提问说CSDN的网站为什么总爱崩溃呢?于总当时就提到提到使用S
  • MacBook 屏幕录制 只包含内屏声音 无外界录音目的录屏方法办法 目的 用Mac自带的QuickTimePlayer录制屏幕的时候(或者按快捷键⇧+⌘+5),三个选项: 1)无声音 2)选外置扬声器。电脑外放,确实能录到内屏声音,...
  • java后端开发(一):基本认知之web开发是什么

    千次阅读 多人点赞 2018-08-05 13:22:10
    数据库设计学完后,接着来了解一下到底什么是web开发,在脑海中形成宏观的感受。本文主要讲述web开发的相关背景知识
  • 自然底数e的意义是什么

    千次阅读 2018-09-20 08:15:16
    自然底数e的意义是什么?   https://mp.weixin.qq.com/s?__biz=MzA5ODUxOTA5Mg==&mid=2652553811&idx=1&sn=000305074471c3d4c681c9cfd4e4bc93&chksm=8b7e3308bc09ba1e3043f5568a...
  • 空调滤方向到底是什么,air flow

    千次阅读 2020-12-19 23:21:13
    空调滤清器,汽车空调滤清器的作用是:过滤从外界进入车厢内部的空气使空气的洁净度提高,一般的过滤物质是空气中所包含的杂质,微小颗粒物、花粉、细菌、工业废气和灰尘等。 空调滤清器的效果是防止这类物质进入...
  • 什么是JIT

    万次阅读 多人点赞 2019-07-12 11:33:09
    1、动态编译(dynamic compilation)的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。 2、JIT编译(just-in-timecompilation)...
  • 无人驾驶之环境感知

    万次阅读 多人点赞 2018-10-19 18:55:42
    环境感知作为第一环节,处于智能驾驶车辆与外界环境信息交互的关键位置,其关键在于使智能驾驶车辆更好地模拟人类驾驶员的感知能力,从而理解自身和周边的驾驶态势。 相机、雷达、定位导航系统等为智能驾驶车辆提供...
  • 先看下以下几个概念,概念摘自于百度百科:1、认知:认知,是人们获得知识或应用知识的过程,或信息加工的过程,人最基本的心理过程。包括感觉、知觉、记忆、思维、想像和语言等。人脑接受外界输入的信息,经过...
  • 从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。...这篇文章将开启Keras人工智能的学习,主要分享Keras环境搭建、入门基础及回归神经网络案例。基础性文章,希望对您有所帮助!
  • 人脸识别更是受外界环境影响较大,故安全性还有待提高;虹膜识别技术由于所需的采集设备十分昂贵,在操作的简便性和系统集成方面作为验证对象没有优势,还不能大量应用在低端市场。然而手静脉在防伪造、安全性、适用...
  • bose qc30 安静的城市是什么样子

    千次阅读 多人点赞 2019-02-20 21:10:48
    什么是降噪耳机 降噪耳机是利用某种方法达到降低噪音的一种耳机。目前降噪耳机有两种分别为:主动降噪耳机和被动降噪耳机。 主动降噪功能就是通过降噪系统产生与外界噪音相等的反向 声波 ,将噪音中和,从而...
  • 什么是嵌入式 IEEE(Institute of Electrical and Electronics Engineers,美国电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。原文为:Devices Used to Control,...
  • 什么是认知?什么是认知科学?

    千次阅读 2018-07-16 06:15:12
    一、什么是认知?认知当词语时的释义为:认知通过心理活动(如形成概念、知觉、判断或想象)获取知识。习惯上将认知与情感、意志相对应。认知是个体认识客观世界的信息加工活动。感...
  • 什么是PA芯片?

    千次阅读 2020-03-16 11:44:25
    PA芯片可是5G通信前端模块的核心芯片呢,这也不难理解为什么华为在这一方面早就有所准备了吧,下面就随21ic的小编来一起学习下这个5G通信中的关键产品吧。 一、PA简介 PA是Power Amplifier的简称,中文名称为功率...
  • 区分什么是架构、框架、模式和平台,一直都感觉这几个词过于抽象和模糊,今天大家来说说到底什么是架构、框架、模式和平台? 收集了的一些来自网上各自的定义和区分如下: 设计模式 模式:分为代码模式、设计模式...
  • 什么是Native Method    简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多...
  • SOA是什么

    千次阅读 2015-03-21 16:21:19
    通俗点来讲,SOA提倡将不同应用程序的业务功能封装成“服务”并宿主起来,通常以接口和契约的形式暴露并提供给外界应用访问(通过交换消息),达到不同系统可重用的目的。 流行的WebService等可以看作是实现SOA基础...
  • Java的native方法是什么

    千次阅读 2016-11-07 14:15:50
    今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解。 一. 什么是Native Method  简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native ...
  • 什么是沉浸感?

    千次阅读 2019-04-17 10:24:43
    在这个例子中,“在线”的是玩家对游戏的直接输入,而“离线”的是任何不涉及玩家输入的内容,比如在关卡结束时观看视频剪辑和评分屏幕。在这一点上,Newman认为电子游戏是非遍历性的,这纯粹是因为游戏序列的...
  • Nginx介绍及环境搭建(一)

    千次阅读 2018-02-24 11:22:52
    所谓的负载均衡是, 当同时有N 多用户访问我们服务器的时候,为了减少服务器压力,我们需要将用户 分别引入各服务器,分担服务器的压力。如下图 Nginx与其他服务器的性能比较 首先说IIS, IIS服务器只能在Windows...
  • 强化学习(一):简介——什么是强化学习?

    千次阅读 多人点赞 2021-01-22 23:59:35
    本文将介绍强化学习的基本含义,了解什么是强化学习、强化学习的概念与基本框架以及强化学习中常见的问题类型。 什么是强化学习? 强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是...
  • 宿主环境

    千次阅读 2017-11-07 17:20:14
    JS的运行环境一般由宿主环境和执行期环境共同构成,宿主环境是由外壳程序(如web浏览器就是一个外壳程序)生成,执行期环境是由嵌入到外壳程序中的JS引擎(/JS解释器)生成的,在执行期环境JS可以生成内置静态对象、初始...
  • CDH环境搭建及部署

    千次阅读 2019-05-08 09:19:26
    CDH 部署主要有以下几个部分:(以cdh5.1.3为例,系统环境为centos 6.5) 测试环境建议以root用户建立,可以减少一些权限的设置 1 设置集群环境,比如安装jdk,在作为master机器上安装mysql,并修改密码,允许...
  • 什么是好的测试用例[51Testing]

    千次阅读 2013-03-21 22:58:33
    更可能帮助测试人员或编码人员洞察产品、客户或者外界环境的某些方面。  有时,我们通过测试了解产品,了解其如何运转以及存在的风险。随后,我们会设计测试来暴露产品的缺陷,但测试刚开始时,我们会对“是...
  • 1.1 什么是以太网适配器? 计算机与外界局域网连接是通过主机箱插入一块网络接口板(或者是在笔记本电脑中插入PCMCIA卡)。网络接口板又称通信适配器,或网络适配器,或网络接口卡NIC,简单的名称为“网卡”。 1.2...
  • 其最基本的特征是什么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!操作系统有哪几大特征?其最基本的特征是什么?操作系统的基本特征:1、并发性...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,797
精华内容 18,718
关键字:

外界环境是指什么