转载自 http://www.infoq.com/cn/articles/the-fourth-industrial-revolution-an-introduction-to-ai

“过去10年我们在忙于打造移动为先的世界。未来10年,我们将步入AI为先的世界。”(谷歌CEO Sundar Pichai,2016年10月)

从亚马逊到Facebook,再到谷歌和微软,全球最顶尖、最有影响力的技术公司都将目光转向了人工智能(AI)。AI到底是什么?为何如此重要?为何现在变得重要?虽然人们对AI的关注与日俱增,但对该领域有着充分理解的依然仅仅只是业内专家。本文意在让更多人了解这一重要的前沿领域。

本文首先会介绍“AI”的含义以及包括“机器学习”在内的一些关键词。我们将介绍“深度学习”这一最有成效的AI分支是如何实现的。同时还会介绍AI试图解决的问题以及这些问题的重要性。最后,我们还将深入介绍为何早在二十世纪五十年代就已诞生的AI这一概念直到今天才开始逐渐成熟。

作为风险投资人,我们需要紧跟能为消费者和企业创造价值的新兴趋势。我们认为AI是计算领域的一次革命,其重要性甚至远远超过移动或云计算。“这实在难以用言语表达,”亚马逊CEO Jeff Bezos写道:“未来20年里,人工智能对全社会产生的影响将大到难以想象。”希望本文可以破除各种喧嚣炒作,向消费者或企业高管,以及创业者和投资人解释这一新兴趋势如此重要的原因。

1. AI是什么?

人工智能:研究智能程序的科学

“人工智能(AI)”这个词由达特茅斯大学助理教授John McCarthy在1956年提出,作为一种统称,AI可用于指代可体现出智能行为的硬件或软件。按照McCarthy教受的说法,这是一种“可以制造出智能的机器,尤其是智能的计算机程序的科学和工程。”

最基本的AI早在几十年前就已诞生,当时的AI可通过基于规则的程序,在某些特定情境中体现出最基本的“智能”。然而这类技术的发展一直受到各种限制,因为足以应对现实世界中各种问题所需的算法实在是太过复杂,很难由人工编程的方式实现。

这里所谓的复杂的活动包括做出医学诊断、预测机器故障时间或衡量某些资产的市值,这些行为中往往涉及数千种数据集和大量变量之间的非线性关系。这种情况下通常难以通过现有数据获得最佳效果,即对我们的预测进行“优化”。对于其他一些情况,例如识别图片中的物体以及翻译语言,此时我们甚至无法开发出用于描述所需“功能”的规则。例如,我们该如何通过编写一系列规则,使得程序能在任何情况下描述出一只狗的外观?

如果能将做出各种复杂预测的困难工作,即数据优化特征(Feature)规范?,从程序员身上转嫁给程序,情况又会怎样?这正是现代化人工智能带给我们的承诺。

机器学习:承担优化任务

机器学习(ML)是AI的一个子集。所有机器学习都是AI,但并非所有AI都是机器学习(图上图1)。当今人们对AI的兴趣主要体现在对机器学习技术的关注中,使得这一技术快速获得了显著进步。

机器学习使得我们可以将某些沉重的工作交给算法处理,进而解决相对于人类来说过于复杂的问题。AI分支的先驱Arthur Samuel在1959年曾经写到,机器学习是“一种能够让计算机在无须进行有针对性的编程情况下,自行获得学习能力的学科领域。”

大部分机器学习技术的目标在于针对特定用例开发一种预测引擎。算法负责接收有关特定领域(例如某人过去看过的所有电影)的信息,通过对输入的信息进行权衡做出有用的预测(此人未来观看其他种类电影的可能性)。通过实现让“计算机自行学习的能力”,我们可以将优化方面的任务,即对可用数据中的不同变量进行权衡,进而面向未来做出精确的预测,交给算法负责。有时候甚至可以更进一步,将“需要考虑的未来”这种初步决策也交给程序处理。

