.NET常见面试题

一、 .NET基础部分

  • Linq查询,lambda表达式

         LINQ(Language Integrated Query,语言集成查询)提供了一种跨数据源和数据格式的统一模型,实现查询。主要包括三个部分:LINQ to Objects、LINQ to XML、LINQ enabled ADO.NET,而在LINQ enabled ADO.NET中又包括LINQ to DataSet、LINQ to SQL 和 LINQ to Entities。

Lambda 表达式”是一种简化的匿名函数,在C#3.0中引入的,可用于创建委托或表达式目录树。也可以将 Lambda 表达式作为参数或者返回值使用。它的语法形式是: 输入参数 => 表达式或语句块,其中,=> 读作“goes to”,在LINQ查询中大量的使用到。

  • C#中的垃圾回收机制。

      GC就是垃圾回收,一般来说系统会自动检测不会使用的对象或变量进行内存的释放,不需要手动调用,Collect()就是强制进行垃圾回收,使内存得到及时的释放,让程序效率更高。

  • Linq查询的优势。

      无需复杂学习过程即可上手。  

      编写更少代码即可创建完整应用。 

      更快开发错误更少的应用程序。 

      无需求助奇怪的编程技巧就可合并数据源。

      让新开发者开发效率更高。 

      任何对象或数据源都可以定制实现Linq适配器,为数据交互带来真正方便。

  • 面向对象的主要思想包括什么?

      在面向对象中,一切皆为对象,面向对象的三大特征:

            1)封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部,程序的其他部分只                  有通过被授权的操作(成员方法)才能对数据进行操作。。 

            2)继承:继承可以解决代码复用问题,子类可以沿用父类方法和属性的一种方式。 

           3)多态:继承同一父类的不同子类,对父类方法的不同实现。分为方法的隐藏和重写。

  • C#中的接口和抽象类有什么异同?

     从形态层面上:

            相同点:抽象类和接口的都是抽象的,不能实例化,需要子类实现其抽象成员。

            不同点:

                  1)抽象类是类的部分实现,可以包含已实现的成员,而接口不能包含任何成员的实现。

                  2)抽象类与普通类一样,可以继承类和实现接口,而接口只能继承接口,不能实现接口。

      从设计层面上:

            不同点:

                  1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性行为,但是接口却是对类局部(行为)进行抽象。

                  2)抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

                  3)抽象类一般作为父类使用,和实现类往往属于同一类事物而接口和实现类则不然只是一种实现关系例如演员和角色的关系

  • 什么是装箱和拆箱?

            装箱就是把值类型到引用类型的转换

            拆箱就是引用类型到值类型的转换

  • 简述 privateprotectedinternal public  修饰符的访问权限。

            private : 私有成员, 在类的内部才可以访问。

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

            internal: 在同一程序集内可以访问。

            public : 公共成员,完全公开,没有访问限制。

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

            C#中的委托是一种引用类型,表示具有相同方法签名的方法的引用。类似于函数指针,也就是说它们是指向函数的“引用”,更加安全。

            事件不是委托,是委托类型的变量。

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

            一般来说,为了在.NET Framework中处理可能的错误,会采用try-catch-finally这样的代码结构,其中,try块包含了程序正常的操作部分,但可能会出现异常,catch块包含的代码用于处理try中产生的异常,而finally块主要用于清理资源或执行要在try块或catch块末尾执行的其他操作,值得注意的是,无论是否产生异常,finally块中的代码总是要执行的。

在.NET中提供了许多预定义的异常类,所有的异常类都是派生于Exception类,只有当产生的异常与catch块中声明的异常类型匹配时,才能对异常进行处理。若catch块不能处理当前的异常,则会默认向方法的调用上一层抛出异常,层层上抛,直到找到匹配的catch块为止,若不存在匹配的catch块,则程序将异常终止。

  1. 线程和进程的区别

最根本区别:进程是操作系统资源分配的基本单位,而线程是CPU调度和执行的基本单位

1)在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,线程之间切换的开销小。

2)所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

3)内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

4)包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

  1. WCFWPFWFWebServices 简述

WCF:Windows Communication Foundation,是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。它是.NET框架的一部分,由 .NET Framework 3.0 开始引入。整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。是Windows平台上开发分布式应用最佳的实践方式。

WPF:Windows Presentation Foundation,WPF是微软新一代图形系统,运行在.NET Framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。

WF: Windows Workflow Foundation,它是微软在.NET3.0之后推出的一套工作流开发框架,其主要的目的在于为现有的.NET应用程序嵌入工作流应用。

WebService:一种跨编程语言和跨操作系统平台的远程调用技术。

1)远程调用,就是一台计算机的应用可以调用其他计算机上的应用。

2)跨编程语言:是指服务端、客户端程序的编程语言可以不同

3)跨操作系统平台:是指服务端、客户端可在不同的操作系统上运行

例如:支付宝,支付宝并没有银行卡等数据,它只是去调用银行提供的接口来获得数据。还有天气预报等,也是气象局把自己的系统服务以WebService服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能。

 

  1. 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][1]的值是

答案:2

  1. 启动一个线程主要用什么方法_______

创建Thread实例并调用Start方法启动线程

  1. 能用foreach遍历访问的对象需要实现 ______ 接口或声明____方法的类型。

能用foreach遍历访问的对象需要实现 IEnumerable 接口或声明GetEnumerator 方法的类型

  1. 请叙述constreadonly的区别。

const为静态常量,所谓静态常量就是在编译期间会对变量进行解析,再将常量的值替换成初始化的值。

readonly为动态常量,所谓动态常量就是编译期间会将变量标记只读常量,而不用常量的值代替,这样在声明时可以不初始化,可以延迟到构造函数初始化。

  1. c#中的三元运算符是什么

C#中有一个三元运算符”?:”,语法为:条件表达式?表达式1:表达式2

该操作首先求出条件表达式的值(bool类型),为true时调用表达式1,为false时调用表达式2。其逻辑为:”如果为真执行第一个,否则执行第二个。”

  1. 当整数a赋值给一个object对象时,整数a将会被什么?

装箱。

  1. public static const int A=1;这段代码有错误么?是什么? 

const成员都是static所以应该去掉static

  1. 利用operator声明且仅声明了==,有什么错误么?

重载了“== 就必须重载 !=

  1. 委托声明的关键字是什么?

delegate

  1. sealed修饰的类有什么特点?

该类为密封类,不可被继承

  1. .Net中所有可序列化的类都被标记为什么?

使用Serializable特性标记

  1. 下面的代码中有什么错误吗?

using System;

class A

{

public virtual void F(){

Console.WriteLine(“A.F”);

}

}

abstract class B:A

{

public abstract override void F();

}

答案:abstract override 是不可以一起修饰方法

  1. 请解释接口的显式实现有什么意义?

显式实现接口:实现类在实现接口中方法时,方法名前必须添加接口名,且不能添加访问修饰符。在调用时,显式实现接口的方法只能通过接口访问,不能通过类访问。

这样做的好处:

1)若一个类实现接口,而接口中的方法只需要在类的内部实现,则可以使用显式实现接口的方式,这样类的实例这无法使用该接口成员。

2)显式接口成员可以避免了成员之间因为同名而发生混淆。如果一个类希望对名称和返回类型相同的接口成员采用不同的实现方式,这就必须要使用到显式实现接口方式。

  1. 请解释.NET采用委托实现的事件模型与JAVA中采用接口实现的事件模型有什么区别,

