代码改变世界

软件开发asp.net面试题收集(二)

2010-06-28 20:02  elivsit  阅读(365)  评论(0编辑  收藏  举报

图片

 

1 : ASP。NET与ASP相比,主要有哪些进步?

答 asp.net可以使用强类型语言, 页面是编译,执行速度快, 增加安全性和可靠性,通过继承机制来支持代码的重用,提供声明性服务器控件减少代码行数.

   Asp需要解释,执行速度慢,重用代码不方便,没有调试机制

ASP.NET实现了面向对象编程,预编译的服务器端代码而不像ASP那样解释执行提高了性能,代码分离易于管理,可订制和扩展性,功能强大的开发工作,更好的安全机制。

2.你觉得ASP.NET 2.0(VS2005)和你以前使用的开发工具(.Net 1.0或其他)有什么最大的区别?你在以前的平台上使用的哪些开发思想(pattern / architecture)可以移植到ASP.NET 2.0上 (或者已经内嵌在ASP.NET 2.0中)

   答:1 ASP.NET 2.0 把一些代码进行了封装打包,所以相比1.0相同功能减少了很多代码.

    2 同时支持代码分离和页面嵌入服务器端代码两种模式,以前1.0版本,.NET提示帮助只有在分离的代码文件,无 法 在页面嵌入服务器端代码获得帮助提示,

    3 代码和设计界面切换的时候,2.0支持光标定位.这个我比较喜欢

    4 在绑定数据,做表的分页.UPDATE,DELETE,等操作都可以可视化操作,方便了初学者

    5 在ASP.NET中增加了40多个新的控件,减少了工作量

3.概述三层结构体系       答: web/business/dataaccess  表示层(USL),业务逻辑层(BLL),数据访问层(DAL)

4. 在.net(C# or vb.net)中如何获得当前窗体或控件的句柄,特别是控件本身的句柄(请列举)。    答: this(C#) Me(vb.net).

5.什么是WSE?目前最新的版本是多少?    答:WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,目前最新版本2.0。

6.在.Net中,类System.Web.UI.Page 可以 被继承

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

2) 为什么不提倡catch(Exception)

答:try..catch在出现异常的时候影响性能; 应该捕获更具体得异常,比如IOExeception,OutOfMemoryException等

3)catch(Exception e){throw e;}和catch(Exception e){throw;}的区别

将发生的异常对象抛出,另一个只是抛出异常,并没有抛出原异常对象)

4)error和exception区别:

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

8.c#中的三元运算符是 ?:

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

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

10.&和&&的区别。            

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

11:请指出.net中所有类型/對象的基类是(  System.object ).

12.在Asp.net中所有的自定义用户控件都必须继承自(Control);

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

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

//GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。

15.当整数a赋值给一个object对像时,整数a将会被?    

答:装箱。

装箱(boxing)是将值类型的数据转化成引用类型,int i=3; object o = i ;便是装箱过程。

而拆箱(unboxing)是将引用类型数据转换值类型,比如int j = (int)o;属于拆箱

16.什么是ASP.net中的用户控件

答:用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整.

17: ASP。NET中共有几种类型的控件?各有什么区别?  

答       Html    控件    传统的html标记                        

          Web      控件      可以回传数据,事件驱动  

         自定义    控件    在原有控件的基础上增加功能

         复合控件          多个子控件复合成一个新的控件

18:什么是WEB控件?使用WEB控件有那些优势?  

答 web控件就是可以在服务器执行的控件,优势在于可以回传数据,带有事件驱动

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

答: 通过实现IPostBack这个接口来执行事件。自动回传就是AutoPostBack,使用自动回传可以监视客户端变化情况并将这种改变返回到服务器端 

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

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

20.大概描述一下ASP。NET服务器控件的生命周期

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

21.ASP.net的身份验证方式有哪些

答:Windows 身份验证提供程序:提供有关如何将 Windows 身份验证与 Microsoft Internet 信息服务 (IIS) 身份验证结合使用来确保 ASP.NET 应用程序安全的信息。

Forms(窗体用帐户)身份验证提供程序 :

提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。

Passport(密钥)  身份验证提供程序 :提供有关由 Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置

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

答:attribute:自定义属性的基类;property :类中的属性

23.向服务器发送请求有几种方式?    答:get,post。get一般为链接方式,post一般为按钮方式。

24.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令 和语句 new 创建实例 new 隐藏基类中方法。

答:using 引入名称空间或者使用非托管资源。 new 新建实例或者隐藏父类方法

