net面试题.docx
- 文档编号:20104360
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:60
- 大小:53.97KB
net面试题.docx
《net面试题.docx》由会员分享,可在线阅读,更多相关《net面试题.docx(60页珍藏版)》请在冰豆网上搜索。
net面试题
A核心技术思想
(以下技术知识点皆由本中心整理和补充,不足之处,请上网核对,)
1、概述反射和序列化
反射:
程序集包含模块,而模块包含类型,类型又包含成员。
反射则提供了封装程序集、模块和类型的对象。
您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。
然后,可以调用类型的方法或访问其字段和属性
序列化:
序列化是将对象转换为容易传输的格式的过程。
例如,可以序列化一个对象,然后使用HTTP通过Internet在客户端和服务器之间
传输该对象。
在另一端,反序列化将从该流重新构造对象。
2.如何把一个array复制到arrayList里
方法一、使用foreach循环,将array数组中的数据逐步放入ArrayList的对象中;
方法二、使用Copy方法,进行数据的复制;
方法三、使用ArrayList的adpater的方法,将整个Array对象封装到ArrayList对象中。
//author:
renfuming
publicstaticvoidMain(string[]renargs)
{
int[]arrayInt=newint[]{1,2,3,4};
ArrayListarrlistInt=newArrayList();
//方法一
foreach(intainarrayInt)
{
arrlistInt.Add(a);
}
Console.WriteLine(arrlistInt[2].ToString());//输出3
//方法二:
ArrayListarrlistInt2=newArrayList();
arrlistInt2=ArrayList.Adapter(arrayInt);
Console.WriteLine(arrlistInt2[2].ToString());//输出3
//逆向转换
ArrayresultArr=(int[])arrlistInt2.ToArray(typeof(int));
Console.WriteLine(resultArr.GetValue
(2));//输出3
}
3.datagrid.datasouse可以连接什么数据源
[dataset,datatable,dataview,IList]等接口类型的对象
4.new有几种用法
第一种:
newClass(),新建一个类的对象,但是此类必须的又可访问的构造函数
第二种:
显式覆盖基类的方法:
publicnewMenthod(){}
6.类成员有()种可访问形式
可访问性:
public,protected,private,internal
可能还有其他的访问形式,具体的情况视编码需要而定
7.用sealed修饰的类有什么特点
sealed修饰符用于防止从所修饰的类派生出其它类。
如果一个密封类被指定为其他类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。
具体说来,由于密封类永远不会有任何派生类,所以对密封类的
实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。
8.列举ADO.NET中的五个主要对象,并简单描述
connection,command,dataReader,transaction,dataset...
其上对于各种对象,连接不同的数据库将会有不同的对象变体
Connection:
数据库的连接需要此对象
Command:
执行数据表变化的命令
dataReader和dataset主要是对数据库的表信息进行两种不同方式的读取,具体的读取得区别,后面将会有讲解
9.执行下面代码后:
StringstrTemp="yyaccpx某某某";
IntiSystem.Text.Encoding.Default.GetBytes(strTemp).Length;
Intj=strTemp.Length;
结果:
i=(14);j=(11)
i=(14);j=(11)中文在内存中占两个字节
但是只算是一个字符
10.C#中,stringstr=null与stringstr="",请尽量用文字说明区别。
(要点:
说明详细的内存空间分配)
stringstr=""在栈中存取地址,在堆中存放对象的值
而Stringstr=null;仅仅在内存栈中分配了空间
11.详述.NET里class和struct的异同!
class:
放在属于引用类型,故其存放于内存的堆中
Struct属于值类型,其存放于栈中,作为参数传递的时候属于值传递
类与结构有很多相似之处:
结构可以实现接口,并且可以具有与类相同的成员类型。
然而,结构在几个重要方面不同于类:
结构为值类型而不
是引用类型,并且结构不支持继承。
结构的值存储在“在堆栈上”或“内联”。
细心的程序员有时可以通过聪明地使用结构来增强性能。
13.什么是code-behind技术
对于每一个Aspx文件可以相对应一个CS文件类,aspx继承自对应的CodeBehind类,在编译时,CodeBhind类编译到webui工程对应的dll中,而aspx页面中的内含代码和aspx一起编译到temporary.dll中,被客户端浏览器访问。
14.概述三层结构体系
webUI层:
封装基本的页面布局形式,即表示层
DataAccess(DAO)层:
数据访问层,利用各种相关的技术,与底层数据库进行交互
Business层:
业务逻辑层,封装整个程序的业务逻辑代码,主要与DAO层相关联
Model层:
封装程序领域对象,该层可以在上面的三层之间进行很好的交互
这只是基本的三层架构设计,如果利用设计模式,则可以在此基础上进行灵活的变化
16.值类型和引用类型的区别?
C#支持两种类型:
“值类型”和“引用类型”。
值类型(如char、int和float)、枚举类型和结构类型。
引用类型包括类(Class)类型、接口类型、委托类型和数组类型。
值类型与引用类型的区别在于值类型的变量直接包含其数据,而引用类型的变量则存储对象引用。
对于引用类型,两个变量可能引用同一个对
象,因此对一个变量的操作可能影响另一个变量所引用的对象。
对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量
18.C#中接口和类有什么区别?
接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!
而类是负责功能的具体实现!
在类中也有抽象类的定义,抽象类与接口的区别在于:
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。
但接口是一个行为的规范,里面的所有东西都是抽象的!
一个类只可以继承一个基类也就是父类,但可以实现多个接口
19.ViewState的作用和实现方式?
设置是否要保存控件的状态,其功能的实质是利用隐藏表单域实现
如果设为false且在Page_Load中没有重新绑定数据的话,只要页面一刷新,控件的内容就没了如果设为true,则页面会保存控件的内容
在一些不需要保存状态的页面中最好把它设为false,为什设为true会增加服务器的负担隐藏域
20.在ASP.net中可以利用哪些对象存储状态?
几种维持状态的对象应用场合以及优缺点?
主要用Application,session,viewstate,cookie,cache。
Application:
应用程序级别的共享变量,优点是应用程序一开启该站点都能访问此变量。
缺点:
所有对此进行写入操作要加锁,由此共享变
量锁带来的内存开销只有此应用程序关闭才能结束。
Session:
维护用户个人的状态信息,优点:
个人所从事活动,如登录信息,购物车信息等较安全而且又服务器维护较稳定。
缺点:
维持http
连接的sessionID仍然有缺陷,同时为每个用户维护状态信息,服务器内存开销很大。
Viewsate:
如4所说,在一些场合能体现它的特点,但同时带来的缺点:
影响整个页面的速度以及隐藏字段未加密。
Cookie:
优点是将状态信息维护在客户端的一个文本文件,不需要耗用服务器的内存,是目前各大网站主要采用的方式。
缺点:
由于其将状态
信息存贮在客户端,很可能由别人破解此文件而获得此人的个人隐私和机密信息。
其受限大小为4K.
Cache:
优点是提供的此功能很强大,如文件缓存依赖、API依赖、数据库依赖以用于存贮数据变化而更换缓存状态数据。
提供存储周期
从httpcontext到httpruntime。
缺点:
耗用服务器内存。
Request
21.简单说说ASP.NET中基于表单的身份验证方式的用法?
配置文件提供对站点那些目录的保护以及登录页面,当访问该目录的文件时,如果用户未认证通过,将转入登录页面,用户输入用户名和密码
,将此参数传入认证模块authentication,该模块负责认证,如果通过将isauthentication设置为true,并返回用户的identity对象,此
时页面将转入初始请求页,如果未通过,将不允许访问此目录。
23.在超过10万条记录的页面显示时,你如何处理分页,有多少种替代方案?
一般根据页面选择的第几页PageIndex,以及服务端配置文件配置的每页行数PageSize,通过传入参数传入存贮过程,由其返回相应行
数pagesize的记录。
即每一页数据都由服务端返回。
可以利用缓存Cache,将数据一次加载,在结合2.0中数据库缓存方式,跟踪数据库表的信息的变化,自动更新缓存信息
对于数据分野页,也可以利用gridview的数据邦定控件的自动分页的方式
24.DataReader和DataSet的异同?
Daatareader和datatset都是通过从数据源取数据。
不同点:
datareader提供只进行流的方式读取数据。
Dataset提供一种容器里面主要由表
以及表关系,由适配器来提供从数据源取得数据填充到此容器的表中。
DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引
发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消
耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作
25.你会利用那些工具进行数据库的性能分析及其优化?
说说你觉得优化数据库需要注意的方面。
比如:
如何设计优化查询为主、插入更新为
主的表。
我主要通过执行计划以及索引优化以及客户统计和服务器跟踪工具来检测从SQL到索引、硬盘IO和时间等信息。
对于查询为主的表,首先对数
据量的大小有一定的估计,当达到一定程度应采用水平分区,有的根据主键有的根据时间段来区分。
由于此表往往插入更新不是太快,可对适
当字段采用索引并且填充因子可以尽量大。
SQL优化等。
对于插入更新为主的表,我觉得健壮性更重要,只要根据标准外部采用存贮过程就可
以了。
26.数据库某表主键自增,是很常见的情形。
在ASP.Net或C#程序中,要求向该表插入一条记录,并马上从该表查出这条记录。
不能使用时间戳,请问你如何实现?
插入一条记录会返回◎◎identity,通过它就是该记录的主键,再select一下就可以了
29.客户端与浏览器:
如果让你做一个TreeView控件,你的思路
我会采用javascript来做,主要采用htc。
数据通过XML.
通过htc操作XML并定义一些方法如:
load、addnode、deletenode、updatenode、selectednode等方法一些属性如对图标、节点位置、节
点前复选框等属性,也会提供一些默认事件如修改节点前后刷新等。
30.谈谈论坛聊天室IM和各种网站程序的交互与刷新思路的差异与共同点。
IM交互式信息通信ajax刷新思路,对于集中刷新方式,应该有部分和全部刷新的区别
这个希望大家上网去找详细的资料
3
32.你用过哪些版本控制工具
--------------各位同学兄弟可以根据自己的实际情况,谈论一些自己在使用这些工具时所遇到的问题以及体会
TFS(ASP.Net)、cvs、svn
33.在开发中你利用那些工具进行单元测试和模块测试
NUNIT和PDM.页面测试httpunuit
34.如何进行Bug管理
由一个BUG跟踪平台,提供该程序的各个模块的BUG,以及级别,以及解决时间等信息
35.如何生成和管理开发文档
一般用NDOC来生成文档,大部分文档主要还是Word为主。
主要是各个模块以及版本的控制等
36.请用代码简单描述一下Singleton、抽象工厂、策略模式、Composite(任选三个)的设计模式的概念
Singleton单一模式所有类共享一个实例
下面这种实现方式对多线程来说是安全的,同时线程不是每次都加锁,只有判断对象实例没有被创建时它才加锁,有了我们上面第一部分的里面的分析,我们知道,加锁后还得再进行对象是否已被创建的判断。
它解决了线程并发问题,同时避免在每个Instance属性方法的调用中都出现独占锁定。
它还允许您将实例化延迟到第一次访问对象时发生。
实际上,应用程序很少需要这种类型的实现。
大多数情况下我们会用静态初始化。
这种方式仍然有很多缺点:
无法实现延迟初始化。
//author:
renfuming
publicsealedclassSingleton
2{
3staticSingletoninstance=null;
4staticreadonlyobjectpadlock=newobject();
6Singleton(){}
10publicstaticSingletonInstance{
12get{
14if(instance==null){
16lock(padlock){
18if(instance==null){
20instance=newSingleton();
21}
22}
23}
24returninstance;
25}
26}
27}
抽象工厂(工厂方法)
usingSystem;
//author:
renfuming
namespaceTestStrategy
{
publicinterfaceIFactory
{
voidMethod();
}
publicclassMyProductA:
IFactory
{
publicMyProductA()
{
Console.WriteLine("已经生产产品A");
}
publicvoidMethod()
{
Console.WriteLine("实现产品A的具体功能!
");
}
}
publicclassMyProductB:
IFactory
{
publicMyProductB()
{
Console.WriteLine("已经生产产品B");
}
publicvoidMethod()
{
Console.WriteLine("实现产品B的具体功能!
");
}
}
publicclassCreateProductAFractory
{
publicstaticMyProductACreateProductA()
{
returnnewMyProductA();
}
}
publicclassCreateProductBFractory
{
publicstaticMyProductBCreateProductB()
{
returnnewMyProductB();
}
}
publicclassTestFactory
{
publicstaticvoidMain(string[]args)
{
IFactoryifact=CreateProductAFractory.CreateProductA();
ifact.Method();
Console.WriteLine("--------------------------------------");
ifact=CreateProductBFractory.CreateProductB();
ifact.Method();
}
}
}
策略模式:
属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得他们可以相互替换。
策略模式适合用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种不同的实现方式可以使用时使用。
策略模式中有三个对象:
1、环境对象:
该类中实现了对抽象策略中定义的接口或者抽象类的引用。
2、抽象策略对象:
他可以又接口或者抽象类进行实现
3、具体策略对象:
他封装了实现对同一动作不同功能的不同算法;
利用策略模式构建的应用程序,可以根据用户配置等内容,选择不同算法来实现应用程序的功能,具体的选择由环境对象来完成。
采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性和条理性。
usingSystem;
//author:
renfuming
namespaceTestStrategy
{
publicinterfaceStrategy
{
voidPrintCount(stringfruitName,intcount);
}
publicclassMyChoilceA:
Strategy
{
publicvoidPrintCount(stringfruitName,intcount)
{
Console.WriteLine("{0}实现5折后的价格是:
{1}",fruitName,count*0.5);
}
}
publicclassMyChoiceB:
Strategy
{
publicvoidPrintCount(stringfruitName,intcount)
{
Console.WriteLine("{0}实现6折后的价格是:
{1}",fruitName,count*0.6);
}
}
publicclassMyChoiceC:
Strategy
{
publicvoidPrintCount(stringfruitName,intcount)
{
Console.WriteLine("{0}实现7折后的价格是:
{1}",fruitName,count*0.7);
}
}
publicclassChoiceContext
{
StrategyobjStrategy;
publicChoiceContext(Strategyobj)
{
this.objStrategy=obj;
}
publicvoidExecute(stringname,intcount)
{
this.objStrategy.PrintCount(name,count);
}
}
classMyTestClass
{
[STAThread]
staticvoidMain(string[]args)
{
ChoiceContextobjA=newChoiceContext(newMyChoilceA());
objA.Execute("苹果",1000);
ChoiceContextobjB=newChoiceContext(newMyChoiceB());
objB.Execute("香蕉",1000);
ChoiceContextobjC=newChoiceContext(newMyChoiceC());
objC.Execute("橘子",1000);
}
}
}
上面的例子是我自己写的,有不足之处,请自己网上更正!
38.可否简要的介绍2.0Membership,WebPart和C#的匿名函数和泛型等你认为.net2.0自己感兴趣的内容,希望可以简要地阐述其中的特点(本题非常的重要)
1Membership:
成员管理主要提供了一套对用户信息、用户角色、用户配置信息的用户系统。
通过MembershipConfigHandler加载配置文件
中公有的基础信息,对配置文件中的信息进行了严格的边界检查和类型检查。
通过MembershipProvider提供了实现membership的抽象方法以
及配置信息。
由SqlMembershipProvider继承MembershipProvider来实现sqlclient的数据提供服务。
业务和实现相剥离,以利于扩展。
当
然里面有很多特点也有很多细节等。
2WebPart:
主要提供页面布局和自定义以及换皮肤的功能。
通过定义主题Theme来决定整体的布局风格,以及版面通过设定不同的区域Zone来
决定版面各块的区域设置。
通过不同的skin和css来确定风格。
让用户能够保存自己的个人设置以及回复默认设置的功能。
3匿名函数:
使用匿名方法可以减少因实例化委托所需要的开销,1.0中使用委托必须实例化委托并且必须将所调用的类和方法作为参数传入也
即命名方法,当然如果所调用的委托具有多变性应该还采用命名方法。
4泛型:
一般用于集合类。
由于以前集合类数据都由framework隐式转化为object类型,这种开销很大。
而用泛型,你就可以指定传入对象类
型,而用于生成强类型的数据集,这样各种操作就可以使用指定类型的特性和优势了,自然速度也快了很多。
当然接口、方法、类等都同样使用这种方式
5编译模型除了1.0支持的批编译,也提供新的编译模式。
6在httpmodule和httphander的处理速度要比以前1.0要快。
7在请求响应输出中,将缓冲区由宿主进程移到本机内存,可以消除资源瓶颈。
8其缓存模型提供了数据库依赖和缓存后替功能。
9与IIS6.0集中能提供更好的性能,主要体现在缓存和缓冲操作上。
39.A中的内建对象
Page对象:
WebForm网页在执行的时候会被编译成Page对象,Page对象
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- net 试题
![提示](https://static.bdocx.com/images/bang_tan.gif)