CDI

http://www.infoq.com/cn/articles/cf-javaone-2011-cdi-google-dart CDI 对于依赖注入的概念,相信很多开发人员都不陌生。一个组件在运行过程中会依赖其他组件提供的功能。传统的做法是由组件本身负责查找所需的依赖对象。这种方式会造成组件之间的紧耦合,不利于组件的维护和更新。依赖注入的做法则是由组件以声明式的方式表明其依赖关系,由框架在运行时把所需的组件的Java对象注入到当前组件中。相对于Java SE来说,依赖注入的概念对于Java EE更加适用。Java EE中的很多资源和服务都是由容器来负责管理的。对于单个应用来说,查找由容器负责管理的组件并不是一件容易的事情。更好的做法是由应用来声明所需的资源和服务,由容器负责注入到应用中。通过这种方式,容器也可以更好的对资源和服务进行管理。以数据库连接为例,传统的做法需要由应用本身加载相关驱动并创建数据库连接,以及在适当的时候进行释放。而使用容器管理并注入依赖的做法,则减轻了应用开发人员的工作量。 Java EE 5中添加了对依赖注入的有限支持。通过注解可以往容器管理的对象中注入资源的对应对象。Java EE 6中把依赖注入的概念更进一步,即引入了JSR 299 (Contexts and Dependency Injection for the Java EE platform)规范,简称CDI。CDI规范吸收了来自Spring IoC容器、JBoss Seam和Google Guice的最佳实践,并与Java EE开发的实际需要相结合。正如CDI的字面含义一样,CDI中的两个核心功能是上下文信息 (context) 和依赖注入。这两个功能的结合点是Java中基本的组件模型bean。在CDI中,bean 定义了应用的状态和逻辑,并由容器来进行管理。每个被管理的bean都有定义好的绑定到特定上下文的作用域和生命周期。当需要注入或访问bean时,容器会从作用域对应的上下文中获取。当作用域失效时,对应上下文中所有的对象都会被删除。CDI中的每个bean都可以作为依赖注入时的目标。 CDI中预定义了一些常用的作用域。默认的作用域是Dependent,表示只对被注入的对象生效。作用域ApplicationScoped表示应用的全局作用域,用来创建全局唯一的对象。RequestScoped和SessionScoped则与HTTP相关,分别表示HTTP请求和HTTP会话。ConversationScoped是由应用自定义生命周期长短的作用域,可以用来实现跨多页面的工作流。如下面代码中的OrderProcessor类只存活在HTTP请求中,并且依赖OrderDao接口的实现。容器会在运行时查找到OrderDao接口的实现对象,并注入到OrderProcessor类的对象中。 @Named @RequestScoped public class OrderProcessor { @Inject private OrderDao orderDao; } 通常的依赖注入方式是在代码中只依赖接口,由容器在运行时选择合适的实现类的对象来进行注入。如果接口只有一个实现类,则不需要额外的声明。如果接口有不同的实现,则需要使用限定符 (qualifier) 来声明具体使用的实现,否则容器无法做出正确的选择。CDI的一个特点是限定符不是普通的字符串,而是类型安全的注解。 通过Qualifier元注解可以创建新的限定符注解。如下面的代码创建了一个新的限定符注解InMemory。 @Qualifier @Retention(RUNTIME) @Target({TYPE}) public @interface InMemory {} 该注解可以添加在OrderDao接口的实现上。 @InMemory public class InMemoryOrderDao implements OrderDao { } 如果在测试时,希望使用简单的基于内存的存储实现,可以使用InMemory注解来声明。这样容器在注入时会使用InMemoryOrderDao类的对象。 @Named @RequestScoped public class OrderProcessor { @Inject @InMemory private OrderDao orderDao; } ...

2012-03-26 · 2 min · 276 words · -

Spring的静态工厂方法

Spring的静态工厂方法 http://blog.csdn.net/chensugang/article/details/3357593 上一次写了一篇关于DI的三种方式,其中里面介绍了构造方法的方式,今天学习了一种替代构造器的方法,这就是静态工厂方法来返回对象,下面来看一下静态工厂方法的实现。 静态工厂方法: LoginAction类: package com.spring.test.di; public class LoginAction { private Logic logic; private LoginAction(Logic logic){ this.logic = logic; } public static LoginAction createInstance(Logic logic){ LoginAction loginAction = new LoginAction (logic); return loginAction; } public void execute() { String name = logic.getName(); System.out.print(“My Name Is " + name); } } 注意: 这里使用的构造方法是一个私有方法,createInstance这个就是我们的静态工厂方法 Logic接口: package com.spring.test.di; public interface Logic { public String getName(); } 这里只是做为一个简单的例子,所以我们在该接口中只有一个方法,并且在该接口的实现方法也超级简单 Logic接口实现: package com.spring.test.di; public class LogicImpl implements Logic{ public String getName(){ return “fengyun”; ...

