騰訊歷年筆試題


1、請定義一個宏,比較兩個數a、b的大小,不能使用大於、小於、if語句。

2、兩個數相乘,小數點后位數沒有限制,請寫一個高精度算法。

3、有A、B、C、D四個人,要在夜里過一座橋。他們通過這座橋分別需要耗時1、2、5、10分鍾,只有一支手電,並且同時最多只能兩個人一起過橋。請問,如何安排,能夠在17分鍾內這四個人都過橋?

4、有12個小球,外形相同,其中一個小球的質量與其他11個不同,給一個天平,問如何用3次把這個小球找出來,並且求出這個小球是比其他的輕還是重。

5、在一個文件中有 10G 個整數,亂序排列,要求找出中位數。內存限制為 2G。只寫出思路即可。

6、一個文件中有40億個整數,每個整數為四個字節,內存為1GB,寫出一個算法:求出這個文件里的整數里不包含的一個整數。

7、騰訊服務器每秒有2w個QQ號同時上線,找出5min內重新登入的qq號並打印出來。

8、在一篇英文文章中查找指定的人名,人名使用二十六個英文字母(可以是大寫或小寫)、空格以及兩個通配符組成(、?),通配符“”表示零個或多個任意字母,通配符“?”表示一個任意字母。
如:“J* Smi??” 可以匹配“John Smith” .
請用C語言實現如下函數:
void scan(const char* pszText, const char* pszName);
注:pszText為整個文章字符,pszName為要求匹配的英文名。
請完成些函數實現輸出所有匹配的英文名,除了printf外,不能用第三方的庫函數等。

9、服務器內存1G,有一個2G的文件,里面每行存着一個QQ號(5-10位數),怎么最快找出出現過最多次的QQ號。

10、如何求根號2的值,並且按照我的需要列出指定小數位,比如根號2是1.141 我要列出1位小數就是1.1 2位就是1.14, 1000位就是1.141...... 等。。

11、如果用一個循環數組q[0..m-1]表示隊列時,該隊列只有一個隊列頭指針front,不設隊列尾指針rear,求這個隊列中從隊列投到隊列尾的元素個數(包含隊列頭、隊列尾)。

12、兩個數組a[N],b[N],其中A[N]的各個元素值已知,現給b[i]賦值,b[i] = a[0]a[1]a[2]...a[N-1]/a[i];
要求:
1). 不准用除法運算
2). 除了循環計數值,a[N],b[N]外,不准再用其他任何變量(包括局部變量,全局變量等)
3). 滿足時間復雜度O(n),空間復雜度O(1)。
說白了,你要我求b=a[0]
a...a[i-1]aa[i+1]..a[N-1]/a ,就是求:a[0]a[1]...a[i-1]a[i+1]..a[N-1]。只是我把a[i]左邊部分標示為left[i],b[i]右邊部分標示為right[i],而實際上完全不申請left[i],與right[i]變量,之所以那樣標示,無非就是為了說明:除掉當前元素a[i],其他所有元素(a[i]左邊部分,和a[i]右邊部分)的積。讀者你明白了么?
下面是此TX筆試題的兩段參考代碼,如下:
//ncicc
b[0] = 1;
for (int i = 1; i < N; i++)
{
b[0] *= a[i - 1];
b[i] = b[0];
}
b[0] = 1;
for (i = N - 2; i > 0; i--)
{
b[0] *= a[i + 1];
b[i] *= b[0];
}
b[0] *= a[1];

from wasd6081058上面第二段代碼最后一行的意義是:我們看第二個循環,從N-2到 1;再看for循環中b[0]的賦值,從N-1到2,而根據題目要求b[i] = a[0]a[1]a[2]...a[N-1]/a[i],b[0]應等於a[1]a[2]* ....a[N-1],所以這里手動添加a[1]。

13、有不同的手機終端,如iphone,安卓,Symbian,不同的終端處理不一樣,設計一種服務器和算法實現對不同的終端的處理。

14、設計一種內存管理算法。

