網站首頁 工作範例 辦公範例 個人範例 黨團範例 簡歷範例 學生範例 其他範例 專題範例

華為的筆試經驗

欄目: 筆試題目 / 釋出於: / 人氣:1.21W
一、準備階段:
在華為面試之前,我把《軟體設計師教程》大概的複習了一遍,時間實在太緊迫了,有些概念我也只是很粗糙地掠過去。10號下午還到圖書館借了一本《程式設計師面試攻略》,11號下午就差不多把那本書大概地啃完。
二、筆試:
11號,收到簡訊通知當晚7:00在e棟筆試(只要是註冊了電子簡歷的同學都有資格),考試種類分兩種:硬體和軟體,共四類題:填空,選擇,改錯,程式設計。基本上都是一些c/c++語言題,資料結構的樹的前序、中序及後序排列,計算機網路裡的ip報文中的ttl(time to live),資料庫的操作等等;程式題有兩道,一道題是關於資料結構的,另外有一道是“字串a插入字串b中”。雖然都基礎,但題量太大,考試時間太短。大家都在喊沒信心。
三、面試:
第二天就有人接到通知去面試了,我們班一位同學去了,他很牛b,從第一輪到第四輪一
直很順利。我是第三天才和我們寢室另外的一位同學才接到面試通知的(不過我聽說我們這一批接到通知的筆試分數普遍都很高),當然在前三天的等待時間裡,我心情很鬱悶,我還以為我沒有慧通的面試資格了,所以一直在玩,希望有時真的是期而不遇,遇而不期阿。(其實筆試這一輪刷的人不多,大家以後沒必要像我這樣子提前就爆棄了)
我下午4:00準時到凱萊大酒店,一進去就感覺一股熱氣,大廳裡也許是因為太熱或者太緊張的緣故,每個人的臉都很紅,很紅。大概等了半個小時,我的心也跳得好厲害,我就到門口舒緩下情緒,很快一位帥哥就領我去第一輪面試了,他問我會什麼,**,這問題該怎麼答阿,然後我說我是電子科學與技術專業的,計算機基本上是靠自學的,大概他體會到自學的不易,他給我出了5道程式設計題,雖然很多,但基本上都不很難。(我一同專業的哥們雖然只有一道題,但卻是用c語言編桌球的運動軌跡,媽啊,對於c語言的影象功能我都沒接觸到過阿),我的題目是:
1、1到100之間的所有素數之和;
2、佇列的實現;
3、選首領(有一群人圍在一圈,從第一個人開始數1、2、3,數到3者退出,用迴圈連結串列實現)
4、字串匹配問題(int countabc(* s) 輸入任何一串字串,計算機其中有連續abc子字串的個數 )
5、用陣列儲存超大數的問題。
6、詢問我操作系統的程序和執行緒的區別
幸好這些題目在筆試前我就都已經見過了,雖然第四個題目,面試老師說我執行效率不高,但可以過得去了。哈哈,他直接通知我去進行第二輪面試了。
第二輪是資格面試,沒多大問題,就聊聊家鄉,聊聊自己的情況,這一關只要說話有分寸,一般都可以通過。第二輪面試完,就快到了晚飯的時間了,晚飯當然是慧通免費提供的,晚飯一過後,我就被一被稱作是部長的面試官叫了進去,這一關一進去他直接拿了我《軟體設計書》提問我:
1、ping命令使用的是哪種報文?
2、osi分哪幾個層,ip是在哪個層?
3、雜湊表的問題
4、為什麼要採取二叉樹這種資料結構?(折半查詢)
5、兩臺計算機中的程序怎麼互相通訊,我說通過ip唄,他說除了ip呢?我卡住了,他說你聽說過五元組嗎?我只好老老實實的回答說不知道,然後他在那裡給我解釋一通,但我還是沒搞明白,回來翻潘愛民老師的《計算機網路書》
也沒有。這一輪雖然第5個問題我有點卡殼,但老師說我畢竟是自學,還表揚了我,說我已經很不錯了。面試完已經好晚了,華為的mm通知我第二天繼續去進行第四輪的面試。
第二天,我按時到了考試地點,這一天,明顯感覺氣氛沒有第一天的好,垂頭喪氣的好多。很快就通知我去面試了,這一輪面試的老師明顯態度比前幾輪差多了,問的問題都有點讓我透不過氣來,但終於挺了過去,最後他直接點到桌子上
的一個題目:
void main()
{
char *p;
*p=-130;
printf("%d",*p);
}

正確的答案是126,原因:-130在計算機裡面儲存形式是11111111-01111110(取反碼的形式),因為c裡面的char是8位的,所以,最高位1去掉,剩下01111110。
四、些許體會

