当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪detached HEAD意义详解              概述:在使用git的过程中,我们常常会对其中的HEAD感到疑惑:HEAD是什么意思?表示当前分支吗?什么是处于游离态的commit点?等等,这些都和一个叫做detached head的状态.........
    ▪Hadoop云计算的初步认识      在说Hadoop之前,作为一个铁杆粉丝先粉一下Google。Google的伟大之处不仅在于它建立了一个强悍的搜索引擎,它还创造了几项革命性的技术:GFS,MapReduce,BigTable,即所谓的Google三驾马车。Google.........
    ▪GoF23种设计模式之创建型模式之工厂方法模式      一、概述         定义一个用于创建对象的接口,让子类去决定实例化哪个类。工厂方法将一个类的实例化延迟至其子类。 二、适用性 1.当一个类不知道它所必须创建的对象的类.........

[1]detached HEAD意义详解
    来源: 互联网  发布时间: 2013-11-19
        概述:在使用git的过程中,我们常常会对其中的HEAD感到疑惑:HEAD是什么意思?表示当前分支吗?什么是处于游离态的commit点?等等,这些都和一个叫做detached head的状态有关,我们来看看它的真面目。
    
        通常情况下,HEAD指向一个分支;同时,每一个分支对应一个特定的commit(确切的说,一个分支上可以有多个commit,但是只有一个顶层commit,而且commit之间是简单的线性关系)。我们来看下面这个包含三个commit的例子,其中目前在master分支上。
                      HEAD (refers to branch 'master')
                        |
                       v
           a---b---c  branch 'master' (refers to commit 'c')
                 ^
                  |
             tag 'v2.0' (refers to commit 'b')

        在这样的状况下,如果进行一次提交,当前分支将指向新的提交点。具体来说,git commit创建了一个新的commit id,它的父节点是的commit的id是C。这个时候,HEAD仍然指向master分支,而且指向commit id是d的提交点。
       
    $ edit; git add; git commit

HEAD (refers to branch 'master')
                             |
                             v
           a---b---c---d  branch 'master' (refers to commit 'd')
                ^
                |
             tag 'v2.0' (refers to commit 'b')


       有时,如果能够检出到一个不在分支顶端的commit点是很有用的(通常情况下,我们直接运行命令git checkout mater,这样checkout到master的最新commit上);同样,如果能够创建一个不属于任何分支的提交点也是一件很有用的事情。运行接下来的两条命令,看看会发生什么。
       
    $ git checkout v2.0  # or
    $ git checkout master^^

HEAD (refers to commit 'b')
               |
               v
           a---b---c---d  branch 'master' (refers to commit 'd')
               ^
               |
             tag 'v2.0' (refers to commit 'b')       

    注意,现在head已经指向commit b,这就是所谓的dedatched head状态。从这里我们也可以看出,head是当前index的状态,而不是当前分支(的最近commit节点)。这仅仅意味着head指向某个特定的commit点,而不是指向每一个特定的分支(的顶端节点)。如果我们此时提交一个commit,看看将要发生什么:

   

        $ edit; git add; git commit


HEAD (refers to commit 'e')
                 |
                 v
                 e
                /
           a---b---c---d  branch 'master' (refers to commit 'd')
               ^
               |
             tag 'v2.0' (refers to commit 'b')
    注意,此时产生了一个新的提交点,但是它只能被head索引到,不属于任何一个分支。当然,我们还可以给在这个“无名分支”的基础上继续提交。
          
 $ edit; git add; git commit

                    HEAD (refers to commit 'f')
                      |
                      v
                 e---f
                /
           a---b---c---d  branch 'master' (refers to commit 'd')
               ^
               |
             tag 'v2.0' (refers to commit 'b')
     实际上,我们可以进行任何git的常规操作。但是,让我们开看看如果我们运行git checkout master将会发生什么:
          

 $ git checkout master


 HEAD (refers to branch 'master')
                 e---f     |
                /           v
           a---b---c---d  branch 'master' (refers to commit 'd')
               ^
               |
             tag 'v2.0' (refers to commit 'b')
 此时,我们一定要注意,e f已经处于无法被索引到的状态。最终e和f将被git的默认回收机制所回收,除非我们在它们被回收之前创建一个指向他们的索引。如果我们没有从commit f离开的话,可以用接下来的命令创建一个指向f的索引。        
   
