面试题汇总

DotNet开发中细小知识点解疑(不断更新)
知识点解疑(不断更新)  
short   s1   =   1;   s1   =   s1   +   1;   
short   s1   =   1;   s1   +=   1;(可以正确编译)
因为S1是short型的,占2个字节,而1是int型的,占4个字节。在两个类型的值相加的时候,会发生自动类型的提升。也就是说s1+1后,其结果是int型的,而不是short型的,所以可以想想看,把4个字节的东西放在两个字节的空间里,肯定编译不通过。  
        后面的那个不会发生类型的提升,c#规范上说   e1+=e2   实际上是   e1=(T1)(e1+e2),其中T1是e1的数据类型。   s1+=1等效于   s1=(short)(s1+1),所以是正确的

1,关于ref与out的区别
      ref  参数传入时需要初始化    
      out  参数传入时不需要初始化,但是出来的时候需要保证会产生一个有效地引用
2,在堆上运行跟在栈上运行有什么区别
        类,引用型等大型对象被分配在堆上,而值类型分配在堆栈中,后者效率高。每个过程都有自己的堆栈空间,退出过程时,c#自动释放堆栈空间。堆则由垃圾收集器来管理
3,frameset  和  iframe  的区别
      frameset是框架,一个网页被划分成几个块,  每个块为不同的网页文件。iframe是内嵌网页,可以被嵌在一个页页的任何地方。一般iframe使用灵活些
4,sprintf、wsprintf、printf的区别
    sprintf用于打印ANSI字符集
    wsprintf用于打印UNICODE字符集
    printf向标准设备输出,也就是显示器STDOUT
5,Server.transfer  和response.redirect的区别
      Server.Transfer:使用服务器端方法将用户重定向到另一页。
      在此方案中,服务器只是将上下文传输到另一页。其优点是您可以共享页之间的页上下文信息。其缺点是用户的浏览器不知道在进行传输,因此不更新浏览器的历史记录。如果用户刷新此页,则可能会产生意外的结果。
      Response.Redirect:将用户从浏览器重定向到另一页。
      在此方案中,将一个命令发送到用户浏览器,使浏览器获取另一页。其优点是更新浏览器的历史记录。其缺点是此方案执行额外的往返过程,这会影响性能。
6,Page.RegisterStartupScript  和response.write  的区别
      Page.RegisterClientScriptBlock    
      脚本将会被放在紧挨“</form>”的前面。    
      Page.RegisterStartupScript    
    脚本将会被放在紧挨后几个隐藏的input的后面。    
7,class  和struct的区别
    结构是值类型,class  是引用类型。
    所有结构类型隐式地从类  System.valueType  继承。  
    对结构类型变量进行赋值意味着将创建所赋的值的一个“副本”。  
    一个结构的默认值的计算如下:将所有值类型字段设置为它们的默认值,并将所有引用类型字段设置为  null,这    样就产生了该结构的默认值。  
    使用装箱和取消装箱操作在结构类型和  object  之间进行转换。  
    对于结构,this  的意义不同。  
    在结构中,实例字段声明中不能含有变量初始值设定项。  
    在结构中不能声明无参数的实例构造函数。  
    在结构中不能声明析构函数。  

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

回答要点:说明详细的空间分配。(10分)  

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


  


2、请详述在dotnet中类(class)与结构(struct)的异同:(10分)  

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

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

namespace  test  

{  

public  delegate  void  OnDBOperate();  

public  class  UserControlBase  :  System.Windows.Forms.UserControl  

{  

public  event  OnDBOperate  OnNew;  

privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs  e)  

{  

if(e.Button.Equals(BtnNew))  

{  

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

}  

}  

}  

答:if(  OnNew  !=  null  )  

OnNew(  this,  e  );  


  


4、分析以下代码,完成填空(10分)  

string  strTmp  =  "abcdefg某某某";  

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

int  j=  strTmp.Length;  

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

答:i=13,j=10  


  


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

答:SELECT  ID  

FROM  table1  

WHERE  LastUpdateDate  =  (SELECT  MAX(LastUpdateDate)  FROM  table1)  


  


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