.net中的委托概念java中没有相同的,只有事件模式是一样的,java中有一个叫Obserable接口,可以添加IEventListener,使用内部类可以构建类似于委托的概念

  1. 请解释ASP.NETbutton  linkbutton     imagebutton     hyperlink这四个控件之间的功能区别?

Button是按钮控件,具有按钮所有的属性和事件方法,在客户端被渲染为表单元素提交按钮。

Linkbutton是链接按钮,用于创建超链接样式的按钮。该控件的外观与 HyperLink 控件相同,但其功能与 Button 控件一样。它的主要作用是就是在ASP.NET页面中显示一个超链接。当点击链接时,页面就会往服务器端传递信息,并且在服务器端来处理相应的事件。在客户端被渲染为超链接以及一段用于提交数据的JS代码。

ImageButton 是图片按钮,它以一张图片来代替按钮,来执行按钮的功能,显示为图片,具有按钮的所有功能,在客户端被渲染为表单元素图片按钮

Hyperlink是超链接控件,用于创建超链接,点击超链接可以使用户转移到同一页面的不同部分或另一个页面.不具有按钮的功能。

  1. override与重载的区别

Override:方法重写子类对父类中的方法进行重新实现,要求,父类与子类之间、方法名和参数类型,数量,顺序一致。在C#允许子类对父类的抽象方法或虚方法进行重写,以适应新的需求。

重载:在同一类中,存在多个具有相同方法名,而不同参数列表的方法,在调用时根据实际参数确定执行哪个重载方法。

  1. 请描述一下refout在方法参数传递上的异同点?Ref和out

ref和out

相同点

1)在实参和形参上都必须添加关键字

2)在方法中对参数的设置和改变将会被保留。

不同点

1)ref修饰的参数在方法调用前必须初始化,而out修饰的参数在方法调用时候可以不初始化。

2)在方法中out修饰的参数必须进行赋值,而ref修饰的参数不需要。

3out修饰的参数主要用于返回值ref修饰的参数主要用于修改

  1. 请指出GAC的含义

GAC:Global Assembly Cache,全局程序集缓存,它的作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。举例而言,如果没有GAC,那么势必每个WinForm程序的目录下就都要从C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705下面拷贝一份System.Windows.Forms.dll,这样显然不如都从GAC里面取用方便,也有利于Assembly的升级和版本控制。GAC中的所有的Assembly都会存放在系统目录"%winroot%\assembly下面。放在系统目录下的好处之一是可以让系统管理员通过用户权限来控制Assembly的访问。  

 

  1. 请指出.NET中所有类型的基类

.Net中所有类型的基类是System.Object

  1. 请列出C#中几种循环的方法,并指出他们的不同

for:一般用于循环次数已知的循环 

while:  一般用于循环次数未知的循环,工作原理:先判断后执行

do...while:一般用于循环次数未知的循环,工作原理:先执行一次后判断

foreach:当一个序列实现IEnumerable接口或者GetEnumerator()方法时,可以用该循环方法,一般用于遍历集合或数组更加安全 

  1. C#实现以下功能:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复

namespace Wolfy.RandomDemo

{

    class Program

    {

        static void Main(string[] args)

        {

            int[] result = GetRandom(100);

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

            {

                Console.WriteLine(result[i]);

            }

            Console.WriteLine("over:" + result.Length);

            Console.Read();

        }

        ///

        /// 获得无重复随机数组

        ///

        /// 上限n

        /// 返回随机数组

        static int[] GetRandom(int n)

        {

            //容器A和B

            int[] arryA = new int[n];

            int[] arryB = new int[n];

            //填充容器a

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

            {

                arryA[i] = i + 1;

            }

            //随机对象

            Random r = new Random();

            //最后一个元素的索引 如n=100,end=99

            int end = n - 1;

            for (int i = 0; i < n; i++)

            {

                //生成随机数 因为随机的是索引 所以从0到100取,end=100

                      //一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数,即:返回的值范围包括 minValue 但不包括 maxValue。 

                //如果 minValue 等于 maxValue,则返回 minValue

                //

                int minValue = 0;

                int maxValue = end + 1;

                int ranIndex = r.Next(minValue, maxValue);

                //把随机数放在容器B中

                arryB[i] = arryA[ranIndex];

                //用最后一个元素覆盖取出的元素

                arryA[ranIndex] = arryA[end];

                //缩减随机数生成的范围

                end--;

            }

            //返回生成的随机数组

            return arryB;

        }

    }

}

  1. 简要谈一下您对微软.NET 构架下remotingwebservice两项技术的理解以及实际中的应用。

WebService特点: 平台独立性(Platform-independent)、跨语言(只要能支持XML的语言都可以)以及穿透企业防火墙;Webservice是基于http的是无状态的;但是它的缺点也很明显,就是需要部署一台Web Server;而且速度比较慢;

.Net Remoting的特点是:用户既可以使用TCP信道进行二进制流方式通信,也可以使用HTTP信道进行SOAP格式的通信,效率相对WebService要高不少;Remoting可以用于有状态的情况;但是它的缺点也很明显,.Net Remoting只能应用于MS的.Net Framework之下。

使用场合:

如果互动双方都是支持.NET技术的环境,并且在操作系统上能提供一致的验证机制,而且很重视沟通双方作业的效率,就是.NET Remoting上场的时机。

相反的,如果沟通双方是异质环境,又或沟通的模式就是无状态的情况,持续进行的互动作业前后是没有关联的,Web Service就是理想选择了。

  1. 根据线程安全的相关知识,分析以下代码,当调用test方法时i10时是否会引起死锁?并简要说明理由。

public void test(int i)

{

   lock(this)

 {

   if (i〉10)

   {

     i--;

     test(i);

   }

 }

}

不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

  1. 根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:

namespace test

{

public delegate void OnDBOperate();

public class UserControlBase : System.Windows.Forms.UserControl

{

public event OnDBOperate OnNew;

privatevoidtoolBar_ButtonClick(object sender,System.Windows.Forms.ToolBarButtonClickEventArgs e)

{

if(e.Button.Equals(BtnNew))

{

//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。

}

}

}

}

 

  if(   OnNew   !=   null   ){

  OnNew( );

}

  1. NET Remoting 的工作原理是什么?

在Remoting中是通过通道(channel)来实现两个应用程序域之间对象的通信。首先,客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为客户端对象。这就提供一种可能性,即以服务的方式来发布服务器对象。远程对象代码可以运行在服务器上(如服务器激活的对象和客户端激活的对象),然后客户端再通过Remoting连接服务器,获得该服务对象并通过序列化在客户端运行。

  1. .NET中,配件的意思是?

配件就是Assembly(程序集),程序集由程序集清单,类型元数据,MSIL代码和资源组成。

  1. .NET中读写文件需要用到那些方法?他们的作用?

1File类:

使用场合:当读写文件大小不大,同时可以一次性进行读写操作的时候使用

使用方式:不同的方式可以读写文件类型不一样。

ReadAllBytes()  WriteAllByte():可以读写任意类型的文件

ReadAllLines()  ReadAllText():只能读写文本类型文件

2FileStream类

使用场合:当读写大文件的时候使用,它可以自定义读写的数组大小

