關(guān)于往年的筆試題目其中有哪些內(nèi)容呢?是否今年也能派上用場呢?下面是CN人才網(wǎng)為大家搜集整理的騰訊歷年筆試題,歡迎閱讀與借鑒。
騰訊歷年筆試題
1、請(qǐng)定義一個(gè)宏,比較兩個(gè)數(shù)a、b的大小,不能使用大于、小于、if語句。
2、兩個(gè)數(shù)相乘,小數(shù)點(diǎn)后位數(shù)沒有限制,請(qǐng)寫一個(gè)高精度算法。
3、有A、B、C、D四個(gè)人,要在夜里過一座橋。他們通過這座橋分別需要耗時(shí)1、2、5、10分鐘,只有一支手電,并且同時(shí)最多只能兩個(gè)人一起過橋。請(qǐng)問,如何安排,能夠在17分鐘內(nèi)這四個(gè)人都過橋?
4、有12個(gè)小球,外形相同,其中一個(gè)小球的質(zhì)量與其他11個(gè)不同,給一個(gè)天平,問如何用3次把這個(gè)小球找出來,并且求出這個(gè)小球是比其他的輕還是重。
5、在一個(gè)文件中有 10G 個(gè)整數(shù),亂序排列,要求找出中位數(shù)。內(nèi)存限制為 2G。只寫出思路即可。
6、一個(gè)文件中有40億個(gè)整數(shù),每個(gè)整數(shù)為四個(gè)字節(jié),內(nèi)存為1GB,寫出一個(gè)算法:求出這個(gè)文件里的整數(shù)里不包含的一個(gè)整數(shù)。
7、騰訊服務(wù)器每秒有2w個(gè)QQ號(hào)同時(shí)上線,找出5min內(nèi)重新登入的qq號(hào)并打印出來。
8、在一篇英文文章中查找指定的人名,人名使用二十六個(gè)英文字母(可以是大寫或小寫)、空格以及兩個(gè)通配符組成(、?),通配符“”表示零個(gè)或多個(gè)任意字母,通配符“?”表示一個(gè)任意字母。
如:“J* Smi??” 可以匹配“John Smith” .
請(qǐng)用C語言實(shí)現(xiàn)如下函數(shù):
void scan(const char* pszText, const char* pszName);
注:pszText為整個(gè)文章字符,pszName為要求匹配的英文名。
請(qǐng)完成些函數(shù)實(shí)現(xiàn)輸出所有匹配的英文名,除了printf外,不能用第三方的庫函數(shù)等。
9、服務(wù)器內(nèi)存1G,有一個(gè)2G的文件,里面每行存著一個(gè)QQ號(hào)(5-10位數(shù)),怎么最快找出出現(xiàn)過最多次的QQ號(hào)。
10、如何求根號(hào)2的值,并且按照我的需要列出指定小數(shù)位,比如根號(hào)2是1.141 我要列出1位小數(shù)就是1.1 2位就是1.14, 1000位就是1.141...... 等。。
11、如果用一個(gè)循環(huán)數(shù)組q[0..m-1]表示隊(duì)列時(shí),該隊(duì)列只有一個(gè)隊(duì)列頭指針front,不設(shè)隊(duì)列尾指針rear,求這個(gè)隊(duì)列中從隊(duì)列投到隊(duì)列尾的元素個(gè)數(shù)(包含隊(duì)列頭、隊(duì)列尾)。
12、兩個(gè)數(shù)組a[N],b[N],其中A[N]的各個(gè)元素值已知,現(xiàn)給b[i]賦值,b[i] = a[0]a[1]a[2]...a[N-1]/a[i];
要求:
1). 不準(zhǔn)用除法運(yùn)算
2). 除了循環(huán)計(jì)數(shù)值,a[N],b[N]外,不準(zhǔn)再用其他任何變量(包括局部變量,全局變量等)
3). 滿足時(shí)間復(fù)雜度O(n),空間復(fù)雜度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(bǔ)[i]左邊部分標(biāo)示為left[i],b[i]右邊部分標(biāo)示為right[i],而實(shí)際上完全不申請(qǐng)left[i],與right[i]變量,之所以那樣標(biāo)示,無非就是為了說明:除掉當(dāng)前元素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上面第二段代碼最后一行的意義是:我們看第二個(gè)循環(huán),從N-2到 1;再看for循環(huán)中b[0]的賦值,從N-1到2,而根據(jù)題目要求b[i] = a[0]a[1]a[2]...a[N-1]/a[i],b[0]應(yīng)等于a[1]a[2]* ....a[N-1],所以這里手動(dòng)添加a[1]。
13、有不同的手機(jī)終端,如iphone,安卓,Symbian,不同的終端處理不一樣,設(shè)計(jì)一種服務(wù)器和算法實(shí)現(xiàn)對(duì)不同的終端的處理。
14、設(shè)計(jì)一種內(nèi)存管理算法。
15、A向B發(fā)郵件,B收到后讀取并發(fā)送收到,但是中間可能丟失了該郵件,怎么設(shè)計(jì)一種最節(jié)省的方法,來處理丟失問題。
16、設(shè)計(jì)一種算法求出算法復(fù)雜度 。
17、給你5個(gè)球,每個(gè)球被抽到的可能性為30、50、20、40、10,設(shè)計(jì)一個(gè)隨機(jī)算法,該算法的輸出結(jié)果為本次執(zhí)行的結(jié)果。輸出A,B,C,D,E即可。
18、五筆的編碼范圍是a ~ y的25個(gè)字母,從1位到4位的編碼,如果我們把五筆的編碼按字典序排序,形成一個(gè)數(shù)組如下:
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).編寫一個(gè)函數(shù),輸入是任意一個(gè)編碼,比如baca,輸出這個(gè)編碼對(duì)應(yīng)的Index;
2).編寫一個(gè)函數(shù),輸入是任意一個(gè)Index,比如12345,輸出這個(gè)Index對(duì)應(yīng)的編碼。
19、有N+2個(gè)數(shù),N個(gè)數(shù)出現(xiàn)了偶數(shù)次,2個(gè)數(shù)出現(xiàn)了奇數(shù)次(這兩個(gè)數(shù)不相等),問用O(1)的空間復(fù)雜度,找出這兩個(gè)數(shù),不需要知道具體位置,只需要知道這兩個(gè)值。(@Rojay:xor一次,得到2個(gè)奇數(shù)次的數(shù)之和x。第二步,以x(展開成二進(jìn)制)中有1的某位(假設(shè)第i位為1)作為劃分,第二次只xor第i位為1的那些數(shù),得到y(tǒng)。然后x xor y以及y便是那兩個(gè)數(shù)。 )
20、例如手機(jī)朋友網(wǎng)有n個(gè)服務(wù)器,為了方便用戶的訪問會(huì)在服務(wù)器上緩存數(shù)據(jù),因此用戶每次訪問的時(shí)候最好能保持同一臺(tái)服務(wù)器。
已有的做法是根據(jù)ServerIPIndex[QQNUM%n]得到請(qǐng)求的服務(wù)器,這種方法很方便將用戶分到不同的服務(wù)器上去。但是如果一臺(tái)服務(wù)器死掉了,那么n就變?yōu)榱薾-1,那么ServerIPIndex[QQNUM%n]與ServerIPIndex[QQNUM%(n-1)]基本上都不一樣了,所以大多數(shù)用戶的請(qǐng)求都會(huì)轉(zhuǎn)到其他服務(wù)器,這樣會(huì)發(fā)生大量訪問錯(cuò)誤。
問: 如何改進(jìn)或者換一種方法,使得:
1). 一臺(tái)服務(wù)器死掉后,不會(huì)造成大面積的訪問錯(cuò)誤,
2). 原有的訪問基本還是停留在同一臺(tái)服務(wù)器上;
3). 盡量考慮負(fù)載均衡。
21、A.txt和B.txt兩個(gè)文件,A.txt有1億個(gè)QQ號(hào) , B.txt 100W個(gè)QQ號(hào), 用代碼實(shí)現(xiàn)交、并、差。
22、50個(gè)臺(tái)階,一次可一階或兩階,共有幾種走法?
23、一個(gè)大小為N的數(shù)組,里面是N個(gè)整數(shù),怎樣去除重復(fù),要求時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。
(此題答案請(qǐng)見@作者h(yuǎn)awksoft:https://blog.csdn.net/hawksoft/ ... 67493)。
24、比如A認(rèn)識(shí)B,B認(rèn)識(shí)C,但是A不認(rèn)識(shí)C, 那么稱C是A的二度好友。找出某個(gè)人的所有十度好友. 數(shù)據(jù)量為10萬。
25、 M*M的方格矩陣,其中有一部分為障礙,八個(gè)方向均可以走,現(xiàn)假設(shè)矩陣上有Q+1節(jié)點(diǎn),從(X0,Y0)出發(fā)到其他Q個(gè)節(jié)點(diǎn)的最短路徑。
其中,1<=M<=1000,1<=Q<=100。
26、到商店里買200的商品返還100優(yōu)惠券(可以在本商店代替現(xiàn)金)。請(qǐng)問實(shí)際上折扣是多少?
27、給定一個(gè)字符串,求出其最長的重復(fù)子串。
思路:使用后綴數(shù)組,對(duì)一個(gè)字符串生成相應(yīng)的后綴數(shù)組后,然后再排序,排完序依次檢測相鄰的兩個(gè)字符串的開頭公共部分。
這樣的時(shí)間復(fù)雜度為:
生成后綴數(shù)組 O(N)
排序 O(NlogNN) 最后面的 N 是因?yàn)樽址容^也是 O(N)
依次檢測相鄰的兩個(gè)字符串 O(N N)
總的時(shí)間復(fù)雜度是 O(N^2*logN),
28、假設(shè)兩個(gè)字符串中所含有的字符和個(gè)數(shù)都相同我們就叫這兩個(gè)字符串匹配,
比如:abcda和adabc,由于出現(xiàn)的字符個(gè)數(shù)都是相同,只是順序不同,
所以這兩個(gè)字符串是匹配的。要求高效!
思路:https://blog.csdn.net/v_JULY_v/ ... 47454。
29、微博廣告投放是騰訊收入來源之一。為了保證投放的廣告對(duì)用戶更有幫助,必須分享用戶對(duì)什么感興趣。用戶的每條微博都可以拆分成幾個(gè)關(guān)鍵詞,騰訊微博每個(gè)月都會(huì)收集到上T(Terabyte)的關(guān)鍵詞,請(qǐng)你分析出其中出現(xiàn)次數(shù)最多的十個(gè)關(guān)鍵詞。
30、騰訊新聞首頁改版之后,為了精確掌握改版效果,需要準(zhǔn)實(shí)時(shí)統(tǒng)計(jì)訪問每篇文章的IP數(shù)量,即從文章發(fā)表之后,有多少個(gè)不同IP的用戶讀過這篇文章。每個(gè)用戶訪問請(qǐng)求都會(huì)被web服務(wù)器解析,并實(shí)時(shí)傳輸?shù)胶笈_(tái)統(tǒng)計(jì)系統(tǒng),請(qǐng)你設(shè)計(jì)該“后臺(tái)統(tǒng)計(jì)系統(tǒng)”,以完成統(tǒng)計(jì)。
31、寫一個(gè)函數(shù)對(duì)字符串?dāng)?shù)組進(jìn)行排序,排序的規(guī)則是根據(jù)每個(gè)字符串重復(fù)出現(xiàn)次數(shù)最多的字符出現(xiàn)的次數(shù),在次數(shù)相同的親情況下根據(jù)出現(xiàn)次數(shù)第二多的字符排序。
比如:”abcaba”中重復(fù)出現(xiàn)次數(shù)最多的字符是a,次數(shù)是3,第二多的字符是b,次數(shù)是2,第三是c,次數(shù)是1。因此mySort([“abcaba”,”asdfasdf”,”asdfasdfasdf”])的結(jié)果是:[“asdfasdfasdf”,”abcaba”,”asdfasdf”]。
32、有一個(gè)log文件,里面記錄的格式為:
QQ號(hào): 時(shí)間: flag:
如123456 14:00:00 0
123457 14:00:01 1
其中flag=0表示登錄 flag=1表示退出
問:統(tǒng)計(jì)一天平均在線的QQ數(shù)。
33、有一億個(gè)數(shù),輸入一個(gè)數(shù),找出與它編輯距離在3以內(nèi)的書,比如輸入6(0110),找出0010等數(shù),數(shù)是32位的。
34、每個(gè)城市的IP段是固定的,新來一個(gè)IP,找出它是哪個(gè)城市的,設(shè)計(jì)一個(gè)后臺(tái)系統(tǒng)。
35、N個(gè)數(shù)組,每個(gè)數(shù)組中的元素都是遞增的順序,現(xiàn)在要找出這N個(gè)數(shù)組中的公共元素部分,如何做? 注:不能用額外輔助空間。
36、http服務(wù)器會(huì)在用戶訪問某一個(gè)文件的時(shí)候,記錄下該文件被訪問的日志,網(wǎng) 站管理員都會(huì)去統(tǒng)計(jì)每天每文件被訪問的次數(shù)。寫一個(gè)小程序,來遍歷整個(gè)日志 文件,計(jì)算出每個(gè)文件被訪問的訪問次數(shù)
1).請(qǐng)問這個(gè)管理員設(shè)計(jì)這個(gè)算法
2).該網(wǎng)站管理員后來加入騰訊從事運(yùn)維工作,在騰訊,單臺(tái)http服務(wù)器不夠用的 ,同樣的內(nèi)容,會(huì)分布在全國各地上百臺(tái)服務(wù)器上。每臺(tái)服務(wù)器上的日志數(shù)量, 都是之前的10倍之多,每天服務(wù)器的性能更好,之前他用的是單核cpu,現(xiàn)在用的 是8核的,管理員發(fā)現(xiàn)在這種的海量的分布式服務(wù)器,基本沒法使用了,請(qǐng)重新設(shè)計(jì)一個(gè)算法。
37、騰訊的qq游戲當(dāng)中,最多人玩的游戲就是斗地主了,每一句游戲開始時(shí),服務(wù) 器端都要洗牌,以保證發(fā)牌的時(shí)每個(gè)人拿的牌都是隨機(jī)的,假設(shè)用1-54來表示54 張不同的拍,請(qǐng)你寫一個(gè)洗牌算法,保證54張牌能隨機(jī)打散!
38、請(qǐng)?jiān)O(shè)計(jì)一個(gè)排隊(duì)系統(tǒng),能夠讓每個(gè)進(jìn)入隊(duì)伍的用戶都能看到自己在隊(duì)列中所處的位置和變化,隊(duì)伍可能隨時(shí)有人加入和退出,當(dāng)有人退出影響到用戶的位置排名時(shí)需要即時(shí)反饋到用戶。
39、A,B兩個(gè)整數(shù)集合,設(shè)計(jì)一個(gè)算法求它們的交集,盡可能的高效。
40、一個(gè)數(shù)組 var arr = ['abc','ddadbc','adbdcd','abcqew'.......] 長度一萬, 用最有效率的方法計(jì)算出包含被元素出現(xiàn)最多的。
41、有100W個(gè)關(guān)鍵字,長度小于等于50字節(jié)。用高效的算法找出top10的熱詞,并對(duì)內(nèi)存的占用不超過1MB。
點(diǎn)評(píng):老題,與caopengcs討論后,得出具體思路為:
①先把100W個(gè)關(guān)鍵字hash映射到小文件,根據(jù)題意,100W50B = 5010^6B = 50M,而內(nèi)存只有1M,故干脆搞一個(gè)hash函數(shù) % 50,分解成50個(gè)小文件;
②針對(duì)對(duì)每個(gè)小文件依次運(yùn)用hashmap(key,value)完成每個(gè)key的value次數(shù)統(tǒng)計(jì),后用堆找出每個(gè)小文件中value次數(shù)最大的top 10;
③最后依次對(duì)每兩小文件的top 10歸并,得到最終的top 10。
注:很多細(xì)節(jié)需要注意下,舉個(gè)例子,如若hash映射后導(dǎo)致分布不均的話,有的小文件可能會(huì)超過1M,故為保險(xiǎn)起見,你可能會(huì)說根據(jù)數(shù)據(jù)范圍分解成50~500或更多的小文件,但到底是多少呢?我覺得這不重要,勿糾結(jié)答案,雖準(zhǔn)備在平時(shí),但關(guān)鍵還是看臨場發(fā)揮,保持思路清晰關(guān)注細(xì)節(jié)即可。OK,更多類似題目參見此文:https://blog.csdn.net/v_july_v/ ... 82693。
42、求二叉樹的任意兩個(gè)節(jié)點(diǎn)的最近公共祖先。
點(diǎn)評(píng):何謂最低公共祖先,如下圖所示:節(jié)點(diǎn)1和節(jié)點(diǎn)7的最低公共祖先便是5
22.jpg
43、給40億個(gè)不重復(fù)的unsigned int的數(shù),沒排序,然后再給一個(gè)數(shù),如何快速間斷這個(gè)數(shù)是否在那40億個(gè)數(shù)中?
44、假設(shè)兩個(gè)字符串中所含有的字符和個(gè)數(shù)都相同我們就叫這兩個(gè)字符串匹配,
比如:abcda和adabc,由于出現(xiàn)的字符個(gè)數(shù)都是相同,只是順序不同,
所以這兩個(gè)字符串是匹配的。要求高效。
45、一個(gè)大小為N的數(shù)組,里面是N個(gè)整數(shù),怎樣去除重復(fù)。
RT
要求時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。
46、如何對(duì)1億個(gè)QQ號(hào)進(jìn)行排序
47、C++編譯器有哪些優(yōu)化?
48、C++比C快在哪里?
49、編寫高效服務(wù)器程序,需考慮的因素?
50、設(shè)計(jì)一個(gè)抽卡程序,策劃人員填寫物品出現(xiàn)概率,程序按照概率隨機(jī)抽出物品。
10
50
51、給定一個(gè)駝峰樣式的字符串 例如“AaABbBcBbcvQv........”->“bc”
兩個(gè)一樣的字符夾著一個(gè)不一樣的字符, 處理這個(gè)字符串去掉所有的駝峰。
52、12個(gè)工廠分布在一條東西向高速公路的兩側(cè),工廠距離公路最西端的距離分別是0、4、5、10、12、18、27、30、31、38、39、47.在這12個(gè)工廠中選取3個(gè)原料供應(yīng)廠,使得剩余工廠到最近的原料供應(yīng)廠距離之和最短,問應(yīng)該選哪三個(gè)廠 ?
53、待更新。
54、以windows對(duì)文件的復(fù)制粘帖功能為例,盡可能多地寫出測試思路。
55、已知String convert(String page)作用是將WEB頁轉(zhuǎn)碼為方便移動(dòng)設(shè)備查看的頁面,為了確保轉(zhuǎn)碼的正確性,請(qǐng)?jiān)O(shè)計(jì)相應(yīng)測試策略。
56、請(qǐng)給Array本地對(duì)象增加一個(gè)原型方法,它用于刪除數(shù)組條目中重復(fù)的條目(可能有多個(gè)),返回值是一個(gè)包含被刪除的重復(fù)條目的新數(shù)組。
57、用javascript實(shí)現(xiàn)用戶登錄驗(yàn)證的代碼。
58、調(diào)用動(dòng)態(tài)連接庫的函數(shù)有哪幾種方法?
59、WM_QUIT消息的用途是什么?一個(gè)普通的Windows窗口能收到的最后���條消息是什么?
60、待更新。
61、有1000億條記錄,每條記錄由url,ip,時(shí)間組成,設(shè)計(jì)一個(gè)系統(tǒng)能夠快速查詢以下內(nèi)容
1).給定url和時(shí)間段(精確到分鐘)統(tǒng)計(jì)url的訪問次數(shù);
2).給定ip和時(shí)間段(精確到分鐘)統(tǒng)計(jì)ip的訪問次數(shù)。
62、實(shí)現(xiàn)一個(gè)簡化的搜索提示系統(tǒng)。給定一個(gè)包含了用戶query的日志文件,對(duì)于輸入的任意一個(gè)字符串s,輸出以s為前綴的在日志中出現(xiàn)頻率最高的前10條query。
由于是分布式系統(tǒng),假設(shè)至少有26臺(tái)機(jī)器,每個(gè)機(jī)器存儲(chǔ)以26個(gè)字母開頭的query日志文件(如機(jī)器1存的是a字母開頭的,機(jī)器2存的是以b字母開頭的……)
每個(gè)機(jī)器上維護(hù)著一張哈希表,對(duì)于每條query, 在哈希表表中存放其地址(哈希地址為鏈?zhǔn)降?,并對(duì)其進(jìn)行排序,按頻率由高到低進(jìn)行排序。
當(dāng)用戶進(jìn)行搜索時(shí),可以很快定位到某臺(tái)機(jī)器,并根據(jù)哈希表,返回出現(xiàn)頻率最高的前10條query。
提示:
1).可以預(yù)處理日志
2).假設(shè)query不超過10億條,每個(gè)query不超過50字節(jié)。
3).考慮在大查詢量的情況下如何實(shí)現(xiàn)分布式服務(wù)
63、待更新。
64、Android中Looper的實(shí)現(xiàn)原理,為什么調(diào)用Looper.prepare()就在當(dāng)前線程關(guān)聯(lián)了一個(gè)Looper對(duì)象,它是如何實(shí)現(xiàn)的。
65、簡述Andriod如何處理UI與耗時(shí)操作的通信,有哪些方式及各自的優(yōu)缺點(diǎn)。
66、用Object-C定義并實(shí)現(xiàn)一個(gè)基于數(shù)組的循環(huán)隊(duì)列類,當(dāng)隊(duì)列放滿需支持動(dòng)態(tài)的擴(kuò)展隊(duì)列長度。