zoukankan      html  css  js  c++  java
  • .net软件开发工程师面试题

    一.填空题(每空1分,共12分)

    1面向对象的语言具有__封装______性、__继承_______性、__多态______性。

    2能用foreach遍历访问的对象需要实现 ____Ienumerable____________接口或声明_____GetEnumerator___________方法的类型。

    3当类T只声明了私有实例构造函数时,则在T的程序文本外部,___不可以___(可以 or 不可以)从T派生出新的类,在T的内部__可以__(可以 or 不可以)直接创建T的任何实例,在T的外部__不可以__(可以 or 不可以)直接创建T的任何实例。

    4. 委托声明的关键字是__Delegate____ 
    5.
    override与重载的区别: override覆盖是基类中函数的重写。重载:方法或函数的名称相同,参数或许参数类型不同,进行多次重载实现功能。

    . 不定项选择(每题2分,共18)

    Question 1

     以下叙述正确的是:

          A. 接口中可以有虚方法。     B. 一个类可以实现多个接口。

          C. 接口不能被实例化       D. 接口中可以包含已实现的方法。

    Question 2

     以下描述错误的是()

      1.C++中支持抽象类而在C#中不支持抽象类。

      2. C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员。

      3. C#中可使用 new 修饰符显式隐藏从基类继承的成员。

    4. C#中要在派生类中重新定义基类的虚函数必须在前面加Override

    Question 3

      声明一个委托public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是

      1. void myCallBack(int x)

      2. int receive(int num)

      3. string receive(int x)

    4. 不确定的

    Question 4

    下列描述错误的是()
    a)
    类不可以多重继承而接口可以;
    b)
    抽象类自身可以定义成员而接口不可以;
    c)
    抽象类和接口都不能被实例化;
    d)
    一个类可以有多个基类和多个基接口;

    Question 5

    下列关于构造函数的描述正确的是()
    a)
    构造函数可以声明返回类型。
    b)
    构造函数不可以用private修饰
    c)
    构造函数必须与类名相同
    d) 构造函数不能带参数

    Question 6

     接口是一种引用类型,在接口中可以声明(),但不可以声明公有的域或私有的成员变量。
    a)
    方法、属性、索引器和事件
    b)
    方法、属性信息、属性;
    c)
    索引器和字段;
    d)
    事件和字段;

    Question 7

    以下的C#代码,试图用来定义一个接口:
    public interface IFile
    {
          int A;
          int delFile()
    {
          A = 3;
    }
          void disFile();
    }
    关于以上的代码,以下描述错误的是( )
    a)
    以上的代码中存在的错误包括:不能在接口中定义变量,所以int A代码行将出现错误;
    b) 以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数;
    c)
    代码void disFile();声明无错误,接口可以没有返回值;
    d)
    代码void disFile();应该编写为void disFile(){}


    Question 8.

    class Class1

    {

    public static int Count = 0;

    static Class1()

    {

    Count++;

    }

    public Class1()

    {

    Count++;

    }

    }

    Class1 o1 = new Class1();

    Class1 o2 = new Class1();

      请问,Class1.Count的值是多少?( )

       1. 1

       2. 2

       3. 3

       4. 4

    Question 9

    abstract class BaseClass

    {

    public virtual void MethodA()

    {

    Console.WriteLine("BaseClass");

    }

    public virtual void MethodB()

    {

    }

    }

    class Class1: BaseClass

    {

    public void MethodA()

    {

    Console.WriteLine("Class1");

    }

    public override void MethodB()

    {

    }

    }

    class Class2: Class1

    {

    new public void MethodB()

    {

    }

    }

    class MainClass

    {

    public static void Main(string[] args)

    {

    Class2 o = new Class2();

    o.MethodA();

    }

    }

      请问,此程序输出结果是:

       1. BaseClass

       2. BassClass Class1

       3. Class1

       4. Class1 BassClass

     (解析,三重继承问题,孙类只是继承父类,而不是直接继承祖父类

    三.问答题(每题3分,共15分)

    1. 简述 private protected public internal 修饰符的访问权限。

      private:私有访问,它只能在声明自身的类中进行访问。

    protected:表示受保护的访问,该类内部和继承类中可以访问

    .public :表示公共访问,在代码任何位置都可对其进行访问

      internal表示内部成员,在同一命名空间内可以访问。

    2. C#中的委托是什么?事件是不是一种委托?

    委托是指具有相同属性(也称具有相同的函数签名:返回类型相同,参数类型、参数顺序及参数个数相同)的函数或方法的抽象,关键字为delegate。主要用途是三个:1)函数回调;2)传递方法;3)事件机制
         事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托,对事件的声明, 实际是声明一个私有的委托变量,对委托变量进行封装,即委托变量加上event关键字后,不管其前面的访问修饰符是public还是private,编译器都会将其编译为private。

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。以委托为参数的函数具有一定的通用性。

    使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。

    3. abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?

      不可以一起使用,但是可以和override一起使用。

    4. 请叙述属性与索引器的区别。

    属性:它是存取类的字段,索引器:Indexer它是特殊的属性,用它可以使用户像访问数组一样访问类的成员

    5. 请详述在dotnet中类(class)与结构(struct)的异同。

    类class可以进行实例化,它是引用类型,内存分配在栈中,效率高,它有默认的构造函数,有析构函数可以使用 abstract 和 sealed, protected 修饰符。要用new进行初始化,

    结构它是属于值类型,内存分配在堆中,效率低,它没有默认的构造函数,但是可以添加构造函数,没有析构函数没有 abstract 和 sealed(因为不能继承)不能有protected 修饰符 可以不使用new 初始化,但是可以在结构中初始化实例字段。

     

    四.分析程序(每题5分,共25分)(此题不能调试,若发现调试,扣除分数)

    1. 写出程序的输出结果

    class Class1  {

           private string str = "Class1.str";

           private int i = 0;

           static void StringConvert(string str)  {

               str = "string being converted.";

           }

           static void StringConvert(Class1 c)  {

               c.str = "string being converted.";

           }

           static void Add(int i)  {

               i++;

           }

           static void AddWithRef(ref int i)  {

               i++;

           }

           static void Main()  {

               int i1 = 10;

               int i2 = 20;

               string str = "str";

               Class1 c = new Class1();

               Add(i1);

               AddWithRef(ref i2);

               Add(c.i);

               StringConvert(str);       

               StringConvert(c);

               Console.WriteLine(i1);

               Console.WriteLine(i2);

               Console.WriteLine(c.i);

               Console.WriteLine(str);

               Console.WriteLine(c.str);

           }

    }

    10

    21

    0

    str

    string being converted

    2.写出程序的输出结果

    public abstract class A

    {

            public A()

           {

                Console.WriteLine('A');

            }

            public virtual void Fun()

           {

                Console.WriteLine("A.Fun()");

            }

    }

    public class B: A

    {

            public B()

           {

                Console.WriteLine('B');

            }

     

            public override void Fun()

           {

                Console.WriteLine("B.Fun()");

            }

     

            public static void Main()

           {

                A a = new B();

                a.Fun();

            }

    }

    解析:主函数 A a = new B();首先声明了一个A的对象a,但被赋给不同于A的对象B,在此期间分别调用了A类的构造函数和B类的构造函数,然后调用afun()函数,因为afun()函数是虚函数,被bfun()的函数覆盖,所以实际执行的是bfun().

    答案:

    A

    B

    B.Fun()

    3.写出程序的输出结果:

    public class A

    {

            public virtual void Fun1(int i)

           {

                Console.WriteLine(i);

            }

     

            public void Fun2(A a) 

           {

                a.Fun1(1);

                Fun1(5);

            }

    }

    public class B : A

    {

            public override void Fun1(int i)  

           {

                base.Fun1 (i + 1);

            }

     

            public static void Main() 

           {

                B b = new B();

                A a = new A();

                b.Fun2(a);

                a.Fun2(b);       

            }

    }

    输出结果为:

    2

    5

    1

    6

    (一个函数的执行必须在一个具体的对象中实现,如果函数明确告诉是哪个对象,则在改该对象下执行;如果没有,则在默认的对象下执行)

    4.在下面的例子里
    using System;
    class A
    {
          public A()
          {
                 PrintFields();
          }
          public virtual void PrintFields(){}
    }
    class B:A
    {
          int x=4;
          int y;
          public B()
          {
                 y=-1;
          }
          public override void PrintFields()
          {

    x += 1;
          Console.WriteLine("x={0},y={1}",x,y);

    y += 1;
          }
    当使用B b = new B()创建的实例时,产生什么输出?b. PrintFields();结果是什么?

    X=5,y=0

       b. PrintFields 结果是x=6;y=1

     

    5. 下面的例子中

    using System;
    class A
    {
          public static int X;
          static A()

    {

    X=B.Y+1;
    }

    }

    class B
    {
          public static int Y=A.X+1;
          static B()

    { }
          static void Main()

    {
                 Console.WriteLine("X={0},Y={1}",A.X,B.Y);
          }
    }
    产生的输出结果是什么?
    X=2,Y=1

    五.程序设计(每题7分,共28分)

    1.请编程实现一个冒泡排序算法?

    //比较法

    using System;

    using System.Collections.Generic;

    using System.Text;

     

    namespace test1

    {

        class Program

        {

            static void Main(string[] args)

            {

                int[] Array ={ 6,18,12,23,19,28,30};

                Console.WriteLine("排序前的数组:");

                foreach(int n in Array)

                {

                    Console.Write(n+" ");

                }

                Console.WriteLine();

                for (int i = 1; i < Array.Length; i++) //控制趟数

                {

                    for (int j = 0; j < Array.Length - i; j++)

                    {

                        if (Array[j] > Array[j + 1]) //交换

                        {

                            int temp = Array[j]; Array[j] = Array[j + 1]; Array[j + 1] = temp;

                        }

                    }

                }

                //排序后

                Console.WriteLine("排序后的数组:");

                for (int n = 0; n < Array.Length; n++)

                {

                    Console.Write(Array[n] + " ");

                }

                Console.WriteLine();

            }

        }

    }

    2. 编程程序实现委托,事件。

    using System;

    using System.Collections.Generic;

    using System.Text;

     

    namespace delegateDemo

    {

        class Program

        {

            static void Main(string[] args)

            {

                Cat cat = new Cat();

                Mouse mouse = new Mouse();

                Master master = new Master();

                cat.Calling += new EventHandler(mouse.Escape);

                cat.Calling += new EventHandler(master.Wakened);

                cat.Call();

            }

        }

        public sealed class Cat  //猫类

        {

            public event EventHandler Calling;

            public void Call()

            {

                Console.WriteLine("猫开始叫了……");

                if(Calling!=null)              //检查事件是否被注册

                Calling(this,EventArgs.Empty);//调用事件注册的方法

            }

        }

        public sealed class Mouse //老鼠类

        {

            public void Escape(object sender, EventArgs e)

            {

               Console.WriteLine("老鼠逃跑了...");

            }

        }

        public sealed class Master //主人

        {

           public void Wakened(object sender, EventArgs e)

           {

               Console.WriteLine("主人惊醒了...");

           }

     

        }

    }

     

    3. 写一个程序,语言不限,打印出100的阶乘(1*2*3**100)的精确数值结果(不能是浮点数)。如5的阶乘是1*2*3*4*5=120

    using System;

    using System.Collections.Generic;

    using System.Text;

    //,打印出100的阶乘(即1*2*3*…*100)的精确数值结果(不能是浮点数)。如5的阶乘是1*2*3*4*5=120

    namespace shuzu

    {

        class Program

        {

            static void Main(string[] args)

            {

                Console.WriteLine("请输入一个正数");

                int n = int.Parse(Console.ReadLine());

                Console.WriteLine("{0}的阶乘1*2*3*…*{1}={2}", n,n,Fn(n));

            }

            public static double Fn(int n)

            {

                if (n==1)

                {

                    return 1;

                }

                else

                {

                    return n * Fn(n - 1);

                }

            }

        }

    }

     

     

      

    4. 写一个程序,语言不限,能将人民币金额从阿拉伯数字转换为大写汉字表示。例如,把1234.56转换为壹仟贰佰叁拾肆圆零伍角陆分。

    using System;

    using System.Collections.Generic;

    using System.Text;

     

    namespace ConsoleApplication1

    {

        class Program

        {

            static void Main(string[] args)

            {

                Console.WriteLine("请输入数字:");

                string s = Console.ReadLine();

                Console.Write("转换后¥:");

                for (int i = 0; i < s.Length; i++)

                {

    //switch(Convert.ToInt32(Console.ReadLine()))

                    switch (s[i] - 48)

                    {

                        case 0:

                            Console.Write("零");

                            break;

                        case 1:

                            Console.Write("壹");

                            break;

                        case 2:

                            Console.Write("贰");

                            break;

                        case 3:

                            Console.Write("叁");

                            break;

                        case 4:

                            Console.Write("肆");

                            break;

                        case 5:

                            Console.Write("伍");

                            break;

                        case 6:

                            Console.Write("陆");

                            break;

                        case 7:

                            Console.Write("柒");

                            break;

                        case 8:

                            Console.Write("捌");

                            break;

                        case 9:

                            Console.Write("玖");

                            break;

                         case 10:

                            Console.Write("拾");

                            break;

                        default:

                            Console.Write("输入其他字符");

                            break;

                    }

                }

                Console.WriteLine();

                Console.Read();

     

            }

        }

    }

     

     

    六.附加题(12分)

     一列数的规则如下: 112358132134...... 求第30位数是多少,用递归算法实现。(C#语言)

    using System;

    using System.Collections.Generic;

    using System.Text;

    // 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现

    namespace rabbit

    {

        class Program

        {

            static void Main(string[] args)

            {

                Console.WriteLine("请输入个正数:");

                int I= int.Parse(Console.ReadLine());

                Console.WriteLine("第{0}个数字是{1}", I, Fn(I));

            }

            static int Fn(int n)

            {

                if ( n == 1 || n == 2 )

                {

                    return 1;

                }

                else

                {

                    return Fn(n - 1) + Fn(n - 2);

                }

            }

        }

    }

    1、权限控制方面问题:
    从面向对象的角度讲,如果一个程序中,没有应用角色及角色组的话,那么这个程序是不合格的.一般来说,权限是由权限及流程角色组合而来的,如果仅有权限而没有角色,那么这个控制不灵活;如果仅有角色没有权限,那么这个控制不细致.
    当然,用SESSION肯定是要的,但这个SESSION,应当只记录当前用户的个人信息,比如他的用户名.在需要判断的时候,根据他的用户名(唯一),至数据库中去取他的权限,或在类中编写权限/角色,根据此用户的用户号及当前模块号,计算当前用户是否对当前页面有操作权限.不过,如果把用户的权限也取出来放在SESSION中的话,这种做法一般仅在很小的网站中使用,稍大一点的系统,基本不允许这么做,而且也做不到

    2. PID是什么?在做系统的故障排除时如何使用它?
    PID是进程编号,在系统发现故障的时候,可以根据它寻找故障所发生的具体进程,并且可通过visual studio.net等ide将故障进程附加到进程中进行调试(debug)

    3. XmlSerializer是如何工作的?使用这个类的进程需要什么ACL权限?
    答:我只知道XmlSerializer是将对象的属性和字段进行序列化和反序列化的,序列化成为xml数据,反序列化再将xml转换成对象。应该至少需要ACL权限中的读权限.

    4.为什么不提倡catch(Exception)
    答:原因可能有两点:1. try…catch在出现异常的时候影响性能 2.应该捕获更具体得异常,比如IOExeception,OutOfMemoryException等

    5. Debug.WriteTrace.Write有什么不同?何时应该使用哪一个?
    答:Debug.Write是调试的时候向跟踪窗口输出信息。当编译模式为debug的时候才有效,为release的时候Debug.Write在编译的时候会忽略,而Trace则是在debug和release两种模式下均可以向跟踪窗口输出信息。

    6. Debug BuildRelease Build的区别,是否会有明显的速度变化?请说明理由。
    答:Debug会产生pdb文件,release不会。Debug用于开发时的调试,不能要于部署,而release用于部署.debug编译一些特殊代码,比如#IFDEBUG Debug.Write等,而Release则会将那些特殊标记省略

    7. JIT是以assembly为单位发生还是以方法为单位发生?这对于工作区有何影响?
    答:方法,道理很简单,因为对于一次运行,很可能只用到一个程序集中极少数类型和对象,而大部分可能并不会被使用,此时CLR傻乎乎的给整个程序集都给Compile了,CLR不是傻疯了么

    8. a.Equals(b)a == b一样吗?
    答:不一样。a.Equals(b)表示a与b一致, a==b表示a与b的值相等

    9. 在对象比较中,对象一致和对象相等分别是指什么?
    答:对象一致是指两个对象是同一个对象,引用相同。而对象相等是指两个对象的值相同,但引用不一定相同

    10..NET中如何实现深拷贝(deep copy)
    答:实现IClonable接口

    11.请解释一下IClonable
    答:IClonable方法是实现深度复制的接口,实现它应该能深度复制一个对象出来。深度复制的特征的调用对象的构造方法,创建新的对象,包括创建对象中嵌套的引用对象的新实例。而Shadow复制则不同,是浅表复制,不重新创建新实例。浅表复制的实现是 Object.MemberWiseClone().
    深度复制(Deep Copy)与浅表复制(Shadow Copy)的比较

    <!–<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />–>public class Name
    {
    public string FirstName;
    public string LastName;
    }
    public class Person : ICloneable
    {
    public Name PersonName;
    public string Email;
    /// <summary>
    /// Deep Copy的例子
    /// </summary>
    /// <returns></returns>
    public Object Clone()
    {
    Person p = new Person();
    p.Email = this.Email;
    p.PersonName = new Name();
    p.PersonName.FirstName = this.PersonName.FirstName;
    p.PersonName.LastName = this.PersonName.LastName;
    return p;
    }

    public void ChangLastName(string lastName)
    {
    this.PersonName.LastName = lastName;
    }

    public static void Main()
    {
    Person p = new Person();
    p.PersonName = new Name();
    p.PersonName.LastName = ”san”;
    p.PersonName.FirstName = ”zhang”;
    p.Email = ”sanzhang@126.com”;
    Person sameNamePerson = p.Clone() as Person;
    sameNamePerson.ChangLastName(“clr_”);
    Console.WriteLine(p.PersonName.LastName);
    Console.WriteLine(sameNamePerson.PersonName.LastName);

    Person samePerson = p.MemberwiseClone() as Person;
    samePerson.ChangLastName(“Shadow”);

    Console.WriteLine(p.PersonName.LastName);
    Console.WriteLine(sameNamePerson.PersonName.LastName);

    Console.Read();
    }
    }

    12.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String?
    答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

    13.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
    不能,一个对象的一个synchronized方法只能由一个线程访问。

    14.abstractmethod是否可同时是static,是否可同时是native,是否可同时是synchronized?
    答:都不能。

    15.List, Set, Map是否继承自Collection接口?
    答:List,Set是Map不是

    16.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
    答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

    17.数组有没有length()这个方法? String有没有length()这个方法?
    答:数组没有length()这个方法,有length的属性。String有有length()这个方法。

    18.sleep() wait() 有什么区别?
    答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。
    wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

    一.填空题
    1.面向对象的语言具有(继承)性、(多态)性、(封装)性。

    2.能用foreach遍历访问的对象需要实现 (IEnumberable)接口或声明(GetEnumberator)方法的类型。

    3.列举ADO.net中的五个主要对象(Command)、(Connection)、(DataReader)、(DataSet)、(DataAdapter)。

    4.C#中的三元运算符是__(?:)__

    5.当整数a赋值给一个object对象时,整数a将会被__(装箱)___

    6.类成员有__(3)__种可访问形式

    7.float f=-123.567F;int i=(int)f;i的值现在是_(-123)__

    8.委托声明的关键字是___( delegate) _

    9.在Asp.net中所有的自定义用户控件都必须继承自_ (System.Web.UI.UserControl) __

    10.在.Net中所有可序列化的类都被标记为__[serializable]___

    11.在.Net托管代码中我们不用担心内存漏洞,这是因为有了_ GC __

    12.当类T只声明了私有实例构造函数时,则在T的程序文本外部,_不可以_(可以 or 不可以)从T派生出新的类,_不可以_(可以 or 不可以)直接创建T的任何实例。

    二.选择题
    1.以下叙述正确的是: BC
    A. 接口中可以有虚方法。 B. 一个类可以实现多个接口。
    C. 接口不能被实例化。   D. 接口中可以包含已实现的方法。

    2.从数据库读取记录,你可能用到的方法有: BCD
    A. ExecuteNonQuery     B. ExecuteScalar
    C. Fill                 D. ExecuteReader

    3.对于一个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资
    相关的应用程序定义的任务?(多选)   (   ABC    )
    A.Close    B.Dispose   C.Finalize   D.using  E.Quit

    4.以下关于ref和out的描述哪些项是正确的?(多选)   (    ACD   )
        A.使用ref参数,传递到ref参数的参数必须最先初始化。 
        B.使用out参数,传递到out参数的参数必须最先初始化。  
        C.使用ref参数,必须将参数作为ref参数显式传递到方法。 
        D.使用out参数,必须将参数作为out参数显式传递到方法。

    5.在对SQL Server 数据库操作时应选用(A)
       A.SQL Server .NET Framework 数据提供程序;
    B.OLE DB .NET Framework 数据提供程序;
    C.ODBC .NET Framework 数据提供程序;
    D.Oracle .NET Framework数据提供程序;

    6.下列选项中,(C)是引用类型。
       A.enum类型   B.struct类型 C.string类型   D.int类型

    7.关于ASP.NET中的代码隐藏文件的描述正确的是(C)
       A.Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名。
    B.项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。
    C.项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件。
    D.以上都不正确。

    8.以下描述错误的是(A)
    A.在C++中支持抽象类而在C#中不支持抽象类。
    B.C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员。
    C.在C#中可使用 new 修饰符显式隐藏从基类继承的成员。
    D.在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。

    9.C#的数据类型有(B)
       A.值类型和调用类型              B.值类型和引用类型
    C.引用类型和关系类型            D.关系类型和调用类型

    10.下列描述错误的是(D)
    A.类不可以多重继承而接口可以
    B.抽象类自身可以定义成员而接口不可以
    C.抽象类和接口都不能被实例化
    D.一个类可以有多个基类和多个基接口
    11.在DOM中,装载一个XML文档的方法(D)
        A.save方法   B.load方法 C.loadXML方法 D.send方法

    12.下列关于构造函数的描述正确的是(C)
    A.构造函数可以声明返回类型。
    B.构造函数不可以用private修饰
    C.构造函数必须与类名相同
    D.构造函数不能带参数

    13.以下是一些C#中的枚举型的定义,其中错误的用法有(A)
    A.public enum var1{ Mike = 100, Nike = 102, Jike }
    B.public enum var1{ Mike = 100, Nike, Jike }
    C.public enum var1{ Mike=-1 , Nike, Jike }
    D.public enum var1{ Mike , Nike , Jike }

    14.int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是(D)
         A.9                  B.2             C.6              D.越界

    15.接口是一种引用类型,在接口中可以声明(A),但不可以声明公有的域或私有的成员变量
    A..方法、属性、索引器和事件           B.方法、属性信息、属
    C.索引器和字段                        D.事件和字段;

    16.ASP.NET框架中,服务器控件是为配合Web表单工作而专门设计的。服务器控件有两种类型,它们是(A )
       A.HTML控件和Web控件         B.HTML控件和XML控件
    C.XML控件和Web控件          D.HTML控件和IIS控件

    17.ASP.NET中,在Web窗体页上注册一个用户控件,指定该控件的名称为”Mike”,正确的注册指令为( D)
    A.<%@Register TagPrefix = “Mike” TagName = “Space2” Src = “myX.ascx”%>
    B.<%@Register TagPrefix = “Space2” TagName = “Mike” Src = “myX.ascx”%>
    C.<%@Register TagPrefix = “SpaceX” TagName = “Space2” Src = “Mike”%>
    D.以上皆非

    18.在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(C)
       A.insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行;
    B.ExecuteNonQuery()方法返回执行Sql语句所影响的行数。
    C.Select操作的Sql语句只能由ExecuteReader()方法来执行;
    D.ExecuteReader()方法返回一个DataReder对象;


    19.下列ASP.NET语句(B)正确地创建了一个与SQL Server 2000数据库的连接。
        A. SqlConnection con1 = new Connection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);
    B. SqlConnection con1 = new SqlConnection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);
    C. SqlConnection con1 = new SqlConnection(Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB);
    D. SqlConnection con1 = new OleDbConnection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);

    20.Winform中,关于ToolBar控件的属性和事件的描述不正确的是(D)
    A.Buttons属性表示ToolBar控件的所有工具栏按钮
    B.ButtonSize属性表示ToolBar控件上的工具栏按钮的大小,如高度和宽度
    C.DropDownArrows属性表明工具栏按钮(该按钮有一列值需要以下拉方式显示)旁边是否显示下箭头键
    D.ButtonClick事件在用户单击工具栏任何地方时都会触发

    21.在ADO.NET中执行一个存储过程时,如果要设置输出参数则必须同时设置参数的方向和(D ),必要时还要设置参数尺寸。
       A.大小;           B.上限;              C.初始值;            D.类型

    22.如果将窗体的FormBoderStyle设置为None,则( A)。
    A.窗体没有边框并不能调整大小;        B.窗体没有边框但能调整大小;
    C.窗体有边框但不能调整大小;          D.窗体是透明的;

    23.如果要将窗体设置为透明的,则( B)
        A.要将FormBoderStyle属性设置为None; B.要将Opacity属性设置为小于100%的值;
    C.要将locked 属性设置为True;        D.要将 Enabled属性设置为True;

    24.下列关于C#中索引器理解正确的是(B/C )
        A.索引器的参数必须是两个或两个以上   B.索引器的参数类型必须是整数型
    C.索引器没有名字                     D.以上皆非

    25.下面描述错误的是( C/D)
        A.窗体也是控件; B.窗体也是类; C.控件是从窗体继承来的;D.窗体的父类是控件类

    26.要对注册表进行操作则必须包含( D)
        A.System.ComponentModel命名空间;B.System.Collections命名空间;
    C.System.Threading命名空间;     D.Microsoft.Win32命名空间;

    27.要创建多文档应用程序,需要将窗体的(D )属性设为true。
        A.DrawGrid;    B.ShowInTaskbar;     C.Enabled;     D.IsMdiContainer;


    28.如果设treeView1=new TreeView(),则treeView1.Nodes.Add("根节点")返回的是一个 (A)类型的值。
       A.TreeNode;  B.int;  C.string;  D.TreeView;

    29.下面关于XML的描述错误的是(D)
    A.XML提供一种描述结构化数据的方法;
    B.XML 是一种简单、与平台无关并被广泛采用的标准;
    C.XML文档可承载各种信息;
    D.XML只是为了生成结构化文档;

    30.装箱、拆箱操作发生在: (  C  )
        A.类与对象之间           B.对象与对象之间
    C.引用类型与值类型之间   D.引用类型与引用类型之间

    31.用户类若想支持Foreach语句需要实现的接口是: (  A  )
    A.Ienumerable       B.Ienumerator    C.Icollection        D.IcollectData

    32.Net Framework通过什么与COM组件进行交互操作?(   C )
        A.Side By Side     B.Web Service    C.Interop     D.PInvoke

    33..Net依靠以下哪一项技术解决COM存在的Dll Hell问题的?( A   )
        A.Side By Side     B.Interop    C.Pinvoke      D.COM+

    34.装箱与拆箱操作是否是互逆的操作?(  B  )
        A.是        B.否

    35.以下哪个是可以变长的数组?(  D  )
    A.Array        B.string[]       C.string[N]        D.ArrayList

    36.用户自定义异常类需要从以下哪个类继承:(  A  )
        A.Exception  B.CustomException   C.ApplicationException  D.BaseException

     1. 类的三大特性是(封装)(继承)(多态)。

      2. 在SELECT语句的FROM子句中最多可以指定(256)个表或视图,相互之间要用(逗号)分隔,当所查询的表不在当前数据库(数据库培训 数据库认证 )时,可用(数据库名.所有者名.表名)格式来指出表或视图对象。

      3. 创建存储过程的命令是(create proc 存储过程名)删除表的命令是(drop 表名)。

      4. 计算字段的累加和的函数是:(sum),统计项目数的函数是:(count)。

      5. 关系数据库中,主键是(外键)。

      6. 声明抽象类的关键字是(abstract),抽象类不能(sealed)。

      7. .NET运行库支持被称为(委托)的引用类型,其作用类似于C++中函数指针的用途。

      8. XML的全称是(Extensible Markup Language)。

      9. C#中所有的类型实质上都是从(Object)类派生而来的。

      10. 声明静态变量的关键字是(static),声明常量的关键字是(const)。

      11. C#中处理内存管理功能的是(托管代码)。

      12. 在C#中用于显式地将一个值或引用转换为另一种不同的类型称为(拆箱)。

      13. 在ADO。NET中,command对象是用(ExcuteNonQuery)(ExcuteScalar)(ExcuteDataReader)方法执行命令。

      14. B/S通常使用的结构设计模型分为(模型)(视图)(控制)。

      15. SQL(SQL Server培训 mySQL培训 ) SERVER中索引类型包括的三种类型分别是(主键索引)(唯一索引)(聚集索引)。

      .net软件工程师面试题二. 简答题:

      1.什么是中间语言(IL)?它的作用?

      答:代码在执行前都要被编译为托管代码,与CPU无关的指令集。

      其作用:支持平台无关性,还支持语言的互操作性。

      2.什么是装箱和拆箱?

      答:值类型转换成引用类型是装箱,引用类型转换成值类型是拆箱。

      3. 出ADO。NET中读写数据库的主要的几个类?它们的作用?

      答:Connection数据库连接;Command执行SQL语句或存储过程;DataAdapter用于填充DataSet和更新数据库的 一组数据命令和数据库连接,断开模式;DataReader,读取数据库信息,是只读向前的;DataSet数据在内存中的缓存。

      4. C#中接口和类有什么异同?

      答:类是引用类型,可以继承类、接口和被继承,有默认的构造函数,有析构函数,可以使用abstract和sealed,有protected修饰符,必须使用new初始化。

      结构是值类型,只能继承接口,不能被继承,没有默认的构造函数,可以创建,没有析构函数,不可以用abstract和sealed,没有protected修饰符,可以不用new初始化。

      如何选择使用结构还是类:

      1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些

      2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。

      3.在表现抽象和多级别的对象层次时,类是最好的选择

      4.大多数情况下该类型只是一些数据时,结构是最佳的选择

      5. 解释ASP(ASP培训 )。NET中的code-behind?

      答:代码隐藏,显示逻辑的代码和处理逻辑的代码分离

      6. 什么是ASP。NET中的用户控件?

      答:是asp.net代码创建的控件,就像在标准的ASP.NET Web页面中创建控件一样,可以在多个ASP.NET页面中重用它们。

      7. 在C#中,string str = null 与 string str = “” 请尽量说明其中的区别。

      答:string str=null没有分配空间,string str=“”分配了空间

      8. 什么是受管制代码?

      答:由公共语言运行环境进行管理的代码,它主要负责内存管理。在.net平台上运行的代码都是受管制代码

      9 C#中常用的访问形式?它们各自的作用域?

      答:public 不受限制的访问。

      private 只能在本类中访问

      protected 本类和继承他的类中访问

      internel表示在同一个应用程序(application)或类库(library)中都能使用

      10. SQL SERVER 中的存储过程的理解?

      答:存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。

      11.CTS,CLS,CLR分别作何解释?

      答: CTS:公共类型系统.主要是为了语言之间的进行标准化处理.

      CLS:公共语言规范.主要是确保代码可以在任何语言中访问的最小标准集体

      CLR:公共语言运行时.主要是管理代码..处理,加载代码,以及所有服务的代码

      12. ASP。NET和ASP的主要优势?

      答:ASP.Net的优势:

      ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++ , VB , JS等等,当然,最合适的编程语言还是MS为.Net Frmaework专门推出的C(读c sharp),它可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向 对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装 性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改 动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/ 纠错体系。

      13. NET的错误处理机制是什么?

      答:try{可能要出错的代码}

      catch{扑捉到错误后的处理}

      finally{不论代码是否出错都要执行}

      14. 解释Page.IsPostBack属性?

      答:使用者第一次浏览这个网页时Page.IsPostBack 会传回False,不是第一次浏览这个网页时就传回True

      15..net framework包含哪几种技术?

      答:Application Framework,Domain Framework

      16.触发器分为事前触发和事后触发,有何区别?

      答:事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值

      17.解释SQL SERVER2000中HAVING的用法?]

      答:在分组时筛选数据

      18.解释SQL SERVER2000中GROUP BY的用法?

      答:分组

      19.解释下C#中的方法的重载?

      答:重载方法:是指使用相同的方法名,但指定不同的参数(个数,类型)。

      20.事务是什么?

      答:在许多大型、关键的应用程序中,计算机每秒钟都在执行大量的任务。更为经常的不是这些任务本身,而是将这些任务结合在一起完成一个业务要求,称为事务。当某一个任务失败时,就恢复到指定的恢复点,这个叫回滚。

      21.描述下ASP。NET中使用DataReader对象 和DataSet对象的区别?

      答:dataset是保存数据的数据结构,断开模式,而DataReader不承担保存数据的责任,需要自己手动关闭连接数据库,它只负责从数据源读取数据到本地而已,是只读向前的,它不是数据结构,而是网络通讯组件的高层封装。

      22.分析类和结构的异同?

      答:类是引用类型,可以继承类、接口和被继承,有默认的构造函数,有析构函数,可以使用abstract和sealed,有protected修饰符,必须使用new初始化。

      结构是值类型,只能继承接口,不能被继承,没有默认的构造函数,可以创建,没有析构函数,不可以用abstract和sealed,没有protected修饰符,可以不用new初始化。

      如何选择使用结构还是类:

      1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些

      2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。

      3.在表现抽象和多级别的对象层次时,类是最好的选择

      4.大多数情况下该类型只是一些数据时,结构是最佳的选择

      23.解释ADO。NET中的使用Connection 类的CLOSE()和DISPOSE()的区别?

      答:close只是关闭,dispose是释放资源。

      24.叙述ADO。NET中的DataAdapte类的作用?

      答:断开模式连接数据库,并且填充DataSet。

      25.什么是WEBSERVICE ?

      答:web服务,是利用SOAP(简单对象访问协议,Simple Object Access Protocol)在HTTP上执行远程方法调用的一种方法,也可以使用WSDL(Web Service Description Language,Web服务描述语言)来完整的描述Web服务,基于XML标准。

      26.行下面代码后:

      String strTemp ="abcdefg 某某某";

      int i System.Text.Encoding.Default.GetBytes(strTemp).Length;

      int j = strTemp.Length;

      问:i=( 14) ;j=( 11)

      原因是什么?

      答:汉字占2个字节,所以i=14

      27..叙述ASP。NET中的几种验证控件(equiredFieldValidato, CompareValidator, RangeValidator, RegularExpressionValitor, CustomValidator, ValidationSummary)及作用?

      答:

      a) RequiredFieldValidator(必须字段验证);

      b) CompareValidator(比较验证);

      c) RangeValidator (范围验证);

      d) RegularExpresionValidator(正则表达式);

      e) ValidationSummary(验证总结);

      f) CustomValidator(自定义验证)

      .net软件工程师面试题三. 编程题:

      1.有三个表,结构如下:

      STUDENT(学生证号,姓名,性别,出生年月)

      COURSE(课程号,课程名,授课教师)

      SC(学生证号,课程号,成绩,授课教师)

      用标准SQL 语句完成下列操作

      1. 查询女生的基本情况,并按照学生证号降序排列

      答:select * from STUDENT where性别=’女’order by 学生证号 desc

      2. 查询成绩在90分以上的学生的姓名

      答:select 姓名from STUDENT,SC where STUDENT.学生证号 = SC.学生证号 and SC.成绩 > 90

      3. 查询数学类课程的课程号和课程名(模糊查询,以S开头)

      答:select 课程号,课程名 from COURSE where 课程名 like ‘S%’

      4. 查询选课学生所选课程的课程号和成绩,以及该学生的姓名和性别

      答:select 课程号,成绩,姓名,性别 from SC,STUDENT,COURSE

      where SC.学生证号 = STUDENT.学生证号

      and COURSE.课程号 = SC.课程号 group by 学生证号

      5. 查询03号课程的平均成绩

      答:select avg(成绩) from SC where 课程号 = ‘03’

      6. 删除成绩不及格的学生姓名

      答:delete from STUDENT where学生证号 in (select学生证号 from SC where 成绩 < 60);

      delete from SC where成绩 < 60;

      注意:删除的顺序不能反

      7. 把学生证号为90876的学生所选的01号课程成绩改为80分

      答:update SC set 成绩 = ’80’where 学生证号=’90876’ and课程号 = ‘01’

      2.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号。(10)

      答:select ID from table1 where LastUpdateDate = (select max(LastUpdateDate) from table1)

             以上面试资料.net软件工程师面试题精华集锦中的一部分,经过一段时间的工作经验的积累后,可发展成为高级软件工程师、算法应用开发工程师和需求工程师,但需要具有丰富的软件开发经验和相关工作的技术背景。如果想成为技术精英、项目经理,则还需要具有较强的管理和组织等方面的能力。

  • 相关阅读:
    kgtp
    SSIS高级转换任务—行计数
    SSIS高级转换任务—OLE DB命令
    SQL点滴16—SQL分页语句总结
    Windows7中使用Task Scheduler调用WinScp批处理实现上传下载文件
    SSIS高级转换任务—导入列
    SSIS高级转换任务—关键词抽取
    SQL点滴15—在SQL Server 2008中调用C#程序
    C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件....
    SQL点滴18—SqlServer中的merge操作,相当地风骚
  • 原文地址:https://www.cnblogs.com/msdncrazy/p/3021277.html
Copyright © 2011-2022 走看看