$ git checkout -b foo   (1)
$ git branch foo        (2)
$ git tag foo           (3)
1.创建来一个foo分支,指向f,接着更新head指向分支foo,此时,我们不再处在detached head的状态
2.同样创建了一个foo分支,但是head仍然指向master分支,仍然处在detached head的状态。
3.创建了一个新标签foo,仍处于detached的状态。
        如果我们从f处离开,我们必须首先恢复他的主体名称,接着我们才可以创建指向它的索引。例如,为了看看最近的两个由head指向的commit点,我们可以使用如下的命令:   
        
$ git reflog -2 HEAD # or

$ git log -g -2 HEAD


参考文献:man  git-checkout
作者:trochiluses 发表于2013-5-29 23:36:52 原文链接
阅读:250 评论:0 查看评论

    
[2]Hadoop云计算的初步认识
    来源: 互联网  发布时间: 2013-11-19

在说Hadoop之前,作为一个铁杆粉丝先粉一下Google。Google的伟大之处不仅在于它建立了一个强悍的搜索引擎,它还创造了几项革命性的技术:GFS,MapReduce,BigTable,即所谓的Google三驾马车。Google虽然没有公布这几项技术的实现代码,但它发表了详细的设计论文,这给业界带来了新鲜气息,很快就出现了类似于Google三驾马车的开源实现,Hadoop就是其中的一个。


1.什么是Hadoop
Hadoop主要是由HDFS和MapReduce组成,HDFS是一个分布式文件系统(Hadoop Distributed File System),MapReduce则是用于并行处理大数据集的软件框架。因此,Hadoop是一个能够对大量数据进行分布式处理的软件框架,它是一种技术的实现。
Hadoop是Apache基金会下的一款开源软件,它实现了包括分布式文件系统HDFS和MapReduce框架在内的云计算软件平台的基础架构,并且在其上整合了包括数据库、云计算管理、数据仓储等一系列平台,其已成为工业界和学术界进行云计算应用和研究的标准平台。Hadoop现在已经广泛应用于包括国外的FaceBook,Twitter,Yahoo!等公司,国内的百度,阿里等,Hadoop运行在数以千计的服务器和数以万计的CPU的集群上。
通俗的说Hadoop是一套开源的、基础是Java的、目前能够让数千台普通、廉价的服务器组成一个稳定的、强大的集群,使其能够对pb级别的大数据进行存储、计算。已经具有了强大稳定的生态系统,也具有很多使用的延伸产品。比如做查询的Pig, 做分布式命名服务的ZooKeeper, 做数据库的Hive等等。
基于Hadoop,用户可编写处理海量数据的分布式并行程序,并将其运行于由成百上千个结点组成的大规模计算机集群上。Hadoop已被全球几大IT公司用作其”云计算”环境中的重要基础软件,如:雅虎正在开发基于Hadoop的开源项目Pig, 这是一个专注于海量数据集分析的分布式计算程序。亚马逊公司则基于Hadoop推出了Amazon S3(Amazon Simple Storage Service ),提供可靠,快速,可扩展的网络存储服务。因此,Hadoop是云计算中一部分技术的实现,而不是全部。

