.NET软件开发面试题(40)

606 阅读13分钟

1.C#中的垃圾回收机制?

答:GC就是垃圾回收机制,一般情况下系统会自动检测不会使用的对象或者变量进行清除释放内存,Collect()是强制垃圾回收。

2.什么是面向对象?

答:

封装:用抽象的类型将数据和基于数据的操作封装在一起,数据被保护在抽象类的内部。

继承:子类继承父类的所有数据和操作。

多态:一个程序中同名的不同方法。

3.什么是拆箱和装箱?

答: 装箱:值类型到引用类型的转换。

拆箱:引用类型到值类型的转换。

4.简述private、 protected、 internal 、public 修饰符的访问权限?

答:

private:私有成员,只能在类的内部访问。

protected:保护成员,在该类内部和继承类中可以访问。

internal:同一个程序集内进行访问。

public:公共成员,完全公开。

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

答:

委托在本质上是一种方法接口,相当于C/C++中的函数指针,但是比指针安全,在C#中用于时间的处理。

事件不是委托,在C#中处理事件的逻辑包装为委托。

6.C#中重写和重载的区别?

答:

重写:基类中函数的重写,为了适应需求。

重载:方法名相同,参数或参数类型不同。

7..net的错误处理机制是什么?

答:

try>catch>finall结构,发现错误时层层上抛直到找到匹配的catch为止。

8.线程和进程的区别?

答:

进程是资源的分配与调度的独立单元,线程是CPU调度的基本单元。 同一进程可以有多个线程,且线程共享整个进程的资源,一个进程至少包含一个线程。 线程是轻量级的进程,其创建与销毁的所需时间比进程少很多。

9.什么是wcf?什么是WebServices?

答:

WCF:是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分。

web services:WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。

10. Public static const int a=1;这段代码错在哪里?

答:

const不能被修饰为static ;因为定义为常量 (const )后就是静态的(static )。

11.在.net中不想让一个类被继承用哪个单车修饰?序列化一个类用哪个单词标记?

答:

不可被继承:用sealed修饰。

可序列化:用[serializable]标记。

12.简述C#中类与接口的区别?

答:接口是功能的定义。类是功能的具体实现。

13.在C#中我们定义参数时经常会用到ref和out简述一下区别?

答:

1).ref型传递变量前,变量必须初始化,否则编译器会报错,而out型则不需要初始化

2).ref型传递变量,数值可以传入方法中,而out型无法将数据传入方法中。换而言之,ref型有进有出,out型只出不进。

14.C# 中有几种循环?分别用在什么场合?

答:

do while:不管符不符合条件都会运行一次,在运行一次在之后再进行判断是否符合条件。

while:首先判断是否符合条件在进行运行。

for:和while的意思差不多只是表达形式不同;一般需要定义局部性控制循环的的变量使用。

foreach:只能对数据进行读;在其作用域内不能对进行遍历的值做修改,其遍历顺序只能递增而且其控制循环变量是默认的只能++。

15.随便写出一个json对象数组?

答:

[{"UserID":1,"Name":"王家乐","Tel":"17629731003","Sex":"男"}]

16.C#实现代码编程题:定义一个int数组,长度为100,并向其中随机插入1-100的数字,保证不重复?

答:

    int[] arr = new int[100];

    List<int> list = new List<int> ();
    for (int i = 0; i < arr.Length; i++) 
    {
         list.Add (i + 1);
    }
    Random rd = new Random ();
    int Index = 0;
    while (list.Count > 0) 
    {
        int num = rd.Next (0, list.Count);
        int temp = list [num];
        arr [Index] = temp;
        Index++;
        list.Remove (temp);
    }

17.C#实现代码编程题:编写一个冒泡排序的方法,参数传入一个int数组?

答:

       public static int[] Sort(int[] n1)
        {
            int temp;
            for (int i = 0; i < n1.Length - 1; i++)
            {
                for (int j = 0; j < n1.Length - 1 - i; j++)
                {
                    if (n1[j] > n1[j + 1])
                    {
                        temp = n1[j];
                        n1[j] = n1[j + 1];
                        n1[j + 1] = temp;
                    }
                }
            }
            return n1;
        }

18.谈谈你对remoting和webservice两项技术的理解?

答:

WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

