精华内容
下载资源
问答
  • 事务的概念和作用
    千次阅读
    2018-07-26 19:31:58
    1. 什么是事务,为什么使用事务?
      一、概念:
      1.数据库事务: 数据库事务通常指对数据库进行读或写的一个操作序列。
      它的存在包含有以下两个目的:
      1、为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
      2、当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

      2.系统中的事务: 处理一系列业务处理的执行逻辑单元,该单元里的一系列类操作要不全部成功要不全部失败
      二、为什么使用事务
      可以保证数据的一致性和完整性(避免异常和错误等导致的数据信息异常)
      三、事务的特性ACID
      原子性(Atomicity):事务包含的操作全部成功或者全部失败
      一致性(Consistency):数据库从一个一致性状态变到另一个一致性状态
      (一系列操作后,所有的操作和更新全部提交成功,数据库只包含全部成功后的数据就是数据的一致性)
      (由于系统异常或数据库系统出现故障导致只有部分数据更新成功,但是这不是我们需要的最终数据,这就是数据的不一致)
      隔离性(Isolation):事务互相隔离互不干扰
      (事务内部操作的数据对其它事务是隔离的,在一个事务执行完之前不会被其他事务影响和操作)
      持久性(Durability):事务提交后数据应该被永久的保存下来,出现宕机等故障后可以恢复数据
      四、数据库的隔离级别
      此处使用http://blog.csdn.net/qq_33290787/article/details/51924963(写的很好,直接copy下来了)
      数据库事务的隔离级别有4种,由低到高分别为Readuncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读

    Read uncommitted(读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。)
    事例:老板要给程序员发工资,程序员的工资是3.6万/月。但是发工资时老板不小心按错了数字,按成3.9万/月,该钱已经打到程序员的户口,但是事务还没有提交,就在这时,程序员去查看自己这个月的工资,发现比往常多了3千元,以为涨工资了非常高兴。但是老板及时发现了不对,马上回滚差点就提交了的事务,将数字改成3.6万再提交。
    分析:实际程序员这个月的工资还是3.6万,但是程序员看到的是3.9万。他看到的是老板还没提交事务时的数据。这就是脏读。
    那怎么解决脏读呢?Readcommitted!读提交,能解决脏读问题。

    Readcommitted
    读提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据。
    事例:程序员拿着信用卡去享受生活(卡里当然是只有3.6万),当他埋单时(程序员事务开启),收费系统事先检测到他的卡里有3.6万,就在这个时候!!程序员的妻子要把钱全部转出充当家用,并提交。当收费系统准备扣款时,再检测卡里的金额,发现已经没钱了(第二次检测金额当然要等待妻子转出金额事务提交完)。程序员就会很郁闷,明明卡里是有钱的…
    分析:这就是读提交,若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。但在这个事例中,出现了一个事务范围内两个相同的查询却返回了不同数据,这就是不可重复读。
    那怎么解决可能的不可重复读问题?Repeatable read !

    Repeatableread
    重复读,就是在开始读取数据(事务开启)时,不再允许修改操作
    事例:程序员拿着信用卡去享受生活(卡里当然是只有3.6万),当他埋单时(事务开启,不允许其他事务的UPDATE修改操作),收费系统事先检测到他的卡里有3.6万。这个时候他的妻子不能转出金额了。接下来收费系统就可以扣款了。
    分析:重复读可以解决不可重复读问题。写到这里,应该明白的一点就是,不可重复读对应的是修改,即UPDATE操作。但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。

    什么时候会出现幻读?
    事例:程序员某一天去消费,花了2千元,然后他的妻子去查看他今天的消费记录(全表扫描FTS,妻子事务开启),看到确实是花了2千元,就在这个时候,程序员花了1万买了一部电脑,即新增INSERT了一条消费记录,并提交。当妻子打印程序员的消费记录清单时(妻子事务提交),发现花了1.2万元,似乎出现了幻觉,这就是幻读。

    那怎么解决幻读问题?Serializable!
    

    Serializable序列化
    Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

    值得一提的是:大多数数据库默认的事务隔离级别是Read committed,比如Sql Server , Oracle。Mysql的默认隔离级别是Repeatable read。
    
    更多相关内容
  • 来自两个社会经济领域和两个年级的小学生的自我概念和攻击行为 学校心理学 第 20 卷。1983 年 7 月 来自两个社会经济领域和两个年级的小学儿童的自我概念和攻击性行为 KEVIN BURDETT和 LARRY C. JENSEN 杨百翰大学 ...
  • 这篇文章使用了基于思想语言哲学的生产者-消费者理论来分析疾病,疾病疾病等基本健康概念含义。 生产者-消费者观点的核心思想是,如果一个人对术语的理解不完全,可以将其与语言专家的概念相关联,前提是...
  • 从某种意义上说,科学的集体概念网络是特定科学的单个概念网络的不确定性(不确定性较低,更加模糊)的总和,均值或结果。 在科学发展过程中,其概念网络缠绕了物理现实,而蜘蛛网缠绕了石质雕塑。 新的理论,...
  • 关于设计(一)设计的概念和意义

    千次阅读 2017-12-25 17:16:42
     讲到这里我需要引用一下前人留给我们的优秀遗产,它是伟大的哲学王阳明先生给我们怎么解决问题的核心思想利器——心学四决:“无善无恶心之体,有善有恶意之动,知善知恶是良知,为善去恶是格物”  什么...
    究竟啥叫设计?让我们来先看个故事。

            你开着一辆车。
            在一个暴风雨的晚上。

            你经过一个车站。

            有三个人正在焦急的等公共汽车。

            一个是快要临死的老人,他需要马上去医院

            一个是医生,他曾救过你的命,你做梦都想报答他。

            还有一个女人/男人,她/他是你做梦都想嫁/娶的人,也许错过就没有了。

            但你的车只能再坐下一个人,你会如何选择?

            我不知道这是不是一个对你性格的测试,因为每一个回答都有他自己的原因。

            老人快要死了,你首先应该先救他。

            你也想让那个医生上车,因为他救过你,这是个好机会报答他。

            还有就是你的梦中情人。错过了这个机会。你可能永远不能遇到一个让你这么心动的人了。

            在200个应征者中,只有一个人被雇佣了,他并没有解释他的理由,他只是说了以下的话:'给医生车钥匙,让他带着老人去医院,而我则留下来陪我的梦中情人一起等公车!'



            讲故事的人给出的忠告: 是否是因为我们从未想过要放弃我们手中已经拥有的优势(车钥匙)?有时,如果我们能放弃一些我们的固执,狭隘,和一些优势的话,我们可能会得到更多。
            看完了,你有什么感受?我总结了一下我的感受应该是包含这么几点:
            1、故事很经典,很精彩,人物也很有代表性。
            2、给出答案的人很聪明。他应该得到这个职位。它能够有突破型的思维,这是特与众不同的原因。聘用他的公司可能也是因为这一点选择了他。
            3、讲故事的人通过前面的故事,告诉了我们一个真理,这个真理好像确实很对。


            好了,到这里,你有了对这个故事的理解,也有了答案,对这一套东西看起来都看得很透了,看起来一些都是那么圆满。

            可是真的是这样么?当我冷静下来的时候,我开始寻找其中的破绽,看看自己能不能从中找到些什么,以便我的目光能不跟着讲故事的人。这可能本能的出于大家都有的一种精神:怀疑精神,上面的问题既然具有虚构的成分,那我在这里多一点怀疑似乎也没什么大不了吧。


            经过观察和思考,我觉得自己被“设计”了。“设计”这两字,我一直觉得起这名字真的是起的无可挑剔。三国演义里面东一个计,西一个计,都是为了让人中计,以达到或实现自己的目的,同样在这里,这么一个故事得出这么一个结论,整个看下来,我觉得我像三国演义里面的人一样,中计了,觉得这个是讲的太对了。这里面一定有什么问题。
    嗯,仔细看看。

            第一、招聘者是什么人?他为什么会让这么回答的人获得胜利?从结果来看,招聘者似乎是认为:“如果我们能放弃一些我们的固执,狭隘,和一些优势的话,我们可能会得到更多。”如果这么看,那这个招聘者不就是讲故事的人么?如果这个招聘者确是这么招过人,那倒是美谈一个,但是如果招聘者没招过人呢?——那这个故事就是一个骗局。讲故事的人想让我们这么按照他的思维去走,所以虚构了这么一切。
            第二、如果招聘者存在,他会秉承“如果我们能放弃一些我们的固执,狭隘,和一些优势的话,我们可能会得到更多。”这样的主旨去确定这个应聘者么?不一定吧。回答这样答案的人明显有很强的组织安排能力,他能够很快的将各种资源合理组织到一起。从企业管理角度来说,这个人很有利用价值,如果我是企业管理者,拥有这种能力的人我也会首先录取。
            第三、如果车象征权利,故事在开始就给我们设下了一个局。对比车、老人、恩人、梦中情人,车显而易见是可以再次得到的,老人、恩人、梦中情人是不可再次得到的,那么讲故事人刚开始就给我们设了一个局:暂时把权力(车)放下,后面至少还有另一个权利(公交车)在等着你,虽然公交没有自己的车好,但是至少那也是一种权利。如果这个讲故事的人是我的同事、政治上的朋友,我有点怀疑讲故事的人是否抱有什么目的,权力失去了能拿回来倒是没什么问题,如果拿不回来呢?或者权力被这讲故事的人拿去之后怎么办?韩信不就是把兵权还给刘邦后被吕后杀死的么。


            好了,不说那么多了,总而言之通过上面的三条,我得到了一个结论。我被“设计”了。

            我想我得到了对于“设计”的基本概念点,它包含两点:
            1、任何一个设计都有目的。就比如我这篇文章为什么要讲上面这个故事?我是想通过上面的分析把你引到这里,得到“设计”的基本概念点,这就是我这片文章写到这里的目的。
            2、设计是一个过程。就如同上面讲的故事一样,他是一个过程。任何的过程都一个事件流。上面讲故事的人先告诉你,你开着一辆车,这就是第一个事件流。然后天气是暴风雨,时间还是晚上。看这两个条件,暴风雨是不以人的意志为转移的,它有生成、下雨、结束一系列的事件,他自己也是个事件流,所以他是我们故事里面的第二个事件流。一说晚上,天是黑的,你立即会想到可能出现劫匪,晚上大家一般不出门,因为不安全,一说晚上,你就会想到这么多。所以,她是第三个事件流。……以此类推,我们可以看到这个故事的过程就是多个事件流的组合,把这些过程组合在一起,我们就得到了一个完整的故事。所以,讲故事的人实际是设计这个故事的历程,实际就是把这么多个事件流组合在一起的过程。所以说设计是一个过程。

       

        哇,说的好累,不知道你看明白没有。

        为什么要强调设计是一个过程呢?也许有的人看到这里会这么问。因为我后面要告诉你怎么用“设计”这个武器面对、分析、达到你的目的。这种思维方式是一种解决问题的工具。


        讲到这里我需要引用一下前人留给我们的优秀遗产,它是伟大的哲学家王阳明先生给我们怎么解决问题的核心思想和利器——心学四决:“无善无恶心之体,有善有恶意之动,知善知恶是良知,为善去恶是格物”
        什么意思呢?我的愚见是:世上所有的动作、行为、对象,是没有善恶的,就像java里面的object,它就在那里,它是没有善恶的。举个例子,就像杀人,从本质上来说,你能说它是善还是恶?说杀人是善的人,你会觉得日本二战里面的行为是善么?说杀人是恶的人,你会说抗日战争中国人的反抗杀死日本人是恶的么?所以单就这个行为对象来说,它是没有善恶的。那善恶在哪里?第二句话给了解释:“意之动”产生了善恶的区分。“目的”让行为产生了善恶。第三句话告诉我们,从目的上分析行为,让我们知道怎么样辨别善恶,这才是良好的认知。第四句话告诉我们,有了前三句话的基础我们应该用良好的行为改造这个世界。
        为啥要讲王阳明的这几句话?其实我也是前些时间才理解了这些话的含义,我觉得心学四决的这个内涵用在对“设计”的讲解上,能够让我们更清晰地看到设计的本质。



        到此为止,我找到了设计的基本概念点,但是我觉得还缺点什么。    
        都是做平面设计的,为什么有的人被称为高级平面设计师?有的工资拿那么高?

        都是做化工厂里面化学工艺设计的,为什么有的是总工程师,有的是技术员?

        判断设计是否好的标准是什么?

        之前有个程序员问我,他做程序三年了,技术掌握也很多了,但是现在他开始觉得自己很难再往上发展了,却又说不清瓶颈在哪里。

        ……看起来上面几个问题都不相同,而在我看来这几个问题都在问同样一个问题:设计的真正发力点在哪?或者说,设计的价值是什么?因为设计的价值让平面设计师有了高级、低级的区分,让他们工资不同;设计的价值让人的能力有了区分,产生了总工程师、技术员的区别,能设计整个生产线的就是总工程师,只能设计一个反应釜的,就只能做做技术员了;好的设计自然值钱,就像齐白石的作品总能上万;人的记忆总是有限的,三年的程序员对于基本技术的掌握再多也会忘记前面的,所以必须学习怎么样把现有的知识组合在一起,由设计产生更多的价值。



        好了,基于以上所有的论述,我也不卖关子了,给出我对设计的终极解释: 设计,就是为达到某种目的而寻找最优路径的过程。



        想想看,高级平面设计师的工资那么高,不就是因为他做出来的平面设计更好?我突然想起来前些年“恒源祥”的广告了,广告很有意思,把一个画面重复了12次:“恒源祥,羊羊羊;恒源祥,牛牛牛……”有人说这个广告很糟糕,很恶俗,但是我觉的这个广告从设计角度上来说却是一个优秀的广告。因为广告播才三天,大街小巷都知道了“恒源祥,羊羊羊;恒源祥,牛牛牛……”。还有脑白金的广告,小老头和小老太太天天出来跳舞,害得我一看见跳广场舞的就想到了脑白金。从设计角度来说,这种恶俗的广告显然比那些画面漂亮的汽车广告更让我记忆深刻。很显然,广告的特立独行,让人能够记忆深刻是广告设计的目的,最优路径有时候是“恶俗”。   
        对于工厂里面的总工程师,他在设计流水线的时候,能够将更多的事件流考虑地更得体、更安全、他选择的流水线路径,自然比只会设计反应釜的技术员更具价值。

        条条大路通罗马,带着“走哪条路更近”,我们会觉得坐飞机直接抵达最近。如果有人还想看着海景去,那坐船是最好的选择,像我这样还想看看一路上的风景民俗的人,坐火车去则是最好的选择。因为设计行程的最优化标准是怎么样满足行程中的这些附属干扰条件。
        对于问我问题的那个程序员,我给出的回答是:您应该向设计方面发展,或者在后面的工作中增加设计的成分在里面。你的基础很好,有了设计的支持,一方面你能将已经掌握的知识合理组合起来,就像都是积木,有人能见平房,有人却能建楼房,楼房价值比平房价值高几倍;另一方面,有了设计的支持,你能够判断优劣,从而找到适合自己的技术路线,找到新的发力点。因为没有“设计”的存在,有些事情看起来目的相同,可能选择哪种方案都一样,但是有了“设计”,适应性、维护性更好的方案就会被选择。就像服装设计师,国际好的能去巴黎,国内好的能去北京。



        但是很遗憾,这程序员听了我的话之后一个月,跳槽了。
    展开全文
  • AI基本概念和应用

    万次阅读 多人点赞 2017-11-09 22:13:58
    AI 的发展势头 5.17日美国旧金山Google I/O 大会上,Google CEO 开场就再次强调了公司战略从“Mobile first to AI first”,称 Google 会因此重新思考自己的所有产品,还要...迪拜机场 CEO:AI 时代,机场安检入...

    AI 的发展势头

    5.17日美国旧金山Google I/O 大会上,Google CEO 开场就再次强调了公司战略从“Mobile first to AI first”,称 Google 会因此重新思考自己的所有产品,还要把人工智能用到学术研究、医学的层面。所以会议上十几项新产品的宣布,都是在展示 AI 的成果。

    近一个月内的新闻AI 也是热门。

    迪拜机场 CEO:AI 时代,机场安检和入境检查都会消失。

    国际体操联合会(FIG):计划引进人工智能技术来助力2020年东京奥运会评分系统。

    硅谷最神秘的 AI 公司Vicarious :发明新型神经网络,可破解一切验证码

    历史以来,人们一致认为验证码是区分人与机器的重要手段,而现在机器也能实现破解一切的验证码,不管是字符、还是图形。

    在之前,AI领域的大部分投资是由内部研发投资,集中在谷歌、亚马逊等财力雄厚的巨头公司,现在国内 BAT 也在大力发展 AI。

    百度提出All In AI,有号称全球领先的人工智能服务平台。腾讯有 AI Lab以及西雅图 AI 实验室,重点的研究方向为计算机视觉、语音识别、自然语言处理和机器学习。阿里巴巴有人工智能实验室首次亮相,方向是消费级 AI 产品的研发。

    这篇文章主要讲讲 AI 的基本概念,并且结合实际生活场景讲讲 AI 的现在的AI都用于哪些领域。

    AI 的基本概念

    AI:Artificial Intelligence,人工智能。

    利用计算机来对人的意识、思维信息过程、智能行为进行模拟(如学习、推理、思考、规划等)和延伸,使计算机能实现更高层次的应用。

    ML:Machine Learning,机器学习。

    从数据中学习的AI叫做机器学习。机器学习是指从一系列的原始数据中提取人们可以识别的特征,然后通过学习这些特征,最终产生一个模型。

    AGI:Artificial General Intelligence,强人工智能。

    AGI是拥有像人一样的智慧的计算机,更接近于人力智慧的人工智能。

    另外还有几个相关概念提的比较多:

    DM:Data Mining,数据挖掘。

    从海量数据中“挖掘”隐藏信息,从大量的、模糊的、随机的实际应用数据中,提炼隐含的、规律性的,并且又能被理解的信息。数据挖掘基于数据仓库。

    DL:Deep Learning,深度学习。

    机器学习的一个子集,用复杂、庞大的神经网络进行机器学习,也是机器学习里面现在比较火的一个Topic,目前在图像,语音等富媒体的分类和识别上取得了非常好的效果。

    综合来说,可以理解为:机器学习是实现人工智能的一种手段,也是数据挖掘采用的一个重要方法,但机器学习是另一门学科,并不从属于数据挖掘,也不属于人工智能。

    AI 的实际应用

    机器视觉:(Machine vision)

    应用场景:

    Google I/O 大会上,发布了一款名叫 Google Lens 的新相机产品,让在场的所有听众都很雀跃。Google Lens具有一些最基本的AI识别功能。

    比如拍一张花朵的照片,可以快速提示用户这是什么花,对花粉过敏的用户群来讲,是一大福利。

    去到朋友家,扫描朋友家Wi-Fi 的用户名/密码,或者是条形码,手机就会自动连接到网络上,省去手动查找网络、输入密码的繁琐。

    另外,如果来到一个新的城市,打开 Google Lens 对着随便一家餐馆扫描,它能够自动在 Google 的数据库里资料展示出来,包括菜单、评分、营业时间等等,甚至会提醒用户是否需要帮忙预约定位。

    优点:便利、快捷

    缺点:影响因素多(光源选择、镜头的像素、照片清晰度、对比度)

    自动规划

    从某个特定的问题状态出发,建立一系列行为标准和操作系列,从而实现一个预先设定的目标,或者期望的效果。

    自动规划人类的行为、智能服务于人类的人工智能其实已经发展很久了,只是我们没有意识到,比如搜索和推荐系统。

    传统搜索只是搜索一个内容,主流搜索引擎一页给出多个结果,有了人工智能的分析,以一种更切合用户期望和习惯的形式将搜索结果呈现给用户。

    比如,用户搜索《爸爸去哪儿》,则排在第一位的是视频播放,点击后能进去立即看视频。甚至猜测用户可能会喜欢《爸爸回来了》,一并推荐给用户。

    搜索深圳市平安金融中心,地址和地图出现的同时,也提供给我入口选择我的起点,并且可以选择公交或驾车的方式。传通查询路线的步骤一般会是:查地点》进入地图》设为终点》选择起点》选择交通方式为驾车》确定,现在变成直接:输入起点》点击驾车即可。极大的符合了用户的习惯,也降低了操作的复杂度。

    自动驾驶,就是把人类驾驶的手脚、眼睛、大脑分别定义为执行器、控制器、传感器,从而通过机器来模拟实现人类的驾驶行为。

    生物识别

    通过计算机,与光学、声学、生物传感器、统计学的概念手段结合,利用人体固有的生理特性和行为特征进行个人身份的鉴定。

    通常意义的生物识别,包含了指纹识别,人脸识别,视网膜识别,虹膜识别,甚至还有掌纹识别。

    从采集纬度上,可分为固有生理特性和人力行为特征。固有生理特性是指指纹、脸像、虹膜,行为特征是指笔迹、声音、步态等。

    从自然纬度上,生物识别可分为自然性和非自然性,自然性是指该识别方式,同时适用于人类和其他自然生物。人脸、语音、体形,属于自然性生物识别。指纹、虹膜属于非自然性生物识别。

    生物识别的通用流程

    人脸识别

    基于人的脸部特征信息进行身份识别。

    应用场景

    小米手机拍照根据人脸的轮廓,肤色,纹理,色彩等特征来计算照片中主人公的年龄。

    很多国家在机场里使用人脸识别技术,在拥挤的人群中可以随意挑出某一张面孔,并判断他是不是通缉犯。

    下图一个典型的对开门进行人脸识别的案例。

    优点:免物理接触、不易被个体察觉、自然性

    缺点:人脸具有相似性、易变性、可干扰性

    虹膜识别

    基于眼睛中的虹膜进行身份识别。

    人眼睛的虹膜,包含了最丰富的纹理信息,占眼睛外观的65%。虹膜在整个生命历程中将是保持不变的。因此具有唯一性,从而可以作为身份识别的标准。

    应用场景:

    一般用于政府、军队、银行等安全防务等领域,以及有高度保密需求的场所。

    Google.ai有个项目被医学界认为“举世瞩目”的事情,通过眼底扫描片,深度学习来识别糖尿病患者并发出警告。

    优点:快捷、精准度高、最可靠的生物识别技术、免物理接触、唯一性。

    缺点:采样区域小、图像获取难、镜头对成像影响大、设备造价高。

    指纹识别

    以用户的十个手指指纹采集和鉴别,作为区分身份的唯一标识。

    应用场景

    去过美国的同学都知道,美国办理签证时,以及入境时是一定会收集十个手指指纹的。

    国内电子版港澳通行证也是存有数字化的个人资料和个人的拇指指纹信息,可以使用拇指指纹,用口岸自助查验通道实现自助通关。

    优点:唯一性、终身不变性、便捷性

    缺点:需要利用电子压力传感器采集指纹,采集方式需要人为的配合,也容易留下痕迹被恶意伪造。另外容易出现伤口和各种原因导致的不完整性。

    机器人学

    机器人是一个综合性的人工智能产品。

    应用场景

    常见的机器人具有机械手和步行结构,可以用来送快递。

    专家系统

    模拟人类专家解决领域问题的系统。数据库里包含含有大量的某个领域专家水平的知识与经验,跟进用户的咨询进行推理和判断,模拟人类专家的决策过程。

    按系统任务类型一般可分为解答型、预测型、控制型、教育型、诊断型。

    应用场景

    一般比如在线机器人客服、在线测评分析等,就是属于解答型和诊断型

    编码遗传

    AI Programmer,由人类驱动的部分非常少,只需要在开始输入指令,最后接收适用于某项任务的函数即可,剩下部分全部由机器完成。

    AI 的后续发展

    更加去人化

    语音识别作为一种非常自然的交互方式,在可穿戴设备、智能家居、教育领域等各方面都会有大量的应用场景。Siri、Google Assistant目前已经实现用自然的语言跟用户对话,触发翻译、搜索、通话、支付等需要,代替掉用户手工的操作。

    生物识别也可以大量的用于各种安保防卫领域。

    消灭体力和重复的任务

    去掉一些很有必要、但是重复性高、且难度较低的流水线式工作。

    比如可以通过机器人代替人工进行扫描快递单信息按区域进行分拣快递的操作,通过照片自动识别商品所处位置告知用户,实现无人化超市。

    预防危险发生

    作业场景中危险的部分由机器来动手,这就保证了在背后操作人员的安全。比如用于危险动物纪录片拍摄、地震救援、空中探测等。

    这篇文章就讲这些,下一篇文章会讲讲 AI 的架构、AI 的核心、未来一段时间 AI 的重点领域,以及对我们的影响。

     

     

    展开全文
  • 北京石油化工学院 本科毕业设计论文开题汇报 题目名称智能家居安防系统设计 题目类型 学生姓名 钱 频 专 业 测控技术仪器 学 院 信息工程学院 年 级 测 102 指导老师 李 阳 2 选题背景研究意义及文件综述 1....
  • 浅谈进程同步互斥的概念

    千次阅读 2018-04-14 15:17:43
    简介 进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享进程协作,从而避免进程之间的冲突,引入了进程同步。 临界资源 在操作系统中...

    简介

        进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步。

     

    临界资源

        在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。但对于某些资源来说,其在同一时间只能被一个进程所占用。这些一次只能被一个进程所占用的资源就是所谓的临界资源。典型的临界资源比如物理上的打印机,或是存在硬盘或内存中被多个进程所共享的一些变量和数据等(如果这类资源不被看成临界资源加以保护,那么很有可能造成丢数据的问题)。

        对于临界资源的访问,必须是互诉进行。也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放。而进程内访问临界资源的代码被成为临界区

        对于临界区的访问过程分为四个部分:

        1.进入区:查看临界区是否可访问,如果可以访问,则转到步骤二,否则进程会被阻塞

        2.临界区:在临界区做操作

        3.退出区:清除临界区被占用的标志

        4.剩余区:进程与临界区不相关部分的代码

     

    进程间同步和互诉的概念

     

    进程同步

        进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。

        比如说进程A需要从缓冲区读取进程B产生的信息,当缓冲区为空时,进程B因为读取不到信息而被阻塞。而当进程A产生信息放入缓冲区时,进程B才会被唤醒。概念如图1所示。

        1

         图1.进程之间的同步

     

         用C#代码模拟进程之间的同步如代码1所示。

     class ProcessSyn
        {
            private static Mutex mut = new Mutex();
            
            
            static void Main()
            {
                Console.WriteLine("进程1执行完了进程2才能执行.......");
                Thread Thread1 = new Thread(new ThreadStart(Proc1));
                Thread Thread2 = new Thread(new ThreadStart(Proc2));
                Thread1.Start();
                Thread2.Start();
                Console.ReadKey();   
            }
           
            private static void Proc1()
            {
                mut.WaitOne();
                Console.WriteLine("线程1执行操作....");
                Thread.Sleep(3000);
                mut.ReleaseMutex();//V操作
    
            }
            private static void Proc2()
            {
                
    
                mut.WaitOne();//P操作
                Console.WriteLine("线程2执行操作....");
                mut.WaitOne();
            }
        }

        代码1.C#模拟进程之间的同步

     

        运行结果如图2所示。

        2

        图2.运行结果

     

    进程互斥

        进程互斥是进程之间的间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待。只有当使用临界资源的进程退出临界区后,这个进程才会解除阻塞状态。

        比如进程B需要访问打印机,但此时进程A占有了打印机,进程B会被阻塞,直到进程A释放了打印机资源,进程B才可以继续执行。概念如图3所示。

        3

         图3.进程之间的互斥

     

         用C#模拟进程之间的互斥,这里我启动了5个线程,但同一时间内只有一个线程能对临界资源进行访问。如代码2所示。

    class ProcessMutex
        {
            private static Mutex mut = new Mutex();
            private const int numThreads = 5;
            
            static void Main()
            {
                
                for (int i = 0; i <= numThreads; i++)
                {
                    Thread myThread = new Thread(new ThreadStart(UseResource));
                    myThread.Name = String.Format("线程{0}", i + 1);
                    myThread.Start();
                }
                Console.ReadKey();
                
            }
            
            
            //同步
            private static void UseResource()
            {
                // 相当于P操作
                mut.WaitOne();
    
                
                /*下面代码是线程真正的工作*/
                Console.WriteLine("{0}已经进入临界区",
                    Thread.CurrentThread.Name);
                Random r = new Random();
                int rNum = r.Next(2000);
                
                Console.WriteLine("{0}执行操作,执行时间为{1}ms", Thread.CurrentThread.Name,rNum);
                Thread.Sleep(rNum);
    
                Console.WriteLine("{0}已经离开临界区\r\n",
                    Thread.CurrentThread.Name);
                /*线程工作结束*/
    
    
                
                // 相当于V操作
                mut.ReleaseMutex();
            }
            //互斥
      
    
    
        }

        代码2.C#模拟进程之间的互斥

     

         运行结果如图4所示。

        4   

        图4.C#模拟进程互斥

     

    实现临界区互斥的基本方法

     硬件实现方法

        通过硬件实现临界区最简单的办法就是关CPU的中断。从计算机原理我们知道,CPU进行进程切换是需要通过中断来进行。如果屏蔽了中断那么就可以保证当前进程顺利的将临界区代码执行完,从而实现了互斥。这个办法的步骤就是:屏蔽中断--执行临界区--开中断。但这样做并不好,这大大限制了处理器交替执行任务的能力。并且将关中断的权限交给用户代码,那么如果用户代码屏蔽了中断后不再开,那系统岂不是跪了?

        还有硬件的指令实现方式,这个方式和接下来要说的信号量方式如出一辙。但是通过硬件来实现,这里就不细说了。

     

    信号量实现方式

        这也是我们比较熟悉P V操作。通过设置一个表示资源个数的信号量S,通过对信号量S的P和V操作来实现进程的的互斥。

        P和V操作分别来自荷兰语Passeren和Vrijgeven,分别表示占有和释放。P V操作是操作系统的原语,意味着具有原子性。

        P操作首先减少信号量,表示有一个进程将占用或等待资源,然后检测S是否小于0,如果小于0则阻塞,如果大于0则占有资源进行执行。

        V操作是和P操作相反的操作,首先增加信号量,表示占用或等待资源的进程减少了1个。然后检测S是否小于0,如果小于0则唤醒等待使用S资源的其它进程。

        前面我们C#模拟进程的同步和互斥其实算是信号量进行实现的。

     

    一些经典利用信号量实现同步的问题

    生产者--消费者问题

        问题描述:生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。本作业要求设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来

     

        这里生产者和消费者是既同步又互斥的关系,首先只有生产者生产了,消费着才能消费,这里是同步的关系。但他们对于临界区的访问又是互斥的关系。因此需要三个信号量empty和full用于同步缓冲区,而mut变量用于在访问缓冲区时是互斥的。

        利用C#模拟生产者和消费者的关系如代码3所示。

        class ProducerAndCustomer
        {
            //临界区信号量
            private static Mutex mut = new Mutex();
    
            private static Semaphore empty = new Semaphore(5, 5);//空闲缓冲区
            private static Semaphore full = new Semaphore(0, 5);
            //生产者-消费者模拟
             static void Main()
             {
                 Console.WriteLine("生产者消费者模拟......");
                 for (int i = 1; i < 9; i++)
                 {
                     Thread Thread1 = new Thread(new ThreadStart(Producer));
                     Thread Thread2 = new Thread(new ThreadStart(Customer));
                     Thread1.Name = String.Format("生产者线程{0}", i);
                     Thread2.Name = String.Format("消费者线程{0}", i);
                     Thread1.Start();
                     Thread2.Start();
                 }
                 Console.ReadKey();
    
             }
             
             private static void Producer()
             {
                 Console.WriteLine("{0}已经启动",Thread.CurrentThread.Name);
                 empty.WaitOne();//对empty进行P操作
                 mut.WaitOne();//对mut进行P操作
                 Console.WriteLine("{0}放入数据到临界区", Thread.CurrentThread.Name);
                     Thread.Sleep(1000);
                 mut.ReleaseMutex();//对mut进行V操作
                 full.Release();//对full进行V操作
             }
             private static void Customer()
             {
                 Console.WriteLine("{0}已经启动", Thread.CurrentThread.Name);
                 Thread.Sleep(12000);
                 full.WaitOne();//对full进行P操作
                 mut.WaitOne();//对mut进行P操作
                 Console.WriteLine("{0}读取临界区", Thread.CurrentThread.Name);
                 mut.ReleaseMutex();//对mut进行V操作
                 empty.Release();//对empty进行V操作
             }
        }

       代码3.使用C#模拟生产者和消费者的关系

     

        运行结果如图5所示。

        5

         图5.生产者消费者C#模拟结果

     

    读者--写者问题

        问题描述:

          一个数据文件或记录,统称数据对象,可被多个进程共享,其中有些进程只要求读称为"读者",而另一些进程要求写或修改称为"写者"。

          规定:允许多个读者同时读一个共享对象,但禁止读者、写者同时访问一个共享对象,也禁止多个写者访问一个共享对象,否则将违反Bernstein并发执行条件。

        通过描述可以分析,这里的读者和写者是互斥的,而写者和写者也是互斥的,但读者之间并不互斥。

        由此我们可以设置3个变量,一个用来统计读者的数量,另外两个分别用于对读者数量读写的互斥,读者和读者写者和写者的互斥。如代码4所示。

    class ReaderAndWriter
        {
            private static Mutex mut = new Mutex();//用于保护读者数量的互斥信号量
            private static Mutex rw = new Mutex();//保证读者写者互斥的信号量
    
            static int count = 0;//读者数量
            
            
            static void Main()
            {
                Console.WriteLine("读者写者模拟......");
                for (int i = 1; i < 6; i++)
                {
    
                    Thread Thread1 = new Thread(new ThreadStart(Reader));
                    Thread1.Name = String.Format("读者线程{0}", i);
                    Thread1.Start();
                    
                }
                Thread Thread2 = new Thread(new ThreadStart(writer));
                Thread2.Name = String.Format("写者线程");
                Thread2.Start();
                Console.ReadKey();
    
    
            }
            
            private static void Reader()
            {
                
                mut.WaitOne();
                if (count == 0)
                {
                    rw.WaitOne();
                }
                count++;
                mut.ReleaseMutex();
                
                Thread.Sleep(new Random().Next(2000));//读取耗时1S
                Console.WriteLine("读取完毕");
                
                mut.WaitOne();
                count--;
                mut.ReleaseMutex();
                if (count == 0)
                {
                    rw.ReleaseMutex();
                }
    
            }
            private static void writer()
            {
                
                rw.WaitOne();
                Console.WriteLine("写入数据");
                rw.ReleaseMutex();
        
            }

       代码4.C#模拟读者和写者问题

     

        运行结果如图6所示。

        

        图6.读者写者的运行结果

     

    哲学家进餐问题

        问题描述:

        有五个哲学家,他们的生活方式是交替地进行思考和进餐。哲学家们公用一张圆桌,周围放有五把椅子,每人坐一把。在圆桌上有五个碗和五根筷子,当一个哲学家思考时,他不与其他人交谈,饥饿时便试图取用其左、右最靠近他的筷子,但他可能一根都拿不到。只有在他拿到两根筷子时,方能进餐,进餐完后,放下筷子又继续思考。

        8

        图7.哲学家进餐问题

     

        根据问题描述,五个哲学家分别可以看作是五个进程。五只筷子分别看作是五个资源。只有当哲学家分别拥有左右的资源时,才得以进餐。如果不指定规则,当每个哲学家手中只拿了一只筷子时会造成死锁,从而五个哲学家都因为吃不到饭而饿死。因此我们的策略是让哲学家同时拿起两只筷子。因此我们需要对每个资源设置一个信号量,此外,还需要使得哲学家同时拿起两只筷子而设置一个互斥信号量,如代码5所示。

    class philosopher
        {
            private static int[] chopstick=new int[5];//分别代表哲学家的5只筷子
            private static Mutex eat = new Mutex();//用于保证哲学家同时拿起两双筷子
            static void Main()
            {
                //初始设置所有筷子可用
                for (int k = 1; k <= 5; k++)
                {
                    chopstick[k - 1] = 1;
                }
                //每个哲学家轮流进餐一次
                for(int i=1;i<=5;i++)
                {
                    Thread Thread1 = new Thread(new ThreadStart(Philosophers));
                    Thread1.Name = i.ToString();
                    Thread1.Start();
                }
                Console.ReadKey();
            }
            private static void Philosophers()
            {
                
                //如果筷子不可用,则等待2秒
                while (chopstick[int.Parse(Thread.CurrentThread.Name)-1] !=1 || chopstick[(int.Parse(Thread.CurrentThread.Name))%4]!=1)
                {
                    Console.WriteLine("哲学家{0}正在等待", Thread.CurrentThread.Name);
                    Thread.Sleep(2000);
                }
                eat.WaitOne();
                //同时拿起两双筷子
                chopstick[int.Parse(Thread.CurrentThread.Name)-1] = 0;
                chopstick[(int.Parse(Thread.CurrentThread.Name)) % 4] = 0;
                eat.ReleaseMutex();
                Thread.Sleep(1000);
                Console.WriteLine("哲学家{0}正在用餐...",Thread.CurrentThread.Name);
                //用餐完毕后放下筷子
                chopstick[int.Parse(Thread.CurrentThread.Name)-1] = 1;
                chopstick[(int.Parse(Thread.CurrentThread.Name)) % 4] = 1;
                Console.WriteLine("哲学家{0}用餐完毕,继续思考", Thread.CurrentThread.Name);
            }
        }

        代码5.C#模拟哲学家用餐问题

     

        运行结果如图7所示。

        7

        图8.哲学家问题运行结果

     

     

    总结

        本文介绍了进程的同步和互斥的概念,临界区的概念,以及实现进程同步互斥的方式,并解决了3种实现同步的经典问题,并给出了相应的C#模拟代码。操作系统对于进程的管理是是计算机编程的基础之一,因此掌握这个概念会使你的内功更上一层:-D

    展开全文
  • java封装 继承 多态 的概念和作用

    千次阅读 2019-12-01 14:46:43
    一:概念 封装: 在java中,我们对类的封装,对方法的封装,在其他类中只需要调用这个类或者方法就行。 通俗点理解,我们在启动汽车的时候。汽车对里面的零件构造进行了封装,只要提供给我们一个钥匙口,我们只...
  • DataIngestion数据获取这一块的概念比较混乱,主要是涉及太多的名词概念,很混淆,我大致粗略的翻译一下。不保证一定对。数据格式概要在进行数据工程或者数据工作前,数据科学应该针对数据格式有一个全面的了解。...
  • 浅谈linux用户与用户组的概念

    千次阅读 2017-06-30 10:54:18
    Linux用户和用户组概念和命令浅析
  • 今天,小编整理了55关于6G概念、智能交通、智慧政务细分领域龙头企业的名单。16G概念上市企业市值排名TOP156G,也是5G之后的延伸,即第六代移动通信标准,也被称为第六代移动通信技术...
  • 回顾了物理学研究黑体辐射问题的历史过程,阐述了普朗克(PLANK M)利用数学内插法找到适用于黑体辐射公式的科学思想方法,探讨普朗克这一工作的深远意义以及对人们的启示。
  • 重点用能单位全国约17000,能源消费量占全国能源消费总量的60%,是节能工作的重点对象,抓好这部分企业的节能管理工作,是实现“十三五”单位GDP能耗比2015年降低15%、能源消费总量控制在50亿吨标准煤以内的重要...
  • 泛函分析他的基础概念

    千次阅读 2021-01-05 22:37:48
    泛函分析他的基础概念 泛函分析属于一个半老不新的概念,出现将近百年,因为脱身于理论物理,多多少少带点高冷范儿,不过在日常分析中,具有非常广阔的应用。 泛函分析牛逼在哪? 给予了函数这一概念更为一般的...
  • 统计学基本概念 统计学是在数据分析的基础上,研究测定、收集、整理、归纳分析反映数据数据,以便给出正确消息的科学。随着大数据时代来临,统计的面貌也逐渐改变,与信息、计算等领域密切结合,是数据科学中的...
  • 机器学习深度学习概念入门

    万次阅读 多人点赞 2017-06-03 11:27:28
     对于很多初入学习人工智能的学习者来说,对机器学习、深度学习、人工智能的概念和区别还不是很了解,那么接下来就给大家从概念和特点上进行阐述。先看下三者的关系。  人工智能包括了机器学习,机器学习包括...
  • 概念作为风靡全球的经典教材,看到大家对它如此的热情,我无比的感动,可见到各位学习它的方法,作为已经“背”完新概念全四册的我,又深表忧虑。 两年前,我也是新概念的忠实追随者,买齐全套后,恨不得一个月...
  • 创业是一个古老的概念,但近年来,传统企业出现了几种变化。... 本文将探讨社会企业精神概念含义,社会企业的特征,促进社会企业精神的新工作方式,网络的力量,社会企业精神的定位及其组织设计。
  • 光流的基本概念

    千次阅读 2019-04-15 11:57:08
    光流(optical flow)法是目前运动图像分析的重要方法,它的概念是由 James J. Gibson于20世纪40年代首先提出的,指时变图像中模式运动速度。因为当物体在运动时,它在图像上对应点的亮度模式也在运动。 简介 这种图像...
  • 挖掘儒家文化背景下的“企业”特征,不仅是构建中国特色管理理论的需要,而且对于中国企业的培养创造具有重要的现实意义。 本研究从儒家文化视角出发,全面系统地梳理了各个时期企业理论的发展,以期从儒家...
  • “空间”“时间”是物理学中的独立概念,两者之间缺乏强联系,故“空时”(或“时空)不是有物理实在性的概念。说“空时(时空)可以弯曲”是缺乏实际意义的。 宇宙学中对 Hubble红移的主流解释是“所有的星系都在退走”...
  • 论弗雷格的概念

    千次阅读 2018-03-01 00:00:00
    鉴于自然语言自身的缺陷(如模糊性、语形语义的复杂性等)导致逻辑推理无法精确刻画,弗雷格在《概念文字》中试图构建一种模仿算数语言的形式语言,以构建一种能精确刻画逻辑推理的形式语言。在上述构建当中,弗雷格...
  • 时间序列是按时间排序的一系列观察或测量。...在本文中,我们将介绍时间序列分析中 5 个必须了解的术语和概念。 确定性随机过程 我们通过区分确定性随机过程来开始我们的讨论。 确定性过程(deterministic
  • 《人工智能导论》第二章 概念表示

    千次阅读 2021-01-14 18:26:28
    知识由概念组成,概念是构成人类知识世界的基本单元。 人们借助概念才能正确地理解世界,与他人交流,传递各种信息。如果缺少对应的概念,将自己的想法表达出来是非常困难甚至是不可能的。能够准确地使用各种概念是...
  • 5.1 统计的含义 5.2 统计学的发展简史 5.3 统计学的基本概念 5.4 几种重要的概率分布 5.5 统计学的分类 5.6 描述统计 5.7 推断统计 5.1 绘制平面图过程 GCHART(CHART) 5.2 计算相关系数过程CORR 5.3 SAS与dBASE...
  • 蓝牙的基本概念以及发展轨迹 - 蓝牙的前生后世

    千次阅读 多人点赞 2020-07-20 18:01:58
    第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。 第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,...
  • 将产品概念的内涵由三层次结构扩展为五层次结构,即包括核心产品(Core Benefit)、一般产品(Generic Product)、期望产品(Expected Product)、附加产品(Augmented Product)潜在产品(Potential Product)。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 149,087
精华内容 59,634
关键字:

家的意义和概念