2012-03-26 · 1 min · 133 words · -

static factory method

static factory method 创建类的实例的最常见的方式是用new语句调用类的构造方法。在这种情况下,程序可以创建类的任意多个实例,每执行一条new语句,都会导致Java虚拟机的堆区中产生一个新的对象。假如类需要进一步封装创建自身实例的细节,并且控制自身实例的数目,那么可以提供静态工厂方法。 例如Class实例是Java虚拟机在加载一个类时自动创建的,程序无法用new语句创建java.lang.Class类的实例,因为Class类没有提供public类型的构造方法。为了使程序能获得代表某个类的Class实例,在Class类中提供了静态工厂方法forName(String name),它的使用方式如下: Class c=Class.forName( “Sample “); //返回代表Sample类的实例 静态工厂方法与用new语句调用的构造方法相比,有以下区别。 (1) 构造方法的名字必须与类名相同。这一特性的优点是符合Java语言的规范,缺点是类的所有重载的构造方法的名字都相同,不能从名字上区分每个重载方法,容易引起混淆。 静态工厂方法的方法名可以是任意的,这一特性的优点是可以提高程序代码的可读性,在方法名中能体现与实例有关的信息。例如例程11-5的Gender类有两个静态工厂方法: getFemale()和getMale()。 例程11-5 Gender.java public class Gender{ private String description; private static final Gender female=new Gender( “女 “); private static final Gender male=new Gender( “男 “); private Gender(String description){this.description=description;} public static Gender getFemale(){ return female; } public static Gender getMale(){ return male; } public String getDescription(){return description;} } 这一特性的缺点是与其他的静态方法没有明显的区别,使用户难以识别类中到底哪些静态方法专门负责返回类的实例。为了减少这一缺点带来的负面影响,可以在为静态工厂方法命名时尽量遵守约定俗成的规范,当然这不是必需的。目前比较流行的规范是把静态工厂方法命名为valueOf或者getInstance。 l valueOf: 该方法返回的实例与它的参数具有同样的值,例如: Integer a=Integer.valueOf(100); //返回取值为100的Integer对象 从上面代码可以看出,valueOf()方法能执行类型转换操作,在本例中,把int类型的基本数据转换为Integer对象。 l getInstance: 返回的实例与参数匹配,例如: ...

2012-03-26 · 2 min · 265 words · -

极限编程

