精华内容
下载资源
问答
  • 兄弟们,什么是软件中的关键技术与核心技术有什么区别? 小弟负责是一产品开发中的关键技术,小弟没有明白这个软件产品中的关键地方是指什么?它意义又是什么?
  • 5.谈谈面向对象编程面向接口编程的区别6.什么是反射?说说反射是如何应用到spring框架上7.说说java解析xml有哪些技术?8.抽象类接口的区别9.谈谈表单的同步提交异步提交的区别 1.Java创建对象有哪些方式 ...

    1.Java创建对象有哪些方式

    1. 使用new关键字

    2. 使用clone()方法

      实体类实现Cloneable接口,重写clone()方法,调用clone()方法,克隆得到的对象与原来的对象不是一个对象

    3. 使用反射

      得到Students类的Class对象,根据Class对象得到构造器,再根据构造器得到对象

    4. 使用对象的反序列化

      西安序列化将对象写入文件中,再反序列化从文件中得到对象,记得关闭流

    5. 使用spring获得对象

      先在xml配置文档里配置好对象的属性与id值,得到与配置文档的连接,根据配置文档里id属性的值,得到对象

    Java代码:

    //Students类
    package org.westos.domain;
    
    import java.io.Serializable;
    
    public class Students implements Cloneable, Serializable {
        private String sid;
        private String sname;
        private String gender;
        private String birthday;
        private String major;
        
        //实现Cloneable接口,重写父类的clone()方法
        @Override
        public Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    
        @Override
        public String toString() {
            return "Students{" +
                    "sid='" + sid + '\'' +
                    ", sname='" + sname + '\'' +
                    ", gender='" + gender + '\'' +
                    ", birthday='" + birthday + '\'' +
                    ", major='" + major + '\'' +
                    '}';
        }
    
        public Students() {
        }
    
        public Students(String sid, String sname, String gender, String birthday, String major) {
            this.sid = sid;
            this.sname = sname;
            this.gender = gender;
            this.birthday = birthday;
            this.major = major;
        }
    
        public String getSid() {
            return sid;
        }
    
        public void setSid(String sid) {
            this.sid = sid;
        }
    
        public String getSname() {
            return sname;
        }
    
        public void setSname(String sname) {
            this.sname = sname;
        }
    
        public String getGender() {
            return gender;
        }
    
        public void setGender(String gender) {
            this.gender = gender;
        }
    
        public String getBirthday() {
            return birthday;
        }
    
        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
    
        public String getMajor() {
            return major;
        }
    
        public void setMajor(String major) {
            this.major = major;
        }
    }
    
    
    //测试类
    package org.westos.test;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.westos.domain.Students;
    
    import java.io.*;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;
    
    
    public class Test {
        public static void main(String[] args) throws CloneNotSupportedException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, IOException, InvocationTargetException {
            //1.使用new关键字创建对象
            Students s1 = new Students("001", "张三", "男", "1993-02-03", "古文");
            System.out.println("s1:" + s1);
    
            //2.使用clone()方法创建对象
            Students s2 = (Students) s1.clone();
            System.out.println("s2:" + s2);
            System.out.println(s1 == s2);//s1与s2不相等
    
            //3.使用反射得到对象
            Class aClass = Class.forName("org.westos.domain.Students");//使用类名得到类的Class对象
            //使用构造器的参数得到构造器
            Constructor constructor = aClass.getConstructor(String.class, String.class, String.class, String.class, String.class);
            //使用构造器得到对象
            Students s3 = (Students) constructor.newInstance(new Object[]{"002", "李四", "男", "1994-02-04", "高数"});
            System.out.println("s3:" + s3);
    
            //4.使用反序列化得到对象
            //得到对象输出流
            File file = new File("studentLists.text");
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
            //将对象序列化写到文件studentLists.txt中
            out.writeObject(s2);
            //得到对象输入流
            ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
            //反序列化读取对象
            Students s4 = (Students) in.readObject();
            System.out.println("s4:" + s4);
            //关闭流资源
            in.close();
            out.close();
    
            //5.使用spring中的IOC获取对象
            //与配置文档applicationContext.xml建立连接
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            //根据配置文档里的id属性的值,获得对象
            Students s5 = (Students) context.getBean("s2");
            System.out.println("s5:" + s5);
        }
    }

    applicationContext.xml配置文档:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--定义学生对象-->
        <bean id="s1" class="org.westos.domain.Students">
            <property name="sid" value="003"/>
            <property name="sname" value="张三丰"/>
            <property name="gender" value=""/>
            <property name="birthday" value="1998-10-10"/>
            <property name="major" value="太极拳"/>
        </bean>
    
        <!--定义学生对象-->
        <bean id="s2" class="org.westos.domain.Students">
            <property name="sid" value="004"/>
            <property name="sname" value="王五"/>
            <property name="gender" value=""/>
            <property name="birthday" value="1999-10-10"/>
            <property name="major" value="乒乓球"/>
        </bean>
    </beans>

    2.什么是maven?maven的核心功能有哪些

    1. 什么是maven

      管理项目的构建,报告和文档的项目管理工具软件。将程序中要使用的jar包存在放在maven仓库中,只需要在pom.xml文档中进行配置,就可以联网获得对应的jar包,而且会将所导入的jar包的所有依赖的jar包一起导入进去

    2. 核心功能

      1. 依赖管理
      2. 模块管理
      3. 插件管理
      4. 部署管理
    3. 生命周期

      maven将工程的构建过程理解为不同的生命周期和阶段, 一个工程的构建过程中,存在着不同的生命周期,生命周期间互相独立,没有一定的顺序关系。 每个生命周期又划分为不同的阶段,不同的阶段之间有明确的顺序关系, 同一生命周期内的阶段必须按顺序依次执行。

      1. clear(清除)

        1. pre-clean:执行清理的准备工作
        2. clean:执行清理工作
        3. post-clean:执行清理后的后续工作
      2. default(核心)

        1. validate:验证项目的正确性及项目所必需的信息是否可用
        2. compile:编译项目中代码
        3. test:用相关的单元测试框架测试编译后的代码,测试代码并不会随项目打包和布署
        4. package:将编译后的代码打包成相应的格式文件,如jar包
        5. integration-test: 如果需要在一个综合环境中运行我们的测试,这个阶段将会运行和布署项目到该环境中
        6. verify: 检查项目中的包是否正确与符合要求
        7. install:将包安装到本地maven仓库,其他项目也可以使用该包作为依赖
        8. deploy:将包发布到远程的maven仓库,并提供给其他开发者使用
      3. site(建立发布项目站点)

        1. pre-site:准备生成
        2. site:生成项目站点和文档
        3. post-site:执行生成文档后的后续工作
        4. site-deploy:发布项目文档

    3.什么是MVC?说说分层的好处

    1. 什么是MVC

      MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式。

      1. Model(模型):表示应用程序核心,应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据
      2. View(视图):显示数据,应用程序中处理数据显示的部分,通常视图是依据模型数据创建的
      3. Controller(控制器):处理输入,应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
    2. 优点

      1. 开发人员可以只用管理结构中的某一层
      2. 容易使用新的层实替换原有的层
      3. 降低层间依赖、也就是解耦,降低程序耦合度
      4. 有利于各层逻辑的复用
    3. 缺点

      1. 降低了系统的性能,必须通过中间层才能访问数据库
      2. 有时会倒是级联的修改,尤其是在上层做出修改后,下层的结构也要做出对应的修改

    4.Spring的两大核心技术是什么?

    1. IOC(控制反转)/DI(依赖注入)
      1. 一般来说在Java中创建对象是使用new关键字创建的,而使用IOC,只需要在配置文档中进行配置,使用配置文档中的数据进行对象的创建。不用再使用new关键字创建
      2. IOC创建对象的过程是使用类的默认无参构造创建对象,然后使用类的set方法进行属性的赋值
      3. IOC创建对象的本质是反射
    2. AOP面向切面编程
      1. 可以简单的理解为在不改变原有程序的基础上为代码增加新的功能
      2. 分为前置增强、后置增强、最终增强、异常增强、环绕增强
      3. 需要在原有的类上定义一个切口(方法),然后定义一个用于增强的AOP类,可以在类中定义增强的方法。最后在xml配置文档中进行配置

    5.谈谈面向对象编程与面向接口编程的区别

    1. 什么是面向接口编程

      面向对象编程中不同的对象协作完成系统的各个功能,对象内部的实现由各个类自己实现。但是随着系统愈发复杂,对象内部功能的实现已经不那么重要了(类自己内部实现),反之对象间的协作能力更为重要,这就是面向接口编程的思想

      面向接口编程就是先将业务的逻辑线先提取出来,作为接口,而将具体的代码实现作为实现类来完成。当客户需求变化时,只用更改接口下的实现类就可以

    2. 面向接口编程优点

      1. 降低耦合性,能极大限度解耦
      2. 易于程序扩展
      3. 易于程序维护
    3. 抽象类和接口的选择

      在于使用动机,使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性与协作关系

    4. 经典的面向接口编程例子-JDBC

      SUN公司提供了JDBC接口的规范,而不同的数据库厂商开发不同的数据库驱动

    6.什么是反射?说说反射是如何应用到spring框架上

    1. 什么是反射

      反射是Java中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许对其内部成员进行操作。主要有:得到一个对象所属的类、获取一个类的所有成员变量和方法、在运行时创建对象、在运行时调用对象的方法等

    2. 反射的优点

      可以动态创建对象和编译,体现出很大的灵活性,通过反射机制可以获得类的各种内容,对于JAVA这种先编译再运行的语言来说,反射机制可以使代码更加灵活

    3. 反射机制的缺点

      对性能有影响,使用反射基本上是一种解释操作,这类操作总是慢于只直接执行相同的操作

      破坏了类的封装性,不安全

    4. 反射机制应用到spring框架中

      1. 加载resourse资源目录下的配置文件
      2. 解析配置文件
      3. 从配置文件中找到对应id属性值的对象
      4. 通过反射调用默认的无参构造创建对象
      5. 使用set方法对属性赋值
      6. 返回创建的对象

    7.说说java解析xml有哪些技术?

    1. DOM解析

      是html和xml的应用程序接口(API),DOM文档对象模型,采用树形结构来完成对文档的解析,在解析时,会将整个文档加载到内存中然后形成"节点数",当文档内容过多或者需要解析的文档过多时,会造成服务器内存紧张

    2. SAX解析

      流模型中的"推"模型分析方式。通过事件驱动,每发现一个节点就引发一个事件,事件推给事件处理器,通过回调方法完成解析工作,解析XML文档的逻辑需要应用程序完成

    3. JDOM解析

      Java特定的文档对象模型。自身不包含解析器,使用SAX

    4. DOM4J解析

      简单易用,采用Java集合框架,并完全支持DOM、SAX和JAXP,提供了一套完整的针对DOM和SAX的解析技术,目前使用较为广泛

    5. STAX解析

      流模型中的拉模型分析方式。提供基于指针和基于迭代器两种方式的支持,JDK1.6新特性

    8.抽象类与接口的区别

    1. 语法区别
      1. 抽象类可以有构造方法,接口中不能有构造方法
      2. 抽象类中可以有普通成员变量,接口中没有普通成员变量
      3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法
      4. 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
      5. 抽象类中可以包含静态方法,接口中不能包含静态方法
      6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是默认public static final类型
      7. 一个类可以实现多个接口,但只能继承一个抽象类
    2. 应用区别
      1. 接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的联系
      2. 抽象类主要在代码实现方面发挥作用,来实现代码的重用

    9.谈谈表单的同步提交与异步提交的区别

    1. 处理步骤

      1. 同步:提交请求->等待服务器处理->处理完毕返回,在此期间浏览器不能做别的事情
      2. 异步:请求通过事件触发->服务器处理(服务器任然可以做别的事情)->处理完毕
    2. 区别

      同步提交的时候客户端浏览器不能做别的事情,只能等待服务器处理;而异步提交的时候客户端浏览器任然可以做别的

      可以理解为吃饭,同步就是我叫你去吃饭,你没听见,我继续叫你,知道你回答我了,一起去吃饭。

      异步就是我给你发消息说我去吃饭了,然后我就先走了,你后面自己来

    3. 具体应用
      同步表单使用submit按钮提交,执行表单的action动作会出现页面假死的现象,用户体验不好

      异步表单使用ajax异步提交,通过普通按钮提交实现页面局部刷新,用户体验好,大多数使用

    展开全文
  • OEM、ODMOBM的区别

    2021-01-11 19:51:30
    ODMOEM的区别什么是OBM? 什么是OEM? OEM (Original Equipment Manufacturer),即“原始设备制造商”,指一家厂家根据另一家厂商的要求,为其生产产品和产品配件,亦称为定牌生产或授权贴牌生产(俗称:代工)...

    什么是OEM?

    OEM (Original Equipment Manufacturer),即“原始设备制造商”,指一家厂家根据另一家厂商的要求,为其生产产品和产品配件,亦称为定牌生产或授权贴牌生产(俗称:代工)。

    其基木含义为品牌生产者不直接生产产品,而是利用自己掌握的关键的核心技术负责设计和开发新产品,控制销售渠道。承接加工任务的制造商被称为OEM厂商,其生产的产品被称为OEM 产品。

    简单而言,产品的知识产权在于品牌生产者,制造商在其中仅仅扮演一个加工、制造、生产的角色。

    什么是ODM?

    ODM(Original Design Manufacturer ),即“原始设计制造商”,是一家厂商根据另一家厂商的规格和要求,设计和生产产品。受委托方拥有设计能力和技术水平,基于授权合同生产产品(俗称:贴牌)。

    通常某制造商设计出某产品后,在某些情况下可能会被另外一些企业看中,要求配上后者的品牌名称来进行生产,或者稍微修改一下设计来生产。其中,承接设计制浩业务的制造曲被称为ODM厂商,其生产出来的产品就是ODM 产品。产品的知识产权在于制造商。

    ODM与OEM的区别

    从以上定义和概念可以看出,二者都带有受委托生产产品的性质。OEM和ODM的主要区别就在于OEM是由委托方提出产品设计方案,不管整体设计是由谁完成的,被委托方不得为第三方提供采用该设计的产品。

    而ODM从设计到生产都由生产方自行完成,在产品成型后被贴牌方买走的。生产方是否能为第三方生产同样的产品,取决于贴牌方是否买断该设计方案。

    说白了,OEM和ODM的不同点,核心就在于产品究竞是谁享有知识产权,如果是委托方享有产品的知识产权,那就是OEM,也就是俗称的“代工”;而如果是生产者所进行的整体设计,那就是 ODM ,也就是俗称的“贴牌”。

    在工业社会之中,OEM和ODM可谓司空见惯。因为出于制造成本、运输方便性、节省开发时间、资源优化配置等各方面的考虑,知名品牌企业一般都愿意找其他厂商OEM或ODM。

    例如一些日本品牌的笔记本电脑实际上就是由台湾厂商代工生产的。之后,台湾笔记本电脑制造商只要修改某些设计细节或配件便可以以自己的品牌名称进行批量牛产。原因在于它们为这些日本品牌作的是ODM而非OEM。我们也可以说它们都是从同一条生产线生产出来。

    OEM产品是为品牌厂商度身订造的,生产后也只能使用该品牌名称,绝对不能冠上生产者自己的名称再进行生产。而ODM则要看品牌企业有没有买断该产品的版权。如果没有的话,制造商有权自己组织生产,只要没有企业公司的设计识别即可。

    什么是OBM?

    ODM的发展方向是OBM(Original Brand Manufacturer ),这又是另外一个概念,原始品牌制造商。即代工厂经营自有品牌,或者说生产商自行创立产品品牌,生产、销售拥有自主品牌的产品。

    由于代工厂做OBM要有完善的营销网络作攴撑,渠道建设的费用很大,花费的精力也远比做OEM和ODM高,而且常会与自己OEM、ODM客户有所冲突。通常为保证大客户利益,代工厂很少大张旗鼓地去做OBM。

    实际生产过程中,虽然ODM与OEM的界线正变得模糊,但有一点却始终是二者的分水岭。ODM保留知识产权并提供给多家客户,也可以推出自有品牌的产品,这无疑给客户带来竞争威胁。而OEM厂商在提供ODM服务时虽然有时也保留对知识产权的占有,但总是努力避免与客户产生竞争关系,如OEM一般承诺不会推出自有品牌的产品。

    从上述介绍中,可以大致了解到OEM、ODM乃至OBM的含义及关系。也可以分析出,市场上产品的质量与品牌并不是那么的紧密联系,可能是OEM或者ODM生产。这也可能是导致产品原厂制造成为了吸引消费者的一个因素。

    文章来源:律动法证

    展开全文
  • WCFWebService的区别

    千次阅读 2013-11-07 10:10:46
    1.WebService:严格来说是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。 它使用Soap简单对象访问协议来实现分布式环境里应用程序之间数据交互。WSDL来实现服务接口相关...

     1.WebService:严格来说是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。

    它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。WSDL来实现服务接口相关的描述。


     2.WCF:其实一定程度上就是ASP.NET Web Service,因为它支持Web Service的行业标准和核心协议,因此ASP.NET Web ServiceWSE能做的事情,它几乎都能胜任。   


    WCF作为微软主推一个通讯组件或者平台,它的目标不仅仅是在支持和集成Web Service,因为它还兼容和具备了微软早期很多技术的特性。 

    它整合了.Net平台下所有的和分布式系统有关的技术,如Enterprise Sevices(COM+).Net RemotingWeb Service(ASMX)WSE3.0MSMQ消息队列。

    以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NETEXEWPFWindows FormsNT ServiceCOM+作为宿主(Host)WCF可以支持的协议包括TCPHTTP,跨进程以及自定义,安全模式则包括SAML, KerberosX509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。


    更本区别

     

    WCF 支持多种通信协议 Http/Https TCP/UDPMSMQ、命名管道、对等网、

      消息可达性、事务流等。

    WCF 可以与ASP.NET 集成、共享一个上下文(HttpContext)。

    WCF 支持多种消息传输格式 :text,binary,mtom,Json 等。

    WCF 安全性要强:支持对称安全、非对称安全、消息安全、传输安全、

      SSL 流安全、Windows 流安全等。

    WCF 支持多种会话模式:单向、双向、请求/响应。

    WCF 支持REST 

    WCF 支持多种格式化方式。DataContractSerializerXmlSerializer、 

       DataContractJsonSerializer 等。

    WCF 支持 WAS hostingWindows 服务 hostingSelf-HostingIIS hosting 等。

    WCF 支持多种并发模式:单例、单调、会话 。


    http://www.cnblogs.com/jiangyehu1110/archive/2013/08/16/3261277.html


    展开全文
  • 大数据定义 大数据(big data),指无法在一定时间范围内...大数据的核心是利用数据价值,机器学习是利用数据价值的关键技术,对于大数据而言,机器学习是不可或缺。相反,对于机器学习而言,越多数据会越 可...

    大数据的定义
    大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 大数据是一个笼统的概念暂未发现和准确的定义。

    大数据的核心是利用数据的价值,机器学习是利用数据价值的关键技术,对于大数据而言,机器学习是不可或缺的。相反,对于机器学习而言,越多的数据会越 可能提升模型的精确性,同时,复杂的机器学习算法的计算时间也迫切需要分布式计算与内存计算这样的关键技术。因此,机器学习的兴盛也离不开大数据的帮助。 大数据与机器学习两者是互相促进,相依相存的关系。

    机器学习与大数据紧密联系。但是,必须清醒的认识到,大数据并不等同于机器学习,同理,机器学习也不等同于大数据。大数据中包含有分布式计算,内存数据库,多维分析等等多种技术。单从分析方法来看,大数据也包含以下四种分析方法:

    1.大数据,小分析:即数据仓库领域的OLAP分析思路,也就是多维分析思想。

    2.大数据,大分析:这个代表的就是数据挖掘与机器学习分析法。

    3.流式分析:这个主要指的是事件驱动架构。

    4.查询分析:经典代表是NoSQL数据库。

    也就是说,机器学习仅仅是大数据分析中的一种而已。尽管机器学习的一些结果具有很大的魔力,在某种场合下是大数据价值最好的说明。但这并不代表机器学习是大数据下的唯一的分析方法。

    机器学习的定义
    从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。

    首先,我们需要在计算机中存储历史的数据。接着,我们将这些 数据通过机器学习算法进行处理,这个过程在机器学习中叫做“训练”,处理的结果可以被我们用来对新的数据进行预测,这个结果一般称之为“模型”。对新数据 的预测过程在机器学习中叫做“预测”。“训练”与“预测”是机器学习的两个过程,“模型”则是过程的中间输出结果,“训练”产生“模型”,“模型”指导 “预测”。

    人类在成长、生活过程中积累了很多的历史与经验。人类定期地对这些经验进行“归纳”,获得了生活的“规律”。当人类遇到未知的问题或者需要对未来进行“推测”的时候,人类使用这些“规律”,对未知问题与未来进行“推测”,从而指导自己的生活和工作。

    机器学习中的“训练”与“预测”过程可以对应到人类的“归纳”和“推测”过程。通过这样的对应,我们可以发现,机器学习的思想并不复杂,仅仅是对人类在生活中学习成长的一个模拟。由于机器学习不是基于编程形成的结果,因此它的处理过程不是因果的逻辑,而是通过归纳思想得出的相关性结论。

    这也可以联想到人类为什么要学习历史,历史实际上是人类过往经验的总结。有句话说得很好,“历史往往不一样,但历史总是惊人的相似”。通过学习历史,我们从历史中归纳出人生与国家的规律,从而指导我们的下一步工作,这是具有莫大价值的。当代一些人忽视了历史的本来价值,而是把其作为一种宣扬功绩的手段,这其实是对历史真实价值的一种误用。

    机器学习的范围
    机器学习跟模式识别,统计学习,数据挖掘,计算机视觉,语音识别,自然语言处理等领域有着很深的联系。

    从范围上来说,机器学习跟模式识别,统计学习,数据挖掘是类似的,同时,机器学习与其他领域的处理技术的结合,形成了计算机视觉、语音识别、自然语言处理等交叉学科。因此,一般说数据挖掘时,可以等同于说机器学习。同时,我们平常所说的机器学习应用,应该是通用的,不仅仅局限在结构化数据,还有图像,音频等应用。

    模式识别
    模式识别=机器学习。两者的主要区别在于前者是从工业界发展起来的概念,后者则主要源自计算机学科。在著名的《Pattern Recognition And Machine Learning》这本书中,Christopher M. Bishop在开头是这样说的“模式识别源自工业界,而机器学习来自于计算机学科。不过,它们中的活动可以被视为同一个领域的两个方面,同时在过去的10年间,它们都有了长足的发展”。

    数据挖掘
    数据挖掘=机器学习+数据库。这几年数据挖掘的概念实在是太耳熟能详。几乎等同于炒作。但凡说数据挖掘都会吹嘘数据挖掘如何如何,例如从数据中挖出金子,以及将废弃的数据转化为价值等等。但是,我尽管可能会挖出金子,但我也可能挖的是“石头”啊。这个说法的意思是,数据挖掘仅仅是一种思考方式,告诉我们应该尝试从数据中挖掘出知识,但不是每个数据都能挖掘出金子的,所以不要神话它。一个系统绝对不会因为上了一个数据挖掘模块就变得无所不能(这是IBM最喜欢吹嘘的),恰恰相反,一个拥有数据挖掘思维的人员才是关键,而且他还必须对数据有深刻的认识,这样才可能从数据中导出模式指引业务的改善。大部分数据挖掘中的算法是机器学习的算法在数据库中的优化。

    统计学习
    统计学习近似等于机器学习。统计学习是个与机器学习高度重叠的学科。因为机器学习中的大多数方法来自统计学,甚至可以认为,统计学的发展促进机器学习的繁荣昌盛。例如著名的支持向量机算法,就是源自统计学科。但是在某种程度上两者是有分别的,这个分别在于:统计学习者重点关注的是统计模型的发展与优化,偏数学,而机器学习者更关注的是能够解决问题,偏实践,因此机器学习研究者会重点研究学习算法在计算机上执行的效率与准确性的提升。

    计算机视觉
    计算机视觉=图像处理+机器学习。图像处理技术用于将图像处理为适合进入机器学习模型中的输入,机器学习则负责从图像中识别出相关的模式。计算机视觉相关的应用非常的多,例如百度识图、手写字符识别、车牌识别等等应用。这个领域是应用前景非常火热的,同时也是研究的热门方向。随着机器学习的新领域深度学习的发展,大大促进了计算机图像识别的效果,因此未来计算机视觉界的发展前景不可估量。

    语音识别
    语音识别=语音处理+机器学习。语音识别就是音频处理技术与机器学习的结合。语音识别技术一般不会单独使用,一般会结合自然语言处理的相关技术。目前的相关应用有苹果的语音助手siri等。

    自然语言处理
    自然语言处理=文本处理+机器学习。自然语言处理技术主要是让机器理解人类的语言的一门领域。在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外,在理解这个层面,则使用了语义理解,机器学习等技术。作为唯一由人类自身创造的符号,自然语言处理一直是机器学习界不断研究的方向。按照百度机器学习专家余凯的说法“听与看,说白了就是阿猫和阿狗都会的,而只有语言才是人类独有的”。如何利用机器学习技术进行自然语言的的深度理解,一直是工业和学术界关注的焦点。

    机器学习的方法
    1、回归算法

    在大部分机器学习课程中,回归算法都是介绍的第一个算法。原因有两个:一.回归算法比较简单,介绍它可以让人平滑地从统计学迁移到机器学习中。二.回归算法是后面若干强大算法的基石,如果不理解回归算法,无法学习那些强大的算法。回归算法有两个重要的子类:即线性回归和逻辑回归。

    线性回归就是我们常见的直线函数。如何拟合出一条直线最佳匹配我所有的数据?一般使用“最小二乘法”来求解。“最小二乘法”的思想是这样的,假设我们拟合出的直线代表数据的真实值,而观测到的数据代表拥有误差的值。为了尽可能减小误差的影响,需要求解一条直线使所有误差的平方和最小。最小二乘法将最优问题转化为求函数极值问题。函数极值在数学上我们一般会采用求导数为0的方法。但这种做法并不适合计算机,可能求解不出来,也可能计算量太大。

    计算机科学界专门有一个学科叫“数值计算”,专门用来提升计算机进行各类计算时的准确性和效率问题。例如,著名的“梯度下降”以及“牛顿法”就是数值计算中的经典算法,也非常适合来处理求解函数极值的问题。梯度下降法是解决回归模型中最简单且有效的方法之一。从严格意义上来说,由于后文中的神经网络和推荐算法中都有线性回归的因子,因此梯度下降法在后面的算法实现中也有应用。

    逻辑回归是一种与线性回归非常类似的算法,但是,从本质上讲,线型回归处理的问题类型与逻辑回归不一致。线性回归处理的是数值问题,也就是最后预测出的结果是数字,例如房价。而逻辑回归属于分类算法,也就是说,逻辑回归预测结果是离散的分类,例如判断这封邮件是否是垃圾邮件,以及用户是否会点击此广告等等。

    实现方面的话,逻辑回归只是对对线性回归的计算结果加上了一个Sigmoid函数,将数值结果转化为了0到1之间的概率(Sigmoid函数的图像一般来说并不直观,你只需要理解对数值越大,函数越逼近1,数值越小,函数越逼近0),接着我们根据这个概率可以做预测,例如概率大于0.5,则这封邮件就是垃圾邮件,或者肿瘤是否是恶性的等等。从直观上来说,逻辑回归是画出了一条分类线,见下图。

    假设我们有一组肿瘤患者的数据,这些患者的肿瘤中有些是良性的(图中的蓝色点),有些是恶性的(图中的红色点)。这里肿瘤的红蓝色可以被称作数据的“标签”。同时每个数据包括两个“特征”:患者的年龄与肿瘤的大小。我们将这两个特征与标签映射到这个二维空间上,形成了我上图的数据。

    当我有一个绿色的点时,我该判断这个肿瘤是恶性的还是良性的呢?根据红蓝点我们训练出了一个逻辑回归模型,也就是图中的分类线。这时,根据绿点出现在分类线的左侧,因此我们判断它的标签应该是红色,也就是说属于恶性肿瘤。

    逻辑回归算法划出的分类线基本都是线性的(也有划出非线性分类线的逻辑回归,不过那样的模型在处理数据量较大的时候效率会很低),这意味着当两类之间的界线不是线性时,逻辑回归的表达能力就不足。下面的两个算法是机器学习界最强大且重要的算法,都可以拟合出非线性的分类线。

    2、神经网络

    神经网络(也称之为人工神经网络,ANN)算法是80年代机器学习界非常流行的算法,不过在90年代中途衰落。现在,携着“深度学习”之势,神经网络重装归来,重新成为最强大的机器学习算法之一。

    神经网络的诞生起源于对大脑工作机理的研究。早期生物界学者们使用神经网络来模拟大脑。机器学习的学者们使用神经网络进行机器学习的实验,发现在视觉与语音的识别上效果都相当好。在BP算法(加速神经网络训练过程的数值算法)诞生以后,神经网络的发展进入了一个热潮。BP算法的发明人之一是前面介绍的机器学习大牛Geoffrey Hinton(图1中的中间者)。

    具体说来,神经网络的学习机理是什么?简单来说,就是分解与整合。在著名的Hubel-Wiesel试验中,学者们研究猫的视觉分析机理是这样的。

    比方说,一个正方形,分解为四个折线进入视觉处理的下一层中。四个神经元分别处理一个折线。每个折线再继续被分解为两条直线,每条直线再被分解为黑白两个面。于是,一个复杂的图像变成了大量的细节进入神经元,神经元处理以后再进行整合,最后得出了看到的是正方形的结论。这就是大脑视觉识别的机理,也是神经网络工作的机理。

    让我们看一个简单的神经网络的逻辑架构。在这个网络中,分成输入层,隐藏层,和输出层。输入层负责接收信号,隐藏层负责对数据的分解与处理,最后的结果被整合到输出层。每层中的一个圆代表一个处理单元,可以认为是模拟了一个神经元,若干个处理单元组成了一个层,若干个层再组成了一个网络,也就是”神经网络”。

    在神经网络中,每个处理单元事实上就是一个逻辑回归模型,逻辑回归模型接收上层的输入,把模型的预测结果作为输出传输到下一个层次。通过这样的过程,神经网络可以完成非常复杂的非线性分类。

    下图会演示神经网络在图像识别领域的一个著名应用,这个程序叫做LeNet,是一个基于多个隐层构建的神经网络。通过LeNet可以识别多种手写数字,并且达到很高的识别精度与拥有较好的鲁棒性。

    右下方的方形中显示的是输入计算机的图像,方形上方的红色字样“answer”后面显示的是计算机的输出。左边的三条竖直的图像列显示的是神经网络中三个隐藏层的输出,可以看出,随着层次的不断深入,越深的层次处理的细节越低,例如层3基本处理的都已经是线的细节了。LeNet的发明人就是前文介绍过的机器学习的大牛Yann LeCun(图1右者)。

    进入90年代,神经网络的发展进入了一个瓶颈期。其主要原因是尽管有BP算法的加速,神经网络的训练过程仍然很困难。因此90年代后期支持向量机(SVM)算法取代了神经网络的地位。

    3、SVM(支持向量机)

    支持向量机算法是诞生于统计学习界,同时在机器学习界大放光彩的经典算法。

    支持向量机算法从某种意义上来说是逻辑回归算法的强化:通过给予逻辑回归算法更严格的优化条件,支持向量机算法可以获得比逻辑回归更好的分类界线。但是如果没有某类函数技术,则支持向量机算法最多算是一种更好的线性分类技术。

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。“核”事实上就是一种特殊的函数,最典型的特征就是可以将低维的空间映射到高维的空间。

    我们如何在二维平面划分出一个圆形的分类界线?在二维平面可能会很困难,但是通过“核”可以将二维空间映射到三维空间,然后使用一个线性平面就可以达成类似效果。也就是说,二维平面划分出的非线性分类界线可以等价于三维平面的线性分类界线。于是,我们可以通过在三维空间中进行简单的线性划分就可以达到在二维平面中的非线性划分效果。

    支持向量机是一种数学成分很浓的机器学习算法(相对的,神经网络则有生物科学成分)。在算法的核心步骤中,有一步证明,即将数据从低维映射到高维不会带来最后计算复杂性的提升。于是,通过支持向量机算法,既可以保持计算效率,又可以获得非常好的分类效果。因此支持向量机在90年代后期一直占据着机器学习中最核心的地位,基本取代了神经网络算法。直到现在神经网络借着深度学习重新兴起,两者之间才又发生了微妙的平衡转变。

    4、聚类算法

    前面的算法中的一个显著特征就是我的训练数据中包含了标签,训练出的模型可以对其他未知数据预测标签。在下面的算法中,训练数据都是不含标签的,而算法的目的则是通过训练,推测出这些数据的标签。这类算法有一个统称,即无监督算法(前面有标签的数据的算法则是有监督算法)。无监督算法中最典型的代表就是聚类算法。

    让我们还是拿一个二维的数据来说,某一个数据包含两个特征。我希望通过聚类算法,给他们中不同的种类打上标签,我该怎么做呢?简单来说,聚类算法就是计算种群中的距离,根据距离的远近将数据划分为多个族群。

    聚类算法中最典型的代表就是K-Means算法。

    5、降维算法

    降维算法也是一种无监督学习算法,其主要特征是将数据从高维降低到低维层次。在这里,维度其实表示的是数据的特征量的大小,例如,房价包含房子的长、宽、面积与房间数量四个特征,也就是维度为4维的数据。可以看出来,长与宽事实上与面积表示的信息重叠了,例如面积=长 × 宽。通过降维算法我们就可以去除冗余信息,将特征减少为面积与房间数量两个特征,即从4维的数据压缩到2维。于是我们将数据从高维降低到低维,不仅利于表示,同时在计算上也能带来加速。

    刚才说的降维过程中减少的维度属于肉眼可视的层次,同时压缩也不会带来信息的损失(因为信息冗余了)。如果肉眼不可视,或者没有冗余的特征,降维算法也能工作,不过这样会带来一些信息的损失。但是,降维算法可以从数学上证明,从高维压缩到的低维中最大程度地保留了数据的信息。因此,使用降维算法仍然有很多的好处。

    降维算法的主要作用是压缩数据与提升机器学习其他算法的效率。通过降维算法,可以将具有几千个特征的数据压缩至若干个特征。另外,降维算法的另一个好处是数据的可视化,例如将5维的数据压缩至2维,然后可以用二维平面来可视。降维算法的主要代表是PCA算法(即主成分分析算法)。

    6、推荐算法

    推荐算法是目前业界非常火的一种算法,在电商界,如亚马逊,天猫,京东等得到了广泛的运用。推荐算法的主要特征就是可以自动向用户推荐他们最感兴趣的东西,从而增加购买率,提升效益。推荐算法有两个主要的类别:

    一类是基于物品内容的推荐,是将与用户购买的内容近似的物品推荐给用户,这样的前提是每个物品都得有若干个标签,因此才可以找出与用户购买物品类似的物品,这样推荐的好处是关联程度较大,但是由于每个物品都需要贴标签,因此工作量较大。

    另一类是基于用户相似度的推荐,则是将与目标用户兴趣相同的其他用户购买的东西推荐给目标用户,例如小A历史上买了物品B和C,经过算法分析,发现另一个与小A近似的用户小D购买了物品E,于是将物品E推荐给小A。

    两类推荐都有各自的优缺点,在一般的电商应用中,一般是两类混合使用。推荐算法中最有名的算法就是协同过滤算法。

    7、梯度下降法

    梯度下降法 是一个最优化算法,通常也称为最速下降法。最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的。最速下降法是用负梯度方向为搜索方向的,最速下降法越接近目标值,步长越小,前进越慢。好比将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快;当然解决问题的方法有很多,梯度下降只是其中一个,还有一种方法叫Normal Equation

    8、牛顿法

    牛顿法是一种非线性最小二乘最优化方法。其利用了目标函数的泰勒展开式把非线性函数的最小二乘化问题化为每次迭代的线性函数的最小二乘化问题。牛顿法的缺点在于:若初始点距离极小值点过远,迭代步长过大会导致迭代下一代的函数值不一定小于上一代的函数值。牛顿法在二阶导数的作用下,从函数的凸性出发,直接搜索怎样到达极值点,也就是说在选择方向时,不仅考虑当前坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。

    从收敛速度来看,梯度下降是线性收敛,牛顿法是超线性的,至少二阶收敛~,当目标函数是凸函数时,梯度下降法的解释全局最优解。一般情况下,其解不保证是全局最优解。当目标函数不是凸函数时,可以将目标函数近似转化成凸函数。或者用一些智能优化算法例如模拟退火,以一定的概率跳出局部极值,但是这些算法都不保证能找到最小值。

    9、BP算法

    BP算法是学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。

    10、SMO算法

    SMO算法是针对求解SVM问题的Lagrange对偶问题,一个二次规划式,开发的高效算法。传统的二次规划算法的计算开销正比于训练集的规模,而SMO基于问题本身的特性(KKT条件约束)对这个特殊的二次规划问题的求解过程进行优化。对偶问题中我们最后求解的变量只有Lagrange乘子α向量,这个算法的基本思想就是每次都只选取一对 (αi,αj),固定 α向量其他维度的元素的值,然后进行优化,直至收敛。

    除了以上算法之外,机器学习界还有其他的如高斯判别,朴素贝叶斯,决策树等等算法。但是上面列的10个算法是使用最多,影响最广,种类最全的典型。机器学习界的一个特色就是算法众多,发展百花齐放。

    下面做一个总结,按照训练的数据有无标签,可以将上面算法分为监督学习算法和无监督学习算法,但推荐算法较为特殊,既不属于监督学习,也不属于非监督学习,是单独的一类。

    监督学习算法:

    线性回归,逻辑回归,神经网络,SVM

    无监督学习算法:

    聚类算法,降维算法

    特殊算法:

    推荐算法

    除了这些算法以外,有一些算法的名字在机器学习领域中也经常出现。但他们本身并不算是一个机器学习算法,而是为了解决某个子问题而诞生的。你可以理解他们为以上算法的子算法,用于大幅度提高训练过程。其中的代表有:梯度下降法,主要运用在线型回归,逻辑回归,神经网络,推荐算法中;牛顿法,主要运用在线型回归中;BP算法,主要运用在神经网络中;SMO算法,主要运用在SVM中。

    机器学习与大数据的结合产生了巨大的价值。基于机器学习技术的发展,数据能够“预测”。对人类而言,积累的经验越丰富,阅历也广泛,对未来的判断越准确。例如常说的“经验丰富”的人比“初出茅庐”的小伙子更有工作上的优势,就在于经验丰富的人获得的规律比他人更准确。而在机器学习领域,根据著名的一个实验,有效的证实了机器学习界一个理论:即机器学习模型的数据越多,机器学习的预测的效率就越好。

    成功的机器学习应用不是拥有最好的算法,而是拥有最多的数据!

    在大数据的时代,有好多优势促使机器学习能够应用更广泛。例如随着物联网和移动设备的发展,我们拥有的数据越来越多,种类也包括图片、文本、视频等非结构化数据,这使得机器学习模型可以获得越来越多的数据。同时大数据技术中的分布式计算Map-Reduce使得机器学习的速度越来越快,可以更方便的使用。种种优势使得在大数据时代,机器学习的优势可以得到最佳的发挥。

    展开全文
  • 一.ExceptionError Throw early catch late ,异常尽早抛出,捕获异常后避免’生吞’或者直接使用Exception(要更细致异常) try catch 尽量捕获关键代码段,...NoClassDefFoundErrorClassNOtFoundException区别: ...
  • 作为数据保护的老牌厂商,赛门铁克推出的以NetBackup(以下简称NBU)、 Backup Exec(以下简称BE)软件为核心的自己独有的数据保护方法,旨在帮助用户解决他们所面临的备份问题。传统备份相比,赛门铁克提供的方法可使...
  • java公平锁非公平锁的区别

    千次阅读 2018-03-04 21:09:42
    公平锁和非公平锁在说获取上都使用到了 volatile 关键字修饰state字段, 这是保证多线程环境下锁获取与否的核心。 但是当并发情况下多个线程都读取到 state == 0时,则必须用到CAS技术,一门CPU原子锁...
  • 知识工程着力点在于关键核心技术问题解决,通过成熟知识沉淀、复用解决明确研发、工程问题。知识工程会用到知识管理方法和分析模型,是知识管理一种具体应用。知识管理则范围更广,...
  • 关键帧动画,也是CAPropertyAnimation的子类,CABasicAnimation的区别是: –CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 – ...
  • ADAS系统需要多种传感器配合工作,毫米波雷达由于其众多优势,成为ADAS不可或缺的核心传感器,也是自动驾驶和无人驾驶的关键传感器。在自动驾驶传感器领域,看上去有些沉寂毫米波雷达开始变得热门。虽然毫米波雷达...
  • 封装ob ...面向对象的核心是多态,关键在于你不必知道对象真正类型,只要知道它是一种什么类型,C++中,通过类,继承,虚函数来实现。 《深度探索C++对象模型》上第一章最后几段话: Object-ori
  • 智能手机操作系统发展经历了从黑莓到Android系统在每个阶段移动供应商和操作系统供应商的利益分配是核心的矛盾;移动供应商盈利模式随着智能电网技术的发展移动供应商的盈利模式也在变化;Google的战略让客户更多的...
  • 三图示核心动画03——CAKeyframeAnimation(关键帧动画)一、简介关键帧动画,也是 CAPropertyAnimation 的子类,CABasicAnimation的区别是: CABasicAnimation只能从一个数值(fromValue)变到另一个数值(to...
  • 核心逻辑在 ep_send_events_proc 函数里实现,关键在 就绪列表。 epoll 监控 fd 产生事件,fd 信息被添加进就绪列表。 epoll_wait 发现有就绪事件,进程持续执行,或者被唤醒工作。 epoll 将 fd 信息从就绪列表中...
  • 基于 SAN 存储为核心的三层式基础架构(服务器-存储网络-存储设备),成为企业中最常用的基础架构,也称作传统架构。互联网的出现,信息量呈现爆炸式增长,人类产生数据的速度超越了以往所有时代的总和,需要存储的...
  • ADAS系统需要多种传感器配合工作,毫米波雷达由于其众多优势,成为ADAS不可或缺的核心传感器,也是自动驾驶和无人驾驶的关键传感器。 在自动驾驶传感器领域,看上去有些沉寂毫米波雷达开始变得热门。虽然毫米波...
  • OEM合作方式是,由品牌生产者利用自己掌握的关键的核心技术负责设计和开发新产品,控制销售渠道,被委托制造商仅按照品牌方技术资料及要求进行生产制造。ODM合作方式则为:采购方委托制造方提供从研发、设计到...
  • 专著和SCI那个好专著SCI论文作为个人学术成果都是很关键的,尤其是针对需要评职称人员来说,两者都是加分项,并且加分都不低。所以无法对比出哪个好哪个不好,只能说评职称时候,能都发表最好。如果从发表...
  • CPU核心数目 多线程

    万次阅读 2017-03-16 22:05:23
    今天就这一问题查了一些资料,现整理如下:要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键的几点: a)进程之间是相互独立的,不共享内存和数据,线程之间的内存和数据是公用的,每个线程...
  • 基于 SAN 存储为核心的三层式基础架构(服务器-存储网络-存储设备),成为企业中最常用的基础架构,也称作传统架构。互联网的出现,信息量呈现爆炸式增长,人类产生数据的速度超越了以往所有时代的总和,需要存储的...
  • 名词解释1:OEM是Original Equipment Manufacture(原始设备制造商)缩写,它是指一种"代工生产"方式,其含义是生产者不直接生产产品,而是利用自己掌握"关键的核心技术",负责设计和开发、控制销售"渠道",具体...
  • OEM(Original Equipment Manufactuce,原始设备生产商)ODM(Original Design Manufactuce,原始设计制造商)OBM(Orignal Brand Manufactuce,原始品牌...OEM合作方式是,由品牌生产者利用自己掌握的关键的核心技术负...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 242
精华内容 96
关键字:

关键与核心的区别