百度2015校園招聘筆試題(自己憑記憶第一時間,記錄了這麼多,有些描述比較簡單,請大神們補充)
一 、簡答題(30分)
1. 程序和線程的聯系與差別。
2. 簡述資料庫的存儲過程及其優點。
3. static全局變量與普通的全局變量有什麼差別?static局部變量和普通的差別?static函數和普通函數的差別?
二、 算法與程式設計題(45分)
1 請編碼實作memcpy函數:void *memcpy(void *dst,const void *src,unsigned int len)
2 整數矩陣A[N][N],N<10000,滿足如下條件:
當 j < k 時,有:
A[i][j] < A[i][k] 且 A[j][i] < A[k][i]
輸入整數M,輸出M在矩陣中的位置<i,j>,如果未找到,則輸出NULL,要求盡可能的高效。
3 設計一個棧,要求提供min造作的函數,且算法複雜度為O(1)
三、系統設計題(25)
就一道題:新浪微網誌,URL --> TinyURL
問題一:tinyurl後面的編碼如何産生
問題二:當使用者給出一個已映射過的URL時,如何找到其已經存在的tinyurl
問題三:若URL數量達到十億條,在一個伺服器上存儲不下,要分不到10個伺服器,怎麼運作?
下面是一個插入的題目,百度面試時提問的題目:
依序周遊0到100閉區間内所有的正整數,如果該數字能被3整除,則輸出該數字及‘*’标記;如果該數字能被5整除,則輸出該數字及‘#’标記;如果該數字既能被3整除又能被5整除,則輸出該數字及‘*#’标記。于此,個人提點拙劣的想法
第一思路是:(有些拙計)
void myAnswer(){
for(int i=0;i<=100;i++){
if(i%3==0){
if(i%5==0)cout<<i<<"*#";
else cout<<i<<"*";
}
else if(i%5==0) cout<<i<<"#";
}
}
後來想了一下,感覺很熟悉(poj 上的湊數)
int n=100,m3=1,m5=1,p=1;
while(p<=100)
{
if(m3*3>m5*5)
{
m3++;
p=m3*3;
cout<<p<<"*";
}
else if(m3*3<m5*5)
{
m5++;
p=m5*5;
cout<<p<<"#";
}
else
{
m3++;
m5++;
p=m3*3;
cout<<p<<"*#";
}
}