19.C#代码编程题: 1 1 2 3 5 8 13 21 34 55 用递归算法编写一个方法,计算第n位上的数值(n>0)

答:

     public static int fn(int a)
        {
            if (a>2)
            {
                return fit(a - 1) + fit(a - 2);
            }
            else
            {
                return 1;
              
            }
        }

20.C#实现代码编程题:1-2+3-4+……+m 输出结果?

答:

public static int sum(int shu)
{
    int sum=0;
    for (int i = 1; i <= shu; i++)    
    {
       if(i%2==0)
        {
            sum-=i
        }
        else
        {
         sum+=i
        }
    }
    
}  

21.简述区别:string str=null、string str=””、string str=string.empty

答:

String str1 = null; str引用为空

String str2 = ""; str应用一个空串 也就是null没有分配空间, ""分配了空间,

因此str1还不是一个实例化的对象,而str2已经实例化。 null不是对象,""是对象 。

22. C#中能使用指针吗?怎么使用?

答:

C#仅是语言层面的,所以C#本身是存在指针类型的,可以引用指针。
在.net开发时,凡是使用指针、开辟内存等不受托管处理的都为非安全开发。也就是说,指针之类的引用在.net中必须加在unsafe关键词之词。而且在编译时也必须选中允许非安全编译才可以通过。

23.什么是三层架构?

答:

三层架构辑层、数据访问层。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

24.C#是否可以对内存直接进行操作?

答:

C#可以直接对内存进行操作。但是默认情况下,为了保持类型安全,C#不支持指针运算。不过,通过使用 unsafe 关键字,可以定义可使用指针的不安全上下文。

25.多线程编程中,sleep()和wait()有什么区别?IntDataTime是否可以为null?

答:

sleep()和wait()方法的最大区别是:sleep()睡眠时,保持对象锁,仍然占有该锁;其他线程无法访问,而wait()睡眠时,释放对象锁。其他线程可以访问。Int DataTime,在赋值时未给予赋值,此时系统会分配给它一个最小的时间,不会是null值,Int DataTime,不会有null类型,C#提供了“可空类型”这种语法,只要在类型后加?就构成了可空的数据类型,比如int?、bool?,这样int? i=null 就可以了

26.Short s1=1;s1=s1+1;两句代码有错吗?请指出为什么?简述UDP和TCP的区别?

答:

s1 + 1,s1是short类型,1是int型,s1会自动转换为int型的1,与1相加后,得到int型的2,要向左侧的short类型的s1看齐,即需要通过强制类型转换。正确写法:s1 = (short) (s1 + 1);

UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息。

优点:UDP速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送

缺点:UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数 据是否会正确接收,也不重复发送,不可靠。

TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次握手

优点:TCP在数据传递时,有确认、窗口、重传、阻塞等控制机制,能保证数据正确性,较为可靠。

缺点:TCP相对于UDP速度慢一点,要求系统资源较多

27. String s=new String(“abc”);创建了几个String Object?

答:如果在字符串常量池中不存在其代表的对象,就创建两个,如果存在就创建一个.

28.代码编程题:1 1 2 3 5 8 13 21 34……递归算法算出第n位上的数?

答:

public int fn(n)
{
    if(n<=2){
    return 1
    }
    else{
    return fn(n-1)+fn(n-2)
    }
}

29.编写一个冒泡排序?

答:

int[] list= { 1, 5, 2, 3, 7 }
public int[] fn(int[] list)
{
    int temp=0;//用于进行交换的临时数
    for(int i=0;i<=list.Length;i++){
        for(int j=0;j<list.Length-1-i;j++){
             if (list[j - 1] > list[j]) 
             {                
               temp = list[j - 1];                
               list[j - 1] = list[j];                
               list[j] = temp;            
             }
        }
    }
    return list;
}

30.OOP中字段封装完叫属性,那么在set访问器中有个隐藏的参数名称叫什么?简述什么是Code-Behind技术?

public string Name
    {
        get{
            return name; 
        }
        set 
        {
            name = value;
        }
    }

在set访问器中隐藏的参数名是value他的类型和声明的属性类型相同

Code-Behind技术 就是代码隐藏,在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像以前asp那样都代码和html代码混在一起,难以维护

31.请简述List和Dictionary<K,V>的区别和优势?

