首页 > 代码库 > .NET 笔试分享

.NET 笔试分享

最近一直在面试,每次面试前也不怎么准备,虽说碰到的题大部分都很简单的,但是在现场答题的时候由于自己紧张脑子就空了,一些题答的不是很好,所以只有每次回来的时候才能好好想想怎么答;

题大部分还是挺简单的,就先记录几个脑子里记住的

一、创建一个长度为100的数组,随机插入1-100不重复的数字。这道题刚一上来就觉得应该是这样的,当时也是这样写的:

static int[] Fun(){       int[] arr = new int[100];       int index = 0;       Random ran = new Random();       while (index < 100)       {            int temp = ran.Next(1, 101);            if (!arr.Contains(temp))                 arr[index++] = temp;        }        return arr;}

 

后来回家想想,这样写不是很好,因为每次随机出一个数后,判断数组是否包含这个,不包含的话才插入数组。这样的话随着数组中包含的数字越来越多,要判断的次数也会越来越多。改一下吧:

static int[] Fun(int begin, int len){        ICollection<int> oldArr = new List<int>();        for (int i = begin; i <= len; i++)        {            oldArr.Add(i);        }        int[] newArr = new int[len - begin + 1];        Random ran = new Random();        int index = 0;        while (oldArr.Count() > 0)        {             int temp = oldArr.ElementAt(ran.Next(0, oldArr.Count()));             newArr[index++] = temp;             oldArr.Remove(temp);        }        return newArr;}

先生成一个指定范围的集合,随机取集合的下标加到数组里,再删除集合里的元素。这样不用那么多判断,遍历两次就行了。

二、1-2+3-4+5。。。+m 求这个表达式的结果,用多种思路

笔试的时候只写出了这种,当时脑子一片空白,递归的死活都不知道怎么写。

static int Fun2(int Num){        int i = 1;        int result = 1;        while (Num > i)        {             if (i % 2 == 0)                 result += ++i;             else                 result -= ++i;        }            return result;}

回家想想我怎么当时那么蠢,这么简单的递归都没写出来。。

static int Fun(int Num){        if (Num == 1)                return 1;        if (Num % 2 == 0)                return Fun(Num - 1) - Num;        else                return Fun(Num - 1) + Num;}

三、下面的类B 在实例化是,会打印出什么结果?

class A{        public A()        {            Display();        }        public virtual void Display(){}}class B : A{        int x = 1;        int y;        public B()        {            y = 2;        }        public override void Display()        {            Console.Write(string.Format("x={0},y={1}", x, y));        }}

结果是 x=1,y=0;类在实例化时会先调用父类构造函数,也就是说,先调用最顶端的父类的构造函数,然后是依次调用子类构造函数;在这道题中是先执行A的构造函数。A的构造函数调用Display方法,因为此方法被子类重写,所以调用的重写后的。此时X=1,由于还没调用B的构造函数所以Y的值是分配栈空间时默认的0。所以最终的结果是x=1,y=0

笔试时碰到的题很多,大部分都是网上被转发烂的,公司自己出题的很少。今天先记录这三道题,以后想起来了再继续;