极限编程 (ExtremeProgramming,简称XP) 是由KentBeck在1996年提出的。KentBeck在九十年代初期与WardCunningham共事时,就一直共同探索着新的软件开发方法,希望能使软件开发更加简单而有效。Kent仔细地观察和分析了各种简化软件开发的前提条件、可能性以及面临的困难。1996年三月,Kent终于在为DaimlerChrysler所做的一个项目中引入了新的软件开发观念——XP。 极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善: 加强交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。 软件开发的内容是: 需求、设计、编程和测试。 需求: 不仅仅是用户需求,应该是开发中遇到的所有的需求。比如,你首先要知道做这个项目是为了解决什么问题;测试案例中应该输入什么数据……为了清楚地知道这些需求,你经常要和客户、项目经理等交流。 设计: 编码前,肯定有个计划告诉你要做什么,结构是怎样等等。你一定要按照这个来做,否则可能会一团糟。 编程: 如果在项目截止日,你的程序不能跑起来或达不到客户的要求,你就拿不到钱。 测试: 目的是让你知道,什么时候算是完成了。如果你聪明,你就应该先写测试,这样可以及时知道你是否真地完成了。否则,你经常会不知道,到底有哪些功能是真正完成了,离预期目标还差多远。 软件开发中,客户和开发人员都有自己的基本权利和义务。 客户: 定义每个用户需求的商业优先级; 制订总体计划,包括用多少投资、经过多长时间、达到什么目的; 在项目开发过程中的每个工作周,都能让投资获得最大的收益; 通过重复运行你所指定的功能测试,准确地掌握项目进展情况; 能随时改变需求、功能或优先级,同时避免昂贵的再投资;能够根据各种变化及时调整项目计划; 能够随时取消项目;项目取消时,以前的开发工作不是一堆垃圾,已开发完的功能是合乎要求的,正在进行或未完成的的工作则应该是不难接手的。 开发人员: 知道要做什么,以及要优先做什么; 工作有效率; 有问题或困难时,能得到客户、同事、上级的回答或帮助; 对工作做评估,并根据周围情况的变化及时重新评估; 积极承担工作,而不是消极接受分配; 一周40小时工作制,不加班。 这就是软件开发,除此之外再还有其它要关心的问题! 灵巧的轻量级软件开发方法 一套软件开发方法是由一系列与开发相关的规则、规范和惯例。重量级的开发方法严格定义了许多的规则、流程和相关的文档工作。灵巧的轻量级开发方法,其规则和文档相对较少,流程更加灵活,实施起来相对较容易。 在软件工程概念出现以前,程序员们按照自己喜欢的方式开发软件。程序的质量很难控制,调试程序很繁琐,程序员之间也很难读懂对方写的代码。1968年,EdsgerDijkstra给CACM写了一封题为GOTOStatementConsideredHarmful的信,软件工程的概念由此诞生。程序员们开始摒弃以前的做法,转而使用更系统、更严格的开发方法。为了使控制软件开发和控制其它产品生产一样严格,人们陆续制定了很多规则和做法,发明了很多软件工程方法,软件质量开始得到大幅度提高。随着遇到的问题更多,规则和流程也越来越精细和复杂。 到了今天,在实际开发过程中,很多规则已经难于遵循,很多流程复杂而难于理解,很多项目中文档的制作过程正在失去控制。人们试图提出更全面更好的一揽子方案,或者寄希望于更复杂的、功能更强大的辅助开发工具 (CaseTools) ,但总是不能成功,而且开发规范和流程变得越来越复杂和难以实施。 为了赶进度,程序员们经常跳过一些指定的流程,很少人能全面遵循那些重量级开发方法。 失败的原因很简单,这个世界没有万能药。因此,一些人提出,将重量级开发方法中的规则和流程进行删减、重整和优化,这样就产生了很多适应不同需要的轻量级流程。在这些流程中,合乎实际需要的规则被保留下来,不必要的复杂化开发的规被抛弃。而且,和传统的开发方法相比,轻量级流程不再象流水生产线,而是更加灵活。 ExtremeProgramming (XP) 就是这样一种灵巧的轻量级软件开发方法。 为什么称为"Extreme" (极限) “Extreme” (极限) 是指,对比传统的项目开发方式,XP强调把它列出的每个方法和思想做到极限、做到最好;其它XP所不提倡的,则一概忽略 (如开发前期的整体设计等) 。一个严格实施XP的项目,其开发过程应该是平稳的、高效的和快速的,能够做到一周40小时工作制而不拖延项目进度。 极限编程中有四个核心价值是我们在开发中必须注意的: 沟通 (Communication) 、简单 (Simplicity) 、反馈 (Feedback) 和勇气 (Courage) 。 XP用"沟通、简单、反馈和勇气"来减轻开发压力和包袱;无论是术语命名、专著叙述内容和方式、过程要求,都可以从中感受到轻松愉快和主动奋发的态度和气氛。这是一种帮助理解和更容易激发人的潜力的手段。XP用自己的实践,在一定范围内成功地打破了软件工程"必须重量"才能成功的传统观念。 XP精神可以启发我们如何学习和对待快速变化、多样的开发技术。成功学习XP的关键,是用"沟通、简单、反馈和勇气"的态度来对待XP;轻松愉快地来感受XP的实践思想;自己认真实践后,通过对真实反馈的分析,来决定XP对自己的价值;有勇气接受它,或改进它。 工作环境 为了在软件开发过程中最大程度地实现和满足客户和开发人员的基本权利和义务,XP要求把工作环境也做得最好。每个参加项目开发的人都将担任一个角色 (项目经理、项目监督人等等) 并履行相应的权利和义务。所有的人都在同一个开放的开发环境中工作,最好是所有人在同一个大房子中工作,还有茶点供应;每周40小时,不提倡加班;每天早晨,所有人一起站着开个短会;墙上有一些大白板,所有的Story卡、CRC卡等都贴在上面,讨论问题的时候可以在上面写写画画;下班后大家可以一起玩电脑游戏……。 需求 客户应该是项目开发队伍中的一员,而不是和开发人员分开的;因为从项目的计划到最后验收,客户一直起着很重要的作用。开发人员和客户一起,把各种需求变成一个个小的需求模块 (UserStory) ,例如"计算年级的总人数,就是把该年级所有班的人数累加。";这些模块又会根据实际情况被组合在一起或者被分解成更小的模块;它们都被记录在一些小卡片 (StoryCard) 上,之后分别被程序员们在各个小的周期开发中 (Iteration,通常不超过3个星期) 实现;客户根据每个模块的商业价值来指定它们的优先级;开发人员要做的是确定每个需求模块的开发风险,风险高的 (通常是因为缺乏类似的经验) 需求模块将被优先研究、探索和开发;经过开发人员和客户分别从不同的角度评估每个模块后,它们被安排在不同的开发周期里,客户将得到一个尽可能准确的开发计划;客户为每个需求模块指定验收测试 (功能测试) 。 ...

2012-03-12 · 2 min · 309 words · -

IaaS PaaS SaaS

