导航:首页 > 编程语言 > 分布式带来编程复杂度

分布式带来编程复杂度

发布时间:2022-03-12 15:13:57

㈠ 如何破解4G时代室内用户体验难题

1室内覆盖:运营商面临的最大挑战

对于移动通信网络而言,信号的室内覆盖水平一直是市场竞争力高低的重要体现。2G时代,电梯里那些“信号已覆盖”的标志很好地说明了这一点。到了3G和4G时代,室内覆盖则变得更加重要,更加具有战略意义,在某种程度上甚至可以说,室内覆盖的好坏决定着4G的成败。

4G时代是数据的时代,而数据业务更多地发生在室内。研究表明,80%~90%的移动数据业务是在室内发生的,尤其是学校、商场、办公大楼、会议中心等公共场所。这些高业务区域的信号覆盖对于运营商而言就是收入的来源,如果不能在这些区域提供良好的网络覆盖,无法有效地吸收业务,满足需求,其网络投资必然会受到损害。

4G时代也是体验的时代,全球运营商都开始高度重视用户的体验。2013年,在华为用户大会上,来自全球103个电信运营商和相关组织的300位嘉宾中,有43%的嘉宾认为未来两年移动宽带的最重要问题是“用户体验”。更有78.9%的嘉宾认为“业务体验”是用户最重要的体验。要保证用户体验质量,作为高话务区的室内覆盖便不可忽视。另有调研显示,70%的用户投诉也发生在室内,因此,为保证用户获得更好的体验,运营商必须提供质量更高的室内连续深度覆盖,杜绝有信号而无法上网的现象发生。

然而,移动宽带的深度覆盖却是当前网络建设最大的难题之一。

第一,由外而内的覆盖方式难以为继。作为传统的室内覆盖方式之一,通过室外基站将信号直接“打入”室内的解决方案在4G时代已经难以奏效。一方面是因为当4G使用高频段时,信号穿透能力差,损耗严重,如果利用室外宏站解决室内的接入问题,将大大增加宏站的数量,不仅大幅增加建网成本,且站址获得困难。有实验表明,宏站如果要向室内渗透两米以上,宏基站数量则要相应增加60%以上才能实现。另一方面,基于高阶调制的数据业务对信号的强度和信噪比提出了更高的要求,依靠室外宏站难以保证用户获得良好体验。

第二,传统室内覆盖解决方案已经力不从心。为了解决移动网络的室内覆盖问题,特别是大型公共场所的室内覆盖问题,传统的解决方案是采用分布式天线系统(DAS),这种解决方案将网络信号通过信号电缆引入室内,并分配至不同区域,实现网络的深度覆盖。但这一解决方案除了具有网络结构复杂、施工烦琐、无法平滑升级支持LTE多天线技术等种种不足外,难以满足4G网络的容量需求成为其难以克服的短板。

在移动宽带时代,随着移动终端设备种类的增多、屏幕的增大以及分辨率的提高,其所需的带宽也在不断增加。2004年,移动终端屏幕分辨率只有416×234,带宽只需200kbps以下,到2014年,移动终端分辨率已经达到1920×1080的高清标准,所需带宽也上升至8Mbps,这大大促进了移动带宽需求的增加,因此,在人员密集的室内热点区域,DAS系统已经完全无法满足用户容量的需求,这也是造成“虽有网络覆盖却无法上网”现象的重要原因。

第三,简单引入小基站并不能解决问题。小基站(Small Cell)作为一种基站形态在2G和3G时代主要发挥“补盲”和“补热”等辅助作用,尚未在室内覆盖中大规模使用,调查显示,目前运营商部署的室内小基站数量在基站总量中所占的比例尚不到10%.4G时代,小基站因部署灵活等优势日益被看好,已经被认为是一种技术趋势,有机构预测,今年全球小基站规模会爆发,局部地区将远远高于传统宏站。但是,目前不同形态的小基站产品并不适合简单地大规模用于室内深度覆盖,简单引入将带来包括网络协调以及基站管理等一系列问题。要解决4G深度覆盖问题,运营商期待的是一种可以做到大容量、大覆盖、易管理、短施工的小基站解决方案。

2 MBB时代,独一无二的室内小基站解决方案

LampSite竞争力对比

2013年2月27日,在西班牙巴塞罗那举行的世界移动通信大会上,华为发布了一款全新的室内覆盖解决方案——LampSite.这是一款独一无二的小基站解决方案,具备高效部署、大容量、多频多模和运维可视化等特点,其目标就是帮助运营商以最快、最有效的方式解决室内深度覆盖问题,因此,受到全球的广泛关注。

LampSite解决方案主要由PicoRRU(pRRU)、RemoteHUB(RHUB)以及BBU三个网元组成。其中,pRRU支持多频多模,可同时承载LTE TDD/LTE FDD/UMTS等多个制式,集成Wi-Fi,外观小巧,安装便捷,配合华为SingleRAN解决方案,可部署多制式的室内网络。BBU则具有基带资源共享功能,通过一根光纤与RHUB相连就能承载多个小区。pRRU通过网线与RHUB连接,即可实现为pRRU供电和数据传输功能,可有效降低施工难度和部署成本。

由于多种新技术的采用,LampSite具有了普通小基站产品所没有的许多新特性和新能力。

第一就是支持多频多模以及支持载波聚合的能力。据介绍,通过插卡组合,LampSite可以根据网络需要灵活地调整网络制式和频率,2G、3G、4G都可支持,部署一次可解决所有网络的室内覆盖问题,并且可以平滑地进行软件升级,未来不必进行重新部署室内覆盖系统。

第二是灵活高效的扩容能力。在网络建设初期,通过pRRU聚合可减少小区边缘面积,降低干扰。当网络负载较高时,通过小区分裂技术,形成多个小区,等同于加站,再采用自适应单频点组网技术,实现干扰与容量的平衡,小区间可无缝切换,可以说,无需任何工程改造,仅升级软件就能提升网络容量,增加站点。

第三是强大的协同自动化处理和管理能力。通过多种创新技术,LampSite实现了室内外网络之间的协同自动化。同时,配合华为的统一网管和检测评估工具,可以对室内热点区域进行精确管理和分析,协同运维,实施多维度、精细化的智能监测和评估优化。

第四是强大的多天线系统,具有巨大的性能潜力。LampSite pRRU堪称是一根以太网线缆的LTE多天线设备。由于支持多天线,小区总吞吐量可增加100%,小区边缘用户吞吐量增加40%以上。

总之,全新架构的LampSite是室内覆盖系统的一次革新。与传统的分布式天线系统相比,LampSite具有巨大的优势:

第一,DAS操作维护复杂度高,网络架构复杂,需要部署合路器、馈线保护、远端单元以及天线等,并需要两套网管系统,DAS系统没有操作维护能力,而LampSite解决方案只需用光纤连接BBU和RHUB,再用五类线将pRRU连接至RHUB,架构简洁,施工极为容易,相比双信道室内无源DAS系统,LampSite的部署周期可缩短86%,同时还实现了网管系统的共享。

第二,DAS系统具有较高的底噪,包括RRU的底噪以及不同信号共信道产生的无法消除的底噪,上行链路的等效噪声系数增加了约20dB.而LampSite可消除RRU噪声,独立解调消除了上行链路RRU之间的干扰。

第三,DAS系统扩容成本高,由于是宏基站覆盖的延伸,其扩容高度依赖远端机和基站。而LampSite可根据需求实现pRRU级别的小区分裂,加之基于软件的升级,实现了空中接口的无缝扩容。具体而言,单独解调实现了4~8倍的上行扩容,虚拟小区可实现4~8倍的下行扩容,小区分裂可实现6~12倍扩容。

第四,DAS系统由于重叠干扰以及室内网络和室外宏网无法协同等原因,用户体验较差,而LampSite可实现pRRU之间的协同,未来还可实现与室外宏网络之间的协同,可使小区边缘用户的上下行数据速率增加90%,掉话率减少30%,接入失败率减少20%,用户体验大大提高。
3华为“Service Anchor”:创新“小基站网络”的商业模式
在移动宽带时代,运营商通过建设小基站进行热点容量提升、室内深度覆盖已成趋势,但是传统建设模式却日益受到站点和传输获取困难、收益模式单一等难题的影响,运营商的进入成本也越来越高。怎样才能帮助运营商加快小基站的部署呢?在2014年的世界移动通信大会上,华为发布了一款名为“众包小基站”(Crowd-sourcing Small Cell)的解决方案,力图解决这一难题。

“众包”本是一种从互联网衍生而来的生产组织形式,特点是能够最大化地整合参与者的资源和能力。通过“众包小基站”方式,华为创造性地在LampSite解决方案中引入了可编程的业务新网元——Service Anchor(业务锚点),业务锚点基于开放架构,拥有开放的API,可以和企业业务平台对接,从而吸引公共设施管理者、大型建筑业主、网络集成商、企业等参与到“小基站”的建设和运营中来。运营商既可以整合企业应用,也可以面向企业就近提供最佳体验的企业云业务,帮助运营商集成众包合作伙伴以场所为中心的资源优势和应用优势,形成差异化的应用平台,由传统的大众市场进入企业市场。

