推荐 1 收藏

enter image description here
我们看到,无论是在ThoughtWorks还是在更广泛的社区,采用微服务(micro-services)的越来越多。诸如Dropwizard的框架和声明性配置(declarative provisioning)都表明了技术和工具的成熟。避免通常的大规模整体替换,而是逐个替换系统的各个部分,对系统的总成本有积极的影响。我们看到,这对中长期尤其是二至五年的重写周期影响最大 。

打破单一整块的应用模式、而是以微服务来构建系统,需要一个可靠的策略把各个分开的系统整合起来从而给最终用户提供连贯的体验。在表现层使用Edge Side Includes (ESI) 来整合,是一个实用而优雅的解决方案。该方案以诸如Varnish的反向代理的形式存在于你的环境中,或在内容交付网络(Content Delivery Network - CDN)中贴近用户。

应用程序部署经常由于过量的特定于环境的配置而痛苦,这些配置包括依赖的服务的主机名。在DNS配置中使用诸如“mail”“db”的标准主机名是降低配置复杂度的有价值的技术。该技术有多种实现方式,包括水平分割(split-horizon)的DNS或者配置搜索子域。要做到这一点,开发团队和IT运营之间的合作是不可缺少的,但遗憾的是这种合作在一些组织中依然很难实现。

在设计领域模型时,聚合模式有助于结构和模块化。映射到关系型数据库,这种聚合在数据库表中时不可见的。文档型数据库,例如MongoDB,则可以将你的聚合建模成文档。这种1:1的映射意味着,聚合的根应该是从集合中加载的对象。

采纳持续交付意味着很多团队正在建立一个自动部署管道(automated deployment pipeline),用以把他们的代码一直送到产品环境。管道给其他复杂的构建、部署活动链条提供可视化。此外,针对通往产品环境的每一阶段的构建产物,管道为其提供了可靠的跟踪能力。现在,许多厂商都在建立持续集成(CI)服务器,并以管道做为其首要的功能,而不是仅仅提供可视化模块。我们建议,团队要仔细研究这些产品,以避免把自己的管道硬塞到一个不适当的产品中去。

在敏捷开发已经成为主流的情况下,我们提及这一点可能听起来有些奇怪。但是我们发现团队证重新发现并拥抱采纳对半成品的限制。各种方法,例如看板(Kanban),限制了正在进行中的半成品,迫使团队采取更优的工作流程,将瓶颈可视化。

诸如Pallet等工具给声明性配置下的环境创建和管理提供了令人信服的方法。通常,它以以下形式完成:用一种领域特定语言(Domain Specific Language, DSL)声明环境拓扑——实例数、操作系统、网络配置和应用——之后用命令行工具自动化创建整个环境。这种方法的不同之处在于将实例的创建和应用的配置解耦;另一个不同之处在于,对搭建在多个机器上的特定领域应用层服务,这种方法具有声明各个服务之间依赖性的能力。

我们在迅速走向一个移动设备上的用户交互占主导的世界。“移动优先”拥抱这种变化趋势,以移动设备为第一目标来进行用户界面和服务器交互的设计。对比带着高能力客户端和快速可靠网络的假设的其他方法,移动优先策略降低用户体验以适应移动设备的限制。

实现这一目标的一种技术是响应式网页设计(responsive web design)。该技术使页面开始于基本内容展示-通常是保持基本的信息不变-按照检测到的浏览器的功能进行相应的用户体验增强。这通常根据屏幕的大小来改变表单的布局和格式。

在过去的15年里,机器学习,语义分析,文本挖掘,定量分析,和其他先进的分析技术不断成熟。这些方法在预言、预测识别重复的模式、洞察非结构化的数据提供了令人难以置信的潜力。从历史上看,我们存储和快速分析大的音频、视频和图像数据的能力受到严重限制。这种限制约束了样本大小,也同样束缚了验证分析模型并将之放入产品的时间。现在,通过使用一些列诸如NoSQL,data harvesters,MapReduce框架和无共享(shared-nothing)的商品服务器集群等新技术,我们有了真正有效利用这些技术的必要能力。结合源自传感器、移动设备和社交媒介的全球数据的大量增加,我们看到的是一个蕴藏着巨大商机的领域。

