Monthly Archive: July 2020

如何成为一个更好的前端开发者 0

如何成为一个更好的前端开发者

很多人来问我,如何成为一个更好的前端开发者,当我们已经有了一些前端的开发经验之后,如何进入下一个level呢? 本文就像一个清单,而不是一个文章。我觉得我们就像朋友之间聊天一样,假如有什么你不是很清楚的,可以再搜搜看相关的内容。 好吧,让我们来看看具体的内容。 理解你的编程语言 其实这个部分是最常的,甚至可以拿出来单独写一篇文章。不过,我们还是放在这里,和别的建议一样。 我们使用编程语言的时候并不需要什么常识,只是某些人定义了一系列规则,然后我们使用这些规则来和机器通信,我们这里就是使用他来和浏览器通信。Javacript也同样,它有自己定义的规则和规范,我们只要像使用其他语言一样遵守就可以了。 下面是一些我的笔记: 类型 了解JS如何进行值类型化,并了解其如何提供访问和使用内存,以及代码的定义部分。 Scope和闭包 在函数中变量是如何和Scope外的变量交流以及和别的Scope的交互的。 变量提升 Javascript提供了一个非常独特的方式和顺序进行读取和执行代码的方案,你应该对这些有所了解。 JS中的面向对象编程(OOP) 这些年JS也正在提供一些方案来让开发者可以使用一些通用的编程范例。 Async JS 你要build是一个动态的,单页的实时应用,那么你最终是需要写代码来等待一些request的返回,同时又可以在等待时做别的事情。 首先了解Callback函数,然后Promises,玩玩async-await方案,然后了解Generator Functions,然后把这些融合到用XHR请求获取数据,然后等待数据并使用他们更新你的HTML内容并基于它做一些操作。 Array的高阶函数 还在用循环来访问array吗?为什么不试一试“map,find,filter,reduce”等等函数。这些函数都是很有作用的函数。 JS是怎样和浏览器交互的 使用全局的对象,比如window,document等等,JS如何访问HTML元素以及如何注册events以及handle相关的action 对象的解构和运算符 非常方便,尤其是你想访问数据解构或者状态中的一部分,或者不丢失不变性的前提下对其更改的时候 Git的版本控制 当你工作在一个比较大公司,哪怕是一个小的团队的时候,如何管理相关的代码,尤其是不同环境的代码,比如production,staging等等。 所以,你需要理解如何运行git的命令,比如git checkout,checkout -b, git merge等等。你可能需要理解cherry-pick一个功能,或者你需要git revert一些代码。大胆地去用这些命令吧,希望你能够细化它。...

0

什么是Web应用架构

就像设计一个产品,你的网页也需要一个很好的蓝图来进行设计,在UI/UX设计的时候,我们称之为原型,这里我们使用“Web应用架构”这个名词。 本文,我们就从开发者的角度来讨论一下这个话题并介绍相关的知识。 什么是Web应用架构 所谓web应用架构就是一个用来处理内外部各个组件的框架,他主要处理这些组件之间的连接和交互(中间层,用户接口以及数据库等等)。这样,web就可以被客户所使用。 它最初的功能就是让所有的组件都能够同时工作,然后为之后的扩展打下一个更好的基础。 很多开发者都会忽略这一步,而直接开发网页。然而,假如你希望你的网站可以很方便的扩展,并且可靠,安全,那么这一步显然是不可忽略的。 所有人包括开发者,客户设置最终的终端用户都应当参与进来,看看什么样的网站是真正需要的。 Web应用架构组件 Web应用架构有很多种组件,不过总得来说他可以分为两个大类,一个是用户接口组件,另外一个结构性组件。 用户接口组件就是用来创建web应用接口的。换句话说,这些组件和你的显示,设置是密切相关的。他们包含仪表板,统计数据,通知元素,布局,活动跟踪,配置设置等等方面。 另一方面,结构性组件则在构建一个web应用功能的部分起到了很大的作用。因为,他们是允许用户和网页交互的组件,简单的举三个例子: 1)web应用服务器:用Python,PHP,Java,.NET等等开发,他有相关的商业逻辑(或者规则,限制),这样网站就可以自动的运行了。 2)数据库服务器:它存储了网页所需要的数据,并且提供查询,修改等等功能。 3)浏览器:用户是通过它来和网站最终进行交互的。CSS,HTML和Javascript是三大用于开发这个的语言。 Web应用架构的类型 取决于各种各样的因素和目的,开发者最终会选择下面三种的一种来进行web应用的开发: 1)单页应用:他和一个桌面应用类似:“可以使用web server的数据来重写浏览器中的页面,而不需要重新加载整个页面。”这样的话,用户的体验会变得很好,因为不会产生任何的中断​。目前来看,这也是最流行的web应用架构。 2)微服务架构:这种架构会把整个网页分成多个小的部分,然后一个部分一个部分地进行开发。这种网页,用户可以很方面的推出他们的产品,因为每次都只有一个功能在运行。 3)无服务器框架:当选择这种的时候,不在需要管理结构。你所需要做的就是开发功能。 通用的创建Web应用架构的技术 Java Web应用架构 他可以很容易地把各种Java框架或者工具结合起来,不管他们有多复杂或者简单。有了这样的特性,所以一般会用在比较大的项目或者商业开发环境中。 基于云的架构 所有的数据和功能都存储在云上或者一个本地服务器上。这样一来,不同的系统相互之间都可以交互,哪怕他们之间没有直接连接。 RabbitMQ 这是一个可以存储Message Queue的地方,然后软件可以获取响应的Message。开发者在建立交易系统的时候可以使用他。 .NET Web服务器架构 可以在一台机器上处理跨平台的软件,Docker,微服务是它最重要的能力之一。除此之外,你设置不需要源码来存储数据。 PHP Web应用架构...

