• [技术干货] JAVA的反射类讲解
        大家都知道,反射的功能是非常强大的,但是只有在做框架的时候才会用到,在平常编程过程中一般是用不到的,不过了解还是很有必要的。详情请点击博文链接:https://bbs.huaweicloud.com/blogs/170801
  • [技术干货] 设计模式[JS版]-JavaScript设计模式之原型模式如何实现???
    1.什么是原型模式原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式不单是一种设计模式,也被称为一种编程泛型。 从设计模式的角度讲,原型模式是用于创建对象的一种模式。我们不再关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样的对象。在其他语言很少使用原型模式,但是JavaScript作为原型语言,在构造新对象及其原型时会使用该模式。2 参与者原型模式的主要参与者有:客户端( Client) : 通过要求一个原型克隆自己来创建一个新的对象。原型( Prototype) :创建一个接口来克隆自己克隆( Clones ) :正在创建的克隆对象3 实例讲解在示例代码中,我们有一个CustomerPrototype对象,它可以克隆给定原型对象(Customer)。它的构造函数接受一个Customer类型的原型,然后调用克隆方法生成一个新的Customer对象,其对象属性值使用原型对象的值进行初始化。这是原型模式的经典实现,但JavaScript可以使用其内置的原型更有效地实现这一功能,后边我们将会修改这一代码。<!DOCTYPE html><html><head><meta charset="utf-8"><title>JS原型模式:公众号AlbertYang</title></head><body></body><script>//客户原型类function CustomerPrototype(proto) {this.proto = proto; this.clone = function() {var customer = new Customer(); customer.name = proto.name;customer.age = proto.age; return customer;};}//客户类function Customer(name, age) { this.name = name;this.age = age; this.say = function() {console.info("%c%s", "color:red;font-size:18px", "姓名: " + this.name + ", 年龄: " + this.age);};} function run() { var proto = new Customer("张三", 18);var prototype = new CustomerPrototype(proto); var customer = prototype.clone();customer.say();} run();</script></html>4 使用 Object.create实现原型模式在现有的文献里查看原型模式的定义,没有针对JavaScript的,你可能发现很多讲解的都是关于类的,但是现实情况是基于原型继承的JavaScript完全避免了类(class)的概念。我们只是简单从现有的对象进行拷贝来创建对象。在新版的ECMAScript5标准中提出,使用Object.create方法来创建指定的对象,其对象的prototype有指定的对象(也就是该方法传进的第一个参数对象),也可以包含其他可选的指定属性。例如Object.create(prototype, optionalDescriptorObjects)。4.1 Object.create()的用法Object.create()方法用于创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。语法:Object.create(proto[, propertiesObject])参数:proto新创建对象的原型对象。propertiesObject可选。如果没有指定为 undefined,则是要添加到新创建对象的不可枚举(默认)属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。返回值:一个新对象,带着指定的原型对象和属性。4.2 用 Object.create实现继承下面的例子演示了如何使用Object.create()来实现类式继承。这是所有JavaScript版本都支持的单继承。4.2.1 单继承<!DOCTYPE html><html><head><meta charset="utf-8"><title>JS原型模式:公众号AlbertYang</title></head><body></body><script>// 父类function Shape() {this.x = 0;this.y = 0;} // 父类的方法Shape.prototype.move = function(x, y) {this.x += x;this.y += y;console.info('Shape moved.');}; // 子类function Rectangle() {Shape.call(this); // call方法用来调用父类Shape的构造函数} // 子类继承父类Rectangle.prototype = Object.create(Shape.prototype);//重新指定构造函数Rectangle.prototype.constructor = Rectangle;        console.log(Rectangle);var rect = new Rectangle();        console.log(rect);console.log('rect是Rectangle的实例吗?',rect instanceof Rectangle); // trueconsole.log('rect是Shape的实例吗?',rect instanceof Shape); // truerect.move(1, 1); // 输出, 'Shape moved.'</script></html>4.2.2 多继承 如果你希望能继承到多个对象,则可以使用混入的方式。function MyClass() {SuperClass.call(this);OtherSuperClass.call(this);} // 继承一个类MyClass.prototype = Object.create(SuperClass.prototype);// 混合其它类Object.assign(MyClass.prototype, OtherSuperClass.prototype);// 重新指定constructorMyClass.prototype.constructor = MyClass; MyClass.prototype.myMethod = function() {// 。。。。。 };Object.assign 会把 OtherSuperClass原型上的函数拷贝到 MyClass原型上,使 MyClass 的所有实例都可以使用 OtherSuperClass 的方法。Object.assign 是在 ES2015 引入的,且可用 polyfilled。要支持旧浏览器的话,可用使用 jQuery.extend() 或者 _.assign()。 4.3 propertyObject参数<script>var o; // 创建一个原型为null的空对象o = Object.create(null); o = {};// 上面的一句就相当于:o = Object.create(Object.prototype); o = Object.create(Object.prototype, {// foo会成为所创建对象的数据属性foo: {writable: true,configurable: true,value: "hello"},// bar会成为所创建对象的访问器属性bar: {configurable: false,get: function() {return 10},set: function(value) {console.log("Setting `o.bar` to", value);}}});  function Constructor() {}o = new Constructor();// 上面的一句就相当于:o = Object.create(Constructor.prototype);// 如果在Constructor函数中有一些初始化代码,Object.create不能执行那些代码  // 创建一个以另一个空对象为原型,且拥有一个属性p的对象o = Object.create({}, {p: {value: 42}}) // 省略了的属性特性默认为false,所以属性p是不可写,不可枚举,不可配置的:o.p = 24console.log(o.p) //42 o.q = 12for (var prop in o) {console.log(prop); //q} delete o.p //false//创建一个可写的,可枚举的,可配置的属性po2 = Object.create({}, {p: {value: 42,writable: true,enumerable: true,configurable: true}});</script>4.4 PolyfillPolyfill 是一块代码(通常是 Web 上的 JavaScript),用来为旧浏览器提供它没有原生支持的较新的功能。比如说 polyfill 可以让 IE7 使用 Silverlight 插件来模拟 HTML Canvas 元素的功能,或模拟 CSS 实现 rem 单位的支持,或或 text-shadow,或其他任何你想要的功能。下边这个 polyfill 涵盖了Object.create主要的应用场景,它创建一个已经选择了原型的新对象,但没有把第二个参数考虑在内。尽管在 ES5 中 Object.create支持设置为[[Prototype]]为null,但因为JS以前一些老版本的限制,此 polyfill 无法支持该特性。if (typeof Object.create !== "function") {    Object.create = function (proto, propertiesObject) {        if (typeof proto !== 'object' && typeof proto !== 'function') {            throw new TypeError('Object prototype may only be an Object: ' + proto);        } else if (proto === null) {            throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.");        }         if (typeof propertiesObject !== 'undefined') throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument.");         function F() {}        F.prototype = proto;         return new F();    };}4.5 改写原型模式实现<!DOCTYPE html><html><head><meta charset="utf-8"><title>JS原型模式:公众号AlbertYang</title></head><body></body><script>// 因为不是构造函数(类),所以不用大写var customer = {    name:'',age:'',say: function() {console.info("%c%s", "color:red;font-size:18px", "姓名: " + this.name + ", 年龄: " + this.age);}};function run() {            // 使用Object.create创建一个新客户var myCustomer = Object.create(customer);myCustomer.name = '张三';myCustomer.age = '18';myCustomer.say();} run();</script></html>5 总结原型模式在JavaScript里的使用简直是无处不在,其它很多模式有很多也是基于prototype的,大家使用的时候要注意浅拷贝和深拷贝的问题,免得出现引用问题。
  • [技术干货] 【转载】设计模式[JS版]-JavaScript如何实现抽象工厂模式?
    1 学习目标通过本篇文章的学习,你应当掌握以下知识:1 知道什么是抽象工厂模式?2 掌握抽象工厂模式的作用以及什么时候需要使用抽象工厂模式3 掌握使用JS实现抽象工厂模式的代码编写。2 什么是抽象工厂模式?抽象工厂模式提供了一种封装一组具有相同主题的单个工厂而无需指定其具体类的方法。即工厂的工厂;一个将单个但相关/从属工厂分组在一起的工厂,但未指定其具体类别。一个抽象工厂创建了由一个共同主题相关的对象。在面向对象的编程中,工厂是一个创建其他对象的对象。一个抽象工厂已经抽象出了一个主题,这个主题被新创建的对象所共享。你可能会奇怪为什么要把构造对象的责任交给别人,而不是直接用new关键字调用构造函数。原因是,构造函数对整个创建过程的控制是有限的,有时你需要把控制权交给一个拥有更广泛知识的工厂。这包括创建过程中涉及对象缓存、对象共享或重用、复杂逻辑、或维护对象和类型计数的应用程序、以及与不同资源或设备交互的对象等场景。如果您的应用程序需要对对象创建过程进行更多控制,请考虑使用抽象工厂模式。3 抽象工厂模式作用当存在相互关联的依赖关系且涉及非简单创建逻辑时,建议使用抽象工厂模式。通常在以下情况下考虑使用抽象工厂模式:一个系统应该独立于其产品的创建,组成和表示方式系统应配置有多个产品系列之一一个相关产品对象系列旨在一起使用,因此您需要强制执行此约束您想要提供产品的类库,并且只想显示它们的接口,而不是它们的实现从概念上讲,依赖项的生存期短于消费者的生存期。您需要一个运行时值来构建特定的依赖关系您想决定在运行时从系列中调用哪种产品。您需要提供一个或多个仅在运行时才知道的参数,然后才能解决依赖关系。当您需要产品之间的一致性时在将新产品或产品系列添加到程序时,您不想更改现有代码。4 工厂模式参与者抽象工厂模式参与者主要有:AbstractFactory: 1 声明产品的接口 2 在JavaScript中不使用ConcreteFactory:1 工厂对象2 create()方法返回新产品产品 :1 工厂创建的产品实例AbstractProduct:1 在JavaScript中没有使用2 声明要创建的产品的接口5 代码实现因为JavaScript不支持基于类的继承,因此,在下面的JavaScript代码中未使用图中所示的抽象类。抽象类和接口在派生类中的作用是强制使用一致的接口。因此在JavaScript中,我们必须确保每个“ Concrete”对象与其他对象具有相同的接口定义(即属性和方法),以确保自身的一致性。在下面的代码示例中,我们创建了两个具体的工厂:EmployeeFactory和VendorFactory。EmployeeFactory用于创建Employee的实例,VendorFactory用于创建Vendor的实例。两种产品都可以看做是人员类型(具有相同的接口),所以客户可以将它们看做是相同。在run函数中,我们通过不同的工厂创建了两个员工和两个供应商,它们存储在同一个数组中。每个员工或供应商都要说出他们的名字和类型。日志函数用来收集和显示结果。<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>JS抽象工厂模式:微信公众号AlbertYang</title> </head> <body> </body> <script> //员工类 function Employee(name) { this.name = name; this.say = function() { log.add("我是员工:" + name); }; } //员工工厂 function EmployeeFactory() { this.create = function(name) { return new Employee(name); }; } //供应商类 function Vendor(name) { this.name = name; this.say = function() { log.add("我是供应商:" + name); }; } //供应商工厂 function VendorFactory() { this.create = function(name) { return new Vendor(name); }; } // 日志函数 var log = (function() { var log = ""; return { add: function(msg) { log += msg + "\n"; }, show: function() { console.info("%c%s", "color: red; background: #b4b3b3; font-size: 20px", log); log = ""; } } })(); function run() { var persons = []; var employeeFactory = new EmployeeFactory(); var vendorFactory = new VendorFactory(); persons.push(employeeFactory.create("张三")); persons.push(employeeFactory.create("李四")); persons.push(vendorFactory.create("王麻子")); persons.push(vendorFactory.create("赵六")); for (var i = 0, len = persons.length; i < len; i++) { persons.say(); } log.show(); } run(); </script></html>
  • [技术干货] 【转载】Python, C++和Java代码互翻,Facebook开发首个自监督神经编译器
    译者 | 刘畅来源 | AI科技大本营(ID:rgznai100) 将早期的编程语言(例如COBOL)的代码库迁移到现在的编程语言(例如Java或C++)是一项艰巨的任务,它需要源语言和目标语言方面的专业知识。COBOL如今仍在全球大型的系统中广泛使用,因此公司,政府和其他组织通常必须选择是手动翻译其代码库还是尽力维护使用这个可追溯到1950年代的程序代码。 FaceBook公司开发了一个工具TransCoder,这是一个完全自我监督的神经编译器系统,它可以使代码迁移变得更加轻松和高效。本文的方法是第一个能够将代码从一种编程语言转换为另一种编程语言而无需并行数据进行训练的AI系统。本文已经证明TransCoder可以成功地在C++,Java和Python 3之间进行翻译功能。TransCoder的性能优于开源的代码和基于商业规则的翻译程序。在本文的评估中,该模型正确地将90%以上的Java函数转换为C++,将74.8%的C++函数转换为Java,并将68.7%的函数从Java转换为Python。相比之下,市售工具只能正确地将61.0%的功能从C++转换为Java,而开源的翻译器仅能准确地将38.3%的Java函数转换为C++。 自我监督训练对于在编程语言之间进行翻译特别重要。传统的有监督学习方法依赖于大规模的并行数据集进行训练,但是对于COBOL到C++或C++到Python来说,这些数据根本不存在。TransCoder只依赖于仅用一种编程语言编写的源代码,而不需要源代码和目标语言中的相同代码示例。它不需要编程语言方面的专业知识,并且可以很容易地将TransCoder的方法推广到其他编程语言中。本文还创建了专门为此领域设计的新的评估指标。 TransCoder对于将遗留代码库更新为现代编程语言可能很有用,现代编程语言通常更高效且易于维护。它还展示了一个神经机器翻译技术应用的新领域。与Facebook AI以前使用神经网络解决高级数学方程式的工作一样,本文认为NMT可以帮助完成通常与翻译或模式识别任务无关的其他任务。特意为编程语言建立序列到序列模型 在自然语言中,即使在越来越依赖自动化机器翻译系统的专业翻译人员群体中,神经机器翻译的最新结果也被广泛认可。但是,由于代码翻译领域中缺少并行数据,因此它们在该方面的应用受到了限制。程序员仍然依赖于基于规则的代码转换工具,这需要专家复查和调试输出,或者手动翻译代码。TransCoder通过利用无监督机器翻译到编程语言翻译取得的成功来克服这些挑战。 本文构建了一个带有注意力机制的序列到序列(seq2seq)模型,该模型由具有转换结构的编码器和解码器组成。TransCoder使用单个共享模型,部分基于Facebook AI以前在XLM上针对所有编程语言所做的工作。本文按照Facebook AI先前的研究中详细介绍的无监督机器翻译的三个原则进行了训练:初始化,语言建模和反向翻译。本文首先利用开源GitHub项目中的源代码使用蒙版语言模型(MLM)对本文的模型进行了预训练。就像自然语言处理中的上下文一样,这种预训练会创建跨语言的嵌入:在相似上下文中使用来自不同编程语言的关键字在嵌入空间(例如catch和except)中非常接近。这些嵌入的跨语言性质来自存在于多种语言中的大量通用的标记(锚点)。锚点的示例包括C++,Java和Python通用的关键字(例如,for,while,if,try),以及源代码中出现的数学运算符,数字和英语字符串。 使用MLM进行预训练使TransCoder可以生成输入序列的高质量表示。然而,由于从未训练过解码器基于源表示对序列进行解码,因此解码器缺乏翻译能力。为了解决此问题,本文训练了该模型使用降噪自动编码(DAE)对序列进行编码和解码。DAE的工作方式类似于有监督的机器翻译算法,在该算法中,模型被训练为在给定序列存在损坏的情况下预测该序列。作为输入给解码器的第一个符号是指示输出编程语言的特殊标记。在测试时,该模型可以对Python序列进行编码,并使用C++起始符号对其进行解码以生成C++翻译器。C++翻译的质量将取决于模型的“跨语言”:如果编码器将Python函数和有效的C++翻译映射到相同的潜在表示,则解码器将成功翻译成C++。 仅预训练的跨语言模型和自动降噪就足以进行翻译。但是,这些翻译的质量往往很低,因为从未训练过该模型在测试时应该完成什么样的工作,即从一种语言翻译为另一种语言的功能。为了解决此问题,本文使用反向翻译,这是在弱监督的情况下利用单语数据的最有效方法之一。对于每种目标语言,本文使用一个模型和一个不同的开始标记。它经过训练可以从源到目标以及从目标到源并行转换。目标到源版本用于将目标序列翻译成源语言,从而产生与标记目标(GT)序列相对应的嘈杂源序列。然后以弱监督的方式训练模型,让模型可以从嘈杂的源序列中重建目标序列,并学习从源到目标的转换。直到收敛为止。 为了评估该模型,以前对源代码翻译的大多数研究都依赖于自然语言中使用的度量标准,例如BLEU分数或其他基于标记之间相对重叠的方法。但是,这些类型的指标不太适合编程语言。语法差异小的两个程序在执行代码时可能会获得很高的BLEU分数,但会产生非常不同的结果。相反,具有不同实现方式的语义等效程序将具有较低的BLEU分数。另一种度量标准是参考匹配,或与GT完全匹配的翻译百分比,但这通常会低估翻译的质量,因为它无法识别语义上等效的代码。 为了更好地衡量TransCoder和其他代码翻译技术的性能,本文创建了一个称为计算精度的新指标,该指标可评估假设函数在给定相同输入时是否生成与参考相同的输出。我们还将发布测试集以及用于计算该指标的脚本和单元测试。下面的示例显示了TransCoder如何将示例代码从Python转换为C++。我们使用以上的代码作为模型输入:TransCoder成功将Python输入函数SumOfKsubArray转换为C++。它还可以推断参数的类型,返回类型和函数的参数。该模型将Python dequeue()容器附加到C++实现dequeue <>。下面是该模型在C++中的输出:最新研究并在实际应用中提供的帮助 自动代码翻译有可能使在公司或开源项目中工作的程序员更加高效,因为他们可以更轻松地集成公司内其他团队或其他开源项目的各种代码,还可以大大减少更新用早期语言编写的代码库的工作量和成本。 反编译的进步可能会促使公司和其他机构更新到最新的语言并促进未来的创新,这可能让使用服务的人们以及机构本身受益。编程语言机器翻译的进步也可以帮助那些没有时间学习多种语言编程的人。 更广泛地说,人工智能有潜力帮助其他编程任务。例如,Facebook AI以前共享了神经代码搜索,这是一种在查询代码中使用自然语言的方法。以及Getafix,该工具可学习自动为编码错误提供建议修复。虽然TransCoder并非旨在帮助调试或提高代码质量,但它可以帮助工程师迁移旧代码库或使用以其他语言编写的外部代码。 为了促进使用深度学习进行代码翻译的研究,本文还发布了一个测试集,该测试集使其他研究人员可以使用计算精度而不是语义盲模型来评估代码翻译模型。我们期待看到其他人如何在我们与TransCoder的合作基础上继续前进,并为新的翻译任务推进自我监督学习。转载自:CSDN论坛
  • 【求助】看到JAVASDK不支持批量下载上传
    请问怎样通过内网将OBS上面的文件下载并打包,然后再通过内网打包再上传到OBS上
  • [技术干货] 多云架构下,JAVA微服务技术选型实例解析
    【摘要】 本文介绍了基于开源自建和适配云厂商开发框架两种构建多云架构的思路,以及这些思路的优缺点。微服务生态微服务生态本质上是一种微服务架构模式的实现,包括微服务开发SDK,以及微服务基础设施。目前比较成熟的 JAVA 微服务生态包括 servicecomb(华为), spring-cloud (Pivotal), dubbo(阿里), tsf(腾讯)等。gRPC、Thrift 等也用于内部服务之间的通信,但是微服务基础设施比较欠缺。核心的微服务基础设施包括:注册中心、配置中心、应用网关。此外,分布式事物管理、计划任务、调用链跟踪系统等也是微服务基础设施的组成部分。完整的微服务基础实施还包括开发使能工具,包括接口管理工具、灰度发布管理、代码生成等,这部分主要由云厂商提供,比较少开源方案。微服务生态的核心是 SDK,而 SDK 的核心是 RPC 框架,这个是不同微服务生态的本质区别。在基础设施方面,不同的微服务生态是可以相互选择的,比如 spring-cloud 生态可以采用 spring-cloud-huawei 接入servicecomb 提供的注册中心 servicecomb-service-center、配置中心 servicecomb-kie,也可以通过 spring-cloud-alibaba 接入阿里的配置中心;servicecomb 也可以通过引入扩展,使用其他的配置中心。一些基础的开发组件,比如 spring、spring boot,这些微服务开发 SDK 都支持集成。对微服务生态进行比较是一个很难的课题。下面的表格仅对一些核心功能进行比较。使能工具、核心基础设施、可选基础设施等方面,不同的微服务生态是可以相互使用的,这里的比较只针对该生态原生提供的来说,并不代表某个微服务生态缺少这块功能,该生态的开发者用不了这方面的能力。对于开源生态应该采用一个大生态的眼光来看待,每个生态的设计者也会尽可能融入其他生态,继承和复用其他生态的能力。但是在商业选型上,需要考虑技术支持等因素。对微服务生态的比较的另外一个视角就是如何构建微服务应用架构。 一般的微服务应用架构会包括应用网关、业务微服务和静态页面。静态页面的部署相对比较灵活,可以放到应用网关内部,也可以放到应用网关,还可以放到应用网关外面。其中放到网关里面的方式最灵活,比如可以通过配置网关的负载均衡策略,将请求转发到用户最近的region,也可以对部分静态页面进行访问控制。增加应用网关可以增强应用系统的弹性,能够支撑系统的持续演进(参考分析文章),同时可以结合网络基础设施,更好的实现应用系统的能力开放。比如如果接入层使用 API Gateway 挂载,可以很好的实现内部系统的能力开放和计费;使用LVS接入,只可以提高转发性能,比较适合访问量大的应用,接入网关逻辑少,应用网关可以弹性扩容;使用DNS则对于网站很有用,屏蔽用户访问的地址差异,并且可以使用DNS将请求转发到不同区域的应用网关。Servicecomb, spring-cloud 都能够很好的支持这种架构,而 dubbo 对这种架构支持的不是很好,很多 dubbo 开发者都是通过在业务服务之外增加一个接入层,使用 spring-cloud 的应用网关来搭建这个应用架构。多云微服务架构的两种方案采用开源微服务框架很多业务系统的构建,都是从选择一个开源方案开始。 一般会首先选择一个微服务开发 SDK, 然后选择其他的微服务基础设施。 对于自主研发的情况,微服务基础设施也会选择开源方案。 比如选择 ServiceComb 微服务开发 SDK 的场景,可以通过在不同的云上部署开源服务,来实现一套系统,多个云上运行。 云厂商如果存在微服务基础设施的商业版本, 可以在云上购买使用, 使用云产商提供的基础设施服务,通常可以降低自己运维的成本,并能够得到更好的性能优化和可靠性支持。另外一个开源解决方案是部分集成云产商提供的组件,尽可能多的使用云产商的基础设施。 比如选择 Spring Cloud 微服务解决方案, 可以使用 spring-cloud-huawei, spring-cloud-alibaba 等云产商提供的扩展,使用云上的基础设施。下面对开源解决方案的评估点做一个总结:1. 只需要维护一套代码和熟悉一个开发框架,多云运行。不同云的运行体验存在差异,可以部分使用云厂商的中间件。 如果其他云没有对应的中间件,需要自行安装和维护中间件。2. 微服务框架选型之前,需要考虑“基础设施”是否也开源。比如微服务基础设施最重要的中间件“配置中心”、“注册中心”和“应用网关”。开源可获得性是一套代码,多云运行的前提。适配多供应商开发框架每个云产商都存在一个主打的微服务开发框架, 使用主打微服务开发框架能够最好使用云产商提供的微服务基础设施。 为了在不同的云上, 获得最佳的微服务管理能力,需要尽可能使用对应云的主打框架。 但是维护多套代码是困难的。 适配多供应商的开发框架, 需要对核心业务做好分离,避免重复开发,然后将适配层做薄,只实现简单适配,降低开发难度。 大部分 JAVA 微服务开发框架都支持 Spring, 因此可以采用下面的设计模式,实现一套核心代码,编译成多个云产商开发框架的可执行程序的多云版本。上图是一个微服务的内部结构,一个微服务可能包含如下几个目录:* application-core* application-runtime-servicecomb* application-runtime-hsf下面对适配多供应商开发框架方案的评估点做一个总结:1. 需要做好业务抽象,并熟悉多个开源微服务开发框架,相对于开源自建方案维护成本高。2. 不需要考虑自行安装和维护基础中间件的问题,云厂商自己的微服务框架,一般针对这个框架提供了各种中间件支持,使用和接入开发成本低。3. 这种方案是优秀代码架构设计。在开源方案中,也建议做好核心业务逻辑分离和接口抽象,每个方案适配不同云厂商非微服务基础设施(比如数据库、对象存储、EI等功能)也都是需要的。转载自:华为云开发者论坛
  • [热门活动] 没错,华为云又对前端下手了!
    面对IT行业快速革新的理论与技术攻城狮朋友们需要把大量时间用于技术的学习与应用长期面对冰冷代码的攻城狮不禁要问新理论要哪里学习新技术该怎么应用可以一起成长的小伙伴在哪里针对以上问题,华为特别推出【WEB前端全栈成长计划】不玩虚的不挖坑,只为帮你解决实际问题3个月,限时全程免费参与为你构建前端全栈技能体系基础班课程已全部更新进阶班JavaScript & Ajax的深度内容正在招募,限时免费报名~                                                                                                                                             01.什么是【WEB前端全栈成长计划】0费用,3个月为你构建前端全栈技能体系,HTML/JavaScript/Node.js等web前端课程全覆盖,用华为经验帮助大家快速提升前端技能,快速向全栈工程师迈进!◎适合人群:阶段一适合:0基础想要进阶的开发者(学生/0基础开发者皆可)阶段二/三适合:想要全面完善前端技术框架,学习华为开发技术的开发者。02.课程安排时间表◎L1:前端基础入门(06/08-07/12)课程已更新完毕,报名“课程”“阶段一”可参与◎L2:迈入脚本及框架开发(07/13-08/16)javascript&ajax课程,报名见下方◎L3:全栈化进阶(08/17-09/20)待开启◎考试进阶:练习考核认证(1周)03.第二阶段课程报名全栈成长计划已经开课本公众号用户限时免费参与名额先到先得,招满即停识别下方二维码马上报名本阶段为web前端全栈新开始,如有参加过一阶段的同学需再重新报名才可获得免费学习的机会,报名课程即送300码豆,先到先得!04.活动奖品及奖励报名参与课程打卡积分活动,得到积分越高,最后累计的奖品级别越高,幸运抽奖和分享有礼等着大家!实物奖品百万码豆05.注意事项◎温馨小提示:根据自己能力报名不同阶段课程,参与每阶段考核后都会有阶段证书!◎温馨小提示:根据自己能力报名不同阶段课程,参与每阶段考核后都会有阶段证书!◎参加过一阶段学习的同学需重新报名,已在一阶段学习群的伙伴不需要再次添加新群,信息同步更新。◎一二阶段课程均可学,请详细阅读报名页面,其他要求详见各活动帖细则。另外华为JAVA全栈成长计划即将开课,想要学习JAVA课程的同学不要错过点击左下角“阅读原文”报名java课程
  • [热门活动] JAVA面试技巧,7月23日19:00-20:30免费直播,中奖名单公布~
    《JAVA面试技巧》来了,鲍老师带你跳开JAVA面试的坑,顺利通过面试直播时间:7月23日19:00-20:30直播地址: https://huawei.vhallyun.com/fe/watch/4664讲师:鲍老师-华为高级培训专家 十二年IT行业、教育行业工作经验,擅长Java后端开发,技术栈涉及Python/PHP/Android/IOS、爬虫、大数据、图像识别、机器学习等;业务领域涉及造船、汽车销售、政务、航空、电商、多品类分销等。在多个项目中任职项目经理,主要负责人。工作及研究领域涉及需求调研、项目管理、软件开发、测试、交付、运维等。期间为企业员工的软件开发、项目管理等方面能力提升提供专业的指导。 收看直播,和讲师互动即有机会获得JAVA学习助力礼品,经典JAVA书籍或芒果TV月卡。     想学习更多求职入职相关课程,快来学习毕业季-暑期成长计划课程,现在加入活动还有机会赢取5G手机哦!获奖名单:芒果TV月卡: hw10996515JAVA编程思想(第四版):HW-QGS深入理解Java虚拟机:kkwl_a12448
  • [技术干货] 【转载】从C、C++、Java到Python,编程入门到底学什么语言好?
    【转载华为云社区】最近,TIOBE更新了7月的编程语言榜单,常年霸榜的C、Java和Python依然蝉联前三位。万万没想到的是,R语言居然冲到了第八位,创下了史上最佳记录。而且后续随着业内对数据统计和挖掘需求的上涨,R语言热度颇有些势不可挡的架势然而作为程序员吃饭的工具,编程语言之间也形成了某种鄙视链,各大论坛里弥漫着剑拔弩张的气氛,众口难调。也难怪有很多初学者会有疑惑,为什么会有这么多编程语言,我到底应该学什么语言?回顾编程语言几十年来的兴衰起伏,似乎也折射了整个信息产业的变迁消亡,想要在技术的洪流里激流勇进,找准并学精一两门编程语言更加显得至关重要。编程语言的黄金时代“有人不喜欢花括号,开发了Python;有人在一个周末设计了出了JavaScript;有人因为上班太无聊,于是发明了C语言”。关于编程语言的八卦轶事很多,但归根结底,一个编程语言的诞生一定是需求的推动。从面向机器的语言、面向过程的语言到面向对象的语言,编程语言的历史也经历了由繁到简。而互联网崛起的90年代,无疑也是编程语言的黄金时代。套用维基百科的总结,“1990年代未见到有什么重大的创新,大多都是以前构想的重组或变化。”但就是这样的一个时代,却是各种编程语言大放异彩的开始。彼时最主流的编程语言是贝尔实验室两位大佬发明的C/C++语言,互联网的载体计算机的基础设施,都是用这套语言来编写的,包括Linux操作系统、数据库、编译器等等。这也奠定了C语言在IT领域的地位,只要有计算机的存在,C/C++肯定会有它们的一席之地。但后来者居上的故事也随时在发生,这里的主角是已经落幕的昔日巨头网景和Sun。1994年,网景发布了一款真正的网络浏览器Navigator,但受限于当时的技术限制,Navigator更像是一个本地展示页面,不具备任何交互功能。巧的是,Sun公司在1995年正式向市场推出他们开发的Java(即Oak语言),特点是“一次编写,到处运行”,网景看中了这个潜力股,选择与Sun结盟。当时的Java可以作为脚本嵌入到网页中实现交互功能,即我们所熟知的Java Applet。然而,网景认为Java作为网页脚本还是过于复杂,程序员Brendan Eich就在10天内,集百家之长,开发了Javascript,如今所有浏览器前端库都需要基于JavaScript实现。计算机的普及、互联网的崛起,Web应用的出现,Ruby、PHP等语言也悉数登场。如知乎作者“强哥学堂”述,“这段时间,虽然没有创造编程语言,但是由于大量企业的参与,编程语言得到了空前的发展,形成了今天的编程语言的基本形态。也使得软件开发越来越标准化,规模化。”与此同时,还有一些“小众”的编程语言,正蓄势待发中,等待着“爆红”的机会。苹果的搅局,生态很关键2010年iPhone 4问世,乔布斯用智能手机改写了之后的互联网发展轨迹。iOS和Android支撑起的智能手机市场,让移动互联网成为绝对的舞台主角。苹果开创了一个全新的生态,作为iOS的应用开发语言,始于1984年的Objective-C从籍籍无名走向声名大噪,依托各种iPhone、iPad应用程序的开发,Objective-C曾一度挺进TIOBE排行榜的Top 3。不过,苹果在2014年的WWDC上推出了新的编程语言Swift,支持编写macOS/OS X、iOS、iPadOS、watchOS和tvOS的软件应用,并在第二年宣布开源、支持Linux。自此之后,Objective-C的市场份额逐年递减,从2014年的12%下降到2016年的1%。从下图也可以看出,新语言Swift从0开始,这几年一直处于稳定增长中,今年1月也冲进了TIOBE榜单的第九位。虽然一门计算机语言从编译器、语法、基础库到在程序员的圈子中普及,并不是短时间可以一蹴而成,但苹果仍然以一己之力将Objective-C和Swift带入了编程语言的主流市场,由此可见,编程语言和一个产品的生态规模息息相关。微软和Visual Basic的关系也是如此,移动互联网时代之前,VB曾经依靠可视化的开发环境,成为最炙手可热的桌面开发工具,并一度拥有300万开发者。而且借助Windows操作系统市场优势,VB如今也一直保持着居高不下的热度(遗憾的是,微软表示不打算继续演化 Visual Basic了)。回到移动互联网时代,另一边的Android选择的是Java,随着Android阵营的越来越庞大,Java一直是TIOBE榜单上的第一,成绩最差也能拿个第二。一个编程语言的长盛不衰,除了它本身的优势之外,其生态的建设也至关重要,毕竟用的人多了,也就能自成一派,这一点在Python的流行中体现的淋漓尽致。大数据+AI时代,Python一骑绝尘当学Python要从娃娃抓起的口号开始流行时,编程语言从IT圈子进入到大众圈。大数据、AI的时代,Python可以说是一骑绝尘,从数据分析、机器学习、Web开发到爬虫开发都可以在Python的帮助下非常轻松的解决。统计分析人员可以用Python解决数据爬取和分析的问题,大学生可以用Python解决租房的问题……最关键的是,Python的学习门槛比C++,Java都要低,简洁的语法、成熟的第三方库,即使是非程序员群体,也能在短时间内速成。用于统计分析、绘图、数据挖掘的R语言也是如此,赶上了数据应用分析的潮流,自然能从众多编程语言中脱颖而出。针对今年7月榜单R语言创纪录的成绩,TIOBE的 CEO Paul Jansen 明确表示有两大趋势起着关键作用:一是商业统计语言和软件包(如 SAS、Stata 和 SPSS)的时代已经结束,大学和研究机构采用Python和R进行统计分析;二是与COVID-19相关的研究需要进行大量统计和数据挖掘,所以易于学习和使用的统计编程语言热度上升。再比如诞生于2010年,由Mozilla主导开发的Rust语言,其更加强调安全性、存储器配置、以及并发处理等特性。去年Facebook推出的区块链项目Libra,就选择了Rust语言来构建,因为它足够安全。Rust的排名也从2012年的200名开外,在最新一期TIOBE榜单上冲进了Top20。我们以互联网的崛起为分界线,可以看到各个编程语言的此消彼长,必然伴随着新的产品和技术。顺应新技术发展的编程语言,即便时隔几十年,也可以重新焕发光彩。而且随着开源社区的壮大,一门优秀的编程语言可以博采众家之长,成长为后起之秀。结语如果你想以编程语言立生,建议你先学习Java,然后是Python和C++,因为这三种编程语言,基本上可以解决我们工作中遇到的大部分问题。所以,不妨先试试华为云推出的Java开发全栈成长计划,让你0基础入门,构建Java技能体系,向全栈工程师迈进!最后,如C#之父Anders Hejlsberg曾总结:如果要我概括在未来十年编程语言会变成什么样,首先,我认为编程语言应该变得更加“声明式”,我们需要设法为语言引入一些如元编程,函数式编程的能力,同时可能也要寻找让用户有办法扩展语法,使他们可以构造领域特定语言等等。不过总体来说我想强调的是,对于编程语言,新的范式则是“多范式”编程语言。本文部分内容有参考以下文章:1、《IT行业激荡30年->编程语言变迁史》https://zhuanlan.zhihu.com/p/1068080452、《计算机和编程语言的发展历史》https://blog.csdn.net/abc6368765/article/details/83990756
  • [热门活动] 求救-java获取kafkatopic反序列化问题
    问题描述:公司最近使用使用华为kafka,通过DRS获取数据库日志文件并且使用ARVO格式序列化到kafka里的topic里,最后通过工具插入目标数据库中。问题点:现要通过java获取topic里的数据,并且反序列化ARVO格式成JSON可识别语句。目前已经获取到topic数据,但是反序列化出错,(使用的是官网给的反序列化demo和schem)kafka 消费者获取数据代码:出错代码行:报错信息:紧急求救!
  • [全栈开发者] 【已结束】JAVA开发全栈成长计划(基础班)问答官排位赛活动帖
    【JAVA开发全栈成长计划】(基础班)问答官排位赛活动帖(打卡活动已经截止啦,同学们可以参加下一场课程学习任务哦!往下拉可查看获奖名单)  活动时间:2020.07.20-2020.08.16 23:59  参与方式:用户在本帖里发布自己在学习Java技术中产生的疑惑或实践问题,其他用户可通过在楼层下评论参与回答。由专家经过评审,同一问题下确定一名最佳答案。提问者可获得5积分,被采纳的回答者可获得10积分。 (回复格式参照本帖一楼)  参与规则:1. 同一ID不可自问自答;2. 同一ID可回复其他同一ID问题数量需≤3次,如,A最多可回答B的三个问题,但A可回答B、C、D、E、F等多人次问题。3. 每个人最多可发布10个有效问题,不可重复,不可灌水。4. 每个ID回答次数不设上限,但是否被采纳要依据专家评审后的结果。   活动奖励:活动结束后,会根据排位赛积分情况,评选出前5名优秀答题官,由专家根据问题质量评选出5名优秀提问官,获取活动奖品华为云定制双肩包。 积分排行榜奖品 活动注意事项1. 学习任务提交后,小助手会在本阶段学习周期内,按序完成审核,并增加活动积分;2. 请务必按照上述要求提交内容,以免影响积分增加;3. 若积分值相同则以完成学习任务的时间先后排序,其中任务完成时间的判定优先级为:结业考核>问答官排位赛>每章函数题>每章客观题打卡4. 其他积分获取方式请查看活动社群公告。想了解更多关于全栈成长计划课程内容请移步主帖:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=63766&page=1&extra=#pid257203除了本帖任务,其他学习任务可以通过以下链接进行查看:查看函数题打卡帖:【JAVA开发全栈成长计划】基础班每章客观题打卡帖查看函数题打卡帖:【JAVA开发全栈成长计划】基础班每章函数题打卡帖问答官排位赛积分情况公示啦!排位赛是根据问答内容质量进行严格把关,由于部分回答出现网络复制粘贴、灌水、内容质量较低的情况,专家老师根据具体情况予以给分,以下为获得有效积分的排名情况:获得优秀提问官和优秀答题官称号的同学如下:恭喜以上十位同学获得华为云定制双肩包一个~请在8月30日前将“问答官排位赛+姓名+电话+地址”私信给版主:7号小助手,过期无效啦~
  • [全栈开发者] 【已结束】JAVA开发全栈成长计划(基础班)每章函数题打卡帖
    【JAVA开发全栈成长计划】(基础班)每章函数题打卡帖(打卡活动已经截止啦,同学们可以参加下一场课程学习任务哦!)(回复格式:华为云ID+截图)为了巩固大家的学习成果,紧跟学习进度请将需要完成的每章随堂测验函数题内容按要求回复到本帖下方函数题函数题函数题重要的事情强调三遍!按要求格式回复即可获得积分累计阶段奖品,还能有机会获得附加幸运奖哦~打卡时间2020.07.20-2020.08.16 23:59打卡要求在本帖中,回复对应章节的函数题并提交截图 ↓回复格式:华为云ID+课程完成截图(露出右上角华为云ID,且有效提交次数≥1)如图所示华为云ID:grandmaster 奖励方式每章节每次有效打卡可获得2积分阶段学习将以积分排行榜的形式,对前200名小伙伴进行奖励!此外还有附加奖励,每周在本周内提交随堂测验的用户中随机抽取10位幸运奖奖励华为云定制数据线 积分排行榜奖品 活动注意事项 由于本帖回复内容为随堂测试结果,已设置回帖仅版主可见1. 学习任务提交后,小助手会在本阶段学习周期内,按序完成审核,并增加活动积分;2. 本次活动通过完成客观题打卡任务,可获得的积分上限为2分/每章节;3. 请务必按照上述要求提交内容,以免影响积分增加;4. 若积分值相同则以完成学习任务的时间先后排序,其中任务完成时间的判定优先级为:结业考核>问答官排位赛>每章函数题>每章客观题打卡5. 其他积分获取方式请查看活动社群公告。想了解更多关于全栈成长计划课程内容请移步主帖:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=63766&page=1&extra=#pid257203除了本帖任务,其他学习任务可以通过以下链接进行查看:查看函数题打卡帖:【JAVA开发全栈成长计划】基础班每章客观题打卡帖查看问答官排位赛活动帖:【JAVA开发全栈成长计划】基础班问答官排位赛活动帖
  • [全栈开发者] 【已结束】JAVA开发全栈成长计划(基础班)每章客观题打卡帖
    【JAVA开发全栈成长计划】(基础班)每章客观题打卡帖(打卡活动已经截止啦,同学们可以参加下一场课程学习任务哦!)(回复格式:华为云ID+截图)为了巩固大家的学习成果,紧跟学习进度请将需要完成的每章随堂测验客观题内容按要求回复到本帖下方按要求格式回复即可获得积分累计阶段奖品,还能有机会获得附加幸运奖哦~(第一章Java概述不算积分,从第二章开始算积分)打卡时间2020.07.20-2020.08.16 23:59打卡要求在本帖中,回复对应章节的客观题并提交截图 ↓回复格式:华为云ID+课程完成截图(露出右上角华为云ID,且有效提交次数≥1)如图所示华为云ID:grandmaster 奖励方式每章节每次有效打卡可获得2积分阶段学习将以积分排行榜的形式,对前200名小伙伴进行奖励!此外还有附加奖励,每周在本周内提交随堂测验的用户中随机抽取10位幸运奖奖励华为云定制数据线 积分排行榜奖品 活动注意事项 由于本帖回复内容为随堂测试结果,已设置回帖仅版主可见1. 学习任务提交后,小助手会在本阶段学习周期内,按序完成审核,并增加活动积分;2. 本次活动通过完成客观题打卡任务,可获得的积分上限为2分/每章节;3. 请务必按照上述要求提交内容,以免影响积分增加;4. 若积分值相同则以完成学习任务的时间先后排序,其中任务完成时间的判定优先级为:结业考核>问答官排位赛>每章函数题>每章客观题打卡5. 其他积分获取方式请查看活动社群公告。想了解更多关于全栈成长计划课程内容请移步主帖:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=63766&page=1&extra=#pid257203除了本帖任务,其他学习任务可以通过以下链接进行查看:查看函数题打卡帖:【JAVA开发全栈成长计划】基础班每章函数题打卡帖查看问答官排位赛活动帖:【JAVA开发全栈成长计划】基础班问答官排位赛活动帖
  • [交流分享] 使用Porting Advisor工具分析snappy-java报告
    使用Porting Advisor工具分析snappy-java移植报告背景介绍为了进一步提高鲲鹏云的软件移植效率,使用鲲鹏软件栈的开发工具中Porting Advisor分析软件源码,并给出了使用过程报告。 步骤0、获取工具华为云官网、鲲鹏社区、鲲鹏软件栈、开发工具、Porting Advior代码迁移工具。步骤1、使用工具 一、工具介绍该工具是一款可以简化客户应用迁移到TaiShan服务器的过程的工具。当客户有X86平台上源代码的软件要移植到TaiShan服务器上时,可用该工具自动分析出需修改的代码内容,并指导用户如何修改。该工具解决了用户代码兼容性人工排查困难、移植经验欠缺、反复依赖编译调错定位等痛点。支持的功能特性如下:检查用户C/C++软件构建工程文件,并指导用户如何移植该文件。检查用户C/C++软件构建工程文件使用的链接库,并提供可移植性信息。检查用户C/C++软件源码,并指导用户如何移植源文件。检查用户软件中X86汇编代码,并指导用户如何移植。支持命令行方式和Web两种工作模式。二、安装按照《华为鲲鹏代码迁移工具 用户指南.pdf》在linux-aarch64安装web模式。步骤1、获取源码包,解压。步骤2、安装工具执行 sh install.sh web步骤3、登录说明,请使用外网IP登录。使用默认密码登录,第一次登陆系统强制要求修改密码。修改之后再次登录即可。三、进行测试将源码包放在/opt/portadv/portadmin/snappy-java-1.1.1.7路径,解压,在网站点击分析,开始分析。很快就出结果了。扫描后查看移植建议,无需要适配的代码。 工具使用总结1. 优点1)安装、使用简单,方便,可在迁移前进行分析,工具无需安装到迁移环境上;2. 缺点1)内嵌汇编检查不够完善。2)对库调用检查不完整(如:syscall(__NR_epoll_create, size));3)当工具无法扫描到,实施时人工识别到时,无法从工具页面获取如何修改的案例。4)用户手册中的白名单不知从哪里获取更新,并且其格式是什么,资料中未给出。5)用户对自己识别到的常用迁移问题无法扩展。
  • [全栈开发者] 【已结束】JAVA开发全栈成长计划分享海报到朋友圈,领取华为云礼品!速来!
    分享要求:转发下方活动海报至朋友圈,+转发语:华为云JAVA开发全栈成长计划,进阶课程免费学~,公开可见保持2小时以上,将转发内容截图回复至下方评论区◎分享活动期限:即日起-7月30日23:59,结束即抽奖◎中奖方式:前30名有效分享,必得华为云定制3合1数据线 //以版主点评认证的顺序为准哦,图片为准,占楼无效,需要补上图片才可哦~30名后每10个有效楼层,抽取1位幸运用户,奖励华为云定制3合1数据线各位开发者们,抓紧时间参与分享呀~ ◎活动规则:1. 版主会在分享期时间结束后3个工作日内开奖,本次开奖以反馈楼层为准,抽奖过程和中奖名单会以动图/视频形式更新到本帖和征文活动帖中~请大家在保持关注哦~2. 每用户仅可获得一次奖励,奖品颜色随机且数量有限发完即止。3. 本次活动回帖内容需满足华为云论坛发帖规范:https://bbs.huaweicloud.com/forum/thread-23077-1-1.html 前三十名中奖名单公布大家按照帖子中的要求截图反馈哈~几分钟的截图可不得行哈~分享截图通过之后会的到版主的认证回复哦~图片为证,占楼无效,需要补上图片才可哦~以下是前三十位分享中奖名单,请看到自己昵称的开发者们7月20日前私信版主“姓名+电话+地址”奖品会在7月20日之后的5个工作日内发出
总条数:2294 到第 页
上滑加载中