使用方式:一个流对象只能做一个事情:如果需要读和写那么就需要创建两个流

读取:将数据读取到数组 

写入:将数组的数据再写入到文件

3StreamReader/StreamWrite类

使用场合:只能对文本文件进行读写操作

使用方式:它可以按行、按字符以及按块进行读取和写入

  1. C#中有一个double型的变量,比如10321.5122235401.21644,作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50$122235401.22而在英国则为£10 321.50和£122 235 401.22

System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");

//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");为英  货币类型decimal y = 9999999999999999999999999999m;

string str = String.Format(MyCulture,"My amount = {0:c}",y);

  1. C#usingnew这两个关键字有什么意义,请写出你所知道的意义?

using 关键字有两个主要用途:

1)作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。

2)作为语句,用于定义一个范围,在此范围的末尾将释放对象。

在 C# 中,new 关键字可用作运算符、修饰符或约束。

1)new 运算符:用于创建对象和调用构造函数。这种大家都比较熟悉,没什么好说的了。

2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。

3)new 约束:用于在泛型声明中约束可能用作类型参数的参数的类型。

  1. 在下面的例子里

  using System;

  class A

  {

  public A()

  {

   PrintFields();

  }

   public virtual void PrintFields(){}

}

  class B:A

  {

    int x=1;

    int y;

    public B()

   {

      y=-1;

     }

     public override void PrintFields()

     {

      Console.WriteLine(“x={0},y={1}”,x,y);

     }

当使用new B()创建B的实例时,产生什么输出?

创建子类对象时,先调用父类构造方法,再调用子类构造方法,当调用父类构造方法时,由于还未调用子类构造方法,因此,x=1,y=0,当调用父类构造方法时,在父类构造方法中将调用PrintFields()方法,而该方法为虚方法且被子类重写,由于目前为子类对象,因此,调用子类重写后的PrintFields()方法,故输出:X=1,Y=0。

  1. 求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m

int Num = this.TextBox1.Text.ToString() ;

int Sum = 0 ;

for (int i = 0 ; i 〈 Num + 1 ; i++)

{

if((i%2) == 1)

{

Sum += i ;

}

else

{

Sum -=i ;

}

}

System.Console.WriteLine(Sum.ToString());

System.Console.ReadLine() ;

  1. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

不是。可以用任意类型。

  1. NET中读写XML的类都归属于哪些命名空间?

答:System.Xml

  1. CLRIL分别是什么含义?

CLR:Common Language Runtime,公共语言运行时,是一套完整的、高级的虚拟机,它被设计为用来支持不同的编程语言,并支持它们之间的互操作。

IL,中间语言,也称MSIL,微软中间语言,或CIL,通用中间语言;所有.NET源代码在进行编译时都被编译成IL,IL独立于CPU的指令集,与平台无关。在应用程序运行时被即时(Just-In-TimeJIT)编译器处理成为机器码,被解释及执行。

  1. 进程与程序的区别?

(1)进程是动态的,而程序是静态的。

(2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。

(3)1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。

  1. 私有程序集与共享程序集有什么区别?

一个私有程序集通常为单个应用程序所使用,并且存储于这个应用程序所在的目录之中,或此目录下面的一个子目录中。

共享程序集通常存储在全局程序集缓存(Global Assembly Cache)之中,这是一个由.NET运行时所维护的程序集仓库。共享程序集通常是对许多应用程序都有用的代码库,比如.NET Framework类。

  1. New有几种用法

在 C# 中,new 关键字可用作运算符、修饰符或约束。

1)new 运算符:用于创建对象和调用构造函数。这种大家都比较熟悉,没什么好说的了。

2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。

3)new 约束:用于在泛型声明中约束可能用作类型参数的参数的类型。

 

  1. 接口是否可继承接口?抽象类是否可实现接口?抽象类是否可继承类?

在C#中接口可以继承接口但不是实现接口因为接口中不能存在实现的成员

抽象类与普通类无差异只是不能被实例化而已因此抽象可以实现接口也可以继承类但抽象类一般作为父类使用

  1. 什么是类和对象以及关系?

对象:一种具有状态(属性)和行为(方法)的编程实体,用于描述现实世界的某个具体事物。

:具用一系列对象共同特征和行为的通用类型。

对象和类的关系

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类,类描述了一组有相同属性和相同方法的对象。

  1. 委托回调静态方法和实例方法有何区别

当一个实例方法被调用时,需要通过实例对象来访问,绑定一个实例方法到委托必须同时让委托得到实例方法的代码段和实例对象的信息,这样在委托被回调时候.NET才能成功地执行该实例方法。委托内部的对象成员变量_target是一个指向目标实例的引用。当委托绑定静态方法时,内部的对象成员变量_target将会被设置成null,而当委托绑定实例方法时,_target将会设置成指向该实例方法所属类型的一个实例对象,当委托被执行时,该对象实例将被用来调用实例方法。

  1. 什么是链式委托

链式委托是指一个由委托串成的链表,当链表上的一个委托被回调时,所有链表上该委托的后续委托将会被顺序执行。在委托中存在内部的对象成员变量_prev,该指针指向委托链中的下一个委托。

  1. GetHashCode方法有何作用什么时候会用该方法?

GetHashCode方法就是一个判断对象是否相等的快速检查器,当把一个对象添加到一个散列表中时,会先判断这个对象是不是在其中,因为散列表是不允许出现碰撞的。在判断时,并不是直接上来就调用Equals方法,而是会先调用GetHashCode方法,计算出待添加对象的一个散列值:

如果这个散列值不命中,那就说明这个对象一定不在散列中,可以添加;

如果这个散列值命中了,那也不能说明这个对象一定在散列中,因为可能散列值冲突了,所以,要继续调用Equals方法,来看看这个散列值命中的对象,到底在不在散列表里。

  1. 委托是否可以有返回值

委托可以是带有返回值的方法但多于一个带返回值的方法被添加到委托链中时程序员需要手动的调用委托链上的每一个方法否则委托使用者将只能得到委托链上最后一个被执行方法的返回值

  1. 如何把一个Array复制到ArrayList

foreach( object o in array ){

arrayList.Add(o);

}

  1. 什么叫应用程序域?什么是受管制的代码?什么是强类型系统?

应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小

受管制的代码:unsafe:非托管代码。不经过CLR运行。

强类型系统 RTTI:类型识别系统。

  1. C#中,string str = nullstring str =““,请尽量用文字说明区别。(要点:说明详细的内存空间分配)

string str = null 是不分配内存空间,而string str = ““ 给它分配长度为空字符串的内存空间。

  1. 概述反射和序列化

反射就是为了在程序的运行过程中动态的获取类的方法和属性, 优点就是可以实现动态创建对象和编译,体现出很大的灵活性,缺点是对性能有影响。

序列化是将对象状态转换为容易传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

  1. 如何理解委托

委托是一种特殊的引用类型,允许将方法作为参数进行传递。

委托在使用过程中的一般步骤:类型定义、对象创建和方法绑定,方法调用。

委托是一种引用方法类型,一旦委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。委托可以看作是对函数的抽象,是函数的‘类’,委托的实例将代表一个具体的函数。

  1. C#中能使用指针吗,怎样使用指针?

