百度采用的是網上筆試和電話面試的形式,說實話,我很不適應。再加上投職位時報了運營部,導致簡歷都沒有通過,等到重新投簡歷時,已經錯過了最好的機會。不過感覺百度對你重復投簡歷也是來者不拒,只要你有恒心,有實力,去百度還是很有希望的。
下面是我收集的筆試題目:
發信人: sea1 (tian), 信區: Career_Plaza
標 題: 30秒。。。百度測試工程師被拒(附:筆試題)
發信站: 水木社區 (Wed May 17 19:49:32 2006), 站內
說實話,本來就抱什么希望,只是想知道自己的實力怎樣。結果。。哎!不過還是要贊一下
百度的相關人員,她們的態度都挺和藹的!!(也挺PP的)
還是具體的說一下吧:
早就從網上了解到百度公司(位于海淀圖書城銀科大廈)很搞笑。上到18層后,先是見到
PP服務臺小姐,之后就是左邊的“百度人民很行”,說真的,從遠處看,根本就是“百度人
民銀行”。第一見是就是登記(由PPMM負責,后來知道有兩個PPMM負責前臺,我登記時,那
個不在,否則我會“多線程”的)。之后是負責測試的人員MM來給了我筆試題。看完之后我
差點暈了,幾乎不會!!!試題如下:
1、以下符號在LINUX下代表什么文件:p , l, c, d, s, -, MS很基本,不過我對LINUX一點
也不感冒!!(結果我瞎寫的,如果有計算機的同學想拍我,一定在站內信箱拍!!)
b 塊設備文件
c 字符設備文件
d 目錄文件
p 命名管道(FIFO)
f 普通文件
l 符號鏈接文件(symbolic links)
s socket文件
2、編寫一個SHELL腳本,保存目錄中的文件,并存為.bak文件。(結果還是不會)
3、怎樣在LINUX下測試網絡狀態。不會!
Netstat
4、在LINUX下怎樣查詢CPU,內存,硬盤的狀態。不會!
Top
Fdisk -l
5、HTTP:?網絡狀態下的常見碼狀態是什么? 不會!
6、寫結果:
void fun(char *temp,int n)
{
char *s1,*s2;
int t;
int i =0;
s1=temp;
s2=s1+n-1;
while(i++<7)
{
t=*s1++;
*s1=*s2--;
*s2=t;
}
}
void main()
{
char p[8]="1234567";
fun(p,strlen(p));
puts(p);
}
題目還有問題,結果估計是1111111
還有一些我答上來了!你猜是什么題?
7、為何申請百度?百度成功在與什么?
8、怎樣才能成為優秀的測試工程師?
9、這類題都可以自己想,我就不多說了!!
最后,說一下,為何30秒就掛了!!!^_^....
她一進門,拿者我的簡歷,之后對我說,你畢業比較晚,是吧?
我說“是”,今年才考上研,得08年才能畢業。
之后,她又說,你打算實習幾個月,我說“二個月吧”。這時,她笑了笑,對我說:“著業
太短了,我們要求盡可能長時間的實習,且,主要面向即將畢業的同學,你看。。。”
這下每戲了,后來我們簡短的談了一下,之后就走了。(她比較和藹,臨走的時候,給我很
好的印象)。
值得一體的是,我筆試在“采云歸”房間,就我一個人,筆試過程中,哪個為我登記的
PPMM給我那杯水,之后,見屋子里的兩個椅子多余,就將它們抬了出去(比較費力),我當
時,被筆試弄暈了,早知道,我就幫她一起抬了^_^!!!如果有高手看到的話,請支一下招,
告訴小弟以后遇到這種事情該怎么辦??順便問一下,以后,我和這個MM還有戲嗎???
回來后受打擊了,正巧房東養了4個小王八,于是我開始玩王八解悶。。。
1.實現 void delete_char(char * str, char ch);
把str中所有的ch刪掉
void delete_char(char * str, char ch)
{
char *newstr = (char *)malloc(strlen(str)+1);
char *str_p = str;
char *newstr_p = newstr;//如果沒有這兩個的話,while后面的指針就出錯了
while(*str_p)
{
if(*str_p == ch)
str_p++;
else
*newstr_p++ = *str_p++;
}
*newstr_p = '\0';
strcpy(str, newstr);
free(newstr);
}2.把字符串S中所有A子串換成B,這個沒給函數原型
3.搜索引擎的日志要記錄所有查詢串,有一千萬條查詢,不重復的不超過三百萬
要統計最熱門的10條查詢串. 內存<1G. 字符串長 0-255
(1) 主要解決思路 //具體用詞和原題不大一樣
(2) 算法及其復雜度分析
4.有字典,設計一個英文拼寫糾正算法 (1) 思想 (2) 算法及復雜度 (3) 改進
5. { aaa, bb, ccc, dd }, { bbb, ff }, { gg } 等一些字符串的集合
要求把交集不為空的集合并起來,如上例會得到 { aaa, bb, ccc, dd, ff }, {gg}
(1) 思想 (2) 算法及復雜度 (3) 改進
下午去百度筆試,考題有二叉搜索樹和堆
1。編程:
用C語言實現一個revert函數,它的功能是將輸入的字符串在原串上倒序后返回。
void revert(char * str)
{
int length = strlen(str);
char temp;
for(int i = 0; i < length/2; i++)
{
temp = *(str + i);
*(str + i) = *(str + length - 1 - i);
*(str + length - 1 - i) = temp;
}
}
2 。編程:
用C語言實現函數void * memmove(void *dest,const void *src,size_t n)。memmove
函數的功能是拷貝src所指的內存內容前n個字節 到dest所指的地址上。
/**
* memmove - Copy one area of memory to another
* @dest: Where to copy to
* @src: Where to copy from
* @count: The size of the area.
*
* Unlike memcpy(), memmove() copes with overlapping areas.
*/
void * memmove(void * dest,const void *src,size_t count)
{
char *tmp, *s;
if (dest <= src) {//dest在前面,故dest頭不可能覆蓋src尾
tmp = (char *) dest;
s = (char *) src;
while (count--)
*tmp++ = *s++;
}
else {//dest在后面,dest頭可能覆蓋src尾,造成src沒有結束符
tmp = (char *) dest + count;
s = (char *) src + count;
while (count--)
*--tmp = *--s;
}
return dest;
}
3 英文拼寫糾錯:
在用戶輸入英文單詞時,經常發生錯誤,我們需要對其進行糾錯。假設已經有一個包含了正確英文單詞的詞典,請你設計一個拼寫糾錯的程序。
(1)請描述你解決這個問題的思路;
(2)請給出主要的處理流程,算法,以及算法的復雜度;
(3)請描述可能的改進(改進的方向如效果,性能等等,這是一個開放問題)。
(1)思路 :
字典以字母鍵樹組織,在用戶輸入同時匹配
(2)
流程:
每輸入一個字母:
沿字典樹向下一層,
a)若可以順利下行,則繼續至結束,給出結果;
b)若該處不能匹配,糾錯處理,給出拼寫建議,繼續至a);
算法:
1.在字典中查找單詞
字典采用27叉樹組織,每個節點對應一個字母,查找就是一個字母
一個字母匹配.算法時間就是單詞的長度k.
2.糾錯算法
情況:當輸入的最后一個字母不能匹配時就提示出錯,簡化出錯處理,動態提示
可能處理方法:
(a)當前字母前缺少了一個字母:搜索樹上兩層到當前的匹配作為建議;
(b)當前字母拼寫錯誤:當前字母的鍵盤相鄰作為提示;(只是簡單的描述,可
以有更多的)
根據分析字典特征和用戶單詞已輸入部分選擇(a),(b)處理
復雜性分析:影響算法的效率主要是字典的實現與糾錯處理
(a)字典的實現已有成熟的算法,改進不大,也不會成為瓶頸;
(b)糾錯策略要簡單有效 ,如前述情況,是線性復雜度;
(3)改進
策略選擇最是重要,可以采用統計學習的方法改進。
4 尋找熱門查詢:
搜索引擎會通過日志文件把用戶每次檢索使用的所有檢索串都記錄下來,每個查詢串
的長度為1-255字節。假設目前有一千萬個記錄,
這些查詢串的重復度比較高,雖然總數是1千萬,但如果除去重復后,不超過3百萬個
。一個查詢串的重復度越高,說明查詢它的用戶越多,
也就是越熱門。請你統計最熱門的10個查詢串,要求使用的內存不能超過1G。
(1)請描述你解決這個問題的思路;
(2)請給出主要的處理流程,算法,以及算法的復雜度。
1G就是十億
(1)思路:
用哈希做
(2)
首先逐次讀入查詢串,算哈希值,保存在內存數組中,同時統計頻度
(注意值與日志項對應關系)
選出前十的頻度,取出對應的日志串,簡單不過了。
哈希的設計是關鍵。
5 集合合并:
給定一個字符串的集合,格式如:
{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}
要求將其中交集不為空的集合合并,要求合并完成后的集合之間無交集,例如上例應
輸出
{aaa bbb ccc ddd hhh},{eee fff}, {ggg}
(1)請描述你解決這個問題的思路;
(2)請給出主要的處理流程,算法,以及算法的復雜度
(3)請描述可能的改進(改進的方向如效果,性能等等,這是一個開放問題)。
要求將其中交集不為空的集合合并
要求合并完成后的集合無交集
這兩個要求只要1滿足了,2就自然滿足了。
方法1:把每個集合用 vector<vector<char> > 表示,比較兩個集合里面vector<char> 是否相等(是否交集不為空,有相同元素),如果有相同集合就合并。這個就是每個集合都和其后面的集合比較,復雜度為o(n2)。
方法2:把每個集合都遍歷一遍,找出所有集合的所有元素(不重復).然后建立一張表,記錄各個元素在每個集合的出現情況,行代表元素,列代表集合,出現則相應位為1,否則為0。表建立完成后,把每行有多個1的 1所在列的集合合并就可以了。
時間復雜度:遍歷O(n),寫表O(n),最后查表合并o(n),總的復雜度為O(n)。
Map的用法
map<string ,int> a;
string b("asdf");
a.insert(map< string,int >::
value_type(b,3));
string c("sdf");
a.insert(map< string,int >::
value_type(c,4));
map<string, int>::iterator i;
for(i = a.begin(); i != a.end(); i++)
cout << (*i).first << " " << (*i).second << endl;
a.erase(b);
for(i = a.begin(); i != a.end(); i++)
cout << (*i).first << " " << (*i).second << endl;
我的方法:
先遍歷集合,建立一個hash表,hash表的鍵為集合中的字符串,值表示為包含此字符串的集合的序號,比如說集合1和3包含此元素,值就是00001010,復雜度為o(n)
然后遍歷這個hash表,將這些值進行&運算,結果為0時就跳過,結果不為0時保存此結果,然后從hash表中刪除這個條目,遍歷完一遍后得到第一個合并后的集合的序號,就進行合并。此為o(m)
然后再次遍歷直到hash表為空為止。復雜度合并后集合數乘上hash表長度
其實也可以通過一次遍歷hash表來確定,建立一個鏈表,a[0]為保存&不為0的值,a[1]保存&為0的值,然后將a[]中的數字都與hash表的值做&運算,都為0時將這個值加入鏈表,不為0時,將結果保存到a[i],有可能還要合并,不過這樣復雜度也不好算
“已知一個字串由GBK漢字和ansi編碼的數字字母混合組成,編寫C語言函數實現從中去掉所有ansi編碼的的數字和字母(包括大小寫).要求在原字串上返回結果。int filter_ansi(char* gbk_string);注:漢字的GBK編碼范圍是0x8140 - 0xFEFE。”
char * filter_ansi(char* gbk_string)
{
assert(gbk_string!=NULL);
char *src;
char *dst;
src = dst = gbk_string;
while(*src)
{
if(*src & 0x80)
{
*dst++ = *src++;
*dst++ = *src++;
}
else
src++;
}
*dst = '\0';
return gbk_string;
}
文章出處:飛諾網(www.diybl.com):http://www.diybl.com/course/3_program/c++/cppsl/2008827/138076.html
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請
點擊舉報。