Using 引入一个名子空间,或在使用了一个对像后自动调用其IDespose,New 实例化一个对像,或修饰一个方法,表此方法完全重写此方法

new有几种用法:(1)new Class();        

(2)覆盖方法public new XXXX(){} 

(3)new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。

25.(1)列举ASP.NET 页面之间传递值的几种方式。

答. QueryString、

使用Server.Transfer、

session(viewstate) 简单,但易丢失、

application 全局、

cookie 简单,但可能不支持,可能被伪造、

url参数简单,显示于地址栏,长度有限、数据库稳定,安全,但性能相对弱

(2)如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?

答 : QueryString、FormsAuthentication、 this.Server.Transfer

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

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

27. Collection和Collections的区别  

答:Collection是集合类的上级接口,

Collections是针对集合类的一个帮助类,它提供一系列静态方法来实现对各种集合的搜索,排序,线程安全化操作。

28.List, Set, Map是否继承自Collection接口?     

答:List,Set是Map不是

29:请列出c#中几种循环的方法,并指出他们的不同         

答:  FOR   WHILE     foreach   do while

30.能用foreach遍历访问的对象需要实现(System.Collections.IEnumerable) 接口或声明 ( GetEnumerator)方法的类型。

31. 请解释web.config文件中的重要节点

appSettings包含自定义应用程序设置。 

system.web 系统配置   

compilation动态调试编译设置  

customErrors自定义错误信息设置       

authentication身份验证,此节设置应用程序的身份验证策略。    

authorization授权, 此节设置应用程序的授权策略

32. C#中的委托是什么?事件是不是一种委托?    委托声明的关键字是(delegate)

 答:委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 事件是一种委托,是一种特殊的委托。

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

 答:可以用任意类型。

34.在.net中,配件的意思是?      

 答:程序集。(中间语言,源数据,资源,装配清单)

35.System.String 和System.StringBuilder有什么区别?

System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法。

36.C#可否对内存进行直接的操作?

答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员 不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法

37.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路

 答:根据点击的列头,包该列的名称取出,按照该列名排序后,再绑定到ListView中。

38.启动一个线程是用run()还是start()?

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

39.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对像equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

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

答:sleep()方法是将当前线程挂起指定的时间。wait()释放对象上的锁并阻塞当前线程,直到它重新获取该锁。

41.(1) DateTime是否可以为null? 不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null

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

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

42. PDB是什么东西? 在调试中它应该放在哪里?

PDB是用于保存调试和项目状态信息的文件,在debug的时候将产生pdb文件,调试的时候应该放在和对应应用程序集相同目录。

43. using() 语法有用吗?什么是IDisposable(NET中用于释放对象资源的接口)?

有用,实现了IDisposiable的类在using中创建,using结束后会自定调用该对象的Dispose方法,释放资源。

44.Debug.Write和Trace.Write有什么不同?何时应该使用哪一个?

Debug.Write是调试的时候向跟踪窗口输出信息。当编译模式为debug的时候才有效,为release的时候Debug.Write在编译的时候会忽略,而Trace则是在debug和release两种模式下均可以向跟踪窗口输出信息。

45.什么时候使用override?什么时候使用new? 什么叫shadowing?

重写父类的方法的时候用override以实现多态,如果父类中的方法不是virtual的也不是abstract的才使用new,shadowing不懂

46.解释virtual、sealed、override和abstract的区别

virtual申明虚方法的关键字,说明该方法可以被重写,

sealed说明该类不可被继承,

override重写基类的方法,

abstract申明抽象类和抽象方法的关键字,抽象方法不提供实现,由子类实现,抽象类不可实例化。

47.Foo.Bar,Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d解释这个字符串每个部分的重要性和作用:

程序集的名字、版本、Culture不知道,公钥,这些用于GAC中申明一个唯一的程序集

48.NUnit是通过什么机制获知需要测试哪些方法的?

反射,为测试方法加了Attribute

 

 

1.写一个HTML页面,实现以下功能,左键点击页面时显示“您好”,右键点击时显示“禁止右键”。并在2分钟后自动关闭页面。

答:<script>  setTimeout('window.close();',2000);

function show()

{

  if (window.event.button == 1)   {  alert("左"); }

  else if (window.event.button == 2) {   alert("右"); }

}  </script>

<body  onmousedown="show();">

23. 一列数的规则如下: 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);                   }

   }

3.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?

foreach (Control control in this.Controls)

{

if (control is TextBox) { TextBox tb = (TextBox)control ; tb.Text = String.Empty ;}

}

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

int [] array = new int [*] ;      int temp = 0 ;

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

