CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构,通用对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程序体系规范
https://baike.baidu.com/item/CORBA/2776997
CORBA(Common Object Request Broker Architecture,公共
对象请求代理体系结构,通用对象请求代理
体系结构)是由OMG组织制订的一种标准的
面向对象应用程序体系规范。或者说 CORBA
体系结构是对象管理组织(OMG)为解决
分布式处理环境(DCE)中,硬件和
软件系统的互连而提出的一种解决方案;OMG组织是一个国际性的
非盈利组织,其职责是为应用开发提供一个公共框架,制订工业指南和对象管理规范,加快对象技术的发展。
- 中文名
- 公共对象请求代理体系结构
- 外文名
- Common Object Request Broker Architecture
- 简 称
- CORBA
- 背 景
- 面向对象技术的兴起等
基本情况
OMG成立于1989年,作为一个非营利性组织,集中致力于开发在技术上具有先进性、在商业上具有可行性并且独立于厂商的软件互联规范,推广面向对象模型技术,增强软件的可移植性(Portability)、可重用性(Reusability)和互操作性(Interoperability)。该组织成立之初,成员包括Unisys、Sun、Cannon、Hewlett-Packard和Philips等在业界享有声誉的软硬件厂商,目前该组织拥有800多家成员。
OMG组织成立后不久就制订了OMA(Object Management Architecture,
对象管理体系结构)参考模型,该模型描述了OMG规范所遵循的概念化的基础结构。OMA由
对象请求代理ORB、对象服务、公共设施、域
接口和应用接口这几个部分组成,其核心部分是对象请求代理ORB(Object Request Broker)。
CORBA体系的主要内容包括以下几部分。
(1)对象请求代理 (Object Request Broker,ORB)。负责对象在分布环境中透明地收发请求和响应,它是构建分布对象应用、在异构或同构环境下实现应用间互操作的基础。
(2)对象服务(Object Services)。为使用和实现对象而提供的基本对象集合,这些服务应独立于应用领域。主要的CORBA服务有:名录服务(Naming Service)、事件服务(Event Service)、生命周期服务(Life Cycle Service)、关系服务(Relationship Service)以及事务服务(Transaction Service)等。这些服务几乎包括分布系统和面向对象系统的各个方面,每个组成部分都非常复杂。
(3)公共设施(Common Facilitites)。向终端用户提供一组共享服务接口,例如系统管理、组合文档和电子邮件等。
(4)应用接口(Application Interfaces)。由销售商提供的可控制其接口的产品,相应于传统的应用层表示,处于参考模型的最高层。
(5)领域接口(Domain Interfaces)。为应用领域服务而提供的接口,如OMG组织为PDM系统制定的规范。
CORBA系统
开发环境
通常来说,
CORBA把用其他语言开发的
程序码和关于该程序码能力和如何调用该程序码的资讯包到一个套装(package)中,包成套装的物件则可以在网络上被其他程序(或CORBA物件)调用。 在这个意义上来讲,CORBA可以被看作是一个机器可读的
文件档格式,
类似于标头档(header),但是具有相当多的资讯。
CORBA使用一种
接口定义语言用于刻画物件将呈现出来的接口。CORBA又规定了从IDL到特定
程序语言,如C++或Java,实现的映射。这个映射精确的描述了CORBA资料
类型是如何被用户端和
服务器端实现的。标准映射的有Ada、C、C++、Smalltalk、Java、以及Python。 还有一些非标准的映射,为Perl和Tcl的映射由这些语言写的ORB实现。
ORB是一个在对象间建立客户/
服务器联系的中件。使用ORB,客户可以调用
服务器的对象或对象中的应用,被调用的对象不要求在同一台机器上。由ORB负责进行通信,同时ORB也??象完成后返回结果。客户对象完全可以不关心
服务器对象的位置,实现它所采用的具体技术和工作的硬件平台,甚至不必关心服务器对象的与服务无关的
接口信息,这就大大简化了客户
程序的工作。既然能够这么方便,那ORB就需要提供在不同机器间应用
程序间的通信,数据转换,并提供多对象系统的无缝连接。
我们通常编制客户/
服务器程序时,常常需要自己定义通信协议,而协议的制定往往与硬件和实现的方法有关,而ORB能够简化这一过程。在ORB下,协议通过IDL语言进行定义,保证了一致性,为了照顾到灵活性,ORB允许
程序员选择相应的
操作系统,执行环境和编程语言。更重要的是它可以使原来的代码通过一定的方式重用。CORBA是
面向对象标准的第一步,有了这个标准,
软件的实现与工作环境对用户和开发者不再重要,可以把精力更多地放在本地系统的实现与优化上。
控制系统
CORBA标准由对象管理组织(OMG)设立并进行控制,CORBA定义了一系列
API,通信协议,和物件/服务信息模型用于使得异质应用
程序能够互相操作,这些应用程序用不同的程序语言编写,运行在不同的平台上。CORBA因此为定义明确的物件提供了平台和位置的透明性,这些物件是分布式计算平台的基础。
CORBA
分布计算技术,是由绝大多数分布计算平台厂商所支持和遵循的系统规范技术,具有模型完整、先进,独立于系统平台和开发语言,被支持程度广泛的特点,已逐渐成为分布计算技术的标准。COBRA标准主要分为3个层次:
对象请求代理、公共对象服务和公共设施。最底层是
对象请求代理ORB,规定了分布对象的定义(
接口)和语言映射,实现对象间的通讯和互操作,是分布对象系统中的"软总线";在ORB之上定义了很多公共服务,可以提供诸如并发服务、名字服务、
事务(交易)服务、
安全服务等各种各样的服务;最上层的公共设施则定义了组件框架,提供可直接为
业务对象使用的服务,规定业务对象有效协作所需的协定规则。 CORBA的IDL只是IDL的一个例子。 在提供用户语言和平
台中性的远端
程序呼叫规范的同时,CORBA也定义了通常需要的服务,例如事务和安全。
技术创新
CORBA(通用
对象请求代理体系结构)是在当今快速发展的
软件与硬件资源的情况下发展出的一种新技术。它可以让分布的应用
程序完成通信,无论这种应用程序是什么厂商生产的,只要符合CORBA标准就可以相互通信。CORBA 1.1于1991年由OMG提出,同时还提出了
接口定义语言Interface Definition Language,IDL)以及能够让客户/
服务器对象在特定的ORB(
对象请求代理)实现中进行通信。而1994年提出并被采纳的CORBA 2.0标准才真正实现了不同生产厂商间的
互操作性。
CORBA(公共
对象请求代理架构):这是个和
微软com,com+齐名的同类
软件技术规范,由OMT提出。
用于在不同进程(
程序)之间,甚至是不同物理机器上的进程(程序)之间通讯。底层技术依靠RPC[
远程过程调用]实现。
●CORBA体系结构是对象管理组织(OMG)为解决
分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案;
●
OMG是一个世界性的非赢利论坛组织,成立于1989年,最初有3Com、AmericanAirlines、Cannon Inc、DataGeneral、HP、Philips Telecommunication N.M、SUN、Unisys八个成员,2013年已超过700个成员,其目标是开发一种技术上先进和商业上可用,独立于厂商的
软件工业规范;
●1994年12月
OMG完成了CORBA2.0,提出了IIOP(Internet Inter Object Protocol),用以规范不同厂家的ORB之间的真正互通,同时增加了
互操作性和对C++及SmallTalk的匹配,OMG期望通过上述规范,建立一种“连接世界的
体系结构”;
●CORBA 在
面向对象的标准化和互操作上迈出了坚实的一步。使用CORBA,用户能在不知道
软件和硬件平台以及
网络位置的情况下透明的获取信息;
●CORBA自动进行许多
网络规划任务如对象注册、定位、激活;多路径请求;分帧和错误处理机制;
并行处理以及执行操作;
●作为
面向对象系统中的通信核心, CORBA为当代的计算环境中带来了真正意义上的互联;
二、CORBA的含义及特点
●CORBA定义了一种
面向对象的
软件构件构造方法,使不同的应用可以共享由此构造出来的软件构件;
●每个对象都将其内部操作细节封装起来,同时又向外界提供了精确定义的
接口,从而降低了应用系统的复杂性,也降低了
软件开发费用;
●CORBA的平台无关性实现了对象的跨平台引用,开发人员可以在更大的范围内选择最实用的对象加入到自己的应用系统之中;
●CORBA的语言无关性使开发人员可以在更大的范围内相互利用别人的编程技能和成果, 是实现
软件复用的实用化工具
●为某一特定业务用的定制的功能和能力来增强现行
桌面工具和应用
程序;
●改变和发展基于网络的系统以反映新的拓扑结构或新资源;
●现有分布处理机制和方法存在着不足之处。
面向对象的
软件,以数据为中心设计,对象类既具有模块的封装性和类属等特性,还具有继承特性
,极大地提高了类的可扩充性和可再用能力。对象类较之于传统
软件的功能模块而另具有的优点是:
(1)易于理解,具有完整的语义特征;
(2)易于扩充和修改,具有较高的通用性和适应性;
(3)易于构造组装,具有规范的外部
接口。
CORBA系统
开发应用组件必须遵循标准,以保证软件组件的互操作性,只有遵循统一的标准,不同厂商的、不同时期的、不同程序设计风格的、不同编程语言的、不同操作系统的、不同平台上的软件或软件部件才能进行交流与合作。为此,OMG(ObjectManageGroup)提供了一个对象标准CORBA,它定义了一个网连对象的接口,使得对象可以同时工作。基于CORBA的对象请求代理ORB为客户机/服务器开发提供了中间件的新格式。
作为OMG成员的
微软公司撇开CORBA而另辟了COM(ComponetObjectModel),即
组件对象模型,并把COM定位成基于对象的
软件开发模型,尽管COM被认为是微软鼓噪出来的技术,但支持COM的开发工具却不断增多,其中大部分来自于
微软,包括VisualBasic和VisualC ++。
全球性网络使线上的所有设备和
软件成为全球共享的浩瀚的资源,计算机环境也从集中式发展到分布式环境,
开放式系统的发展使用户能够透明地应用由不同厂商制造的不同机型不同平台所组成的异构型计算资源,因此,
分布式处理和
应用集成自然而然地成为人们的共同要求,那么什么是分布式处理和应用集成呢?它们的功能和关键技术是什么呢?简单地讲,分布式处理和应用集成就是指在异构的、网络的、物理性能差别很大的、不同厂商的、不同语言的信息资源的基础上构建信息共享的
分布式系统,并且能够有效地进行应用系统和分布式处理的集成。
分布式处理的关键在于定义可管理的
软件构件,即
面向对象技术中的“对象”。
应用集成的关键在于为跨平台、跨机种、跨
编程语言的产品提供统一的应用
接口。OMG组织针对当今信息产业的要求,公布了CORBA标准,即公共
对象请求代理体系结构(Common Object Request Broker Architecture),这是一个具有
互操作性和可移植性的分布式
面向对象的应用标准。
CORBA的核心是
对象请求代理ORB,它提供对象定位、对象激活和对象通讯的透明机制。客户发出要求服务的请求,而对象则提供服务,ORB把请求发送给对象、把输出值返回给客户。ORB的服务对客户而言是透明的,客户不知道对象驻留在网络中何处、对象是如何通讯、如何实现以及如何执行的,只要他持有对某对象的对象引用,就可以向该对象发出服务请求。
CORBA允许用户以两种不同的方式提出对象请求:
1)静态调用:
通过给定
接口的存根,在编译了对象代码后,进入客户端的
程序。因此,静态调用必须在编译时就知道对象及其
类型。
2)动态调用:
通过ORB的动态调用
接口DII,在运行时生成访问对象的代码。
不管客户以哪一种形式提出请求,ORB的任务是:找出所要对象的位置,激活该对象,向对象传递此请求。对象执行所请求的服务后,把输出值返回给ORB,然后再由ORB返回给客户。
对象连接
CORBA广泛地支持对象的实现,在单
服务器系统中也可以实现由
接口定义语言定义的接口。ORB的灵活性既可以直接集成已有的应用,又不会使新对象受某些原则的制约。
CORBA系统
对象连接提供了有不同类型对象实现时,使用ORB服务的方法,服务包括:对象引用、方法调用、安全控制、对象实现的激活与静候等。
接口定义语言
(IDL)
CORBA用IDL来描述对象
接口,IDL是一种说明性语言,它的语法类似于C++。
IDL提供的
数据类型有:基本数据类型、构造类型、模板类型、和复合类型、操作说明。这些
类型可以用来定义变元的类型和返回类型,操作说明则可以用来定义对象提供的服务。
IDL还提供模块构造,其中可以包含
接口,而接口是IDL各
类型中最重要的,它除了描述CORBA对象以外,还可以用作对象
引用类型。
IDL提供了
接口继承性,派生接口可以继承其基类接口所定义的操作与
类型。IDL的
接口继承性有其特殊性,此处不赘述。
总之,CORBA的IDL是一种说明性语言,描述
面向对象系统开发所遵循的
接口与实现相分离的基本原则。
动态调用接口
把IDL说明编译成
面向对象程序设计语言的实代码后,客户可以调用已知对象的操作。在某些应用中,用户并不了解应用
接口编译信息,但也要求调用对象的操作,这时就要动态调用接口来调用用户的操作了。例如,图形
用户接口应支持用户浏览接口公共库,以获得每个对象所支持的操作信息,用户可根据自己的
需求从浏览对象中挑选出所需的对象操作,具体的对象操作的调用实际上是用动态调用接口来完成的。
接口公用库
接口公用库持久地存储IDL的接口说明,借助于接口公用库,可以实现对象继承性层次结构的导航,并且提供了有关对象支持的所有操作的描述。
接口公用库最常见的功能是为接口
浏览器提供信息,帮助应用开发者找出潜在的可重用的
软件部件。ORB可以利用
接口公用库检查运行时的操作参数
类型,但接口公用库的基本功能是提供类型信息,为动态调用接口发送请求提供信息支持。
尽管有多家供应商提供CORBA产品,但是仍找不到能够单独为异种网络中的所有
CORBA系统
环境提供实现的供应商。不同的CORBA实现之间会出现缺乏互操作性的现象,从而造成一些问题;而且,由于供应商常常会自行定义扩展,而CORBA又缺乏针对多线程环境的规范,对于像C或C++这样的语言,源码兼容性并未完全实现。
CORBA过于复杂,要熟悉CORBA,并进行相应的设计和编程,需要许多个月来掌握,而要达到专家水平,则需要好几年。
分布式计算和对象模型的结合:CORBA是这两者的完美结合,这两部分不仅带来了自身的优点,而且完善了对方的优点;
代理器的使用:CORBA使用代理器来处理系统中客户机与
服务器之间的
消息;
●什么是分布式计算
分布式计算可以拥有稀有
资源共享、平衡机器负载等优点,使
计算机资源的使用更为有效;
CORBA采用一定的手段增强分布式计算:
●CORBA采用增强分布式计算的手段
允许客户机与器间灵活变化的关系;
加入一个称为代理的中介;
支持同步及异步两种通信形式;
●对象模型是对象计算中的概念,是考虑问题及其可能解决方案的概念性
框架; 对象模型的基础是对象概念之上的,对象提供了把行为和属性结合成一单独实体的手段;
●使用对象模型具有以下优点:定义一个基于现实世界的
系统模型
把系统逻辑地分成能完成特定任务的对象
● 在CORBA中分布式计算和对象模型的结合实现了相互促进,CORBA在分布式计算和对象模型环境中加入了下列内容:
●分布式计算方面的增强:对
分布式计算环境,CORBA在环境中加入了特定对象的引用。在CORBA中,要完成某个操作,所需要做的仅仅是请求某个有能力完成该操作的对象去完成它,客户机不需要知道更多的信息;
对象模型方面的增强:对于对象模型,CORBA加入了代理器的概念。代理器使应用
程序不需要知道对象在网络上哪个地方和对方是如何工作的就可以进行交互,只有代理器需要知道CORBA
服务器和客户机在网络上的位置
●
中间件把应用程序与系统所依附
软件的较低层细节和复杂性隔离开来,使应用程序开发者只处理某种
类型的单个API――其他细节则可以由中间件处理;
●引入了代理的概念;
在CORBA体系规范中定义了多种
类型的服务(Service),如命名(Naming)、生存期(LifeCycle)、事件(Event)、
事务(Transaction)、
对象持久化(Persistent Objects)、查询(Query)、特征(Property)、时间(Time)等服务功能。 在CORBA规范中,没有明确说明不同厂商的
中间件产品要实现所有的服务功能,并且允许厂商开发自己的服务
类型。因此, 不同厂商的ORB产品对CORBA服务的支持能力不同,使我们在针对待开发系统的功能进行
中间件产品选择时,有更多的选择余地。
下面介绍与分布式应用
程序设计和开发关系密切的CORBA服务内容:
对象命名服务
(Naming Service)
在命名服务中,通过将服务对象赋予一个在当前
网络空间中的惟一标识来确定服务对象的实现。在
客户端,通过指定服务对象的名字,利用绑定(Bind)方式,实现对服务对象实现的查找和定位,进而可以调用服务对象实现中的方法。
对象安全性服务
(Security)
在分布式系统中,服务对象的安全性和客户端应用的安全性一直是一个比较敏感的问题,安全性要求影响着
分布式应用计算的每个方面。对于分布在互联网中的
分布式应用来讲,为了防止恶意用户或未经授权的方法调用对象的服务功能,CORBA提供了严格的
安全策略,并制定了相应的对象
安全服务。
安全服务可以实现如下功能:
● 服务请求对象的识别与认证;
● 安全监听;
● 通信安全的保证;
● 安全信息的管理;
● 行为确认。
CORBA系统将对象请求的安全性管理的功能交由ORB负责,
系统组件只需负责系统本身的安全管理,使得基于
分布式应用在安全性控制方面的责任十分明确。
并发控制服务
(Concurrency Control)
CORBA规范中定义
并发控制服务的目的在于实现多客户访问情况下的
并发性控制和对共享资源的管理。
并发控制服务由多个
接口构成,能够支持访问方法的事务模型和非事务模型。由于两种模型的引入,使得非事务型客户在访问共享资源时,如果该资源被拥有事务模型的方法锁定(Lock),则该客户转入
阻塞状态,直到事务型方法执行结束,将共享资源锁打开,非事务模型的客户才能够访问该共享资源。
并发控制服务使多个对象能够利用资源锁定(Lock)的方式来对共享资源进行访问。在访问共享资源之前,客户对象必须从
并发控制服务中获得锁定。在确认资源目前正在空闲时,获得资源的使用权。每个锁定是一个资源-客户对,说明哪个客户正在访问何种
类型的资源。
对象生命期服务
(LifeCycle)
CORBA中的生命期服务定义和描述了创建、删除、拷贝和移动对象的方法。通过
生命期服务,客户端应用可以实现对远程对象的控制。
利用命名(Naming)服务实现分布式应用 在上篇文章中介绍的利用JavaIDL开发分布式应用时曾采用命名服务的方式。对象命名服务是ORB查找服务对象实现的一种简单的方式。
1. 功能
需求分是模拟电话用户注册及电话号码查询业务,开发基于命名服务的
分布式应用程序,
中间件产品采用VisiBroker 4.5.1 for Java。
根据系统功能的定义,两种业务均属于
电信业务的经营范围,因此定义模块名TeleCom。电话号码注册为
电信业务管理功能范围,需定义该功能
接口Registry,该
接口内包含用户注册方法register();电话号码查询为用户服务功能范围,需定义
接口User,该
接口内包含查询个人电话号码方法getNumber()。经过上述分析后编写的IDL接口定义
文件TeleCom.idl如下:
module TeleCom
{ interface User //
接口User声明
long getNumber();
};
interface Registry //
接口Registry声明
{ //
接口中register方法定义,其中以string
类型变量作为输入参数 ’方法返回User对象
User register(in string name);
};
};
上述接口定义
文件经idl2java编译后,在当前接口
文件目录中生成TeleCom子目录,该目录中包括UserPOA.java、RegistryPOA.java等文件。这些
文件是客户端和服务对象实现功能的框架以及相关的支持文件。有兴趣的读者可以实际创建IDL
文件,经IDL到
Java语言的映射后,分析生成文件的格式。
2. 实现服务功能
根据
系统分析确定的功能,定义
接口User对应的实现类UserImpl的代码如下:
// UserImpl类继承定义在UserPOA.java中的UserPOA类
public class UserImpl extends TeleCom
.UserPOA
{ private int aNumber;
//
在CIMS环境下,应用通常是分布的,应用之间需要交换信息和数据,例如CAD和
CAM之间,CAD、CAM和MRP II之间,甚至是不同的CAD应用之间都会发生数据的交互。
分布式应用的开发,尤其是
面向对象的
分布式应用的开发,对于系统开发者而言是极具挑战性的。CORBA、C OM/OLE Automation和JavaBeans是针对此类应用的主要分布对象计算模型和支持系统。一般来说,如果所开发的应用只面向Windows平台(
Windows 3.x/95/NT),那么使用COM 是最佳的选择;如果所开发的应用完全是使用Java语言编制的,那么就应该采用JavaBeans 的方案。但是,如果所开发的应用需要集成异构的平台,那么无疑应该选择CORBA。通过C ORBA系统的支持,分布应用的开发者可以采用不同的语言、
操作系统和硬件平台来开发
面向对象的分布式应用。当然,首要的条件是存在支持该种平台、
操作系统和语言的CORBA系统。? 利用CORBA系统进行分布对象应用的开发具有下面三个特点:①开发代价小、效率高。系统开发者只需要编写描述服务对象接口的IDL语言
文件并安装描述文件,实现服务对象的功能即完成了全部的任务。其它的相关代码或者是由IDL
编译器自动创建,或者是由ORB 类库提供,应用
程序员并不需要编写例如网络通信、
数据编码/解码、名址映射和安全管理的程序代码,从而可以把工作重点放到服务对象实现的过程中去。②通过CORBA系统的支持,一个服务对象可以透明地被分布在本地和网络上的客户所调用,扩大了服务对象的使用范围,为分布的客户所共享。③CORBA系统作为“
软件总线”,可以为服务对象提供“
即插即用”的功能,而且当对象实现改进或升级时,只要
接口保持不变,客户代码无需作任何改动。?
在CIMS的应用环境之下,CORBA系统的另一个十分重要的作用是集成已有的应用系统,这样的应用系统通常称为“遗留系统”(Legacy System)。“面向CIMS的并行工程集成框架关键技术”课题就是一个很好的例子。各个领域框架的应用系统,例如,机械领域的Pro Engi neer、电子领域的Mentor Graphics等等,需要通过CORBA系统集成到一起实现信息的交互和共享。集成的关键在于对遗留系统的封装和包裹(wrap),经过包裹,遗留系统就能够以OMG IDL的形式提供给用户,从而和新开发的
面向对象的
分布式应用同样处理。包裹的形式视不同的遗留系统而不同,对于能够提供用户调用
接口的遗留系统,只要利用原有的调用来构造新的界面(必要时需要进行一定的扩充)即可;而对于比较封闭的遗留系统,集成的难度就大得多了,通常是利用
文件作为中介来集成。不过,CAD、CAM和MRP II 的系统厂商在发展过程中也在逐步使自身的应用系统更加开放,向用户提供更灵活的控制手段,完全封闭的系统已经十分少见了,从而使集成工作也变得相对简单。
- HDU 1423 Greatest Common Increasing Subsequence(最长公共上升LCIS)
HDU 1423 Greatest Common Increasing Subsequence(最长公共上升LCIS) http://acm.hdu.edu.cn/showproblem.php?pi ...
- [Guava官方文档翻译] 5. Guava的Object公共方法 (Common Object Utilities Explained)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537367.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- 14. Longest Common Prefix[E]最长公共前缀
题目 Write a function to find the longest common prefix string amongst an array of strings. If there i ...
- hdu 1159 Common Subsequence(LCS最长公共子序列)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- Longest Common Substring(最长公共子序列)
Longest Common Substring Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- hdu 1159 Common Subsequence (最长公共子序列 +代码)
Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...
- hdu 1159 Common Subsequence(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- LeetCode OJ:Longest Common Prefix(最长公共前缀)
Write a function to find the longest common prefix string amongst an array of strings. 求很多string的公共前 ...
- POJ - 1458 Common Subsequence DP最长公共子序列(LCS)
Common Subsequence A subsequence of a given sequence is the given sequence with some elements (possi ...
随机推荐
- js 树菜单 ztree
http://www.ztree.me/v3/api.php 官网 api js /** <div id="menuContent" class="menuCont ...
- C语言 面试
P1(多选)有如下定义 int a; int *b; 则下列哪些语句是正确的:A: b=&a;B: b=*a;C: b=(int*)a;D: *b=a; 思路如下:b是一个int类型指针,a是 ...
- ubuntu -- mf210v拨号流程
1 脚本建立 Root权限进入Ubuntu,在 /etc/ppp/ 下面建立两个目录,如果有就不需要建立了.直接把脚本放进去或者建立新文件即可. cd /etc/ppp mkdir peers c ...
- SenCha Touch HTML 5 应用程序缓存
http://www.cnblogs.com/qidian10/p/3292876.html https://developer.mozilla.org/zh-CN/docs/HTML/Using_t ...
- PHP——数组中的each(),list()和while循环遍历数组
.while遍历 在while()语句每次循环中,each()语句将当前数组元素的键,赋给list()函数的第一个参数变量$key.并将当前数组元素中的值,赋给list()函数中的第二个参数变量$va ...
- 10 部署应用程序和applet
跳过 09 Swing用户界面组件 JAR文件 在将应用程序进行打包时, 使用者一定希望仅提供给其一个单独的文件, 而不是一个含有大量类文件的目录, Java归档(JAR)文件就是为此目的而设计的. ...
- 03 java基本
输入输出流 标准输出流比较简单, 只需要使用 System.out.println 就可以了, 标准输入流步骤如下: Scanner in = new Scanner(System.in); 然后可以 ...
- python 人脸识别
"""Performs face alignment and calculates L2 distance between the embeddings of image ...
- android 编译模块
android 编译模块 在写完.c文件之后,需要加载到android上进行测试.使用arm-linux-gcc编译,并添加到android开发板上运行失败. 由于android与linux不同,需要 ...
- 嵌入式开发之gb281818
http://www.cnblogs.com/snake-hand/p/3157176.html http://blog.csdn.net/voipmaker/article/category/140 ...