15分钟内开始使用Amazon Web Services和全自动资源调配

在等待一个新项目时,我想学习一些有用的东西。 而且由于在许多项目中我们需要评估和测试正在开发的应用程序的性能,而很少有足够的硬件来生成实际负载,因此我决定学习更多有关按需在云中按需配置虚拟机的知识,即Amazon Web Services (AWS)。

我已经了解了很多可用于AWS的工具以及资源(机器实例,安全组,数据库等)的自动化设置以及AWS云中虚拟机实例的自动自定义的许多知识。 我想简要介绍一下AWS,并简要概述这些工具和自动化选项。 如果您熟悉AWS / EC2,则可能需要直接将介绍跳到自动化部分。

为什么选择AWS?

亚马逊是“基础设施即服务”的领先提供商,并且正在不断为其产品增加新的服务。 AWS允许您按需创建虚拟机,对其进行负载平衡,将其连接到“数据库即服务”(与手动管理的数据库相比具有多个优点)以及各种其他服务(例如通知,电子邮件和排队服务) 。 您可以访问内置的监视功能,并且可以将应用程序部署到基于它们的“平台即服务”,同时保留对这些较低级资源的控制权。

关注官方AWS博客以了解新服务,功能等。

AWS入门

要创建一个AWS账户,您将需要一部电话和一张信用卡(如果您使用任何付费服务或超出任何免费使用限制,都将收费)。 在注册过程中请务必小心,因为UI不能完全防错。 您的帐户可能需要最多两个小时才能正常运行。

下一步要做的是浏览AWS管理控制台 ,该控制台可让您创建和配置各种服务和资源,最有趣的是Elastic Compute Cloud(EC2),您可以在其中启动新的虚拟机。 管理控制台很容易解释,尽管不像我希望的那样易于使用。 您可能需要查看这些屏幕快照,以显示如何在管理控制台中创建EC2实例 。

简要概述

AWS的核心规则是,您仅需支付使用费用,即实例的运行时间和流量-请参阅AWS Simple Monthly Calculator 。

最重要的资源是EC2,因为它允许您创建称为“实例”的虚拟机。 关于它们的内存和计算能力,存在不同类型的实例 。 默认情况下,它们是瞬态的,一旦停止使用它们就会被丢弃(终止)。 您可能还拥有一个由弹性块存储(EBS)支持的实例,该实例使您能够以任何状态和已保存的更改再次停止和启动该实例,Amazon对此收取每月$ 0.10 / GB的费用。 如果只需要保留一些数据,也可以将EBS存储作为卷安装到实例。 没有快速的方法可以重新创建终止的实例,您必须再次执行向导-这是命令行工具和自动化变得很方便的地方。

设置EC2实例时,您可能还需要将它们分配到同一安全组中,并配置对安全组中的哪些人开放的端口(默认情况下,您甚至无法通过SSH进入)。

如果您想了解有关EC2的全部信息,请转到Amazon EC2用户指南 。

除了EC2,还有许多其他有趣的服务,例如Elastic Beanstalk(PaaS,当前用于Java Webapp,使用Tomcat),分布式存储S3等。还有一些其他服务,例如Amazon CloudWatch ,这是一项(性能)针对您的AWS基础架构的监控工具。 (可以通过New Relic监视来补充,以更深入地了解应用程序。)

利用亚马逊免费套餐

亚马逊免费为新客户提供一定数量的资源,为期一年,如果您消耗的资源更多,则只需要付费即可。 它包括例如由EBS支持的不停止运行的微型EC2实例(即它是持久的,您可以停止并再次启动它),15 GB流量,10 GB EBS存储,5 GB S3存储,10个CloudWatch指标等不幸的是,尽管它们在Amazon SimpleDB (NoSQL键值存储)中提供了1GB的空间,但它不包括Amazon管理的MySQL / Oracle数据库( RDS )。

这意味着您可以免费拥有一个持续运行的EC2 Micro实例(613 MB内存)。 您可以将其用作云中的基础,例如,因为两个EC2实例之间的流量更快/更便宜,并且由于它可以完全访问同一安全组内的计算机。

最佳选择可能是将您的实例基于Amazon Linux AMI ,它是针对AWS优化的RedHat Linux的变体,配备了大多数AWS API命令行工具和CloudInit,用于自动系统设置(稍后描述)。 建议您浏览用户指南 ,该指南描述了可用的工具以及如何使用CloudInit。