0

StackOverflow 2020开发者调查报告

StackOverflow发布了2020年开发者调查报告,此次有65000名开发者参与了调查,比较可惜的是中国参与的开发者却很少。不过这份报告也大概体现了目前全球开发者的情况了,下面我们来看看具体的报告结果: 关键结果 过去五年来,Python一直在稳步上升,不过在最喜欢的技术排名中,它从去年的第二掉到了今年的第三,Typescript反超到第二。Rust连续第五年登上了最受喜欢技术的头把交椅。 在所有的职位中,站点可靠工程师和DevOps专家仍然是薪水最高的职位。80%的受访者认为,DevOps是有用的,44%的组织有最少一个专门的DevOps雇员。 52%的人发现他所搜索的内容以前曾今看到过的时候的反应是:“嘿,我的老朋友”。 当遇到无法解决的问题如何做的时候,90%的人会选择来Stack Overflow寻找答案。 75%的开发者会偶尔加班 — 一个季度一天或两天。25%的人一个星期加班1-2天。 澳大利亚的受访者用于平均最长年限的编程年限16.9年,紧接着是英国和美国。相应的美国和英国的开发者平均年龄最大,分别是33.7和33.1岁。 0.3%的受访者在做这个调查之前从来没有访问过Stack Overflow。 超过40%的受访者在除了Stack Overflow之外的开发者社区注册了会员。 超过15%的人认为Stack Overflow比去年更好了,这是个好消息,但仍然需要继续努力。 我们仍然看到有色人种在专业开发中的比例较小,但的确也看到了一些这方面的进步。 受访者分布 中国的受访者目前只占到了0.57%。 开发者角色 开发者类型 看来这是一个多选项,55%的受访者是后端开发或者全栈开发,单纯的前端开发只有37.1%。 代码是否是一个爱好 很多人在工作之外还在努力写代码,78%的认为他们会把写代码作为一个爱好。从受访者来看,有家庭的人以及妇女则更多的倾向于写代码不是一个爱好。 经验 学习代码多少年 主要是从学习代码到现在多少年 专业写代码多少年 这个就是我们正常说的码农工作多少年了,65%的人少于10年。看来不管国内国外,工作10年还在写代码的人果然不是主流。 各种岗位写代码的年限 基本可以看出,有越高年限编程经验的人,所处的职位也是相匹配的。前端开发果然所我们所想的垫底了,也许是以前前端开发不是你们流行。 几岁写第一行代码 最近流行写代码要从娃娃抓起,这个调查显示54%的人的第一行代码是在16岁之前写的,这果然验证写代码要从娃娃抓起的理论。...

0

使用Node.js开发可伸缩web app的七个优势