2.关于MapReduce
Hadoop说起来很简单,一个存储系统(HDFS),一个计算系统(MapReduce)。仅此而已。模型虽然简单,但我觉得它的精妙之处也就在这里。目前,通过提高CPU主频来提升计算性能的时代已经结束了,因此并行计算、分布式计算在业界发展了起来,但是这也往往意味着复杂的设计与实现,如果能找到一种方法,只需要写简单的程序就能实现分布式计算,那就太好了。
我们可以回想下当初做的课堂作业,它可能是一个处理数据的程序,没有多线程,没有进程间通信,数据输入都是来自键盘(stdin),处理完数据之后打印到屏幕(stdout),这时的程序非常简单。后来我们学习了多线程、内存管理、设计模式,写出的程序越来越大,也越来越复杂。但是当学习使用Hadoop时,我们发现又回到了最初,尽管底层是一个巨大的集群,可是我们操作文件时就像在本地一样简单,写MapReduce程序时也只需要在单线程里实现数据处理。
Hadoop就是这样一个东西,简单的文件系统(HDFS),简单的计算模型(MapReduce)。这其中,我觉得HDFS是很自然的东西,如果我们自己实现一个,也很可能是这样的。但是仔细琢磨下MapReduce,会发现它似乎是个新奇事物,不像HDFS的界面那样通俗易懂老少皆宜。MapReduce虽然模型简单,却是一个新的、不广为人所知的概念。比如说,如果说要简化计算,为何要做成Map和Reduce两个阶段,而不是一个函数足矣呢?另外,它也不符合我们耳熟能详的那些设计模式。一句话,MapReduce实在太另类了。
Hadoop的思想来源于Google的几篇论文,Google的那篇MapReduce论文里说:
Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional languages。
这句话提到了MapReduce思想的渊源,大致意思是,MapReduce的灵感来源于函数式语言(比如Lisp)中的内置函数map和reduce。函数式语言也算是阳春白雪了,离我们普通开发者总是很远。简单来说,在函数式语言里,map表示对一个列表(List)中的每个元素做计算,reduce表示对一个列表中的每个元素做迭代计算。它们具体的计算是通过传入的函数来实现的,map和reduce提供的是计算的框架。不过从这样的解释到现实中的MapReduce还太远,仍然需要一个跳跃。再仔细看,reduce既然能做迭代计算,那就表示列表中的元素是相关的,比如我想对列表中的所有元素做相加求和,那么列表中至少都应该是数值吧。而map是对列表中每个元素做单独处理的,这表示列表中可以是杂乱无章的数据。这样看来,就有点联系了。在MapReduce里,Map处理的是原始数据,自然是杂乱无章的,每条数据之间互相没有关系;到了Reduce阶段,数据是以key后面跟着若干个value来组织的,这些value有相关性,至少它们都在一个key下面,于是就符合函数式语言里map和reduce的基本思想了。
这样我们就可以把MapReduce理解为,把一堆杂乱无章的数据按照某种特征归纳起来,然后处理并得到最后的结果。Map面对的是杂乱无章的互不相关的数据,它解析每个数据,从中提取出key和value,也就是提取了数据的特征。经过MapReduce的Shuffle阶段之后,在Reduce阶段看到的都是已经归纳好的数据了,在此基础上我们可以做进一步的处理以便得到结果。这就回到了最初,终于知道MapReduce为何要这样设计。

3.什么是云计算
云计算是继1980年代大型计算机到客户端-服务器的大转变之后的又一种巨变,但云计算的概念其实早已提出很久,早在上世纪60年代,麦卡锡就提出了把计算能力作为一种像水和电一样的公用事业提供给用户的理念,这成为云计算思想的起源。在20世纪80年代网格计算、90年代公用计算,21世纪初虚拟化技术、SOA、SaaS应用的支撑下,云计算作为一种新兴的资源使用和交付模式逐渐为学界和产业界所认知。因此,云计算的存在只是一种新的商业计算模型和服务模式。