‘IaaS PaaS SaaS’ 云服务"现在已经快成了一个家喻户晓的词了。如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道。 “云"其实是互联网的一个隐喻,“云计算"其实就是使用互联网来接入存储或者运行在远程服务器端的应用,数据,或者服务。 任何一个使用基于互联网的方法来计算,存储和开发的公司,都可以从技术上叫做从事云的公司。然而,不是所有的云公司都一样。不是所有人都是CTO,所以有时候看到云技术背后的一些词可能会比较头疼。 云也是分层的 任何一个在互联网上提供其服务的公司都可以叫做云计算公司。其实云计算分几层的,分别是Infrastructure (基础设施) -as-a-Service,Platform (平台) -as-a-Service,Software (软件) -as-a-Service。基础设施在最下端,平台在中间,软件在顶端。别的一些"软"的层可以在这些层上面添加。 IaaS: Infrastructure-as-a-Service (基础设施即服务) 第一层叫做IaaS,有时候也叫做Hardware-as-a-Service,几年前如果你想在办公室或者公司的网站上运行一些企业应用,你需要去买服务器,或者别的高昂的硬件来控制本地应用,让你的业务运行起来。 但是现在有IaaS,你可以将硬件外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。 一些大的IaaS公司包括Amazon, Microsoft, VMWare, Rackspace和Red Hat.不过这些公司又都有自己的专长,比如Amazon和微软给你提供的不只是IaaS,他们还会将其计算能力出租给你来host你的网站。 PaaS: Platform-as-a-Service (平台即服务) 第二层就是所谓的PaaS,你公司所有的开发都可以在这一层进行,节省了时间和资源。 PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等。 一些大的PaaS提供者有Google App Engine, Microsoft Azure,Force.com, Heroku,Engine Yard。最近兴起的公司有AppFog, Mendix 和 Standing Cloud SaaS: Software-as-a-Service (软件即服务) 第三层也就是所谓SaaS。这一层是和你的生活每天接触的一层,大多是通过网页浏览器来接入。任何一个远程服务器上的应用都可以通过网络来运行,就是SaaS了。 你消费的服务完全是从网页如Netflix, MOG, Google Apps, Box.net, Dropbox或者苹果的iCloud那里进入这些分类。尽管这些网页服务是用作商务和娱乐或者两者都有,但这也算是云技术的一部分。 一些用作商务的 SaaS 应用包括 Citrix 的 GoToMeeting,WebEx,Salesforce的CRM,ADP,Workday和SuccessFactors。 Iaas和Paas之间的比较 PaaS的主要作用是将一个开发和运行平台作为服务提供给用户,而IaaS的主要作用是提供虚拟机或者其他资源作为服务提供给用户。接下来,将在七个方面对PaaS和IaaS进行比较: 开发环境: PaaS基本都会给开发者提供一整套包括IDE在内的开发和测试环境,而IaaS方面用户主要还是沿用之前比较熟悉那套开发环境,但是因为之前那套开发环境在和云的整合方面比较欠缺,所以使用起来不是很方便。 支持的应用: 因为IaaS主要是提供虚拟机,而且普通的虚拟机能支持多种操作系统,所以IaaS支持的应用的范围是非常广泛的。但如果要让一个应用能跑在某个PaaS平台不是一件轻松的事,因为不仅需要确保这个应用是基于这个平台所支持的语言,而且也要确保这个应用只能调用这个平台所支持的API,如果这个应用调用了平台所不支持的API,那么就需要对这个应用进行修改。 开放标准: 虽然很多IaaS平台都存在一定的私有功能,但是由于OVF等协议的存在,使得IaaS在跨平台和避免被供应商锁定这两面是稳步前进的。而PaaS平台的情况则不容乐观,因为不论是Google的App Engine,还是Salesforce的Force.com都存在一定的私有API。 可伸缩性: PaaS平台会自动调整资源来帮助运行于其上的应用更好地应对突发流量。而IaaS平台则需要开发人员手动对资源进行调整才能应对。 整合率和经济性: PaaS平台整合率是非常高,比如PaaS的代表Google App Engine能在一台服务器上承载成千上万的应用,而普通的IaaS平台的整合率最多也不会超过100,而且普遍在10左右,使得IaaS的经济性不如PaaS。 ...

2012-03-06 · 1 min · 87 words · -

MySQL index

MySQL index http://book.51cto.com/art/201012/240956.htm 7.2 创建索引 创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。创建索引有3种方式,这3种方式分别是创建表的时候创建索引、在已经存在的表上创建索引和使用ALTER TABLE语句来创建索引。本节将详细讲解这3种创建索引的方法。 7.2.1 创建表的时候创建索引 (1) 创建表时可以直接创建索引,这种方式最简单、方便。其基本形式如下: CREATE TABLE 表名 ( 属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件], …… 属性名 数据类型 [ UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY [ 别名 ] ( 属性名1 [(长度)] [ ASC | DESC] ) ); 其中,UNIQUE是可选参数,表示索引为唯一性索引;FULLTEXT是可选参数,表示索引为全文索引;SPATIAL也是可选参数,表示索引为空间索引;INDEX和KEY参数用来指定字段为索引的,两者选择其中之一就可以了,作用是一样的;“别名"是可选参数,用来给创建的索引取的新名称;“属性1"参数指定索引对应的字段的名称,该字段必须为前面定义好的字段;“长度"是可选参数,其指索引的长度,必须是字符串类型才可以使用;“ASC"和"DESC"都是可选参数,“ASC"参数表示升序排列,“DESC"参数表示降序排列。 1.创建普通索引 创建一个普通索引时,不需要加任何UNIQUE、FULLTEXT或者SPATIAL参数。 【示例7-1】 下面创建一个表名为index1的表,在表中的id字段上建立索引。SQL代码如下: CREATE TABLE index1 (id INT , name VARCHAR(20) , sex BOOLEAN , INDEX ( id) ); 运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下: MySQL> SHOW CREATE TABLE index1 \G ...

