• 关于

    依赖的基本操作

    的搜索结果

回答

我觉得应该首先理一理会造成性能损耗的一些场景: 比如大列表的渲染,大量dom的渲染 2.大量图片的加载,过多资源的请求. 3.代码中有没有耗时的计算操作,或则大量循环.递归 编写的组件过于庞大 层级过深,依赖模块过多等. 我觉得首先就是查看请求的资源体积是否过大,如果过大考虑压缩,减少不必要的资源的请求,不必要的js代码的代码加载,用字体图标代替图片,异步加载等等. 但是我觉得基本的优化策略(减少请求数,压缩请求资源的体积)都已经做过了,感觉性能还是没有提升,可能应该关注与代码层面的优化吧,比如过大的第三方库能不能换成轻量级的,代码中有没有很耗时的操作循环和递归,过多的分支条件语句,能不能改写以提高执行效率,简化复杂的组件逻辑,减少不必要的依赖,是否有杀鸡用了牛刀的操作等.暂时想到的就这些.

游客p7wlo4q4jr4va 2020-05-23 13:54:25 0 浏览量 回答数 0

问题

Java之Maven的包管理

moduletek 2020-08-13 09:38:46 240 浏览量 回答数 2

回答

经典应用服务提供应用发布及回滚的功能,您可以编辑待发布应用的依赖关系及服务器分组,选择发布策略。在部署大盘页面可新建发布单。 1. 在发布大盘界面,点击 新建发布,进入 发布申请 页面。 2. 填写发布基本信息后,点击 快速创建,则直接创建应用的发布单,且应用之间无依赖关系。 3. 若需编辑 部署策略、部署参数、依赖关系 等信息,点击 编辑高级信息,进入高级信息编辑页面。 4. 点击 下一步,进入发布单预览界面,确认无误后点击 创建 按钮,创建发布单。 5. 点击应用,进入应用详情页,可进行分组调整、回滚操作。

LiuWH 2020-03-24 22:28:51 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

众所周知,Java是平台无关的语言,那么Java为什么要支持平台无关性,总结一下,有如下几点支持多变的网络环境。如今是一个互联网的时代,网络将各种各样的计算机和设备连接起来,比如网络连接了windows的PC机,UNIX工作站等等。为了保证程序能够不加任何修改运行于网络上的任何计算机,而不管计算机是什么种类,什么平台,这样就极大减轻了系统管理员的工作。尤其是程序是通过网络环境进行部署的。支持网络化嵌入式设备。目前工作场所中存在各种各样的嵌入式设备,比如打印机,扫描仪,传真机等。他们往往通过网络连接起来,甚至在家庭网络和汽车内部也存在这样那样的嵌入式设备 。Java的平台无关性可以简化这样的系统管理任务。无论是哪个网络的管理员,它只需关注程序本身即可。此外添加一台新设备,可以立即被其他设备访问到,也可以访问其他设备。这都是平台无关性带来的好处。减少开发者部署程序的成本和时间。对于开发者而言, Java平台无关的能力给予网络一个同构的运行环境,使得分布式系统可以围绕着“网络移动对象”开构建。比如对象序列化,RMI, Jini就是利用平台无关性。把面向对象编程从虚拟机带到了网络上。影响Java平台无关性的因素Java平台的部署。运行Java程序之前,必须要部署好Java平台。Java平台的版本。Sun公司提供了不同的API集合,有标准版,扩展版等等。此外API本身也面临着改动,一些API被认为是过期的,一些API甚至不向下兼容,因此我们需要选择合适的Java平台版本支持程序开发。本地方法。当编写一个平台独立的Java程序时候,最重要的原则是:不要直接或间接调用不属于Java API的本地方法。调用Java API以外的本地方法使得程序平台相关。一般而言,本地方法在三种情况适用:使用底层主机平台的特性,而Java API无法访问;为了访问老系统或者使用现有的库,但是这个系统或库不是Java编写的;为了加快程序性能,将时间敏感代码用本地方法实现。因此当必须使用本地方法,而且支持多种平台运行,必须将本地方法移植到所有需要的平台上。因此编写平台独立的Java程序做主要的目的就是完全禁止本地方法,通过Java API和主机交互。非标准运行时库。所谓平台无关性,一种解释是你调用的方法是否在任何地方都已经实现。本地方法顾名思义,就是只是在本地实现了,所以无法保证平台无关。而Java API在如windows, Solaris等操作系统上的实现上使用了本地方法访问主机,即保证了平台无关。对虚拟机的依赖。虚拟机可以由不同开发商开发,但是必须满足如下两条原则:不要依赖及时终结(finalization)保证程序的正确性,因为特定程序中对象可能在不同的时间被垃圾收集;不要依赖线程的优先级来保证程序的正确性。因为一些虚拟机可以实现优先级高线程优先运行,一些虚拟机不能保证这一点。对用户界面依赖,AWT库提供基本的用户界面,这些组件被映射成每个平台上的本地组件,而Swing库为用户提供更高级的组件,但并没有被映射为本地组件。实现平台无关的7大步骤选择程序运行的主机和设备集合(目标宿主机)在目标宿主机中选择Java平台版本。对于每个目标宿主机,选择程序将要运行的Java平台实现(目标运行时环境) 。编写程序,调用Java API标准运行库(不调用本地方法,或者专门开发商专门调用本地方法的库)编写程序,不依赖于垃圾收集器收集垃圾时间,不依赖线程的优先级努力设计用户界面,在所有的目标宿主机都能正常工作在所有目标运行时环境和所有目标宿主机进行测试 Java从四个方面支持了平台无关性最主要的是Java平台本身。Java平台扮演Java程序和所在的硬件与操作系统之间的缓冲角色。这样Java程序只需要与Java平台打交道,而不用管具体的操作系统。Java语言保证了基本数据类型的值域和行为都是由语言自己定义的。而C/C++中,基本数据类是由它的占位宽度决定的,占位宽度由所在平台决定的。不同平台编译同一个C++程序会出现不同的行为。通过保证基本数据类型在所有平台的一致性,Java语言为平台无关性提供强有力的支持。Java class文件。Java程序最终会被编译成二进制class文件。class文件可以在任何平台创建,也可以被任何平台的Java虚拟机装载运行。它的格式有着严格的定义,是平台无关的。可伸缩性。Sun通过改变API的方式得到三个基础API集合,表现为Java平台不同的伸缩性:J2EE,J2SE,J2ME。

缘灭山上 2019-12-02 01:39:36 0 浏览量 回答数 0

问题

手把手教你完成比赛之什么是Maven?

叔至 2019-12-01 20:55:54 8674 浏览量 回答数 2

回答