能,我们可以使用unsafe关键词,开启不安全代码(unsafe code)开发模式直接操作内存,这样就可以使用指针了。

  1. 概述三层结构体系?

表示层(UI),业务逻辑层(BLL),数据访问层(DAL)。

  1. 列举一下你所了解的XML技术及其应用?

xml一般是用来做数据传输格式、软件配置的。可以用来做网页(xslt)、可以当作数据库、可以用于配置,用于保存静态数据类型,使用最多的是web Services和config。

  1. 值类型和引用类型的区别?

C#数据类型分为两大类:值类型(数据存放在栈stack中)和引用类型(数据存放在堆heap中,地址存放在栈stack中)。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。声明一个引用类时,只在栈中分配内存,用于存放地址,而并没有为其分配堆上的内存空间。

  1. 构造器Constructor是否可以被继承?是否可以被Override?

Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).

  1. 是否可以继承String类?

因为String类是密封类所以不可以继承string类。

  1. 当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?

取决于是否进行线程同步。如果进行了线程同步,只能一个线程进入。

  1. 用最有效的方法算出2乘以8等于几?

2<<3

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

C#是可以对内存进行直接操作的,虽然很少用到指针,但是C#是可以使用指针的,在用的时候需要在前边加unsafe。

  1. 什么是受管制的代码?

unsafe:非托管代码。不经过CLR运行。

  1. sleep() 和 wait() 有什么区别?

sleep()方法是将当前线程挂起指定的时间。

wait()释放对象上的锁并阻塞当前线程,直到它重新获取该锁。

 

  1. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 =1; s1 = s1 + 1;有错,

s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1=(short)(s1 + 1) 。short s1 = 1;s1 += 1正确。

  1. 什么是虚函数?什么是抽象函数?

虚函数:可由子类继承并重写的函数。

抽象函数:规定其非虚子类必须实现的函数,必须被重写。

  1. 什么是XML?

XML即可扩展标记语言,主要用来做数据传输格式、软件配置。

 

  1. C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?

一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质

 

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

.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。

  1. &和&&的区别

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).

  1. 用Singleton如何写设计模式

单例模式: static属性里面new ,构造函数private

public class Singleton{

//静态私有变量

private static Singleton singleton = new Singleton();

//私有构造方法

private Singleton(){

System.out.println("生成了一个实例!!!");

}

//外部类通过Singleton.getInstance()获取这个类的对象。

public static Singleton getInstance(){

return singleton;

}

}

  1. 在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?

using 引入名称空间或者使用非托管资源

new 新建实例或者隐藏父类方法

  1. String s = new String("xyz");创建了几个String Object?

两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

  1. C#中,i++与++i,有什么区别?

i++是使用完 i 之后再使 i 加一

++i是在使用 i 之前便使 i 加一

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

public class MainClass {

public static void Main(){

Console.WriteLine(Foo(30));

}

public static int Foo(int i) {

if (i <= 0) return 0;

else if(i > 0 && i <= 2) return 1;

else return Foo(i -1) + Foo(i - 2);

}

    } 

  1. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引

C#通过提供索引器,可以像处理数组一样处理对象。特别是属性,每一个元素都以一个get或set方法暴露。索引器不单能索引数字(数组下标),还能索引一些HASHMAP的字符串,所以,通常来说,C#中类的索引器通常只有一个,就是THIS,但也可以有无数个,只要你的参数列表不同就可以了索引器和返回值无关, 索引器最大的好处是使代码看上去更自然,更符合实际的思考模式。

  1. 什么是Code-Behind技术?

code-Behind技术就是代码后置,在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。

  1. int、DateTime、string是否可以为null?

int、DateTime不能,因为其为值类型,值类型不能为null,只有引用类型才能被赋值null。string可以为null。

  1. 传入某个属性的set方法的隐含参数的名称是什么?

value,它的类型和属性所声名的类型相同。

  1. string、String;int、Int32;Boolean、bool的区别

String、Int32、Boolean等都属于.Net中定义的类,而string、int、bool相当于C#中对这些类定义的别名。

  1. 不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?

String是不可变的在这段代码中,s原先指向一个String对象,内容是 "abc",然后我们将s指向"123",那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

  1. 是否可以从一个static方法内部发出对非static方法的调用?

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。

  1. 说出一些常用的类、接口,请各举5个

常用的类:StreamReader、WebClient、Dictionary、StringBuilder、SqlConnection、FileStream、File、Regex、List

常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary

  1. 如果不用VisualStudio,用哪个命令行编译C#程序?

csc.exe。

  1. 你对泛型了解吗?简单说明一下泛型的有什么好处?

泛型:“泛型”的字面意思就是广泛的类型。通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用 好处是——可以复用代码,降低耦合性,而且还提高了代码的可读性以及安全性。

  1. DateTime.Parse(myString); 这行代码有什么问题?

有问题,当myString不能满足时间格式要求的时候,会引发异常,建议使用DateTime.TryParse() 

  1. XML 与 HTML的主要区别?

1. XML是区分大小写字母的,HTML不区分。

2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略结束标记。在XML中,绝对不能省略掉结束标记。

3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。

4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

  1. 请简述结构和类的区别

1、类型不同:结构是一种值类型,而类是引用类型。

2、存储不同:结构使用栈存储,而类使用堆存储。栈的空间相对较小.但是访问效率相对较高.堆的空间相对较大.但是访问效率相对较低。

3、作用不同:类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性。

4、初始化不同:类可以在声明的时候初始化,结构不能在申明的时候初始化(不能在结构中初始化字段),否则报错。

  1. 请解释一下IClonable

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

深度复制(Deep Copy)与浅表复制(Shadow Copy)

  1. 用接口或父类作为输入的参数有什么好处?返回值如果是接口是为了什么?

接口或父类作为参数,所有继承了此接口或父类的类都可以使用,即你给此方法传参数的时候,可以把继承了这个接口或父类的类的实例传给这个方法。可以一次性传入多种字段、方法等而不用定义多个形参,接口作为返回值,返回的是实现接口的对象。

 

  1. = 和 == 的区别

= 是赋值运算符, ==是关系运算符,用于等值判断

  1. 数组有没有length()这个方法?String 有没有length()这个方法?

数组是没有length()这个方法的,有length这个属性,可以计算数组的长度。

String是有length()这个方法的,用来计算字符串的长度。

 

  1. 数组和泛型集合的区别

泛型集合只能放定义类型的元素,会自动增大,取出时不用做类型转换。

数组只能放定义类型的元素,不会自动增大,取出时不用做类型转换。

 

  1. System.Object中有什么方法?有什么用?

1.ToString():是获取对象的字符串表示的一种快捷方式

2.Finalize():允许对象在垃圾回收该对象之前尝试并执行释放资源并执行其他清理操作

3.GetType():获取当前实例的确切运行时类型

4.GetHashCode():用作特定类型的哈希函数

5.构造函数方法:主要用来在创建对象时初始化对象

  1. Linq中concat union intersect的区别

Concat  :连接两个序列。

Union  : 通过使用默认的相等比较器生成两个序列的并集。

Intersect : 通过使用默认的相等比较器对值进行比较生成两个序列的交集。

  1. 请问哈希表(hashtable)是如何存储数据的?

以哈希表的形式存储数据,数据的形式是键值对。

  1. .NET中的CTS、CLS和CLR

CLR公共语言运行库