2012-03-01 · 2 min · 222 words · -

词法定界

词法定界 词法定界 (lexical scoping,有时候叫静态域) 是许多编程语言约定使用的,变量只能在这套范围 (按功能排列) 内被一些已经定义了的代码段中调用 (引用) 。当被编译之后,这些范围将确定下来。变量定义用这种格式的有时候叫做私有变量。 相反的,还有动态域 (dynamic scoping) 。动态域产生可以在定义变量的代码段外调用的变量。这样定义的变量也叫公共变量。

2012-02-15 · 1 min · 13 words · -

openJPA enhancement error

openJPA enhancement error <openjpa-2.1.1-r422266:1148538 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: " com.wiloon.openjpa.entity.Animal". add line : in persistence.xml

2011-12-28 · 1 min · 39 words · -

ON DUPLICATE KEY UPDATE重复插入时更新

ON DUPLICATE KEY UPDATE重复插入时更新 http://lobert.iteye.com/blog/1604122 ON DUPLICATE KEY UPDATE重复插入时更新 博客分类: MySQL MySQLDUPLICATEUPDATEkey MySQL当插入重复时更新的方法: 第一种方法: 示例一: 插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: Sql代码 INSERT INTO clients (client_id,client_name,client_type) SELECT supplier_id,supplier_name,‘advertising’ FROM suppliers WHERE not exists(select * from clients where clients.client_id=suppliers.supplier_id); 示例一: 插入单条记录 Sql代码 INSERT INTO clients (client_id,client_name,client_type) SELECT 10345,‘IBM’,‘advertising’ FROM dual WHERE not exists (select * from clients where clients.client_id=10345); 使用 dual 做表名可以让你在 select 语句后面直接跟上要插入字段的值,即使这些值还不存在当前表中。 第二种方法: INSERT 中ON DUPLICATE KEY UPDATE的使用 (本文重点) ...

2011-12-16 · 2 min · 246 words · -

RPC 远程过程调用 (Remote Procedure Call)

RPC,Webservice,RMI,JMS RPC 远程过程调用 (Remote Procedure Call) RPC 是远程过程调用 (Remote Procedure Call) 的缩写形式,Birrell 和 Nelson 在 1984 发表于 ACM Transactions on Computer Systems 的论文《Implementing remote procedure calls》对 RPC 做了经典的诠释。RPC 是指计算机 A 上的进程,调用另外一台计算机 B 上的进程,其中 A 上的调用进程被挂起,而 B 上的被调用进程开始执行,当值返回给 A 时,A 进程继续执行。调用方可以通过使用参数将信息传送给被调用方,而后可以通过传回的结果得到信息。而这一过程,对于开发人员来说是透明的。 RPC (Remote Procedure Call Protocol) ——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。 有多种 RPC模式和执行。最初由 Sun 公司提出。IETF ONC 宪章重新修订了 Sun 版本,使得 ONC RPC 协议成为 IETF 标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算环境 (DCE) 。 http://blog.csdn.net/mindfloating/article/details/39473807 http://blog.csdn.net/mindfloating/article/details/39474123 https://waylau.com/remote-procedure-calls/ https://github.com/www1350/javaweb/issues/56 RPC (Remote Procedure Call Protocol) ...

2011-12-14 · 3 min · 476 words · -

jinfo

jinfo jinfo可以输出并修改运行时的java 进程的opts。用处比较简单,用于输出JAVA系统参数及命令行参数。用法是jinfo -opt pid 如: 查看2788的MaxPerm大小可以用 jinfo -flag MaxPermSize 2788 jinfo -flag MaxHeapSize 13112 打印命令行标识参数和系统属性键值对。 -flag name 打印指定的命令行标识参数的名称和值。 -flag [+|-]name 启用或禁用指定的boolean类型的命令行标识参数。 -flag name=value 为给定的命令行标识参数设置指定的值。 -flags 成对打印传递给JVM的命令行标识参数。 -sysprops 以键值对形式打印Java系统属性。 -h 打印帮助信息。 -help 打印帮助信息。 http://www.softown.cn/post/182.html

