收集各大公司面試題集錦,讓你從容應(yīng)對(duì)各種筆試!
百度一面
1、給定一個(gè)字符串比如“abcdef”,要求寫個(gè)函數(shù)編程“defabc”,位數(shù)是可變的。這個(gè)比較簡(jiǎn)單,我用的是strcpy和memcpy,然后他問(wèn)有什么優(yōu)化的辦法,我就不知道了。
2、socket過(guò)程就是socket的server和client整個(gè)流程寫下來(lái),這個(gè)還是沒(méi)啥問(wèn)題的。
3、數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)的遍歷,給了個(gè)二叉樹(shù),前序、中序、后序?qū)懗鰜?lái),這個(gè)沒(méi)什么難度。
https://blog.csdn.net/hackbuteer1/article/details/6583988
4、樹(shù)的層次遍歷,這個(gè)開(kāi)始真忘了,想了半天才想起來(lái)用隊(duì)列。然后他又讓我詳細(xì)寫出入隊(duì)出隊(duì)的過(guò)程,總之還是搞定了。
5、兩圓相切轉(zhuǎn)圏問(wèn)題——一個(gè)小圓半徑是1厘米,一個(gè)大圓半徑是5厘米,小圓沿著大圓轉(zhuǎn)圈,請(qǐng)問(wèn)要轉(zhuǎn)幾圈可以轉(zhuǎn)完大圈?這個(gè)問(wèn)題在行測(cè)題做過(guò),就是公轉(zhuǎn)自轉(zhuǎn)的問(wèn)題,不管大小圓半徑是多少,外切轉(zhuǎn)圏要轉(zhuǎn)R/r+1圏,外切轉(zhuǎn)圏轉(zhuǎn)R/r-1圈。
百度二面
1、二叉樹(shù)的前序遍歷的遞歸和非遞歸的可執(zhí)行程序
https://blog.csdn.net/hackbuteer1/article/details/6583988
2、寫出快速排序的實(shí)現(xiàn)代碼,一個(gè)是字符串拼接函數(shù)的實(shí)現(xiàn)strcat(),還有大數(shù)相乘,都是基本題。
3、歸并排序的實(shí)現(xiàn)。
https://blog.csdn.net/hackbuteer1/article/details/6568913
4、文件按a~z編號(hào),aa~az,ba~bz...za...zz...aaa...aaz,aba~abz...這樣的方法進(jìn)行編號(hào)。給定任意一個(gè)編號(hào),輸出文件是第幾個(gè)文件。并寫出測(cè)試方法。簡(jiǎn)單,把編號(hào)看成26進(jìn)制,這題就是一個(gè)十進(jìn)制和26進(jìn)制的進(jìn)制轉(zhuǎn)換問(wèn)題了。
5、編程:兩個(gè)鏈表,按升序排序,合并后仍按升序,不準(zhǔn)用遞歸,并求復(fù)雜度
思科一面:
1、C++和Java最大的區(qū)別是什么?
2、static、extern、global的作用?(再一次出現(xiàn)了static,上鏡率真高挖~)
https://blog.csdn.net/hackbuteer1/article/details/7487694
3、inline內(nèi)聯(lián)函數(shù)是否占用運(yùn)行時(shí)間?
思科二面:
1、進(jìn)程和線程有什么區(qū)別?
2、進(jìn)程的調(diào)度算法,把記得的全說(shuō)出來(lái)
3、頁(yè)面的替換算法都有哪些?
4、用戶態(tài)和內(nèi)核態(tài)的區(qū)別?
騰訊一面:
1、關(guān)系型數(shù)據(jù)庫(kù)的特點(diǎn)
2、父類的析構(gòu)函數(shù)為什么要定義為虛函數(shù)
3、float型變量定義為0時(shí)應(yīng)該怎么賦值才是正確的
4、快排算法實(shí)現(xiàn)程序
https://blog.csdn.net/hackbuteer1/article/details/6568913
5、KMP算法實(shí)現(xiàn)程序
https://blog.csdn.net/hackbuteer1/article/details/7319115
6、override和overload的區(qū)別
騰訊二面:
1、在數(shù)據(jù)庫(kù)中如何創(chuàng)建一個(gè)表
2、創(chuàng)建后如何添加一個(gè)記錄
3、如何刪除一個(gè)記錄
4、請(qǐng)編寫實(shí)現(xiàn)malloc()內(nèi)存分配函數(shù)功能一樣的代碼。
5、請(qǐng)編寫能直接實(shí)現(xiàn)strstr()函數(shù)功能的代碼。
6、已知: 每個(gè)飛機(jī)只有一個(gè)油箱, 飛機(jī)之間可以相互加油(注意是相互,沒(méi)有加油機(jī)) 一箱油可供一架飛機(jī)繞地球飛半圈, 問(wèn)題:為使至少一架飛機(jī)繞地球一圈回到起飛時(shí)的飛機(jī)場(chǎng),至少需要出動(dòng)幾架飛機(jī)?(所有飛機(jī)從同一機(jī)場(chǎng)起飛,而且必須安全返回機(jī)場(chǎng),不允許中途降落,中間沒(méi)有飛機(jī)場(chǎng))
7、static的作用——再一次出現(xiàn)~
https://blog.csdn.net/hackbuteer1/article/details/7487694
8、寫string類的構(gòu)造,析構(gòu),拷貝函數(shù)——這題大約出現(xiàn)過(guò)4次左右,包括編程和程序填空,程序員面試寶典上有這題,也算是個(gè)經(jīng)典筆試題,出現(xiàn)幾率極大~
微軟面試題:
1、給你一個(gè)凸多邊形,你怎么用一條線,把它分成面積相等的兩部分
2、有一條數(shù)軸,上有一整數(shù)點(diǎn)s,點(diǎn)s兩側(cè)分別放了兩個(gè)機(jī)器人,不知道兩個(gè)機(jī)器人分別距離s的距離,兩機(jī)器人不能相互通信。
現(xiàn)在,給你以下指令:
R(往右一格)
L(往左一格)
IF(S)是否在S點(diǎn)
GOTO A,跳到A代碼段。
設(shè)計(jì)一套指令給兩個(gè)機(jī)器人,讓兩個(gè)器機(jī)可以最終在某一點(diǎn)相遇。
3、怎么判斷兩棵二叉樹(shù)是否是同構(gòu)的
4、按層次打印一個(gè)二叉樹(shù)
5、給你一個(gè)數(shù)n(最大為10000),怎么求其階乘
6、判斷兩個(gè)單鏈表是否有交叉
58同城面試題:
一面:
1、set(底層基于紅黑樹(shù)實(shí)現(xiàn))的操作;
2、手寫快排遞歸與非遞歸實(shí)現(xiàn);
https://blog.csdn.net/hackbuteer1/article/details/6568913
3、KMP原理解釋
https://blog.csdn.net/hackbuteer1/article/details/7319115
4、聚類分類協(xié)同過(guò)濾算法;
二面:
1、提示詞實(shí)現(xiàn)Trie樹(shù)+hash
2、最快速度求兩個(gè)數(shù)組之交集;
3、文章最短摘要生成;
迅雷面試題:
1、寫一個(gè)字符串插入的函數(shù)
2、問(wèn)了我關(guān)于虛函數(shù)底層的實(shí)現(xiàn)
https://blog.csdn.net/hackbuteer1/article/details/7883531
3、寫了快排、堆排
https://blog.csdn.net/hackbuteer1/article/details/6568913
4、問(wèn)我TCP、UDP的一些知識(shí)
https://blog.csdn.net/hackbuteer1/article/details/6845406
5、還問(wèn)了我一些Linux的知識(shí)
6、讓我實(shí)現(xiàn)紅黑樹(shù)的刪除操作
https://blog.csdn.net/hackbuteer1/article/details/7760584
網(wǎng)新恒天一面:
1、考察指針int (*p)[10]和int *p[10]的區(qū)別,用法
2、sizeof(),strlen()的區(qū)別和用法
3、堆、棧的區(qū)別和用法
4、多繼承的優(yōu)點(diǎn)與缺點(diǎn)
5、(1)IO2:30ms, CPU 20ms, IO1 20ms, CPU 30ms
(2) IO1 20ms, CPU 20ms, IO2 10ms
(3) CPU 30ms, IO1 20ms
求三種情況的CPU和IO占用率
網(wǎng)新恒天二面:
1、內(nèi)聯(lián)函數(shù)與宏的區(qū)別
2、與信號(hào)量相關(guān)知識(shí)的考察,具體題目記不清了,反正知道基本概念就會(huì)做
3、填空,考察頁(yè)式虛擬內(nèi)存的缺頁(yè)情況,也是知道這部分知識(shí)點(diǎn)就會(huì)做的題
4、類的繼承相關(guān)知識(shí)點(diǎn)的考察,是一道程序輸出分析題
5、棧的類的成員函數(shù)的實(shí)現(xiàn),程序填空題。
6、模板函數(shù)與函數(shù)模板的區(qū)別
7、函數(shù)模板與類模板的區(qū)別
百度筆試題:
1、數(shù)組,鏈表的優(yōu)缺點(diǎn):這個(gè)問(wèn)題比較簡(jiǎn)單不過(guò)我自己經(jīng)常會(huì)忽略的一點(diǎn)是數(shù)組是固定空間,鏈表是可變空間
2、a[N][20]輸入N個(gè)長(zhǎng)度不超過(guò)20的字符串,比較這些字符串中是否有完全相同的字母,且相同字母數(shù)是否相等。如何改進(jìn)該算法,降低復(fù)雜度。
3、猜?lián)淇伺?mdash;—給定一些牌,把花色告訴,把點(diǎn)數(shù)告訴乙
甲:我不知道 乙:我知道你不知道
甲:現(xiàn)在我知道了 乙:我也知道了
求是哪張牌。
給定的牌我不記得,反正這個(gè)題很簡(jiǎn)單,行測(cè)中的簡(jiǎn)單題,網(wǎng)上比比皆是。
4、A:M*M矩陣,求字符串S是否存在A的連續(xù)對(duì)角線上。(這題應(yīng)該有涉及到一個(gè)之字二維矩陣方面的知識(shí))
A若為內(nèi)存裝不下的大矩陣該如何處理?
5、系統(tǒng)接收數(shù)據(jù)包32字節(jié),第1字節(jié)為優(yōu)先級(jí),其余為數(shù)據(jù)。設(shè)計(jì)一個(gè)調(diào)度算法
(1)優(yōu)先級(jí)高的先處理
(2)同等條件下,請(qǐng)求次數(shù)多的先處理
(3)優(yōu)先級(jí)高的一定比優(yōu)先級(jí)低的先處理
寫出所用的數(shù)據(jù)結(jié)構(gòu)的定義,計(jì)算空間容量。
阿里巴巴B2B一面
1、各種排序算法的比較次數(shù)
2、static、auto未初始化的初始值
https://blog.csdn.net/hackbuteer1/article/details/7487694
3、x*=y+8,給出x,y的值,求該表達(dá)式計(jì)算后二者的值
4、enum類型的default賦值規(guī)則
5、定義函數(shù)F(int x){return (x*x);} 求F(3+5)
6、fgets(s,n,f)函數(shù)的功能
7、定義*s="ab\0cdef",輸出該字符可以看到什么結(jié)果
8、還是static相關(guān)知識(shí)——在此說(shuō)明一下static這個(gè)關(guān)鍵字相當(dāng)重要,在筆試中出現(xiàn)率為100%,在面試中出現(xiàn)率為50%。
9、數(shù)據(jù)庫(kù)中索引,簇索引,非簇,唯一,復(fù)合,覆蓋索引的區(qū)別
10、SQL語(yǔ)句和范式是對(duì)數(shù)據(jù)庫(kù)有要求的公司筆試必考點(diǎn)之一
阿里巴巴B2B二面
1、通配符的含義
2、死鎖的基本知識(shí)——死鎖是各大筆試面試中出現(xiàn)率50%的知識(shí)點(diǎn)
3、信號(hào)量P、V原語(yǔ)的相關(guān)知識(shí)點(diǎn)
4、有向圖的鄰接表表示
5、STL中迭代器的工作原理,迭代器與普通指針有什么區(qū)別?
迭代器和指針相同的地方:
1、指針和iterator都支持與整數(shù)進(jìn)行+,-運(yùn)算,而且其含義都是從當(dāng)前位置向前或者向后移動(dòng)n個(gè)位置
2、指針和iterator都支持減法運(yùn)算,指針-指針得到的是兩個(gè)指針之間的距離,迭代器-迭代器得到的是兩個(gè)迭代器之間的距離
3、通過(guò)指針或者iterator都能夠修改其指向的元素
通過(guò)上面這幾點(diǎn)看,兩者真的很像,但是兩者也有著下面的幾個(gè)不同地方
1、out操作符可以直接輸出指針的值,但是對(duì)迭代器進(jìn)行在操作的時(shí)候會(huì)報(bào)錯(cuò)。通過(guò)看報(bào)錯(cuò)信息和頭文件知道,迭代器返回的是對(duì)象引用而不是對(duì)象的值,所以cout只能輸出迭代器使用*取值后的值而不能直接輸出其自身。
2、指針能指向函數(shù)而迭代器不行,迭代器只能指向容器
這就說(shuō)明了迭代器和指針其實(shí)是完全不一樣的概念來(lái)的。指針是一種特殊的變量,它專門用來(lái)存放另一變量的地址,而迭代器只是參考了指針的特性進(jìn)行設(shè)計(jì)的一種STL接口。
筆者曾在網(wǎng)上看到這樣一種說(shuō)法:迭代器是廣義指針,而指針滿足所有迭代器要求。迭代器是STL算法的接口,而指針是迭代器,因此STL算法可以使用指針來(lái)對(duì)基于指針的非STL容器進(jìn)行操作。
筆者覺(jué)得上面說(shuō)法也有幾分道理,但是到底正不正確就留給看官自己判斷了。但是有一點(diǎn)希望大家注意的是:千萬(wàn)不要把指針和迭代器搞混了。也許某些編譯器使用指針來(lái)實(shí)現(xiàn)迭代器以至于有些人會(huì)誤以為指針和迭代器是一個(gè)概念來(lái)的。
6、什么是友元?
7、delete、new的用法
8、typename的用法
9、編程判斷一個(gè)數(shù)是否為2的冪
10、你怎樣重新改進(jìn)和設(shè)計(jì)一個(gè)ATM銀行自動(dòng)取款機(jī)?
12、10000Mbps萬(wàn)兆交換機(jī)怎么實(shí)現(xiàn)?
13、操作符重載的相關(guān)知識(shí)點(diǎn),大題,具體記不清了
人民搜索的筆試題,總結(jié)如下
1、打印漢諾塔移動(dòng)步驟,并且計(jì)算復(fù)雜度
2、計(jì)算兩個(gè)字符串的是否相似(字符的種類,和出現(xiàn)次數(shù)相同)
3、定義二叉樹(shù),節(jié)點(diǎn)值為int,計(jì)算二叉樹(shù)中的值在[a,b]區(qū)間的節(jié)點(diǎn)的個(gè)數(shù)
4、動(dòng)態(tài)規(guī)劃題:一條路有k可坑,每次能跳平方數(shù)步長(zhǎng)(1 4 9 16。。),不能跳到坑里,從a跳到b最少幾步?
5、給一個(gè)整數(shù)數(shù)組,求數(shù)組中重復(fù)出現(xiàn)次數(shù)大于數(shù)組總個(gè)數(shù)一半的數(shù)。
1、對(duì)以孩子兄弟鏈接的樹(shù)進(jìn)行遍歷,不能用遞歸,也不能借助任何輔助空間
2、假設(shè)數(shù)組B是升序Int數(shù)組A循環(huán)移若干得到的位,實(shí)現(xiàn)對(duì)數(shù)組B進(jìn)行查找的高效算法
3、只有整數(shù)和+-*/四種運(yùn)算組成的算術(shù)表達(dá)書,實(shí)現(xiàn)其求值
4、還有一個(gè)是考貪心算法的,你讓他們看算法導(dǎo)論那本書,關(guān)于fractional knapsack problem的那一段,就是0-1背包的一種變形;
1、實(shí)現(xiàn)一個(gè)atoi函數(shù)==>'注意正負(fù)號(hào)的判定'
2、翻轉(zhuǎn)一個(gè)句子,其中單詞是正序的==>兩次旋轉(zhuǎn)
3、二叉樹(shù)兩個(gè)結(jié)點(diǎn)中的最小公共子結(jié)點(diǎn)==>求長(zhǎng)度,長(zhǎng)度之差,遠(yuǎn)的先走,再一起走
4、三角陣中從第一行到最后一行(給出搜索方向的限制)找一個(gè)連續(xù)的最大和==>廣度優(yōu)先搜索√
5、實(shí)現(xiàn)一個(gè)STL中的vector中的盡量多的方法。