机器学习算法可通过训练进行学习。最开始,可以为算法提供输出结果为已知的样本数据,并将实际结果与预测结果的差异进行对比,随后对所输入内容的权重进行调优,借此改善预测结果的精确度,直到最终获得优化。因此机器学习算法的界定性征(Defining characteristic)就在于通过经验对预测结果进行改善所能取得的质量。我们提供的数据越多(通常大到某种临界点),就能创建出越好的预测引擎(如下图2和图3,需要注意,所需数据集的规模严重取决于具体情境,但无法从下列范例中加以概括。)

目前机器学习方法已经超过15种,每种都可以使用不同的算法结构通过收到的数据对预测进行优化。作为其中的一种方法,“深度学习”在很多全新领域实现了突破性的结果,下文将详细介绍。算法其实还有很多,其他算法虽然不像深度学习那样获得了最为广泛的关注,但也有自己的价值,因为可以适用于更广泛的用例中。除了深度学习,其他最实用的机器学习算法还包括:

  • Random forests(随机丛林)”,通过创建大量决策树对预测进行优化;

  • Bayesian networks(贝叶斯网络)”,使用基于概率的方法分析变量和变量之间的关系,以及
  • 支持向量机(Vector machine)”,可通过多种分类样本并创建模型将新的输入内容分配给某一分类。

每种方法各有利弊,并能混合使用(一种“综合”方法)。针对特定问题选择哪种算法,主要取决于各种因素,包括可用数据集的本质特征等。实际上开发者通常趋向于通过多种实验确定最佳算法。

机器学习技术的用例因具体需求和想象力而各不相同。只要有合适的数据,我们就可以为无数用途构建所需的算法,例如:根据购买记录推荐顾客可能愿意购买的产品,预测汽车组装流水线上的机械手什么时候会故障,预测邮件地址是否输入有误,估算某笔信用卡交易存在欺诈情况的可能性等。

深度学习:开始处理特征规范

就算借助通用用途的机器学习(随机丛林、贝叶斯网络、支持向量机等),编写能良好执行某类任务的程序这也是一项困难的工作,从语言的理解到图片中物体的识别不出其外。为什么?因为我们无法用足够实用并且可靠的方式明确指定所要优化的特征。举例来说,如果希望编写能识别车辆图片的计算机程序,我们根本不能通过为算法指定车辆特征的方式确保在任何情况下均能获得正确的识别结果。车辆有着不同的外形、尺寸和颜色,车辆的位置、朝向以及具体形态也多种多样。背景、光照,以及众多其他因素都会对物体的外观产生影响。此时若要编写规则,需要考虑的变化实在是太多了。就算可以做到这一切,整个解决方案的缩放能力也会受到极大限制:我们必须为打算识别的每个类型的物体分别编写一套程序。

拥抱深度学习(DL)吧,该技术让人工智能领域产生了脱胎换骨的革新。深度学习是机器学习的一个子集,也是超过15种不同方法之一。所有深度学习均为机器学习,但并非所有机器学习均为深度学习(见下图4)。

深度学习很有用,避免了程序员不得不自行处理特征规范(定义要在数据种分析的特征)或优化(如何对数据进行权衡以提供更精确的预测)的麻烦,这些可交给算法来做。

这是如何实现的?深度学习的突破之处在于对大脑,而非整个世界进行建模。人类的大脑会学着做各种困难的事,例如理解语音和识别物体,这并不是通过事无巨细的规则实现的,而是通过各种实践和反馈实现。孩提时期,我们会逐渐开始探索整个世界(例如看到一张汽车的图片),做出预测(“看,汽车!”),并收到反馈(“你说的没错!”)。并不需要各种琐碎的规则,我们可以通过训练自行学习。