15、A向B發郵件,B收到后讀取並發送收到,但是中間可能丟失了該郵件,怎么設計一種最節省的方法,來處理丟失問題。

16、設計一種算法求出算法復雜度 。

17、給你5個球,每個球被抽到的可能性為30、50、20、40、10,設計一個隨機算法,該算法的輸出結果為本次執行的結果。輸出A,B,C,D,E即可。

18、五筆的編碼范圍是a ~ y的25個字母,從1位到4位的編碼,如果我們把五筆的編碼按字典序排序,形成一個數組如下:
a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy
其中a的Index為0,aa的Index為1,aaa的Index為2,以此類推。
1).編寫一個函數,輸入是任意一個編碼,比如baca,輸出這個編碼對應的Index;
2).編寫一個函數,輸入是任意一個Index,比如12345,輸出這個Index對應的編碼。

19、有N+2個數,N個數出現了偶數次,2個數出現了奇數次(這兩個數不相等),問用O(1)的空間復雜度,找出這兩個數,不需要知道具體位置,只需要知道這兩個值。(@Rojay:xor一次,得到2個奇數次的數之和x。第二步,以x(展開成二進制)中有1的某位(假設第i位為1)作為划分,第二次只xor第i位為1的那些數,得到y。然后x xor y以及y便是那兩個數。 )

20、例如手機朋友網有n個服務器,為了方便用戶的訪問會在服務器上緩存數據,因此用戶每次訪問的時候最好能保持同一台服務器。
已有的做法是根據ServerIPIndex[QQNUM%n]得到請求的服務器,這種方法很方便將用戶分到不同的服務器上去。但是如果一台服務器死掉了,那么n就變為了n-1,那么ServerIPIndex[QQNUM%n]與ServerIPIndex[QQNUM%(n-1)]基本上都不一樣了,所以大多數用戶的請求都會轉到其他服務器,這樣會發生大量訪問錯誤。
問: 如何改進或者換一種方法,使得:
1). 一台服務器死掉后,不會造成大面積的訪問錯誤,
2). 原有的訪問基本還是停留在同一台服務器上;
3). 盡量考慮負載均衡。

21、A.txt和B.txt兩個文件,A.txt有1億個QQ號 , B.txt 100W個QQ號, 用代碼實現交、並、差。

22、50個台階,一次可一階或兩階,共有幾種走法?