自动化呢?

如果您是第一次执行某项操作,则AWS Management Console很棒,但是对于重复任务而言,向导太耗时。 特别是如果您需要设置多个实例,比如说RDS数据库实例,EC2计算机实例以及相应的安全组或许多相同的实例。 我们将研究如何自动执行此操作。

除了设置基础结构外,通常还需要自定义EC2实例(至少通过安装和启动所需的EC2实例软件)。 您可以通过SSH登录它们,但是能够自动化它不是很好,特别是如果您需要多个类似的实例吗?

请注意,我现在只关注自动化AWS用户的工作。 也可以将AWS配置为在需要时(例如,当负载超过限制时) 自动启动新的EC2实例 ,但这是另一回事。
概述:

  • 基础架构配置自动化:
    • AWS API命令行工具(或AWS Java API或第三方工具/库)
    • AWS CloudFormation
  • 实例操作系统和软件设置自动化:
    • Canonical CloudInit(Ubuntu和Amazon Linux AMI)–也许利用Puppet或Chef
    • 创建定制的AMI

自动化基础架构配置

在没有AWS管理控制台的情况下,有两个突出的选项可用于创建EC2实例和其他资源:AWS API命令行工具和AWS CloudFormation。

AWS API命令行工具

亚马逊为其大多数服务(例如EC2和RDS)提供命令行工具。
EC2 :Robert Sosinovski早在2008年就发布了关于使用Amazon EC2命令行工具 (尽管其名称并非特定于Mac OS X)的非常好的说明,但它们仍然有效,因此只需关注它们,就没有必要重复它们在这里(基本上是下载,解压缩,设置环境变量,提供凭据)。 或者,您可以转到下载页面并按照官方说明进行操作 。 我建议您创建一个文件夹以包含所有工具=> $ AWS_FOLDER / ec2 /等,而不是〜/ .ec2 /。

如果要使用除默认us-east-1之外的其他AWS区域,则还需要设置环境变量EC2_URL,请参阅区域端点列表或命令ec2-describe-regions 。 例如 (我的URL中间有ec2,与端点列表相反,但显然也可以):

export EC2_URL=https://eu-west-1.ec2.amazonaws.com

其他工具的身份验证设置 :虽然EC2工具的文档仅描述了通过X.509证书(环境变量EC2_PRIVATE_KEY,EC2_CERT)进行的身份验证,但其他工具(至少是RDS,CloudFormation)支持通过环境变量AWS_CREDENTIAL_FILE指向统一身份验证到包含您的AWS Access Key ID和密钥的文件(可以在您的AWS帐户中的 “安全性凭证-访问密钥”下找到)中,配置在工具的自述文件中进行了描述。

RDS :RDS命令行工具的设置与EC2非常相似,只需下载它们并添加环境变量,如随附的readme.txt中所述。

与EC2一样,您可能需要更改默认的RDS区域 :

export RDS_URL=https://eu-west-1.rds.amazonaws.com
Vaadin测试设置中的示例

我最初的计划是尝试使用Amazon Web Services进行Vaadin可伸缩性测试中描述的性能测试,不幸的是,事实证明这是不可能的,因为测试应用程序无法运行。 在此过程中,我已自动完成了各个设置步骤,如下所示。 您可能需要查看博客文章以了解上下文。

我不需要通过管理控制台创建安全组并允许通过命令行访问它。 您可以按以下方式打开SSH端口:

ec2-authorize  -p 22

创建两个EC2实例:

ec2-run-instances ami-1a0f3d6e -t m1.large -k VaadinAS --instance-count 2 -z eu-west-1c -g quick-start-1
  • -k指定将与该实例相关联的现有密钥对的名称(管理控制台为您提供了在首次创建实例时创建的密钥对)的名称,从而无需密码即可进行ssh登录
  • -z指定区域内的可用区(AZ)(在Mgmt Console中创建实例时,您可以看到可用区),最好将所有资源都放在同一AZ中
  • -g指定一个现有的安全组(再次在控制台中创建); 我相信默认是“默认”

ec2-run-instances命令还支持–user-data或–user-data-file属性,以将设置指令传递给CloudInit,如稍后所述。

要登录实例,您将需要它们的公共域名/ IP(在命令完成时打印)和用户名,这取决于所使用的AMI(最简单:在Mgmt Console中右键单击该实例,然后选择“连接”以获取)完整的SSH connect命令)和密钥文件(在我的情况下为./VaadinAS.pem)。 因此,我将以如下方式登录我的第一个实例(前提是我已经打开了安全组中的端口22):