4.Hadoop云计算的关系 因此可以得出一个结论:Hadoop是一个能够对大量数据进行分布式处理的软件框架,它是一种技术的实现,是云计算技术中重要的组成部分,云计算的概念更广泛且偏向业务而不是必须拘泥于某项具体技术,云计算的存在只是一种新的商业计算模型和服务模式。因此,云计算才会出现“横看成岭侧成峰,远近高低各不同”,各种各样层出不穷的理解。

5.Hadoop的作用
Hadoop作为大数据存储及计算领域的一颗明星,目前已经得到越来越广泛的应用。下面主要分析了Hadoop的一些典型应用场景,并对其进行了深入分析,主要包括下面几个方面:

日志处理: Hadoop擅长这个
并行计算
ETL: 每个人几乎都在做ETL(Extract-Transform-Load)工作 Netezza关于使用Hadoop做ETL任务的看法)
使用HBase做数据分析: 用扩展性应对大量的写操作—Facebook构建了基于HBase的实时数据分析系统
机器学习: 比如Apache Mahout项目

Hadoop是什么?
是google的核心算
    
[3]GoF23种设计模式之创建型模式之工厂方法模式
    来源: 互联网  发布时间: 2013-11-19

一、概述

        定义一个用于创建对象的接口,让子类去决定实例化哪个类。工厂方法将一个类的实例化延迟至其子类。

二、适用性

1.当一个类不知道它所必须创建的对象的类的时候。

2.当一个类希望由其子类来指定它所创建的对象的时候。

3.当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

三、参与者

1.Product:定义工厂方法所创建的对象的接口。

2.ConcreteProduct:实现Product接口。

3.Creator:声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。

4.ConcreteCreator:重定义工厂方法以返回一个ConcreteProduct实例。

四、类图


五、示例

Product

package cn.lynn.factorymethod;

public interface IWork {

    public void doWork();

}
ConcreteProduct
package cn.lynn.factorymethod;

public class ManagerWork implements IWork {

    @Override
    public void doWork() {
        System.out.println("经理审批流程!");
    }

}
package cn.lynn.factorymethod;

public class EmployeeWork implements IWork {

    @Override
    public void doWork() {
        System.out.println("员工处理事情!");
    }

}
Creator
package cn.lynn.factorymethod;

public interface IWorkFactory {

    public IWork getWork();

}
ConcreteCreator
package cn.lynn.factorymethod;

public class ManagerWorkFactory implements IWorkFactory {

    @Override
    public IWork getWork() {
        return new ManagerWork();
    }

}
package cn.lynn.factorymethod;

public class EmployeeWorkFactory implements IWorkFactory {

    @Override
    public IWork getWork() {
        return new EmployeeWork();
    }

}
Test
package cn.lynn.factorymethod;

public class Test {

    public static void main(String[] args) {
        IWorkFactory employeeWorkFactory = new EmployeeWorkFactory();
        employeeWorkFactory.getWork().doWork();
        
        IWorkFactory managerWorkFactory = new ManagerWorkFactory();
        managerWorkFactory.getWork().doWork();
    }

}
Result
员工处理事情!
经理审批流程!