最近这些年,Node.js已经成为创建可伸缩web应用的首选技术。基于他所提供的各种好处,有很多开发者都会使用它。2020年Stack Overflow的调查,51.9%的开发者认为node.js是最受欢迎的web开发框架。 从目前的趋势来看,基于下面的这些优势,Node.js在2020仍然会成为开发者的首选。 Node.js为实时应用提供了很好的性能 用Node.js支持多任务,这使得其上开发的应用有很多的好处。和其它平台不同,他单线程,事件驱动的架构可以有效地处理多个并发请求,而不会阻塞RAM。他的事件循环,非阻塞的IO操作可以让代码有序执行,这会显著地影响应用的整体性能。 Node.js如此强大在于他是基于Google Chrome V8引擎创建的,并且是用C++写的。他可以很有效地把Javacript代码解析成高效和快速的机器码。更重要的是,Google投入了很多精力在它的引擎上来优化性能,安全性,以及提供对JavaScript各种特性的支持。这些都直接影响了V8的性能,当然最终也会影响Node.js的性能。 为了让这个优势能够持续,Google引入了一个V8的基准测试,以便Node.js能够更快地执行,更好的编译,有更好的安全补丁以及扩展能力。 Node.js为现代应用提供了很好的扩展性 有越来越多的千万级客户使用Node.js,比如Netflix,Walmart,Uber,Paypal等等,都已经证明了Node.js是一个很好地具有扩展性的方案。 目前的尖端技术,像集群模块(cluster)都提供了很多功能。它很方便地提供了多个CPU的负载平衡,可以通过小的模块很方便地实现我们想要的输出,而不需要耗尽RAM的进程。另外Node.js使用了可伸缩的非阻塞的事件循环机制,并且使得服务器可以无缝地处理各种请求。 从开发者的角度来说,Node.js允许你使用微服务,从而可以把应用分成很多小的部分。这样,你就可以让不同的团队来处理不同的任务,可以实现快速的开发,并且维护起来也很方便。Node.js和微服务可以让应用按照需求进行伸缩,从而使用最少的资源实现更高的性能。 Node.js有活跃的社区支持 有上百万的开发者活跃在社区,所以不管是多么复杂的问题,我们应该都可以解决。 众所周知的NPM是世界上最大的包管理。他提供了数不尽的工具和库,你可以在你的项目中使用他们。你还可以在github上发现很多你想要的各种资源。 目前IBM也在大力支持它,他们计划继续在赞助和在重要活动上推广这个项目。另外他们还计划继续推动Node.js和JsFoundations的合并,这必然会产生一个更好的JavaScript生态系统。 这些活跃的社区是很多巨头在背后的,比如Amazon,Google,Facebook以及Netflix等等。他们已经贡献了很多开源的解决方案,有了他们的支持,再加上我们这么多的开发者,这项技术的不断成长必然是可以预见的。 Node.js非常易于学习和便于使用 毫无疑问,Javascript是最流行和广泛使用编程语言。对web开发者来说,Node.js很容易上手和学习。用他来写代码非常简单。 2016的一项调查显示,Javascript是前端开发者们最喜欢的编程语言。哪怕是一个新手,学习和使用Node.js也不需要花费太多的时间。 StackOverflow的一个最近调查显示,49.9%的专业开发者,选举Node.js作为最常使用的技术。 Node.js提供了各种扩展性满足用户的需求 企业永远会不停发展。假如你的用户已经到了瓶颈或者想要看看别的领域,Node.js都可以很方便地进行扩展并满足用户不断发展的需求。Node.js可以使用内置的API来开发HTTP和DNS服务器以及JSON的使用,这些都是的客户端和服务器的交互变得尤其简单。 Node.js可以使用快速的cache来降低加载时间 Node.js使用他的caching模块,可以降低任务工作量和代码的再执行。每次你的应用的第一个模块得到一个请求后,他都会cache在app内的内存中。有了这些,你的应用可以在毫秒时间内得到想要的数据,而不需要等很长时间。 Node.js可以自由地创建跨平台应用 有了Node.js之后,你就可以使用Electron和NW.js来创建跨平台的实时web应用。你再也不用花费时间来为不同的桌面版本写各种不同的代码了 — Windows,Linux和MacOS。 以后,你的开发团队开发各种不同桌面应用,而不需要理解Objective-C,C#或者别的语言。另外,开发者们可以通过Google Chrome Developer Tools来build,debug和写代码。...

