面试题汇总
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. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问
浙公网安备 33010602011771号