(1)关于Quartz的基本使用 可参考Quartz官方文档和网上博客实践教程。 (2)业务使用要满足动态修改和重启不丢失, 一般需要使用数据库进行保存。 Quartz本身支持JDBCJobStore,但是其配置的数据表比较多,官方推荐配置可参照官方文档,超过10张表,业务使用比较重。 在使用的时候只需要存在基本trigger配置和对应任务以及相关执行日志的表即可满足绝大部分需求。 (3)组件化 将quartz动态任务配置信息持久化到数据库,将数据操作包装成基本jar包,供项目之间使用,引用项目只需要引入jar包依赖和配置对应的数据表,使用时就可以对Quartz配置透明。 (4)扩展 集群模式 通过故障转移和负载均衡实现了任务的高可用性,通过数据库的锁机制来确保任务执行的唯一性,但是集群特性仅仅只是用来HA,节点数量的增加并不会提升单个任务的执行效率,不能实现水平扩展。 Quartz插件 可以对特定需要进行扩展,比如增加触发器和任务执行日志,任务依赖串行处理场景,可参考:quartz插件——实现任务之间的串行调度

kun坤 2020-04-23 16:21:32 0 浏览量 回答数 0

问题

MaxCompute产品简介:基本概念:任务

行者武松 2019-12-01 22:01:08 1137 浏览量 回答数 0

回答

简而言之,SQL是基础中的基础,基本操作和事务处理都必须正确掌握。手写SQL未必要100%用到,但绝对是逃不过的。至于是哪种SQL问题并不大,反正依赖某种特定数据库系统的SQL语法,用的越少越好肯定没错。但是对数据库的掌握,并不只包含SQL等这些具体的手段,还需要清楚数据库设计的思想和典型方法。毕竟数据库的结构如何规划,任何数据库系统都不能代劳。

蛮大人123 2019-12-02 01:45:23 0 浏览量 回答数 0

问题

node.js 调研与服务性能测试? 400 报错

爱吃鱼的程序员 2020-06-04 11:54:07 3 浏览量 回答数 1

回答

即使不是这个业务需求所迫,你也应当去学习一下 MVVM 框架,且不说 MVVM 是当前的主流,即使是一些非主流的技术,在力所能及的情况下也应当去涉猎一下,知识的广度是个人能力的重要方面。以上是抖机灵回答,根据你描述的实际场景,非常建议你至少上一个前端模板库来取代或配合 jQuery,这样可以把你从大量复杂的 DOM 操作代码中解脱出来。至于要不要上 MVVM 如果场景中还有大量交互任务的话,建议直接 MVVM,毕竟一个小巧的 MVVM 的大小基本与 jQuery 相当,如果你不是特别依赖 jQuery 的一些插件和动画等功能,完全也可以用 zepto 等更灵巧的库来代替 jQuery

a123456678 2019-12-02 02:08:26 0 浏览量 回答数 0

回答

选择引擎产品>实时预警引擎,单击任务管理,进入任务管理页面。如下图所示,任务管理界面显示已建立的所有预警任务,按最近编辑时间降序排列。 任务管理模块用于任务的管理和运维,主要包括:添加任务,筛选、 查看、启动、编辑等相关操作以及数据服务。 界面部分参数说明如下表所示: 添加任务 点击任务管理界面右上角的添加任务按钮,可添加新的预警任务。如下图所示,系统提供“模板任务”和“自定义任务”两种方式。 模板任务 基于系统预置的预警模板快速创建任务,具体操作与预警模板>添加任务处类同,此处不再赘述。 自定义任务 自定义任务即开放数据融合引擎的数据表给用户,用户通过实时预警引擎自定义规则生成任务,不依赖预警模板。 选择自定义任务模式,显示界面如下图所示。 界面参数说明如下表所示。 依次配置任务基本信息(任务名称)、依赖表以及预警条件。配置完成后,点击下一步,配置任务输出信息和任务启动日期,如下图所示。 说明: 根据项目需求,勾选所要输出的字段。 设置启动日期后,任务将从您指定的日期开始执行预警规则,启动日期可设置的最早日期取决于任务的主表在Datahub中存储了多少天的数据。 点击保存即建立了自定义的预警任务,同时跳转到任务管理界面。其中新创建的自定义任务的任务状态和预警模板显示如下: 任务状态为“启动中”,启动成功后,转为“运行中”状态。 预警模板显示“自定义”。 任务相关操作 如下图所示,任务可执行操作包括:筛选、查看、启动、编辑、删除以及查看运行信息。 筛选:用户可以通过设定“任务状态”对预警任务进行筛选,也可使用搜索栏对任务进行搜索。查看:通过任务右侧操作栏的查看按钮查看任务的详细信息,包括基本信息、预警规则和任务输出信息。启动/暂停:通过任务右侧操作栏的启动/暂停按钮启动/暂停任务。启动时需设置启动时间。编辑:通过任务右侧操作栏的编辑按钮对任务进行修改。仅“暂停”或“发布异常”的任务可执行编辑操作。删除:通过任务右侧操作栏的删除按钮对任务进行删除。仅“暂停”或“发布异常”的任务可执行删除操作。查看运行信息:仅“运行中”任务可查看。通过任务右侧操作栏的运行信息按钮查看,显示任务的指标名称和指标值。 数据服务 点击任务右侧操作栏的数据服务按钮,跳转到该任务的数据服务界面。数据服务包括“实时接口调用”和“实时消息订阅”两大块。 实时接口调用 实时接口调用界面显示如下图所示,配置请求参数值后,点击调试接口可获取该任务的产出数据。 若接口调试成功,用户可在返回内容框中,获取数据。若接口调试失败,用户可在返回内容框中,获取错误码,并对照错误参照码查看失败原因。 实时消息订阅 实时消息订阅实显示如下图所示,实时消息订阅表提供该任务历史7天到当天实时预警信息,您可以将该表同步到其他数据库做历史消息的存储。

剑曼红尘 2020-03-24 15:56:55 0 浏览量 回答数 0

回答

1.脚本语言。JavaScript 是一种解释型的脚本语言,C、C++等语言先编译后执行,而 JavaScript 是在程序的运行过程中逐行进行解释。 2.基于对象。JavaScript 是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。 3.简单。JavaScript 语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于 Java 基本语句和控制的脚本语言,其设计简单紧凑。 4.动态性。JavaScript 是一种采用事件驱动的脚本语言,它不需要经过 Web 服务器就可以对用户的输入做出响应。 5.跨平台性。JavaScript 脚本语言不依赖于操作系统,仅需要浏览器的支持。

茶什i 2019-12-02 03:18:10 0 浏览量 回答数 0

回答