public  void  test(int  i)  

{      

lock(this)  

{  

if  (i>10)  

{  

i--;  

test(i);  

}  

}  

}  

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


  


7、分析以下代码。(10)  

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();  

}  

请问  

1)以上代码可以正确使用连接池吗?  

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

2)以上代码所使用的异常处理方法,是否所有在test方法内的异常都可以被捕捉并显示出来?  

答:只可以捕捉数据库连接中的异常吧.  (finally中,catch中,如果有别的可能引发异常的操作,也应该用try,catch。所以理论上并非所有异常都会被捕捉。)  


  


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

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


  


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

答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中  


  


10、给定以下XML文件,完成算法流程图。(10)  

<FileSystem>  

<  DriverC  >  

<Dir  DirName=”MSDOS622”>  

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

</Dir>  

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

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

</DriverC>  

</FileSystem>  

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

答:  

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  );  

        }  

}  

简单的说就是从根节点开始遍历找子节点,在从找到的子节点找它的子节点,一层层下去

二、
Q:您在什么情况下会用到虚方法?它与接口有什么不同?
A:  当在继承类中想重写某一方法时会用到虚方法;虚方法是类的成员函数,接口相当于抽象类.

Q:Override与重载有什么区别?
A:  Override  就是覆盖的意思,覆盖父类的同名方法,而重载则是通过参数表来调用方法.

Q:值类型与引用类型有什么区别?
A:  值类型在堆中,引用类型在栈中.
Q:怎样理解静态变量?
A:  静态变量具有在某一个类中具有全局型.

Q:向服务器发送请求有几种方式?
A:  Post,Get.

Q:DataReader与Dataset有什么区别?
A:DataReader是数据库的缓存,DataReader的局限:  只能读取数据;不能修改数据;  只能向前循环数据;  只能处理一个表的数据.而DataSet很强大,而且与数据库是断开的.  

Q:如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
A:  使用Request["string"].

Q:用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
A:  UI层  业务对象层  数据层

Q:软件开发过程一般有几个阶段?每个阶段的作用?
A:  1)问题定义;2)可行性研究;3)需求分析;4)总体设计;5)详细设计;6)编码和单元测试;7)综合测试;8)软件维护。

Q:微软推出了一系列的Application  Block,请举出您所知道的Application  Block并说明其作用?
A:  SqlHelper  列如:SqlHelper.ExcuteDataSet()执行存储过程.

Q:请列举一些您用到过的设计模式以及在什么情况下使用该模式?
A:  没有.

Q:您对WebService的体会?
A:  完好的封装性,松散耦合,使用协约的规范性,使用标准协议规范,高度可集成能力.

Q:您对编程的兴趣如何?工作中遇到不懂的问题是怎样去解决的?您一般怎样去提高自己的编程水平?
A:    遇到不懂的上MSDN.

Q:您离职的原因是什么?
A:  我的原因是工资低.

以下几道题目如果您不会,请较为详细的描述您的解决思路和方法
Q:通过超链接怎样传递中文参数?
A:  
第一个问题    传递时用HttpUtility.UrlEncodeUnicode("中文参数"),获取时直接用Request.QueryString["参数"]就行了
<%@  import  namespace="System.Web.Util"%>

第二个问题    在二者切换的时候,重写一遍,把asp中的Session信息,用.net的格式再写一遍.


Q:请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
A:  foreach(TextBox  a  as  webform1.controls)
{
    a.text="";
}

Q:请编程实现一个冒泡排序算法?
A:  int[]  array  =  {2,3,1,6,5};
for(  int  i=0;  i<array.Length;  i++)
{
      for(  int  j=0;  j<array.Length-i-1;  j++  )
      {
            if(  array[j]  >  array[j+1]  )    swap(  ref  array[j],  ref  array[j+1]  );
        }
}
for(  int  k=0;  k<array.Length;  k++  )
{
Console.Write(  array[k]  );
}

三、
1、面向对象的特征有哪些方面      
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4.  多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问

posted on 2006-08-26 05:09  gjcn  阅读(329)  评论(0)    收藏  举报

导航