答: List就是一个集合,它可以存储某种类型的列表, Dictionary<T1,T2>我们俗称其为字典,他包含一个Key和与之对应的Value,其目的是能够根据Key迅速地找到Value相比之下List的效率要快很多在Dictionary中,除了要存储我们实际需要的Value外,还需要一个辅助变量Key,这就造成了内存空间的双重浪费

32.简述一下.net MVC设计模式和工作原理?

答:

MVC是一种软件开发架构,它包含了很多的设计模式,最为密切是以下三种:观察者模式,组合模式和策略模式  

MVC架构把数据处理,程序输入输出控制及数据显示分离开来,并且描述了不同部件的对象间的通信方式,使得软件可维护性,可扩展性,灵活性以及封装性大大提高。

MVC(Model-View-Controller)把系统的组成分解为M(模型)、V(视图)、C(控制器)三种部件。V(视图)表示数据在屏幕上的显示;C(控制器)提供处理过程控制,它在模型和视图之间起连接作用。控制器本身不输出任何信息和做任何处理,它只负责把用户的请求转成针对Model的操作,和调用相应的视图来显示Model处理后的数据。

33.简述asp.net六大内置对象及用法?

答:

Response对象:Response对象是HttpResponse类的一个对象,与一个HTTP响应相对应,通过该对象的属性和方法可以控制如何将服务器端的数据发送到客户端浏览器

Request对象:Request对象是HttpRequest类的对象。当客户发出请求执行,客户端的请求信息会包装在Request对象中。这些请求信息包括请求头、请求方法(post,get)、提交的信息等

Server对象:Server对象的属性反应了Web服务器的各种信息,他提供了服务器可以提供的各种服务

Application对象:Application对象在实际网络开发中的用途就是记录整个网络的信息,如上线人数、在线名单、意见调查和网上选举等。在给定的应用程序的多有用户之间共享信息,并在服务器运行期间持久的保存数据

Session对象:内置对象Session负责存储、读取和改变一个特定用户的会话信息,对于每个用户的每次访问Session对象都是唯一的。

Cookie对象:在Web程序设计中,它表示一个长度不超过4k的文本文件,这个文件在用户的硬盘上,可以由Web浏览器进行访问

34. Get和Post区别?

答:

get请求会暴露用户请求的参数在url地址中,并且数据有大小限制,但是处理速度快

post请求不会暴露用户的请求参数,对数据没有大小限制,但是处理速度相对get请求较慢

35.简述WebService技术及在开发过程中的使用?

答:

WebService采用HTTP协议传输数据,采用XML格式封装数据。XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的,在开发过程中WebService向外界暴露出一个能通过Web进行调用的API,客户端可以通过请求这个接口来获取数据。实现前后端的分离加快开发效率

36.什么是SQL注入式攻击,如何防范?

答:

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令,从而对数据库的数据进行操作的一种攻击手段

防范措施:

1.进行字符替换,替换掉一些敏感字符

2.使用存储过程完成数据的查询

3.限制表单输入的字符长度

4.在后端对用户输入的信息校验合法性

5.检查提取数据的查询所返回的记录数量

6.将用户登录名称、密码等数据加密保存

37.简述HTML和服务器控件的区别?

答:

html 就是我们通常的说的 html 语言标记,这些语言标记在已往的静态页面和其他网页里存在,不能在服务器端控制的,只能在客户端通过 javascript等程序语言来控制

asp.net的服务器控件是运行在服务器上的,直接封装了操作该控件的方法,前后代码不分离一个运行在客户端一个运行在服务端

38. Asp.net中你知道多少种页面传值的方式,请一一列举

答:

1.Request.QueryString:获取http查询字符串变量集合即Request.QueryString[string name]

2.Request.Form:获取窗体变量集合即Request.Form[string name]

3.Session:即Session["string"]=string

39.什么是SoAP协议?

答:

SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。

或者更简单地说:SOAP 是用于访问网络服务的协议。

40.简述ADO.NET五大对像?

答:

1、Connection(连接数据库)

2、Command(执行T-SQL语句)

3、DataAdapter(用户填充DataSet,断开模式)

4、DataReader(读取数据库,一种只读模式)

5、DataSet(数据集,好比电脑的内存)