23、一個大小為N的數組,里面是N個整數,怎樣去除重復,要求時間復雜度為O(n),空間復雜度為O(1)。
(此題答案請見@作者hawksoft:http://blog.csdn.net/hawksoft/ ... 67493)。

24、比如A認識B,B認識C,但是A不認識C, 那么稱C是A的二度好友。找出某個人的所有十度好友. 數據量為10萬。

25、 M*M的方格矩陣,其中有一部分為障礙,八個方向均可以走,現假設矩陣上有Q+1節點,從(X0,Y0)出發到其他Q個節點的最短路徑。
其中,1<=M<=1000,1<=Q<=100。

26、到商店里買200的商品返還100優惠券(可以在本商店代替現金)。請問實際上折扣是多少?

27、給定一個字符串,求出其最長的重復子串。
思路:使用后綴數組,對一個字符串生成相應的后綴數組后,然后再排序,排完序依次檢測相鄰的兩個字符串的開頭公共部分。
這樣的時間復雜度為:
生成后綴數組 O(N)
排序 O(NlogNN) 最后面的 N 是因為字符串比較也是 O(N)
依次檢測相鄰的兩個字符串 O(N * N)
總的時間復雜度是 O(N^2
logN),

28、假設兩個字符串中所含有的字符和個數都相同我們就叫這兩個字符串匹配,
比如:abcda和adabc,由於出現的字符個數都是相同,只是順序不同,
所以這兩個字符串是匹配的。要求高效!
思路:http://blog.csdn.net/v_JULY_v/ ... 47454。

29、微博廣告投放是騰訊收入來源之一。為了保證投放的廣告對用戶更有幫助,必須分享用戶對什么感興趣。用戶的每條微博都可以拆分成幾個關鍵詞,騰訊微博每個月都會收集到上T(Terabyte)的關鍵詞,請你分析出其中出現次數最多的十個關鍵詞。

30、騰訊新聞首頁改版之后,為了精確掌握改版效果,需要准實時統計訪問每篇文章的IP數量,即從文章發表之后,有多少個不同IP的用戶讀過這篇文章。每個用戶訪問請求都會被web服務器解析,並實時傳輸到后台統計系統,請你設計該“后台統計系統”,以完成統計。

31、寫一個函數對字符串數組進行排序,排序的規則是根據每個字符串重復出現次數最多的字符出現的次數,在次數相同的親情況下根據出現次數第二多的字符排序。
比如:”abcaba”中重復出現次數最多的字符是a,次數是3,第二多的字符是b,次數是2,第三是c,次數是1。因此mySort([“abcaba”,”asdfasdf”,”asdfasdfasdf”])的結果是:[“asdfasdfasdf”,”abcaba”,”asdfasdf”]。

32、有一個log文件,里面記錄的格式為:
QQ號: 時間: flag:
如123456 14:00:00 0
123457 14:00:01 1
其中flag=0表示登錄 flag=1表示退出
問:統計一天平均在線的QQ數。
點評:類似於此文中:http://blog.csdn.net/hackbutee ... 48968,讀者可以參看之。

33、有一億個數,輸入一個數,找出與它編輯距離在3以內的書,比如輸入6(0110),找出0010等數,數是32位的。

34、每個城市的IP段是固定的,新來一個IP,找出它是哪個城市的,設計一個后台系統。

35、N個數組,每個數組中的元素都是遞增的順序,現在要找出這N個數組中的公共元素部分,如何做? 注:不能用額外輔助空間。

36、http服務器會在用戶訪問某一個文件的時候,記錄下該文件被訪問的日志,網 站管理員都會去統計每天每文件被訪問的次數。寫一個小程序,來遍歷整個日志 文件,計算出每個文件被訪問的訪問次數
1).請問這個管理員設計這個算法
2).該網站管理員后來加入騰訊從事運維工作,在騰訊,單台http服務器不夠用的 ,同樣的內容,會分布在全國各地上百台服務器上。每台服務器上的日志數量, 都是之前的10倍之多,每天服務器的性能更好,之前他用的是單核cpu,現在用的 是8核的,管理員發現在這種的海量的分布式服務器,基本沒法使用了,請重新設計一個算法。

37、騰訊的qq游戲當中,最多人玩的游戲就是斗地主了,每一句游戲開始時,服務 器端都要洗牌,以保證發牌的時每個人拿的牌都是隨機的,假設用1-54來表示54 張不同的拍,請你寫一個洗牌算法,保證54張牌能隨機打散!

38、請設計一個排隊系統,能夠讓每個進入隊伍的用戶都能看到自己在隊列中所處的位置和變化,隊伍可能隨時有人加入和退出,當有人退出影響到用戶的位置排名時需要即時反饋到用戶。

39、A,B兩個整數集合,設計一個算法求它們的交集,盡可能的高效。

40、一個數組 var arr = ['abc','ddadbc','adbdcd','abcqew'.......] 長度一萬, 用最有效率的方法計算出包含被元素出現最多的。

41、有100W個關鍵字,長度小於等於50字節。用高效的算法找出top10的熱詞,並對內存的占用不超過1MB。
點評:老題,與caopengcs討論后,得出具體思路為:
①先把100W個關鍵字hash映射到小文件,根據題意,100W50B = 5010^6B = 50M,而內存只有1M,故干脆搞一個hash函數 % 50,分解成50個小文件;
②針對對每個小文件依次運用hashmap(key,value)完成每個key的value次數統計,后用堆找出每個小文件中value次數最大的top 10;
③最后依次對每兩小文件的top 10歸並,得到最終的top 10。
注:很多細節需要注意下,舉個例子,如若hash映射后導致分布不均的話,有的小文件可能會超過1M,故為保險起見,你可能會說根據數據范圍分解成50~500或更多的小文件,但到底是多少呢?我覺得這不重要,勿糾結答案,雖准備在平時,但關鍵還是看臨場發揮,保持思路清晰關注細節即可。OK,更多類似題目參見此文:http://blog.csdn.net/v_july_v/ ... 82693。