深度学习使用了类似的方法。人工制造的仅仅是基于软件的计算器,借此模拟出与大脑中神经元相互连接后所实现的类似功能。通过这种计算机组成一个“神经网络”,接受输入(继续上文的例子,一张汽车的图片),对输入的内容进行分析进而做出判断,并了解自己的判断是否正确。如果输出结果是错误的,将由算法对神经元之间的连接进行调教,进而改变后续的预测。最初这个网络可能会经常犯错,但随着我们向TA提供数百万个样本,神经元之间的连接将获得调优,使得整个神经网络能在几乎所有情况下做出正确的判断。实践出(近似的)真知。

通过这种过程,随着效果日渐好转,现在我们已经可以:

  • 识别图片中的元素;

  • 实时进行两种语言的互译;
  • 通过语音命令控制设备(例如苹果的Siri、Google Now、亚马逊Alexa,以及微软小娜);
  • 预测基因变异对DNA转录的影响;
  • 分析客户评论中的情绪;
  • 检测医疗影像中的肿瘤等。

深度学习并不能用来解决所有问题。这种方式通常需要用极大量的数据集进行训练。神经网络的训练和运行需要投入大量计算处理能力,此外这种方法还存在“可解释性”方面的问题:可能很难知道某个神经网络的预测能力是如何发展起来的。但因为能将开发者从复杂的特征规范任务中解脱出来,深度学习已经可以为各种重要问题提供非常成功的预测引擎。因此深度学习已经成为AI开发者手中一款强大的利器。

2. 深度学习是如何工作的?

鉴于其重要性,我们有必要对深度学习的工作原理有所简单理解。深度学习需要使用人造的“神经网络”,这是一种相互连接的“神经元”(基于软件的计算器)的集合。

人造的神经元可以接受一种或多种输入。神经元会针对输入结果执行数学运算,并产生可输出的结果。输出的结果取决于每类输入的“权重”以及神经元的“输入-输出函数”配置(见下图5)。输入-输出函数各异。神经元可以是:

  • 一种线性单位(Linear unit),输出结果与输入总权重成比例;

  • 一种阈值单位(Threshold unit),输出结果为两个级别中的一种,取决于总输入是否高于某一特定值;或
  • 是一种S形单位(Sigmoid unit),输出结果频繁变化,而不像输入那样呈线性变化的态势。

多个神经元相互连接组成了神经网络,一个神经元的输出可以成为另一个神经元的输入(见下图6)。

神经网络可通过组织整理呈现为多层次神经元(这也是“深度”这个词的由来)。其中“输入层”负责接收将由网络处理的信息,例如一组图片。“输出层”负责提供结果。输入和输出层之间还有“隐藏层”,大部分活动均在这一层中发生。通常来说,神经网络上每一层神经元的输出内容均可成为下一层神经元的输入内容之一(见下图7)。

用图像识别算法作为例子来看看吧。假设要识别图片中的人脸。将数据装入神经网络后,第一层负责识别局部对比模式,例如图片边缘,这是一种“底层”特征。随着图片在整个网络中流动,逐渐提取出“高层”特征,例如从边缘到鼻子,再从鼻子到面孔(见下图8)。

在输出层方面,根据训练效果,神经网络会就图片是每种特定类型的可能性给出概率(人脸:97%;气球:2%;树叶:1%)。

通常来说,神经网络的训练过程需要使用大量已经进行过分类的样本。随后算法会通过检测出的错误和神经元之间的连接权重进行调整,借此改善效果。优化过程的重复性极高,训练完成后即可部署系统并对未分类图片进行评估。

上文描述的是一种很简单的神经网络,实际上神经网络的结构可能各异,并且大部分都非常复杂。各种常见变体包括:同层神经元之间的不同连接,每层神经元数量的变化,以及将神经元的输出结果流向前一层网络(“递归”神经网络)的连接。

神经网络的设计和完善需要投入相当多的技能。例如针对特定应用调整网络结构,提供适宜的训练数据集,根据进展调整网络结构,以及多种方法的混合使用等。