Web服务器、数据库、网络基础设施和后台系统生成的日志文件是业务的运作和行为重要数据来源。在过去,这些文件大多数被视为失败情况下的诊断信息。但是,以如此低廉的存贮,加上诸如 Splunk等可用工具的对数以百万计的事件的索引和检索,日志文件也可以是了解客户的数据源。日志即数据、并存储完整的日志而不是预定义的指标,提供一种方法来解答“一个企业不能达到先前预期”的新奇问题。

把用户带到一个可控环境下进行正式的测试是一个缓慢而昂贵的提议。更有用的是,定性的反馈可以快速而廉价的从游击式用户测试得到——通过到外面的世界对一般公众的小样本进行测试。另一个替代方案是远程可用性测试,你可以将从设计线框图到最终产品等各种东西发出去给全球各地的人进行测试。Usabila, Loop11 和 Treejack等都可以提供工具,让你可以要求用户完成特定的任务,并捕捉所有信息,从任务完成时间到用户完成任务过程中的想法和感受。

开发团队通常会产生测试来指定和验证应用程序的行为,但是这些测试在产品发布后就不再运行了。这是一个被错过的机会。语义监控利用你的测试来持续评估你的应用程序,测试、执行相结合并进行实时监控。采用微服务和相同粒度的架构方法,运行时的交互测试越来越重要。将对用户驱动的合约的验证合并到一个监控设施中来是实现方法的一种。虽然仍在发展中,我们看到这两种独立但重要的验证方案有很大的合并的希望。

验收测试一般从“外部”运行被测系统,为运行整个应用的安全性遍历整个网络堆栈。过程中的验收测试对测试代码和被测应用必须运行在不同的进程中才能获得这些好处的概念作出挑战。当使用嵌入式的容器,不必花费由部署和与另一个容器通信带来的成本,就可以容易的搭建系统、通过HTTP运行测试并验证最终状态。

之前我们已经谈过在应用程序所有适当的层运行自动化测试。在本期技术雷达中,我们要十分具体——我们不推荐基于浏览器的详尽测试。诸如Selenium等浏览器自动化工具鼓励通过浏览器进行广泛的测试。而这些测试在测试集中持续占有自己的位置,大多数团队发现,通过浏览器执行这些大量的测试缓慢而脆弱。

推荐 1 收藏

enter image description here
在各种项目中,我们使用过多种语言与构件工具,其中一个经常被我们使用的就是Rake。Rake 是一种优雅、简单和强大的构建语言,它作为内部DSL并基于Ruby实现。Ruby可以运行于多种虚拟机平台,这意味着Rake也同样可以,并为用户留下了利用更多特定语言工具实现特定任务的空间。无论你使用哪种平台,你都很难找到像Rake这样的优雅与灵活性的结合体,所以我们推荐尝试 Rake for Java and .Net 项目

以XML为基础的构件工具,例如Ant和Maven,由于太多令人生厌的尖括号和粗糙的插件框架而逐渐失宠。虽然尖括号问题可以通过自动生成来解决,但当项目变得越来越复杂的时候,粗糙的插件框架却严重地限制了构建工具的能力。我们已经逐渐感觉到插件框架其实是一种不合理的抽象层次,更推荐使用以语言为基础的工具,例如 Gradle 和 Rake,因为它们从长远来看抽象更加合理而且也更加灵活。

在Java和Ruby混搭的应用开发中,对包的格式和依赖管理的方式将截然不同。通过提供与Ivy兼容的代理将RubyGems和JAR打包,并且使用Ivy来解决Gem依赖,GemJars将合并和简化Java和Ruby混搭系统的构建工作。

在企业数据中心中,以前由云服务提供商所设定的准则也在发生着变化。在云环境中,很多系统将会自动扩容以提供额外的可用性或应对访问量的增长。对于寻求 IaaS 和 PaaS 解决方案的企业来讲,管理日益增长的集群环境,使用不可变更服务器(或者称为“凤凰服务器”)是一个不错的选择。与此相对应的是,配置可更改的雪片服务器增加了运营团队的负担并且鼓励了一种“在我的机器上可以啊?!”的工作心态。利用例如 Chef 或 Puppet 工具可以通过脚本快速构建服务器或虚拟机,从而大大减轻了管理服务器集群的复杂度。配合应对系统异常的软件共同使用将大大增加系统的扩展性和稳定性。