0

Python教程之创建多进程

现在很多CPU都支持多核,甚至是手机都已经开始支持多核了。而Python的GIL(Global Interpreter Locko)则使得其没法使用这些多核带来的优势。还好从Python2.6开始,引入了multiprocessing模块,我们终于可以使用多核带来的便利了。 本文,你会学习到下面这些内容: 使用多进程的优点 使用多进程的缺点 使用multiprocessing来创建多进程 Process的子类化 创建进程池 本文并不是一个multiprocessing的全面的介绍,假如你想全面的了解他,可以参见官方的文档: https://docs.python.org/2/library/multiprocessing.html 下面让我们开始吧! 使用多进程的优点 使用多进程有很多优点: 多进程使用独立的内存空间 相比于线程,代码更加直观 能够使用多个CPU/多核 避免GIL 子进程可以被kill(和thread不同) multiprocessing有和threading.Thread类似的接口 对CPU绑定的进程比较好(加密,二进制搜索,矩阵乘法等) 下面我们来看看使用多进程有什么缺点: 使用多进程的缺点 使用多进程也有一些缺点: 进程间通信更加复杂 内存的占用大于线程 使用multiprocessing来创建进程 multiprocessing是用来模拟threading.Thread类工作的。下面就是一个使用它的例子: 首先第一步需要import multiprocessing模块,另外两个import分别是为random和time服务的。 worker函数就是用来假装做一些事情,传入一个name的参数,没有什么返回,他首先打印name的值,然后随机sleep一段时间用来模拟做一段很长时间的工作,最后打印work finish。 紧接着,你使用multiprocessing.Process创建了5个进程,他的使用和threading.Tread()比较类似,你告诉Process哪个目标函数需要调用,以及会传入什么参数给他们,然后你调用了start函数来启动进程。另外你会把这些进程加入到一个list中。 最后,你遍历这个list,调用join方法,这个方法其实就是告诉Python等到进程结束。...

0

我是如何从0开始做大一个SaaS产品的

对很多有创业精神的程序员来说,创建一个成功的SaaS的产品一直是一个梦想。在我创建我的SaaS的过程中,我发现和别的创业者一起分享和对比是这个过程中必不可少的部分。假如没有这些分享,我可能也没法创建一个个成功的SaaS的产品。本文,我就会分享,在我创建SaaS的过程中的所想所为,主要是我如何开始创建SaaS的产品以及到最后,我是如何获得第一个付费用户的。 不管你是想创建一个产品还是已经创建了产品,这篇文章都会对你有所帮助,你可以看看我是如何做的,然后和自己相比较,希望能带给你新的启发。 我个人每周都会特地去花5个小时分析别人是如何做的,我总是想看看新的想法,以及如何避免犯别人的错误,同时看看有没有什么新的策略可以用来提高用户的体验。 正是基于这样的原因,我的分享将不会有所保留,他会包括我已经做了的,以及什么我并没有做,我们的目标就是希望别人能够从中有所收获。 本文将按照时间顺序分为以下七个部分,基本上包含了所有我做过的事情: 探测问题 量化问题 分析竞争对手,并看他们是如何解决这个问题的。 开发第一个prototype 抛弃所有再次重新开始 得到第一个订阅 怎样继续前行 我开发的SaaS产品是Insepctor,他是一个实时的监控工具,可以用来帮助软件开发者检测他们的应用,以防止因为技术的故障而失去客户和金钱。 探测问题 过去10年和软件开发者打交道的经验告诉我,每天去处理和用户相关的技术问题,对他们来说太难了。 虽然开发团队和用户有着紧密的联系,但是这对开发软件产品的公司来说是非常危险的,因为当真的有问题的时候,你就会发现这种紧密联系是多么的脆弱。 客户不希望有问题,这个显而易见,没有人喜欢有问题,并且本能地会去把问题最小化。但是下意识的否则现实的问题其实并不能真正解决问题,甚至会让客户怀疑他是否还应该继续付费。 客户其实并没有兴趣帮你报告问题,他们只会简单的离开,选择一个新的应用,下次你再见到他可能也许是多年以后了。 尽管如此,很多我合作的团队还是在使用一个众所周知的方法来探测应用是否有问题:“假如有用户联系你,那么你的应用就是有问题的”,而这并不是一个技术的解决方案。 但是很奇怪的是,我们总是有各种各样的理由,比如budget有限,客户需要很急,管理的问题等等,让开发者有很大的压力,所以最终选择的总是一个修修补补的方案来解决这个问题。 我的经验告诉,这不是一个最终的解决方案。 量化问题 2019年的时候,我刚刚完成了一个项目,并且准备花点时间休息一下。以往几年,我总是用这样的机会来看看有没有什么商业上的机会,可以运用我的技术来帮助我做一些我自己的商业。 从我的开发经验来看,我发现一个简单的及时的检测系统将会帮忙开发团队来及时发现他们应用的问题,而不再需要依赖于用户来报告问题。但另一方面来说,我不需要一个能检测所有东西的工具,因为一般来说所有东西通常也意味着什么也不是。 并且我不想他很复杂,因为我不想让他们需要花费一一个月来学习怎么使用,或者需要雇佣一些人来专门做这件事,方便使用,易于上手是我的目标。 第一步,我需要看的是市面上是否已经有了类似的软件,所以我google了一下“应用检测”,出现了941,000,000条记录: 哇,看起来这是一个很普遍的问题。那这个问题究竟是有普遍呢? 我们知道软件开发团队有时效率很低是因为一个工作的预估的复杂度和对商业的影响有时有很大的差别。尤其在大规模的情况下尤为明显,Twitter上有一个调查的结果如下: 有50%的开发者花费超过50%的时间就是为了检测他们的应用是否还在正常的工作。 软件开发者的薪资都是很高的,通常我们付给他们钱是为了让他们开发程序,假如一个开发者每天都花费超过50%的时间来检测他们的应用是否正常工作,那么一个自动化的检测工具肯定是值得我们花钱去购买的。 那么问题来了,为什么还没有人来做这件事情呢? 评估竞争对手和他们解决问题的方法 我思考了一个公司在决定是否买一个工具来提供生产率的时候用来进行评估的两个参数: 易用性...