1. 原生 DOM 操作 VS 通过框架封装操作。 这是一个性能 vs. 可维护性的取舍。框架的意义在于为你掩盖底层的 DOM 操作,让你用更声明式的方式来描述你的目的,从而让你的代码更容易维护。没有任何框架可以比纯手动的优化 DOM 操作更快,因为框架的 DOM 操作层需要应对任何上层 API 可能产生的操作,它的实现必须是普适的。针对任何一个 benchmark,我都可以写出比任何框架更快的手动优化,但是那有什么意义呢?在构建一个实际应用的时候,你难道为每一个地方都去做手动优化吗?出于可维护性的考虑,这显然不可能。框架给你的保证是,你在不需要手动优化的情况下,我依然可以给你提供过得去的性能。 2. 对 React 的 Virtual DOM 的误解。 React 从来没有说过 “React 比原生操作 DOM 快”。React 的基本思维模式是每次有变动就整个重新渲染整个应用。如果没有 Virtual DOM,简单来想就是直接重置 innerHTML。很多人都没有意识到,在一个大型列表所有数据都变了的情况下,重置 innerHTML 其实是一个还算合理的操作... 真正的问题是在 “全部重新渲染” 的思维模式下,即使只有一行数据变了,它也需要重置整个 innerHTML,这时候显然就有大量的浪费。 我们可以比较一下 innerHTML vs. Virtual DOM 的重绘性能消耗: innerHTML: render html string O(template size) + 重新创建所有 DOM 元素 O(DOM size)Virtual DOM: render Virtual DOM + diff O(template size) + 必要的 DOM 更新 O(DOM change) Virtual DOM render + diff 显然比渲染 html 字符串要慢,但是!它依然是纯 js 层面的计算,比起后面的 DOM 操作来说,依然便宜了太多。可以看到,innerHTML 的总计算量不管是 js 计算还是 DOM 操作都是和整个界面的大小相关,但 Virtual DOM 的计算量里面,只有 js 计算和界面大小相关,DOM 操作是和数据的变动量相关的。前面说了,和 DOM 操作比起来,js 计算是极其便宜的。这才是为什么要有 Virtual DOM:它保证了 1)不管你的数据变化多少,每次重绘的性能都可以接受;2) 你依然可以用类似 innerHTML 的思路去写你的应用。 3. MVVM vs. Virtual DOM 相比起 React,其他 MVVM 系框架比如 Angular, Knockout 以及 Vue、Avalon 采用的都是数据绑定:通过 Directive/Binding 对象,观察数据变化并保留对实际 DOM 元素的引用,当有数据变化时进行对应的操作。MVVM 的变化检查是数据层面的,而 React 的检查是 DOM 结构层面的。MVVM 的性能也根据变动检测的实现原理有所不同:Angular 的脏检查使得任何变动都有固定的 O(watcher count) 的代价;Knockout/Vue/Avalon 都采用了依赖收集,在 js 和 DOM 层面都是 O(change): - 脏检查:scope digest O(watcher count) + 必要 DOM 更新 O(DOM change) - 依赖收集:重新收集依赖 O(data change) + 必要 DOM 更新 O(DOM change)可以看到,Angular 最不效率的地方在于任何小变动都有的和 watcher 数量相关的性能代价。但是!当所有数据都变了的时候,Angular 其实并不吃亏。依赖收集在初始化和数据变化的时候都需要重新收集依赖,这个代价在小量更新的时候几乎可以忽略,但在数据量庞大的时候也会产生一定的消耗。 MVVM 渲染列表的时候,由于每一行都有自己的数据作用域,所以通常都是每一行有一个对应的 ViewModel 实例,或者是一个稍微轻量一些的利用原型继承的 "scope" 对象,但也有一定的代价。所以,MVVM 列表渲染的初始化几乎一定比 React 慢,因为创建 ViewModel / scope 实例比起 Virtual DOM 来说要昂贵很多。这里所有 MVVM 实现的一个共同问题就是在列表渲染的数据源变动时,尤其是当数据是全新的对象时,如何有效地复用已经创建的 ViewModel 实例和 DOM 元素。假如没有任何复用方面的优化,由于数据是 “全新” 的,MVVM 实际上需要销毁之前的所有实例,重新创建所有实例,最后再进行一次渲染!这就是为什么题目里链接的 angular/knockout 实现都相对比较慢。相比之下,React 的变动检查由于是 DOM 结构层面的,即使是全新的数据,只要最后渲染结果没变,那么就不需要做无用功。 Angular 和 Vue 都提供了列表重绘的优化机制,也就是 “提示” 框架如何有效地复用实例和 DOM 元素。比如数据库里的同一个对象,在两次前端 API 调用里面会成为不同的对象,但是它们依然有一样的 uid。这时候你就可以提示 track by uid 来让 Angular 知道,这两个对象其实是同一份数据。那么原来这份数据对应的实例和 DOM 元素都可以复用,只需要更新变动了的部分。或者,你也可以直接 track by $index 来进行 “原地复用”:直接根据在数组里的位置进行复用。在题目给出的例子里,如果 angular 实现加上 track by $index 的话,后续重绘是不会比 React 慢多少的。甚至在 dbmonster 测试中,Angular 和 Vue 用了 track by $index 以后都比 React 快: dbmon (注意 Angular 默认版本无优化,优化过的在下面) 顺道说一句,React 渲染列表的时候也需要提供 key 这个特殊 prop,本质上和 track-by 是一回事。 4. 性能比较也要看场合 在比较性能的时候,要分清楚初始渲染、小量数据更新、大量数据更新这些不同的场合。Virtual DOM、脏检查 MVVM、数据收集 MVVM 在不同场合各有不同的表现和不同的优化需求。Virtual DOM 为了提升小量数据更新时的性能,也需要针对性的优化,比如 shouldComponentUpdate 或是 immutable data。 初始渲染:Virtual DOM > 脏检查 >= 依赖收集小量数据更新:依赖收集 >> Virtual DOM + 优化 > 脏检查(无法优化) > Virtual DOM 无优化大量数据更新:脏检查 + 优化 >= 依赖收集 + 优化 > Virtual DOM(无法/无需优化)>> MVVM 无优化 不要天真地以为 Virtual DOM 就是快,diff 不是免费的,batching 么 MVVM 也能做,而且最终 patch 的时候还不是要用原生 API。在我看来 Virtual DOM 真正的价值从来都不是性能,而是它 1) 为函数式的 UI 编程方式打开了大门;2) 可以渲染到 DOM 以外的 backend,比如 ReactNative。 总结 以上这些比较,更多的是对于框架开发研究者提供一些参考。主流的框架 + 合理的优化,足以应对绝大部分应用的性能需求。如果是对性能有极致需求的特殊情况,其实应该牺牲一些可维护性采取手动优化:比如 Atom 编辑器在文件渲染的实现上放弃了 React 而采用了自己实现的 tile-based rendering;又比如在移动端需要 DOM-pooling 的虚拟滚动,不需要考虑顺序变化,可以绕过框架的内置实现自己搞一个。

九旬 2020-05-24 11:46:45 0 浏览量 回答数 0

回答

作者:KJ(Kan Jia)链接:https://www.zhihu.com/question/21893155/answer/29567372来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。几年前刚刚初学python的时候, 也在pygame, panda3D, 和cocos2d-python之间犹豫过.多年以后, 自己实际上也没走上游戏这个行业, 但是现在看这样的问题顿时觉得轻松很多. 偶尔需要用python写一些桌面上的类游戏的效果, cocos2d-python版本成为我的(玩票)首选. 当然如果你是以游戏开发作为终身事业, 或者希望在游戏公司找一份工作, 那么你应该换一种学习路径...首先是pygame, panda3d这样的框架和cocos2d-python的比较: 第一大小, cocos2d-python的文件大概1.4M, 依赖的pyglet大概6M(解压缩以后). 这点绝对是panda3d这样的大家伙搞不定的, pygame, 压缩包大概1.4M, 另外还有一大堆依赖包, 比如pysdl...其实这里面还有更加深刻的差别. pygame的设计和实现在2000年左右, cocos2d则出现在2008年. 从技术上, pygame依赖的是pyopengl这样的库, 而cocos2d则依赖pyglet.传统的pyopengl这样的库用的是什么做法. 一般来说, 就是将原来C语言的dll编译成适合python调用的模块(也是dll/so的形式), 所以如果你用pip或者通过源码安装pyopengl这样的库的时候, 往往需要调用gcc, 需要安装好python-dev, 需要opengl-dev, 最后生成给你一个只能在python中import的dll.pyglet为什么不同呢? 因为在它被写出来的前几年, python世界里面有一个叫ctypes的东东出现了, 不久居然被python2.5收入了标准库, 变成了可以被直接import的东西. 通过这样一个神奇的标准库, 在python中可以直接打开dll文件调用其中的函数...于是, pyglet这个库, 它全部是用python语言写了一套opengl的包装. 事实上你根本不用安装gcc编译器就能安装好pyglet这个库. 更直接的说, 从网上下载下来解压缩, 把包copy到你的项目中即可.cocos2d-python, 也是纯python写的, 没有任何binary... 这意味着, 你写一个游戏, 然后将cocos和pyglet放在同一个目录下面, 接下来, 只要是装有python2.7的mac/linux/windows, 都可以直接跑起来. 这就是干净...说完了技术上的维度, 我们再来谈谈理念上的pygame和cocos2d都有sprite的概念, 但是使用方便性上是不一样的. pygame里面基本上就是一个层, 所有的操作, 比如旋转, 缩放, 都需要引入transform来处理. 而cocos2d的layer已经能够直接旋转, 缩放了. 接下来, 在cocos2d里面, 层出不穷的action让我们感受到了无与伦比的方便. 各种action组合, 比如一边移动一边旋转, 这才是现代的游戏framework.我个人以为, 很多东西都是相通的, 如果你是cocos2d-python的程序员, 只要这些理念上理解了, 应该不妨碍做iphone或者html5去写程序. 估计就是换成flash或者sprite kit, 一样很快上手.所以, 作为一个偶尔用用的游戏框架票友, 我最近真的用cocos2d-python写了一些桌面上的东东.关于文档少的问题, 确实cocos2d-python被冷落好久了, 因为cocos2d-x什么都包含, 包括各种desktop. 但是我看了看框架代码和游戏的example, 基本上很快摸索出来了.

xuning715 2019-12-02 01:10:22 0 浏览量 回答数 0

回答

Linux下大部分系统默认自带python2.x的版本,最常见的是python2.6或python2.7版本,默认的python被系统很多程序所依赖,比如centos下的yum就是python2写的,所以默认版本不要轻易删除,否则会有一些问题,如果需要使用最新的Python3那么我们可以编译安装源码包到独立目录,这和系统默认环境之间是没有任何影响的,python3和python2两个环境并存即可  首先去python官网下载python3的源码包,网址:https://www.python.org/  进去之后点击导航栏的Downloads,也可以鼠标放到Downloads上弹出菜单选择Source code,表示源码包,这里选择最新版本3.5.1,当然下面也有很多其他历史版本,点进去之后页面下方可以看到下载链接,包括源码包、Mac OSX安装包、Windows安装包    这里选择第一个下载即可,下载的就是源码包:Python-3.5.1.tgz,下载好之后上传到linux系统,准备安装  python安装之前需要一些必要的模块,比如openssl,readline等,如果没有这些模块后来使用会出现一些问题,比如没有openssl则不支持ssl相关的功能,并且pip3在安装模块的时候会直接报错;没有readline则python交互式界面删除键和方向键都无法正常使用,至于需要什么模块在make完之后python会给出提示,通过提示进行安装即可装全, 另外感谢园友的Glory_Lion的回复;下面是需要提前预装的依赖:复制代码yum -y install zlib zlib-develyum -y install bzip2 bzip2-develyum -y install ncurses ncurses-develyum -y install readline readline-develyum -y install openssl openssl-develyum -y install openssl-staticyum -y install xz lzma xz-develyum -y install sqlite sqlite-develyum -y install gdbm gdbm-develyum -y install tk tk-devel复制代码 安装上面这些python内置模块基本上就比较全了,如果后续有其他必要的模块,会继续补充的,接下来可以安装python了,编译过程中会自动包含这些依赖.   释放文件:tar -xvzf Python-3.5.1.tgz  进入目录:cd Python-3.5.1/  配置安装目录,因为上面依赖包是用yum安装而不是自己编译的,所以都是安装在系统默认目录下,因此各种选项不用加默认即可生效:./configure --prefix=/usr/python  接下来编译源码:make  执行安装:make install  整个过程大约5-10分钟,安装成功之后,安装目录就在/usr/python  系统中原来的python在/usr/bin/python,通过ls -l可以看到,python是一个软链接,链接到本目录下的python2.7  我们可以不用把这个删除,不对原来默认的环境做任何修改,只新建一个python3的软链接即可,只是需要执行python3代码时python要改成python3,或者python脚本头部解释器要改为#!/usr/bin/python3  这里建立有关的软链接如下:ln -s /usr/python/bin/python3 /usr/bin/python3ln -s /usr/python/bin/pip3 /usr/bin/pip3  这样就建立好了,以后直接执行python3命令就可以调用python3了,执行pip3可以安装需要的python3模块;另外如果仔细看python安装目录下的bin目录,实际上python3也是个软链接,链接到python3.5.1,这样多次链接也是为了多个版本的管理更加方便,  python3新版本的安装就是这些,因为我们之前安装了完整的依赖,所以下面问题不存在了,忽略即可,其中的python readline模块也早已经停止更新了,会出现崩溃问题;这里基础环境都是使用系统的依赖,更稳定. --------------------------------------------华丽的分割线---------------------------------------------------   另外可能会遇到一个问题就是,python3交互式界面特别不好用,删除不能正常使用,必须按Ctrl+删除键才可以,上下键重复命令也无法使用,左右调整光标也无法使用,这样调试代码效率很低,原因是python3缺少readline这个依赖,默认使用pip3 install readline会提示找不到包,所以只能是手动安装了  因为readline依赖于ncurses库,如果没有这个库,编译readline的时候会提示can not find -lncurses,如果在centos环境下可以执行下面命令安装:yum -y install ncurses ncurses-devel  安装ncurses库之后,再安装readline,readline可以在pypi下载,地址:https://pypi.python.org/pypi/readline,这里一定要下载源码包,其余的只能用于python2,下载之后执行下面命令安装:tar -xvzf readline-6.2.4.1.tar.gzcd readline-6.2.4.1/python3 setup.py install  这样执行完毕就为python3安装了readline,然后再进入交互式界面所有的操作都好用了