我们一直以来都认为 Javascript 是一流的计算机语言,并且它努力跟随着它所在领域的测试工具的发展。优秀的成果之一就是基于浏览器的测试框架 Jasmine。Jasmine 搭配 Node.js 使用是构建强壮的客户或服务器端的 JavaScript 应用的最佳选择。

当构建分布式应用来应对网络扩展或大数据需求的时候,配置合适的监测工具将是一件不可舍弃的工作。Zipkin 可以采集不同服务组建的数据,并可通过类似于 firebug 的显示方式显示经由不同服务组建的具体访问信息。原始数据可保存在 Hadoop 中用于进一步的数据挖掘。

Zucchini 是提供给 iOS 应用的 Cucumber 风格的BDD测试框架。它使用 CoffeeScript 进行特征定义,并且我们非常高兴的是它可以在运行中保存快照信息。

iOS 本地应用是Apple移动平台成功的基石。在 JetBrains 将其在其它平台上的IDE的优势注入并发布了 AppCode 以后,开发 iOS 和 OS X 应用已经变得越来越方便和高效。

像很多优秀的软件开发者一样,我们精心选择我们使用的工具。我们的口味一般与众不同,这是为什么我们选择支持 Light Table Kickstarter 项目的原因。尽管项目还处于早期开发阶段,基于新的诠释,他们承诺的交互性将匹拟 Smalltalk 世界中的佼佼者,我们期待着这一宏大项目所产生的影响。

Hadoop 继续作为开发分布式系统的主流框架。尽管使用 Java 开发 Hadoop 应用并不困难,但设计高效的 MapReduce 的数据处理通道确实需要相当的项目开发经验。Apache Pig 通过提供高层语言 Pig Latin 和语言运行环境,简化了 Hadoop 的开发。Pig Latin 是过程式语言,提供类似于 SQL 的方式与大型数据集进行交互。底层运行平台将 Pig Latin 编译成为运行在集群上的一系列优化后的 MapReduce 程序。Pig Latin 可以基于不同语言,例如 Ruby,JavaScript,Python 和 Java 通过用户自定义函数的方式进行扩充。

有很多实用性测试工具非常适合我们的游击战方式。视线跟踪一直以来是设计迷人的用户界面的有效工具,然而与之相关的软件和硬件设备都非常昂贵并需要专业公司的指导。Crazy Egg 是廉价的软件解决方案,它基于鼠标移动产生热成像图,鼠标移动与视线焦点又具备非常相关的联系并且可作为近似估算。Silverback 不仅在测试过程中可以截屏,也可以录制用户的面部影像和声音。这些特点能为大型开发团队提供非常宝贵的测试体验分享。

尽管存在许多用以支持系统监测的图表生成工具,Graphite 无疑正在成为它们之中的首选。除了可以实时显示图表数据,它所采用的环状数据库既可以存储大量的历史数据,也可以提供可靠的近期数据。在界面上还提供了不少配置选项,最终的数据图表也可被嵌入网页从而提升展示效果。

Riemann 是一个开源服务器,它可以实时地将各种事件进行整合和传递。它基于 Netty 用 Clojure 编写,能够应对单个节点上的成千上万次的并发请求。Riemann 使用简单的 Protobuf 作为事件处理协议,支持将各种类型,例如 CPU、内存使用、订单错误率的事件信息整合起来,并可将数据提供给例如 Graphite 类型的图表系统或者触发邮件通知,同时提供数据的监测页面。Riemann 把数据处理理解为实时的通用事件流,相对于使用特定系统处理特定类型的数据的而言,Riemann 无疑是向前迈出了一大步。

JavaScript 引擎的性能提升结合着广泛被采纳的基于 HTML 的嵌入式 SVG 文档,这使得基于纯 Javascript 的客户端图表和可视化解决方案被更多人所接受。Highcharts 是我们尝试过的优秀者之一,它具备对高可配置性互动图表的灵活支持,并可轻而易举地对大数据集进行渲染。

