• 关于 静态化详细介绍 的搜索结果

问题

如何解决Github Pages访问太慢?

问问小秘 2020-06-29 10:52:51 0 浏览量 回答数 1

问题

使用JMeter进行性能测试? 报错

优选2 2020-06-04 18:05:04 3 浏览量 回答数 1

问题

使用JMeter进行性能测试? 400 报错

爱吃鱼的程序员 2020-06-02 13:12:16 0 浏览量 回答数 1

新用户福利专场,云服务器ECS低至102元/年

新用户专场,1核2G 102元/年起,2核4G 699.8元/年起

问题

使用JMeter进行性能测试? 400 报错

爱吃鱼的程序员 2020-05-29 17:58:44 0 浏览量 回答数 1

问题

java企业官网源码 自适应响应式 freemarker 静态引擎 SSM 框架

游客ydre72cd7ywew 2019-12-01 19:55:56 23 浏览量 回答数 0

问题

java官网源码 门户网站 自适应响应式 freemarker 静态引擎 SSM 框架

游客ydre72cd7ywew 2019-12-01 20:01:28 9 浏览量 回答数 0

回答

最佳回答:如何要问学生机能干嘛?其实学生机就是学生云服务器,也就是说,它可以干云服务器能干的所有事情。 **云服务器的用途和作用 ** - 首先如果是境外的主机,可以用来搭建不存在的东西。教程网上很多很多,这里就不赘述了。 搭建个人静态或者动态网站:对于大部分境内的性能较弱的主机,比较多的一个最初目的是搭建个人博客。我主要是借助流行的建站系统 wordpress来搭建个人网站。学习Linux相关知识局域网内网穿透:配置ngrok或者frp,实现内网穿透,访问自己没有公网ip的机器。常用的服务有windows的远程桌面,本地搭建的Web服务调试,原本用于局域网的文件系统提供给公网访问(当然可以加密访问了)。着重提下内网穿透,如果家里有NAS或者树莓派的化,可以用这个内网穿透实现很多智能化、现代化的功能。程序爬虫。主要用Python来编写爬虫程序。服务端接口开发:写APP的服务端,给自用的APP提供网络服务。我用来同步课程表和课程任务。和上面差不多,为Chrome或火狐的插件或者油猴脚本提供服务,可以极大地提升电脑的使用体验。做个人网盘:如果云服务器的硬盘容量够大,可以做个人网盘。不过鉴于低配云服务器的硬盘容量,建议使用第4点提到的内网穿透连接家立的NAS或者不常关机的电脑。做备份。手机的云空间不够用?可以尝试下自己搭建。服务器里跑的任务比较多的时候,对外暴露的端口较多,可以试下捣鼓nginx。这是一个反向代理服务器,默认监听80端口。此后,可以将nginx收到的请求转发到其他主机或者本机的其他端口上。从而可以在安全策略上关闭其他端口,提高安全性。同样是nginx,为重要的服务器提供反向代理,从而保护被代理的服务器。比如自家搭建的404桥梁。想到再补充。详细的内容如果需要的人多再详细介绍。 如果你是大学生,就选阿里云学生服务器; 阿里云学生服务器,俗称:“学生机” 故名思意,就是阿里云针对学生群体施行的特殊优惠政策。如果不是学生身份购买同等配置的1核2g内存1m宽带40GB硬盘(不限制CPU性能的),官网需要五六百一年。然后阿里云针对学生群体的学生服务器,只需要114元1年,我见到很多像我一样的大学生,甚至高中生,都在业余时间搭建了自己的私人博客,有些流量还不错。我觉得,1年的学生云服务器使用时间让我对云服务器,建网站有了更深的了解。而且我还是计算机专业的,可以用来搭建web程序,用来编程,学生服务器真是我接触云知识的入门之选。性价比也很高,毕竟学生可没有什么钱。 1:域名+学生服务器+开源建站程序(例如WordPress)=自己拥有自己的个人博客或个人网站 2:域名+学生服务器+web程序(例如Java web系统)=自己的系统演示站 成长在于你去学习新知识,敢于接触你认为陌生的领域。下面是阿里云学生的官网地址 阿里云学生机1核2G1年114元【推荐选1年】----官网地址 阿里云最新优惠产品系列汇总----官网地址