xuning715 2019-12-02 01:10:13 0 浏览量 回答数 0

回答

回1楼服务器之家的帖子 求问该服务有无必须默认开启的必要性? ------------------------- Re求问centos下开的ntpd服务有什么用处 一直以为ntpd是充当时钟服务器让其他服务器同步时间的 ntpdate是同步时间的客户端服务 刚百度了下两者的区别,果断很是景仰阿里云的技术人员: 在Linux操作系统设置与上级NTP时钟源同步是很基本的操作,Linux提供了ntpd和ntpdate两种方式来实现时间同步,但它们在同步原理上则有着本质的区别:ntpd在实际同步时间时是一点点的校准时间的,也可以理解为ntpd是平滑同步;而ntpdate不会考虑其他程序是否会阵痛,就立即同步。因此在生产环境中慎用ntpdate。 我们可以结合一个应用场景来加强对ntpd和ntpdate的理解: 网站限制用户注册1小时后才能发帖。 数据库服务器在 10:00分接受了我的注册邀请; 10:03分,ntpdate将数据库时间强行改成9:35分; 然后10:05分(9:37分)我尝试发帖,系统判断我注册时间是否满一小时会使用:9:37 – 10:00 最后电脑就逻辑混乱了。。。 类似的案例在网上也有很详细的说明,贴出来给大家看看: 时钟的跃变,有时候会导致很严重的问题。许多应用程序依赖连续的时钟。毕竟,这是一项常见的假定,即:取得的时间是线性的,一些操作,例如数据库事务,通常会地依赖这样的事实:时间不会往回“跳跃”。 不幸的是,ntpdate调整时间的方式就是我们所说的“跃变”,这就导致了几个非常明显的问题: 1. 这样做不安全。ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿下ntp服务器并令与其同步的服务器执行某些消耗性的任务。由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。 2. 这样做不精确。一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。 3. 这样做不够优雅。由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错(例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。 因而,唯一可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。其余的时候,理想的做法是使用ntpd来校准时钟,而不是调整计算机时钟上的时间。 NTPD 在和时间服务器的同步过程中,会把 BIOS 计时器的振荡频率偏差,或者说 Local Clock 的自然漂移(drift)记录下来。这样即使网络有问题,本机仍然能维持一个相当精确的走时。 所以最后的建议是:如果首次安装操作系统还未启动业务之前,建议先ntpdate,然后再开启ntpd服务与时间服务器进行实时平滑同步。

srnpr 2019-12-02 03:11:39 0 浏览量 回答数 0

回答

1、脚本语言。JavaScript是一种解释型的脚本语言,C、C++等语言先编译后执行,而JavaScript是在程序的运行过程中逐行进行解释。 2、基于对象。JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。 3、简单。JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于Java基本语句和控制的脚本语言,其设计简单紧凑。 4、动态性。JavaScript是一种采用事件驱动的脚本语言,它不需要经过Web服务器就可以对用户的输入做出响应。在访问一个网页时,鼠标在网页中进行鼠标点击或上下移、窗口移动等操作JavaScript都可直接对这些事件给出相应的响应。 5、跨平台性。JavaScript脚本语言不依赖于操作系统,仅需要浏览器的支持。因此一个JavaScript脚本在编写后可以带到任意机器上使用,前提上机器上的浏览器支持JavaScript脚本语言,目前JavaScript已被大多数的浏览器所支持。

茶什i 2019-12-20 17:00:15 0 浏览量 回答数 0

回答

在使用容器镜像服务企业版之前,您需要先创建企业版实例,以托管和分发您的云原生资产。 前提条件 已为容器镜像服务企业版授权您的 OSS、VPC、云监控等资源权限。 已开通容器镜像服务企业版所依赖的云产品 OSS。 如需查询实例的实时数据,请开通云监控。 如需通过 VPC 访问实例,请开通 VPC。 如需记录控制台操作,请开通 ActionTrail。 操作步骤 登录容器镜像服务控制台,在控制台页面的左上方,选择所需地域。 在左侧导航栏中,选择企业版实例 > 实例列表。 在实例列表页面中,单击创建企业版实例。 在创建企业版实例对话框中,完成基本信息的配置。 输入实例名称。 选择实例规格。详情参见什么是容器镜像服务 ACR 企业版。 确认并勾选请阅读并同意《容器镜像服务企业版服务协议》。 单击确定,完成实例创建。 在实例列表中,新建实例的运行状态为创建中。大约 10 秒后,状态会变为运行中。

1934890530796658 2020-03-25 12:27:13 0 浏览量 回答数 0

回答

移动前端开发和 Web 前端开发的区别是: 1、前端是相对比较大的概念,一般是指用户能够看到、直接接触的界面都算是前端,比如iOS界面,安卓界面,网页界面,PC/Mac桌面软件的界面。最常见的是Web前端,也就是针对于网页端开发的工作。 2、Web App即Web application,也就是以浏览器作为客户端的软件。例如,用桌面客户端来收发邮件,但也可以直接用浏览器登陆gmail或者QQ邮箱,直接使用网页版的软件来使用。总之就是使用网页版代替本地软件。 Mobile Web App就是在手机端打开的Web App。例如Gmail的移动端软件 3、目前,移动客户端的开发主要包括三种类型: Native App(原生APP):也就是完全使用移动设备系统语言写的客户端。iOS系统就是使用Objective-C语言来编写本地应用,也可以使用苹果于2014年苹果开发者大会上发布的SWIFT语言;Android平台就是使用Java语言来开发。原生APP就是从界面到交互都是使用官方标准语言来编写,效率和稳定性都是最好的,但欠缺灵活性。 Web App:这个就是在移动浏览器里打开的,使用Web前端开发语言HTML CSS JavaScript来开发的,基本上就是个网页, Hybrid App:主要使用HTML5实现。一般使用Native语言实现一个容器,然后使用HTML CSS JS来实现用户界面和交互。这样方式既克服了Web App容器暴露偏底层的接口这样的问题,同时比起原生的开发灵活性要高。这样就更新可以更方便快捷,也不依赖于市场。例如,豌豆荚其实是个PC端的hybrid app 。 对于以上三种开发方式的比较和分析搜索引擎里面有太多的内容了,这里也就不再赘述了。 4、移动端网页布局方法与pc的差异。 主要是css方面,外加如何做到同一url,不同客户端展现不一致的做法,俗称pc和mobile都兼容。还有会说一下rem的相关用法和一段比较经典的rem.js 最后总结一下: 其实这两者最显著的区别就是,web app是不依赖于具体的设备的,通用性较强,只要手机或PC有相应内核的浏览器就基本OK。而mobile的app则依赖于具体的设备,一旦更换设备,需要重新下载才能继续使用。 移动前端开发 主要来说的是Native Client的开发Android为Java,iOS为Objective-C,然后么HTML5应用号称跨平台其实差异很大。 Web前端开发么基本上就是HTML JavaScript CSS,不过有些人把Servelt/JSP, PHP,Ruby,Python,C#之类的只要关系到页面的也叫做Web前端开发。 app是应用,每个操作系统有专门的开发工具和语言 web是网页,使用html+css+js,有工具可以生成转化为app,不过效果一般 答案来源于网络,仅供参考,希望对您有帮助。

KB小秘书 2019-12-02 03:01:21 0 浏览量 回答数 0

回答

拿下代码,放入eclipse,{@fix:由于个人jdk配置,仅在jre1.6下运行},什么输出都没有。下面来说说原因:1、对于非volatile修饰的变量,尽管jvm的优化,会导致变量的可见性问题,但这种可见性的问题也只是在短时间内高并发的情况下发生,CPU执行时会很快刷新Cache,一般的情况下很难出现,而且出现这种问题是不可预测的,与jvm, 机器配置环境等都有关。所以在未修改flag1之前,i会一直自增。一旦flag1修改后,sleep了1s,在flag2为修改之前,while循环就退出了,所以基本不会看到输出。2、说说volatile的语义。volatile能保证可见性。其保证每次对volatile变量的读取会重新从主存中获取,以使得最新修改的值对其可见。(其大概的实现方式:每次写volatile变量时,会锁定系统总线,这样会导致其他CPU的Cache失效,这样下次读取时,CPU检测到Cache失效,会重新从主存中加载)。在jdk1.5之前,volatile只能保证可见性,但会re-order的问题,这也是著名的double-check-lock的问题(对此,可google出一大堆的文章)。在jdk1.5中,对volatile语义进行了增强,其保证jvm内存模型不会对volatile修饰的变量进行重排序(写volatile变量操作不会与其之前的读写操作重排,读volatile操作不会与其后的读写操作重排)[1], 之后double-check-lock才算实际的可用。3、volatile提供的可见性和禁止指令重排的语义可以满足一定程度的同步性需求。对于volatile变量的使用,文献[2]中给出最佳实践:1.写入变量时并不依赖变量的当前值,或者可以确保只有单一线程修改该变量值;2.变量不需要和其他成员变量一起参与类的状态不变性约束;3.访问变量时,没有其他额外的原因需要加锁。

蛮大人123 2019-12-02 01:58:18 0 浏览量 回答数 0

回答

当您对于命名空间数、私有仓库数、构建规则数等规格要求不高时,建议使用支持基础镜像功能的默认实例版。本文主要介绍如何为默认实例创建镜像仓库、设置构建规则以及构建镜像。 功能特点 代码变更时自动触发构建 开启代码变更自动构建镜像后,每次提交代码将自动触发镜像构建,减少手动触发构建的繁琐工作。 登录容器镜像服务控制台,在控制台页面的左上方,选择所需地域。 在左侧导航栏中,选择默认实例 > 镜像仓库。 在镜像仓库页面,单击目标仓库右侧操作列的管理。 在左侧导航栏中选择构建,然后开启代码变更自动构建镜像。 代码变更时自动构建镜像 海外构建 代码构建过程中可能会依赖国外源,但由于网络环境,我们提供海外机器构建功能。在海外构建完成后,将镜像推送到指定地域的仓库中。 说明 有时海外回大陆的网络不稳定,可能会导致镜像推送超时失败。 海外构建 不使用缓存 开启不使用缓存后,每次构建都会重新拉取基础依赖镜像,这可能会增加镜像拉取时间,因此建议关闭该选项。 多阶段构建 阿里云容器镜像构建同时支持多阶段构建特性,详情参见多阶段构建。 创建镜像仓库 创建镜像仓库前,需要在所需地域下已创建命名空间,详情参见命名空间基本使用。 登录容器镜像服务控制台。 在顶部下拉菜单中选择所需地域,在左侧导航栏中选择镜像仓库,然后单击创建镜像仓库。 在创建镜像仓库对话框中,设置命名空间、仓库名称、摘要和仓库类型,本例选择私有镜像仓库类型。然后单击下一步。创建镜像仓库对话框 在设置代码源对话框中,将代码源设为云Code,然后单击创建镜像仓库。 代码变更时自动构建镜像:勾选后,当分支有代码提交后会自动触发构建规则。 海外机器构建:勾选后,构建时会在海外机房构建,构建成功后推送到指定地域。 不使用缓存:勾选后,每次构建时会强制重新拉取基础依赖镜像,可能会增加构建时间。 设置构建规则 登录容器镜像服务控制台。 单击目标仓库右侧操作列中的管理,进入仓库详情页面。管理仓库 单击左侧导航栏中的构建,在构建规则设置区域的右侧单击添加规则。 说明 如需修改构建规则,单击目标规则操作列中的修改。 添加构建规则入口 设置构建规则,然后单击确认。添加构建规则对话框 类型:设置源代码仓库的类型,可以是 Branch 或 Tag。 选择Branch或Tag:设置构建的代码分支。 Dockerfile目录:设置 Dockerfile 文件所在的目录。这里的目录指的是相对目录,以代码分支的根目录为父目录。 Dockerfile文件名:设置 Dockerfile 文件名,默认为 Dockerfile。 镜像版本:设置镜像 Tag,例如 latest。 构建镜像 在仓库详情页面,单击左侧导航栏中的构建。 在构建规则设置区域,单击目标规则操作列中的立即构建。立即构建 构建完成后,生成新的构建记录。 构建日志 单击右侧操作列表的日志按钮,查看构建日志记录。 等待镜像构建完成后,单击左侧菜单栏中的镜像版本,查看已构建完成的镜像列表。 镜像版本 如果您需要查看所有镜像,请单击构建页签,在构建设置中开启海外机器构建和不使用缓存,默认开启代码变更自动构建镜像,可以看到所有镜像版本列表。镜像版本列表 后续步骤 镜像创建无状态 Deployment 应用 镜像创建有状态 StatefulSet 应用 镜像创建Job类型应用 在容器服务 K8S 集群中部署应用(镜像)

1934890530796658 2020-03-25 14:08:34 0 浏览量 回答数 0

回答

  (1)数据结构与算法的联系:   程序=算法+数据结构。数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的。往往是在发展一种算法的时候,构建了适合于这种算法的数据结构。 算法的操作对象是数据结构。算法的设计和选择要同时结合数据结构,简单地说数据结构的设计就是选择存储方式,如确定问题中的信息是用数组存储还是用普通的变量存储或其他更加复杂的数据结构。算法设计的实质就是对实际问题要处理的数据选择一种恰当的存储结构,并在选定的存储结构上设计一个好的算法。不同的数据结构的设计将导致差异很大的算法。数据结构是算法设计的基础。用一个形象的比喻来解释:开采煤矿过程中,煤矿以各种形式深埋于地下。矿体的结构就像相当于计算机领域的数据结构,而煤就相当于一个个数据元素。开采煤矿然后运输、加工这些“操作”技术就相当于算法。显然,如何开采,如何运输必须考虑到煤矿的存储(物理)结构,只拥有开采技术而没有煤矿是没有任何意义的。算法设计必须考虑到数据结构,算法设计是不可能独立于数据结构的。 另外,数据结构的设计和选择需要为算法服务。如果某种数据结构不利于算法实现它将没有太大的实际意义。知道某种数据结构的典型操作才能设计出好的算法。   总之,算法的设计同时伴有数据结构的设计,两者都是为最终解决问题服务的。   (2)数据结构与算法的区别:   数据结构关注的是数据的逻辑结构、存储结构以及基本操作,而算法更多的是关注如何在数据结构的基础上解决实际问题。算法是编程思想,数据结构则是这些思想的逻辑基础。-------------------------不一样。 数据结构,无论复杂或简单,只是数据。 算法是计算机可执行的数值计算方法,它加工数据,产出数据。 数据是原料和制成品。 算法是工厂,是生产流水线。 算法和数据有关,但两者不一样。 蛋糕厂同鸡蛋,面粉有关,但蛋糕厂不同于原料。

小哇 2019-12-02 01:22:01 0 浏览量 回答数 0

回答

代表你的基础已经很好了,嵌入式学习相关的基础知识主要是这些: 一是程序设计的基础,例如:基本的编程语言基础,至少对数据类型、程序的结构及流程控制等最基本的内容要相当清楚,所以建议恶补一下C语言,推荐谭浩强的C语言程序设计,好好看一下,呵呵。另外有不少同学都问到数据结构的基础,我一直认为数据结构和算法的学习是帮助形成程序设计逻辑思维的很好训练方式,对于程序员的长期专业素养的提高一定有好处,所以建议即使已经在嵌入式行业中工作之后也应该多补充一些相关的知识。许多在学校没有学过数据结构的同学往往认为这部分非常枯燥、难学。而实际上如果你能明白研究计算机存储和数据组织方式的意义,就一定能够充分体会到数据结构的价值和魅力。一旦兴趣有了,一切就会迎刃而解,呵呵。 二是操作系统工作原理,这部分往往是非计算机专业的同学在学校时没有接触过的。而由于嵌入式软件设计相关的多任务环境、模块间的同步与通信协同、驱动设计等往往都需要有对操作系统工作机制的了解和掌握作为基础,因此建议没有系统学习过的同学,找一本相关的操作系统工作原理书籍认真看一下(不用特厚、特专业、特内核的,先以普及知识为主,呵呵。)。 三是基本的硬件基础,由于嵌入式Linux开发往往是ARM+Linux路线,所以为了能够在后续学习过程中很好地掌握主流嵌入式微处理器的结构与原理(例如:ARM9),就需要对硬件工作原理有初步的了解和掌握,建议看一下诸如计算机组成原理、体系结构等相关的专业书籍。 要深入学习你可以尝试以下路线: (1) C语言是所有编程语言中的强者,单片机、DSP、类似ARM的种种芯片的编程都可以用C语言搞定),因此必须非常熟练的掌握。 推荐书籍:《The C Programming Language》 这本经典的教材是老外写的,也有中译版本。 (2) 操作系统原理,是必需的,如果你是计算机专业毕业那也就无所谓了,如果是非计算机专业的就必须找一本比较浅显的计算机原理书籍看一看,把啥叫“进程”“线程”“系统调度”等等基本问题搞清楚。 (3)Linux操作系统就是用C语言编写的,所以你也应该先学习下Linux方面的编程,只有你会应用了,才能近一步去了解其内核的精髓。 推荐书籍:《UNIX环境高级编程》(第2版) (4) 了解ARM的架构,原理,以及其汇编指令,我们在嵌入式开发中,一般很少去写汇编,但是最起码的要求是能够看懂arm汇编。 (5) 系统移植的时候,就需要你从最下层的bootloader开始,然后内核移植,文件系统移植等。而移植这部分对硬件的依赖是非常大的,其配置步骤也相对复杂,也没有太多详细资料。 (6) 驱动开发 linux驱动程序设计既是个极富有挑战性的领域,又是一个博大精深的内容。 linux驱动程序设计本质是属于linux内核编程范畴的,因而是对linux内核和内核编程是有要求的。在学习前你要想了解linux内核的组成,因为每一部分要详细研究的话足够可以扩展成一本厚书。 以上只不过是大概的框架,在实际的开发中还会涉及很多东西,比如:交叉编译、makefile、shell脚本等等,所以说学习嵌入式的周期较长,门槛较高,自学的话更是需要较强的学习能力和专业功底。只要能坚持下来一定会取得成功。 华清远见的嵌入式专业教材比较专业,也很出名,高校图书馆以及外面书店都有卖,你可以去网上搜一下,买本看看,华清远见的网站和技术论坛上面也有很多嵌入式学习资料和视频可以下载,而且更新的速度也很快,LZ没事可以去转转,相信对你会有帮助。 另外,虚机团上产品团购,超级便宜-------------------------推荐使用:Linux 高级程序设计(第二版)杨宗德 邓玉春编著 这本书不仅讲述linux常使用的函数,同时对整体的系统结构分析都比较好,例如内存管理,多进程等等