42、求二叉樹的任意兩個節點的最近公共祖先。
點評:何謂最低公共祖先,如下圖所示:節點1和節點7的最低公共祖先便是5
22.jpg

43、給40億個不重復的unsigned int的數,沒排序,然后再給一個數,如何快速間斷這個數是否在那40億個數中?

44、假設兩個字符串中所含有的字符和個數都相同我們就叫這兩個字符串匹配,
比如:abcda和adabc,由於出現的字符個數都是相同,只是順序不同,
所以這兩個字符串是匹配的。要求高效。

45、一個大小為N的數組,里面是N個整數,怎樣去除重復。
RT
要求時間復雜度為O(n),空間復雜度為O(1)。

46、如何對1億個QQ號進行排序

47、C++編譯器有哪些優化?

48、C++比C快在哪里?

49、編寫高效服務器程序,需考慮的因素?

50、設計一個抽卡程序,策划人員填寫物品出現概率,程序按照概率隨機抽出物品。

10
50

51、給定一個駝峰樣式的字符串 例如“AaABbBcBbcvQv........”->“bc”
兩個一樣的字符夾着一個不一樣的字符, 處理這個字符串去掉所有的駝峰。

52、12個工廠分布在一條東西向高速公路的兩側,工廠距離公路最西端的距離分別是0、4、5、10、12、18、27、30、31、38、39、47.在這12個工廠中選取3個原料供應廠,使得剩余工廠到最近的原料供應廠距離之和最短,問應該選哪三個廠 ?

53、待更新。

54、以windows對文件的復制粘帖功能為例,盡可能多地寫出測試思路。

55、已知String convert(String page)作用是將WEB頁轉碼為方便移動設備查看的頁面,為了確保轉碼的正確性,請設計相應測試策略。

56、請給Array本地對象增加一個原型方法,它用於刪除數組條目中重復的條目(可能有多個),返回值是一個包含被刪除的重復條目的新數組。

57、用javascript實現用戶登錄驗證的代碼。

58、調用動態連接庫的函數有哪幾種方法?

59、WM_QUIT消息的用途是什么?一個普通的Windows窗口能收到的最后一條消息是什么?

60、待更新。

61、有1000億條記錄,每條記錄由url,ip,時間組成,設計一個系統能夠快速查詢以下內容
1).給定url和時間段(精確到分鍾)統計url的訪問次數;
2).給定ip和時間段(精確到分鍾)統計ip的訪問次數。

62、實現一個簡化的搜索提示系統。給定一個包含了用戶query的日志文件,對於輸入的任意一個字符串s,輸出以s為前綴的在日志中出現頻率最高的前10條query。
由於是分布式系統,假設至少有26台機器,每個機器存儲以26個字母開頭的query日志文件(如機器1存的是a字母開頭的,機器2存的是以b字母開頭的……)
每個機器上維護着一張哈希表,對於每條query, 在哈希表表中存放其地址(哈希地址為鏈式的),並對其進行排序,按頻率由高到低進行排序。
當用戶進行搜索時,可以很快定位到某台機器,並根據哈希表,返回出現頻率最高的前10條query。
提示:
1).可以預處理日志
2).假設query不超過10億條,每個query不超過50字節。
3).考慮在大查詢量的情況下如何實現分布式服務

63、待更新。

64、Android中Looper的實現原理,為什么調用Looper.prepare()就在當前線程關聯了一個Looper對象,它是如何實現的。

65、簡述Andriod如何處理UI與耗時操作的通信,有哪些方式及各自的優缺點。

66、用Object-C定義並實現一個基於數組的循環隊列類,當隊列放滿需支持動態的擴展隊列長度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM