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.pswp.cn/news/373992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373992.shtml
英文地址,請注明出處:http://en.pswp.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、最大的問題是原型…