{

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

  {

     if (array[j] < array[i])

     {

     temp = array[i] ;

     array[i] = array[j] ;

     array[j] = temp ;

    }

  }

}

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

答:

int sum=0;

bool flag=true;

for(int i=1;i<=m;i++)

{

   if(flag)

      sum+=i;

   else

      sum-=i;

   flag=!flag;

}

return sum;

6.在下面的例子里

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

另:

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=1,y=2

­

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

public void test(int i)

{

  lock(this)

{

   if (i>10)

   {

     i--;

     test(i);

   }

  }

}

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

8.给定以下XML文件,完成算法流程图。

<File System>

  < DriverC >

    <Dir DirName=”MSDOS622”>

      <File FileName =” Command.com” ></File>

    </Dir>

    <File FileName =”MSDOS.SYS” ></File>

    <File FileName =” IO.SYS” ></File>

  </DriverC>

</FileSystem>

请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。

答:图就不画了,直接把程序写出来:

Public void DomDepthFirst(XmlNode currentNode)

{

    XmlNode node=currentNode.FirstChild;

    while(node!=null)

    {

          DomDepthFirst(node);

          node=node.NextSibling;

    }

     if(node.Name=="File")

     {

          Console.Write(((XmlElement)node).GetAttribute("FileName")+"\r\n");

     }

}

另解:

void FindFile( Directory d )

    FileOrFolders = d.GetFileOrFolders(); 

    foreach( FileOrFolder fof in FileOrFolders )  

    { 

      if( fof is File )  

      You Found a file; 

      else if ( fof is Directory )  

      FindFile( fof ); 

     } 

}

9.分析以下代码,完成填空 

string strTmp = "abcdefg某某某"; 

int i= System.Text.Encoding.Default.GetBytes(strTmp).Length; //取得含漢字的字串的,真實長度。

int j= strTmp.Length; 

以上代码执行完后,i= j= 

答:i=13,j=10

10.产生一个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);    //取得1到101之間的隨機數

if(!myList.Contains(num))

myList.Add(num);

}

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

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

11.下面这段代码输出什么?为什么?

int i=5;    int j=5;

if (Object.ReferenceEquals(i,j))

Console.WriteLine("Equal");       //Object.ReferenceEquals确定指定的 Object 实例是否是相同的实例。

else   

Console.WriteLine("Not Equal");    答:不相等,因为比较的是对像

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

答:利用sql语言漏洞获得合法身份登陆系统。如身份验证的程序设计成:

SqlCommand com=new SqlCommand("Select * from users where username='"+t_name.text+"' and pwd='"+t_pwd.text+"'");

object obj=com.ExcuteScale();