D3 是将数据集绑定至 DOM 的 JavaScript 函数库,通过声明式的方法将文档转换为不同的可视化效果(从图表到热成像图)。对 HTML、CSS 和 SVG 的支持,和采用可扩展的插件模型,我们喜欢它所提供的通过多种直观方法表现数据的方式。

我们对代码可视化技术非常着迷。特别是已经被证明非常有用的 Dependency Structure Matrices (DSM) ,它支持进化式结构与浮现式设计并且存在大量的支持 DSM 的工具。

我们已经谈论过很多关于 embedded servlet containers 的事情,并且它们也已经被我们的项目所广泛采用。像 SimpleWeb 和 Webbit 这样的工具通过简单和嵌入式的途径更进一步提供了无需实现 Java Servlet 标准的精简 HTTP 服务器功能。我们也高兴地看到利用此优势的相关测试代码的复杂度也在降低。

我们是内建式自动化性能测试的信仰者,但目前在这领域的开源测试工具数量有限。Locust 是非常推荐的 Python 测试工具,它支持运行多个注入器,生成基本的统计数据,还提供了实用的网页面板。它在性能测试方面更专注于对用户行为的模拟而不仅是生成访问流量,所以相对于传统的 JMeter 和 Grinder 我们更推荐使用 Locust。

当前 SaaS 性能测试工具,例如 Blitz.io 和 Tealeaf 的兴起使我们避免了性能测试中搭建集群环境以及软件许可给我们带来的种种麻烦。这些服务通过不同地域的客户端的支持使性能测试变得异常简单,并且免去了在基础平台上的大量投入。

推荐 1 收藏

enter image description here
混合云(Hybrid clouds)结合了公有云和私有数据中心的最佳特性。混合云允许应用程序在正常时间运行于私有数据中心,而高峰时段的过载请求则运行于公有云中的租赁空间。有很多基础设施解决方案允许在混合云上自动一致的部署,例如Palette和RightScale。由于Amazon,Rackspace和其他服务商提供的强大的产品,我们将混合云放到本版雷达的试用圈中。

从令人眼花缭乱的云服务商中做正确的选择依然很困难。一个策略就是采用开源IaaS(open source IaaS)平台,例如OpenStack或者CloudStack。开源IaaS平台可以运行和公有云一致的私有云,在有需要时从一个云服务商迁移到另一个上去。Apache的Deltacloud进一步从服务商特定的APIs中抽取以提供跨云平台的一致体验。

Google的BigQuery(BigQuery)将数据分析带到云上。不再是将数据载入到一个昂贵的,提前定义索引的数据仓库,BigQuery通过随机的类似SQL的查询允许上传和分析一个数据集。数千台服务器在几秒内处理数千兆数据, 这为概念证明甚至一个完整的应用都提供了一个廉价的方式。

微软的Azure云平台(Azure) 继续和AWS这些更成熟的平台扮演追赶者的角色,但微软如何响应市场需求仍然让我们印象深刻。像大多数微软的解决方案一样,Azure仍然是一个竞争者并且值得评估。

云端的持续集成(Continuous integration in the cloud)是支持敏捷开发且事后显而易见的基础设施解决方案之一。没有本地软件,只有最少配置就可以工作。随着产品的成熟,开发人员没有理由不采用这个重要的实践。

尽管在全球北美遭到明显的抵制,像肯尼亚的M-Pesa这样的移动支付系统(mobile payment systems)正提供安全的非现金货币交易。随着这项服务在非洲的展开,这个系统为百万有着手机却无法访问传统的银行网点的人们打开了一个巨大的市场。如Square这样的供应商正缓慢改变现状,但是北美继续落后。

对于适用于文档数据库模型的问题,MongoDB(MongoDB)提供了简单的可编程性,一个查询借口,自动故障转移的高可用性和自动的分片能力。它允许从一个关系型数据库管理系统模型平滑地转移到NoSQL数据存储,并且用一些大家熟悉的概念,如能够定义索引。

图形数据库将信息存储为由命名关系形成的任意互连节点,而不是表和连接。没有Schema,高度的可扩展性,图形数据库是复杂领域建模半结构化数据的一个非常好的选择。Neo4j(Neo4j)是该领域的领跑者,它的REST API和Cypher查询语言支持简单快速的存储和图表的遍历。

