日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

20170227玩呗娱乐

發(fā)布時(shí)間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20170227玩呗娱乐 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java技術(shù)

1.完整描述SOA架構(gòu)

1.1 什么是web服務(wù)(web service)

Web 服務(wù)是一個(gè)軟件接口,它描述了一組可以在網(wǎng)絡(luò)上通過標(biāo)準(zhǔn)化的 XML 消息傳遞訪問的操作.

Web Service 最基本的組成部分為服務(wù)的提供者(Service Provider)和服務(wù)的請(qǐng)求者(Service Requester),這兩端痛過XML格式進(jìn)行通信。

1.2 Web服務(wù)三要素

WSDL:用于用于描述和定位網(wǎng)絡(luò)服務(wù)。WSDL中主要有如下元素,

<portType> 是最重要的一個(gè)元素,用來描述web服務(wù)支持的操作及相關(guān)信息。可以把該元素比作傳統(tǒng)編程語(yǔ)言中的一個(gè)函數(shù)庫(kù)(或一個(gè)模塊、或一個(gè)類),而把每個(gè)操作比作傳統(tǒng)編程語(yǔ)言中的一個(gè)函數(shù)。

<message> 用來定義一個(gè)操作(函數(shù))的具體調(diào)用格式(函數(shù)名,參數(shù)名等等)

<portType>代碼片段:

1 <message name="getTermRequest"> 2 <part name="term" type="xs:string"/> 3 </message> 4 5 <message name="getTermResponse"> 6 <part name="value" type="xs:string"/> 7 </message> 8 9 <portType name="glossaryTerms"> 10 <operation name="getTerm"> 11 <input message="getTermRequest"/> 12 <output message="getTermResponse"/> 13 </operation> 14 </portType> View Code

<binding> 描述要使用哪種方式將上面的端口<portType>進(jìn)行綁定,一般可以綁定到SOA。

如果是綁定到SOA,則需要在<binding>使用<soap:binding>子標(biāo)簽中使用定義SOAP協(xié)議內(nèi)容。

在<soap:binding>中,通過style屬性指定rpc或者document, 通過transport 定義了要使用的 SOAP 協(xié)議(例如http),在<operator>則定義了每個(gè)端口提供的操作符。

一個(gè)<binding>代碼片段:

1 <message name="getTermRequest"> 2 <part name="term" type="xs:string" /> 3 </message> 4 5 <message name="getTermResponse"> 6 <part name="value" type="xs:string" /> 7 </message> 8 9 <portType name="glossaryTerms"> 10 <operation name="getTerm"> 11 <input message="getTermRequest" /> 12 <output message="getTermResponse" /> 13 </operation> 14 </portType> 15 16 <binding type="glossaryTerms" name="b1"> 17 <soap:binding style="document" 18 transport="http://schemas.xmlsoap.org/soap/http" /> 19 <operation> 20 <soap:operation 21 soapAction="http://example.com/getTerm" /> 22 <input> 23 <soap:body use="literal" /> 24 </input> 25 <output> 26 <soap:body use="literal" /> 27 </output> 28 </operation> 29 </binding> View Code

?

UDDI(Universal Description, Discovery and Integration)即“通用描述、發(fā)現(xiàn)與集成服,?是一種目錄服務(wù),企業(yè)可以使用它對(duì) Web services 進(jìn)行注冊(cè)和搜索

?

1.3 SOAP

按照 Web Service 的相關(guān)標(biāo)準(zhǔn)描述,服務(wù)的提供者應(yīng)該首先通過 WSDL(Web Service Definition Language)和 UDDI (Universal Description, Discovery, and Integration)發(fā)布它所提供的服務(wù)到一個(gè)統(tǒng)注冊(cè)這些服務(wù)信息的存儲(chǔ)庫(kù)中去。這樣,服務(wù)的請(qǐng)求者就也可以通過 WSDL 和 UDDI 發(fā)現(xiàn)到服務(wù)提供者提供的服務(wù),并可以通過應(yīng)用的調(diào)用方法來使用這個(gè)服務(wù)了。

SOA的重點(diǎn)在于集成,重用,分布式。

面向服務(wù)的體系結(jié)構(gòu)(Service-Oriented Architecture,SOA)是一種 IT 體系結(jié)構(gòu)風(fēng)格,支持將您的業(yè)務(wù)轉(zhuǎn)換為一組相互鏈接的服務(wù)或可重復(fù)業(yè)務(wù)任務(wù),可在需要時(shí)通過網(wǎng)絡(luò)訪問這些服務(wù)和任務(wù)。