作者:leverage_1229 发表于2013-5-30 4:41:18 原文链接
阅读:39 评论:1 查看评论

    
最新技术文章:
▪主-主数据库系统架构    ▪java.lang.UnsupportedClassVersionError: Bad version number i...    ▪eclipse项目出现红色叉叉解决方案
▪Play!framework 项目部署到Tomcat    ▪dedecms如何做中英文网站?    ▪Spring Batch Framework– introduction chapter(上)
▪第三章 AOP 基于@AspectJ的AOP    ▪基于插件的服务集成方式    ▪Online Coding开发模式 (通过在线配置实现一个表...
▪观察者模式(Observer)    ▪工厂模式 - 程序实现(java)    ▪几种web并行化编程实现
▪机器学习理论与实战(二)决策树    ▪Hibernate(四)——全面解析一对多关联映射    ▪我所理解的设计模式(C++实现)——解释器模...
▪利用规则引擎打造轻量级的面向服务编程模式...    ▪google blink的设计计划: Out-of-Progress iframes    ▪FS SIP呼叫的消息线程和状态机线程
▪XML FREESWITCH APPLICATION 实现    ▪Drupal 实战    ▪Blink: Chromium的新渲染引擎
▪(十四)桥接模式详解(都市异能版)    ▪你不知道的Eclipse用法:使用Allocation tracker跟...    ▪Linux内核-进程
▪你不知道的Eclipse用法:使用Metrics 测量复杂度    ▪IT行业为什么没有进度    ▪Exchange Server 2010/2013三种不同的故障转移
▪第二章 IoC Spring自动扫描和管理Bean    ▪CMMI简介    ▪目标检测(Object Detection)原理与实现(六)
▪值班总结(1)——探讨sql语句的执行机制    ▪第二章 IoC Annotation注入    ▪CentOS 6.4下安装Vagrant
▪Java NIO框架Netty1简单发送接受    ▪漫画研发之八:会吃的孩子有奶吃    ▪比较ASP和ASP.NET
▪SPRING中的CONTEXTLOADERLISTENER    ▪在Nginx下对网站进行密码保护    ▪Hibernate从入门到精通(五)一对一单向关联映...
▪.NET领域驱动设计—初尝(三:穿过迷雾走向光...    ▪linux下的块设备驱动(一)    ▪Modem项目工作总结
▪工作流--JBPM简介及开发环境搭建    ▪工作流--JBPM核心服务及表结构    ▪Eclipse:使用JDepend 进行依赖项检查
▪windows下用putty上传文件到远程Linux方法    ▪iBatis和Hibernate的5点区别    ▪基于学习的Indexing算法
▪设计模式11---设计模式之中介者模式(Mediator...    ▪带你走进EJB--JMS编程模型    ▪从抽象谈起(二):观察者模式与回调
▪设计模式09---设计模式之生成器模式(Builder)也...    ▪svn_resin_持续优化中    ▪Bitmap recycle方法与制作Bitmap的内存缓存
▪Hibernate从入门到精通(四)基本映射    ▪设计模式10---设计模式之原型模式(Prototype)    ▪Dreamer 3.0 支持json、xml、文件上传
▪Eclipse:使用PMD预先检测错误    ▪Jspx.net Framework 5.1 发布    ▪从抽象谈起(一):工厂模式与策略模式
▪Eclipse:使用CheckStyle实施编码标准    ▪【论文阅读】《Chain Replication for Supporting High T...    ▪Struts2 Path_路径问题
▪spring 配置文件详解    ▪Struts2第一个工程helloStruts极其基本配置    ▪Python学习入门基础教程(learning Python)--2 Python简...
▪maven springmvc环境配置    ▪基于SCRUM的金融软件开发项目    ▪software quality assurance 常见问题收录
▪Redis集群明细文档    ▪Dreamer 框架 比Struts2 更加灵活    ▪Maven POM入门
▪git 分支篇-----不断更新中    ▪Oracle非主键自增长    ▪php设计模式——UML类图
▪Matlab,Visio等生成的图片的字体嵌入问题解决...    ▪用Darwin和live555实现的直播框架    ▪学习ORM框架—hibernate(二):由hibernate接口谈...
▪(十)装饰器模式详解(与IO不解的情缘)    ▪无锁编程:最简单例子    ▪【虚拟化实战】网络设计之四Teaming
▪OSGi:生命周期层    ▪Javascript/Jquery——简单定时器    ▪java代码 发送GET、POST请求
▪Entity Framework底层操作封装(3)    ▪HttpClient 发送GET、POST请求    ▪使用spring框架,应用启动时,加载数据
▪Linux下Apache网站目录读写权限的设置    ▪单键模式的C++描述    ▪学习ORM框架—hibernate(一):初识hibernate
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3