CLS通用语言规范

CTS通用类型系统

  1. NET和C#的区别

.NET一般指.Net Framework框架,是Microsoft为开发应用程序而创建的一个具有革命意义的平台,C#运行在.NET(CLR)上的,用于创建应用程序的一种高级编程语言。

  1. 设计模式有哪些?

1.单例设计模式

2.工厂设计模式

3.代理设计模式

4.观察者设计模式

5.适配器模式

6.原型模式

  1. StringBuilder 和 String的区别?

String是不可变化的字符,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象。

StringBuilder是可以变化的字符,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充。

  1. Linq与SQL语句的执行速度哪个更快?

 SQL语句的执行速度更快

  1. C#代码编译成中间语言有什么作用?

优点:一是可以实现平台无关性,既与特定CPU无关;二是只要把.NET矿建某种语言编译成IL代码,就实现.NET矿建中语言之间的交互操作。

    IL是.NET矿建中的中间语言(Intermediate Language)的缩写。

6.2  .NET WinForm部分

  1. .NETC# or vb.net)中如何取消一个窗体的关闭?

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{

e.Cancel=true;

}

  1. .NETC# or vb.net)如何启动另一个程序?

Process.Start("cmd");

  1. .netC# or vb.net)中,Appplication.Exit()  Form.Close()有什么不同?

Appplication.Exit()是退出整个应用程序,Form.Close()是关闭其中一个form。

  1. DataGridViewDataSource可以连接什么数据源?

第一种:

DataSet ds=new DataSet ();

this.dataGridView1.DataSource=ds.Tables[索引或表名];

 

第二种:

ArrayList al = new ArrayList();

this.dataGridView1.DataSource = al;

 

第三种:

Dictionary dic = new Dictionary();

this.dataGridView1.DataSource = dic;

 

第四种:

DataView dv = new DataView();

this.dataGridView1.DataSource = dv;

6.3  .NET Web开发部分

  1. Page_Onload里面一般会写什么代码?

通过判断IsPostBack属性判断是否首次加载。在页面首次加载时,编写控件初始化代码和页面变量初始化代码

  1. 什么时候会用到cookie,session?它们的区别分别是什么?

Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

1.session 在服务器端,cookie 在客户端(浏览器)

2.session 默认被存在服务器的一个文件里(不是内存)

3.session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)

4.session 可以放在 文件、数据库、或内存中都可以。

5.用户验证这种场合一般会用 session 因此,维持一个会话的核心就是客户端的唯一标识,即 session id

  1. ASP.NETWebPage的生命周期?

初始化-》加载视图状态-》处理回发数据-》加载-》发送回发更改通知-》处理回发事件-》预呈现-》保存状态-》呈现-》处置-》卸载

  1. 页面之间传值的几种方式?

 

页面间传值: 

1.使用QueryString变量。

2.PostBackUrl()方法。

3.使用Server.Transfer方法。

应用程序范围内传值:

1.使用Cookie对象变量。

2.使用Session变量。

3.使用Application对象变量。

  1. Ajax异步交互数据。

使用AJAX实现异步刷新就是在用户“无察觉”的情况下“偷偷”访问了远程服务器进行工作,然后将结果返回后由JS提供在客户端,让用户感受好像B/S架构的程序和C/S的差不多的感觉。

  1. IIS如何进行配置

1.打开IIS管理器。

2.展开“本地计算机”-“网站”目录,选中“默认网站”节点,右键“属性”,设置主目录。

3.右键“默认网站”图标,选择“新建”-“虚拟目录”命令。IIS将启动“虚拟目录创建向导”对话框帮助我们完成创建虚拟目录的步骤。

4.单击对话框的“下一步”按钮以显示虚拟目录别名页,如HelloWorld。别名是我们用来标识该目录中的资源的名称。在VS.NET中,别名是用来指定项目位置的名称。

5.单击“下一步”按钮,以显示Web站点内容目录页。在此,输入包含此网站内容的目录的路径。

6.单击“下一步”按钮,打开虚拟目录访问权限设置页面。选中“读取”复选框和“运行脚本”复选框。

7.单击“下一步”按钮,再单击“完成”按钮创建虚拟目录并终止向导。查看IIS管理器中虚拟目录的创建结果,可以发现,默认网站中多了一个齿轮状图标的HelloWorld节点。

如果当前还不是齿轮状,右键节点,打开属性页,在虚拟目录中的应用程序设置中创建应用程序名为HelloWorld的应用程序就可以了

  1. MVC中的视图是用来干什么的?

MVC是三个单词的首字母缩写,它们是Model(模型)、View(视图)和Controller(控制)

从结构上看,可以分成三层,

1)最上面的一层,是直接面向最终用户的"视图层"(View)。它是提供给用户的操作界面,是程序的外壳。

2)最底下的一层,是核心的"数据层"(Model),也就是程序需要操作的数据或信息。

3)中间的一层,就是"控制层"(Controller),它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。

这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。

  1. asp.net状态管理技术中可用于保存与传递数据的方法的是

所谓 “状态管理”,是指使用ASP.NET中的ViewState、Cookie、Session和Application等对象实现页面数据缓存和传递的技术。

  1. postget的区别。

1. get/post均可向服务器传送页面数据。

2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

4. get传送的数据量较小不能大于2KBpost传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

5. get安全性非常低post安全性较高。但是执行效率却比Post方法好。

建议:

1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;

2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

  1. aspx页面中有一用户控件UserCtrl1,以及一web服务器控件Button1,用户控件内有uiAdd()方法用来动态添加显示效果,此页面AutoEventWireup="true",在页面page_load事件内有调用uiAdd()方法的代码,Button1点击后将触发Button1_Click事件。假设现在浏览该页面后点击了Button1,请列出页面page_load,按钮Button1_Click,用户控件uiAdd()以及用户控件的page_load的触发先后顺序。

 

1.aspx页面中的page_load

2.UserCtrl1中的page_load

3.用户控件uiAdd()

4.Button1点击后将触发Button1_Click事件

  1. 请编程遍历页面上所有TextBox 控件并给它赋值为空。

foreach (System.Windows.Forms.Control control in this.Controls)

      {

        if (control is System.Windows.Forms.TextBox)

         {

            System.Windows.Forms.TextBox tb =          (System.Windows.Forms.TextBox)control ; 

            tb.Text = String.Empty ;

         }

      }

上边的方法只是针对于桌面软件类的,如果要针对于web开发中怎么实现呢?

首先.aspx文件一定会包含一个:

只有在此标记中的代码享有和后台交换。

由此:

foreach(System.Web.UI.Control ctl in this.Form.Controls){

      if (ctl is System.Web.UI.WebControls.TextBox)

      {

            System.Web.UI.WebControls.TextBox tb = (System.Web.UI.WebControls.TextBox)ctl;

            tb.Text = string.Empty;

       }

}

 

  1. 简述WebServices

WebService 就是web服务。是微软主推的一种跨平台的分布式应用程序。他使用SOAP协议通讯,用XML封装数据,所以是跨平台的。任何客户端只要按照WebService发布的格式发送数据就都可以得到结果。

  1. Asp.net中所有的自定义用户控件都必须继承自哪个类? 

Control:所有控件的基类。

  1. .Net中,类System.Web.UI.Page 可以被继承么?