SOA 描述了服務(wù)的整個(gè)系統(tǒng)如何動(dòng)態(tài)地相互查找,如何聚集在一起執(zhí)行某些應(yīng)用程序,以及如何按照多種方式進(jìn)行組合。該模型鼓勵(lì)技術(shù)和軟件的重用,以及使用SOA模型實(shí)現(xiàn)分布式系統(tǒng)。

?

2.設(shè)計(jì)秒殺,考慮分布式事務(wù)和數(shù)據(jù)庫(kù)連接數(shù)限制, 說明應(yīng)用程序級(jí)別的分布式事務(wù)控制。

優(yōu)化方向:

a.將請(qǐng)求盡量攔截在系統(tǒng)上游。

主要是為了不要讓鎖沖突落到數(shù)據(jù)庫(kù)上面去。

這里需要在各個(gè)層次進(jìn)行優(yōu)化。

第一層是在客戶端優(yōu)化,例如對(duì)瀏覽器,APP等,不應(yīng)該將每一次提交都真正提交到應(yīng)用程序,而是應(yīng)該設(shè)置一些防作弊機(jī)制,攔截部分請(qǐng)求(例如提交完button就變灰,5分鐘才能提交一次等等)

第二層是在MVC層或者業(yè)務(wù)層,如果有攻擊者擁有大量動(dòng)態(tài)IP進(jìn)行for循環(huán)秒殺,應(yīng)該按UID進(jìn)行有效識(shí)別和攔截。但是如果攻擊者擁有大量肉雞(即,不僅有動(dòng)態(tài)IP,而且有不同UID),用UID過濾就不起作用了。

第三層是在服務(wù)層攔截,對(duì)于上面挾持肉雞的攻擊是看作正常用戶的,這里不討論攻擊,只討論攔截,對(duì)于這種大訪問量,在服務(wù)層可以用隊(duì)列進(jìn)行串行化訪問(分批),根據(jù)商品存量每次放出適當(dāng)訪問請(qǐng)求就能有效控制服務(wù)層壓力。

對(duì)于第三層,可以用來確保寫請(qǐng)求不超過數(shù)據(jù)庫(kù)的連接限制。

第四層是利用緩存緩解讀請(qǐng)求(秒殺基本都是讀多寫少),讓大部分請(qǐng)求都能讀到混存,能有效緩解數(shù)據(jù)庫(kù)壓力。

第五層是異步操作,搶票成功后的付款采用異步方式返回。

通過上面一些列優(yōu)化之后,能夠有效控制真正讀和寫數(shù)據(jù)庫(kù)的請(qǐng)求數(shù)量。當(dāng)然也可以在業(yè)務(wù)規(guī)則層面先進(jìn)行優(yōu)化,例如12306分時(shí)分段售票。。。而此時(shí)對(duì)于數(shù)據(jù)庫(kù)來說,因?yàn)榍懊娴拇罅抗ぷ鲾r截了大量請(qǐng)求,數(shù)據(jù)庫(kù)的壓力可以控制在安全范圍進(jìn)行事務(wù)操作了。?

?

3.設(shè)計(jì)單點(diǎn)登錄,說明令牌生成機(jī)制及安全保障

?單點(diǎn)登錄的一般設(shè)計(jì)思路是,使用統(tǒng)一授權(quán)模塊生成token,寫入客戶端cookie,客戶端在登錄其他子站點(diǎn)時(shí),將包含token的cookie發(fā)送至子站點(diǎn),子站點(diǎn)再與統(tǒng)一授權(quán)模塊校驗(yàn)合法性,合法則在子站點(diǎn)為用戶生成session表明授權(quán)成功,進(jìn)行后續(xù)操作。

基于這種方式實(shí)現(xiàn)的單點(diǎn)登錄,cookie的安全性是一個(gè)很大問題。

?

有的系統(tǒng)會(huì)設(shè)計(jì)預(yù)登錄方式,即用戶第一次通過統(tǒng)一模塊進(jìn)行授權(quán)時(shí),如果授權(quán)通過,統(tǒng)一模塊再?gòu)?qiáng)制將客戶端重定向到各個(gè)子站點(diǎn),即預(yù)先登錄各個(gè)子站點(diǎn),各個(gè)子站點(diǎn)都會(huì)寫入session。

預(yù)登錄不僅可以簡(jiǎn)化客戶端登陸流程,而且安全性更高,因?yàn)轭A(yù)登錄的時(shí)候,用的是統(tǒng)一模塊第一次發(fā)給客戶端的原始session-cookie在各個(gè)子站點(diǎn)進(jìn)行授權(quán)(寫session),而不是各個(gè)子站點(diǎn)臨時(shí)為客戶端生成的session-cookie,

