前幾個月,經理說我們部門最近要招幾個人,要我出幾道面試題,題目的要求是,要考察C#基礎,不要太難,不要出問答題,最好是有唯一答案的。因為這份面試題是給人事部的,他們可不懂程序。最后一個要求是,要有一兩道題能區分中級程序員與初級程序員。
以前一直都是別人出題考我,現在終於有機會出題考別人,我心里那個激動哇,我就琢磨着出什么題目呢?在網上百度,Google了好一陣。好不容易,想出了10道題,讓經理看了一眼。經理的回復是太難了,沒有必要弄那么難,題目也太多,出個5道題就差不多了。看看,我們經理多好呀。又過了好一陣子,弄了5道題目。經理在最后還補充了一題。
今日,把題目翻了出來,選擇了其中一道題目,在群里發了,看看群里的同志能不能做出來。結果讓我,大吃一驚。沒有一個人能夠立馬看懂題目的。同志們都開始懷疑我的語文水平,懷疑我的表達能力。雖然我的語文不怎么好,可也不至於導致這樣的結果吧。我那個着急呀,我不斷的解釋題目,甚至我還寫了程序表達題目的意思。最終讓我還是大失所望沒有人能過做出來。不過山東-查無此人,北京-悟,在我解釋后,還是明白,而且山東給出了做法。下面我把題目貼出來,看看你會還是不會?
題目如下:
1:已經定義好的一個Byte數組,Byte數組的信息格式見下面的表格:
起始字節 | 字段 | 數據類型 | 描述 |
0 | 類型編號 | BYTE | 類型編號,占用1個字節 |
1 | 信息內容 | 信息內容,內容的格式詳見下表 |
內容格式:
類型編號 | 類型說明 | 數據類型 | 描述 |
1 | 司機信息 | STRING | 前兩字節表示字符串長度,后面緊跟UNICODE編碼字符串,占用N個字節 |
2 | 油量 | DWORD | 單位:1/100L,無符號32位整數,占用四個字節。DWORD高位在前,低位在后。 |
…… | …… | …… | …… |
請編寫一段程序,從Byte數組中解析出司機信息,油量信息。注意信息類型以后還會一直增加的。
上面這題是我出的題目的唯一一道編程題。主要目的也是用來區分中級程序員與初級程序員的。也是我工作中實際遇到的。
順便說一下,我們的群歡迎大家來交流,來提問,更加歡迎您來分享你的知識。技術是在分享中不斷進步的。非常感謝群中廣州-某魚今天給我的幫助!新加入群的朋友,請說明是博客園看到的,謝謝了。
已經過去一天了,下面給出司機信息的解析代碼:
class Program { static void Main(string[] args) { byte[] array = GetDriverInfo(); if (array == null || array.Length == 0) return; byte type = 0; int arrayLen = array.Length; int index = 0; while (arrayLen > 0) { type = array[index]; switch (type) { case 1: ushort stringlen = (ushort)((array[index + 1] << 8) | (array[index + 2]) << 1); string driverInfo = Encoding.Unicode.GetString(array, index + 3, stringlen); index += stringlen + 3; arrayLen -= stringlen + 3; Console.WriteLine("司機信息:{0}", driverInfo); break; default: break; } } Console.ReadLine(); } private static byte[] GetDriverInfo() { string info = "1234567890:jerry"; //內容長度 int len = info.Length; byte[] array = new byte[len * 2 + 3]; array[0] = 1; //字符長度,高位在前 array[1] = (byte)((len >> 8)); array[2] = (byte)(len); //Unicode編碼字符串 byte[] temp = System.Text.Encoding.Unicode.GetBytes(info); Array.Copy(temp, 0, array, 3, temp.Length); return array; } }