3. 为何AI如此重要?

AI如此重要,原因在于这种技术可以顺利解决以往看来极为困难的问题,而这些问题的解决方案能够应用于关乎人类福祉的重要领域:健康、教育、商业、运输、公共事业、娱乐…… 自二十世纪五十年代开始,人们对AI的研究主要侧重于下列五大领域的“查询”:

  1. 推论(Reasoning):通过逻辑推理解决问题的能力。

  2. 知识(Knowledge):运用人类知识的能力(了解现实世界中的某些实体、事件以及情况,并了解到这些元素有不同的属性,并且这些元素可以进行分类)。
  3. 规划(Planning):设置并实现目标的能力(世界存在一种特定的未来预期状态,以及通过采取一系列行动最终推动世界向着这种状态发展的结果)。
  4. 交流(Communication):理解书面和口头语言的能力。
  5. 感知(Perception):通过视觉图像、声音和其他传感器输入推演出世间物件的能力。

AI蕴含着重大的价值,因为在很多情境下,这些能力方面取得的最新进展往往能催生出颠覆性(Revolutionary),而不仅仅是逐渐演变而来(Evolutionary)的其他能力。例如下文列举了AI的部分(远非全部)应用范例:

  1. 推论:法律评估、金融资产管理、金融应用处理、游戏、自主武器系统。

  2. 知识:医学诊断、药品研发、媒体推荐、购买预测、金融市场交易、欺诈检测。
  3. 规划:物流、调度、导航、物理和数字化网络优化、预防式维护、需求预测、库存管理。
  4. 交流:语音控制、智能代理/助理/客户支持、实时翻译书面和口头语言、文字实时转录。
  5. 感知:自动驾驶机动车、医学诊断、安防监控。

未来几年里,机器学习能力将被运用于几乎所有领域的各种过程中。以企业中的某一个职能为例,例如公司内部的人力资源(HR)活动,即可在下列不同过程中运用机器学习技术:

  • 通过更完善的目标定位、更智能的岗位匹配,以及部分程度上自动化实现的评估改善人员招募过程;

  • 通过对个人需求和可能出现的缺席进行预测式规划,改善员工管理能力;
  • 通过向员工提供更有针对性的培训内容建议,实现更有效的员工学习活动;以及
  • 通过预测重要员工可能存在离职风险降低员工流失率。

随着时间的发展,我们期待着机器学习能变成常态。机器学习迟早会成为开发者人手必备的工具,最初也许只能对现有过程进行改善,但有朝一日将实现彻底的革新。

机器学习的深远影响远远胜过这些直接产生的影响。深度学习已经让计算机视觉获得了突飞猛进的提高,例如目前的自动驾驶机动车(轿车和卡车)均已变为现实。但会产生怎样的影响?以目前的英国为例,90%的人员和80%的货物运输是在道路上进行的,仅自动驾驶机动车本身就能产生下列影响:

  • 安全性(90%的机动车事故源于驾驶员注意力不集中);

  • 就业(英国的货运和物流行业员工总数为220万人,年薪总和约为570亿英镑);
  • 保险(Autonomous Research预计经过一段时间后英国的机动车保险保费总额将减少63%);
  • 经济(消费者更愿意按需获得交通服务,而非自行购置机动车);
  • 机动车生产量、城市规划、规章制度……

4. 为何AI直到今天才开始成熟?

有关AI的研究始于二十世纪五十年代,经历过数次虚假的“黎明期”后,为何现在才迎来拐点?由于新算法的陆续完善,所适用数据的大幅丰富,用于训练的硬件日益强大,以及云服务对开发者接受度的逐渐催化,AI的实际运用效果在近些年有了大幅改进。

1. 算法的改进

虽然深度学习算不上一种新技术(早在1965年就有人提出了第一个实际有效的多层神经网络规范?),但最近十年来深度学习算法的革新催生出了截然不同的结果。