六个Javascript新手需要注意的事情 0

六个Javascript新手需要注意的事情

我们写这篇文章当然不是说Javascript不好,只是说它有些特性和我们通常理解的面向对象的语言有些差别。而这些差别很有可能和你所想的有很大的差别。但并不是说他们就不好,从另外一个方面来讲,假如你习惯了,也许这也是Javascript独特的魅力。 1. 三个等号 假如你学过别的编程语言,比如Java之类的,你肯定知道一个等号表示赋值,两个等号表示比较。但是在Javascript中,你会发现这里不仅有两个等号,还有三个等号===。我们应该使用哪个呢?他们之间有什么差别的呢?其实两个等号,简单说就是只比较他们的值,而不管他的类型,比如: 这里会返回true,因为他们的值是相等的,哪怕他们是不同的类型。 再看下面这个例子: 在三个等号的情况下,上面一个例子会发现’2’和2的类型不同,所以就会直接返回false。也就是说三个等号需要是同样的类型,然后才进行值的比较。 通常来说,会推荐使用三个等号来进行比较。 2. 很多创建对象的方法 在Java或者C#中,你会有一个类,然后基于类创建对象。而在Javascript中,则更加灵活,你可以使用一下方法来创建对象: 使用类:Javascript中也有class,你可以定义相应的方法,域,getter, setter的调用等等。下面就是一个例子: 对象字面量(Object Literal): 你可以不定义类就创建对象,你只要使用{}就可以了,如下所示: 使用 Object create:你可以使用object.create()来创建对象,他是基于现有对象的prototype来创建的。参见下面的例子: 3. 块语句,看起来好像没有作用域 一些块语句,比如if, for, while等等,并不会创建一个本地的局部域。这也就意味着你在他们里面创建的变量,在他们外面是可以访问的。比如: 这里,console.log(i)会打印10,是不是很惊喜,为什么这个i在for循环之外还能访问呢?假如你去问Javascript的创始人Brendan Eich,他回答你,这就是个feature,哈哈。 假如你想让Javascript这个特性和别的你熟悉的语言类似的话,那么你可以使用let或者const,像下面这样: 这样之后,你会得到i没有定义的错误。为什么会这样,因为let允许你定义只在某一个块中存在的变量。所以,这就是使用let而不是var的一个典型场景。 4. 上下文中,this的值是什么 你可能听说过一个玩笑,就是根本没有知道this是什么,假如一个空文件,那么this是一个全局的语境。比如下面这个代码: 上面代码中,我们把name赋给global变量,这个this的值就从global的语境中得来。 我们再来看下面这个代码: 在这里,this就是这个object本身了,这里我们知道name是什么,比如例子中就是chris。...

