今天去參加了微軟的乙個外包的公司的招聘,當然,這個招聘的公司不在國內,不過好在出人意料的是這個公司竟然在武漢來招聘了,我的乙個非常優秀的 c++的朋友被應聘了,然後他極力推薦我去參加應聘,我第一次去,那個boss(老外)非常讚賞我,因為我的簡歷的原因,原來做了shangducms這 個專案並且還出了一本書,所以那個老外非常讚賞我,並且直接安排我到最後的面試。
話說回來,這個老外是乙個hr,但是是微軟的員工並且長達10年的工齡,這個老外對演算法和素質要求的比較高(其實國外的公司都差不多是這樣),然後這個老外出了兩個題,乙個題是程式設計題,另乙個是設計題,這兩個題在各位高手眼中肯定比較簡單,這兩個題是這樣的。
1.對字串進行排序,用任意一種程式語言來實現,不能使用現有的類,在排序中,字串「bc」,「ad」,「ac」,「hello」,「x man」,「little」,「during」,「day」能夠排序成 「ad」,"ac",「bc」,「during」,「day」,「hello」,「little」,「hello」,也就是說,在排序的過程並不是傳統的 按照字串排序,在排序中還需要將小寫字母一併排序,也就是說a字串要在b或b之前。
2.設計乙個圖書管理系統,無需實現,只需要寫清思路就可以了。
考試也很輕鬆,出了不能用qq,msn以外,其他的什麼baidu啊google啊都可以查,本來拿到這兩個題的時候覺得非常的簡單(當時的感覺那是相當 的簡單),但是沒想到做了2-3個小時還沒有做出來,要不就是出現錯誤要不就是無法排序,結果只好被老外說「i'm sorry」了。
後來回來了之後,感覺非常的鬱悶,其實也不是特別鬱悶,但是覺得自己水平不錯嘛,這樣的工作當然是唾手可得了,沒想到馬失前蹄,感覺不爽,就和朋友玩了幾 個小時遊戲,後來坐回電腦前,改不了程式設計師的「劣根性」,非要搞出個所以然來,結果沒出20分鐘就搞定了,真是很鬱悶!因為如果做不出來就算了,結果自己 做20分鐘就做出來了,在面試時卻沒有做出來,我想除了緊張以外,更多的還是基礎知識不牢固的原因,下面分享一下自己的**。
其實第一題很簡單,就是乙個排序,隨便用什麼演算法都可以,直接冒泡就可以,不過難點在於比較字串中間的字元的ascii的值,首先寫其他**,初始化一下,示例**如下所示。
public string str = ;
public form1()
private void form1_load(object sender, eventargs e) }
上面這串**很簡單,就是先宣告乙個陣列咯,然後在窗體載入時進行陣列的遍歷(原題是從檔案中讀取一串字串轉化為陣列,這個簡單,固可以忽略),當使用者單擊排序按鈕時,進行排序,這裡也很簡單,示例**如下所示。
code
private void button1_click(object sender, eventargs e) }
當使用者單擊按鈕時,使用排序sort方法排序字串然後清空現有的內容再呈現在控制項中,這裡關鍵的就是sort方法的實現,sort方法的實現很簡單,直 接冒泡就可以了,但是注意的是,這裡是字串,而不是數字,冒泡的話需要判斷大小,如果使用c#函式,則可以很容易的實現sort方法,示例**如下所 示。
code
private void sort(string s) }
} }
好了,如果使用string.compareordinal方法當然能夠快速的排序,但是這裡有乙個問題,先不說這裡不能用自帶的類,就說這個題目 吧,compareordinal方法還是無法實現需求,但是這裡給了乙個思路,使用氣泡排序進行排序,可以在函式中實現字串的大小的對比,就好像數字 的對比一樣,這裡就該一下,使用自己的方法,示例**如下所示。
code
private void sort(string s) }
} }
上面的**使用自己的compare方法進行判斷,其實現思路基本同string.compareordinal相同再加以改進就可以了,這是最重要的方法,因為這個方法直接關係到排序,示例**如下所示。
code
private int compare(string str1, string str2)
if (s2 >= 97)
//end
if (s1 > s2)
else if (s1 < s2)
else if (s1 == s2)
else }
} return x;
} 在進行compare方法的實現時,首先要確定思想,對字串進行排序,首先要判斷兩個字串的第乙個字母的ascii碼,如果相等,就判斷字串的下一 個字母的ascii,以此類推,但是這裡注意的是a的ascii要比z要大,所以在判斷前還需要判斷是否為小寫字母(這裡的方法比較蠢,呵呵),如果是小 寫,轉換成大寫進行判斷,同樣為了實現string.compareordinal方法的效果,可以返回乙個int型別的值進行判斷.
這樣,整個排序就完成了,做完之後,我自己真的是感慨良深啊,自己做了多年的.net開發,卻真正意義上並不太懂how the program works,老外在最後也對我說了「雖然你懂很多asp.net,wcf,wpf等等知識,但是最基礎的卻掌握的不好,相比之下,我建議你在這幾個月的時 間裡多學習一下基礎,當你的基礎牢固了之後,一切都變得簡單了(everything gonna to be easy)」,確實,當時做不出來最鬱悶的並不是題目本身,而是忽然感覺到自己學習的過程有點像揠苗助長一樣,應用做多了,反而基本的都忘記了。
其實,這篇文章並不是最出彩的文章,也不是技術含量最深的文章,而且這個題目肯定有很多高手看一眼就能夠做出來,但是我寫這篇文章,只是想分享一下自己的 經歷,真的,其實越到後來越發現,基礎往往是最重要的,這讓我想起幾個月前討論的基礎是不是最重要的話題時,很多人都說只要工作的時候翻翻書就可以了,當 時我也是這麼想,想著不會了翻書找一下就行了,沒想到優秀是一種習慣,熟練的掌握基礎才是編寫高質量**的基本要求。
1.面試千萬不要緊張,特別是face to face的時候,還特別是老外面試,千萬不要緊張,否則水平還沒有平時的十分之一。
2.多多鍛鍊一下自己的基本功,無論是在校學生(像我還有幾個月時間),還是上班的同學(我也工作了幾年),都應該好好把握時間多練習基本功,在校生有很多的機會可以練,而參加工作的同學也需要「溫故而知新」。
3.優秀是一種習慣,無論是在解決問題上還是在編碼風格上,都應該按照最好的標準要求自己(老外還說看**主要是要看風格)。
最後在文章的結尾希望能夠和各位高手一起分享code的樂趣和經驗。
4.可以上
www.izuren.com去看看面試題
分享一句不想關的話,人本是人,不必刻意去做人,世本是世,無須精心處世。
別人面試案例(一)
面試 三面彙總到一起,共耗時3個小時 1,大致講一講專案,問了幾個專案中的問題以及實現,哪些地方可以改進。2,喜歡看框架和jdk原始碼麼?看過哪些?hashmap的原理?資料結構 陣列 單向鍊錶 put,get,size等方法,put的時候hash碰撞問題,負載因子和擴容機制等 concurrent...
個人面試知識點
面試中遇到的各種有必要的知識點,慢慢整理 1.大端小端 大端是高位元組在低位址,低位元組在高位址,類似於字串,先讀到的在高位 小端是高位元組高位址,低位元組低位址 2.c語言的函式指標陣列定義方式 int fun array 4 int,int 3.c function includestd fun...
新雨個人面試經驗總結
面試的時候,不要說謊,因為你說乙個慌,就要用另乙個慌,來圓這個慌。面試官一直問下去,那麼早晚會露餡。平時多積累,工作專案的經歷,平時都要好好維護,不然面試的時候,都想不到做了什麼。尤其是自己的優點和突出的事情。面試的時候,發言一定要清晰,語速要稍微快一點,一般語速都決定效率與否。問為什麼離開上家,不...