Riak(Riak)是分布式键值存储,没有Schema,与数据类型无关。对于写任务很重的项目,例如存储像会话,购物车和流日志这样的信息,Riak非常适用,同时它也能在全文本搜索中运行复杂查询。分布式集群可以在没有单主站时自我恢复,有可调的一致性和可用性设置,能够检测冲突,如果需要可以解决冲突-这些对于高可用性环境特别有帮助。

基于对数据库工作原理的重新思考,Datomic(Datomic)是一个不可变的数据库服务器,具备事务处理和部署的特性。在敏捷项目里一个共同的头痛之处在于管理数据库迁移,特别是备份之前的状态。Datomic让迁移的需求不再存在-每一个版本的数据(以及schema)都被数据库保存。虽然仍在演进,但我们欣赏Datomic的气魄。

Couchbase(Couchbase)是一个持续缓存,具备自动分片,无主机集群和为了避免缓存丢失的数据复制等功能。因为支持Memcached协议,它允许基于Memcached系统的简易替换。

作为从传统,独立应用程序容器中进化而来的代表,Vert.x(Vert.x)是一个连接同步和异步编程风格的应用框架。程序员为了简单起见,可以选择权衡可扩展性和性能。和Node.js不同,Vert.x是一个可以从很多支持JVM的语言中被调用的库,包括Java,Ruby和JavaScript。

我们之前对跨平台重用代码持怀疑态度。我们将市场上很多工具的经验融合,并且建议对这种类型解决方案感兴趣的客户慎重。如果在这个较为危险的领域做选择的话,我们感觉Calatrava(Calatrava)是移动应用开发中值得评估的。它的架构很好地遵守了业务和表现层逻辑的分离,最大化重用相同的部分,并且提供平台本地接口的访问来满足速度以及设备特定功能的需求。

Meteor.js(Meteor.js)是一个客户端和服务端的JavaScript应用框架,在web浏览器或Node.js容器里运行,用MongoDB支持保持持久性。它使用“智能包”-很少的一部分代码,可以作为浏览器运行或者作为云服务的一部分。它允许热部署和在浏览器中更新。我们觉得尽管这个框架还没有完全成熟,但是这个想法还是很棒。

尽管Windows Phone有一个良好的开端,一个深思熟虑的用户界面,以及可能所有移动平台中最好的开发体验,我们还是看到微软和它的合作伙伴在平台策略执行过程中的一些牵绊。和上一版雷达比,这让我们对这个平台的将来不太乐观。

有时,架构上的决定导致你将基础设施包含在内,而通常我们只能承受一个基础设施,例如大型机或者搜索设备。这是个很糟糕的想法。它严重限制了测试和部署的灵活性。我们强烈支持可以容易设置和拆除的基础设施。Singleton infrastructure(Singleton infrastructure)属于过去被误导的供应商驱动的架构。

推荐 1 收藏

enter image description here
JavaScript已经超出了浏览器,作为跨平台开发的一个重要技术新兴而起。它在如Node.js,Meteor.js,以及如Calatrava的移动框架的代码重用的方式中,是一个前端和中间件。随着近来其他编译成JavaScript的语言的扩散,我们考虑是否应该将JavaScript作为一个平台(JavaScript as a platform)而不是一种语言。

随着JavaScript越来越多地被采用,许多JavaScript代码库的大小也在增加。为了改进代码模块化以及帮助管理,我们看到团队欢迎一些如Require.js(Require.js)的库。使用异步模块定义(AMD)格式后,代码被分成模块,使得开发和维护都变轻松,也是一个合并和减小产品环境部署脚本的优化工具。

随着JavaScript的发展,越来越多的需要可重用,可扩展的UI工具。Twitter Bootstrap(Twitter Bootstrap)是该领域最好的产品,提供了一系列强大的模式和组件,帮助开发者创建有艺术感的响应式和自适应的应用。

我们认为鼓舞下一代技术者们非常重要。Scratch,Alice和Kodu(Scratch,Alice,and Kodu)是一些依赖视觉环境和教育设备模块的编程语言。他们为培养在学术环境外的普及编程知识的教育项目和组织提供更多可能性。

