<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          騰訊43億QQ號碼用完后怎么辦?

          共 3335字,需瀏覽 7分鐘

           ·

          2022-11-21 10:53

          最近有讀者提問:聽說騰訊QQ號碼的理論最大值是43億左右,那么用完后會怎樣呢?

          今天,來聊一聊與騰訊QQ號碼相關(guān)的三個問題,相信大家會有一個比較完整的認識。

          • QQ號的范圍是多少?

          • QQ號用完后會怎樣?

          • QQ號和bitmap淵源?

          關(guān)于第一個問題,看完如下的有趣動圖之后,肯定就會知道QQ號的最小值和最大值。


          一. QQ號的范圍是多少?

          相信多數(shù)朋友都用過QQ,不過估計有些人很久沒登錄過了。你還記得自己的QQ號碼嗎?你知道QQ號碼有多少位數(shù)嗎?你知道QQ號碼的大小范圍嗎?
          別著急,我們會一一來解答。大家的微信號是字符串形式的,帶有一些數(shù)字和字母,但QQ號是純數(shù)字。在騰訊QQ后臺的程序中,經(jīng)??吹竭@樣的代碼:
          unsigned int uin = getFromCookie(cookie, "uin") ;if ( uin < 10001 ){   log.Error("invalid uin %u", uin) ;   return INVALID_UIN ;}

          從這段簡單的代碼中,我們可以看出很多端倪。其中uin指代的就是QQ號碼,有人說uin是unsigned int的縮寫,有人說是user ID number的縮寫。

          不管怎樣,uin表示的就是QQ號碼,且是unsigned int類型,故QQ號就是4字節(jié)無符號整數(shù),共32bit, 也就是說,QQ號的取值范圍是:[0, 2^32 - 1]
          然而,這只是理論情況,從上面代碼的判斷可知,QQ號碼的最小值是10001, 為什么騰訊要做這種限制呢?其實沒有為什么,僅僅是早期的一個設(shè)定而已。
          對于QQ號碼而言,從10001開始,號越小,就大致表明申請時間越早,是一個尊貴號。那么,10001是誰的QQ號呢?很容易猜,不過他實際不用這個號。
          2^32 - 1 的值是4294967295, 是一個10位的整數(shù),大約是43億,這就是QQ號碼的理論最大值,你肯定沒有見過11位的QQ號,至少目前是不可能存在的。
          到目前為止,大家肯定就能理解下圖中的數(shù)字含義了。在后續(xù)面試騰訊時,如果再問到QQ號碼相關(guān)的問題,一定要意識到QQ號碼的大小范圍,會有幫助的。


          二. QQ號用完后會怎樣?

          既然QQ號碼的值是有范圍的,那么自然有疑問:如果這么多QQ號碼都被申請完后,結(jié)果會怎樣呢?這是一個有趣的問題,但別替騰訊擔心這些根本問題。
          對于很多互聯(lián)網(wǎng)公司而言,賬號體系就是生命線,對騰訊尤其如此。最近幾年,微信的勢頭超過QQ, QQ的月活遠低于10億,注冊了的QQ也遠小于43億個。
          所以,完全不用擔心QQ號會超過43億,在相當長的一段時間內(nèi),43億是達不到的。而且,騰訊現(xiàn)在做了各種限制,并不會允許一個人無限地注冊QQ號碼。
          另外,如果一個QQ號被注冊了,但長期不登錄,那么就相當于占著茅坑不拉屎,浪費資源。此時,騰訊也會考慮對QQ號進行回收,具體的邏輯就不說了。
          然而,凡事總有萬一,如果有一天QQ號碼突破了43億,那也可以,對騰訊來說,意味著業(yè)務(wù)蓬勃發(fā)展,也是好事。那么,QQ后臺很多代碼就需要重構(gòu)了。


          三. QQ號和bitmap淵源

          在騰訊的面試題中,經(jīng)常以QQ號碼為背景進行考察。比如典型題目:文件中有40億個QQ號碼,如何進行去重?

          如果沒有敏感意識到使用bitmap,就是很糟糕很不應(yīng)該的事情,說明基本沒有好好去準備啊。bitmap圖解如下:


          unsigned char共8位,取值范圍是[0, 255],這個unsigned char的數(shù)值是255,能標識0~7這些數(shù)字都存在。
          同理,如下這個unsigned char類型的值是254,它對應(yīng)的含義是:1~7這些數(shù)字是存在的,而數(shù)字0是不存的:


          由此可見,一個unsigned char類型的數(shù)據(jù),可以標識0~7這8個整數(shù)的存在與否,這是很好理解的,以此類推:

          • 一個unsigned int類型數(shù)據(jù)可以標識0~31這32個整數(shù)的存在與否。

          • 兩個unsigned int類型數(shù)據(jù)可以標識0~63這64個整數(shù)的存在與否。


          說白了,也就是4B的內(nèi)存,可以標識32個整數(shù)的存在與否。如果還不清楚的話,我來畫個表格,逐步推演一下:
          內(nèi)存大小
          標識數(shù)的范圍
          4B
          0~31
          8B
          0~63
          16B
          0~127
          ...
          ...
          512MB
          0~2^32 - 1

          由此可見,512MB的內(nèi)存大小,剛好可以用來標識所有的QQ號碼的存在與否,一切迎刃而解。

          下面,我們看一下bitmap的程序,很好懂,也很實用,輕輕松松地實現(xiàn)了標記功能,順便去重。

          #include <iostream>#include <set>#include <cstring>using namespace std;
          #define N 20 // 考究0~19這20個數(shù)字#define SHIFT 5#define MASK 0x1funsigned int a[1 + N / 32] = {0};

          // 設(shè)置第i位為1, 讓它處于點亮狀態(tài)void setOne(int i){ a[i >> SHIFT] |= (1 << (i & MASK));}
          // 設(shè)置第i位為0, 讓它處于熄滅狀態(tài)void setZero(int i){ a[i >> SHIFT] &= ~(1 << (i & MASK));}
          // 獲取第i位的狀態(tài)int getState(int i){ return (a[i >> SHIFT] & (1 << (i & MASK))) && 1;}
          int main(void) { // 把1,3,1,4,9,9,9這幾個值的狀態(tài)點亮,即狀態(tài)為1 setOne(1); setOne(3); setOne(1); setOne(4); setOne(9); setOne(9); setOne(9);
          int i = 0; for(i = 0; i < N; i++) {    cout << i << "對應(yīng)的狀態(tài)為:--->" << getState(i) << endl; // 獲取狀態(tài) } cout << endl;
          return 0;}
          編譯運行一下,結(jié)果為:
          0對應(yīng)的狀態(tài)為:--->01對應(yīng)的狀態(tài)為:--->12對應(yīng)的狀態(tài)為:--->03對應(yīng)的狀態(tài)為:--->14對應(yīng)的狀態(tài)為:--->15對應(yīng)的狀態(tài)為:--->06對應(yīng)的狀態(tài)為:--->07對應(yīng)的狀態(tài)為:--->08對應(yīng)的狀態(tài)為:--->09對應(yīng)的狀態(tài)為:--->110對應(yīng)的狀態(tài)為:--->011對應(yīng)的狀態(tài)為:--->012對應(yīng)的狀態(tài)為:--->013對應(yīng)的狀態(tài)為:--->014對應(yīng)的狀態(tài)為:--->015對應(yīng)的狀態(tài)為:--->016對應(yīng)的狀態(tài)為:--->017對應(yīng)的狀態(tài)為:--->018對應(yīng)的狀態(tài)為:--->019對應(yīng)的狀態(tài)為:--->0
          QQ號碼和bitmap的淵源就是如此,以后在面試時,不可忽視bitmap的妙用哦,也希望大家看完這篇文章后,有所收貨,心情愉快。最后,來畫一張動圖玩玩,希望大家喜歡。

             

          1、全中國一共有多少IP地址?

          2、Xcode棄用Bitcode,導致應(yīng)用體積大幅增加

          3、中年人,瘋狂進國企

          4、瀏覽器的最大騙局?你深夜訪問的小網(wǎng)站,其實大家都知道

          5、全網(wǎng)都在說一個錯誤的結(jié)論

          點在看

          瀏覽 123
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天操屄日日操屄 | 欧美大香蕉在线视频 | 在线人妻 | 人人爱人人操黄色大片 | 亚洲无码观看视频 |