zoukankan      html  css  js  c++  java
  • .NET面试题(二)

    基础方面:

    1.简单的描述一下C# 中重写,重载,隐藏的概念

    C#中重写(overide)是子类继承父类后,对父类中的方法进行行为改写。

    重载是指方法名相同,参数不同

    重写和隐藏的定义:
    重写:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
    隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。
    这样看起来似乎不是很清晰明了,换成我自己的理解就是:
    比如父类A,有个方法标记为virtual,a(){}   
    子类B继承A,也声明一个方法a(){}   
    如果B里面的a()使用override,那么访问A的方法时实际上调用了B里面声明的方法,相当于A的方法被覆盖了,new就不是,访问A的a还是A里面定义的方法,访问B就是B里面定义的方法.
    说白了:new是覆盖,override是重载,“覆盖”并不意味着“删除”,但“重载”意味着“删除”,这就是“覆盖”和“重载”的区别
    复制代码
     
    重写和隐藏的定义:
    重写:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
    隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。
    这样看起来似乎不是很清晰明了,换成我自己的理解就是:
    比如父类A,有个方法标记为virtual,a(){}   
    子类B继承A,也声明一个方法a(){}   
    如果B里面的a()使用override,那么访问A的方法时实际上调用了B里面声明的方法,相当于A的方法被覆盖了,new就不是,访问A的a还是A里面定义的方法,访问B就是B里面定义的方法.
    说白了:new是覆盖,override是重载,“覆盖”并不意味着“删除”,但“重载”意味着“删除”,这就是“覆盖”和“重载”的区别  
    隐藏(new)示例:
    using    System;  
       class    A  
       {  
             public    void    F()    
             {  
                   Console.WriteLine("A.F");    
             }  
       }  
       class    B:    A  
       {  
             new    public    void    F()    
             {    
                   Console.WriteLine("B.F");    
             }  
       }  
       class    Test  
       {  
             static void Main(string[] args)
             {  
                   B    b    =    new    B();  
                   b.F();  
                   A    a    =    b;    
                   a.F();  
             }  
       }  
       输出为  
       B.F  
       A.F  
    重写virtual(虚方法)示例  
       using    System;  
       class    A  
       {  
             public    virtual    void    F()    
             {  
                   Console.WriteLine("A.F");    
             }  
       }  
       class    B:    A  
       {  
             public    override    void    F()    
             {    
                   Console.WriteLine("B.F");    
             }  
       }  
       class    Test  
       {  
             static    void    Main()    
             {  
                   B    b    =    new    B();  
                   b.F();  
                   A    a    =    b;    
                   a.F();  
             }  
       }  
       输出为  
       B.F  
       B.F
    复制代码
    using    System;  
       class    A  
       {  
             public    void    F()    
             {  
                   Console.WriteLine("A.F");    
             }  
       }  
       class    B:    A  
       {  
             new    public    void    F()    
             {    
                   Console.WriteLine("B.F");    
             }  
       }  
       class    Test  
       {  
             static void Main(string[] args)
             {  
                   B    b    =    new    B();  
                   b.F();  
                   A    a    =    b;    
                   a.F();  
             }  
       }  
       输出为  
       B.F  
       A.F  
    重写virtual(虚方法)示例  
       using    System;  
       class    A  
       {  
             public    virtual    void    F()    
             {  
                   Console.WriteLine("A.F");    
             }  
       }  
       class    B:    A  
       {  
             public    override    void    F()    
             {    
                   Console.WriteLine("B.F");    
             }  
       }  
       class    Test  
       {  
             static    void    Main()    
             {  
                   B    b    =    new    B();  
                   b.F();  
                   A    a    =    b;    
                   a.F();  
             }  
       }  
       输出为  
       B.F  
       B.F
    View Code

    2.执行string str=”xxx”+"yy”+"zz”所分配的内存

    一个字符串的内存,上述代码中,所有字符串都是直接变量,C#编译器会在编译时连接他们,最终只会将一个字符串(即“xxxyyzz”)放入模块的元数据中。

    如果对非直接量字符串使用+操作符,会在运行时进行连接。

    3.string和String以及object与Object有什么区别

    String是标准类型,string只是.NET平台给String类型的别称。String和string是一样的。

    4.请看下面代码:

       string str1=”a”;

       string str2=str1;

       str1=”a”+"b”;

       问str1是否和str2相等。

    不相等。代码敲了下,运行结果:str1:ab  str2:b。搞不清楚出此题目的意义

    5.简单的描述下HashTable和Dictionary的区别,能否说说这两种结构在遇到哈希冲突时的解决方案

    6.ArrayList可以认为他是动态数组,请问他是怎么解决数组不需要预定义内存分配大小的问题的

    7.简单的描述一下委托和事件以及他们的关系和区别.

    8.我们知道.net平台的队列类(Queue)的内部是用数组(Array)实现的,请问你能想象一下是怎么实现的吗?

    9.在这样的一个数组里面

        A[0] = "are" 
        A[1] = "few" 
        A[2] = "girls" 
        A[3] = "in" 
        A[4] = "Missouri." 
        A[5] = "Rolla," 
        A[6] = "There"

    需要寻找"There"需要经历O(n)的复杂度,随着n的增大,性能的消耗也会加大,请问怎么减少查找的性能损失.

    10.C#里如何在某一时刻知道某个类的当前的实例个数,要求不影响正常的垃圾回收.

    11.虚方法和接口的区别.虚方法的实现原理是什么?

    虚方法有方法体,而接口没有;子类继承父类,对虚方法进行重写,类实现接口,对接口中的方法进行实现。

    12.struct和class的区别,简单描述他们的相同点,不同点,以及在内存中的存储方式

    13.能简单的叙述下动态规划算法的的步骤吗?

    14.括号的匹配性检查,如何实现,请简述你的想法. 如{(x+(a+b)+c)},当用户以字符串输入时,如何判断是否括号完整匹配.

    Web方面:

    1.简单的描述下ViewState的实现原理

    将对象转换为二进制,然后把二进制转换为Base64

    2.Webservice如何进行针对调用者的权限管理

    3.能够简单描述一下MVC干了了什么事情,有哪些好处吗?

    4.能够描述一下asp.net的webform的生存周期吗?

    DoNet框架方面:

    1.什么是CLR.简单的描述一下.net的运行机制

    CLR:公共语言运行库。

    运行机制:

    2.值类型和引用类型的区别,以及内存中的存储方式

    值类型一般有默认值,不可以派生出其他的类型,存储在栈上,;引用类型相反;存储在堆上

    3.简单描述一下装箱和拆箱,怎么避免带来的性能损失

    装箱是值类型转换为引用类型;拆箱是引用类型转换为值类型。一般可以用泛型来存储数据集,如:List<String>,强制指定类型,即可以避免装箱和拆箱。

    4.简单描述一下.net下的垃圾回收(GC)机制

    垃圾回收分为0,1,2代,始终从第0代开始回收。

  • 相关阅读:
    java JDBC DAO ORM Domain
    《硅谷钢铁侠-- 埃隆·马斯克的冒险人生》
    在启动MYSQL时出现问题:“ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)”
    使用IntelliJ IDEA开发java web
    [django]用日期来查询datetime类型字段
    2020/5/31
    图解排序算法(三)之堆排序
    图解排序算法(二)之希尔排序
    图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)
    Oracle约束(Constraint)详解
  • 原文地址:https://www.cnblogs.com/binyao/p/4900307.html
Copyright © 2011-2022 走看看