作为编程语言领域一个不可能的竞争者,Lua(Lua)在不同的行业中都得到了广泛的采用。在游戏开发和音乐创作中作为脚本平台;在销售点设备和网络设备中嵌入;在有安全执行语义的扩展NoSQL数据库中使用。我们期待将来会有更多的应用。

作为在客户端和服务器端处理应用中增加的复杂度的一种方式,微框架正新兴起来。Sinatra(Sinatra)是服务器端这一领域的先驱,通过轻量级的DSL来快速构建服务。Flask, Scalatra和Compojure是和Python,Scala和Clojure对应的一些类似产品。

Dropwizard(Dropwizard)是一些轻量级Java工具和框架的组合,这些工具和框架大多值得推荐。这个组合体现了许多我们喜爱的技术,包括嵌入的HTTP服务器,支持RESTful端点,内建的运营指标和健康检查,以及直接部署。Dropwizard使做正确的事更容易,允许你关注问题关键的复杂部分而不是其他的支持部分。

Gremlin(Gremlin)是急需的一种由多种图形数据库支持的图形遍历语言。其简洁的结构可以在数据库的原生语言中被应用,可以更快的开发,有些情况下,更快的运行。我们推荐它作为简单场景的一个选择。

Jekyll(Jekyll)代表了网站发布领域的框架的“微观化”。当关注点只有一个,博客网站尽可能透明,并且指向一个更轻量级的未来。一个我们喜欢的例子就是现在发布软件项目有用的文档更加轻松了。

作为Ruby编译器以及iOS应用开发的工具,RubyMotion(RubyMotion)在ThoughtWorks开发社区中不出意外地引起了不小的轰动。开发应用时理解底层的iOS APIs和一些Objective-C的需求依然存在,但RubyMotion对于更习惯于Ruby语言和工具的人来说还是很有帮助。

有一种趋势认为离线功能的需求和开发一个应用的需求等同。尽管标准化流程缓慢,大部分HMTL5的功能已经在主流浏览器上被应用。本地存储能力,跨手机和平板浏览器支持能力,这些使得使用HMTL5开发离线应用(HTML5 for offline applications)一个非常合适的选择。

我们看到创建单页面网站应用的一个通用模式。不再需要整个页面刷新,只需要服务器端很小的一部分数据集,通过修改DOM来改变页面内容的展示。为了使这些更易管理,JavaScript MV*框架用来支持数据绑定,客户端模板以及验证。轻量级应用可能不需要一个框架,对于更复杂的场景,AngularJS和Knockout(AngularJS and Knockout)可以看做该领域的领跑者。

Backbone.js(Backbone.js)是一个抽象较弱的例子。我们喜欢开始很容易的搭建,但实际上它和所有从WebForms到客户端/服务端工具的数据绑定框架有同样的问题。我们发现它让框架和模型太过模糊,从而容易造成要么产生出不佳的架构设计,要么只能通过精妙的框架修改来保持概念的完整性。

随着整个行业从桌面GUI开发转向web, 将大多数成功的模式和设计移植到新的范例中看起来很自然。在15年的尝试后,我们感觉仍然没有基于组件的框架(component-based frameworks)成功地实现。我们推荐不要试图在本质不同的东西上做网站开发。现在是接受网站的网页和基于请求的本质的时候了,关注支持的架构而不是和这些概念斗争。