基于LampSite网络和业务锚点,通过第三方应用开发商的引入,为诸如实景导航、室内地图和定位、高精度的广告推送、大数据支持以及物联网应用创造了条件。据华为Small Cell产品线总裁周跃峰介绍,依靠华为的专利技术,能够实现精确到3米的室内导航,可以开发多种应用。周跃峰表示,华为鼓励第三方开发商在业务锚点上开发应用,从而为场馆、运营商提供增值服务。通过这一平台还可引入大数据分析和云服务,华为已经与业界多家云业务提供商展开合作,实现企业业务与小基站解决方案的融合。

这一商业模式可以概括为,运营商向站址业主支付租金,业主则向第三方应用开发商支付相关费用,第三方应用开发商向运营商支付信息和流量费用,形成良性循环。从运营商的角度看,第三方应用的引入,增加了收入,实现了价值的转移,运营商的投资回报率得到提高。

周跃峰认为,未来,运营商传统的投资回报率(ROI)公式将被改写。将从传统净收入与总成本的比值转变为运营商净收入与价值转移之和与总成本与成本转移之和的比值。

价值转移将包括企业应用、广告收入、数据分析等相关服务。而成本转移将包括和站址业主之间的成本分担以及电子商务与远程管理带来的运营成本降低等。周跃峰认为,在移动宽带时代,室内深度覆盖问题不解决,消费者的需求就会被压制,运营商的投资回报率将受到严重影响。

华为LampSite将有效解决运营商室内深度覆盖问题,释放用户需求。同时,通过“众包小基站”解决方案进一步降低运营商的部署成本,提高收入,必然带来投资回报率的明显改善。可以说,华为LampSite是一款能带来商业模式改变的室内深度覆盖解决方案。

4华为LampSite:市场认可商用持续领先

在法国依云皇家酒店部署LampSite

LampSite发布之后,因其创新的网络架构、便捷的部署方式引起了全球移动通信界的广泛关注,其商用进程也迅速推进。2013年12月9日,华为正式宣布,LampSite室内覆盖解决方案在英国沃达丰现网成功部署,拉开了LampSite规模商用的序幕。

在这一商用案例中,华为为沃达丰某办公楼四个楼层提供室内3G覆盖,总计12000平方米,为近1100名员工和访客提供高速移动宽带服务,使该区域移动用户即使在话务繁忙的办公时间,也能享有随时随地不低于10Mb/s的数据传输速度以及更好的语音通话质量,并达到零掉话率。在部署过程中充分展示了LampSite解决方案的高扩展性、高灵活性以及易于部署和管理的特点。

此后不久,在2014年的巴塞罗那世界移动通信大会上,挪威Telenor也宣布选择华为LampSite解决方案提升室内覆盖质量,加速LTE商用进程,从而成为全球第一个LTE LampSite商用网络。

挪威首都奥斯陆,Telenor选择在其6层楼高的总部大楼率先部署华为LampSite解决方案。仅用了3个小时就完成了一个pRRU从室内区域网络规划、站点勘测到安装、调测等全部过程,在增强网络覆盖的同时,为用户带来全新的应用体验,现场测试用户实际体验到的最高下行速率达46Mbps.据华为无线网络营销工程部高级市场总监娄志强介绍,到目前为止,华为已经在泰国、北欧、英国伦敦、法国巴黎等地部署了LampSite系统。

LampSite在国内的商用也在不断推进。娄志强介绍说,华为已经在郑州火车站部署了上百个LampSite接入点,统计显示,下行数据流量增加了60%以上,上行增加了50%以上,有效释放了原来依靠宏基站以及DAS系统所压制的用户需求,用户体验也大大提高。此外,全国许多机场,包括重庆机场、首都国际机场等也开始部署LampSite.在首都国际机场,华为部署了几千个LampSite接入点,相当于把机场分成几千个小蜂窝区域,每个蜂窝容量非常高,完全可以满足密集人群的应用需求,在提升用户体验的同时,运营商也将获得应有的回报。娄志强还表示,华为LampSite目前已经获得了超过180个全球运营商合同,其中商用合同超过120个,获得了全球运营商的高度认可。

应当说,LampSite的市场表现超出了人们的预期,其大容量、高速率、易管理、短施工的特点在我国进入4G时代之际无疑将大有用武之地,有望成为致力于为用户提供最佳移动宽带体验的运营商的必然之选。

展望未来,待到LampSite大规模普及之时,人们或许再也不会有“明明有网络信号却无法上网”的糟糕体验了!

㈡ 一个标准的MapRece系统架构通常包括多个主控节点和一个数据节点其中数据节

摘要 一、MapRece概念

㈢ Cocoa如何应用设计模式求解答