识别图像中物体的能力随着卷积神经网络(CNN,Convolutional Neural Network)的发展产生了突飞猛进的提高(如下图9)。受到动物视觉脑皮层工作原理启发设计而来的CNN中,神经网络中的每一层均可充当判断特定模式是否存在所用的筛选器。2015年,微软基于CNN的计算机视觉系统在对图片中物体进行识别方面实现了比人类更高的准确度(计算机:95.1%;人类:94.9%)。“据我们所知,”他们写到:“我们的测试结果是计算机战胜人类的首例。”CNN还可应用于视频和语音识别等更广泛的领域。

与此同时,随着递归神经网络(RNN,Recurrent Neural Network)的诞生,语音和手写识别方面也取得了飞速进展(见下图10)。不同于卷积神经网络仅“向下馈送”的运作方式,RNN可通过反馈连接让数据呈环路流动。RNN还出现了一种更强大的新类型:长短期记忆(LSTM,Long Short-Term Memory)模型。在额外的连接和内存“细胞(Cell)”的帮助下,RNN可以“记住”自己在数千步操作之前看到的数据,并使用这些数据对后续需要关注的内容进行解释:这一特性对语音识别产生了巨大的帮助,因为对下一个词的理解通常会受到之前所处理词汇的影响。从2012年开始,谷歌就在使用LSTM驱动Android中的语音识别系统。就在六周前,微软工程师称他们的系统实现了低至5.9%的单词错误率,这是有史以来首次接近人类能力的水平。


2. 专用硬件

图形处理器(GPU)是一种特殊设计的电子电路,可大幅缩短为深度学习训练神经网络所需的时间。

现代化的GPU最初诞生于二十世纪九十年代末,当时主要是为了为3D游戏和3D开发应用程序进行加速。在3D环境中平移或缩放镜头需要重复用到一种名为矩阵计算的数学运算过程,串行架构的微处理器,包括当今大部分计算机所用的CPU很不适合用来处理此类任务。为了更高效地执行矩阵计算,GPU通常会使用大规模并行架构来制造(Nvidia M40包含3,072个内核)。

神经网络的训练会涉及大量矩阵计算。因此人们发现原本针对3D游戏设计的GPU其实很适合用来对深度学习过程加速。这样做获得了巨大的收效:一颗GPU即可让神经网络的训练时间缩短5倍,针对一些比较大规模的问题甚至可实现10倍甚至更高的加速。在配合针对深度学习框架进行优化的软件开发工具包之后,甚至还可以进一步加快训练速度(见下图11)。


3. 广博的数据

深度学习所用的神经网络通常需要用大量数据集进行训练,样本数量从数千起步,甚至可高达数百万。好在数据的创建速度和可用性也经历了指数形式的增长。今天,随着我们步入“第三波”数据时代,人类平均每天会生成2.2EB(23亿GB)数据,全球数据总量中有90%是过去24个月内创建的。

“第一波”的数据创建时代始于二十世纪八十年代,当时创建的主要是文档和事务数据,这一时期还在可联网台式计算机的普及过程中获得了催化。随后“第二波”数据时代,在可联网智能手机的推动下,诞生了大量非结构化媒体数据(邮件、照片、音乐、视频)、Web数据,以及各种元数据。今天我们正在步入数据的“第三个时代”,工业设施和家庭中部署的机器传感器创造了更多监视用数据、分析用数据,以及更多元数据。

考虑到今天我们所创建的大部分数据都会通过互联网传输,日益膨胀的互联网流量也开始充当人类海量数据生成过程中的代理。1992年,全人类每天平均传输100GB数据,但到2020年,我们将每秒传输61,000GB数据(见下图12,请注意尺度的变化)。

除了通用数据的富足,专用数据资源也在机器学习的推动下与日俱增。例如ImageNet是一个免费提供的数据库,其中已经包含超过1千万张手工分类的图片。该资源的诞生也对深度学习算法物体分类能力的发展起到了推波助澜的效果。