ThoughtWorks技术雷达(2012年10月)相关推荐

  1. 什么是ThoughtWorks技术雷达?

    今年3月,小灰有幸在深圳见到了一位IT行业的世界级大神,这位大神就是 Martin Fowler,<重构>的作者,敏捷开发的创始人之一. 那一次,正赶上ThoughtWorks技术雷达10 ...

  2. ThoughtWorks技术雷达专区

    作为一家服务于全球不同类型的IT专业服务公司,ThoughtWorks从未停止过对卓越技术的追求,为此,ThoughtWorks的全球技术委员会(TAB)会定期讨论技术战略,并将其绘制成一份能够体现技 ...

  3. 2012年10月27日沈阳WebLogicFans论坛User Group线下活动

    沈阳User Group成立活动WebLogicFans论坛沈阳线下活动 值此金秋十月,在WebLogicFans论坛的支持下,东北地区终于有了第一个属于甲骨文用户和技术爱好者自己的技术社区-沈阳 U ...

  4. 如何面对黑天鹅与灰犀牛?ThoughtWorks技术雷达峰会给出答案

    技术始终在变化,观点永远不会短缺,因而,对于趋势的判断至关重要.ThoughtWorks技术雷达正是这样一份关注前沿技术性变化的报告:对当前软件开发中发人深省的改变进行解读,并指出可应用于项目中的新兴 ...

  5. 2012年10月 《SHA-3花落Keccak》

    SHA-3花落Keccak --2012年10月安全天下事 江海客 2012年10月3日,美国国家标准与技术研究院(NIST)宣布新一代hash算法SHA-3的漫长遴选已经产生结果,经过4年的时间,K ...

  6. 在2012年10月31号这一天,2345浏览器的V2.2版本,大跳着出来了!

    系列文章目录 第十章:在2012年10月31号这一天,2345浏览器的V2.2版本,大跳着出来了! 文章目录 系列文章目录 前言 2012-10-31 V2.2版 新增功能 新增改进 BUG修复 总结 ...

  7. 2012年10月当选微软MVP的CSDN会员名单揭晓

    微软公司于2001年8月起开始在亚洲与各大主要的第三方网站上的微软技术相关论坛合作,微软称之为"亚洲社区支持"计划. 为了鼓励大家在论坛中更好地互相帮助,共同提高,微软在全亚洲的微 ...

  8. 还款每个月90.85元, 到 2012年10月,2012 11月 2256元,共 5799.25元

    还款每个月90.85元, 到 2012年10月,2012 11月 2256元,共 5799.25元

  9. JAVA月数输入24回车后变成12_Java语言程序设计(一)自考2012年10月真题

    Java语言程序设计(一)自考2012年10月真题及答案解析 本试卷为单选题型,填空题,程序填空题,程序分析题,程序设计等题型. 一.单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的,请将 ...

  10. abcdefg顺序Java打印,全国2012年10月自考JAVA语言程序设计(一)试题及答案

    全国2012年10月自考Java语言程序设计(一)试题 课程代码:04747 选择题部分 一.单项选择题(本大题共10小题,每小题1分,共10分) 在每小题列出的四个备选项中只有一个是符合题目要求的, ...

最新文章

  1. C# ref和out关键字
  2. 「AI大咖」ML宗师乔教主,全世界最有影响力的计算机科学家
  3. 简单电商购物过程(续1)
  4. Python入门100题 | 第061题
  5. 就业模拟试题_Net
  6. Cow Contest——Floyed+连通性判断
  7. 第四届福建省大学生程序设计竞赛
  8. pop 在列表中和字典中的区别
  9. 【计算机基础】五笔字根分解图
  10. BlenderProc安装bop_toolkit问题
  11. 如何选一款软件助力企业腾飞
  12. zedboard u-boot编译的心路历程
  13. 明日之后、“吃鸡”为何成为爆款手游?我们帮你分析了10000条快手广告
  14. MySQL发号问题的分析和改进
  15. 无涯教程 - Latex 字体(Fonts)
  16. 数据库输出带字段注释的查询
  17. 九、用场效应管设计与门
  18. 国内首届中文人机对话技术评测赛果出炉,两项任务冠军团队都分享了哪些技术细节?...
  19. 计算机文化基础(高职高专版 第十一版)第八章答案
  20. 虚幻4学习笔记(10)蓝图接口、拾取物品-射线检测

热门文章

  1. Airflow搭建与使用
  2. c++ 内存池的实现
  3. WPS文字技巧—如何快速的为中英文混合文字内容排版
  4. [4G5G专题-69]:物理层 - 4G LTE物理上行共享信道PUSCH与物理下行共享信道PDSCH与辅助信息块SIB
  5. tp3 跨域_tp6 通过全局中间件 解决跨域问题
  6. Pytorch_hook机制的理解及利用register_forward_hook(hook)中间层输出
  7. 推荐15款创建漂亮幻灯片的 jQuery 插件
  8. “__DEV__“ 探究
  9. 施金源:6.19下周黄金价格走势预测?及下周黄金操作建议
  10. VUE实现echarts(悲惨世界人物关系图示例)