Cocoa经常把自己与众不同的工作机制建立在模式上,它的设计受到诸如语言能力或现有架构这样因素的影响。 本部分包含设计模式:可重用的面向对象软件的元素一书中编目的大多数设计模式的介绍。每个设计模式都有一个总结性的描述,以及该模式的Cocoa实现的讨论。文中列出的都是Cocoa实现的模式,每个模式的讨论都发生在特定的Cocoa环境中。我们推荐您熟悉这些模式,您会发现这些模式在Cocoa软件开发中非常有用。 Cocoa中设计模式的实现有不同的形式。下面部分中描述的一些设计—比如协议和范畴—是Objective-C语言的特性;在另外一些场合中,“模式的实例”被实现为一个类或一组相关的类(比如类簇和单件类);还有一些场合下,模式表现为一个大的框架结构,比如响应者链模式。对于某些基于模式的机制,您几乎可以“免费”使用;而另外一些机制则要求您做一些工作。即使对于Cocoa没有实现的模式,我们也鼓励您在条件许可的情况下自行实现,比如在扩展类的行为时,对象合成(装饰模式)技术通常就比生成子类更好。 有两个设计模式没有在下面的内容中进行讨论,即模型-视图-控制器(MVC)模式和对象建模。MVC是一种复合或聚合模式,就是说它基于几种不同类型的模式。对象建模在四人组的分类目录中没有对应类别,它源自关系数据库领域。然而,MVC和对象建模在Cocoa中可能是最重要和最普遍的设计模式或用语,而且它们在很大程度上是相关的。它们在几个技术的设计中发挥关键的作用,包括绑定、撤消管理、脚本控制、和文档架构。要了解更多有关这些模式的信息,请参见"模型-视图-控制器设计模式"和"对象建模"部分。 本部分包含如下主要内容:抽象工厂模式适配器模式责任链模式命令模式合成模式装饰模式表观模式跌代器模式仲裁者模式备忘录模式观察者模式代理模式单件模式模板方法模式 抽象工厂模式提供一个接口,用于创建与某些对象相关或依赖于某些对象的类家族,而又不需要指定它们的具体类。通过这种模式可以去除客户代码和来自工厂的具体对象细节之间的耦合关系。 类簇类簇是一种把一个公共的抽象超类下的一些私有的具体子类组合在一起的架构。抽象超类负责声明创建私有子类实例的方法,会根据被调用方法的不同分配恰当的具体子类,每个返回的对象都可能属于不同的私有子类。 Cocoa将类簇限制在数据存储可能因环境而变的对象生成上。Foundation框架为NSString、NSData、NSDictionary、NSSet、和NSArray对象定义了类簇。公共超类包括上述的不可变类和与其相互补充的可变类NSMutableString、NSMutableData、NSMutableDictionary、NSMutableSet、和NSMutableArray。 使用和限制 当您希望创建类簇代表的类型的可变或不可变对象时,可以使用类簇中的某个公共类来实现。使用类簇是在简洁性和扩展性之间进行折衷。类簇可以简化类接口,因此使其更易于学习和使用,但是创建类簇抽象类的定制子类则会变得更加困难。进一步阅读: "类簇" 部分提供有关Cocoa类簇的更多信息。 适配器模式将一个类接口转化为客户代码需要的另一个接口。适配器使原本由于兼容性而不能协同工作的类可以工作在一起,消除了客户代码和目标对象的类之间的耦合性。 协议协议是一个编程语言级别(Objective-C)的特性,它使定义适配器模式的实例成为可能(在 java中的“接口”和“协议”是同义的)。如果您希望一个客户对象和另一个对象进行交流,但由于它们的接口不兼容而导致困难,您就可以定义一个协议,它本质上是一系列和类不相关联的方法声明。这样,其它对象的类就可以正式采纳该协议,并通过实现协议中的全部方法来“遵循”该协议。结果,客户对象就可以通过协议接口向其它对象发送消息。 协议是一组独立于类层次的方法声明,这样就有可能象类的继承那样,根据对象遵循的协议对其进行分组。您可以通过NSObject的conformsToProtocol:方法来确认一个对象的协议关系。 除了正式协议之外,Cocoa还有一个非正式协议的概念。这种类型的协议是NSObject类中的一个范畴(category),这样就使所有的对象都成为范畴方法的潜在实现者(参见"范畴"部分)。非正式协议的方法可以选择性地实现。非正式协议是委托机制实现的一部分(参见"委托"部分。 请注意,协议的设计和适配器模式并不完全匹配。但它是使接口不兼容的类在得以协同工作的手段。 使用和限制 协议主要用于声明层次结构上不相关的类为了互相通讯而需要遵循的接口。但是,您也可以将协议用于声明对象的接口,而隐藏相应的类。Cocoa框架包括很多正式协议,这些协议使定制子类可以和框架进行特定目的的通讯。举例来说,Foundation框架中包含NSObject、NSCopying、和NSCoding协议,都非常重要。Application Kit中的协议包括NSDraggingInfo、NSTextInput、和NSChangeSpelling。 正式协议要求遵循者实现协议声明的所有方法。它们也是零碎的,一旦您定义一个协议并将它提供给其它类,将来对协议的修改会使那些类不能工作。进一步阅读:有关正式协议的更多信息请参见Objective-C编程语言文档中“扩展类”部分的讨论。 责任链模式通过为多个对象提供处理请求的机会,避免请求的发送者和接收者产生耦合。将接收对象串成链,并将请求沿着接收者链进行传递,直到某个对象对其进行处理。对象或者处理该请求,或者将它传递给链中的下一个对象。 响应者链Application Kit框架中包含一个称为响应者链的架构。该链由一系列响应者对象(就是从NSResponder继承下来的对象)组成,事件(比如鼠标点击)或者动作消息沿着链进行传递并(通常情况下)最终被处理。如果给定的响应者对象不处理特定的消息,就将消息传递给链中的下一个响应者。响应者在链中的顺序通常由视图的层次结构来决定,从层次较低的响应者对象向层次较高的对象传递,顶点是管理视图层次结构的窗口对象,窗口对象的委托对象,或者全局的应用程序对象。事件和动作消息在响应者链中的确切传递路径是不尽相同的。一个应用程序拥有的响应者链可能和它拥有的窗口(甚至是局部层次结构中的视图对象)一样多,但每次只能有一个响应者链是活动的—也就是与当前活动窗口相关联的那个响应链。 还有一个与响应者链相类似的链,用于应用程序的错误处理。 视图层次的设计应用的是合成模式(参见"合成模式"部分),它和响应者链密切相关。动作消息—源自控件对象的消息—基于目标-动作机制,是命令模式(参见"命令模式"部分)的一个实例。 使用和限制 当您通过Interface Builder或以编程的方式为程序构造用户界面时,可以“免费”得到一个或多个响应者链。响应者链和视图层次结构一起出现,当您使一个视图对象成为窗口内容视图的子视图时,视图层次结构就自动生成了。如果您将一个定制视图加入到一个视图层次结构中,它就变成响应者链的一部分;如果您实现了恰当的NSResponder方法,就可以接收和处理事件及动作消息。定制对象是窗口对象或全局应用程序对象NSApp的委托对象,也可以接收和处理那些消息。 您也可以用编程的方式将定制的响应者对象注入到响应者链中,以及通过编程操作响应者在链中的顺序。进一步阅读: 处理事件和动作消息及程序错误的的响应者链在Cocoa事件处理指南和Cocoa的错误处理编程指南文档中进行描述。本文档在"合成模式"部分对视图层次结构有总结性的介绍,在"核心应用程序架构"部分有更全面的描述。 命令模式这种模式将请求封装为对象,使您可以用不同的请求来对客户代码进行参数化;对请求进行排队和记录,并支持可撤消(undoable)的操作。请求对象将一或多个动作绑定在特定的接收者上。命令模式将发出请求的对象和接收及执行请求的对象区分开来。 调用对象NSInvocation类的实例用于封装Objective-C消息。一个调用对象中含有一个目标对象、一个方法选择器、以及方法参数。您可以动态地改变调用对象中消息的目标及其参数,一旦消息被执行,您就可以从该对象得到返回值。通过一个调用对象可以多次调用目标或参数不同的消息。 创建NSInvocation对象需要使用NSMethodSignature对象,该对象负责封装与方法参数和返回值有关系的信息。NSMethodSignature对象的创建又需要用到一个方法选择器。NSInvocation的实现还用到Objective-C运行环境的一些函数。 使用和限制NSInvocation对象是分布式、撤消管理、消息传递、和定时器对象编程接口的一部分。在需要去除消息发送对象和接收对象之间的耦合关系的类似场合下,您也可以使用。 分布式对象是一种进程间通讯技术,关于这个主题的更多信息请参见"代理模式"部分。进一步阅读:调用对象的细节请阅读NSInvocation的类参考文档。您也可以从下面的文档中获取相关技术的信息:Objective-C编程语言文档中的分布式对象、撤消架构、定时器以及之后的部分。 目标-动作目标-动作机制使控件对象—也就是象按键或文本输入框这样的对象—可以将消息发送给另一个可以对消息进行解释并将它处理为具体应用程序指令的对象。接收对象,或者说是目标,通常是一个定制的控制器对象。消息—也被称为动作消息—由一个选择器来确定,选择器是一个方法的唯一运行时标识。典型情况下,控件拥有的单元对象会对目标和动作进行封装,以便在用户点击或激活控件时发送消息(菜单项也封装了目标和动作,以便在用户选择时发送动作消息)。目标-动作机制之所以能够基于选择器(而不是方法签名),是因为Cocoa规定动作方法的签名和选择器名称总是一样的。 使用和限制 当您用Interface Builder构建程序的用户界面时,可以对控件的动作和目标进行设置。您因此可以让控件具有定制的行为,而又不必为控件本身书写任何的代码。动作选择器和目标连接被归档在nib文件中,并在nib文件被解档时复活。您也可以通过向控件或它的单元对象发送setTarget:和setAction:消息来动态地改变目标和动作。 目标-动作机制经常用于通知定制控制器对象将数据从用户界面传递给模型对象,或者将模型对象的数据显示出来。Cocoa绑定技术则可以避免这种用法,有关这种技术的更多信息请参见Cocoa绑定编程主题文档。 Application Kit中的控件和单元并不保持它们的目标。相反,它们维护一个对目标的弱引用。进一步的信息请参见"委托、观察者、和目标的所有权" 部分。进一步阅读:更多信息请参见"目标-动作机制"部分。 合成模式这种模式将互相关联的对象合成为树结构,以表现部分-全部的层次结构。它使客户代码可以统一地处理单独的对象和多个对象的合成结果。 合成对象是模型-视图-控制器聚集模式的一部分。 视图层次结构 一个窗口包含的视图对象(NSView对象)在内部构成了一个视图层次结构。层次结构的根是窗口对象(NSWindow对象)和它的内容视图。内容视图就是填充到窗口内容方框中的透明视图,添加到内容视图中的视图都是它的子视图,而这些子视图又会成为下一级视图的父视图。一个视图有一个(且只有一个)父视图,可以有零或多个子视图。在视觉上,您可以将这个结构理解为包含关系:父视图包含它的子视图。图4-2显示视图层次的结构以及在视觉上的关系。 图4-2 视图层次的结构及其在视觉上的关系 视图层次是一个结构方面的架构,在图形描画和事件处理上都扮演一定的角色。一个视图有两个影响图形操作位置的边界框,即边框(frame)和边界(bound)。边框是外部边界,表示视图在其父视图坐标系统中的位置,它负责定义视图的尺寸,并根据视图边界对图形进行裁减。边界则是内部的边界框,负责定义视图对象自身描画表面的内部坐标系统。 当窗口系统要求一个窗口做好显示准备时,父视图会在其子视图之前被要求进行渲染。当您向一个视图发送消息时—比如发送一个重画视图的消息—该消息就会被传播到子视图。因此,您可以将视图层次结构中的一个分支当成一个统一的视图来处理。 响应者链也把视图层次用于处理事件和动作消息。请参见责任链模式部分中("责任链模式")关于响应者链的总结描述。 使用和限制 无论以编程的方式,还是通过Interface Builder,当您将一个视图加入到另一个视图中时,都需要创建或修改视图层次结构。Application Kit框架自动处理与视图层次结构相关联的所有关系。进一步阅读:如果需要了解更多视图层次结构的信息,请阅读本文档的"视图层次结构"部分。Cocoa描画指南文档中也对视图层次结构进行讨论。 装饰模式这种模式动态地将额外的责任附加到一个对象上。在进行功能扩展时,装饰是子类化之外的一种灵活的备选方法。和子类化一样,采纳装饰模式可以加入新的行为,而又不必修改已有的代码。装饰将需要扩展的类的对象进行包装,实现与该对象相同的接口,并在将任务传递给被包装对象之前或之后加入自己的行为。装饰模式表达了这样的设计原则:类应该接纳扩展,但避免修改。 一般性的说明 装饰是用于对象合成的模式。在您自己的代码中应该鼓励使用对象的合成(参见"什么时候需要生成子类"部分)。然而,Cocoa自己提供了一些基于这种模式的类和机制(在下面的部分进行讨论)。在这些实现中,扩展对象并不完全复制它所包装的对象的接口,虽然具体实现中可以使用不同的技术来进行接口共享。 Cocoa在实现某些类时用到了装饰模式,包括NSAttributedString、NSScrollView、和NSTableView。后面两个类是复合视图的例子,它们将其它一些视图类的对象组合在一起,然后协调它们之间的交互。 委托委托是在宿主对象中嵌入一个指向另一对象(也就是委托对象)的弱引用(一个未保持的插座变量),并不时地向该委托对象发送消息,使其对有关的任务进行输入的机制。宿主对象一般是一个“复活”的框架对象(比如一个NSWindow或NSXMLParser对象),它寻求完成某项工作,但又只能以一般的方式来进行。委托几乎总是一个定制类的实例,它负责配合宿主对象,在有关任务的特定点(参见图4-3)上提供与具体程序有关的行为。这样,委托机制使我们可以对另一个对象的行为进行修改或者扩展,而不需要生成子类。 图4-3 框架对象向它的委托对象发送消息 简而言之,委托就是一个对象将任务委托给另一个对象,它是面向对象编程的常用技术。然而,Cocoa以独特的方式实现委托机制。宿主类用非正式协议—即NSObject中的范畴—来定义委托对象可能选择实现的接口。委托对象不必象采纳正式协议那样实现所有的协议方法。在向委托对象发送消息之前,宿主对象可以首先确定相应的方法是否实现(通过respondsToSelector:消息),以避免运行时例外。有关正式协议和非正式协议的更多信息,请参见"协议"部分。 Cocoa框架中的一些类也向它们的数据源发送消息。数据源在各个方面都和委托一样,除了它的目的是为宿主对象提供数据,以传递给浏览器、表视图、或者类似的用户界面视图。和委托不同的是,数据源还必须实现某些协议方法。 委托不是装饰模式的严格实现。宿主(委托)对象并没有包装它希望扩展的类的实例。相反,委托是对委托框架类的行为进行特殊化。除了框架类声明的委托方法之外,它们也没有公共的接口。 Cocoa中的委托也是模板方法模式("模板方法模式")的一部分。 使用和限制 委托是Cocoa框架中的一种常用的设计。Application Kit框架中的很多类都向它们的委托发送消息,包括NSApplication、NSWindow、和NSView的几个子类。Foundation框架中的一些类,比如NSXMLParser和NSStream,也维护自己的委托。您应该总是使用类的委托机制,而不是生成类的子类,除非委托方法不能完成您的目标。 虽然您可以动态地改变委托,但是同时只能有一个对象可以成为委托。因此,如果您希望当特定的程序事件发生时,有多个对象可以同时得到通知,则不能使用委托。在这种情况下您可以使用通告机制。如果委托对象实现了一或多个框架类声明的通告方法,就会自动接收到其委托框架对象的通告。请参考观察者模式( "观察者模式")中有关通告的讨论。 Application Kit框架中的向外委托任务的对象并不保持它们的委托或数据源,而是维护一个弱引用,更多信息请参见"委托、观察者、和目标的所有权"部分。进一步阅读:关于委托的进一步信息请参见"委托和数据源"部分。 范畴范畴是Objective-C语言的一个特性,用于为一个类增加方法(接口和实现),而不必生成子类。类原始声明的方法和通过范畴添加的方法在运行时没有区别—在您的程序的作用范围内。范畴中的方法成为类类型的一部分,并被所有的子类继承。 和委托一样,范畴并没有严格适配装饰模式。它实现了该模式的目的,但采用不同的实现方式。范畴加入的行为是在编译时生成的,而不是动态得到的。而且,范畴并没有封装被扩展的类的实例。 使用和限制 Cocoa框架中定义了很多范畴,大多数都是非正式协议(在"协议"部分中进行总结)。它们通常使用范畴来对相关的方法进行分组。您也可以在代码中实现范畴,以在不生成子类的情况下对类进行扩展,或者对相关的方法进行分组。但是您需要注意如下两点: 您不能为类添加实例变量。 如果您对现有的方法进行重载,则应用程序可能产生预料之外的行为。进一步阅读: 更多有关范畴的信息请参见Objective-C编程语言一文中的“类的扩展”部分。 表观模式这种模式为子系统中的一组接口提供统一的接口。表观模式定义一个更高级别的接口,通过减少复杂度和隐藏子系统之间的通讯和依赖性,使子系统更加易于使用。 NSImageNSImage类为装载和使用基于位图(比如JPEG、PNG、或者TIFF格式)或向量(EPS或PDF格式)的图像提供统一的接口。NSImage可以为同一个图像保持多个表示,不同的表示对应于不同类型的NSImageRep对象。NSImage可以自动选择适合于特定数据类型和显示设备的表示。同时,它隐藏了图像操作和选择的细节,使客户代码可以交替使用很多不同的表示。 使用和限制 由于NSImage支持几种不同的图像表示,因此某些属性可能不能适用。举例来说,您可能不能取得图像中一个像素的颜色,如果潜在的图像表示使基于向量且与设备无关的话。请注意:NSImage和图像表示的讨论请参见Cocoa描画指南。 迭代器模式这种模式提供一种顺序访问聚合对象(也就是一个集合)中的元素,而又不必暴露潜在表示的方法。迭代器模式将访问和遍历集合元素的责任从集合对象转移到迭代器对象。迭代器定义一个访问集合元素的接口,并对当前元素进行跟踪。不同的迭代器可以执行不同的遍历策略。 NSEnumerator Foundation框架中的NSEnumerator类实现了迭代器模式。NSEnumerator抽象类的私有具体子类返回的枚举器对象可以顺序遍历不同类型的集合—数组、集合、字典(值和键)—并将集合中的对象返回给客户代码。NSDirectoryEnumerator是一个不紧密相关的类,它的实例可以递归地枚举文件系统中目录的内容。 使用和限制 象NSArray、NSSet、和NSDictionary这样的集合类都包含相应的方法,可以返回与集合的类型相适用的枚举器。所有的枚举器的工作方式都一样。您可以在循环中向枚举器发送nextObject消息,如果该消息返回nil,而不是集合中的下一个对象,则退出循环。 仲裁者模式这种模式定义的对象用于封装一组对象的交互机制。仲裁者模式可以避免对象之间显式的互相引用,使对象之间的耦合变得宽松,也使您可以独立地改变它们的交互方式。这些对象也因此可以更具重用性。 仲裁者对象集中了系统中的对象之间的复杂通讯和控制逻辑。这些对象在状态发生改变时会告诉仲裁者对象,反过来,也对仲裁者对象的请求进行响应。 控制器类模型-视图-控制器设计模式为一个面向对象的系统(比如一个应用程序)中的对象分配不同的角色。它们可以是模型对象,包含应用程序的数据及对那些数据进行操作;可以是视图对象,负责表示数据及响应用户动作;也可以是控制器对象,负责协调模型和视图对象。控制器对象适合于仲裁者模式。 在Cocoa中,控制器对象一般有两个类型:仲裁控制器或者协调控制器。仲裁控制器负责仲裁应用程序中视图对象和模型对象之间的数据流。仲裁控制器通常是NSController对象。协调控制器则负责实现应用程序的集中化通讯和控制逻辑,作为框架对象的委托和动作消息的目标。它们通常是NSWindowController对象或定制NSObject子类的实例。由于协调控制器高度专用于特定的程序,因此不考虑重用。 Application Kit框架中的NSController抽象类和它的具体子类是Cocoa绑定技术的一部分,该技术可以自动同步模型对象包含的数据和视图对象中显示及编辑的数据。举例来说,如果用户在一个文本框中编辑一个字符串,绑定技术会将文本框中的变化(通过仲裁控制器)传递给绑定了的模型对象中合适的属性。编程者需要做的就是正确设计自己的模型对象,并通过Interface Builder在程序的视图、控制器、和模型对象之间建立绑定关系。 具体的公共控制器类的实例可以在Interface Builder的控件选盘上得到,因此是高度可重用的。它们提供一些服务,比如选择和占位符值的管理。这些对象执行下面这些特定的功能:NSObjectController 管理一个单独的模型对象。NSArrayController 管理一个模型对象数组,以及维护一个选择;还可以在数组中加入或删除模型对象。NSTreeController 使您可以在一个具有层次的树结构中添加、删除、和管理模型对象。NSUserDefaultsController 为预置(用户缺省值)系统提供一个便利的接口。 使用和限制 您通常可用将NSController对象用作仲裁控制器,因为这些对象的设计目的是在应用程序的视图对象和模型对象之间传递数据。在使用仲裁控制器时,您通常是从Interface Builder选盘中拖出对象,指定模型对象的属性键,并通过Interface Builder Info 窗口中的Bindings面板建立视图和模型对象之间的绑定关系。您也可以生成NSController或其子类的子类,以获得更具具体行为的子类。 几乎任何一对对象之间都可以建立绑定关系,只要它们遵循NSKeyValueCoding和NSKeyValueObserving这两个非正式协议。但是,我们推荐您通过仲裁控制器来建立绑定,以得到NSController及其子类为您提供的各种好处。 协调控制器通过下面的方式集中实现一个应用程序的通讯和控制逻辑: 维护指向模型和视图对象的插座变量(插座变量是指向其它被保持为实例变量的连接或引用)。 通过目标-动作机制响应用户在视图对象上的操作(参见"目标-动作"部分)。 作为委托对象,处理从框架对象发出的消息(参见"委托"部分)。 您通常可以在Interface Builder中建立上述的连接—插座变量、目标-动作、和委托,它将这些连接归档到应用程序的nib文件中。进一步阅读: 有关仲裁控制器、协调控制器、和与控制器有关的设计决定的讨论,请参见"模型-视图-控制器设计模式"部分。 备忘录模式这种模式在不破坏封装的情况下,捕捉和外部化对象的内部状态,使对象在之后可以回复到该状态。备忘录模式使关键对象的重要状态外部化,同时保持对象的内聚性。 归档归档将一个程序中的对象以及对象的属性(包括属性和关系)存储到档案上,使之可以保存到文件系统中,或者在不同的处理器和网络间传递。档案将程序的对象图保存为独立于架构的字节流,对象的标识和对象之间的关系都会被保留。由于对象的类型和它的数据一起被存储,从归档的字节流解码出来的对象会被正常实例化,实例化所用的类与原来编码的类相同。 使用和限制 通常情况下,您希望将程序中需要保存状态的对象归档。模型对象几乎总是属于这个范畴。您通过编码将对象写入到档案中,而通过解码将对象从档案中读取出来。通过NSCoder对象可以执行编解码操作,在编解码过程中最好使用键化的归档技术(需要调用NSKeyedArchiver和NSKeyedUnarchiver类的方法)。被编解码的对象必须遵循NSCoding协议;该协议的方法在归档过程中会被调用。进一步阅读: 有关归档的进一步信息。 属性列表的序列化属性列表是一个简单的、具有一定结构的对象图序列,它仅使用下面这些类的对象:NSDictionary、NSArray、NSString、NSData、NSDate、和NSNumber。这些对象通常也被称为属性列表对象。Cocoa中有几个框架类提供了序列化属性列表对象,以及定义录写对象内容及其层次关系的特殊数据流格式的方法。NSPropertyListSerialization类就提供了将属性列表对象序列化为XML或其它优化的二进制格式的类方法。 使用和限制 如果对象图中包含的是简单对象,则在捕捉和外部化对象及其状态时,属性列表序列化是一种灵活的、可移植的、而又非常适当的工具。然而,这种形式的序列化有它的限制,它不保留对象的全部类标识,而只保留一些一般的类型(数组、字典、字符串、等等)。这样,从属性列表恢复出来的对象可能和原来的类不同,特别是当对象的可变性可能发生变化时,这就会带来问题。属性列表序列化也不跟踪在同一对象中被多次引用的对象,这可能导致反向序列化时产生多个实例,而在原来的对象图中却只有一个实例。进一步阅读: 有关属性列表序列化的更多信息。 Core DataCore Data是一个管理对象图,并使其留存的框架和架构。正是第二种能力—对象的留存能力—使Core Data成为备忘录模式的一种适配形式。 在Core Data架构中,中心的对象称为被管理对象上下文,负责管理应用程序对象图中的模型对象。在被管理对象上下文下面是该对象图的持久栈,也就是一个框架对象的集合,负责协调模型对象和外部数据存储,比如XML文件或关系数据库。持久栈对象负责建立存储中的数据和被管理对象上下文中的对象之间的映射关系,在

㈣ 什么是机器学习

机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。

㈤ 管理中间件层和soa构建层是云计算技术的最关键部分对吗

云计算关键技术 云计算是分布式处理、并行计算和网格计算等概念的发展和商业实现,其技术实质是计算、存储、服务器、应用软件等IT软硬件资源的虚拟化,云计算在虚拟化、数据存储、数据管理、编程模式等方面具有自身独特的技术。云计算的关键技术包括以下几个方向: 虚拟机技术 虚拟机,即服务器虚拟化是云计算底层架构的重要基石。在服务器虚拟化中,虚拟化软件需要实现对硬件的抽象,资源的分配、调度和管理,虚拟机与宿主操作系统及多个虚拟机间的隔离等功能,目前典型的实现(基本成为事实标准)有Citrix Xen、VMware ESX Server 和Microsoft Hype-V等。 数据存储技术 云计算系统需要同时满足大量用户的需求,并行地为大量用户提供服务。因此,云计算的数据存储技术必须具有分布式、高吞吐率和高传输率的特点。目前数据存储技术主要有Google的GFS(Google File System,非开源)以及HDFS(Hadoop Distributed File System,开源),目前这两种技术已经成为事实标准。 数据管理技术 云计算的特点是对海量的数据存储、读取后进行大量的分析,如何提高数据的更新速率以及进一步提高随机读速率是未来的数据管理技术必须解决的问题。云计算的数据管理技术最着名的是谷歌的BigTable数据管理技术,同时Hadoop开发团队正在开发类似BigTable的开源数据管理模块。 分布式编程与计算 为了使用户能更轻松的享受云计算带来的服务,让用户能利用该编程模型编写简单的程序来实现特定的目的,云计算上的编程模型必须十分简单。必须保证后台复杂的并行执行和任务调度向用户和编程人员透明。当前各IT厂商提出的云计划的编程工具均基于Map-Rece的编程模型。 虚拟资源的管理与调度 云计算区别于单机虚拟化技术的重要特征是通过整合物理资源形成资源池,并通过资源管理层(管理中间件)实现对资源池中虚拟资源的调度。云计算的资源管理需要负责资源管理、任务管理、用户管理和安全管理等工作,实现节点故障的屏蔽,资源状况监视,用户任务调度,用户身份管理等多重功能。 云计算的业务接口 为了方便用户业务由传统IT系统向云计算环境的迁移,云计算应对用户提供统一的业务接口。业务接口的统一不仅方便用户业务向云端的迁移,也会使用户业务在云与云之间的迁移更加容易。在云计算时代,SOA架构和以Web Service为特征的业务模式仍是业务发展的主要路线。 云计算相关的安全技术 云计算模式带来一系列的安全问题,包括用户隐私的保护、用户数据的备份、云计算基础设施的防护等,这些问题都需要更强的技术手段,乃至法律手段去解决。

㈥ 网络安全就业难度大不大

未邀自答。本来我都关机、躺下、准备睡觉了,结果手贱点了知乎,看到了这么一个问题,又看到好朋友 @scalers回答了这个问题,忍不住又把电脑打开,准备花一点时间认真回答一下这个问题。这可能不仅是对问题本身的回答,也是差不多这一年来我对信息安全这个领域的理解和体会吧。=============================利益相关:信息安全方向博士生,主攻Public Key Encryption,主要方向是Predicate Encryption。1-2年之内就要就业,方向应该就是数据安全了。这一年认识了不少领域内的前辈和朋友,了解到不少现状。=============================0. 总体感受:人才既饱和,又匮乏现在安全行业的现状基本是:上层人才极度匮乏,下层人才极度饱和。大概半年多前和一位领域内的人士聊天,对方说了这么一句话:我们招人要求真的不高啊,只要领域相关,7年以上工作经验就好了。当时,幼稚的我心想,我靠你逗我呢,这还要求不高?哪儿找安全领域干7年以上的人去?经过半年的折腾,我现在的感觉是:这个要求真的不高,一点都不高,可能太低了…为什么?因为信息安全这个领域太大了,大到什么程度呢?大到做这个领域的人可能需要把几乎计算机科学的所有领域全理解(注意,不是了解,是理解)以后,才能集大成,然后把这个领域做好。=============================1. 数学和计算机理论基础要求信息安全中最理论的基础是密码学。密码学谁提出来的?图灵提出来的。为什么是他提出的密码学?因为密码学的实现基础是图灵机,或者说是有限自动机原理。密码学的理论基础是抽象代数和信息论。想要比较深入的学习密码学里面的知识,至少要明白计算机领域的归约(Rection),计算复杂性理论;至少要明白抽象代数里面的群(Group)、环(Ring)、域(Field);至少要了解信息论中信息熵的概念;这些如果不理解的话,安全证明估计就过不去了…要是追新,看看密码学界的发展,起码说提出一个名字能明白是什么意思,估计得了解了解椭圆曲线(Elliptic Curve),双线性对(Bilinear Pairing)或者多线性对(Multilinear Pairing),格(Lattice)等等。=============================2. 编程能力要求有人说了,我不用学密码学理论,我能看懂论文,把方案实现了就行了啊。因为实现的方案从理论上是否安全,要考察参数的选择。参数选择的话,就得看懂安全性证明了。我个人只是做了Java Pairing-Based Cryptography Library(jPBC)的一些实现,几乎时常会收到很多邮件,询问这个库怎么用,为什么自己实现的不对。多数情况都是因为对根上的东西没理解,导致用起来不对。有人说了,我也不用看懂论文,我能写最经典的密码学算法,能正确调用就好了。很遗憾,就算是最经典的密码学算法,即使是有经验的开发人员,绝大多数都不能正确实现。仅以RSA为例,请移步我的专栏文章:RSA有多安全,有多不安全?Black Hat 2014 - The Matasano Crypto Challenges解析 - 第一部分 - 刘学酥的密码学与信息安全专栏 - 知乎专栏看看里面有多少坑吧。=============================3. 计算机相关技术能力要求有人说了,我不用写密码学算法,我能正确用就行了。提到网络通信,就有计算机网络的相关知识了。我个人感觉计算机网络知识的复杂度现在和操作系统都差不多了。尤其是现在分布式系统,比如分布式计算和分布式存储技术的普及,分布式计算机网络本身就构成了一个比操作系统还要复杂的总系统。做安全的话,没有计算机网络和操作系统的知识几乎只能做点皮毛工作。提到网络和操作系统,就会想到这本身就需要比较强的编程能力。举个简单的例子,Java优秀的网络通信框架Netty和MINA(感谢 @Edsger Lin 的指正,这里打错了),是不是需要了解一下?HDFS,MapRece是不是了解一下?要不要看看源代码… 来吧,这相关的资料、书籍,可以放满一个书柜了。=============================4. 网络安全技术要求有人说了,我也不用懂这些,我是做技术的,了解网络知识以后,找漏洞挖漏洞,直接走向人生巅峰!怎么说呢,漏洞这个东西虽然知识本身要求的不深入,但是非常考验广度。比如数据库的了解,网络得了解,各种Web语言得了解,里面有什么坑得了解。而且,很多时候漏洞检测和网络渗透会涉及到语言本身上去。举个例子,Black Hat 2014中有个视频,所在的公司开发了一套漏洞检测工具Ravage(为什么我知道,我听译的…逆天漏洞检测及渗透生成工具——RAVAGE课程详情)。这个工具的制作已经深入到JVM的汇编层了。=============================5. 文档能力和与人交流的能力信息安全领域,不光是技术层面的,还有人员层面的。软件开发过程中出现的漏洞,绝大多数都是开发人员没有遵守安全软件开发要求而导致的。同时,各个公司、各个产品的安全架构,安全技术都不太一样。这种时候,为了保证产品的安全特性,就需要文档撰写和阅读能力,以及交流能力了。我和某位领域内人士交流的时候,总听到一种抱怨:我靠,这安全机制不是瞎搞么,这怎么评估,怎么实现?很遗憾,互联网发展太快了,很多东西都没有模块化体系化,现实就是这样。想要解决这个问题,就需要一群在计算机各个领域内都精通,或者退一步,都了解的人,将各种安全技术和产品抽象,从而提出并设计架构。这样才能提出一种比较通用的方法,从架构上去解决大部分的安全问题。不过这对一个人的要求可是有点高啊。安全又仅仅是技术问题吗?非也。信息安全中,技术占3成,管理占7成。技术再好,密钥管理不成熟,开发流程不成熟,访问控制机制设计的不成熟,甚至私下交易,从内部泄露用户隐私,也会导致严重的安全问题。这并不是耸人听闻。CSDN密码数据库泄露可能仅仅是冰山一角。要我看,用户的密码早就被泄露光了… 当然现在已经好了很多。这就意味着,管理也是个很困难的问题。说到管理,交流能力也是必不可少的。=============================6. 其他能力信息安全和通信技术是密不可分的。通信技术的发展必然会导致信息安全技术的发展。举例来说,枚举法是最没创意的攻击方法了。但是现在有了高性能计算机,分布式计算机系统,对于几年前的数据,用枚举法可能反而比其他方法更快。另一个例子,量子计算领域现在蓬勃发展,没准几年,十几年或者几十年后量子计算机就普及了。这并不是不可能,想想计算机从刚出现到现在人手几台一共花费了多长时间?那个时候,现有的体制全部推翻重来,作为安全人员就要更新自己的知识库了。当然了,这个例子有点极端,量子计算机真的来了,所有计算机科学相关的从业人员就要洗牌了。总的来说,信息安全领域要求从业人员随时学习,随时更新知识库。而且这种更新速度是依赖于计算机科学这门学科的发展而来的。2008年DDoS攻击还没影子呢,现在DDoS几乎就是家常便饭了。网络的迅速发展,特别是后面云计算云存储的发展,给安全从业人员又带来了更多的问题。这必须要求从业人员随时更新自己的知识,持之以恒的站在最前沿思考问题。=============================7. 有人能做到吗?密码学精通,可以到安全研究院。比如很多着名密码学家,Gentry,Shoup什么的就在IBM,进行全同态加密的理论研究和具体实现。而且,理解密码学的人学其他方面也比较快。但是需要到领域内快速积累。编程能力强,计算机相关技术强,就可以不光做安全了。但安全领域绝对欢迎这样的人才。网络安全技术能力强,可以到任何一家互联网公司做安全。知乎上的几位技术派大牛们,大多是这方面的佼佼者。文档能力和与人交流的能力强,可以做安全咨询。这是个比较有意思的领域。这个领域更需要广泛了解安全的相关知识。不仅从技术角度,也要从管理角度。我自己只是在公钥密码学中的一个很小的领域有一点点很小的成绩。因为计算机基础知识不足,接下来的一年我估计要各种补基础知识了,而且估计还补不完。上面说的这些对人才的需求,基本上只要精通一点,就是领域内的佼佼者了。所以,信息安全领域是一个集大成的领域。而且几乎任何一个分领域对于领域内知识的要求,都高于本身的要求。因为基础不够的话,想做安全就有点痴人说梦了。=============================8. 回到主题:会饱和吗?回到问题上面来,安全人才会达到饱和吗?我认为有生之年能把上面说的起码都做过一遍,几乎都是不可能的。信息安全的人才要求很高。能力强,哪怕是一方面能力强,都可以从茫茫人海中脱颖而出。一个直接的体现就是信息安全周围配套内容的普及。我在做Black Hat,包括密码学一些视频的听译时,就尝试过让别人帮忙听写,我来翻译。结果,即使是专业听译人员,拿到这些视频也都瞎了。因为专业词汇太多,几乎是中文都不知道什么意思。Black Hat系列这么好,为什么一直以来没人做字幕,听写翻译?因为确实对听译人员要求很高。我自己水平有限,只能听译密码学、Java、以及部分数据库、网络通信相关主题的Black Hat,而且也会遇到各种问题,遇到从来没听说过的技术、开源代码、工具、或者思想。当然这个过程也是收获的过程。所以,从高层看,信息安全人才应该一直会保持匮乏的状态,等待新鲜血液的注入。另一方面,由于门槛太高,不少人会在门外徘徊。门外的人多了,饱和一词也就来了。对于我自己,虽然得到了领域内人士的部分认可。但是,越往里面走,越发现里面的坑有多深。唯一的办法就是不停的学习和更新知识。毕竟,学习要比提出新方法简单多了,大家说对吗?=============================9. 只有信息安全领域是这样?就如同事物都是螺旋向上发展的一样,正像其他回答说的那样,任何领域都是:水平不高,哪里都饱和;水平高了,哪里都会要。什么叫水平高,高到什么程度就够了?我认为没有尽头。一个领域,越是钻研,越是往深了看,就越发现自己的渺小和无能。这会反过来导致更强的求知欲和更强的动力。等觉得自己小到只是一个沙子的时候,抬头一看,可能就会明白,绝大多数人,可能连分子大小都没到,但他们认为自己内部的原子和电子,就是整个世界。希望我们都能成为一粒沙子,看着大海的波涛汹涌,而毫无意识的,为这个世界的组成贡献自己的一份力量。以上。

㈦ 分布式编程技术中事务的原子性是指Cristian和Berkley时间同步算法的服务器工+

摘要 定义:由一组操作构成的 可靠 、 独立 的工作单元,要么全部成功,要么全部失败

㈧ 谁有11年9月计算机2级JAVA笔试答案,最好是带题目,[email protected]

2006年9月全国计算机等级考试二级Java程序设计笔试试卷
发布时间:2007-03-13 10:31:04 作者:极秀 极秀 字体选择:

一、选择题(每小题2 分,共70 分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写
在答题卡相应位置上,答在试卷上不得分。
(1)下列选项中不符合良好程序设计风格的是_____。
A)源程序要文档化 B)数据说明的次序要规范化
C)避免滥用goto 语句 D)模块设计要保证高耦合、高内聚
(2)从工程管理角度,软件设计一般分为两步完成,它们是_____。
A)概要设计与详细设计 B)数据设计与接口设计
C)软件结构设计与数据设计 D)过程设计与数据设计
(3)下列选项中不属于软件生命周期开发阶段任务的是_____。
A)软件测试 B)概要设计 C)软件维护 D)详细设计
(4)在数据库系统中,用户所见的数据模式为_____。
A)概念模式 B)外模式 C)内模式 D)物理模式
(5)数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和_____。
A)编码设计 B)测试阶段 C)运行阶段 D)物理设计
(6)设有如下三个关系表