ssh -i VaadinAS.pem ubuntu@ec2-46-137-136-253.eu-west-1.compute.amazonaws.com

使用MySQL创建RDS实例(启动完成可能需要几分钟):

rds-create-db-instance quicktickets --allocated-storage 5 -c db.m1.large  -e MySQL5.1 -u quicktickets -p V3ryS3cr3t  -z eu-west-1c --backup-retention-period 0 --db-name quicktests
  • quicktickets将是实例的名称
  • 最大 大小为5 GB(以后可以更改)
  • -c –它基于db.m1.large实例
  • -e –数据库类型为MySQL,-u用户名快捷票,-p密码V3ryS3cr3t
  • -z eu-west-1c将其置于与EC2实例相同的可用区中
  • –backup-retention-period 0 –不保留备份(默认:1天)
  • –db-name quicktests –连接到它所需

接下来,我需要使数据库可以从我的EC2实例(在安全组quick-start-1中)访问:

rds-authorize-db-security-group-ingress default --ec2-security-group-name quick-start-1 --ec2-security-group-owner-id
  • 您可以找到您的AWS账户ID在AWS帐号的安全凭据下

要查找实例的主机名,请执行rds-describe-db-instance ,它还会告诉您实例是仍在启动还是已经在运行。
现在,您可以从安全组中的EC2实例连接到数据库:

mysql -h quicktickets.cpokd2djuazy.eu-west-1.rds.amazonaws.com -u quicktickets --password=V3ryS3cr3t quicktickets

AWS CloudFormation

CloudFormation是Amazon提供的一项新的(2/2011)免费服务,使您能够以文本格式描述所需的资源及其依赖项,并可以通过以下方式使用此“模板”实例化这些资源(“创建堆栈”): AWS管理控制台或通过CloudFormation命令行工具 。 您还可以共享您的模板,并使用和组合其他人创建的模板。 模板还支持UserData属性,您可以使用该属性将设置说明传递给CloudInit,如稍后所述。 查看此基于屏幕截图的文章,有关通过管理控制台设置CF堆栈 。
模板文件示例:

{  "AWSTemplateFormatVersion": "2010-09-09","Description" : "One EC2 instance with a security group open for SSH","Parameters": {"KeyName": {"Description" : "Name of an existing EC2 KeyPair to enable SSH access","Type": "String"},"InstanceType": {"Default": "m1.large",  "Type": "String"}},"Resources": {"EC2SecurityGroup": {"Properties": {"SecurityGroupIngress": [{"FromPort": "22","CidrIp": "0.0.0.0/0","ToPort": "22","IpProtocol": "tcp"}],"GroupDescription": "SSH access"},"Type": "AWS::EC2::SecurityGroup"},"Ec2Instance": {"Properties": {"SecurityGroups": [{"Ref": "EC2SecurityGroup"}],"ImageId": { "Fn::FindInMap": ["AWSRegionArch2AMI",{"Ref": "AWS::Region"}, "64"]},"UserData": {"Fn::Base64": { "Fn::Join": ["", ["#!/bin/bash -v\n","# you init bash script here...\n"]]} },"KeyName": { "Ref": "KeyName" },"InstanceType": { "Ref": "InstanceType" }},"Type": "AWS::EC2::Instance"}},"Mappings": {"AWSInstanceType2Arch" : {"m1.large"    : { "Arch" : "64" }, "m1.xlarge"   : { "Arch" : "64" }, ...}},"Outputs" : {"InstanceId" : {"Description" : "InstanceId of the newly created EC2 instance","Value" : { "Ref" : "Ec2Instance" }},"AZ" : {"Description" : "Availability Zone of the newly created EC2 instance","Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] }},"PublicIP" : {"Description" : "Public IP address of the newly created EC2 instance","Value" : { "Fn::GetAtt" : [ "Ec2Instance", "PublicIp" ] }}}
}
  • 4:如您所见,您可以定义属性(具有默认值),当从模板创建新堆栈时可以为其提供值
  • 16、31:接下来,它定义了两个资源:安全组和EC2实例(使用某些映射,因为AMI的名称因地区而异)
  • 38:可以通过base64编码的UserData将设置说明提供给CloudInit
  • 56:您还可以通过DescribeStacks函数定义哪些信息可用(命令行:cfn-describe-stacks)

通过CloudFormation,您可以定义任何资源(EC2实例,RDS实例,负载平衡器,安全组等),它们的依存关系,以及通过CloudInit定义各种启动时操作,如SW安装。 模板是有效的JSON文档。

示例: 使用CloudFormation和Cloud-Init安装和启动RoR应用程序 (具有WaitCondition功能)–它不太长,描述了模板文件的各个部分。 您也可以浏览公共模板文件 ,例如: 具有Amazon RDS数据库实例的单个EC2实例Web服务器 。

2011年6月,亚马逊还启动了CloudFormer ,这是一个原型工具,使您可以从帐户中的现有AWS资源创建CloudFormation模板。

如果您仍需要更多信息,请阅读《 CloudFormation用户指南》 。

使用CloudFormation元数据和帮助程序脚本自定义实例

从通过AWS CloudFormation引导应用程序 :

AWS CloudFormation允许您通过模板中的元数据定义软件包,文件和操作系统服务的集合。 此外,它还提供了辅助功能

解释元数据并对其执行操作,安装软件包,创建文件以及在实例上启动或重新启动服务。 AWS CloudFormation脚本基于基本CloudInit功能构建,使您能够创建通用的简单CloudInit启动脚本,该脚本通过元数据进行数据驱动。 您在元数据中描述了主机上需要安装的内容,AWS CloudFormation负责此操作。

有关如何使用元数据和帮助程序脚本(例如cfn-init)的说明,请参阅该文档,该脚本将安装软件包,下载和解压缩归档文件,启动服务以及根据元数据部分中的数据创建文件。 它还提到了CloudFormation和Chef或Puppet的集成,在将AWS CloudFormation与Opscode Chef 集成以及将AWS CloudFormation与Puppet集成的白皮书中对此进行了详细描述。 如果您打算使用CloudFormation,则应绝对阅读此22页的指南。

(注意: cfn-init支持下载和解压缩软件包,可用于例如获取GitHub按需提供的应用程序的最新源代码。)

您可以在此模板中看到利用元数据和帮助程序脚本的用法示例。

其他选择

  • AWS Java API(命令行工具使用它,它基于Web服务调用)
  • 第三方工具/库,例如Ruby gem Fog 。
  • Chef + Knife和Puppet(我相信他们为AWS WS调用提供了自己的包装器并利用CloudInit)

自动化EC2实例OS / SW设置

要在EC2实例及其配置中自定义软件,您可以创建自定义的AMI,也可以将Canonical的CloudInit与支持它的AMI(Amazon Linux和Ubuntu以及其他)一起使用。 如果使用CloudFormation,则还有另一种基于CloudInit的可能性,如上文CF部分所述。

Canonical CloudInit和实例用户数据

您可以通过“ 用户数据”属性(最大16KB)将任何文本数据传递到新实例,然后可以从实例中的http://169.254.169.254/latest/user-data获得数据(您也可以访问各种元数据 )。 CloudInit是由Ubuntu背后的公司Canonical开发的Linux实用程序,可在启动时(大约在rc.local运行时)读取这些数据并处理其中嵌入的所有指令。 例如,如果它以#开头! 然后在根目录下作为shell脚本运行。

CloudInit在用户数据中接受不同类型的指令,以第一行区分:脚本(#!…),云配置数据,即要安装的软件包等(#cloud-config),要处理的文件的URL(#include…) ,#upstart-job向/ etc / init(每次启动时运行)中添加一些内容。 它甚至可以处理gzip压缩的用户数据和多部分数据,结合几种指令类型(请参阅cloud-utils和命令write-mime-multipart )。

#cloud-config类型非常有用,因为它是安装软件包和执行命令的一种比bash脚本更简单的方法。 它包含YAML格式的指令f.ex。 “ runcmd”运行命令行工具,“ packages”通过操作系统的软件包管理器安装软件包。 示例: 使用 #cloud-config 安装Jenkins CI 。

CloudInit的文档还不够完善,您可能有时需要阅读Python源代码 。 如果出现问题,可以检查实例的/var/log/cloud-init.log中的日志。

除了官方文档外,您可能还想查看Xebia的CloudInit简介演示文稿,并阅读Amazon Linux AMI 用户指南中有关CloudInit的部分。

创建自定义的Amazon Machine Image

CloudInit在启动时安装和配置软件,因此实例需要更长的时间才能完全可用。 如果这是一个问题,那么您可能更喜欢使用已安装和配置的所有软件来创建自己的自定义Amazon Machine Image (AMI)。 例如,在本摘要中描述了如何从现有版本 (2007)或官方AMI定制文档中 创建新的AMI ,您可能还想看看EC2 AMI命令行工具 。 然后,您将基于定制的AMI创建新的EC2实例。

一些相关的东西

如果您的EC2实例需要进行通信并使用要求它们位于同一子网中的技术,则可以使用Amazon Virtual Private Cloud (VPC;免费),甚至可以通过VPN将其连接到数据中心(每小时$ 0.05)。 例如,对于运行多个JMeter实例,这可能是必需的。

关于JMeter,JörgKalsbach创建了一个AMI,该AMI简化了JMeter主从服务器场的创建(3/2010): JMeter In The Cloud –基于云的负载测试环境 (请阅读文档)。 (技巧是,主实例启动从属实例,从而知道其IP。我想可以使用CloudFormation,Auto Scale和用户数据/ CloudInit来完成类似的操作。)

摘要

AWS是一个动态开发的平台,具有不断改进的工具和不断增长的服务提供。 使用基于Web的管理控制台非常容易上手,但是很快将变得更加方便,可以迁移到更自动化的界面,例如命令行工具甚至整个基础架构堆栈设置的CloudFormation。 通过创建自定义图像或在启动时通过CloudInit和/或CloudFormation的元数据和脚本对实例进行自定义的支持非常好,人们已经将其与自己喜欢的DevOps工具Chef和Puppet结合在一起。

我建议您先使用管理控制台开始使用AWS,然后在熟悉这些概念和用法后切换到命令行工具和CloudInit。 如果需要重复供应多个资源,则应使用CloudFormation及其元数据和帮助程序脚本(也许还利用Puppet / Chef)。

参考: The Holy Java博客上的JCG合作伙伴 Jakub Holy 提供了15分钟的Amazon Web Services和全自动资源供应入门 。

相关文章 :

  • 测试技巧–不编写测试
  • 在云中开发和测试
  • 晴间多云
  • 用Scala测试

翻译自: https://www.javacodegeeks.com/2011/12/getting-started-with-amazon-web.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解析JVM内存区域组成

在方法(代码块)中定义一个变量时,java就在栈中为这个变量分配JVM内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的JVM内存空间;而在堆中分配的JVM内存由java虚拟机的自动垃圾回收器来管理。…

python打开浏览器后带cookie_Python爬虫使用浏览器的cookies:browsercookie

很多用Python的人可能都写过网络爬虫,自动化获取网络数据确实是一件令人愉悦的事情,而Python很好的帮助我们达到这种愉悦。然而,爬虫经常要碰到各种登录、验证的阻挠,让人灰心丧气(网站:天天碰到各种各样的爬虫抓我们网…

VS插件开发

参考资料: VS插件开发 - 个性化VS IDE编辑器 自己动手编写一个VS插件(一) VS Addin插件基本开发入门 VS Addin插件配置、部署 转载于:https://www.cnblogs.com/wangwangfei/p/5830081.html

使用AspectJ,Javassist和Java Proxy进行代码注入的实用介绍

静态地或在运行时将代码片段注入已编译的类和方法中的功能可能会很有帮助。 这尤其适用于在没有源代码的第三方库中或在无法使用调试器或探查器的环境中对问题进行故障排除。 代码注入对于处理涉及整个应用程序的问题(例如性能监视)也很有用。 以这种方式…

Java中的变量

java类的成员变量有两种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种没有static修饰,为实例变量。 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。 在程序运行时的…

无限漫游

一、FAT AP架构下,AP设备不做认证时: (1) AP1,AP2正常工作,发送Beacon帧,向STA通告支持的无线服务; (2) STA搜索到AP1的信号,向AP1发Probe Request,请求获取AP1所提供的无线服务;AP…

uni-app内置地图轨迹_MIUI11 新增亲情守护,支持安全围栏、运动轨迹功能

点击右上角关注我们,每天给您带来最新最潮的科技资讯,让您足不出户也知道科技圈大事!日前,小米 MIUI 体验总负责人 MIUI小凡 在微博上为大家预告了 MIUI11 的新特性「亲情守护」,并表示「在亲情守护中,我们…

:before与:after伪类的应用

1.小三角样式 .tip{ position:relative; display:inline-block; width:100px; margin:100px; padding:30px 20px; color:#fff; border:1px solid #666; border-radius:5px; background-color:rgba(0,153,51,1);}.tip:before{ content:; posit…

小心重载API方法

重载方法是API设计中的重要概念,尤其是当您的API是流利的API或DSL( 特定于域的语言 )时。 对于jOOQ就是这种情况,在这种情况下,您经常想使用与完全相同的方法名称来与库进行各种交互。 示例:jOOQ条件 pac…

phpcms 下载模型列表页直接点击下载

下载模型设置本地下载 列表页模板直接调用 <article class"prjDown"><p class"prjDownTitle">方案下载</p><nav class"prjDownNav"><ul>{pc:content action"lists" catid"$catid" num"3…

为什么Java中类方法不能访问实例方法

我们已经知道类体中的方法分为实例方法和类方法两种&#xff0c;用static修饰的是类方法。二者有什么区别呢&#xff1f;当一个类创建了一个对象后&#xff0c;这个对象就可以调用该类的方法。 当类的字节码文件被加载到内存时&#xff0c;类的实例方法不会被分配入口地址&…

python展开 c函数中的宏预处理_C中的预处理宏

C中的预处理宏宏定义就属于预处理命令的一种。那么&#xff0c;什么是宏呢&#xff1f;宏&#xff1a;c语言标准允许在程序中用一个标识符来表示一个字符串。标识符就是宏名。宏替换&#xff1a;宏替换就是宏定义。在编译预处理中&#xff0c;将程序中所有的宏名用相应的字符串…

(转) 中断处理程序中断服务例程

关于中断处理程序和中断服务例程ISR的区别及联系&#xff0c;之前一直搞混&#xff0c;今天抽时间将两者关系弄弄清楚。ok,下面进入主题。首先中断处理程序(Interrupt Handler)和中断服务例程ISR(Inerrupt Service Routine)是两个不同的概念.简单来说就是&#xff0c;一条中断线…

使用SQL:2003 MERGE语句的奥术魔术

时不时地&#xff0c;由于以下任何原因&#xff0c;我们不得不将INSERT与UPDATE区分开来感到尴尬&#xff1a; 我们必须至少发表两个声明 我们必须考虑性能 我们必须考虑比赛条件 我们必须在[UPDATE; 如果UPDATE_COUNT 0 THEN INSERT]和[INSERT; 如果例外然后更新] 我们必…

Swing 学习小记

初学Swing一路问题&#xff0c;一路学习 问题一&#xff1a;JPanel中动态组件添加&#xff0c;刷新问题&#xff1f; 错误一&#xff1a;使用repaint()方法&#xff0c;以为可以刷新&#xff0c;可行不通。 错误继续发生&#xff1a;还是使用repaint()方法&#xff0c;与之前不…

leetcode Spiral Matrix

题目连接 https://leetcode.com/problems/spiral-matrix/ Spiral Matrix Description Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [   [ 1, 2, 3 ],   [ 4, 5…

python学生类出不来中文_Python 这类看起来学习门槛低的语言,是否真的适合入门编程学习?...

Python(计算机程序设计语言)Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell)&#xff0c;随着版本的不断更新和语言新功能的添加&#xff0c;越多被用于独立的、大型项目的开…

克隆可序列化和不可序列化的Java对象

开发人员经常依靠3d方库来避免重新发明轮子&#xff0c;尤其是在Java世界中&#xff0c;Apache和Spring这样的项目如此盛行。 在处理这些框架时&#xff0c;我们通常很少或根本无法控制其类的行为。 这有时会导致问题。 例如&#xff0c;如果您想深度克隆不提供合适克隆方法的对…

2014编程之美资格赛

2014 编程之美挑战赛 --- 资格赛真题 题目1 : 同构 时间限制:2000ms单点时限:1000ms内存限制:256MB描述 给定2个树A和B&#xff0c;保证A的节点个数>B的节点个数。 现在你需要对树A的边进行二染色。 一个好的染色方案&#xff0c;指不存在一个树A中的连通块&#xff0c;同时…

JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象...

一、仔细分析前面的原型模式创建对象的方法,发现原型模式创建对象,也存在一些问题&#xff0c;如下&#xff1a; 1、它省略了为构造函数传递初始化参数这个环节,结果所有实例在默认的情况下都将取得相同的属性值&#xff0c;这还不是最大的问题&#xff01; 2、最大的问题是原型…