0

关于Web开发的十个流行的Github项目 — 2020年七月

1. Lazysizes Lazysizes是一个非常快捷(无垃圾),对SEO非常友好且可以自动初始化的一个延迟加载器。它支持图片(包括响应的图像图片/密码集),iframe,脚本、小工具等等。 GitHub网址: https://github.com/aFarkas/lazysizes 2. Slate Slate可以帮助你创建漂亮的,智能的可响应的API文档。 Github网址: https://github.com/slatedocs/slate 3. Simplefolio 开发者的最小作品集模板。 Github网址:https://github.com/cobidev/simplefolio 4. Skeleton Skeleton是一个简单的响应式的样本,可以启动任何响应式的项目。 Github网址: https://github.com/dhg/Skeleton 5. Dev Icon Devicon的目标是收集到所有能够展示开发语言和工具的图标。每一个icon都有多个版本:font/svg, original/plain/line, 有颜色的/无颜色的,有字标和无字标的。 目前Devicon已经有了78个图标和200+个版本,而且还在增长中。 Github网址: https://github.com/konpa/devicon 6. minireset.css 他是一个小的CSS重置,包含了下面这些内容,包含重置字体大小,重置块Margin,重置表格等等。 Github网址: https://github.com/jgthms/minireset.css 7....

0

SHA-2是如何工作的:一个关于SHA-256的教程

SHA-2 (安全散列算法2),其中包括SHA-256,是一个非常流行的散列算法。本文,我们将通过一个实例来尽可能地把这个算法简单的介绍一下。 SHA-2以他的安全性著称,(不像SHA-1那样容易破解),并且它的速度很快。在未生成密钥的情况下,比如挖掘比特币,像SHA-2这种快速的hash算法是非常有优势的。 什么是一个哈希函数? 假如你想比较详细的立即通用的哈希函数,可以参考这里。本文就不详细介绍了,不过我们还是要回顾一下哈希函数的三个重要的作用: 确定性的加扰数据。 接收任何长度的输入,但是输入的长度是固定的。 操作不可逆,也就是说不能从输出推出输入。 SHA-2 VS SHA-256 SHA-2是一个算法,他是一个通用的产生hash数据的想法。SHA-256就是假如一些额外的常量,用来定义SHA-2算法的行为。一个比较常见的常量就是输出的长度。比如256或者512,用这个来设置他们输出的比特大小。 下面让我们来一步一步看一个关于SHA-256的例子。 SHA-256 “Hello World” 第一步 – 预处理 把“hello world”转变为二进制:  在后面加上一个1 填充0,使得它是512的整数倍减去64比特,我们这里选择了448比特 在最后加入64比特,这个64比特用来表示之前输入的二进制的长度,用大端来表示。我们这里是88,所以二进制就是“1011000” 这样我们就有了我们的输入,他总是可以被512整除的。 第二步 — 初始化哈希值 (h) 现在我们来创建8个哈希值,他们是硬编码,代表前8个素数的平方根的小数部分的前32位: 2,3,5,7,11,13,17,19 第三步 — 初始化一个舍入常数...

0

AI聊天机器人 — 机遇和挑战并存