可以,每个页的cs文件中定义的类就是继承这个类的

  1. 什么情况用HTML控件,什么情况用WEB控件,并比较两者差别

Html控件:

1.Html控件就是我们通常说的Html语言标记,Html是以Input为前缀的。不能在服务器端控制。如果Html想要在服务器端控制,就加上”Runat="Server"”这句话,就构成了Html服务器控件。Html服务器控件可也运行在服务器端,能够在后台对其进行设置修改。

2.Html控件直接发送给浏览器,不灵耗费服务器资源

Web控件:

1.Web控件是构成ASP.Net服务器控件的一部分,Web控件是以Asp:为前缀的

他不像Html需要加上”Runat="Server"”才可以运行在服务器端,它本身隐身包含这句话。

2.Web控件需要通过服务器处理后译为Html控件在发送给浏览器,所以比较耗费服务器资源,并由于有VIEWSTATE,所以在会送的时候会保持控件状态(也可以不保存),也因此增加了回送信息量。

  1. 请解释ASP.NET中的数据绑定与传统数据绑定有什么区别?

ASP.NET的数据绑定:控件中数据的变化不会自动同步到数据源中,传统数据绑定可以自动同步。

  1. 如果需要在GridView控件中的某一列中添加下拉列表框并绑定数据怎么解决?

在GridView里面加入模版列。把GridView拖入以后这个控件的右上角有一个小箭头,然后选择编辑列,然后在里面添加一个模版列(TemplateField),然后点确定,关闭编辑,然后在GridView控件上点鼠标右键选择编辑模版列,在那个ItemTemplate里面拖入下拉列表控件,然后再为这个下拉列表控件选择数据源就行了!或者你可以使用代码绑定,也可以!如果是使用代码绑定的话,是在GridView的RowDataBound的时间里面,然后用e.FindControl("下拉列表的控件ID") as DropDownList 找到下拉列表控件就行了

  1. 如果出现ASP.NET中的事件不能触发可能由于什么原因造成?

如果在web窗体中使用了验证控件,那么当验证控件中的验证逻辑没有通过时一般会使事件不能触发执行。

如果使用了诸如Textchange、Checkchange、Selectedindexchanged这类事件并在

服务器端进行了事件处理,但是没有设置AutoPostBack=true属性时会使事件不能触发执行。

 

  1. 请解释转发与跳转的区别?

转发的特点:forward

1.转发地址栏路径不变

2.转发只能访问当前服务器下的资源

3.转发是一次请求,可以使用request对象来共享数据

4.请求来源:服务器内部使用,不需要加虚拟目录。

跳转(重定向)的特点:redirect (浏览器响应头:302,即重定向)

1.地址栏发生变化

2.重定向可以访问其他站点(服务器)的资源

3.重定向是两次请求。不能使用request对象来共享数据

4.请求来源不同:客户端浏览器发起,需要加虚拟目录,动态获取request.getContextPath()

  1. 请解释什么是上下文对象,在什么情况下要使用上下文对象

上下文对象HttpContext。如果需要在网页类之外的其他类中访问ASP.NET系统对象时,需要使用上下文对象。

  1. 请解释一个WEB页面中代码执行次序。

常用事件执行次序:Init(初始化) -> Load(加载) -> Event(控件事件) -> PreRender(呈现之前)

 -> UnLoad(卸载)

  1. 当发现不能读取页面上的输入的数据时很有可能是什么原因造成的?怎么解决

可能情况:

1)可能事件没有关联

2)根本就没有写读取代码

3)写错了事件

4)在Load事件中有清空代码,但没有写 if (!IsPostBack)

  1. 什么是viewstate,能否禁用?是否所用控件都可以禁用

Web页面是没有状态的,ViewState(视图状态)可用来保存Web页面在客户端和服务器端往返过程的状态

 

说简单点ViewState只不过是Hidden控件,加上微软写上的一些代码而已

 

可以禁用,有三种方法:

1)禁用单个控件:控件.EnableViewState = false。

2)禁用单个页面:在@Page指令中设置这个属性以达到页面级禁用ViewState的目的。

3)禁用整个程序:修改Web.config中相应元素的属性即可。

最后,禁用服务器全局的ViewState,修改.Net Framework安装目录下的machine.config即可。

  1. 请解释ASP.NET中的web页面与其隐藏类之间的关系?

ASP.NET中的页面由两部分组成,页面显示(aspx文件)和代码逻辑(aspx.cs文件)通过Page指令联系在一起,如下:所以关系为:Web页面会继承隐藏类。

  1. WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?

可以,其调用过程大致如下:用户使用WEB控件或者html服务端控件,控件的调用方法事件被激发,于是服务器开始自动寻找所匹配的方法代码,当在客户端找到后解释执行客户端的方法代码,完毕后继续返回服务器执行剩余代码.

  1. WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。

在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件自动传回是当我们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端

只有通过自动传回才能实现服务端事件的机制,如果没有自动回传机制就只能调用客户端事件,而不能调用服务端事件

  1. 请解释ASP.NET中以什么方式进行数据验证?

.net中提供了几个数据验证控件,可以在服务器端或者客户端进行验证。

  1. 什么是WEB控件?使用WEB控件有那些优势?

WEB控件是能拖放在WEB页面上的控件

WEB控件分为:内部控件, 列表控件, 复杂控件, 验证控件

WEB控件优势:Web 控件是对象

–与对象一样,Web 控件拥有方法和属性,并且响应事件

–一旦将 Web 控件包括在 Web 页中,就可以设置其属性并调用其方法

–可以为 Web 控件编写服务器端代码以响应在客户端上发生的事件

  1. 概述.NET里对 Remoting  Webservice 两项技术的理解和实际中的应用。

1、Remoting可以灵活的定义其所基于的协议,如果定义为HTTP,则与Web Service就没有什么区别了,一般都喜欢定义为TCP,这样比Web Service稍为高效一些

2、Remoting不是标准,而Web Service是标准;

3、Remoting一般需要通过一个WinForm或是Windows服务进行启动,而Web Service则需要IIS进行启动。

4、在VS.net开发环境中,专门对Web Service的调用进行了封装,用起来比Remoting方便

  1. 常用的调用Webservice方法有哪些?

1.使用WSDL.exe命令行工具。

2.使用VS.NET中的Add Web Reference菜单选项

  1. 什么是SOAP,有哪些应用。

SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。

SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。

  1. 解释一下UDDIWSDL的意义及其作用。

什么是UDDI?

UDDI 是一个独立于平台的框架,用于通过使用 Internet 来描述服务,发现企业,并对企业服务进行集成。具体是:

1、UDDI 指的是通用描述、发现与集成服务

2、UDDI 是一种用于存储有关 web services 的信息的目录。

3、UDDI 是一种由 WSDL 描述的 web services 界面的目录。

4、UDDI 经由 SOAP 进行通信

5、UDDI 被构建入了微软的 .NET 平台

什么是WSDL?

WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。

WSDL的作用

Web services 可把您的应用程序转换为 web 应用程序。通过使用 XML,可以在应用程序间传送消息。最大的意义就是不管你使用什么的语言编写的WEB应用,只要有WSDL,便可以自由的调用!

  1. Session有什么重大BUG,微软提出了什么方法加以解决??

是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate   server或SQL   Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。

  1.  请解释ASP.NET中的Web页面与其隐藏类之间的关系?