if(obj!=null)  {    //通过验证  }

这段代码容易被sql注入。如用户在t_name中随便输入,在t_pwd中输入1' and 1='1  就可以进入系统了。

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

using System;

class A { public virtual void F() { Console.WriteLine("A.F"); } }

abstract class B:A { public abstract override void F();  //答:abstract override 是不可以一起修饰. } // new public abstract void F();

16.下面这段代码有错误么?

switch (i){

      case():                             答://case()条件不能为空

            CaseZero();

            break;

      case 1:

            CaseOne();

            break;

      case 2:

           dufault;                        答://wrong,格式不正确

           CaseTwo();

           break;

}

15.分析以下代码。

public static void test(string ConnectString)

{

     System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();

     conn.ConnectionString = ConnectString;

     try { conn.Open(); ……. }

     catch(Exception Ex) { MessageBox.Show(Ex.ToString()); }

     finally { if (!conn.State.Equals(ConnectionState.Closed)) conn.Close(); }

}

请问 以上代码可以正确使用连接池吗?

答:如果传入的connectionString是一模一样的话,可以正确使用连接池。不过一模一样的意思是,连字符的空格数,顺序完全一致。

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

答:  System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");// en-GB为英国货币类型

     decimal y = 999999;

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

17.写出程序的输出结果。(10分)

public abstract class Base

{

    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

  B

  A.Fun()

18.写一个函数,将字符串“How are you Kevin”转置为 “Kevin you are How”

代码测试

string Foo()

{

    string str = "How are you kevin";

    string ret = string.Empty;

    string[] words = str.Split(' ');

    for (int i = words.Length-1; i >= 0; i--)

    {

        ret += words[i] + " ";

    }

    return ret;

}

­


 

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

答:很有可能是在Page_Load中数据处理时没有进行Page的IsPostBack属性判断

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

答:Viewstate是保存状态的一种机制,EnableViewState属性设置为false即可禁用

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

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

4.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。 

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

5.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

答:会执行,在return前执行。

6.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正确。

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

答:数组和string都没有Length()方法,只有Length属性。

8.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.    

答:string inputStr=" xx xx ";     inputStr = Regex.Replace(inputStr.Trim(), @"\s+", " ");

10.Overloaded的方法是否可以改变返回值的类型?     答:Overloaded的方法是可以改变返回值的类型。

11.public static const int A=1;这段代码有错误么?是什么?    答:const不能用static修饰。

12.在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?  

   答:一个是退出整个应用程序,一个是关闭其中一个form

13.在.net(C# or vb.net)中如何取消一个窗体的关闭

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)       {    e.Cancel=true;     }

14.如何把一个array复制到arrayList里:  

foreach( object o in array )arrayList.Add(o);

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

16 Assembly.Load("foo.dll"); 这句话是否正确?

错误,正确的应该是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll");

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

 

 

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

2.软件开发过程一般有几个阶段?每个阶段的作用?         

答:需求分析,架构设计,代码编写,QA,部署

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

答:前者只管传,不管数据到不到,无须建立连接.后者保证传输的数据准确,须要连结.

4:类成员有( )种可访问形式          

答 可访问性:public ,protected ,private,internal

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

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

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

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

internal: 在同一命名空间内可以访问。

protected internal 访问仅限于从包含类派生的当前程序集或类型。

6:用sealed修饰的类有什么特点

答:sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。密封类不能同时为抽象类。

       sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。

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

答:转发就是服务端的跳转A页面提交数据到B页面,B页面进行处理然后从服务端跳转到其它页面。跳转就是指客户端的跳转

8.(1)override与重载的区别; (2)什么叫应用程序域; (3)CTS、CLS、CLR分别作何解释; (4)GAC的含义; (5)什么是装箱和拆箱; (6)什么是受管制的代码; (7)什么是强类型系统;(8)GC是什么, 为什么要有GC; (9)什么是反射?

答 :(1) override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。

         override 是进行基类中函数的重写。为了适应需要。

重载提供了对一个方法签名的不同参数调用的实现。覆写提供了子类中改变父类方法行为的实现。

a)被virtual修饰的方法可以被子类覆写。

b)非静态的方法  不能覆写成静态方法,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。

c)不可以覆写私有的虚方法,甚至子类中无法访问父类中的私有方法。

d)能够阻止某一个类被其他类继承么?   可以,使用关键字sealed。

e)能够实现允许某个类被继承,但不允许其中的某个方法被覆写么?   可以,标记这个类为public,并标记这个方法为sealed。

(2)应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。(3)CTS:通用類型系统。CLS:通用语言规范。CLR:公共语言运行库。

(4)GAC:全局程序集缓存。(5)从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。(6)unsafe:非托管代码。不经过CLR运行。

(7)RTTI:类型识别系统。  (8) GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: System.gc()  或  Runtime.getRuntime().gc() 。           (9) 反射是动态获取程序集信息

(10)什么是强类型,什么是弱类型?哪种更好些?为什么?

强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb等

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

答:结构是值类型,类是引用类型,所以传结构就是值类型的应用啦,传对象或类就是引用类型的

10.概述反射和序列化

反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性

序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。

11.(1)abstract class(抽像类)和interface(接口)有什么区别?

答:声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

    接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

   抽象类能有具体实现,而接口只定义行为规范,不能有具体实现。一个类只能继承一个父类,但能实现多个接口。

(2)C#中接口和类的异同

接口和类都是类,不同的事,接口只包含方法或属性的声明,不包含具体实现方法的代码,接口可以实现多继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法或属性。接口主要定义一种规范,统一调用方法,在大型项目中接口正发挥日益重要的作用。

(3)详述.NET里class和struct的异同

struct值传递

类与结构有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。

1)、结构是值类型;  2)、结构不支持继承;  3)、结构不能定义默认的构造函数;  4)、结构不能定义析构函数;  5)、结构不能使用初始值设置域值。

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

答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.

13.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?     

答:不能,可以实现接口

14.Static Nested Class 和 Inner Class的不同,说得越多越好

答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

15.接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)?

答:接口可以继承接口。抽像类可以实现(implements)接口,抽像类是可继承实体类,但前提是实体类必须有明确的构造函数。

16.什么是虚函数?什么是抽像函数?     

 答:虚函数:可由子类继承并重写的函数。抽像函数:规定其非虚子类必须实现的函数,必须被重写。

17.什么是XML?

答:XML即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,即可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。

18.XML 与 HTML 的主要区别

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

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

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

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

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

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

答:xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和config,soap协议.