2011-11-11 · 1 min · 34 words · -

interview index

Interview index https://www.techinterviewhandbook.org/best-practice-questions/ https://raymondjiang.net/2022/02/18/about-leetcode-blind-75/?utm_short=pu2Q5X https://leetcode-cn.com/circle/discuss/CTEQMT/ #http://www.wiloon.com/?p=4781 #http://www.wiloon.com/?p=4219 #http://www.wiloon.com/?p=4117 #http://www.wiloon.com/?p=19

2011-11-11 · 1 min · 9 words · -

javascript 逻辑运算符

javascript 逻辑运算符 运算符优先级 优先级 运算符 结合性 1 ( )[ ] . 从左到右 2 ! ~ ++ – 从右到左 3 * / % 从左到右 4 + - 从左到右 5 << >> »> 从左到右 6 < <= &gt; >= instanceof 从左到右 7 == != 从左到右 8 & 从左到右 9 ^ 从左到右 10 | 从左到右 11 && 从左到右 12 | 从左到右 13 ? : 从左到右 14 = += -= *= /= %= &= |= ^= ~= <<= >>= »>= 从右到左 15 , 从右到左

2011-11-05 · 1 min · 80 words · -

trim

trim 去除多余空格 trim:去除两边空格 lTrim:去除左空格 rTrim: 去除右空格 用法: var str = " hello “; str = str.trim();

2011-11-05 · 1 min · 16 words · -

CGI

CGI CGI(Common Gateway Interface),通用网关接口 通用网关接口,简称CGI,是一种根据请求信息动态产生回应内容的技术。通过CGI,Web 服务器可以将根据请求不同启动不同的外部程序,并将请求内容转发给该程序,在程序执行结束后,将执行结果作为回应返回给客户端。也就是说,对于每个请求,都要产生一个新的进程进行处理。因为每个进程都会占有很多服务器的资源和时间,这就导致服务器无法同时处理很多的并发请求。另外CGI程序都是与操作系统平台相关的,虽然在互联网爆发的初期,CGI为开发互联网应用做出了很大的贡献,但是随着技术的发展,开始逐渐衰落。 CGI: 通用网关接口 Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端 HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子: 现在的个人主页上大部分都有一个留言本。留言本的工作是这样的: 先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下"留言" (到目前为止工作都在客户端) ,浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到"留言结束"的字样。整个过程结束。 功能 绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。 运行环境 CGI程序最初在UNIX操作系统上CERN或NCSA格式的服务器上运行。 在其它操作系统 (如: Windows NT及Windows 95等) 的服务器上也广泛地使用CGI程序,同时它也适用于各种类型机器。 处理步骤 ⑴通过Internet把用户请求送到服务器。 ⑵服务器接收用户请求并交给CGI程序处理。 ⑶CGI程序把处理结果传送给服务器。 ⑷服务器把结果送回到用户。 服务器配置 CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。 配置: 根据所使用的服务器类型以及它的设置把CGI程序放在某一特定的目录中或使其带有特定的扩展名。 ⑴CREN格式服务器的配置: 编辑CREN格式服务器的配置文件 (通常为/etc/httpd.conf) 在文件中加入: Exec cgi-bin//home/www/cgi-bin/.exec。命令中出现的第一个参数cgi-bin/*指出了在URL中出现的目录名字,并表示它出现在系统主机后的第一个目录中,如: http://edgar.stern.nyn.***/cgi-bin/。命令中的第二个参数表示CGI程序目录放在系统中的真实路径。 CGI目录除了可以跟网络文件放在同一目录中,也可以放在系统的其它目录中,但必须保证在你的系统中也具有同样的目录。在对服务器完成设置后,须重新启动服务器 (除非HTTP服务器是用inetd启动的) 。 ⑵NCSA格式服务器的配置 在NCSA格式服务器上有两种方法进行设置: ①在srm.conf文件 (通常在conf目录下) 中加入: Script Alias/cgi-bin/cgi-bin/。Script Alias命令指出某一目录下的文件是可执行程序,且这个命令是用来执行这些程序的;此命令的两个参数与CERN格式服务器中的Exec命令的参数的含意一样。 ②在srm.conf文件加入: Add type application/x-httpd-cgi.cgi。此命令表示在服务器上增加了一种新的文件类型,其后第一个参数为CGI程序的MIME类型,第二个参数是文件的扩展名,表示以这一扩展名为扩展名的文件是CGI程序。 在用上述方法之一设置服务器后,都得重新启动服务器 (除非HTTP服务器是用inetd启动的) 。 编写语言 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。对初学者来说,最好选用易于归档和能有效表示大量数据结构的语言,例如UNIX环境中: · Perl (Practical Extraction and Report Language) · Bourne Shell或者Tcl (Tool Command Language) ...

2011-10-16 · 2 min · 253 words · -

HTTP protocol, HTTP response status codes, 状态码/响应代码

