讓人懊惱的面試 看程式設計師的基本功

2021-06-18 10:08:11 字數 3224 閱讀 3123

今天去參加了微軟的乙個外包的公司的招聘,當然,這個招聘的公司不在國內,不過好在出人意料的是這個公司竟然在武漢來招聘了,我的乙個非常優秀的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)

}

上面這串**很簡單,就是先宣告乙個陣列咯,然後在窗體載入時進行陣列的遍歷(原題是從檔案中讀取一串字串轉化為陣列,這個簡單,固可以忽略),當使用者單擊排序按鈕時,進行排序,這裡也很簡單,示例**如下所示。

private void button1_click(object sender, eventargs e)

}

當使用者單擊按鈕時,使用排序sort方法排序字串然後清空現有的內容再呈現在

控制項中,這裡關鍵的就是sort方法的實現,sort方法的實現很簡單,直接冒泡就可以了,但是注意的是,這裡是字串,而不是數字,冒泡的話需要判斷大小,如果使用

c#函式,則可以很容易的實現sort方法,示例**如下所示。

private void sort(string s)}}

}

好了,如果使用string.compareordinal方法當然能夠快速的排序,但是這裡有乙個問題,先不說這裡不能用自帶的類,就說這個題目吧,compareordinal方法還是無法實現需求,但是這裡給了乙個思路,使用氣泡排序進行排序,可以在函式中實現字串的大小的對比,就好像數字的對比一樣,這裡就該一下,使用自己的方法,示例**如下所示。

private void sort(string s)}}

}

上面的**使用自己的compare方法進行判斷,其實現思路基本同string.compareordinal相同再加以改進就可以了,這是最重要的方法,因為這個方法直接關係到排序,示例**如下所示。

private int compare(string str1, string str2)

if (s2 >= 97)

//end

if (s1 >= s2)

else if (s1 < s2)

}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的樂趣和經驗。

分享一句不想關的話,人本是人,不必刻意去做人,世本是世,無須精心處世。

(文/soundbbg  出處/)

Linux平台下java程式設計師的基本功(二)

一 安裝linux和putty 1 安裝比較簡單,不再重複貼圖,具體參考以下文件 如果是在一台全新的機器上安裝,文件中虛擬機器安裝部分忽略即可。也可以參考 2 安裝putty 順便掃掃盲 1 何為putty?putty是乙個免費的windows平台下的telnet rlogin和ssh客戶端,put...

傻瓜式程式設計正規化,程式設計師的基本功

我從資料連續性 延伸閱讀時,在hn thread 論壇 turingtest 的發言引用中,意外發現了一篇文章 傻瓜式程式設計正規化 程式設計師基本功 由彼得 範 羅伊寫於 2009 年,描繪了設計程式語言的操作空間。如果你喜歡這篇文章,可能也會喜歡範 羅伊和哈利迪的書 concepts,techn...

基本概念 程式設計師基本功 鍊錶的基本概念

程式設計師必須掌握資料結構 資料結構中必講鍊錶 所以,程式設計師必須掌握鍊錶 鍊錶是資料元素的線性集合 linear collection 物理儲存不連續。那麼,這種設計的優點是什麼?缺點又是什麼?鍊錶的基本結構 鍊錶是由一系列的 節點 組成在一起的集合,節點 node 由資料域 data 和指標域...