20.HashMap和Hashtable的区别。

答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable.

21.当一个线程进入一个对象的一个synchronized(同步)方法后,其它线程是否可进入此对象的其它方法?

答:不能,一个对象的一个synchronized方法只能由一个线程访问。

22.abstract(抽象)的method(方法)是否可同时是static,是否可同时是native,是否可同时是synchronized? 

 答:都不能。

23.构造器Constructor是否可被override(重寫)?      

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

24.是否可以继承String类?      答:String类是final类故不可以继承。

25.两个对像值相同(x.equals(y) == true),但却可有不同的hash code(哈希代碼),这句话对不对?   答:不对,有相同的hash code。

26.谈谈final, finally, finalize的区别。

答:final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中 不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 final的方法也同样只能使用,不能重载

  finally-再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会 执行,然后控制就会进入 finally 块(如果有的话)。

  finalize-方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对像从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对像之前对这个对象调用的。

27.如何处理几十万条并发数据?

答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取

28.进程和线程的区别?

答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。

29.堆和栈的区别?

答:栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;

堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小

30.成员变量和成员函数前加static的作用?

答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。

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

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

答:要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!="

33.用Singleton如何写设计模式         

答:static属性里面new ,构造函数private

34.什么是Application Pool?           

答:Web应用,类似Thread Pool,提高并发性能。

35.什么是code-Behind技术。     

答:ASPX,RESX和CS三个后缀的文件,这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理.

37.常用的调用WebService的方法有哪些?

答:1.使用WSDL.exe命令行工具。     2.使用VS.NET中的Add Web Reference菜单选项

38..net Remoting 的工作原理是什么?     

答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

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

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

// remoting是.net中用来跨越machine, process, appdomain进行方法调用的技术,对于三层结构的程序,就可以使用remoting技术来构建.它是分布应用的基础技术.相当于以前的DCOM   Web  Service是一种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web Service令基于组件的开发和web的结合达到最佳,基于组件的对象模型 

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

答:SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML格式的消息。

SOAP也被称作XMLP,为两个程序交换信息提供了一种标准的工作机制。在各类机构之间通过电子方式相互协作的情况下完全有必要为此制定相应的标准。

SOAP描述了把消息捆绑为XML的工作方式。它还说明了发送消息的发送方、消息的内容和地址以及发送消息的时间。SOAP是Web Service的基本通信协议。SOAP规范还定义了怎样用XML来描述程序数据(Program Data),怎样执行RPC(Remote Procedure Call)。大多数SOAP解决方案都支持RPC-style应用程序。SOAP还支持 Document-style应用程序(SOAP消息只包含XML文本信息)。

最后SOAP规范还定义了HTTP消息是怎样传输SOAP消息的。MSMQ、SMTP、TCP/IP都可以做SOAP的传输协议。 

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

SOAP 定义了一种方法以便将 XML 消息从 A 点传送到 B 点。 为此,它提供了一种基于 XML 且具有以下特性的消息处理框架: 1) 可扩展, 2) 可通过多种底层网络协议使用, 3) 独立于编程模型。

41、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

 

 

1.簡單介紹ADO.Net和ADO主要有什么改進?

答:ADO以Recordset存储, 而ADO.NET则以DataSet表示,ADO.NET提供了数据集和数据适配器,有利于实现分布式处理,降低了对数据库服务器资源的消耗。Recordset对数据库持续连接访问ADO.NET提供对数据库断开连接

1):ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序, 

2):不使用com   

3):不在支持动态游标和服务器端游   

4):,可以断开connection而保留当前数据集可用    5:强类型转换    6:xml支持 

2..net中读写数据库需要用到那些类?他们的作用?

答:SqlConnection/OleDbConnection:建立数据库的连接;     

SqlCommand/OleDbCommand:执行数据库脚本。

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

答: Connection 对象用于在应用程序和数据库之间的连接     Command   可以检索和操纵数据库中的数据      DataAdapter对象充当DataSet和数据源之间用于检索和保存数据的桥接器     DataSet 对象从数据库检索的数据可以存储在其中能够以XML形式保存     DataReader 是查询结果的一种只进。只读的视图 不具有DataSet的任何复杂功能     所以可以加快访问和查看数据的速度不提供断开式访问

4.ADO.net中,表示数据源连接的对象是(Connection), 存储数据集的对象是(DataSet)

5.DataReader与Dataset有什么区别?

答:一个是只能向前的只读游标,一个是内存中的表。

DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..

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

6. datagrid 、datasouse可以连接什么数据源 [datase、datatable、dataview]

7. 维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么

答:尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策