记录一下笔试时碰到的题目

Posted on 2009-03-11 17:51  土匪  阅读(491)  评论(6编辑  收藏  举报

前天我去一家公司笔试,走了很长一段路才找到了那间公司,到达时已经是满头大汗了,迟了几十分钟。可是见到公司所在的楼的破旧,还有上楼时见到的了无生气的状况,我不由得有点心凉,再加上那位应该算是大妈前台,使我更是失望。最终还是没能应聘到那间公司,说是什么对软件工程的认识还没有达到他们所需要的标准。

还是不发牢骚了,这里说一下笔试时碰到的题目,题目很简单,还是直接贴代码吧。

以下的题目没有特别说明都是求其输出

题目1:try-catch的用法

       public static void Test(object parm1,int i)
       
{
           
if (parm1 == null)
               
throw new ArgumentNullException();
           
           
if(i <0)
               
throw new ArgumentOutOfRangeException();
        }


       
static void Main(string[] args)
       
{
           
try
           
{
                Test(
null,-1);
            }

           
catch (ArgumentNullException)
           
{
               
                Console.WriteLine(
"1");//只有本行生效
            }

           
catch(ArgumentOutOfRangeException)
           
{
                Console.WriteLine(
"2");
            }

           
catch(Exception)
           
{
                Console.WriteLine(
"0");
            }

           
           
try
           
{
                Test(
"123", -1);
            }

           
catch (ArgumentNullException)
           
{

                Console.WriteLine(
"1");
            }

           
catch (ArgumentOutOfRangeException)
           
{
                Console.WriteLine(
"2");//只有本行生效
            }

           
catch (Exception)
           
{
                Console.WriteLine(
"0");
            }


           
try
           
{
                Test(
null, 10);
            }

           
catch (ArgumentNullException)
           
{

                Console.WriteLine(
"1");//只有本行生效
            }

           
catch (ArgumentOutOfRangeException)
           
{
                Console.WriteLine(
"2");
            }

           
catch (Exception)
           
{
                Console.WriteLine(
"0");
            }


            Console.ReadLine();
        }

题目2:多态的调用

首先来看一个类的代码

interface I
   
{
       
void Foo();
    }

   
public abstract class C:I
   
{
       
public abstract void Foo();
    }

   
public class C1:C, I
   
{
        
void I.Foo()
       
{
           Console.WriteLine(
"I.Foo");
        }


       
public override void Foo()
       
{
            Console.WriteLine(
"C.Foo");
        }

    }

   
public class C2:C1,I
   
{
       
void I.Foo()
       
{
            Console.WriteLine(
"I.Foo");
        }


       
public override void Foo()
       
{
            Console.WriteLine(
"C.Foo");
        }

    }

   
public class C3 : C2, I
   
{
       
void I.Foo()
       
{
            Console.WriteLine(
"I.Foo");
        }


       
public override void Foo()
       
{
            Console.WriteLine(
"C.Foo");
        }

    }

再来看看调用的代码

static void Main(string[] args)
       
{
            I i
= null;

            i
= new C1();
            i.Foo();

            i
= new C2();
            i.Foo();

            i
= new C3();
            i.Foo();

           
//以上都是输出I.Foo

            ((C3)i).Foo();


            C c
= null;

            c
= new C1();
            c.Foo();

            c
= new C2();
            c.Foo();

            c
= new C3();
            c.Foo();

           
//以上都是输出C.Foo

            ((I)c).Foo();
//输出I.Foo

            Console.ReadLine();

        }

有人说要解释一下,但是我觉得贴出来的这些内容,可能看之前还不知道,可是看了之后一般都会明白

不过我还是尽量打些注释吧

-------------------------------------------------------------------------------

以下为2009-03-12加入的新内容

题目3:多态的构造函数的调用顺序

题目3

题目4:static的用法

static的用法

 

题目5:判断相等

判断相等

-------------------------------------------------------------------------------

以下为2009-03-25加入的新内容

题目6:static的执行顺序

static的执行顺序

从结果我们可以知道:

1、一个类的执行首先是从字段开始,然后再到构造函数。

2、拥有static的标识符的字段拥有很高的权限,它首先编译父类的static字段,再到子类的static字段,

     然后其他字段则是按顺序执行:按先出现先编译,先父类再子类

3、构造函数的执行

题目7:两个不同类型相加的结果

UInt32 a = 6;
Int32 b
= -20;
int c ;

int i = (a+b>6)? c=1:c=0;

Console.WriteLine(c);
//结果为0

在C#中UInt32和Int32 的运算会先将各数转为Int32,所以a+b结果为-14,小于6,所以c为0

但是在c++中,a+b的运算时将b换算为unsigned型,相加后结果大于6,c为1