也许AI领域最广泛和突出的应用就是各种各样的AI聊天机器人了。聊天机器人已经成为了大的组织的内部以及外部交流策略的不可或缺的一部分。聊天机器人已经在工业上取代人类成为了第一级查询的解决方案。这些方案中,终端用户都是直接和聊天机器人交互的。 什么是聊天机器人? 聊天机器人是基于各种准则,模拟人类和终端用户进行交流。也就是说,聊天机器人可以像人类一样和你交流,他基于开始预定义的规则和逻辑问你问题,并且回答你的问题。 得益于复杂的机器学习算法,聊天机器人可以让电脑程序来模拟人类交流,并且能够对输入的查询做出相应的反应。因为聊天机器人由AI所驱动,所以他们能够自我学习并且理解人类的语言,而不仅仅是电脑的命令。他们的效率,正确率和总的智能程度会随着他们不断的对话而不断增长。 AI聊天机器人怎么工作? 聊天机器人和信息接口类似,他可以响应用户的查询,就像人类一样。他们看起来和别的APP类似,但是他们的UI层工作起来不太一样。机器学习的算法为人类和聊天机器人之间交流提供了动力。 机器学习的算法把你的查询或者消息分解成人类能够理解的自然语言(使用NLP的技术),然后在用你所期待的方式返回相应的应答。  聊天机器人如何工作的例子 假如你有一个基于AI的聊天机器人在你的手机或者电脑上,然后你想从LA去纽约。你可以打开这个聊天机器人,然后输入以下信息: “预订一个飞机票,从LA飞到纽约” 你也许会得到下面这样的回答: “几个人和你一起飞?” 当你回答了这个问题,机器人会立即返回所有适合的航班信息。听起来很厉害,对不对? 这个从机器返回的回答看起来很自然,就像人类的回答一样。但是你知道这后面是怎样实现的吗? 首先,机器需要理解你输入的是什么意思。聊天机器人是通过很多技术来实现这个的,比如智能神经网络,文本分类器以及自然语言理解等等。机器的回答需要通过适合的信息来回复,至少看起来是很自然的类似人类回答。这是通过自然语言产生来实现的(NLG) 我们来深入了解一下这些技术: 文本分类器 这个技术中,单词和句子被分成有意义的意图。聊天机器人理解这些意图,然后根据意图来做出响应。 文本分类就是把一系列预定义的分类分配给内容。通过自然语言处理,文本分类器分析文本并且创建了一系列预定义的标签或者基于输出做出反应。 自然语言处理 机器人很依赖自然处理过程的技术。人类的语言很混乱,而NLP有这个能力来处理他们。根据各种不同的库,NLP引擎可以区分和提取各种entity,这些entity就是用户提供必需的信息。 聊天机器人可以分为两类: 基于固定规则的聊天机器人 基于机器学习的聊天机器人 基于固定规则的聊天机器人仅仅能够对特定的命令进行响应,所展现出来的智能程度也很固定。假如他所收到的命令是无法理解的,那么他就没有办法给出合适的响应。 然而,基于机器学习的聊天机器人融合了人工智能并且能够理解语言,不仅仅是命令。他可以通过更多的交互和信息来进行学习。 机器学习是这个系统的是否能够不需要人工干预就学习过去的经验,并且能够使用他所学到的东西。 计算机系统使用机器学习,通过接触到很多例子来进行学习。这个通过例子进行学习的方法和人脑学习是一样的,所以称之为神经网络。机器学习使用的算法是指令序列,他能够命令电脑去做什么。它可以以复杂的方式来安排和组合算法。 当机器收到输入,他需要识别输入,并且创建相应的上下文,这样他就可以知道这个输入需要怎样的输出。因为聊天机器人是通过输入的数据来训练的,他可以找到相应的规律,并保存下来作为参考。 深度学习也是一种机器学习,它采用称为人工神经网络的分层算法。深度学习不是特定任务的算法,而是让系统去分析数据,然后根据数据的表现形式来探索所具有的特征。算法的每一层都包含内部连接的神经元。先前学习的模式和事件可以用来衡量神经元之间的关系。算法可以通过大量数据来寻找模式,然后进行总结看如何对新的数据进行响应。 因此这种方式应用于AI聊天机器人,尤其当预定义的响应没有用的时候。 使用AI聊天机器人的巨大好处 让我们来看看部署AI聊天机器人的一些关键优势: 改进终端用户的体验:聊天机器人给终端用户一个实时的支持,不管是一个零售的商店,还是一个产品的支持中心/网络或者一个商业的前段或者后端办公室,它都可以工作。因为这些接口对终端用户来说是准备好了的,所以完全不需要等待的时间。这也意味着终端用户可以立即得到他们想要的答案,这无疑可以大大提升他们的用户体验。基于查询,机器人可以向用户展示文档,视频等等来帮助解决问题。...