HTTP protocol, HTTP response status codes, 状态码/响应代码 http header RFC 2616 规范说明了处理 HTTP Header 应该是大小写不敏感的。 Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive. golang gin 默认会把 header name 转成首字母大写 Envoy 默认会将 Header 转换为小写 Envoy 只支持两种规则: 全小写 (默认使用的规则) 首字母大写 (默认没有启用) User-Agent 标识用户代理 Referer 告诉服务器用户从哪里来 If-Modified-Since 主要用来检查cache是否过期 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的www文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本 (hypertext) ,这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会 (World Wide Web Consortium) 和Internet工作小组 (Internet Engineering Task Force) 共同合作研究,最终发布了一系列的RFC,其中最著名的就是RFC 2616。RFC 2616定义了HTTP协议的我们今天普遍使用的一个版本HTTP 1.1。 ...

2011-10-16 · 3 min · 530 words · -

通讯协议

通讯协议 通讯协议, TCP/IP 开放系统互联协议中最早的协议之一,它为连接不同操作系统和不同硬件体系结构的互联网络提供通信支持,是一种网络通用语言。TCP/IP协议定义了在互联网络中如何传递、管理信息(文件传送、收发电子邮件、远程登录等),并制定了在出错时必须遵循的规则。 简介 通信协议又称通信规程,是指通信双方对数据传送控制的一种约定。约定中包括对数据格式,同步方式,传送速度,传送步骤,检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守,它也叫做链路控制规程。 电脑与电脑之间的沟通必须讲述相同的语言,才能互相传输信息,自然资料在国际互联网上传递,每一份都要符合一定的规格 (即是相同的语言) ,否则中国送出的资料,在美国那边要怎么收下呢? 这些规格 (语言) 的规定都是事先在会议桌上讲好的,一般我们称之为"协议" (protocol) ,而这种在网络上负责定义资料传输规格的协议,我们就统称为通讯协议。 其实每一种网络所使用的通讯协议都不太一样,但就以我们最常用的Internet为例,当资料要送到Internet上时,就必须要使用Internet用的通讯协议。 详细介绍 TCP/IP TCP (Transmission Control Protocol, 传输控制协议) . TCP/IP是网络中使用的基本的通信协议。虽然从名字上看TCP/IP包括两个协议,TCP和IP(网际协议),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如: 远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。 TCP/IP是用于计算机通信的一组协议,它是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的INTERNET是目前国际上规模最大的计算机网络,正因为INTERNET的广泛使用,使得TCP/IP成了事实上的标准。 之所以说TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。 IP (Internet Protocol, 国际互联网通讯协议) 它们组合成互联网的语言,因为Internet是由全世界很多大大小小的网络连接而成,所以大家必须遵守它的语言 (TCP/IP) 才能顺利跟别人沟通。 http://imgsrc.baidu.com/baike/abpic/item/8697397f0a64693228388aa3.jpg 不过如果你来到别的网络,就等于是来到一个陌生的国家,使用的通讯协议,也就换作另一套了!由此可知TCP/IP只是网络上众多通讯协议的其中一种而已。 在Internet上每一台机器都要有一个IP 每一台连接到Internet上的电脑,为了要让资料能够正确且顺利地传输,它会为每一台机器定义一个IP,也就等于是给你的电脑装上门牌号码;因为资料在电脑之间传输,就和车子在都市中跑来跑去有点像,如果有了IP (门牌号码) ,网络的设备马上便能得知,这一份资料是要送到哪一台电脑去。 IPX/SPX IPX/SPX是基于施乐的XEROX'S Network System (XNS) 协议,而SPX是基于施乐的XEROX'S SPP (Sequenced Packet Protocol: 顺序包协议) 协议,它们都是由novell公司开发出来应用于局域网的一种高速协议。它和TCP/IP的一个显著不同就是它不使用ip地址,而是使用网卡的物理地址即 (MAC) 地址。在实际使用中,它基本不需要什么设置,装上就可以使用了。由于其在网络普及初期发挥了巨大的作用,所以得到了很多厂商的支持,包括microsoft等,到现在很多软件和硬件也均支持这种协议。 NetBEUI NetBEUI (NetBios Enhanced User Interface) ,或NetBios增强用户接口。它是NetBIOS协议的增强版本,曾被许多操作系统采用,例如Windows for Workgroup、Win9x系列、Windows NT等。NETBEUI协议在许多情形下很有用,是WINDOWS98之前的操作系统的缺省协议。总之NetBEUI协议是一种短小精悍、通信效率高的广播型协议,安装后不需要进行设置,特别适合于在"网络邻居"传送数据。所以建议除了TCP/IP协议之外,局域网的计算机最好也安上NetBEUI协议。另外还有一点要注意,如果一台只装了TCP/IP协议的WINDOWS98机器要想加入到WINNT域,也必须安装NetBEUI协议。 网络通信协议 RS-232-C RS-232-C是OSI基本参考模型物理层部分的规格,它决定了连接器形状等物理特性、以0和1表示的电气特性及表示信号意义的逻辑特性。 RS-232-C是EIA发表的,是RS-232-B的修改版。本来是为连接模拟通信线路中的调制解调器等DCE及电传打印机等DTE拉接口而标准化的。现在很多个人计算机也用RS-232-C作为输入输出接口,用RS-232-C作为接口的个人计算机也很普及。 RS-232-C的如下特点: 采用直通方式,双向通信,基本频带,电流环方式,串行传输方式,DCE-DTE间使用的信号形态,交接方式,全双工通信。RS-232-C在ITU建议的V.24和V.28规定的25引脚连接器在功能上具有互换性。 RS-232-C所使用的连接器为25引脚插入式连接器,一般称为25引脚D-SUB。DTE端的电缆顶端接公插头,DCE端接母插座。 RS-232-C所用电缆的形状并不固定,但大多使用带屏蔽的24芯电缆。电缆的最大长度为15m。使用RS-232-C在200K位/秒以下的任何速率都能进行数据传输。 RS-449 http://baike.baidu.com/albums/278358/278358.html#0$fab3ac117148de44ca80c4b3 ...