統(tǒng)一授權(quán)模塊在第一次發(fā)送sesion-cookie給客戶端的時(shí)候,完全可以在cookie中加入服務(wù)器端特有信息,達(dá)到難以偽造的目的,同時(shí)通過SSL通道進(jìn)行cookie傳輸,保證cookie不會(huì)被攔截偷取。

?

另外,采用預(yù)登錄的方式,如果一個(gè)用戶已經(jīng)登錄,則在各個(gè)子站點(diǎn)存在session[hash(uid+timestame+服務(wù)器數(shù)字簽名),],且在數(shù)據(jù)庫(kù)中也是登錄狀態(tài)。如果此時(shí)有人偽造用戶id和cookie去登錄,由于偽造的cookie與統(tǒng)一授權(quán)模塊分配的session-cookie并不相同,那么各個(gè)子站點(diǎn)就不會(huì)存在這個(gè)session[hash(uid+timestame+服務(wù)器數(shù)字簽名)],然而數(shù)據(jù)庫(kù)卻顯示此用戶一登陸,那么此時(shí)可以判斷次用戶異常(有惡意破解嫌疑)。

?

另外,即使hash(uid+timestame+服務(wù)器數(shù)字簽名),即使被盜取,也無(wú)法篡改,這是數(shù)字簽名的特征,基于這一點(diǎn),讓timestame盡快失效可以提高安全性。

簽名過程
“發(fā)送報(bào)文時(shí),發(fā)送方用一個(gè)哈希函數(shù)從報(bào)文文本中生成報(bào)文摘要,然后用自己的私人密鑰對(duì)這個(gè)摘要進(jìn)行加密,這個(gè)加密后的摘要將作為報(bào)文的數(shù)字簽名和報(bào)文一起發(fā)送給接收方,接收方首先用與發(fā)送方一樣的哈希函數(shù)從接收到的原始報(bào)文中計(jì)算出報(bào)文摘要,接著再用發(fā)送方的公用密鑰來對(duì)報(bào)文附加的數(shù)字簽名進(jìn)行解密,如果這兩個(gè)摘要相同、那么接收方就能確認(rèn)該數(shù)字簽名是發(fā)送方的。
數(shù)字簽名有兩種功效:一是能確定消息確實(shí)是由發(fā)送方簽名并發(fā)出來的,因?yàn)閯e人假冒不了發(fā)送方的簽名。二是數(shù)字簽名能確定消息的完整性。因?yàn)閿?shù)字簽名的特點(diǎn)是它代表了文件的特征,文件如果發(fā)生改變,數(shù)字摘要的值也將發(fā)生變化。不同的文件將得到不同的數(shù)字摘要。 一次數(shù)字簽名涉及到一個(gè)哈希函數(shù)、發(fā)送者的公鑰、發(fā)送者的私鑰。”

?

關(guān)于數(shù)字簽名和數(shù)字證書,可以參考 ??http://justjavac.iteye.com/blog/1144151

算法

1. 樹的按層次遍歷

思路,用一個(gè)FIFO隊(duì)列輔助,初始狀態(tài)是將樹的根節(jié)點(diǎn)放進(jìn)隊(duì)列,

然后進(jìn)行循環(huán)操作,跳出條件是隊(duì)列是否為空。

每次從隊(duì)列彈出(poll())一個(gè)元素,首先打印出這個(gè)節(jié)點(diǎn),然后判斷是否有左孩子,如果有就將左孩子入隊(duì)列,接著判斷是否有右孩子,如果有也入隊(duì)列,如此循環(huán),當(dāng)隊(duì)列為空的時(shí)候,也就完成了層次遍歷。

1 public void levelTravel() { 2 LinkedList<Node> queul = new LinkedList<>(); 3 queul.push(root); 4 while (!queul.isEmpty()) { 5 Node tmpNode = queul.poll(); 6 System.out.print(tmpNode.value+"#"); 7 if(tmpNode.left != null) { 8 queul.push(tmpNode.left); 9 } 10 if(tmpNode.right != null) { 11 queul.push(tmpNode.right); 12 } 13 } 14 }

?

2. 單鏈表,在不知道前一個(gè)節(jié)點(diǎn)地址的情況(但是知道后一個(gè)節(jié)點(diǎn)),如何刪除后一個(gè)節(jié)點(diǎn)。

把將要?jiǎng)h除節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)直接拷貝到后一個(gè)節(jié)點(diǎn)位置,然后釋放內(nèi)存。

3.0~999,如何用數(shù)學(xué)方法快速計(jì)算有多少個(gè)數(shù)字里含有7

1+10+9+100+90+90 = 300

轉(zhuǎn)載于:https://www.cnblogs.com/fysola/p/6477694.html

總結(jié)

以上是生活随笔為你收集整理的20170227玩呗娱乐的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。