就是asp的升级版,asp之前是C#代码与html在一起写的,美工人员不容易维护,因为他看不懂C#代码,所以才有了asp.net这样的有了隐藏类,html与代码进行了分离,但这是紧耦合,一但没有了隐藏类,就会报错,MVC就解决了这一现象,视图、控制器分离

  1. WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。

每个asp.net页有一个对应的.aspx页和一个对应的aspx.cs可编译逻辑,每个asp.net 控件有相应的事件处理,他们是由属性中的DataBinding绑定相应的事件处理。在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件自动传回是当我们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端

只有通过自动传回才能实现服务端事件的机制,如果没有自动回传机制就只能调用客户端事件,而不能调用服务端事件

  1. 什么是ASP.NET中的用户控件

用户控件就是扩展名为.ascx的特殊页面,它不能像.aspx页面一样直接访问,用户控件用以在同一应用程序中实现功能和外观的重用。

  1. ASP.NETASP相比,主要有哪些进步?

区别:

ASP是解释性编程框架,而ASP.NET是编译性框架;

ASP.NET无论是从执行效率和安全上都远远超过ASP;

ASP.NET实现了代码分离,让代码管理更加直观。

  1. 什么是Code-Behind技术。

代码后置, 即HTML代码与C#代码写在不同的文件中,使得代码更整洁和便于维护.

  1. ASP.NET的身份验证方式有哪些?分别是什么原理?

Windows: 使用IIS验证方式  Forms: 使用基于窗体的验证方式  Passport: 采用Passport cookie验证模式  None: 不采用任何验证方式

  1. 在.Net中,类System.Web.UI.Page 可以被继承么?

可以。

  1. <%# %> 和 <% %> 有什么区别?

<%# %>表示绑定的数据源,<% %>是服务器端代码块

 

  1. session喜欢丢值且占内存,Cookis不安全,请问用什么办法代替这两种原始的方法

使用用户配置Profile,或者自行编程存储在数据库中。

  1. 动态创建的控件PostBack后是否可以保存下来,为什么?

不可以,因为页面的每一次生命周期页面对象都是重新实例化的。

  1. .O/R Mapping 的原理 

利用反射,配置将对象和数据库表映射。

  1. Request与Response的下面有什么方法和作用

Request类:1.getSession():获取Session对象

2.getCookies():获取所有的Cookie,返回一个Cookie数组

3.getMethod():获取请求类型

Response类:1.setHeader():设置消息头

2.addCookie():添加Cookie

3.setContentType():告知浏览器数据类型

  1. <%%>与<%#%>的区别

前者是服务器端代码块,后者表示绑定的数据源

  1. MVC与webform相比有什么优势?

MVC的优点:

1.通过把项目分成Model、View和Controller,使得复杂项目更加容易维护,减少项目之间的耦合。

2.没有服务器表单控件,可以更方便的控制应用程序的行为

3.应用程序通过Controller来控制程序请求,并提供了原生的UrlRouting功能来重写Url。

4.使Web程序对单元测试的支持更加出色

5.强类型view实现,更安全,更高效。

  1. webapi与webservice的区别?

答:webapi用的是http协议,webservice用的是soap协议

webapi无状态,相对webservice更轻量级。webapi支持如get,post等http操作

  1. MVC有多少种不同类型的结果类型,请详细描述。

有12种,最主要的是ActionResult类,它是一个基础类,它有11个子类型。

ViewResult  - 给响应流渲染指定的视图

PartialViewResult  - 给响应流渲染指定的局部视图

EmptyResult  - 返回空的响应结果。

RedirectResult  - 执行一个HTTP转向到指定的URL。

RedirectToRouteResult  -执行一个HTTP转向到一个URL,这个URL由基于路由数据的路由引擎来决定

JsonResult  - 序列化一个ViewData对像到JSON格式。

JavaScriptResult  - 返回一段Javascript代码,它可以在客户端执行。

ContentResult  - 写内容到响应流,不需要视图支持。

FileContentResult  - 返回一个文件到客户端。

FileStreamResult  - 返回一个文件到客户端,它提供的是流。

FilePathResult  - 返回一个文件到客户端。

  1. mvc过滤器你使用过吗?用来做什么?

ActionFilter(方法过滤器):接口名为[IActionFilter],在控制器方法调用前/后执行

ResultFilter(结果过滤器):接口名为[IResultFilter],在控制器方法调用完,跳转至view页面前/后执行

AuthorizationFilter(授权过滤器):接口名为[IAuthorizationFilter],所有过滤器中最先执行的

ExceptionFilter(异常处理过滤器):接口名为[IExceptionFilter],在控制器方法抛出异常时执行

 

6.4  数据访问部分

  1. 连接数据库的字符串应该写在哪儿?

写在配置文件中。 

  1. 解释ADO.NET中的使用Connetion对象的Close()Dispose()的区别。

Close()表示关闭连接,可以重新通过Open()打开;Dispose()表示销毁,销毁后的链接不能再打开,因为ConnectionString清空了,但此时Connection对象还在。

如果程序中没有向连接池发出请求说要Connection对象,Connection对象便会销毁,这也是连接池存在的意义。

  1. DataReaderDataSet的异同

DataReader和DataSet最大的区别在于,DataReader使用时始终占用Connection对象,而且DataReader是只进的..你读了第一条后就不能再去读取第一条了..

DataSet则是将数据一次性加载在内存中.抛弃数据库连接,读取完毕即放弃数据库连接,比较消耗内存,但是却比DataReader要灵活,可以动态的添加行,列,数据.对数据库进行回传更新操作

  1. 从数据库读取记录,你可能用到的方法有哪些

通常有两种方式 SqlDataReader(非断开式连接) 和SqlDataAdapter|DataSet(断开式连接)方式。

  1. ADO.NET相对于ADO等主要有什么改进?

 

ADO.NET不依赖于ole db提供程序,而是使用.net托管提供的程序;

ADO.NET不使用com

ADO.NET不再支持动态游标和服务器端游 

ADO.NET可以断开connection而保留当前数据集可用 

ADO.NET强类型转换 

ADO.NET xml支持异同

  1. 概述O/R mapping ORM)及其原理

ORM,Object-Relationl Mapping即为对象-关系映射。它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。

原理主要是利用反射等技术手段,自动生成SQL,将业务对象持久化到关系数据库中。

  1. ADO.NET中常用的对象有哪些?分别描述一下。

 

DataSet对象:数据集,表示内存中数据的缓存,可以把它想像成一个临时的数据库,它里可以存多个表(DataTable),而且是断开式的,不用每进行一次操作就对数据库进行更新,从而提高了效率。 

DataReader对象:读取器,它与DataSet最大的不同是有连接式的,每次对数据库进行存取都会影响到数据库。 

Connection对象:连接池,用于连接数据库的对象,表示到数据源的一个唯一的连接。 

Command对象:命令对象,表示要对数据库执行的一个SQL语句或一个存储过程。 

DataAdapter对象:适配器,该对象是与DataSet配合使用的对象,用于把表填充到DataSet,和更新DataSet等。

  1. 对数据的并发采用什么办法进行处理较好。

可以控制连接池的连接数量,条件好的话可以用负载平衡

  1. 编写数据库查询分页SQL。

假设每页显示X条,用pagesize表示;当前要显示第X页,用currentPage表示;