4. 云服务

开发者对机器学习的运用还受到云端机器学习基础架构和业界领先云供应商所提供服务的推动。

谷歌、亚马逊、微软,以及IBM均提供了云端基础架构(用于构建和迭代模型的环境,提供可缩放“GPU即服务”产品,并提供其他相关托管服务),这也使得机器学习能力的开发成本和难度大幅降低。

此外他们还提供了正在飞速发展的一系列云端机器学习服务,开发者可将其(从图像识别到语言翻译)直接用于自己的应用程序内。谷歌的机器学习服务针对下列领域提供了易于访问的服务:视觉(物体识别、显性内容检测、人脸检测、图像情绪分析);语音(语音识别和语音到文字转换);文字分析(实体识别、情绪分析、语言检测和翻译);以及职员工作搜索(机会呈现和基于资历的匹配)。微软认知服务也提供了涵盖视觉、语音、语言、知识和搜索等领域的超过21种服务。

5. 兴趣和创业者

公众对AI的兴趣在过去五年里增加了六倍(见下图13),风投公司对AI公司的注资金额也有了显著增长(见下图14)。我们已经进入了一种良性循环的境地,机器学习的进一步发展正在继续吸引投资、创业者,以及社会各界的关注。尤其是后者,对机器学习的未来发展意义重大。


5. 接下来会怎样?

机器学习能带来数量众多、意义重大的收益。很多收益是看得见的,从无人驾驶机动车到新的人机交互方式等。还有一些收益虽然不那么明显,但也会对日常业务流程和消费者服务提供更强大的能力和效率。

与任何范式转变过程一样,有时过高的期望可能会超出短期内所能实现的潜力。我们期待着未来某一时刻,人们对AI的幻想能够彻底幻灭,随之而来的将会是长期、持续的价值认可,因为机器学习已经被用于改善并革新现有的系统。

在历史上,工业革命曾通过新的电力和传送方式改变了生产和交流方法。第一次工业革命在十八世纪八十年代使用蒸汽机驱动了机械化的生产过程;第二次工业革命在十九世纪七十年代使用电力推动了商品的大规模量产;第三次工业革命在二十世纪七十年代使用电子和软件技术实现了生产和交流的自动化。今天,随着软件逐渐“蚕食”整个世界,我们创造价值的主要来源已成为信息本身的处理。通过用更智能的方式完成这样的工作,机器学习将低调地为我们带来效益和历史意义。

作者David Kelnar阅读英文原文The fourth industrial revolution: a primer on Artificial Intelligence (AI)