華為的筆試經驗

面試,就是面試,不是學習,考試。你現在會多少東西固然重要,但更重要的是你得
讓面試官知道,所以面試時把你的知識表達出來是最重要的。切記!面試表達是關鍵,你
可以先把自己熟悉的整理一下,不至於面試的時候磕磕碰碰的。面試,好比下棋。把握
面,掌握主動權是關鍵。一旦你把面試官成功引入你的領地,讓他把注意力關注在你熟悉
的領域,無暇自顧,那就盡情發揮吧,已經成功了一大半。所以從面試官拿到你的簡歷起
,就主動出擊,別給他機會.
另外,在大肆開學初,一定要把各位的專業課翻出來看看,考軟體的特別要多多看看基礎的c語言,想找到好工作一定要從骨子裡面重視起來。

篇中提及的問題的解答:

1、1到100之間的所有素數之和;

int i = 1;
int j = 0;
bool change= 1;
int sum = 0;
for (i=1; i<100; i++)
{
for (j=2; j<i; j++)
{
if(i%j==0)
{
change = 0;
break;
}
}
if(change==1)
sum +=i;
change = 1;
}
printf("%dn",sum);

2、佇列的實現;(用陣列或者連結串列,定義好輸入和輸出即可)
3、選首領(有一群人圍在一圈,從第一個人開始數1、2、3,數到3者退出,用迴圈連結串列實現)
n個人圍成一圈,從第一個人開始依次從1到m迴圈報數,當報到m的時候此人出圈,直到圈中只剩一人為止.求最後一個人的原始編號。
int yuesefu(int n,int m)
{
int i,r=0;
for (i=2;i<=n;i++) r=(r+m)%i;
return r+1;
}

4、字串匹配問題(int countabc(* s) 輸入任何一串字串,計算機其中有連續abc子字串的個數)
int countabc(* s)
{
int i = 0;
int j = 0;
int num = 0;
scanf("%s",s);
int len = strlen(s);
for (i=0; i<len-3; i++)
{
j = strcmp(s+i,"abc");
if(j==0)
num++;
}

}
5、用陣列儲存超大數的問題。
這是陣列得一個應用,思想是我們定義一個數組,讓每一個元素得值都是從後到前以十 進製得方式存貯得,如過到了9下一位就要讓前一個元素進位為1,9變為0同時。
下面這個例子是要求一個40位的 n!的值
int data[40];//儲存40位書的整數陣列
int digit;//資料位數變數
int i,j,r,k;
int n;//使用者輸入值

for(i=1; i<40+1; i++)
data[i]=0;

data[0]=data[1]=1;
digit=1;

printf("enter a number :");
scanf("%d",&n);

for(i=1; i<n+1; i++)
{
for(j=1; j<digit+1; j++)
data[j]*=i;
for(j=1; j<digit+1; j++)
{
if(data[j]>10)
{
for(r=1; r<digit+1; r++)
{
if(data[digit]>10)//大於10時候位數加1
digit++;
data[r+1]+=data[r]/10;//進位增加
data[r]=data[r]%10;//去掉進位後得值
}
}
}
printf("%d! = ",i);
for(k =digit; k>0; k--)
printf("%d",data[k]);
printf("n");

}
6、詢問我作業系統的程序和執行緒的區別
程序和執行緒都是由作業系統所體會的程式執行的基本單元,系統利用該基本單元實現系統對應用的併發性。程序和執行緒的區別,簡而言之:
一個程式至少有一個程序,一個程序至少有一個執行緒.
執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。
另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。

=========================================
1、ping命令使用的是哪種報文?
ping命令使用icmp的哪種code型別:echo reply(回顯請求報文)

2、osi分哪幾個層,ip是在哪個層?
osi:物理層、鏈路層、網路層、傳輸層、會話層、管理層、應用層。
tcp/ip:主機網路層、互聯層、傳輸層、應用層。ip是在互聯層
3、雜湊表的問題
主要用於快速查詢檢索方面
4、為什麼要採取二叉樹這種資料結構?
他折半查詢,可以減少查詢比較次數
5、五元組
二元組的定義:<k,r>
三元組的定義:<d,f,a>
五元組的定義:<v,o,g,m,s>
v是值的集合,o是操作的集合,g是構成名字的文法,m是儲存的集合,s是從g能構成的名字幾個到m的對映.
ip報文中的五元組(即源ip地址,源埠號,目的ip地址,目的埠,協議)。
半相關
綜上所述,網路中用一個三元組可以在全域性唯一標誌一個程序:
(協議,本地地址,本地埠號)
這樣一個三元組,叫做一個半相關(half-association),它指定連線的每半部分。