精华内容
下载资源
问答
  • 电子产品代码是与全球标准代码条形码相对应的射频技术代码。电子产品代码是由一系列数字组成,能够辨别具体对象的生产者,产品、定义,序列号。它除了具有全球标准代码能辨识物体的功能外,还可以通过电子产品代码...

    电子产品代码是与全球标准代码条形码相对应的射频技术代码。电子产品代码是由一系列数字组成,能够辨别具体对象的生产者,产品、定义,序列号。它除了具有全球标准代码能辨识物体的功能外,还可以通过电子产品代码网络提供关于产品的附加信息,例如产地,产品历史等,这些数据对於在供给链中特定产品的历史追踪具有关键的作用。这些数据被储存在互联网或其他网络上,只要使用标准的技术就可以进入数据系统,就像进入互联网一样。

    现在世界上的物联网有三大应用架构,分别是基于RFID、传感网络、M2M的物联网应用架构。其中,电子标签是三类技术体系中最灵活的能够把“物”改变成为智能物件的,它的主要应用是把移动和非移动资产贴上标签,实现各种跟踪和管理。

          目前,国际上还没有统一的RFID编码规则。为了更好地推动RFID产业的发展,国际标准化组织ISO、以美国为首的EPCglobal、日本UID等标准化组织纷纷制定RFID相关标准,并在全球积极推广这些标准。 

         基于RFID的物联网架构中作为典型代表的EPCGlobal体系提出了完善的系统架构和信息服务模式。主要由五大技术构成,EPC标签、RFID标签阅读器、多级SAVANT对信息的过滤、EPCIS信息服务系统,以及信息发现服务(包括ONS和PML)。
         与ISO通用性RFID标准相比,EPCglobal标准体系是面向物流供应链领域,可以看成是一个应用标准。EPCglobal的目标是解决供应链的透明性和追踪性,透明性和追踪性是指供应链各环节中所有合作伙伴都能够了解单件物品的相关信息,如位置、生产日期等信息。为此EPCglobal制定了EPC编码标准,它可以实现对所有物品提供单件惟一标识.

     

            EPC(Electronic Product Code)即电子产品编码,是一种编码系统。它建立在EAN.UCC(即全球统一标识系统)条形码的基础之上,并对该条形码系统做了一些扩充,用以实现对单品进行标志。因而EPC并不是取代现行的条码标准,而是由现行的条码标准逐渐过渡到EPC标准或者是在未来的供应链中EPC和EAN.UCC系统共存。

           EPC编码体系是新一代的与GTIN兼容的编码标准,它是全球统一标识系统的延伸和拓展,是全球统一标识系统的重要组成部分,是EPC系统的核心与关键。 

    1.生产厂商和产品
      目前世界上的公司估计超过2500 万家,考虑今后的发展,10 年内这个数目有望达到3900 万,EPC 编码中厂商代码必须具有一定的容量。
       对厂商来讲,产品数量的变化范围很大.通常,一个企业产品类型数均不超过10 万种 .对于中小企业来讲,产品类型就更不会超过10 万种。

    2内嵌信息

        在EPC 编码中不嵌入有关产品的其他信息,如货品重量、尺寸、有效期、目的地等。

    3分类

       分类是指将具有相同特征和属性的实体的管理和命名,这种管理和命名的依据不涉及实体的固有特征和属性,通常是管理者的行为。

       在各个领域,分类是具有相同特点物品的集合,而不是物品的固有属性。

    4批量产品编码

      给批次内的每一样产品分配惟一的EPC代码,同时给该批次也可视为一个单一的实体对象,分配一个批次的EPC代码。

    5载体

       EPC标签是EPC代码存储的物理媒介,对所有的载体来讲,其成本与数量成反比。EPC要广泛采用,必尽最大可能的降低成本。

    EPC 中 码段的分配 是由 EAN.UCC 来管理的。在我国, EAN.UCC 系统中 GTIN 编码是由中国物品编码中心负责分配和管理。

     EPC  代码是由一个 版本号 加上另外三段数据(依次为域名管理者、对象分类、序列号)组成的一组数字。

     

      其中版本号标识EPC 的版本号,它使得EPC 随后的码段可以有不同的长度;
      域名管理是描述与此EPC相关的生产厂商的信息,例如“可口可乐公司”;
      对象分类记录产品精确类型的信息,例如:“美国生产的330ml 罐装可乐”;
      序列号惟一标识货品,它会精确的告诉我们所说的究竟是哪一罐330ml 罐装可乐。

     

    目前,EPC 代码有64 位、96 位和256 位3 种。其中EPC标签数据规范1.1中采用64位和96位;在EPC标签2.0规范中采用96位和256位的电子产品编码。
    至今已经推出EPC-96Ⅰ型,EPC-64Ⅰ型、Ⅱ型、Ⅲ型,EPC-256Ⅰ型、Ⅱ型、Ⅲ型等编码方案。

    1.EPC-64Ⅰ型
      Ⅰ型EPC-64 编码提供2 位的版本号编码,21 位的管理者编码,17位的库存单元和24 位序列号。该64 位EPC 代码包含最小的标识码。21 位的管理者分区就会允许二百万个组使用该EPC-64 码。对象种类分区可以容纳13万个库存单元――远远超过UPC 所能提供的,这样就可以满足绝大多数公司的需求。
      24 位序列号可以为一千六百万单品提供空间。

    2.EPC-64Ⅱ型
      除了Ⅰ型EPC-64,还可采用其他方案来适合更大范围的公司、产品和序列号的要求。建议采用EPC-64Ⅱ来适合众多产品以及价格反应敏感的消费品生产者。
      那些产品数量超过两万亿并且想要申请惟一产品标识的企业,可以采用方案EPC-64Ⅱ。采用34 位的序列号,最多可以标识171亿件不同产品。
      与13 位对象分类区结合(允许多达8,192 库存单元)这远远超过了世界上最大的消费品生产商的生产能力。

    3.EPC-64Ⅲ型

    •  为了推动EPC 应用过程,打算将EPC扩展到更加广泛的组织和行业。希望通过扩展分区模式来满足小公司,服务行业和组织的应用。因此,除了扩展单品编码的数量,就像第二种EPC-64那样,也会增加可以应用的公司数量来满足要求。

    •  通过把管理者分区增加到26 位,6千7百万个号码已经超出世界公司的总数,因此现在已经足够用的了.13位对象分类分区,8,192种不同种类的物品提供空间.23位序列号可以为超过8百万的商品提供空间。

    展开全文
  • 代码开发平台最近好像挺热啊,听说...那么,低代码到底是什么玩意?是新鲜事物么?为啥上个世纪的老产品也凑一份热闹?我们一起去看看。低代码平台,洋文称Low Code Development Platform,注意了,这个Low可不是...

    低代码开发平台最近好像挺热啊,听说微软Google都入局了,资本如今也热捧。百度指数了解了一下,关联度最高的那几个国内的产品不少是存在了好多年,更有甚者xx网表差不多是上一个世纪的老产品了,也来蹭一下热度。那么,低代码到底是什么玩意?是新鲜事物么?为啥上个世纪的老产品也凑一份热闹?我们一起去看看。

    低代码平台,洋文称Low Code Development Platform,注意了,这个Low可不是你想的那个Low,不是低级的意思,而是少量、简易的DSL代码甚至是无代码的意思。

    为什么能够是更少量甚至是无代码呢?开发者们想想自己是怎么减少重复代码的就会明白了。 我拿自定义表单的场景作为例子,从演化的路径上来看,是这样的:

    • 一开始,在一个应用里实现了一个自定义表单的功能,做新应用的时候,也需要这个功能,我们会把原来的代码复制一份,然后简单改一些样式或变量,搞定。
    • 然后,越来越多的应用需要自定义表单的功能了,我们把那砣代码抽象成一个函数库,每次需要的时候只需要引用函数库,给不同的参数就好了,省了代码复制不说,一下子就提升了代码的可维护性,这时,代码就开始变少了。
    • 再后来,我们嫌引用函数库还麻烦了,我们把这个功能做成了一个独立应用或微服务,提供一系列常见的表单模板,使用的时候,在这个应用里面选一个模板,稍配置一下,然后复制一个链接到目标应用上粘贴一下就能用了。这个时候,自定义表单变成了一个Saas服务,目标应用中要实现自定义表单的功能已经不需要编写代码了。至此,这个自定义表单服务就是一个低代码应用了。

    所以,低代码的本质就是应用场景的极致抽象并且模板化的过程。实际上,我们以前看到的低代码产品多了去了,只是那个时候还没有低代码这个概念罢了。下面我给你说说:

    • 上面举的自定义表单例子,你可能有意无意间接触过了,例如金数据,就是对表单收集这个场景进行了极致的抽象,形成一套固定的表单设计套路,并且让表单的开发可以通过可视化配置来完成。顺带说一句,金数据的创始人现在就在二次创业,做的正是低代码开发平台。所以,你懂的了。
    • 早年的DreamWave、FrontPage,现在的RapidWeaver等可视化网页制作软件、大量的在线可视化网站拖拉拽建站应用,就是网页制作场景的低代码平发平台。
    • BAAS,Backend As A Service,后端服务平台,直接让开发者省掉了后端的开发工作,也是一种典型的低代码开发平台,例如微信小程序的云开发平台、知晓云、Lean Cloud等。
    • 众多的移动应用、小程序可视化制作平台,提供大量的场景模板,简单调整一下参数就可以得到一个自己的应用。

    以上这些应用场景的本质都是低代码或零代码,但为什么低代码平台的概念在这几年才兴起?我猜想,是应用的场景覆盖得更广、涉及开发的环节更完整导致了平台化的出现

    1. 应用的场景覆盖得更广了,之前的低代码应用,只能够满足相对窄的应用场景,如建站、表单、BAAS,但到了后面,抽象层次往下降一层,允许定义数据结构、定义界面和流程,能够解决更多通用的场景了,就自然而然有了平台的感觉。
    2. 涉及开发的环节更完整了,以前的建站,纯粹是前端页面的拼凑,而BAAS,也只是解决后端的问題,而到了后来的小程序可视化制作时,就把前后端的开发都囊括进去了,几乎就不需要代码开发了,又自然而然有开发平台的即视感了。

    再看看微软和Google的低代码平台,都是解决相对通用场景、涵盖前后端开发环节的形态,就更加印证了我的猜想。

    不对呀,上面说到了通用场景,但同时也说了低代码的本质是场景的抽象并且模板化,通用和模板化不矛盾吗?这里就要说低代码平台的限制了,所谓的通用场景也只能是相对通用,可模板化的,于是就有了模板化的通用场景,即这个通用场景是受限的,不是完全的通用。所以,现在大多数的低代码平台都是面向企业,做企业应用的。因为企业应用,是一个可以模板化的垂直通用场景,例如明道云、简道云、氚(就冲着这个字我不懂写不懂拼,必然会没落)云等等,都是服务企业用户。

    最后,低代码并非零代码,尽管市面上有不少零代码的应用平台打着低代码的旗号吸引关注。代低码平台的底层逻辑还是一个开发平台,需要对个性化的需求开放实现途径,如何开放?开放接口?二次开发?还是开放DSL?不一而足。如果一个平台没有支持个性化需求的开发能力,那它不算是一个及格的低代码开发平台,充其量只是低代码应用罢了。

    好了,现在你已经知道什么是低代码了,往后,我会带大家一起实现一些低代码开发的场景,并对低代码的商业化进行深度的思考,例如谁会为低代码平台买单、低代码平台到底是专业平台还是小白应用等等。如果感兴趣,请关注。

    展开全文
  • 本文主要围绕CAS技术来...如何在自己的产品代码中应用CAS操作? 概述 AtomicInteger对int类型的一个封装,提供原子性的访问和更新操作,其原子性操作的实现基于CAS(compare-and-swap)技术 CAS(compare-and-swap...

    本文主要围绕CAS技术来说一下,分析并发包的内部结构,看看内部结构、线程池是基于哪一种原理实现的。

    今天问题主要是:AtomicInteger底层实现原理是什么?如何在自己的产品代码中应用CAS操作?

    概述

    AtomicInteger是对int类型的一个封装,提供原子性的访问和更新操作,其原子性操作的实现是基于CAS(compare-and-swap)技术

    CAS(compare-and-swap):多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改成某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致性问题。该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值。

    简单来说,CAS避免了因为一条线程出现错误而导致其他线程也受到影响,保证了并发的安全性。

    所谓CAS,就是获取到修改的数据,利用CAS指令进行试图更新。如果数值没变,代表其他线程没有对齐修改,就成功更新,否则就将修改成功与失败的结果返回,或者重现请求更新。

    看一下AtomicInteger底层,主要依赖于Unsafe进行操作,以volatile的value字段保证可见性。(volatile之前讲过如何实现可见性,cache与主存)

    	// setup to use Unsafe.compareAndSwapInt for updates
        private static final Unsafe unsafe = Unsafe.getUnsafe();
        private static final long valueOffset;
    
        static {
            try {
                valueOffset = unsafe.objectFieldOffset
                    (AtomicInteger.class.getDeclaredField("value"));
            } catch (Exception ex) { throw new Error(ex); }
        }
    
        private volatile int value;
    

    具体原子操作细节,可以参照原子更新,Unsafe会利用value字段的内存地址偏移,直接完成操作。

    public final int getAndIncrement() {
            return unsafe.getAndAddInt(this, valueOffset, 1);
        }
    

    因为getAndIncrement需要返回值,所以需要添加失败重试逻辑。

    	/**
         * Atomically adds the given value to the current value.
         *
         * @param delta the value to add
         * @return the previous value
         */
        public final int getAndAdd(int delta) {
            return unsafe.getAndAddInt(this, valueOffset, delta);
        }
    
    	public final int getAndAddInt(Object var1, long var2, int var4) {
    	        int var5;
    	        do {
    	            var5 = this.getIntVolatile(var1, var2);
    	        } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
    	
    	        return var5;
    	    }
    

    以上所说,不重新申请,也可以直接返回是与否:

    	/**
         * Atomically sets the value to the given updated value
         * if the current value {@code ==} the expected value.
         *
         * @param expect the expected value
         * @param update the new value
         * @return {@code true} if successful. False return indicates that
         * the actual value was not equal to the expected value.
         */
        public final boolean compareAndSet(int expect, int update) {
            return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
        }
    

    CAS是Java并发编程中lock-free的基础。

    考点分析

    虽然在开发中未必会涉及到CAS底层实现,但是掌握在Java中如何实现该技术还是很重要的。
    面试中很有可能深入考察这些方向:

    • 什么时候使用CAS,有没有比调用Unsafe更好的实现方法?
    • 理解ReentrantLock、CyclicBarrier并发结构底层的实现。

    扩展

    假设在数据库产品中,为了保证索引的一致性,常见的选择是保证只有一个线程能够排他性的修改一个索引分区,如何在数据库抽象层面去实现呢?

    可以考虑为索引分区对象添加一个逻辑上的锁,使用独占的线程ID作为锁的数值,利用原子操作控制锁的施加和释放,代码如下:

    public class AtomicBTreePartition{
    	private volatile long lock;
    	public void acquireLock(){};
    	public void releaseLock(){};
    }
    

    目前实现锁操作。
    第一种方法:可以使用Java内部提供的基于反射机制java.util.concurrent.atomic.AtomicLongFieldUpdater实现CAS操作,但是需要保证类型和字段名称正确。

    private static final AtomicLongFieldUpdater<AtomicBTreePartition> lockFieldUpdater =
    			AtomicLongFieldUpdater.newUpdater(AtomicBTreePartition.class, "lock");
    
    private void acquireLock(){
    	long t = Thread.currentThread().getId();
    	while (!lockFieldUpdater.compareAndSet(this, 0L, t)){
    	// 等待一会儿,数据库操作可能比较慢
    	}
    }
    

    第二种方法:使用Variable Handle API,提供了各种粒度的原子或者有序性的操作等。前面修改的代码如下:

    private static final VarHandle HANDLE = MethodHandles.lookup().findStaticVarHandle
                (AtomicSample.class, "lock");
        private void acquiredLock() {
            long t = Thread.currentThread().getId();
            while (!HANDLE.compareAndSet(this, 0L, t)) {
                //等待....数据操作延迟
            }
        }
    

    过程是先获取到变量句柄,然后直接调用其提供的CAS方法。

    一般来说推荐使用第二种方法,但是CAS也有副作用:当出现意外大部分线程频繁重新请求重试,就会给CPU带来很大负担。

    下面介绍一下AbstractQueuedSynchronizer( AQS)
    是Java并发包中,实现各种同步结构和部分其他组成单元(如线程池中的Worker)的基础。

    建议思路是:尽量简化一下,首先理解为什么需要AQS,如何使用AQS,至少要做什么,再进异步结合JDK源码中的实践,理解AQS的原理和应用。

    AQS内部数据和方法,可以简单拆分为:

    • 一个volatile的整数成员表征状态,同时提供了setState和getState方法

      private volatile int state;
      
    • 一个先入先出(FIFO)的等待线程队列,以实现多线程间竞争和等待,是AQS机制核心之一

    • 基于CAS结构同步实现acquire/release方法。

    以ReentrantLock为例,它内部通过扩展AQS实现了Sync类型,以AQS的state来反映锁的持有情况。

    private final Sync sync;
    abstract static class Sync extends AbstractQueueSynchronizer{} 
    

    然后是ReentrantLock对应的acquire和release操作,如果是CountDownLatch则可以看做是await()/countDown(),具体实现也有区别。

    public void Lock(){
    	sync.acquire(1);
    }
    
    public void unlock(){
    	sync.release(1);
    }
    

    排除掉一些细节,整体地分析acquire方法逻辑,其直接实现是在AQS内部,调用了tryAcquire和acquireQueued,这是两个需要搞清楚的基本部分。

    public final void acquire(int arg){
    	if(!tryAcquire(arg)&&
    	acquireQueued(addWaiter(Node.EXCLUSIVE),arg))
    	selfInterrupt();
    }
    

    在ReentrantLock中, tryAcquire逻辑实现在NonfairSync和FairSync中,分别提供了进一步的非公平或公平性方法:

    public ReentrantLock(){
    	sync = new NonfairSync();//默认非公平
    }
    public ReentrantLock(boolean fair){
    	sync = fair ? new FairSync():new NonfairSync();
    }
    

    再来看看AQS内部的tryAcquire,内部实现了如何配合CAS获取锁,以非公平的tryAcquire举例,它并不会检查其他等待者。

    final boolean nonfairTryAcquire(int acquires) {
                final Thread current = Thread.currentThread();
                int c = getState();
                if (c == 0) {
                    if (compareAndSetState(0, acquires)) {
                        setExclusiveOwnerThread(current);
                        return true;
                    }
                }
                else if (current == getExclusiveOwnerThread()) {
                    int nextc = c + acquires;
                    if (nextc < 0) // overflow
                        throw new Error("Maximum lock count exceeded");
                    setState(nextc);
                    return true;
                }
                return false;
            }
    

    如果前面的tryAcquire失败,代表着锁争抢失败,进入排队竞争阶段。这里就是我们所说的,利用FIFO队列,实现线程间对锁的竞争的部分,是AQS的核心逻辑。

    当前线程会被包装成为一个排他模式的节点( EXCLUSIVE),通过addWaiter方法添加到队列中。

    	/**
         * Acquires in exclusive uninterruptible mode for thread already in
         * queue. Used by condition wait methods as well as acquire.
         *
         * @param node the node
         * @param arg the acquire argument
         * @return {@code true} if interrupted while waiting
         */
        final boolean acquireQueued(final Node node, int arg) {
            boolean failed = true;
            try {
                boolean interrupted = false;
                for (;;) {
                    final Node p = node.predecessor();
                    if (p == head && tryAcquire(arg)) {
                        setHead(node);
                        p.next = null; // help GC
                        failed = false;
                        return interrupted;
                    }
                    if (shouldParkAfterFailedAcquire(p, node) &&
                        parkAndCheckInterrupt())
                        interrupted = true;
                }
            } finally {
                if (failed)
                    cancelAcquire(node);
            }
        }
    

    到这里线程试图获取锁的过程基本展现出来了,tryAcquire是按照特定场景需要开发者去实现,线程竞争则是AQS通过Waiter队列与acquireQueued提供的,在release方法中,同样会对队列进行对应操作。

    展开全文
  • 编译 | AI 科技大本营参与|...由于机器学习和产品管理之间的交集一个相当丰富的话题,一篇文章不足以详细地阐述所有有关的内容,因此我打算把它分成三部分来分别说明:第一部分——问题定义:什么样的机器学习产品是
        

    640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


    编译 | AI 科技大本营

    参与 | 林椿眄

    校对 | Leo


    机器学习 (ML) 和人工智能 (AI) 是当今社会的热门话题。所以,最近有很多产品经理及那些有意向转向产品经理职位的人向我询问,如何才能成为更好的 ML 产品经理。


    由于机器学习和产品管理之间的交集是一个相当丰富的话题,一篇文章不足以详细地阐述所有有关的内容,因此我打算把它分成三部分来分别说明:


    第一部分——问题定义:什么样的机器学习产品是最符合用户需求的。


    第二部分——机器学习的使用技巧:对于产品经理来说,需要掌握哪些特殊技巧来构建机器学习产品。


    第三部分——注意事项:使用机器学习构建产品的过程中应注意哪些问题。


    这篇文章中我们将总结在什么情景设置下,适合应用机器学习技术来解决你的问题。


    聚焦于用户需求


    什么时候适合运用机器学习来构建优质的产品呢?


    首先我们要关注用户的需求。通常,人们会习惯性地认为机器学习是以某种方式从根本上改变了产品经理的技能组合。


    这是个常见的认知错误!


    机器学习本身并不是目的,它只是解决用户真实需求的一种工具。我发现很多公司都有很棒的人工智能技术,并且已经在许多实际应用中验证了这些技术的实用性。如果你开发了一个很酷的新技术,想在现实中应用它,那么你需要考虑的是这项技术能够解决什么问题,或者通过这项技术可以增强哪些方面的经验。


    话虽如此,还是有很多人工智能的初创公司利用机器学习提出了一些很棒的创新技术,而这些并不总是专注于解决用户的问题/需求。虽然这些创新技术推动了技术前沿的发展,并在生态系统中扮演着非常重要,但是这些初创公司往往都会被收购,因为他们很难找到适合自己公司发展的产品市场。


    作为一个产品经理,如果你尝试构建一些机器学习产品来服务于用户,那么用户的问题及需求应该是你需要关注的焦点。


    如何判断机器学习技术是否可以用来解决用户的需求/业务问题,或者说在什么情境下适合运用这项技术呢?


    我们都知道,机器学习技术最适合用于解决一些与模式识别相关的问题,而通常这些问题又可以分为几种不同的类型。


    640?wx_fmt=png


    用户被大量的数据淹没


    很多时候,用户需要在海量的数据中做出选择和决策,处理这些问题的最佳工具就是机器学习/人工智能技术。Google 和 Bing 等搜索引擎公司就是使用各种机器学习算法来为用户搜索提供最佳结果。


    例如,当你搜索食谱时,搜索引擎会自动学习你的搜索模式,以及与你类似的搜索和点击行为的模式,并为你自动筛选出最贴近的食谱作为第一个结果。


    此外,分类问题也能够利用机器学习来解决。例如,如果你希望将数百万篇教育类的帖子进行分类,并且已经利用一些教育类的文档训练好一个机器学习模型,那么这个模型可以帮助你自动分类这些帖子。


    需要复杂认知能力的情况


    现实中很多问题的解决都需要模型具有复杂的认知能力。例如,无人驾驶汽车需要能够了解道路周围复杂的环境。一个用于自动分类照片的应用程序,需要能够准确地检测图片中的地点,人员及物体等信息。


    解决这些问题通常都需要复杂的认知技能,而构建这类智能模型的唯一方法就是用大量的数据来“喂给”智能模型,并通过一些模式识别的方法让模型开始学习。


    需要预测的情况


    现实中,最常见的一类问题是预测用户的喜好,如用户是否喜欢新闻中的某个故事,是否会喜欢 Dropbox 中的内容等。因此,对于一个预测问题,需要预测用户下一步的行为,机器学习将会是一个很好的选择。


    同样,如果你想预测 2018 年 12 月的销售情况 (前提是业务基础没有大幅改变) ,只需要提供过去几年的历史销售数据,一个机器学习模型就可以成功地预测未来的销售情况,即使考虑到季节性问题也是如此。机器学习模型不仅可以用于销售情况的预测,对于其他问题,如库存的使用情况也可以解决。


    异常检测


    机器学习的另一大应用方向是对数据进行异常检测。由于机器学习擅长处理模式识别问题,因此任何不符合常态的行为模式都可以很容易被检测到。


    其中,信用卡欺诈行为的检测就是机器学习在这个领域的一个主要应用。如果用户的信用卡使用模式与常规行为不同,则可能表明卡片正被盗用。同样,如果黑客试图访问企业的内部网,查看入侵者的访问模式,机器学习模型可以通过学习这种模式来轻松地标记这种行为,并在下次发生时对这些行为进行拦截。


    为你的决策提供建议


    如果你希望帮助用户做出某些决策,如提供一些关于购买、访问、观看等方面的建议,机器学习也是一个很好的工具。


    机器学习模型通过观察类似人的行为模式,购买类似的产品,访问类似的网站,为用户的决策提供建议,减轻决策制定时的认知负担。通过查看这些推荐,用户即使不用翻看整个视频目录或遍历所有搜索结果也能找到他们感兴趣的东西。


    人机交互项目


    如果你希望建立人机交互的项目,提供与人类交流的服务,那么你需要了解自然语言处理的相关知识,这种情况下机器学习也将是个不错的选择。


    一些移动端的语音助手,如 Alexa,Siri 和 Google Assistant 等,其背后的核心技术都能够将人类语言翻译为可执行的任务。我们提供大量关于语言,语音语调的数据,让机器学习模型自动学习并理解语音信息,进而将语音映射到语言,再将语言指令映射到任务,实现从人类语言到需求任务的转换。


    增强/创造新的体验


    在机器学习应用中,增强或创造新体验是最令人兴奋的一项创新技术。


    这项技术就是应用机器学习实现一种从无到有的过程,为人类带来全新的体验。SnapChat 滤镜就是一个成功的例子,它就是使用机器学习技术来增强用户体验:通过使用面部识别算法,SnapChat滤镜可以检测出脸部的轮廓,从而将一些创意滤镜叠加在脸部上,创造出更有趣、更新颖的图片。


    你还接触过哪些机器学习新技术呢,给你带来怎样的新体验呢?来分享一下你的经历吧。


    原文链接:

    https://towardsdatascience.com/machine-learning-for-product-managers-part-i-problem-mapping-5436132c3a6e



    精彩推荐

    2018年3月30-31日,第二届中国区块链技术暨应用大会将于北京喜来登长城饭店盛大开场,50+区块链技术领导人物,100+区块链投资商业大咖,100+技术&财经媒体,1000+区块链技术爱好者,强强联合,共同探讨最in区块链技术,豪华干货礼包享不停。八折门票火热抢购中!2018,未来已来,带你玩转区块链。


    640?wx_fmt=jpeg


    AI科技大本营用户群(计算机视觉、机器学习、深度学习、NLP、Python、AI硬件、AI+金融方向)正在招募中,后台回复:读者群,联系营长,添加营长请备注姓名,研究方向。

    ☟☟☟点击 | 阅读原文 | 查看大会详情
    展开全文
  • 空调在我们的家里很重要的电器产品,在实际使用中能够让我们在夏天或者冬季的时候都有着温度恒定的室内环境,非常的舒适。但是空调在使用的过程中,因为频繁地开关使用,难免会出现一些故障问题影响我们的使用。...
  • 看懂HTML代码,摸清国外买家喜欢搜什么关键词 大家每天都忙着找...在做搜索优化中,必须要了解这些阿里用得到的基础代码,至少看得懂它,知道它什么的。那么,阿里里面需要看得懂的代码和它的用法怎样的呢?...
  • 自动推送JS代码是百度站长平台最新推出的轻量级链接提交组件,站长只需将自动推送的JS代码放置在站点每一个页面源代码中,当页面被访问时,页面链接会自动推送给百度,有利于新页面更快被百度发现。 为了更快速的...
  • 如何在自己的产品代码中应用CAS操作? AutomicInteger对int类型的一个封装,提供原子性的访问和更新操作,原子操作的实现基于cas(compare-and-swap)来实现的。 什么是原子性访问? 一组操作要么全部成功,要么...
  • 代码/零代码的概念,也出来一段时间了,平台和产品也一大堆。最近专门测评了一堆,希望对大家有所帮助。 申明一下:SaaS也0代码,这个不在讨论的范围内。产品千差万别,概念上做细致的区分原本就是一件非常麻烦...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,179
精华内容 3,271
关键字:

产品代码是什么