第四次工业革命:人工智能(AI)入门的更多相关文章

  1. AI——第四次工业革命

    历史上发生了三次工业革命:第一次是以蒸汽机的发明为代表,改变了长久以来的棉纺织业,人类进入"蒸汽时代":第二次是以汽车的发明和电学的发展为代表,人类的活动范围和时长都极大地扩展,人 ...

  2. 人工智能AI从入门到精通所有视频教程(140G)以及数据资料免费拿

    包含了人工智能AI从入门到精通所有视频教程(140G). 资料获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章,即可获取资源下载链接 更多资源获取,请关注公总号RaoRao1994

  3. AI-Info-Micron-Insight:高速数据:第四次工业革命的助推引擎

    ylbtech-AI-Info-Micron-Insight:高速数据:第四次工业革命的助推引擎 1.返回顶部 1. 高速数据:第四次工业革命的助推引擎 第四次工业革命已然来临,因为数字技术几乎连接了 ...

  4. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics)之间有什么关系?

    本来我以为不需要解释这个问题的,到底数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)有什么区别,但是前几天因为有个学弟问我,我想了想发现我竟然也回答 ...

  5. 【转】人工智能(AI)资料大全

    这里收集的是关于人工智能(AI)的教程.书籍.视频演讲和论文. 欢迎提供更多的信息. 在线教程 麻省理工学院人工智能视频教程 – 麻省理工人工智能课程 人工智能入门 – 人工智能基础学习.Peter ...

  6. 解读 --- 基于微软企业商务应用平台 (Microsoft Dynamics 365) 之上的人工智能 (AI) 解决方案

    9月25日微软今年一年一度的Ignite 2017在佛罗里达州奥兰多市还是如期开幕了.为啥这么说?因为9月初五级飓风厄玛(Hurricane Irma) 在佛罗里达州登陆,在当地造成了挺大的麻烦.在这 ...

  7. 人工智能AI芯片与Maker创意接轨 (中)

    在人工智能AI芯片与Maker创意接轨(上)这篇文章中,介绍人工智能与深度学习,以及深度学习技术的应用,了解内部真实的作业原理,让我们能够跟上这波AI新浪潮.系列文来到了中篇,将详细介绍目前市面上的各 ...

  8. 人工智能AI Boosting HMC Memory Chip

    人工智能AI Boosting HMC Memory Chip Innosilicon的AI Boosting HMC存储芯片适用于高速,高带宽和高性能存储领域,例如AI边缘,数据中心,自动化等. H ...

  9. scrapy爬虫学习系列四:portia的学习入门

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  10. 人工智能--AI篇

    AI背景 在当今互联网信息高速发展的大背景下,人工智能(AI)已经开始走进了千家万户,逐渐和我们的生活接轨,那具体什么是AI呢? 什么是人工智能(AI)? 人工智能:简单理解就是由人制造出来的,有一定 ...

随机推荐

  1. Python3.0版本 从听说python可以做爬虫到自己第一成功做出爬虫的经历

    前言 我自己是个python小白,工作也不是软件行业,但是日常没事时喜欢捣鼓一些小玩意,自身有点C语言基础. 听说python很火,可以做出爬虫去爬一些数据图片视频之类的东东,我的兴趣一下子就来了.然 ...

  2. 第六次 Scrum Meeting

    第六次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/10 22:00 30min 大运村1号楼6F 附Github仓库:WEDO 例会照片 工作情况总结(4.10 ...

  3. form表单提交到Controller之后空值变成逗号

    首先这个错误不是我遇到的,是别人遇到来找我给帮忙调试的(我不会犯这种错误!!!) 错误非常神奇,前端页面的form表单是空的啥都没填,提交到后台之后(后台用@ModelAttribute实体类接受的) ...

  4. Java - 关于子类父类的向上转型,向下转型

    以下Animal为父类,Dog,Cat作为子类,分别继承Animal class Animal{ public void shout(){ System.out.println("叫了一声& ...

  5. Netty构建Http服务器

    Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞.基于事件驱动.高性能.高可靠性和高可定制性.换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络 ...

  6. oracle dump的使用心得

    使用DS开发的时候,有的时候会遇到一个问题:数据库层面定义的空格与DS自已定义的空格概念不一致,导致生成的数据会有一定的问题. 举例来说: 在数据库里面定义CHAR(20),如果插入的字符不足20的时 ...

  7. Loadrunner—关联知识点

    一.关联定义 把脚本中某些写死的数据,转变成是撷取自服务器所发送的.动态的.每次都不一样的数据 二.什么时候需要做关联 要想弄清这个问题,我们首先要知道客户端与服务器端的请求与响应的过程 过程说明: ...

  8. 架构实战项目心得(六):后台服务nosql数据库mongodb

    一.架构介绍        mongodb有几种部署方式,这里采用的是副本集架构(Replica Set).        为了防止单点故障就需要引副本(Replication),当发生硬件故障或者其 ...

  9. js校验数字是否为小数

    js校验数字是否为小数: function checkDot(c) {c = parseFloat(c); -]?[-]*\.[-]*[-]+$/; return r.test(c); }

  10. Rabbit简单队列模式

    1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/ ...