2011-10-16 · 1 min · 135 words · -

md5, sha256

md5, sha256 # linux md5sum [OPTION]... [FILE]... md5sum foo.tar sha256sum foo.tar sha1sum foo.tar # windows certutil -hashfile foo.tar MD5 certutil -hashfile foo.tar SHA1 certutil -hashfile foo.tar SHA256 # macos md5 foo.tar MD5: 一种单向Hash函数/单向散列函数 Message Digest Algorithm MD5 (中文名为消息摘要算法第五版) 为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321 (R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992) 。 描述 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法 (Message-Digest Algorithm 5) ,此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位 (十六进制长度就是32位) 的"指纹" (或称"报文摘要") ,不同的文件产生相同的报文摘要的可能性是非常非常之小的。 在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。 选项: -b 或 -binary :把输入文件作为二进制文件看待。 -t 或 -text :把输入的文件作为文本文件看待 (默认) 。 -c 或 -check :用来从文件中读取md5信息检查文件的一致性。(不细说了参见info) -status :这个选项和check一起使用,在check的时候,不输出,而是根据返回值表示检查结果。 -w 或 -warn :在check的时候,检查输入的md5信息又没有非法的行,如果有则输出相应信息。 [举例] ...

2011-10-14 · 2 min · 217 words · -

Apache License 2.0

Apache License 2.0 Apache License Apache 协议允许使用了本协议开源的代码不必开源。 用了 Apache 协议的开源代码,必须保留协议文本。你可以修改源码,但必须声明你修改了哪些,并且保留原开源项目中原作者的信息。 用一句话概括 Apache License 就是,你可以用这代码,但是如果开源你必须保留我写的声明;你可以改我的代码,但是如果开源你必须写清楚你改了哪些;你可以加新的协议要求,但不能与我所公布的协议要求产生冲突;你用这代码干什么我不管,但是你不能让我承担任何责任。 kymjs.com/qiniu https://www.kymjs.com/manager/2015/11/21/01/ http://db.apache.org/derby/docs/dev/getstart/

2011-09-22 · 1 min · 17 words · -

URI, URL, URN

URI, URL, URN http://www.ibm.com/developerworks/cn/xml/x-urlni.html http://www.wiloon.com/en/US/partners/index.html 是一个 URI 方案名: http 域名: www.wiloon.com 路径: /en/US/partners/index.html URI 按照 UNIX® 的惯例采用了正斜杠 (a/b/c),因为在 20 世纪 80 年代后期设计 URI 的时候, 在 Internet 上, UNIX 文化比 PC 文化更流行。 URI 可以进一步分为定位器、名称,或者二者兼具。术语"Uniform Resource Locator" (URL) 涉及的是 URI 的子集,除识别资源外,它还通过描述其最初访问机制 (比如它的网络"位置") 来提供定位资源的方法。 术语"Uniform Resource Name" (URN) 在历史上曾用于引用"urn"方案 [RFC2141] 下的 URI,这个 URI 需要是全球惟一的,并且在资源不存在或不再可用时依然保持不变,对于其他任何拥有名称的一些属性的 URI,都需要使用这样的 URI。 对于单独的方案,没有必要将其分为仅仅是一个 “名称"或者是一个"定位器”。 来自任意特定方案的 URI 实例可能有名称或定位器的特征,或两者兼而有之, 这通常取决于标识符分配中的持久性和命名机构对其关注程度, 而不取决于其他方案的质量。未来的规范和相关的文档应当使用通用术语"URI",而不是使用有更多限制的条目"URL"和"URN" [RFC3305]。

2011-09-13 · 1 min · 61 words · -