SQLServer中:select top pagesize * from tablename

where id not in (select top (currentPage-1)*pagesize id from tablename)

select top pagesize * from

(select ROW_NUMBER() over (order by id asc) as rownumber, * from (select * from tablename) as oo) as o

where rownumber>(currentPage-1)*pagesize

mysql中select * from tablename limit (currentPage-1)*pagesize,pagesize

Oracle中select *  from (select rownum rn,t.* from tablename ) t

where t.rn>(currentPage-1)*pagesezie and t.rn<=currentPage*pagesezie

 

五、 集群与分布式

  • 什么是Zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper包含一个简单的原语集,提供Java和C的接口。

 

  • 写出你对zookeeper的理解

随着大数据的快速发展,多机器的协调工作,避免主要机器单点故障的问题,于是就引入管理机器的一个软件,他就是zookeeper来协助机器正常的运行。

     Zookeeper有两个角色分别是leader与follower ,其中leader是主节点,其他的是副节点,在安装配置上一定要注意配置奇数个的机器上,便于zookeeper快速切换选举其他的机器。

在其他的软件执行任务时在zookeeper注册时会在zookeeper下生成相对应的目录,以便zookeeper去管理机器。

 

  • zookeeper 的搭建过程

主要是配置文件zoo.cfg 配置dataDir 的路径一句dataLogDir 的路径以及myid的配置以及server的配置,心跳端口与选举端口。

 

  • 简述高可用.

高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响。 停止服务的原因可能由于网卡、路由器、机房、CPU负载过高、内存溢出、自然灾害等不可预期的原因导致,在很多时候也称单点问题。


6.6  其他部分

  1. 堆和栈的区别

 

数据结构的堆和栈 :

1. 栈是一种可以实现“先进后出”(或者称为“后进先出”)的存储结构。

2. 堆则是一种经过排序的树形数据结构,常用来实现优先队列等

内存分配中的堆和栈

1. 栈空间的内存是由系统自动分配,一般存放局部变量,比如对象的地址等值,不需要程序员对这块内存进行管理

2. 堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存。

 

  1. 请谈谈对正则表达式的看法?

正则表达式是一种字符规则。它是用来匹配字符串的。

打个比方,某警官学院要招生,要求:身高170以上,体重:70以上,性别:男性。。。。

这些条件就是一种规则,通过这个规则,该警官学院就可以招到符合要求的一批学生。

正则表达式与上面这种规则一样,只不过它不是用来找人的,而是在程序里面用来找字符串的。

在编程的时候,我们要从一个字符串里找出特定的部分,就可以用这种规则来匹配。

  1. UDP连接和TCP连接的异同。

都可以实现远程通信,主要区别在于TCP需要保持连接而UDP不需要,因此UDP具有更高的效率和更少的资源占用,而TCP传输数据更加可靠.

  1. 什么叫做SQL注入,如何防止?请举例说明。

利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

防止SQL注入:

1、对输入内容进行过滤,去掉有可能的威胁

2、对于用来执行查询的数据库帐户,限制其权限。

3、在查询语句中使用参数。

4、用存储过程来执行所有的查询。

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

  1. 请简述一下用Socket进行同步通讯编程的详细步骤

 

1.创建socket

2.确定本地计算机端点(ip和端口号)

3.socket绑定端点

4.socket.receive(); 接收数据

5.socket.send();发送数据

6.socket.close();关闭socket

  1. float f=-123.567F;int i=(int)f;i的值现在是

-123。

  1. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

 

int[] intArr=new int[100];

ArrayList myList=new ArrayList();

Random rnd=new Random();

while(myList.Count<100)

{

int num=rnd.Next(1,101);

if(!myList.Contains(num))

myList.Add(num);

}

for(int i=0;i<100;i++)

intArr[i]=(int)myList[i];

 

  1. 编程实现冒泡排序。

 

 int [] array = new int [*] ;

 int temp = 0 ;

 for (int i = 0 ; i < array.Length - 1 ; i++)

 {

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

  {

   if (array[j] > array[j+1])

   {

    temp = array[j] ;

    array[j] = array[j+1] ;

    array[j+1] = temp ;

   }

  }

  1. 分层式结构究竟其优势何在?

1、开发人员可以只关注整个结构中的其中某一层;

2、可以很容易的用新的实现来替换原有层次的实现;

3、可以降低层与层之间的依赖;

4、有利于标准化;

5、利于各层逻辑的复用。

概括来说,分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用、标准定义。

  1. 分层式结构也不可避免具有一些缺陷

1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。

2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。

  1. 请解释一下.NET多层应用程序中层与层之间以哪几种方式进行数据传递。并解释你自己的项目中采用哪种方式进行。

三层架构一般指的是界面层,业务层,数据层。

界面层就是系统的操作界面,和用户直接交互的地方。

业务层又称为逻辑层,英文名称是Business Logic Layer,简称BLL,是执行业务逻辑的地方数据层也称为数据访问层,英文名称是Database Access Layer,简称DAL,这里是直接和数据库进行交互的地方,也是整个系统里唯一允许访问数据库的地方。

除此之外,还有一个业务实体层,这个层比较特殊,就是定义实体类的地方,有些人把这个层归属业务层,有些人把这个独立出来,变成一个公共层。

各个层次之间的访问关系:

界面层只能单向访问业务逻辑层,业务逻辑层只能单向访问数据层,这三层都可以访问公共模块(公共层)。

  1. 对三层架构的理解。

答: 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了”高内聚,低耦合”的思想。

  1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。

  2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

  3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。

  1. MVC与三层架构比最主要的优势是什么?

三层是:  UI 界面层     

             BLL 业务逻辑层  

DAL数据访问层

(特殊的Model实体层)

MVC是:

                   M  Model(模型层)      业务逻辑以及数据库的交互               

                   V  View(视图层)         显示数据和提交数据

        C  Controller(控制器)  负责从视图读取数据,控制用户输入,并向模型发送数据。 

两者的区别

                 三层的 UI    =    MVC的 View

                  三层的 Model+ BLL+DAL =    MVC的 Model

MVC优点

易于进行单元测试

易于进行测试驱动开发

低耦合性、高重用性、可适用性

较低的生命周期成本

快速的部署

可维护性

有利于软件工程化管理

MVC缺点

内部结构复杂

  1. MVC的生命周期是怎样的?

 

  1. Request 请求到来
  2. IIS 根据请求特征将处理权移交给 ASP.NET
  3. UrlRoutingModule将当前请求在 Route Table中进行匹配
  4. UrlRoutingModule在RouteCollection中查找Request匹配的RouteHandler,默认是MvcRouteHandler MvcRouteHandler 创建 MvcHandler实例.
  5. MvcHandler执行 ProcessRequest.
  6. MvcHandler 使用 IControllerFactory 获得实现了IController接口的实例,找到对应的HomeController
  7. 根据Request触发HomeController的Index方法
  8. Index将执行结果存放在ViewData
  9. HomeController的Index方法返回 ActionResult
  10. Views/Home/Index.aspx将 ViewData呈现在页面上
  11. Index.aspx执行ProcessRequest方法
  12. Index.aspx执行Render方法 输出到客户端
  1. 启用一个线程是用run()还是start()

start()

 

 

你可能感兴趣的:(面试题,.net)