下列操作中正确的是_____。
A)T R S = ∩ B)T R S = ∪
C)T R S = × D) / T R S =
(7)下列叙述中正确的是_____。
A)一个算法的空间复杂度大,则其时间复杂度也必定大
B)一个算法的空间复杂度大,则其时间复杂度必定不
C)一个算法的时间复杂度大,则其空间复杂度必定小
D)上述三种说法都不对
(8)在长度为64 的有序线性表中进行顺序查找,最坏情况下需要比较的次数为_____。
A)63 B)64 C)6 D)7
(9)数据库技术的根本目标是要解决数据的_____。
A)存储问题 B)共享问题 C)安全问题 D)保护问题
(10)对下列二叉树

进行中序遍历的结果是_____。
A)ACBDFEG B)ACBDFGE C)ABDCGEF D)FCADBEG
(11)进行Java 程序需要的工具软件所在的目录是_____。
A)JDK 的bin 目录 B)JDK 的demo 目录
C)JDK 的lib 目录 D)JDKR 的jre 目录
(12)下列关于JAVA 语言特点的叙述中,错误的是_____。
A)Java 是面向过程的编程语言
B)Java 支持分布式计算
C)Java 是跨平台的编程语言
D)Java 支持多线程
(13)Java 的核心包中,提供编程应用的基本类的包是_____。
A)Java.Jang B)Java.util C)Java.applet D)Java.rmi
(14)下列关于Java 对import 语句规定的叙述中,错误的是_____。
A)在Java 程序中import 语句可以有多个
B)在Java 程序中import 语句可以没有
C)在Java 程序中import 语句必须有一个
D)在Java 程序中import 语句必须引入在所有类定义之前
(15)在编译Java 程序时,用于指定生成class 文件位置的选项是_____。
A)-g B)-d C)-verbose D)-nowarn
(16)阅读下面程序
import java.io.*;
public class TypeTransition{
public static void main(String args[]){
char a = ‘h’;
int i=100;
int j=97;
int aa=a+i;
System.out.println(“aa=”+aa);
Char bb=(char)j;
System.out.println(“bb=”+bb);
}
}
如果输出结果的第二行为bb=a,那么第一行的输出是_____。
A)aa=1 B)aa=204 C)aa=v D)aa=156
(17)阅读下面程序
public class OperatorsAndExpressions{
void equalsMethodl(){
String s1=new String(“how are you”)
String s2=new String(“how are you”)
System.out.println(s1=s2)
}
public static void main(String args[]){
OperatorsAndExpressions OperAndExp=new OperatorsAndExpressions();
//用于复合类型数据的“= =”运算符
OperAndExp.equalsMethod1();
}
}
程序运行结果是_____。
A)== B)true C)false D)equal
(18)阅读下面代码
if(x==0)
else if(x>-3)
else
若要求打印字符串“季军”,则变量x 的取值范围是_____。
A)x=0&x<=-3 B)x>0 C)x>-3 D)x<=-3
(19)下列关于构造方法的叙述中,错误的是_____。
A)Java 语言规定构造方法名与类名必须相同
B)Java 语言规定构造方法没有返回值,但不用void 声明
C)Java 语言规定构造方法不可以重载
D)Java 语言规定构造方法只能通过new 自动调用
(20)阅读下面程序
import javax.swing.JOptionPane;
public class Comparison{
public static void main(String args[]){
String firstNumber, //用户输入第1 个数据变量
secondNumber, //用户输入第2 个数据变量
result; //输出结果变量
int number1, //用于比较的第1 个数
number2; //用于比较的第2 个数
//用户输入第1 个数据的字符串
firstNumber=JOptionPane.showInputDialob(“输入第1 个整数:”);
//用户输入第2 个数据的字符串
secondNumber=JOptionPane.showInputDialog(“输入第2 个整数:”);
//将字符串转换为整数类型
number1=Integer.parseInt(firstNumber);
number2=Integer.parseInt(secondNumber);
//初始化结果变量

//比较两个数据
if(number1=number2)
result+=number1+ “==”+number2;
if(number1!=number2)
result+=number1+ “!=”+number2;
if(number1 <number2)
result=result+ “n”+number1+ “<” +number2;
if(number1>number2)
result=result+ “\n”+number1+ “>” +number2;
if(number1<=number2)
result=result+ “\n”+number1+ “<=” +number2;
if(number1>=number2)
result=result+ “\n”+number1+ “>=” +number2;
//显示结果
JOptionPane.showMessageDialog(null.result, “比较结果”,
JOptionPane.INFORMATION MESSAGE);
System.exit( 0 );
}
}
为使程序能正确运行并得到合理的输出结果,初始化结果变量语句(下划线处)应是
A)result=”” B)result=null
C)result=number1 D)result=number2
(21)阅读下面程序
public class Increment{
public static void main(String args[]{
int c;
c=5;
System.out.println(c);
System.out. println(c++);
System.out.println(c);
}
}
程序运行结果是_____。
A)5
6
6
B)5
5
6
C)6
7
7
D)6
6
6
(22)下列叙述中,错误的是_____。
A)JavaApplication 与Applet 所用编译命令相同
B)通常情况下Java Application 只能有一个main()方法
C)JavaApplet 必须有HTML 文件才能运行
D)JavaApplet 程序的.class 文件可用java 命令运行
(23)下列关于Java 语言中线程的叙述中,正确的是_____。
A)线程是由代码、数据、内核状态和一组寄存器组成
B)线程间的数据是不共享的
C)用户只能通过创建Thread 类的实例或定义,创建Thread 子类的实例建立和控制
自己的线程
D)因多线程并发执行而引起的执行顺序的不同定性可能造成执行结果的不稳定
(24)阅读下面程序_____。
import javax.swing.JOptionPang;
public class BreakLabelTest{
publicstatic void main(String args[]){
String output=”” ;
stop:{
for(int row=1;row<=10;row++){
for(int column=1;column<=5;column++){
if(row==5)
break stop;
output+=””;
}
output += “n”;
}
output+= “\nLoops terminated normally”;
}
JOptionPane.showMessageDialog(
Null,output, “用一个标志测试break 语句”,
JOptionPane.INFORMATION_MESSAGE);
System.exit( 0 );
}
}
程序运行结果是
A)窗口中有5 行·····
B)窗口中有5 行····
C)窗口中有4 行·····
D)窗口中有6 行·····
(25)处理对象传输的接口是_____。
A)Serializable B)Cloneable C)ItemListener D)ActionListener
(26)在读取二进制数据文件的记录时,为了提高效率常常使用一种辅助类_____。
A)InputStream B)FileInputStream C)StringBuffer D)BufferedReader
(27)可以使当前同级线程重新获得运行机会的方法是_____。
A)sleep() B)join() C)yield() D)interrupt()
(28)阅读下面程序
1 public class Try extends Thread{
2 Public static void main (String args[]){
3 Try t = new Try();
4 t.start( );
5 }
6
7 Public void run(int j) {
8 int i=0;
9 while(i<5){
10 System.out.println(“祝你成功!”);
11 i++;
12 }
13 }
14 }
该程序要求打印5 行“祝你成功!”,必须改正程序中的某行代码,程序才能完成,选择正
确的修改是_____。
A)将第1 行的extends Thread 改为implements Runnable
B)将第3 行的new Try()改为new Thread()
C)将第4 行t.start()改为start(t)
D)将第7 行的public void run( int j)改为public void run()
(29)下列事件监听器中,无法对TextField 对象进行事件监听和处理的是_____。
A)ActionListener B)cuslistener
C)MouseMotionListener D)ChangeListener
(30)Swing 的选项面板是_____。
A)JTabbedPane B)JLayeredpane C)JScrollPane D)JSplitPane
(31)每个Java 小应用程序必须定义为_____。
A)Applet 类或JApplet 类的子类 B)JFrame 类的子类
C)Frame 的子类 D)Window 的子类
(32)在Applet 的init()方法被调用后,接下来最先调用的方法是_____。
A)run() B)start() C)stop() D)destroy()
(33)下列关于Applet 的安全限制的叙棕中,错误的是_____。
A)通常情况下,禁止Applet 读,写本地文件系统
B)通常情况下,禁止Applet 读Applet 源主机之外的任何主机建立网络连接
C)通常情况下,禁止Applet 读取系统信息
D)通常情况下,禁止Applet 加载本地库或方法
(34)下列标识符(名字)命名原则中,正确的是_____。
A)类名的首字母小写 B)变量和方法名的首字母大写
C)接口名的首字母小写 D)常量完全大写
(35)提供showDocument()方法,使Applet 能够请求浏览器访问特定URL 的类是
A)Applet B)AppletContext C)JApplet D)URL
二、填空题(每空2 分,共30 分)
请将每一个空的正确答案写在答题卡[1]-[15]序号的横线上,答在试卷上不得分。注意:
以命令关键字填空的必须拼写完整。
(1)下列软件系统结构图

