公司的面试题,你会不?

      前几个月,经理说我们部门最近要招几个人,要我出几道面试题,题目的要求是,要考察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;
        }
    }
posted @ 2012-06-15 22:47  supperwu  阅读(7993)  评论(110编辑  收藏  举报