琴瑟 2019-12-02 01:19:56 0 浏览量 回答数 0

回答

Express是一个快速开发Node.js应用的Web框架,可以用来快速开发API、Web、后端服务等各种应用。本文档介绍了如何开发一个简单的Express应用,并将其部署至Web+。 前提条件 已配置好了Node.js的开发环境,相关操作请参见设置Node.js开发环境。 步骤一:安装express-generator 本文将使用express-generator来快速生成Express项目。请执行以下命令安装express-generator。 npm install -g express-generator 说明 如果您安装了Node.js 8.2.0及以上版本,可跳过此步在创建应用时直接使用npx命令运行express-generator。 步骤二:创建应用 执行以下命令创建名为webplus-express-app的应用。 express webplus-express-app 说明 如果您安装了Node.js 8.2.0及以上版本,可执行npx express-generator webplus-express-app命令直接运行express-generator而无需安装。 执行上述命令会创建一个名为webplus-express-app的目录,结构如下: webplus-express-app/ ├── app.js ├── bin │ └── www ├── package.json ├── public │ ├── images │ ├── javascripts │ └── stylesheets │ └── style.css ├── routes │ ├── index.js │ └── users.js └── views ├── error.jade ├── index.jade └── layout.jade 步骤三:安装本地依赖 执行以下命令进入创建好的应用目录。 cd webplus-express-app 执行以下命令安装本地依赖。 npm install 步骤四:在本地运行应用 执行以下命令在本地运行应用,以验证其是否可以正常工作。 npm start 当您看到命令行页面上显示以下信息时,则表示应用启动成功。 webplus-express-app@0.0.0 start /home/admin/webplus-express-app node ./bin/www 查看运行结果: 在浏览器中输入http://localhost:3000来访问应用。 执行curl http://localhost:3000命令,查看返回的运行结果: Express Welcome to Express 说明 为方便查看,此处对返回的信息进行了格式化,原始结果是一整行文本。 查看应用的运行结果之后,可以使用CTRL+C停止服务。 步骤五:打包应用 执行以下命令将上面生成的应用的项目工程打包。 zip -r webplus-express-app.zip . 注意 生成的部署包需包含node_modules目录,且压缩包不能包含第一级目录,打包示例如下: 步骤六:将应用部署至Web+ 登录 Web+控制台,并在页面左上角选择所需地域。 在概览页最近更新的部署环境区域的右上角单击新建。 在应用基本信息页面选择技术栈类型为Node.js,设置应用基本信息,设置完成后单击下一步。 在部署环境信息页面设置部署环境名称,部署包来源选择上传本地程序,上传您刚打包的webplus-express-app.zip,设置部署包版本后单击完成创建。 在完成创建页面单击查看该应用或完成创建可进入应用详情页面。单击部署环境名称进入部署环境详情页面,然后单击公网访问地址右侧的链接进入应用首页。 更多信息 在Web+控制台快速部署应用的视频演示请参见在Web+控制台创建应用和部署环境。 在控制台部署应用的详细配置步骤请参见部署应用。 使用CLI完成应用创建和部署的操作请参见使用CLI快速部署Java应用。 完成应用托管之后的应用的管理操作请参见应用详情概览。 管理应用所在的部署环境的操作请参见管理部署环境。

1934890530796658 2020-03-23 14:20:47 0 浏览量 回答数 0

问题

基于选择结果的基本锁定

祖安文状元 2020-01-05 14:36:02 3 浏览量 回答数 1

问题

OSS常用工具汇总

青衫无名 2019-12-01 21:58:33 1136 浏览量 回答数 0

问题

发布 Kubernetes 应用案例

猫饭先生 2019-12-01 21:03:34 1283 浏览量 回答数 0

回答

背景 AI model serving 是函数计算一个比较典型的应用场景。数据科学家训练好模型以后往往需要找软件工程师把模型变成系统或者服务,通常把这个过程称之为 model serving。函数计算无需运维和弹性伸缩的特性,正好符合数据科学家对高可用分布式系统的诉求。本文将介绍把一个 TensorFlow CharRNN 训练的自动写五言绝句古诗的模型部署到函数计算的例子。 基本上所有的 FaaS 平台为了减少平台的冷启动,都会设置代码包限制,函数计算也不例外。由于 python TensorFlow 依赖库和训练的模型的文件有数百兆,即使压缩也远超了函数计算 50M 代码包大小的限制。对于这类超大体积的文件,函数计算命令行 Fun 工具原生支持了这种大依赖部署(3.2.0 版本以上),按照向导的提示操作即可。 快速开始 1. 克隆 poetry 项目 git clone https://github.com/vangie/poetry.git 2. 安装依赖 由于训练模型的脚本比较费时,所以训练好的模型已经提前存放在 model 目录中。如果您想重新训练模型,执行 make train 即可。 $ fun install using template: template.yml start installing function dependencies without docker building poetry/poetry Funfile exist, Fun will use container to build forcely Step 1/3 : FROM registry.cn-beijing.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.7.7 ---> 373f5819463b Step 2/3 : WORKDIR /code ---> Using cache ---> f9f03330ddde Step 3/3 : RUN fun-install pip install tensorflow ---> Using cache ---> af9e756d07c7 sha256:af9e756d07c77ac25548fa173997065c9ea8d92e98c760b1b12bab1f3f63b112 Successfully built af9e756d07c7 Successfully tagged fun-cache-1b39d414-0348-4823-b1ec-afb05e471666:latest copying function artifact to /Users/ellison/poetry copy from container /mnt/auto/. to localNasDir Install Success Tips for next step Invoke Event Function: fun local invokeInvoke Http Function: fun local startBuild Http Function: fun buildDeploy Resources: fun deploy本地运行函数 执行 fun local invoke 可以在本地运行函数,正确的返回内容如下: $ fun local invoke poetry Missing invokeName argument, Fun will use the first function poetry/poetry as invokeName skip pulling image aliyunfc/runtime-python3.6:1.7.7... FunctionCompute python3 runtime inited. FC Invoke Start RequestId: b125bd4b-0d23-447b-8d8c-df36808a458b .......(省略了部分日志) 犬差花上水风,一月秋中时。 江水无人去,山山有不知。 江山一中路,不与一时还。 山水不知处,江阳无所逢。 山风吹水色,秋水入云中。 水月多相见,山城入水中。 江云无处处,春水不相归。 野寺春江远,秋风落月深。 RequestId: 938334c4-5407-4a72-93e1-6d59e52774d8 Billed Duration: 14074 ms Memory Size: 1998 MB Max Memory Used: 226 MB 4. 部署函数 通过 fun deploy 部署函数并上传函数依赖到 nas。 fun deploy fun 会自动完成依赖部署,当 fun deploy 检测到打包的依赖超过了平台限制(50M),会进入到配置向导,帮助用户自动化的配置。 image.png 选择 “Y” 之后就不需要做其他事情,等到部署完成即可。 运行远端函数 通过 fun invoke 调用远端函数(也可以通过函数计算控制台调用): $ fun invoke using template: template.yml Missing invokeName argument, Fun will use the first function poetry/poetry as invokeName ========= FC invoke Logs begin ========= 省略部分日志... Restored from: /mnt/auto/model/poetry/model-10000 FC Invoke End RequestId: c0d7947d-7c44-428e-a5a0-30e6da6d1d0f Duration: 18637.47 ms, Billed Duration: 18700 ms, Memory Size: 2048 MB, Max Memory Used: 201.10 MB ========= FC invoke Logs end ========= FC Invoke Result: 役不知此月,不是无年年。 何事无时去,谁堪得故年。 不知无限处,相思在山山。 何必不知客,何当不有时。 相知无所见,不得是人心。 不得无年日,何时在故乡。 不知山上路,不是故人人。 至此,已经将古诗创作程序成功部署到函数计算了。

1934890530796658 2020-03-27 17:26:26 0 浏览量 回答数 0

问题

阿里云大数据专业认证考试形式和试卷结构是什么?

nicenelly 2019-12-01 21:24:01 1124 浏览量 回答数 0

问题

阿里云大数据专业认证考试形式和试卷结构是什么?

nicenelly 2019-12-01 21:06:16 1447 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站