的宽度为 [1] 。
(2) [2] 的任务是诊断和改正程序中的错误。
(3)一个关系表的行称为 [3] 。
(4)按“先进后出”原则组织根据的数据结构是 [4] 。
(5)数据结构分为线性结构和非线性结构,带链的队列属于 [5] 。
(6)若想在程序中使用JLabel 类,则该程序可以使用import [6] JLabel;语句引入JLabel
类。
(7)在Java 中,3.14156D 表示的是 [7] 。
(8)阅读下列代码
public class Test2{
public static voidm cn(String args[]){
System.out.println(5/2);}
}
其执行结果是 [8]
(9)阅读下列代码段
int x=3;
while (x<9)
x+=2;
x++;
while 语句成功执行的次数是 [9] 。
(10)Java 不直接支持多继承,但可以通过 [10] 实现多继承。
(11)在下列程序的下划线处,填入适当语句使程序能正确执行并输出异常栈信息。
Public class ThrowableException{
Public static void main(String args[]){
try{
throw new Throwable(“这里是本人定义的异常”);
{catch(Throwable e){
System.out.println(“Caught Throwable”);
System.out.println(“e.getMessage():”+e.getMessage());
System.out.println(“e.toString():”+e.toString());
System.out.printin(“e.printStackTrace():”);
[11] ;}}}
(12)在java.io 包中有某个类同时实现了Datainput 接口和DataOutput 接口,这个类是
[12] 。
(13)在Java 程序中,主线程一般具有 [13] 优先级。
(14)当实现Runnable 接口时,要实现的方法是 [14] 。
(15)mouseDragged()方法是MouseMotionListener 接口中的抽象方法,该方法的参数是
[15] 类。

㈨ gfs采用了哪些容错措施来确保整个系统的可靠性

GFS的精彩在于它采用了多种方法,从多个角度,使用不同的容错措施来确保整个系统的可靠性。
2.1.1 系统架构
GFS的系统架构如图2-1[1]所示。GFS将整个系统的节点分为三类角色:Client(客户端)、Master(主服务器)和Chunk Server(数据块服务器)。Client是GFS提供给应用程序的访问接口,它是一组专用接口,不遵守POSIX规范,以库文件的形式提供。应用程序直接调用这些库函数,并与该库链接在一起。Master是GFS的管理节点,在逻辑上只有一个,它保存系统的元数据,负责整个文件系统的管理,是GFS文件系统中的“大脑”。Chunk Server负责具体的存储工作。数据以文件的形式存储在Chunk Server上,Chunk Server的个数可以有多个,它的数目直接决定了GFS的规模。GFS将文件按照固定大小进行分块,默认是64MB,每一块称为一个Chunk(数据块),每个Chunk都有一个对应的索引号(Index)。

客户端在访问GFS时,首先访问Master节点,获取将要与之进行交互的Chunk Server信息,然后直接访问这些Chunk Server完成数据存取。GFS的这种设计方法实现了控制流和数据流的分离。Client与Master之间只有控制流,而无数据流,这样就极大地降低了Master的负载,使之不成为系统性能的一个瓶颈。Client与Chunk Server之间直接传输数据流,同时由于文件被分成多个Chunk进行分布式存储,Client可以同时访问多个Chunk Server,从而使得整个系统的I/O高度并行,系统整体性能得到提高。

相对于传统的分布式文件系统,GFS针对Google应用的特点从多个方面进行了简化,从而在一定规模下达到成本、可靠性和性能的最佳平衡。具体来说,它具有以下几个特点。
1.采用中心服务器模式
GFS采用中心服务器模式来管理整个文件系统,可以大大简化设计,从而降低实现难度。Master管理了分布式文件系统中的所有元数据。文件划分为Chunk进行存储,对于Master来说,每个Chunk Server只是一个存储空间。Client发起的所有操作都需要先通过Master才能执行。这样做有许多好处,增加新的Chunk Server是一件十分容易的事情,Chunk Server只需要注册到Master上即可,Chunk Server之间无任何关系。如果采用完全对等的、无中心的模式,那么如何将Chunk Server的更新信息通知到每一个Chunk Server,会是设计的一个难点,而这也将在一定程度上影响系统的扩展性。Master维护了一个统一的命名空间,同时掌握整个系统内Chunk Server的情况,据此可以实现整个系统范围内数据存储的负载均衡。由于只有一个中心服务器,元数据的一致性问题自然解决。当然,中心服务器模式也带来一些固有的缺点,比如极易成为整个系统的瓶颈等。GFS采用多种机制来避免Master成为系统性能和可靠性上的瓶颈,如尽量控制元数据的规模、对Master进行远程备份、控制信息和数据分流等。
2.不缓存数据
缓存(Cache)机制是提升文件系统性能的一个重要手段,通用文件系统为了提高性能,一般需要实现复杂的缓存机制。GFS文件系统根据应用的特点,没有实现缓存,这是从必要性和可行性两方面考虑的。从必要性上讲,客户端大部分是流式顺序读写,并不存在大量的重复读写,缓存这部分数据对系统整体性能的提高作用不大;而对于Chunk Server,由于GFS的数据在Chunk Server上以文件的形式存储,如果对某块数据读取频繁,本地的文件系统自然会将其缓存。从可行性上讲,如何维护缓存与实际数据之间的一致性是一个极其复杂的问题,在GFS中各个Chunk Server的稳定性都无法确保,加之网络等多种不确定因素,一致性问题尤为复杂。此外由于读取的数据量巨大,以当前的内存容量无法完全缓存。对于存储在Master中的元数据,GFS采取了缓存策略,GFS中Client发起的所有操作都需要先经过Master。Master需要对其元数据进行频繁操作,为了提高操作的效率,Master的元数据都是直接保存在内存中进行操作。同时采用相应的压缩机制降低元数据占用空间的大小,提高内存的利用率。
3.在用户态下实现
文件系统作为操作系统的重要组成部分,其实现通常位于操作系统底层。以Linux为例,无论是本地文件系统如Ext3文件系统,还是分布式文件系统如Lustre等,都是在内核态实现的。在内核态实现文件系统,可以更好地和操作系统本身结合,向上提供兼容的POSIX接口。然而,GFS却选择在用户态下实现,主要基于以下考虑。
在用户态下实现,直接利用操作系统提供的POSIX编程接口就可以存取数据,无需了解操作系统的内部实现机制和接口,从而降低了实现的难度,并提高了通用性。


POSIX接口提供的功能更为丰富,在实现过程中可以利用更多的特性,而不像内核编程那样受限。
用户态下有多种调试工具,而在内核态中调试相对比较困难。
用户态下,Master和Chunk Server都以进程的方式运行,单个进程不会影响到整个操作系统,从而可以对其进行充分优化。在内核态下,如果不能很 好地掌握其特性,效率不但不会高,甚至还会影响到整个系统运行的稳定性。
用户态下,GFS和操作系统运行在不同的空间,两者耦合性降低,从而方便GFS自身和内核的单独升级。


4.只提供专用接口
通常的分布式文件系统一般都会提供一组与POSIX规范兼容的接口。其优点是应用程序可以通过操作系统的统一接口来透明地访问文件系统,而不需要重新编译程序。GFS在设计之初,是完全面向Google的应用的,采用了专用的文件系统访问接口。接口以库文件的形式提供,应用程序与库文件一起编译,Google应用程序在代码中通过调用这些库文件的API,完成对GFS文件系统的访问。采用专用接口有以下好处。


降低了实现的难度。通常与POSIX兼容的接口需要在操作系统内核一级实现,而GFS是在应用层实现的。
采用专用接口可以根据应用的特点对应用提供一些特殊支持,如支持多个文件并发追加的接口等。
专用接口直接和Client、Master、Chunk Server交互,减少了操作系统之间上下文的切换,降低了复杂度,提高了效率。

阅读全文

与分布式带来编程复杂度相关的资料

热点内容
相册加密文件夹的密码在哪里看 浏览:50
母女通收小说 浏览:46
分布式云服务器系统 浏览:951
快手上发的视频咋显示电视剧名字 浏览:637
大奶啊婆 浏览:597
看片天堂网站 浏览:662
求看那啥的网站或者软件 浏览:982
日本大胸模特电影 浏览:810
为什么连续点安卓出现的黄色圆圈 浏览:191
三好小说网手机版阅读 浏览:459
在线观看的s网站 浏览:686
澳门赌博电影 浏览:616
大港金逸影城今日影讯天津 浏览:451
dos查看文件夹命令是什么 浏览:661
徐少强演大帅电影叫什么 浏览:793
微信如何压缩多张图片成一个文件夹 浏览:948
怎么才能用台湾软件看电影 浏览:150
抗战时期日本女子监狱电影完整版 浏览:816
团鬼六系列电影 浏览:200