各大公司面試題目
阿里巴巴B2B一面
1、各種排序演算法的比較次數
2、static、auto未初始化的初始值
3、x*=y+8,給出x,y的值,求該表示式計算後二者的值
4、enum型別的default賦值規則
5、定義函式F(int x){return (x*x);} 求F(3+5)
6、fgets(s,n,f)函式的功能
7、定義*s="abcdef",輸出該字元可以看到什麼結果
8、還是static相關知識在此說明一下static這個關鍵字相當重要,在筆試中出現率為100%,在面試中出現率為50%。
9、資料庫中索引,簇索引,非簇,唯一,複合,覆蓋索引的區別
10、SQL語句和正規化是對資料庫有要求的公司筆試必考點之一
阿里巴巴B2B二面
1、萬用字元的含義
2、死鎖的基本知識死鎖是各大筆試面試中出現率50%的知識點
3、訊號量P、V原語的相關知識點
4、有向圖的鄰接表表示
5、STL中迭代器的工作原理,迭代器與普通指標有什麼區別?
迭代器和指標相同的地方:
1、指標和iterator都支援與整數進行+,-運算,而且其含義都是從當前位置向前或者向後移動n個位置
2、指標和iterator都支援減法運算,指標-指標得到的是兩個指標之間的距離,迭代器-迭代器得到的是兩個迭代器之間的距離
3、透過指標或者iterator都能夠修改其指向的元素
透過上面這幾點看,兩者真的很像,但是兩者也有著下面的幾個不同地方
1、out運算子可以直接輸出指標的值,但是對迭代器進行在操作的時候會報錯。透過看報錯資訊和標頭檔案知道,迭代器返回的是物件引用而不是物件的值,所以cout只能輸出迭代器使用*取值後的值而不能直接輸出其自身。
2、指標能指向函式而迭代器不行,迭代器只能指向容器
這就說明了迭代器和指標其實是完全不一樣的概念來的。指標是一種特殊的變數,它專門用來存放另一變數的地址,而迭代器只是參考了指標的特性進行設計的一種STL介面。
筆者曾在網上看到這樣一種說法:迭代器是廣義指標,而指標滿足所有迭代器要求。迭代器是STL演算法的介面,而指標是迭代器,因此STL演算法可以使用指標來對基於指標的非STL容器進行操作。
筆者覺得上面說法也有幾分道理,但是到底正不正確就留給看官自己判斷了。但是有一點希望大家注意的是:千萬不要把指標和迭代器搞混了。也許某些編譯器使用指標來實現迭代器以至於有些人會誤以為指標和迭代器是一個概念來的。
6、什麼是友元?
7、、new的用法
8、typename的用法
9、程式設計判斷一個數是否為2的冪
10、你怎樣重新改進和設計一個ATM銀行自動取款機?
12、10000Mbps萬兆交換機怎麼實現?
13、運算子過載的相關知識點,大題,具體記不清了
人民搜尋的筆試題
1、列印漢諾塔移動步驟,並且計算複雜度
2、計算兩個字串的是否相似(字元的種類,和出現次數相同)
3、定義二叉樹,節點值為int,計算二叉樹中的值在[a,b]區間的節點的個數
4、動態規劃題:一條路有k可坑,每次能跳平方數步長(1 4 9 16。。),不能跳到坑裡,從a跳到b最少幾步?
5、給一個整數陣列,求陣列中重複出現次數大於陣列總個數一半的數。
1、對以孩子兄弟連結的樹進行遍歷,不能用遞迴,也不能借助任何輔助空間
2、假設陣列B是升序Int陣列A迴圈移若干得到的位,實現對陣列B進行查詢的高效演算法
3、只有整數和+-*/四種運算組成的算術表達書,實現其求值
4、還有一個是考貪心演算法的,你讓他們看演算法導論那本書,關於fractional knapsack problem的那一段,就是0-1揹包的一種變形;
5、連結串列相鄰元素翻轉,如a->b->c->d->e->f-g,翻轉後變為:b->a->d->c->f->e->g
6、求正整數n所有可能的和式的組合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2)
1、實現一個atoi函式==>'注意正負號的判定'
2、翻轉一個句子,其中單詞是正序的==>兩次旋轉
3、二叉樹兩個結點中的最小公共子結點==>求長度,長度之差,遠的'先走,再一起走
4、三角陣中從第一行到最後一行(給出搜尋方向的限制)找一個連續的最大和==>廣度優先搜尋√
5、實現一個STL中的vector中的儘量多的方法。
6、字串移動(字串為*號和26個字母的任意組合,把*號都移動到最左側,把字母移到最右側並保持相對順序不變),要求時間和空間複雜度最小。
void Arrange(char *str , int n)
{
int i , k = n-1;
for(i = n - 1 ; i >= 0 ; --i)
{
if(str[i] != '*')
{
if(str[k] == '*')
{
str[k] = str[i];
str[i] = '*';
}
--k;
}
}
}
7、說說outer join、inner join、left join、right join的區別是什麼?
內連線:進行連線的兩個表對應的相匹配的欄位完全相同的連線。join
外連線又分為左外連線和右外連線。
左連線即LEFT OUTER JOIN:
兩個表進行左連線時會返回左邊表中的所有的行和右邊表中與之相匹配的列值沒有相匹配的用空值代替。
右連線即RIGHT OUTER JOIN:
兩個表進行右連線時會返回右邊表中的所有的行和左邊表中與之相匹配的列值沒有相匹配的用空值代替。