夏梦枯荣 2020-05-18 17:54:35 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档本文介绍如何在Node.js环境中快速使用OSS服务,包括查看Bucket列表、查看文件列表、上传/下载文件和删除文件。为了方便修改,本文会新建一个app.js,以下功能演示代码都写在这个文件中。 安装SDK在工作目录安装ali-oss: npm install ali-oss 使用同步方式由于SDK基于ES6开发,采用async/await能够异步编程同步化。 使用异步方式为了支持callback的使用方式,SDK同时也提供了异步的基于Promise的接口,使用上类似callback,具体可参考这篇博客。 下面的文档将以同步的方式为例。 初始化Client创建一个文件:app.js并写入下面的内容: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>'}); 其中region参数是指您申请OSS服务时的区域,例如oss-cn-hangzhou。完整的区域列表可以在OSS服务节点查看。 如果所使用的endpoint不在上述列表中,可以通过以下参数指定endpoint: internal: 配合region使用,如果指定internal为true,则访问内网节点secure: 配合region使用,如果指定了secure为true,则使用HTTPS访问endpoint: 例如http://oss-cn-hangzhou.aliyuncs.com,如果指定了endpoint,则region会被忽略,endpoint可以指定HTTPS,也可以是IP形式cname: 配合endpoint使用,如果指定了cname为true,则将endpoint视为用户绑定的自定义域名bucket: 如果未指定bucket,则进行Object相关的操作时需要先调用useBucket接口(只需要调用一次)timeout: 默认为60秒,指定访问OSS的API的超时时间 查看Bucket列表在app.js末尾添加如下内容,使用listBuckets接口查看Bucket列表: async function listBuckets () { try { let result = await client.listBuckets(); } catch(err) { console.log(err) }}listBucket(); 运行并查看结果:node app.js。 查看文件列表修改app.js,使用list接口查看文件列表: client.useBucket('Your bucket name');async function list () { try { let result = client.list({ 'max-keys': 5 }) console.log(result) } catch (err) { consol.log (err) }}list(); 使用node app.js运行并查看结果。 上传一个文件修改app.js,使用put接口上传一个文件: client.useBucket('Your bucket name');async function put () { try { let result = await client.put('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}put(); 下载一个文件修改app.js,使用get接口下载一个文件: async function get () { try { let result = await client.get('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}get(); 删除一个文件修改app.js,使用delete接口删除一个文件: async function delete () { try { let result = await client.delete('object-key'); console.log(result); } catch (err) { console.log (err); }}delete(); 了解更多 管理Bucket上传文件下载文件管理文件自定义域名绑定使用STS访问设置访问权限管理生命周期设置访问日志静态网站托管设置防盗链异常

2019-12-01 23:14:14 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档本文介绍如何在Node.js环境中快速使用OSS服务,包括查看Bucket列表、查看文件列表、上传/下载文件和删除文件。为了方便修改,本文会新建一个app.js,以下功能演示代码都写在这个文件中。 安装SDK在工作目录安装ali-oss: npm install ali-oss 使用同步方式由于SDK基于ES6开发,采用async/await能够异步编程同步化。 使用异步方式为了支持callback的使用方式,SDK同时也提供了异步的基于Promise的接口,使用上类似callback,具体可参考这篇博客。 下面的文档将以同步的方式为例。 初始化Client创建一个文件:app.js并写入下面的内容: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>'}); 其中region参数是指您申请OSS服务时的区域,例如oss-cn-hangzhou。完整的区域列表可以在OSS服务节点查看。 如果所使用的endpoint不在上述列表中,可以通过以下参数指定endpoint: internal: 配合region使用,如果指定internal为true,则访问内网节点secure: 配合region使用,如果指定了secure为true,则使用HTTPS访问endpoint: 例如http://oss-cn-hangzhou.aliyuncs.com,如果指定了endpoint,则region会被忽略,endpoint可以指定HTTPS,也可以是IP形式cname: 配合endpoint使用,如果指定了cname为true,则将endpoint视为用户绑定的自定义域名bucket: 如果未指定bucket,则进行Object相关的操作时需要先调用useBucket接口(只需要调用一次)timeout: 默认为60秒,指定访问OSS的API的超时时间 查看Bucket列表在app.js末尾添加如下内容,使用listBuckets接口查看Bucket列表: async function listBuckets () { try { let result = await client.listBuckets(); } catch(err) { console.log(err) }}listBucket(); 运行并查看结果:node app.js。 查看文件列表修改app.js,使用list接口查看文件列表: client.useBucket('Your bucket name');async function list () { try { let result = client.list({ 'max-keys': 5 }) console.log(result) } catch (err) { consol.log (err) }}list(); 使用node app.js运行并查看结果。 上传一个文件修改app.js,使用put接口上传一个文件: client.useBucket('Your bucket name');async function put () { try { let result = await client.put('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}put(); 下载一个文件修改app.js,使用get接口下载一个文件: async function get () { try { let result = await client.get('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}get(); 删除一个文件修改app.js,使用delete接口删除一个文件: async function delete () { try { let result = await client.delete('object-key'); console.log(result); } catch (err) { console.log (err); }}delete(); 了解更多 管理Bucket上传文件下载文件管理文件自定义域名绑定使用STS访问设置访问权限管理生命周期设置访问日志静态网站托管设置防盗链异常

2019-12-01 23:14:14 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档本文介绍如何在Node.js环境中快速使用OSS服务,包括查看Bucket列表、查看文件列表、上传/下载文件和删除文件。为了方便修改,本文会新建一个app.js,以下功能演示代码都写在这个文件中。 安装SDK在工作目录安装ali-oss: npm install ali-oss 使用同步方式由于SDK基于ES6开发,采用async/await能够异步编程同步化。 使用异步方式为了支持callback的使用方式,SDK同时也提供了异步的基于Promise的接口,使用上类似callback,具体可参考这篇博客。 下面的文档将以同步的方式为例。 初始化Client创建一个文件:app.js并写入下面的内容: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>'}); 其中region参数是指您申请OSS服务时的区域,例如oss-cn-hangzhou。完整的区域列表可以在OSS服务节点查看。 如果所使用的endpoint不在上述列表中,可以通过以下参数指定endpoint: internal: 配合region使用,如果指定internal为true,则访问内网节点secure: 配合region使用,如果指定了secure为true,则使用HTTPS访问endpoint: 例如http://oss-cn-hangzhou.aliyuncs.com,如果指定了endpoint,则region会被忽略,endpoint可以指定HTTPS,也可以是IP形式cname: 配合endpoint使用,如果指定了cname为true,则将endpoint视为用户绑定的自定义域名bucket: 如果未指定bucket,则进行Object相关的操作时需要先调用useBucket接口(只需要调用一次)timeout: 默认为60秒,指定访问OSS的API的超时时间 查看Bucket列表在app.js末尾添加如下内容,使用listBuckets接口查看Bucket列表: async function listBuckets () { try { let result = await client.listBuckets(); } catch(err) { console.log(err) }}listBucket(); 运行并查看结果:node app.js。 查看文件列表修改app.js,使用list接口查看文件列表: client.useBucket('Your bucket name');async function list () { try { let result = client.list({ 'max-keys': 5 }) console.log(result) } catch (err) { consol.log (err) }}list(); 使用node app.js运行并查看结果。 上传一个文件修改app.js,使用put接口上传一个文件: client.useBucket('Your bucket name');async function put () { try { let result = await client.put('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}put(); 下载一个文件修改app.js,使用get接口下载一个文件: async function get () { try { let result = await client.get('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}get(); 删除一个文件修改app.js,使用delete接口删除一个文件: async function delete () { try { let result = await client.delete('object-key'); console.log(result); } catch (err) { console.log (err); }}delete(); 了解更多 管理Bucket上传文件下载文件管理文件自定义域名绑定使用STS访问设置访问权限管理生命周期设置访问日志静态网站托管设置防盗链异常

2019-12-01 23:14:14 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档本文介绍如何在Node.js环境中快速使用OSS服务,包括查看Bucket列表、查看文件列表、上传/下载文件和删除文件。为了方便修改,本文会新建一个app.js,以下功能演示代码都写在这个文件中。 安装SDK在工作目录安装ali-oss: npm install ali-oss 使用同步方式由于SDK基于ES6开发,采用async/await能够异步编程同步化。 使用异步方式为了支持callback的使用方式,SDK同时也提供了异步的基于Promise的接口,使用上类似callback,具体可参考这篇博客。 下面的文档将以同步的方式为例。 初始化Client创建一个文件:app.js并写入下面的内容: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>'}); 其中region参数是指您申请OSS服务时的区域,例如oss-cn-hangzhou。完整的区域列表可以在OSS服务节点查看。 如果所使用的endpoint不在上述列表中,可以通过以下参数指定endpoint: internal: 配合region使用,如果指定internal为true,则访问内网节点secure: 配合region使用,如果指定了secure为true,则使用HTTPS访问endpoint: 例如http://oss-cn-hangzhou.aliyuncs.com,如果指定了endpoint,则region会被忽略,endpoint可以指定HTTPS,也可以是IP形式cname: 配合endpoint使用,如果指定了cname为true,则将endpoint视为用户绑定的自定义域名bucket: 如果未指定bucket,则进行Object相关的操作时需要先调用useBucket接口(只需要调用一次)timeout: 默认为60秒,指定访问OSS的API的超时时间 查看Bucket列表在app.js末尾添加如下内容,使用listBuckets接口查看Bucket列表: async function listBuckets () { try { let result = await client.listBuckets(); } catch(err) { console.log(err) }}listBucket(); 运行并查看结果:node app.js。 查看文件列表修改app.js,使用list接口查看文件列表: client.useBucket('Your bucket name');async function list () { try { let result = client.list({ 'max-keys': 5 }) console.log(result) } catch (err) { consol.log (err) }}list(); 使用node app.js运行并查看结果。 上传一个文件修改app.js,使用put接口上传一个文件: client.useBucket('Your bucket name');async function put () { try { let result = await client.put('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}put(); 下载一个文件修改app.js,使用get接口下载一个文件: async function get () { try { let result = await client.get('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}get(); 删除一个文件修改app.js,使用delete接口删除一个文件: async function delete () { try { let result = await client.delete('object-key'); console.log(result); } catch (err) { console.log (err); }}delete(); 了解更多 管理Bucket上传文件下载文件管理文件自定义域名绑定使用STS访问设置访问权限管理生命周期设置访问日志静态网站托管设置防盗链异常

2019-12-01 23:14:14 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档本文介绍如何在Node.js环境中快速使用OSS服务,包括查看Bucket列表、查看文件列表、上传/下载文件和删除文件。为了方便修改,本文会新建一个app.js,以下功能演示代码都写在这个文件中。 安装SDK在工作目录安装ali-oss: npm install ali-oss 使用同步方式由于SDK基于ES6开发,采用async/await能够异步编程同步化。 使用异步方式为了支持callback的使用方式,SDK同时也提供了异步的基于Promise的接口,使用上类似callback,具体可参考这篇博客。 下面的文档将以同步的方式为例。 初始化Client创建一个文件:app.js并写入下面的内容: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>'}); 其中region参数是指您申请OSS服务时的区域,例如oss-cn-hangzhou。完整的区域列表可以在OSS服务节点查看。 如果所使用的endpoint不在上述列表中,可以通过以下参数指定endpoint: internal: 配合region使用,如果指定internal为true,则访问内网节点secure: 配合region使用,如果指定了secure为true,则使用HTTPS访问endpoint: 例如http://oss-cn-hangzhou.aliyuncs.com,如果指定了endpoint,则region会被忽略,endpoint可以指定HTTPS,也可以是IP形式cname: 配合endpoint使用,如果指定了cname为true,则将endpoint视为用户绑定的自定义域名bucket: 如果未指定bucket,则进行Object相关的操作时需要先调用useBucket接口(只需要调用一次)timeout: 默认为60秒,指定访问OSS的API的超时时间 查看Bucket列表在app.js末尾添加如下内容,使用listBuckets接口查看Bucket列表: async function listBuckets () { try { let result = await client.listBuckets(); } catch(err) { console.log(err) }}listBucket(); 运行并查看结果:node app.js。 查看文件列表修改app.js,使用list接口查看文件列表: client.useBucket('Your bucket name');async function list () { try { let result = client.list({ 'max-keys': 5 }) console.log(result) } catch (err) { consol.log (err) }}list(); 使用node app.js运行并查看结果。 上传一个文件修改app.js,使用put接口上传一个文件: client.useBucket('Your bucket name');async function put () { try { let result = await client.put('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}put(); 下载一个文件修改app.js,使用get接口下载一个文件: async function get () { try { let result = await client.get('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}get(); 删除一个文件修改app.js,使用delete接口删除一个文件: async function delete () { try { let result = await client.delete('object-key'); console.log(result); } catch (err) { console.log (err); }}delete(); 了解更多 管理Bucket上传文件下载文件管理文件自定义域名绑定使用STS访问设置访问权限管理生命周期设置访问日志静态网站托管设置防盗链异常

2019-12-01 23:14:13 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档本文介绍如何在Node.js环境中快速使用OSS服务,包括查看Bucket列表、查看文件列表、上传/下载文件和删除文件。为了方便修改,本文会新建一个app.js,以下功能演示代码都写在这个文件中。 安装SDK在工作目录安装ali-oss: npm install ali-oss 使用同步方式由于SDK基于ES6开发,采用async/await能够异步编程同步化。 使用异步方式为了支持callback的使用方式,SDK同时也提供了异步的基于Promise的接口,使用上类似callback,具体可参考这篇博客。 下面的文档将以同步的方式为例。 初始化Client创建一个文件:app.js并写入下面的内容: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>'}); 其中region参数是指您申请OSS服务时的区域,例如oss-cn-hangzhou。完整的区域列表可以在OSS服务节点查看。 如果所使用的endpoint不在上述列表中,可以通过以下参数指定endpoint: internal: 配合region使用,如果指定internal为true,则访问内网节点secure: 配合region使用,如果指定了secure为true,则使用HTTPS访问endpoint: 例如http://oss-cn-hangzhou.aliyuncs.com,如果指定了endpoint,则region会被忽略,endpoint可以指定HTTPS,也可以是IP形式cname: 配合endpoint使用,如果指定了cname为true,则将endpoint视为用户绑定的自定义域名bucket: 如果未指定bucket,则进行Object相关的操作时需要先调用useBucket接口(只需要调用一次)timeout: 默认为60秒,指定访问OSS的API的超时时间 查看Bucket列表在app.js末尾添加如下内容,使用listBuckets接口查看Bucket列表: async function listBuckets () { try { let result = await client.listBuckets(); } catch(err) { console.log(err) }}listBucket(); 运行并查看结果:node app.js。 查看文件列表修改app.js,使用list接口查看文件列表: client.useBucket('Your bucket name');async function list () { try { let result = client.list({ 'max-keys': 5 }) console.log(result) } catch (err) { consol.log (err) }}list(); 使用node app.js运行并查看结果。 上传一个文件修改app.js,使用put接口上传一个文件: client.useBucket('Your bucket name');async function put () { try { let result = await client.put('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}put(); 下载一个文件修改app.js,使用get接口下载一个文件: async function get () { try { let result = await client.get('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}get(); 删除一个文件修改app.js,使用delete接口删除一个文件: async function delete () { try { let result = await client.delete('object-key'); console.log(result); } catch (err) { console.log (err); }}delete(); 了解更多 管理Bucket上传文件下载文件管理文件自定义域名绑定使用STS访问设置访问权限管理生命周期设置访问日志静态网站托管设置防盗链异常

2019-12-01 23:14:13 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档本文介绍如何在Node.js环境中快速使用OSS服务,包括查看Bucket列表、查看文件列表、上传/下载文件和删除文件。为了方便修改,本文会新建一个app.js,以下功能演示代码都写在这个文件中。 安装SDK在工作目录安装ali-oss: npm install ali-oss 使用同步方式由于SDK基于ES6开发,采用async/await能够异步编程同步化。 使用异步方式为了支持callback的使用方式,SDK同时也提供了异步的基于Promise的接口,使用上类似callback,具体可参考这篇博客。 下面的文档将以同步的方式为例。 初始化Client创建一个文件:app.js并写入下面的内容: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>'}); 其中region参数是指您申请OSS服务时的区域,例如oss-cn-hangzhou。完整的区域列表可以在OSS服务节点查看。 如果所使用的endpoint不在上述列表中,可以通过以下参数指定endpoint: internal: 配合region使用,如果指定internal为true,则访问内网节点secure: 配合region使用,如果指定了secure为true,则使用HTTPS访问endpoint: 例如http://oss-cn-hangzhou.aliyuncs.com,如果指定了endpoint,则region会被忽略,endpoint可以指定HTTPS,也可以是IP形式cname: 配合endpoint使用,如果指定了cname为true,则将endpoint视为用户绑定的自定义域名bucket: 如果未指定bucket,则进行Object相关的操作时需要先调用useBucket接口(只需要调用一次)timeout: 默认为60秒,指定访问OSS的API的超时时间 查看Bucket列表在app.js末尾添加如下内容,使用listBuckets接口查看Bucket列表: async function listBuckets () { try { let result = await client.listBuckets(); } catch(err) { console.log(err) }}listBucket(); 运行并查看结果:node app.js。 查看文件列表修改app.js,使用list接口查看文件列表: client.useBucket('Your bucket name');async function list () { try { let result = client.list({ 'max-keys': 5 }) console.log(result) } catch (err) { consol.log (err) }}list(); 使用node app.js运行并查看结果。 上传一个文件修改app.js,使用put接口上传一个文件: client.useBucket('Your bucket name');async function put () { try { let result = await client.put('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}put(); 下载一个文件修改app.js,使用get接口下载一个文件: async function get () { try { let result = await client.get('object-key', 'local file'); console.log(result); } catch (err) { consol.log (err); }}get(); 删除一个文件修改app.js,使用delete接口删除一个文件: async function delete () { try { let result = await client.delete('object-key'); console.log(result); } catch (err) { console.log (err); }}delete(); 了解更多 管理Bucket上传文件下载文件管理文件自定义域名绑定使用STS访问设置访问权限管理生命周期设置访问日志静态网站托管设置防盗链异常

2019-12-01 23:14:14 0 浏览量 回答数 0

回答

详细信息 过期时间控制支持三个维度,优先级依次为 控制台设置 > 源站Header设置 > Cache的默认策略设置。 关于控制台设置的详细说明,请参见设置缓存过期时间。 关于源站Header设置的详细说明,请参见WebServer缓存策略设置。 Cache的默认策略是在用户既没有在控制台设置过期时间,也没有在源站设置过期时间的情况下,会执行一个默认的全局策略,既保证加速效果,又避免因为动态的文件缓存导致的问题。关于Cache的默认策略设置的详细说明,请参见CDN节点默认缓存策略。 WebServer缓存策略设置 设置IIS缓存策略详细操作,请参见如何设置IIS缓存策略。 设置Nginx缓存策略详细操作,请参见如何设置Nginx缓存策略。 设置Apache缓存策略详细操作,请参见如何设置Apache缓存策略。 如何设置IIS缓存策略 设置IIS缓存策略的操作步骤如下。 因为整体的站点只对.html、.jpg、.png、.gif、.apk等文件进行缓存,首先将整个站点设置成不缓存,具体操作如下。 打开IIS信息管理器,右键单击服务网站a.cc.com的属性,本文以a.cc.com服务网站为例。 单击 HTTP头,勾选 启用内容过期,选择 立即过期,单击 确定。 上述设置后,整个网站的内容都不会被CDN缓存,接着设置.html、.jpg、.png、.gif、.apk等文件类型的缓存策略。 不同扩展名的文件都单独放在一个特定的目录下面,且该目录没有其他扩展名的文件。针对这个扩展名所在的整个目录设置缓存的时间。具体操作如下。 打开IIS信息管理器。 展开网站a.cc.com的目录,选中需要设置缓存时间的目录,如所有jpg文件都存储在img这个目录下,右键单击该目录并选择属性,单击 HTTP头。 注:由于步骤1已经设置整个网站不缓存,所以此时HTTP头选项下的缓存设置和步骤1中的相同。 选择 此时间段后过期,设置具体的过期时间,单击 确定。 特定扩展名的文件不是统一放在唯一的目录,而是和其他扩展名文件混合放在一个目录下。以bin目录下的test.jpg为例,介绍缓存设置的操作步骤。 注:为了避免针对特定扩展名的文件进行逐个的配置,需要设置IIS支持通配符。 设置IIS支持通配符。 打开IIS信息管理器,右键单击服务网站a.cc.com的属性,选择主目录,单击 配置。 在弹出的对话框中,单击 映射,单击 插入。 在弹出的对话框中,选择C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll文件,单击 确定。 注:不勾选确认文件是否存在。 分别单击两个对话框中的 确定,完成IIS通配符的支持配置。 在bin目录下,选择test.jpg并右键单击,选择 属性。 单击 HTTP头。 选择 此时间段后过期,设置具体的过期时间,单击 确定。 设置bin目录下其他相同扩展名文件的缓存时间,此时需要修改IIS的配置文件。具体操作如下。 注:修改文件,需要在服务中关闭IIS admin Service。 用记事本程序打开IIS的配置文件,配置文件在C:\WINDOWS\system32\inetsrv\MetaBase.xml(IIS6的设置)目录下。 查找/bin/test.jpg,找到bin目录下test.jpg文件的缓存设置。 将test.jpg改为*.jpg并保存。 其他扩展名的文件缓存设置操作同上。 如何设置Nginx缓存策略 HTTP头处理模块(HTTP Headers)允许设置任意的HTTP头,您可以使用add_header和expires命令设置Nginx缓存策略。 指令 语法 默认值 使用字段 add_header add_header name value none http server location expires 注:这个指令控制是否在应答中标记一个过期时间以及如何标记。 expires [time|epoch|max|off] 说明 Time:控制Cache-Control的值,负数表示no-cache。 epoch:将Expires头设置为1 January, 1970 00:00:01 GMT。 max:将Expires头设置为31 December 2037 23:59:59 GMT,将Cache-Control最大化到10年。 off:将禁止修改头部中的Expires和Cache-Control字段。 expires off http server location 通过expires设置,示例如下。 设置PHP的文件类型过期时间,设置为1小时。 设置成功后,系统显示类似如下。 设置PHP的文件类型为no-cache,Cache服务器不缓存。 设置成功后,系统显示类似如下。 通过add_header设置,以动态的PHP文件设置为不缓存为例。 location ~ .*.php$ { if ($request_uri !~ ^/dynamicimg/) { add_header Cache-Control "no-cache"; add_header Pragma no-cache; } } 如何设置Apache缓存策略 您可以通过Apache的mod_expires和mod_headers两个模块设置Apache的缓存策略。 mod_expires模块 mod_expires模块允许通过配置文件控制HTTP的Expires和Cache-Control头内容,它的主要作用是自动生成页面头部信息中的Expires标签和Cache-Control标签,从而降低客户端的访问频率和次数,达到减少不必要流量和增加访问速度的目的。 mod_expires是Apache众多模块中配置比较简单的一个,它一共包括三条指令。 ExpiresActive指令:打开或关闭产生Expires:和Cache-Control:头的功能。 ExpiresByType指令:指定MIME类型的文档(如text或html)的过期时间。 ExpiresDefault指令:默认所有文档的过期时间。 过期时间的写法如下。 "access plus 1 month" "access plus 4 weeks" "now plus 30 days" "modification plus 5 hours 3 minutes" A2592000 M604800 注: access、now和A这三种写法的意义相同,都是指过期时间从访问时开始计算。 modification和M的意义相同,指过期时间从被访问文件的最后修改时间开始计算。 本种写法只对静态文件起作用,对于由脚本生成的动态页面无效。配置实例如下。 ExpiresActive On(开启mod_expires功能) ExpiresDefault "access plus 6 months"(默认的过期时间是6个月) ExpiresByType image/* "access plus 10 years"(图片的文件类型缓存时间为10年) ExpiresByType text/* "access plus 10 years"(文本类型缓存时间为10年) ExpiresByType application/* "access plus 30 minutes"(application文件类型缓存30分钟) 验证结果如下,image/jpeg的缓存时间为315360000s(10年)。 如果将image/jpeg设置为不缓存,即将max-age设置为0s。 #ExpiresByType image/* "access plus 10 years" ExpiresByType image/* A0 系统显示类似如下。 mod_headers模块 # YEAR Header set Cache-Control "max-age=2592000" # WEEK Header set Cache-Control "max-age=604800″ # NEVER CACHE Header set Expires "Thu, 01 Dec 2003 16:00:00 GMT" Header set Cache-Control "no-store, no-cache, must-revalidate" Header set Pragma "no-cache" CDN节点默认缓存策略 如下为CDN节点的默认缓存策略。 提示: 因为网站开发及其相关技术人员更清楚自身网站的业务逻辑、静态和动态因素,所以建议您通过控制台根据文件类型和文件所在目录,设置缓存时间。详细说明,请参见设置缓存过期时间。 如果您已经配置了缓存策略,那么Cache的默认缓存策略不生效。 默认情况下,CDN节点将根据公式计算出默认的缓存时间。为了便于理解,此处将介绍默认缓存时间的计算公式和相关示例。 计算公式。该公式分为如下三个步骤。 注:缓存时间为t,单位为秒(s);Curtime为当前时间,Last_Modified为源站的Last-Modified响应头。 计算t1的值。 t1 = (Curtime - Last_Modified) * 0.1 将上一步计算的t1之与10进行比较,取最大值为t2。 t2 = max(10,t1) 通过上一步计算的t2值与3600进行比较,取最小值为t,则t为缓存时间。 t = min(t2,3600) 示例如下。 当对象的Last-Modified为20140801 00:00:00,当前时间Curtime为20140801 00:01:00, 则t1=(Curtime-Last_modified)*0.1=6s,t2=max(10,t1)=10s,t=min(t2,3600)=10s,那么缓存时间为10s。 当对象的Last-Modified为20140801 00:00:00,当前时间Curtime为20140802 00:00:00,则t1=(Curtime-Last_modified)*0.1=8640s,t2=max(10,t1)=8640s,t=min(t2,3600)=3600s,那么缓存时间为3600s。 当对象的Last-Modified为20140801 00:00:00,当前时间Curtime为20140801 00:10:00,则t1=(Curtime-Last_modified)*0.1=60s,t2=max(10,t1)=60s,t=min(t2,3600)=60s,那么缓存时间为60s。 如果源站没有Last-Modified响应头,但有ETag,则该对象极有可能是静态资源,将其默认缓存时间设置为dft_expires指令配置的最小值。 如果源站没有Last-Modified响应头,也没有ETag,则认为该对象为动态内容,将其默认缓存时间设置为0,每次都回源。

保持可爱mmm 2020-03-30 15:03:50 0 浏览量 回答数 0

回答

媒体Bucket设置 1.1 媒体Bucket的概念 媒体Bucket是视频点播服务中的重要概念,视频点播中的资源均存放在OSS的Bucket中,而该Bucket需要在视频点播服务中设置为媒体Bucket,视频点播方可操作对应bucket的资源。因此开通视频点播服务后,用户首先需要初始化媒体库中的输入输出Bucket。 下图即是媒体Bucket的设置界面,其中包括输入媒体Bucket和输出媒体Bucket。输入媒体Bucket指的是保存工作流输入的原始视频的Bucket,而输出Bucket指的是工作流输出媒体资源存放的Bucket。 1 注意事项: 输入和输出媒体Bucket必须是不一致的,即同一个Bucket不能既是输入媒体Bucket,也是输出媒体Bucket; 输入和输出媒体Bucket是区分地域的。如上图中所述,不同数据中心会分别有对应的媒体Bucket列表。 1.2 媒体Bucket的操作 媒体Bucket现在仅支持增加功能,暂时不支持删除、修改等功能。添加某个Bucket为媒体Bucket可以参考下图。如果用户在该数据中心已有Bucket并希望创建为媒体Bucket的话可以直接在列表中勾选即可,如果用户还没有该数据中心的Bucket的话可以点击“新建”并创建Bucket。(注意:Bucket名称具有全局唯一性,所创建的Bucket名称必须是所有用户没有创建过的名称) 2 转码、水印模板设置 2.1 转码、水印模板的概念 视频点播工作流的最核心功能点就是对输入视频执行转码等操作,转码和水印都是需要根据功能模板进行转码或水印。其中转码模板包括:预置模板和自定义模板;预置模板是媒体转码提供的模板,用户可以在工作流中直接引用该模板,而自定义模板则是用户根据业务要求自行创建模板并配置模板参数,其使用方法与预置模板方法一致。水印模板则定义转码过程中添加水印的位置、宽高等信息,水印模板仅有用户自定义的一种类型。下图即是转码模板和水印模板的操作界面截图。 3 4 注意事项: 转码、水印模板同样是有数据中心属性的,工作流仅能够使用同一数据中心的模板进行转码,不允许使用别的数据中心的模板。 转码、水印模板会继承媒体转码MTS中设置的模板,因此在MTS中设置的模板会自动添加在视频点播的列表,而同样视频点播列表中的模板也会同步到MTS的模板中。 系统提供的预置模板包括预置智能模板和预置静态模板,其中智能模板中的很多参数均是一个范围,工作流会在智能模板之前添加分析作业,分析作业会根据用户的输入视频文件确定模板参数的选取,另外分析作业也会判断该文件是否适合于该智能模板,如果不适合即跳过转码任务。而静态模板中的参数均是固定的。详细的介绍建议参考:【预置模板】。 2.2 转码、水印模板的操作 转码和水印模板支持新增、修改以及删除功能。并且该操作在媒体转码MTS或者视频点播的控制台上操作均生效的。 1) 新增操作 在转码模板界面点击“新建转码模板”即可通过四步创建完成。 选择输出格式:主要设置转码模板的名称以及输出视频文件的封装格式,操作界面如下图。 5 配置视频参数:这里设置媒体中视频资源具体的编码相关的设置,包括编码格式、编码级别、码率、质量控制因子等参数,所有视频参数均为可选设置,如果均为设置的话会按照系统的默认设置进行转码(注意这里不设置并不会按照原视频参数输出),其中的“禁用视频”会不输出媒体中的视频流信息,仅保存音频流信息。关于详细参数介绍请参考:【视频参数】。具体设置如下图。 6 配置音频参数:这里设置媒体中的音频格式参数,包括编码格式、采样率、输出码率和声道数。同样这里也会有默认参数,其中的“禁用音频”则不会输出音频流信息,这里参数的意义请参考【音频参数】,操作页面如下图。 7 配置封包参数:主要是针对于m3u8输出格式的设置,由于m3u8其实是TS文件的索引文件,因此用户可以设置m3u8中的TS文件是多长时间一个分片,操作界面如下图。 8 水印模板的设置主要包括模板名称、水印宽高、水印位置以及偏移量,操作页面如下图所示。 9 2) 更新、删除操作 视频点播控制台中对转码、水印模板均提供了“编辑”和“删除”按钮,用户点击对应的按钮即可对模板进行更新和删除操作。 10 管道设置 视频点播的管道功能继承自媒体转码MTS的管道功能,该功能是结合消息服务MNS实现将工作流的执行状态的消息发送给用户,用户应用端可以通过MNS的队列模式或者通知模式接收工作流的执行进度做不同逻辑的处理。 设置管道主要包括以下步骤: 在视频点播控制台中查看管道是否启用中,操作页面如下图,如果管道状态为使用中即说明正常。(注意管道同样有数据中心的属性,同一账号不同的数据中心对应的管道ID不一致) 11 在消息服务MNS中创建该数据中心接收消息的队列或者主题,如下图。这里的通知即是与MNS中的主题相对应。 12 在工作流编辑过程中,可以在输入中配置消息,这里可以将之前在MNS中配置的队列和主题配置到这里,这样在工作流开始和结束的时候会分别给MNS中发送一条消息,用户通过该消息获知该工作流执行实例已经开始执行和执行实例已经执行完成。 13

保持可爱mmm 2020-03-30 11:58:29 0 浏览量 回答数 0

回答

Logistics Sci—Tech No.10,2008 · 军事物流· 物流科技2008年第1O期 摘 要:现代军事物流是信息化战争后勤保障的重要支 撑。随着信息技术的不断发展, 卫星定位系统逐渐应用于军 事物流领域,成为现代军队战斗力的倍增器。文章介绍了卫 星定位系统概况, 阐述了卫星定位系统在军事物流领域的应 用现状,对军事物流领域应用卫星定位系统的前景及思路进 行了探讨。 关键词:卫星定位系统;军事物流;应用 中图分类号:E075 文献标识码:A 文章编号:1002—3100 f2008) 10—0071—03 Abstract: Modern military logistics is one of the important pans of logistics under informationization war. Nowadays, satellite positioning system is applied in the field of military logistics gradually with the development of information technology. This paper introduces the general situation of satellite positioning system,analyses its current and future application in the field of military logistics, discusses the development ideaS of applying satellite positioning system in the field of military logistics. Key words:satellite positioning sy stem;military logistics;application 军事物流是指军事物资经由筹措、运输、储存、包装、维修保养、配送等环节,从供应地向部队用户有序流动的过程ll】。 卫星定位系统作为当今最先进的信息设施之一,是提高军事物流信息化建设水平,增强部队战斗力不可缺少的技术工具和手段 。 在现代军事物流活动中,重视这~ 技术的创新和推广应用,将快速实现对军事物流的实时监控,从而有效提高信息化战争的后 勤保障效能 1 卫星定位系统概况 卫星定位系统是利用多颗人造地球卫星、地面控制设备和信号接收设备,对地面静态或动态目标进行定位和导航的系统。 目前,全球正在运行或研制中的卫星定位系统有美国全球定位系统(Global Positioning System.GPS)、俄罗斯全球卫星导航系 统(GLONASS)、欧盟伽利略导航卫星系统计划(GALILEO)和中国“北斗一号” 卫星导航定位系统。 GPS是美国军方20世纪70年代研制的军民两用卫星定位系统,军用加密,民用降低定位精度后在全球使用,在用户数量 上处于霸主地位。GLONASS是由原苏联(现由俄罗斯)国防部独立研制和控制的第二代军用卫星导航系统, 其建立目的主要 是避免在军事上受制于美国。由于种种原因, 目前处于“半可用”状态,市场中GLONASS设备极少,产品多是内置GLONASS 和GPS两种接收装置, 以提高精度和可用性。同样出于避免受制于美国的目的.欧盟2003年也开始了GALILEO计划.建造世 界上第一个非军方控制和管理的民用』J星导航定位系统.预计2010年正式投入商业运行 这3个系统都是全球卫星导航定位 系统,导航范围覆盖全球。中国“北斗一号” 系统则是覆盖我国本土的区域导航定位系统, 目前拥有5颗导航卫星,除具有导 航功能外,还具有短报文通信和精密授时功能。在2008年南方抗击雨雪冰冻和四川特大地震灾害中初露锋芒.在北京奥运会 期间将为交通调度和场馆监控提供服务。 GPS导航系统是被动式伪码单向测距三维导航,采用的是无源定位。定位数据由用户设备独立解算, 因此不能提供通讯服 务。 “北斗” 系统是主动式双向测距二维导航,采用的是有源定位.定位数据由地面控制中心解算后提供给用户,用户需要通 过地面中心站联系及地面中心站的传输;因此可以提供通讯服务,通讯不必通过其他的通讯卫星.实现了一星多用。 GPS、GLONASS、GA[ ILEO和“北斗” 系统对比见表1 2 卫星定位系统在军事物流领域的应用现状 卫星定位系统的建立源于军事目的,美国GPS在近几场局部战争中应用于指挥控制、兵力投送、精确制导、目标侦察、战 场救援、军事物流等各个方面,成为美军战斗力的倍增器。尤其在伊拉克战争中,超大量战争物资运输保障,战时补给,大兵 团诸军兵种的专用装备保障,没有GPS 的导航和定位,军事物流则难以实现适时、快速、精确的保障,也就很难在短时间内 结束战斗并取得战斗的胜利 。近几年,我国加紧研发中国“北斗” 系统,引进对GPS的应用.逐渐将卫星定位系统应用于军 收稿日期:2008~06—24 作者简介: 白 娟(1973一),女,山东济南人,后勤指挥学院研究生五队硕士研究生,研究方向:军事物流信息化建设。 卫星定位系统在军事物流领域应用现状及前景探讨 表1 GPS、GLONASS、GALILEO和“北斗” 系统对比表 美国GPS 俄罗斯GL0NASS 欧盟GALILE0 中国“北斗” 系统 研制时间 20世纪70年代 20世纪70年代中期 1999年2月 2000生 卫星个数 28 24 30 5 轨道高度(KM) 20 186 l9 l00 23 222 36 0o0 运行周期 l1:15:44 l1:15:00 14:22:00 l1:58:00 民用单频CA码 民用单频CA码 CA码 调制码 军用双频P码 军用双频P码 P码 定位精度 CA码约l2米 水平方向约l6米 水平定位精度优于10米 约30米 P码小于10米 垂直方向约25米 覆盖范围 全球 全球 全球 中国及周边地区 主要功能 定位导航导航定位、短报文通信、 . 精密授时 定位导航,精密授时 定位导航.精密授时 精密授时 优点优点:投资小、用户设 : 全天候: 全球覆盖; 三维 由于GL0NASS卫星发 该系统提供三种导航定 备价廉 。定速定时高精度缺点: 不能覆 :快速省时高效 射的载波频率不同. 可 位信号 率: 免费信号、收 盖两极地区. 赤道附近 系统特点 : 应用广泛多功能。缺点:信 以防止整个卫星导航系 费加密信号 、号存在易损性和丢失性满足更高 定位精度差:不能满足 . 抗干扰 统同时被敌方干扰. 因 要求的收费加密信号 , 能力差高动态和保密的军事用 : 定位精度受美国军方限 而具有更强的抗干扰能 供各种不同的用户使用 户要求 . 书1 力 用户数量受一 定限制 民用领域: 用于航空/航海导航、 大地测量、石油勘探、地震测量、 由于种种原因. 目前处 野外救生、探险、森林防火、飞 于“半可用” 状态. 市 机播种、农田耕种、车辆自动导 场中GL0NASS设备极 2010年正式投入商业运 使用者基本是军队等国 应用现状 航监控、机场,港13'交通管理等诸 少, 而且多是美国产品, 行 家用户. 市面上很少有 多方面军用领域: 美军用于指挥 内置GL0NASS和GPS 北斗星的接收机出售 控制.兵力投送、精确制导、目 两种接收装置. 以提高 标侦察、战场救援、军事物流等 精度和可用性 方面 主动式双向测距二维导 定位原理 被动式伪码单向测距三维导航航。定位数据由地面控 , 定位数据由用户设备独立解算 制中心解算后提供给用 事物流领域,但仍处于初级阶段,其应用主要体现在以下几个方面 2.1 对军事物资运输的监控调度 通过将卫星定位系统的用户接收机安装在军用车辆、飞机、舰船上实现对军事物资运输的监控调度。利用卫星定位系统和 电子地图GIS可实时显示出运输工具的实际位置与轨迹,从而对其进行实时、有效的定位、监控和调度。实现方式是运输工具 通过终端接收导航定位信息,经处理后,将数据按一定格式由无线电收发机传送到指挥中心,指挥中心接收机将接收到的数据 输入计算机,经处理,在电子地图中显示运输工具和物资位置。 2.2 对军事运输路线的导航规划 选择正确、便捷的运输路线,是实现军事物流快速保障的前提条件。运用卫星定位系统的导航规划功能则充分满足了这一 需求。卫星导航系统的路线规划功能包括自动、手动和指令式3种。自动式路线规划是由驾驶员确定起点和终点,由计算机软 件按照要求自动设计最佳路线。手动式路线规划是驾驶员根据自己的目的地设计起点和终点等,系统在电子地图上设计路线, 同时显示运行途径和方向。指令式路线规划是指指挥中心对行驶站点的时间和路线能作出有效反应,提出路线的规划,并给运 输工具发出导航指令。实现方式是将卫星定位终端与计算机相连接,实现数据的实时传输,以电子地图的形式显示导航数据。 2-3 对需求信息的查询 在军事运输途中,卫星定位系统可以提供主要物标,在电子地图上根据需要进行查询,显示其位置。同时指挥中心可以利 用监测控制台对所在位置进行查询,车辆及物资信息则以数字形式在指挥中心的地图上显示出来。此外,利用卫星定位系统记 录和储存保障物资详细的运输内容和信息,消除了很多需要人工处理的环节,使得整个军事物流系统中所有程序及信息系统实 现信息传输的快速、准确、一致。 2 4 对险情、事故的紧急救援 72 {) ij¨P S t ~1 t lj 20~)g.{O 卫星定位系统在军事物流领域应用现状及前景探讨 通过卫星系统定位和监控管理系统可以对遇有险情或发生事故的地方进行紧急援助。监控台的电子地图显示求助信息和报 警目标,规划最优援助方案,并以报警声光提醒监控人员进行应急处理。我国自主研制的“北斗一号”卫星定位系统在四JIl汶 JIl地震救援中不仅实时监测到了救援部队的行进状态,而且在通信中断的情况下充分发挥了其短报文通信的功能,保障了救援 的顺利展开。 3 卫星定位系统在军事物流领域的应用前景 3.1 应用于建立网络化军事物流保障体系 军事物流保障网络化是信息化条件下一体化联合作战的要求,是指通过多种信息技术将各个物资保障网点(如物流中心、 后方基地、仓库等)集成为军事物流保障网,实现物流配送实体网络和信息网络的“无缝链接”,从而在战争中以实时的快速 反应、精确的投向投量和灵敏高效的指挥调度实现适时、适地、适量的后勤保障。卫星定位系统在军事物流网络化建设中具有 不可替代的作用,主要体现在功能多、精度高、覆盖面广,是构建网络的最佳技术设施和应用平台; 二是构筑在卫星定位系 统的网络公共平台,具有开放度高、资源共享程度高等优点,无地域性限制的信息获取,提高了定位系统的利用率。 3.2 应用于军事物流资产可视化管理 信息化条件下,战场透明度越来越高,物资储存和运输的可见性变得至关重要。物流资产可视化管理是依赖计算机技术、 网络技术、数据库技术、自动识别技术、卫星定位技术等多种信息技术,实现物资在储、在运、在处理全过程的数据跟踪可 视.使得部队指挥官可以不问断、可视化地掌握全部后勤资源的动态情况,全程跟踪“人员流”、 “装备流” 和“物资流”,并 指挥和控制其接收、分发和调换。在运资产通常是装载于某种运输工具,如火车、飞机、轮船、汽车等。实现在运资产可视 化,首先要掌握运输工具的实时位置,而掌握移动中的运输工具的实时位置离不开卫星定位系统。卫星定位系统在军事物流资 产可视化的应用,集中在两个主要方面:其~ 。卫星定位系统用于提供运输工具的位置数据。其二,卫星通信可使控制站和驾 驶员实现双向信息交流。有效运用卫星定位系统,形成有力的统一组织指挥中心,能够提高物流管理的透明度,为优质、高效 的物流保障提供坚实的技术平台。 3-3 应用于实现精确主动配送式保障模式 精确主动配送式保障是指在精确预测部队需求的前提下,打破过去那种逐级前送、被动等待的后勤保障运行机制,通过将 所需物资主动配送到战斗单位乃至士兵,使补给速度发生质的变化,是现代化军事物流保障模式的研究方向。物流配送的过程 是实物的空间位置转移过程,在物流配送过程中,涉及到货物的运输、仓储、装卸、送递等处理环节,对各个环节涉及的问题 如运输路线的选择、仓库位置的选择、仓库的容量设置、合理装卸策略、运输车辆的调度和投递路线的选择等进行有效的管理 和决策分析将有助于物流配送有效地利用现有资源, 降低消耗,提高效率。卫星定位系统解决了物流配送过程中运输车辆调度 和投递路线选择、精确定位部队用户等诸多问题,有利于提高物资的补给速度,从而实现精确主动配送式保障。 4 军事物流领域应用卫星定位系统的发展思路 目前.卫星定位系统在军事物流信息化建设的应用基本上还处于起步阶段,要实现这项技术的全面推广和运用.建立适应 我军后勤发展的军事物流系统,可以从以下几个方面着手: (1)加强卫星定位系统在军事物流领域推广应用的组织领导。由总部牵头统一组织规划、统一技术体制、统一信息标准、 统一软件开发,并与作战指挥系统兼容,从研究开始就杜绝卫星定位系统在军事物流领域应用中各自为政、互不统一、缺乏系 统集成等问题的出现。再就是加强军地合作,把军队的资源优势和地方的技术优势整合起来,共同研制、发展新技术,以保证 其在军事物流领域应用的有效性 (2)开展规划研究、突破关键技术。从顶层对研究项目进行规划设计,并根据我军现状确定当前及今后一段时期内卫星 定位系统在军事物流领域应用的重点和难点。必须立足于新技术引进后的自主开发和创新,形成自己的技术.组织科研力量协 力攻关,力争解决自主技术与外军技术相结合、抗干扰、精度限制、加密技术等关键难题,为卫星定位系统在军事物流信息化 建设中的进一步应用做好准备。 (3)研发基于卫星定位系统等先进信息技术的军事物流应用平台, 建设相关实验室,着眼未来信息化战争实际.跟踪国 内外、军内外卫星定位系统应用研究发展动态,积极探索卫星定位系统在我军军事物流领域的应用研究.以带动全军后勤信息 化的发展。 (4)在后勤保障部队试点后推广。选择部分后勤保障部队进行实验试点,使得卫星定位系统的应用真正与部队建设的实 际结合起来,通过解决实际中遇到的各种问题,不断完善卫星定位系统在军事物流建设的应用研究。从而最大限度地挖掘整个 军事物流系统的保障潜力,使我军后勤保障实现质的飞跃。 参考文献: [1】王宗喜,徐东.军事物流学[M].北京:清华大学出版,2007. 【2] 谭建中.物流信息技术【M】.北京: 中国物资出版社,2008. 【3】戢觉佑,王京海.美军后勤理论与实践【M】.天津:海军后勤学院,2003. f4】徐卫东.GPS+GLONASS+GALILEO三星跟踪技术【JJ_全球定位系统,2006(1):16—18 { 《' ;H s ( {l 200S {f) 73

管理贝贝 2019-12-02 01:16:43 0 浏览量 回答数 0

问题

HBase运维基础——元数据逆向修复原理

pandacats 2019-12-18 15:08:35 3 浏览量 回答数 0

问题

阿里云RedHatLinux服务器安装DiscuzX3.0详细笔记适合新手因为我就是个新手

no.9527 2019-12-01 21:24:31 28702 浏览量 回答数 7

回答

优点kotlin提供了很多好的特性,比如:null安全检测,属性访问,unchecked exceptions, publication有更详细的介绍。 1.1 java 自动转换成kotlinkotlin项目开发总结有介绍如何使用,这个是有JetBrains提供的,目前已经集成到了IDEA/AS, 虽然它不是很完美(我的上篇博客也已经介绍到了),但是对比重新用Kotlin开发一个完全一样功能的类来说,可以节省不少时间。 1.2 lateinit Delegates.notNull and lazykotlin的null安全监测是个非常好的特性,但是也有有个问题,比如: var aMap: AMap? = null onCreate(){ aMap = ... aMap!!.projection .... }1234567虽然我们可以保证aMap已经在onCreate方法定义了,但是因为我们在定义aMap的时候是AMap?类型,所以在以后使用的都必须使用aMap!!来告诉编译器aMap不为null,会显得非常麻烦。幸运的是kotlin已经帮我们考虑到了应对方法 lateinit var name: Stringvar age: Int by Delegates.notNull()12通过上面两种方法,可以在定义的时候不提供初始化,可以延迟到需要的时候,但是就像我在kotlin项目开发总结说的,需要慎用,除非你能确保不会在后面遗漏掉重新赋值,否则会在运行时报空指针错误,这就浪费了kotlin的null安全监测这个非常好的特性。 lazy代理是个很好用的东西,就像下面这样的定义 val imm: InputMethodManager by lazy { getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager }123lazy后面跟着的block只会在你第一次read这个imm的时候调用,以后读取imm会直接返回block保存的值。在需要追求启动速度的APP可以很好的使用。 1.3 扩展后的collectionskotlin提供了很多对collections和iterables的扩展,具体可以看下 我写的分析和使用collections。 1.4 Named 和 默认的函数参数Named 函数参数和默认函数参数非常简单,但有时候可以帮我们省掉很多代码。特别是当构造函数有超过4个以上的参数时,可以指定默认几个默认参数,在调用的时候可以只提供一个参数。比如 class Presenter( val okhttp: OkHttp = productionOkHttp(), val picasso: Picasso = productionPicassoInstance() ) {...}1234在调用的时候,我们不提供参数,那么默认参数会被使用 var prensenter = Presenter()1 缺点虽然kotlin非常强大,但它毕竟不是完美的。它也会有一些可能未来会解决的缺点。 2.1 编译速度慢大家在使用kotlin开发项目的时候应该有注意到了,主要还是因为kotlin会自动自动生成更多的代码,比如为属性生成get/set, 对比java会存在更多的方法数量。https://youtrack.jetbrains.com/issue/KT-6246,这篇博客有做分析 2.2 annotation processing的问题我目前开发的项目使用了dagger,permissionsdispatcher,deeplinkdispatch,databinding,都需要使用kapt来做annotation proccessing,但是我已经碰到了好多次,kapt报的很奇怪的错误,有一次,我重构dagger的module时,报了一个蛋疼的问题,我以为我是dagger没用好,找了很多资料对比都没有解决,花了大概一天的时间,后面没办法只能clean project,但是奇怪的问题还在,后面我让application继承了DaggerApplication,clean下就可以。后面还是碰到好几次这样的问题,都是clean之后build就可以了,这个问题应该不只我一个人碰到,我想可能是kapt的一个bug, 我还是很相信google/JetBrains, 所以还是继续坚持使用kotlin开发项目。 2.3 没有命名空间kotlin允许定义top-level的函数和属性,比如 //demo.ktvar a = "aa"fun printlnA(){ println(a) }12345这可能是一个非常好的特性,但是也会有问题,比如在项目下面有两个甚至更多的printlnA方法,那么在调用的时候(特别是在阅读代码),很难区分方法来自哪个地方,除非你F3跳转到声明处。为了避免这个问题,你可以选择把printlnA方法移到一个object中,比如 object PrintlnHelper{ fun printlnA(){ println(a) } }12345让我们来看下kotlin和java的调用方式 //kotlinPrintlnHelper.printlnA()//javaPrintlnHelper.INSTANCE.printlnA()1234为了避免如上在Java中调用的怪怪的。。,可以使用@JvmStatic注解该方法 object PrintlnHelper{ @JvmStatic fun printlnA(){ println(a) } }123456通过上面的分析,对于有代码洁癖或者同时用Java和kotlin开发的项目,也是不够完美的,这个缺点是可以避免的,但是你需要花费一点时间去熟悉Kotlin 2.4 没有静态修饰语还是像上面的问题,如果项目同时存在kotlin和Java,而且Java需要调用kotlin代码,看代码分析问题 //Javapublic class View { public static final int VISIBLE = 0x00000000; public static final int INVISIBLE = 0x00000004; public static View inflate(Context context, int resource) {...} }123456使用kotlin使用同样的功能,如下: class View { companion object { @JvmField val VISIBLE: Int = 0x00000000 @JvmField val INVISIBLE: Int = 0x00000004 @JvmStatic fun inflate(context: Context, resource: Int) {...} } }12345678910下面是有@JvmField和没有的Java调用方式 // With annotations:View.VISIBLE;//Without annotations:View.Companion.getVISIBLE();1234其实这个问题也不是很严重的,但是对比Java还是多了个@JvmField, 但是kotlin新手或者容易忘记,使用@JvmField,这个缺点可以通过熟悉kotlin来避免 2.5 Java自动转换成kotlin带来的问题Java自动转换成kotlin是个非常好的特性,但是也会带来问题。Javadoc原来的结构会被破坏掉,静态field和方法会转换成companion object中的普通声明,如果有Java代码调用这个类,就会出现点问题,除非你后面手动给这个转换后的companion object 添加上@JvmField和@JvmStatic。这是个不小的隐患,需要特别注意下。 2.6 会增加方法数量过多的方法数量会导致编译速度变慢。kotlin通过闭包,内联函数等可以显著减少代码的总行数,但它可能也会增加编译后的方法数量。对于Android项目来说这肯定是一个不小的缺点。有很多原因会导致方法数量增加,但是最大的来源是kotlin实现属性。 kotlin不像Java可以直接访问field, 而是通过创建property的方式来访问。这是一个很好的特性,你可以自定义实现property的set/get,对比Java的set/get方法是个很大的进步。 但是这个是有代价的,对于val属性,kotlin自动生成backing field和getter函数来供java调用。public var属性会自动生成setter/getter函数。幸运的是private var属性已经有默认的setter/getter,需要不需要额外生成。所以这个时候你想想如果你定义了很多个public var和val属性,那么kotlin会帮你自动生成更多的函数,所以带来的后果就是方法数量会越来越多,导致编译速度变慢。 假如方法数量已经接近限制,不需要使用自定义setter的属性可以用@JvmField修饰,被@JvmField修饰的属性不会自动生成setter/getter函数,如下 @JvmFieldvar aMap: aMap? = null122.7 “==”在kotlin中,”==”和”equals”都是比较引用是否相等。如何项目中只有kotlin代码,那这个肯定是个非常好的特性,但是如果项目同时包含java和kotlin(比如:你是在旧的java工程基础上,用kotlin开发新功能),那么“==”很容易产生混淆和错乱。 设计原则3.1 kotlin的class默认是final, 如果想要能被继承,那么需要使用open 修饰,它的设计原则来自于 Effective Java 这种默认的设计原则,会导致第三方/未完成的sdk的大多数会是不可继承的,从提供者角度来说:它必须保证这个类是足够完整的,从使用者角度来说:这个类必须要提供我需要的所有东西,否则,我必须重写。当然提供者可以为这个类加上open来表示这个类是可以继承的,但是这是另外一种设计思维。 Roedy Green, How to Write Unmaintainable Code有提到: 给你的所有类设置为final。 毕竟,你完成了这个项目 - 当然没有人可以通过扩展你的class来改善你的工作。 这甚至可能是一个安全漏洞 - 毕竟,为什么不是java.lang.String final? 如果您的项目中的其他编程人员抱怨,请告诉他们您的执行速度提升 3.2 错误的使用运算符重载kotlin允许对类的变量运算符进行重载,设想有下面的代码 var person3 = person1 + person21 “+” 这个运算符有可能在很多个地方做了重载,在后期维护代码,很难区分哪个是哪个 作者:安卓机器人 来源:CSDN 原文:https://blog.csdn.net/ncuboy045wsq/article/details/74853107 版权声明:本文为博主原创文章,转载请附上博文链接!

auto_answer 2019-12-02 01:49:53 0 浏览量 回答数 0

问题

关于阿里云ECS市场镜像的评测:主机宝与智慧云

jimlieu 2019-12-01 21:50:39 13283 浏览量 回答数 7

问题

【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』

mr_wid 2019-12-01 21:10:06 20092 浏览量 回答数 6

回答

Go 的优势在于能够将简单的和经过验证的想法结合起来,同时避免了其他语言中出现的许多问题。本文概述了 Go 背后的一些设计原则和工程智慧,作者认为,Go 语言具备的所有这些优点,将共同推动其成为接替 Java 并主导下一代大型软件开发平台的最有力的编程语言候选。很多优秀的编程语言只是在个别领域比较强大,如果将所有因素都纳入考虑,没有其他语言能够像 Go 语言一样“全面开花”,在大型软件工程方面,尤为如此。 基于现实经验 Go 是由经验丰富的软件行业老手一手创建的,长期以来,他们对现有语言的各种缺点有过切身体会的痛苦经历。几十年前,Rob Pike 和 Ken Thompson 在 Unix、C 和 Unicode 的发明中起到了重要作用。Robert Griensemer 在为 JavaScript 和 Java 开发 V8 和 HotSpot 虚拟机之后,在编译器和垃圾收集方面拥有数十年的经验。有太多次,他们不得不等待 Google 规模的 C++/Java 代码库进行编译。于是,他们开始着手创建新的编程语言,将他们半个世纪以来的编写代码所学到的一切经验包含进去。 专注于大型工程 小型工程项目几乎可以用任何编程语言来成功构建。当成千上万的开发人员在数十年的持续时间压力下,在包含数千万行代码的大型代码库上进行协作时,就会发生真正令人痛苦的问题。这样会导致一些问题,如下: 较长的编译时间导致中断开发。代码库由几个人 / 团队 / 部门 / 公司所拥有,混合了不同的编程风格。公司雇佣了数千名工程师、架构师、测试人员、运营专家、审计员、实习生等,他们需要了解代码库,但也具备广泛的编码经验。依赖于许多外部库或运行时,其中一些不再以原始形式存在。在代码库的生命周期中,每行代码平均被重写 10 次,被弄得千疮百痍,而且还会发生技术偏差。文档不完整。 Go 注重减轻这些大型工程的难题,有时会以使小型工程变得更麻烦为代价,例如,代码中到处都需要几行额外的代码行。 注重可维护性 Go 强调尽可能多地将工作转给自动化的代码维护工具中。Go 工具链提供了最常用的功能,如格式化代码和导入、查找符号的定义和用法、简单的重构以及代码异味的识别。由于标准化的代码格式和单一的惯用方式,机器生成的代码更改看起来非常接近 Go 中人为生成的更改并使用类似的模式,从而允许人机之间更加无缝地协作。 保持简单明了 初级程序员为简单的问题创建简单的解决方案。高级程序员为复杂的问题创建复杂的解决方案。伟大的程序员找到复杂问题的简单解决方案。 ——Charles Connell 让很多人惊讶的一点是,Go 居然不包含他们喜欢的其他语言的概念。Go 确实是一种非常小巧而简单的语言,只包含正交和经过验证的概念的最小选择。这鼓励开发人员用最少的认知开销来编写尽可能简单的代码,以便许多其他人可以理解并使用它。 使事情清晰明了 良好的代码总是显而易见的,避免了那些小聪明、难以理解的语言特性、诡异的控制流和兜圈子。 许多语言都致力提高编写代码的效率。然而,在其生命周期中,人们阅读代码的时间却远远超过最初编写代码所需的时间(100 倍)。例如,审查、理解、调试、更改、重构或重用代码。在查看代码时,往往只能看到并理解其中的一小部分,通常不会有完整的代码库概述。为了解释这一点,Go 将所有内容都明确出来。 错误处理就是一个例子。让异常在各个点中断代码并在调用链上冒泡会更容易。Go 需要手动处理和返回每个错误。这使得它可以准确地显示代码可以被中断的位置以及如何处理或包装错误。总的来说,这使得错误处理编写起来更加繁琐,但是也更容易理解。 简单易学 Go 是如此的小巧而简单,以至于人们可以在短短几天内就能研究通整个语言及其基本概念。根据我们的经验,培训用不了一个星期(相比于掌握其他语言需要几个月),初学者就能够理解 Go 专家编写的代码,并为之做出贡献。为了方便吸引更多的用户,Go 网站提供了所有必要的教程和深入研究的文章。这些教程在浏览器中运行,允许人们在将 Go 安装到本地计算机上之前就能够学习和使用 Go。 解决之道 Go 强调的是团队之间的合作,而不是个人的自我表达。 在 Go(和 Python)中,所有的语言特性都是相互正交和互补的,通常有一种方法可以做一些事情。如果你想让 10 个 Python 或 Go 程序员来解决同一个问题,你将会得到 10 个相对类似的解决方案。不同的程序员在彼此的代码库中感觉更自在。在查看其他人的代码时,国骂会更少,而且人们的工作可以更好地融合在一起,从而形成了一致的整体,人人都为之感到自豪,并乐于工作。这还避免了大型工程的问题,如: 开发人员认为良好的工作代码很“混乱”,并要求在开始工作之前进行重写,因为他们的思维方式与原作者不同。 不同的团队成员使用不同的语言子集来编写相同代码库的部分内容。 ![image.png](https://ucc.alicdn.com/pic/developer-ecology/e64418f1455d46aaacfdd03fa949f16d.png) 简单、内置的并发性 Go 专为现代多核硬件设计。 目前使用的大多数编程语言(Java、JavaScript、Python、Ruby、C、C++)都是 20 世纪 80 年代到 21 世纪初设计的,当时大多数 CPU 只有一个计算内核。这就是为什么它们本质上是单线程的,并将并行化视为边缘情况的马后炮。通过现成和同步点之类的附加组件来实现,而这些附加组件既麻烦又难以正确使用。第三方库虽然提供了更简单的并发形式,如 Actor 模型,但是总有多个可用选项,结果导致了语言生态系统的碎片化。今天的硬件拥有越来越多的计算内核,软件必须并行化才能高效运行。Go 是在多核处理器时代编写的,并且在语言中内置了简单、高级的 CSP 风格并发性。 面向计算的语言原语 就深层而言,计算机系统接收数据,对其进行处理(通常要经过几个步骤),然后输出结果数据。例如,Web 服务器从客户端接收 HTTP 请求,并将其转换为一系列数据库或后端调用。一旦这些调用返回,它就将接收到的数据转换成 HTML 或 JSON 并将其输出给调用者。Go 的内置语言原语直接支持这种范例: 结构表示数据 读和写代表流式 IO 函数过程数据 goroutines 提供(几乎无限的)并发性 在并行处理步骤之间传输管道数据 因为所有的计算原语都是由语言以直接形式提供的,因此 Go 源代码更直接地表达了服务器执行的操作。 OO — 好的部分 更改基类中的某些内容的副作用 面向对象非常有用。过去几十年来,面向对象的使用富有成效,并让我们了解了它的哪些部分比其他部分能够更好地扩展。Go 在面向对象方面采用了一种全新的方法,并记住了这些知识。它保留了好的部分,如封装、消息传递等。Go 还避免了继承,因为它现在被认为是有害的,并为组合提供了一流的支持。 现代标准库 目前使用的许多编程语言(Java、JavaScript、Python、Ruby)都是在互联网成为当今无处不在的计算平台之前设计的。因此,这些语言的标准库只提供了相对通用的网络支持,而这些网络并没有针对现代互联网进行优化。Go 是十年前创建的,当时互联网已全面发展。Go 的标准库允许在没有第三方库的情况下创建更复杂的网络服务。这就避免了第三方库的常见问题: 碎片化:总是有多个选项实现相同的功能。 膨胀:库常常实现的不仅仅是它们的用途。 依赖地狱:库通常依赖于特定版本的其他库。 未知质量:第三方代码的质量和安全性可能存在问题。 未知支持:第三方库的开发可能随时停止支持。 意外更改:第三方库通常不像标准库那样严格地进行版本控制。 关于这方面更多的信息请参考 Russ Cox 提供的资料 标准化格式 Gofmt 的风格没有人会去喜欢,但人人都会喜欢 gofmt。 ——Rob Pike Gofmt 是一种以标准化方式来格式化 Go 代码的程序。它不是最漂亮的格式化方式,但却是最简单、最不令人生厌的格式化方式。标准化的源代码格式具有惊人的积极影响: 集中讨论重要主题: 它消除了围绕制表符和空格、缩进深度、行长、空行、花括号的位置等一系列争论。 开发人员在彼此的代码库中感觉很自在, 因为其他代码看起来很像他们编写的代码。每个人都喜欢自由地按照自己喜欢的方式进行格式化代码,但如果其他人按照自己喜欢的方式格式化了代码,这么做很招人烦。 自动代码更改并不会打乱手写代码的格式,例如引入了意外的空白更改。 许多其他语言社区现在正在开发类似 gofmt 的东西。当作为第三方解决方案构建时,通常会有几个相互竞争的格式标准。例如,JavaScript 提供了 Prettier 和 StandardJS。这两者都可以用,也可以只使用其中的一个。但许多 JS 项目并没有采用它们,因为这是一个额外的决策。Go 的格式化程序内置于该语言的标准工具链中,因此只有一个标准,每个人都在使用它。 快速编译 ![image.png](https://ucc.alicdn.com/pic/developer-ecology/8a76f3f07f484266af42781d9e7b8692.png) 对于大型代码库来说,它们长时间的编译是促使 Go 诞生的原因。Google 主要使用的是 C++ 和 Java,与 Haskell、Scala 或 Rust 等更复杂的语言相比,它们的编译速度相对较快。尽管如此,当编译大型代码库时,即使是少量的缓慢也会加剧编译的延迟,从而激怒开发人员,并干扰流程。Go 的设计初衷是为了提高编译效率,因此它的编译器速度非常快,几乎没有编译延迟的现象。这给 Go 开发人员提供了与脚本类语言类似的即时反馈,还有静态类型检查的额外好处。 交叉编译 由于语言运行时非常简单,因此它被移植到许多平台,如 macOS、Linux、Windows、BSD、ARM 等。Go 可以开箱即用地为所有这些平台编译二进制文件。这使得从一台机器进行部署变得很容易。 快速执行 Go 的运行速度接近于 C。与 JITed 语言(Java、JavaScript、Python 等)不同,Go 二进制文件不需要启动或预热的时间,因为它们是作为编译和完全优化的本地代码的形式发布的。Go 的垃圾收集器仅引入微秒量级的可忽略的停顿。除了快速的单核性能外,Go 还可以轻松利用所有的 CPU 内核。 内存占用小 像 JVM、Python 或 Node 这样的运行时不仅仅在运行时加载程序代码,每次运行程序时,它们还会加载大型且高度复杂的基础架构,以进行编译和优化程序。如此一来,它们的启动时间就变慢了,并且还占用了大量内存(数百兆字节)。而 Go 进程的开销更小,因为它们已经完全编译和优化,只需运行即可。Go 还以非常节省内存的方式来存储数据。在内存有限且昂贵的云环境中,以及在开发过程中,这一点非常重要。我们希望在一台机器上能够快速启动整个堆栈,同时将内存留给其他软件。 部署规模小 Go 的二进制文件大小非常简洁。Go 应用程序的 Docker 镜像通常比用 Java 或 Node 编写的等效镜像要小 10 倍,这是因为它无需包含编译器、JIT,以及更少的运行时基础架构的原因。这些特点,在部署大型应用程序时很重要。想象一下,如果要将一个简单的应用程序部署到 100 个生产服务器上会怎么样?如果使用 Node/JVM 时,我们的 Docker 注册表就必须提供 100 个 docker 镜像,每个镜像 200MB,那么一共就需要 20GB。要完成这些部署就需要一些时间。想象一下,如果我们想每天部署 100 次的话,如果使用 Go 服务,那么 Docker 注册表只需提供 10 个 docker 镜像,每个镜像只有 20MB,共只需 2GB 即可。大型 Go 应用程序可以更快、更频繁地部署,从而使得重要更新能够更快地部署到生产环境中。 独立部署 Go 应用程序部署为一个包含所有依赖项的单个可执行文件,并无需安装特定版本的 JVM、Node 或 Python 运行时;也不必将库下载到生产服务器上,更无须对运行 Go 二进制文件的机器进行任何更改。甚至也不需要讲 Go 二进制文件包装到 Docker 来共享他们。你需要做的是,只是将 Go 二进制文件放到服务器上,它就会在那里运行,而不用关心服务器运行的是什么。前面所提到的那些,唯一的例外是使用net和os/user包时针对对glibc的动态链接。 供应依赖关系 Go 有意识避免使用第三方库的中央存储库。Go 应用程序直接链接到相应的 Git 存储库,并将所有相关代码下载(供应)到自己的代码库中。这样做有很多好处: 在使用第三方代码之前,我们可以对其进行审查、分析和测试。该代码就和我们自己的代码一样,是我们应用程序的一部分,应该遵循相同的质量、安全性和可靠性标准。 无需永久访问存储依赖项的各个位置。从任何地方(包括私有 Git repos)获取第三方库,你就能永久拥有它们。 经过验收后,编译代码库无需进一步下载依赖项。 若互联网某处的代码存储库突然提供不同的代码,这也并不足为奇。 即使软件包存储库速度变慢,或托管包不复存在,部署也不会因此中断。 兼容性保证 Go 团队承诺现有的程序将会继续适用于新一代语言。这使得将大型项目升级到最新版本的编译器会非常容易,并且可从它们带来的许多性能和安全性改进中获益。同时,由于 Go 二进制文件包含了它们需要的所有依赖项,因此可以在同一服务器上并行运行使用不同版本的 Go 编译器编译的二进制文件,而无需进行复杂的多个版本的运行时设置或虚拟化。 文档 在大型工程中,文档对于使软件可访问性和可维护性非常重要。与其他特性类似,Go 中的文档简单实用: 由于它是嵌入到源代码中的,因此两者可以同时维护。 它不需要特殊的语法,文档只是普通的源代码注释。 可运行单元测试通常是最好的文档形式。因此 Go 要求将它们嵌入到文档中。 所有的文档实用程序都内置在工具链中,因此每个人都使用它们。 Go linter 需要导出元素的文档,以防止“文档债务”的积累。 商业支持的开源 当商业实体在开放式环境下开发时,那么一些最流行的、经过彻底设计的软件就会出现。这种设置结合了商业软件开发的优势——一致性和精细化,使系统更为健壮、可靠、高效,并具有开放式开发的优势,如来自许多行业的广泛支持,多个大型实体和许多用户的支持,以及即使商业支持停止的长期支持。Go 就是这样发展起来的。 缺点 当然,Go 也并非完美无缺,每种技术选择都是有利有弊。在决定选择 Go 之前,有几个方面需要进行考虑考虑。 未成熟 虽然 Go 的标准库在支持许多新概念(如 HTTP 2 Server push 等)方面处于行业领先地位,但与 JVM 生态系统中的第三方库相比,用于外部 API 的第三方 Go 库可能不那么成熟。 即将到来的改进 由于清楚几乎不可能改变现有的语言元素,Go 团队非常谨慎,只在新特性完全开发出来后才添加新特性。在经历了 10 年的有意稳定阶段之后,Go 团队正在谋划对语言进行一系列更大的改进,作为 Go 2.0 之旅的一部分。 无硬实时 虽然 Go 的垃圾收集器只引入了非常短暂的停顿,但支持硬实时需要没有垃圾收集的技术,例如 Rust。 结语 本文详细介绍了 Go 语言的一些优秀的设计准则,虽然有的准则的好处平常看起来没有那么明显。但当代码库和团队规模增长几个数量级时,这些准则可能会使大型工程项目免于许多痛苦。总的来说,正是这些设计准则让 Go 语言成为了除 Java 之外的编程语言里,用于大型软件开发项目的绝佳选择。

有只黑白猫 2020-01-07 14:11:38 0 浏览量 回答数 0

问题

阿里云linuxCentOS系统配置和使用

lijonghui 2019-12-01 21:34:30 10131 浏览量 回答数 1

问题

Nginx性能为什么如此吊

小柒2012 2019-12-01 21:20:47 15038 浏览量 回答数 3

问题

【精品问答】Java必备核心知识1000+(附源码)

问问小秘 2019-12-01 22:00:28 870 浏览量 回答数 1

问题

Go-SDK之如何实现快速开始?

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

回答

HTML5究竟是什么? (注:目前网上介绍HTML5的文章都是千篇一律,譬如某个时间段发布某个版本,这种对于初学者或者从实用性角度来看,没有太多甚至完全不具备学习价值,只能说了解到它的出现时间,但是具体作用是什么呢?基本都是没有详细阐述,不少读者看完估计还是一头雾水的,因此笔者会用更加通俗易懂的话语,让各位能够知道HTML5究竟是什么) 首先HTML是定义了网页的结构,那么HTML5则是其不断更新的一部分。它目前有两个版本, 第一个是万维网联盟的5.2推荐标准(w3c) ,是为网页内容开发者设计的;第二个是浏览器开发者的 HTML 生活标准(HTML Living Standard) ,由微软网页超文本技术工作小组公司(WHATWG)维护。 HTML5引入了一些新的元素和属性,同时也是一个 W3C推荐标准。Web 应用程序以这些 HTML 元素为基础运行,同时包含了 HTML4和 XHTML,但是向后兼容以前的版本。另外,它与 PHP 更加兼容,新的 api 包括拖放、网络消息和网络存储、协议处理程序注册、微数据、画布、文本轨道和定时媒体播放,还有一个标准化的服务器发送事件自动更新和更好的浏览器支持,这些新的 api 为网页设计者提供了更好的控制。对于生活标准版本,新的 API 还包括地理定位、web 音频(Javascript 音频应用程序)、web RTC 和 web 加密 API。 这些元素和属性反映了现代网站的典型用法,其中包括超文本标记语言和对文档对象模型(DOM)脚本的新兴趣。HTML5语法还允许在文档内部使用 MathML,而 indexeddb将存储扩展到本地存储之外。并且从 HTML 4.01中删除了一些不推荐的元素,包括像 font 和 center 这样的纯表示元素,这些元素的效果早已被更强大的层叠样式表所取代。此外,DOM 脚本在 Web 行为中的重要性也得到了重新强调。 HTML5知识点有哪些? 经过前面的一些讲解,相信各位对HTML5已经有初步的认识,那么接下来我们将会正式探讨下,究竟有哪些知识点需要我们学习掌握的呢?(注:由于HTML5涵盖知识点较多,且本文属于入门级别的知识指南,不适宜进行全面深入地讲解,因此笔者筛选出了必须掌握的知识点,希望能够让初学者迅速入门) 知识点一:HTML5主体结构 <!doctype> 声明必须位于 HTML5 文档中首行,声明此为HTML5文档 标签限定了文档的开始点和结束点,内部包含文档头部和主体 标签用于定义文档的头部,内部的元素可以引用脚本或者样式表、提供元信息等等,并且描述了文档的各种属性和信息,包括文档的标题、在 Web 中的位置以及和其他文档的关系等,绝大多数文档头部包含的数据都不会真正作为内容显示给读者。 标签声明使用utf-8编码 标签定义文档标题 定义文档的主体,内部包含文档的所有内容,比如文本、超链接、图像、表格和列表等等,均可展示给用户浏览器显示出来(注释除外) 以上就是HTML5主体结构的讲解,可能有细心地读者就会发现,有的标签是一个的,有的又是两个对称的,那么这是何解呢? 这里就引入一个知识点,通常情况下绝大多数标签都是双标签,也就是需要写成格式,但是也有的单标签也称为自闭合标签是不需要结束符的,如 等,那么这些标签具体用法又是如何呢?下面我们将会进行常用标签的讲解! 知识点二:HTML5常用标签 众所周知,HTML5简单点说就是由一个个标签组成的文档,既然如此我们就需要学习,每一个标签究竟代表着什么含义如何使用呢?(因为标签实在太多,倘若全部阐释一遍,怕初学者们嫌弃篇幅太长感到枯燥,或者是知识点太多很难吸收掌握,因此笔者精选出一些较为常用的标签进行讲解,对于标签可能有多个属性可以选择,笔者同样会挑选出较为常用属性进行讲解) 注:以下标签,笔者没有截效果图,建议初学者自主尝试 注释标签:在我们日常编写代码时候,为了日后方便自己查看或者是别人查阅,我们通常会在某些地方写上注释标签,里面内容不会展示给浏览器用户看到 阿里云开发者社区 链接标签:超链接跳转,把需要跳转的网址写到标签的href里面,然后在开始标签和结束标签之间可以写内容展示出去,当用户点击内容将会发生跳转 换行标签:换行作用,有的小伙伴可能看到这里会说,为什么我写也是有效果的呢?这种写法不能说错误只能说是老版本的规范,按照HTML4.0规范都需要按照XHTML的写法,也就是对于单标签都是采用加斜杠的写法(下同) 按钮 按钮标签:按钮上需要展示什么文字,可在开始标签和结束标签之间写入,现阶段若写静态网站用得较少,后期学JS制作动态网站或者做交互时候比较常用 内容 块级标签:标签本身没有特殊含义,那么在其里面可以写文本内容,或者是加入其它标签均可,凡是加入其内部所有东西都会被其所包裹,形成一个独立的块级区域并且独自占用一行(css可格式化) 标题 标题标签:用于定义标题,从h1至h6均可根据自身需求选择 分隔符标签:起到装饰分隔作用,默认显示为一条黑色的水平线 图片标签:展示图片,src里面放置图片的链接,然后有时候可能出现各种原因导致图片未能加载,那么系统会自动展示alt里面的文字内容 输入框标签:默认是输入框,当然其有多个属性可以选择,然后较为常用的是type属性,该属性又有多个值可供选择,如: password 用户输入任何文本内容均会显示为小圆点 checkbox 选择框 Button按钮 列表 列表标签:通常用于展示一列数据,而且数据所采用的css样式均相同,譬如导航栏、当然还有 有序列表不过较为少用 段落 段落标签:写在内部的一段文字将会被定义为一个段落 脚本标签:现阶段不会用到,等学习到js需要用到,初学者可在标签内部写js代码,随着学习深入可以采用外部写好js文件后导入 文字 脚本标签:通常需要搭配css样式进行使用,对部分内容进行样式修改 样式标签:现阶段不会用到,等学习到css需要用到,样式需要写在标签内部 HTML5入门知识指南 经过前面的一系列学习,相信各位已经初步掌握HTML5的使用,能够制作一些简单的界面了,当然对于学习能力较强或者有一定基础的同学,可以自主深入学习HTML5深层次的知识点,当能够熟练敲出你想要的界面时候,那建议开始学习CSS让界面变得更加美丽,笔者下期将会给各位带来CSS入门知识指南,欢迎大家踊跃参与学习,当然如果有童鞋看完本文,对于某些知识点还是不太明白,或者是对下一期学习有什么建议,欢迎各位在下方评论区留言哦,如果觉得笔者文章写得不错,那么也可以分享给朋友一起学习,咱们下期再见啦!

剑曼红尘 2020-03-03 17:56:06 0 浏览量 回答数 0

问题

【阿里云产品公测】简单日志服务SLS使用评测含教程

mr_wid 2019-12-01 21:08:11 36639 浏览量 回答数 20

问题

详解 Spring 3.0 基于 Annotation 的依赖注入实现 配置报错 

kun坤 2020-06-01 09:44:47 3 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 SQL审核 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 人工智能 阿里云云栖号 云栖号案例 云栖号直播