完整Net面试题大全个人整理推荐文档Word下载.docx
《完整Net面试题大全个人整理推荐文档Word下载.docx》由会员分享,可在线阅读,更多相关《完整Net面试题大全个人整理推荐文档Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
![完整Net面试题大全个人整理推荐文档Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/1/3b58d4ed-e10d-41c9-84f7-c660c249fb32/3b58d4ed-e10d-41c9-84f7-c660c249fb321.gif)
例如,可以对一个事件调用多个方法。
方法不必与委托签名完全匹配。
事件是一种特殊的委托。
5.override与重载的区别
Override:
要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,重写的基方法必须与override方法具有相同的签名。
方法重载:
一个类中可以有一个以上的方法拥有相同的名称。
但必须有不相同的签名。
6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
QueryString、Server.Transfer方法。
7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
foreach(Controlcontrolinthis.Controls)
if(controlisTextBox)
TextBoxtb=(TextBox)control;
tb.Text=String.Empty;
8.请编程实现一个冒泡排序算法?
//冒泡排序
publicstaticvoidMaoPaoSort(refint[]arrays)
if(arrays!
=null&
&
arrays.Length>
0)
for(inti=1;
i<
arrays.Length;
i++)
boolisChange=false;
for(intj=0;
j<
arrays.Length-i;
j++)
if(arrays[j]>
arrays[j+1])
inttempValue=arrays[j];
arrays[j]=arrays[j+1];
arrays[j+1]=tempValue;
isChange=true;
if(!
isChange)
break;
9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
索引器允许类或结构的实例就像数组一样进行索引。
索引器类似于属性,不同之处在于它们的访问器采用参数。
PublicReturnTypethis[paramTypeindex]{get{}set{}},可以用任何类型进行索引。
10.求以下表达式的值,写出您想到的一种或几种实现方法:
1-2+3-4+……+m
publicstaticintsumMethod1(intm)
intsum=0;
=m;
if(i%2!
=0)
sum+=i;
sum-=i;
returnsum;
publicstaticintsumMethod2(intm)
intsum=0;
if(m%2!
sum=m/2+1;
sum=-(m/2);
12.在下面的例子里
classA
publicA()
PrintFields();
publicvirtualvoidPrintFields(){}
classB:
A
intx=1;
inty;
publicB()
y=-1;
publicoverridevoidPrintFields()
Console.WriteLine("
x={0},y={1}"
x,y);
当使用newB()创建B的实例时,产生什么输出?
X=1,Y=0
13.什么叫应用程序域?
应用程序域(applicationdomain)(AppDomain)一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立(即,从应用程序入口点开始,沿着对象激活的序列的任何位置)。
应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的对象隔离,以使运行时行为可以预知。
在一个单独的进程中可以存在多个应用程序域。
14.CTS、CLS、CLR分别作何解释?
CTS:
通用类型系统。
CLS:
通用语言规范。
CLR:
公共语言运行库。
15.什么是装箱和拆箱?
装箱:
装箱转换是指将一个值类型隐式或显式地转换成一个object类型,拆箱:
拆箱转换是指将一个对象类型显式地转换成一个值类型。
16.什么是受管制的代码?
受托管的代码不能直接写内存,是安全的,它受CLR的内存安全管理,而非托管代码是非安全代码,可以使用指针操作内存
中读写数据库需要用到那些类?
他们的作用?
DataSet:
数据存储器
Connection对象,用来创建和打开,关闭数据库连接。
Command对象,用来执行各种sql语句或者调用存储过程。
Adapter对象,数据适配器,用来执行SQL语句,配合数据集执行比较多。
DataReader,只读的对象,有着很高的性能。
21.在.net中,配件的意思是?
程序集。
(中间语言,源数据,资源,装配清单)
22.常用的调用WebService的方法有哪些?
1.使用WSDL.exe命令行工具。
2.使用VS.NET中的AddWebReference菜单选项
Remoting的工作原理是什么?
服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:
点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行(排序的方式如DataGrid相似)。
根据您的知识,请简要谈一下您的思路
根据点击的列头,包该列的名称取出,按照该列名排序后,再绑定到ListView中。
35.能用foreach遍历访问的对象需要实现IEnumerable接口或声明GetEnumerator方法的类型。
36.GC是什么?
为什么要有GC?
GC是垃圾收集器。
程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
要请求垃圾收集,可以调用下面的方法之一:
System.GC.Collect();
37.Strings=newString("
xyz"
);
创建了几个StringObject?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对像s。
38.abstractclass和interface有什么区别?
抽象类:
只能用做其它类的基类,它就是被设计来被继承的。
不能创建它的实例。
它使用abstract修饰符来声明。
抽象类可以包含抽象成员,但不是必须的,它的成员可以抽象成员和普通带实现的成员的任意组合。
它自己可以派生自另一个抽象类。
任何派生自抽象类的类必须使用override关键字实现该类所有的抽象成员,除非派生类自己也是抽象类。
接口:
接口是表示一组函数成员而不实现成员的引用类型。
其它类和结构可以实现接口。
接口声明不包括数据成员。
接口声明只能包含如下类型的静态成员函数的声明:
方法、属性、事件、索引。
接口的成员不能包含任何实现代码,而在每一个成员声明的主体后必须使用分号。
接口名称必须从大写的I开始。
它和类一样,也可以声明成分部接口。
接口声明可以有任何的访问类型:
public、protected、internal、private。
接口成员是隐式Public的,不允许有任何访问修饰符。
1,什么是线程池
为了帮我们降低创建和销毁线程相关的成本,CLR为每一个进程维护了一个线程池。
一开始进程的线程池是空的,如果进程使用的线程被创建,并且完成了线程的执行,它不会被销毁,而是加入到进程的线程池中,这后,如果进程需要一个另外一个线程,CLR就会从池中还原一个线程,这就节省了很多时间。
39.启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,这并不意味着线程就会立即运行,只是进入了可运行状态。
直接调用run()方法不会产生线程,而是把它当作普通的方法调用,马上执行
40.接口是否可继承接口?
抽像类是否可实现(implements)接口?
抽像类是否可继承实体类(concreteclass)?
接口可以继承接口。
抽像类可以实现(implements)接口,抽像类是否可继承实体类,但前提是实体类必须有明确的构造函数。
41.构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
42.是否可以继承String类?
不可以,因为String类是密封类,被Sealed修饰符所修饰。
44.两个对像值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?
不对,有相同的hashcode。
HashCode:
可以简单的理解为内存的地址。
"
=="
:
操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储
的地址是否相同,即栈中的内容是否相同。
equals"
操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
而字符串是一个特殊的引用型类型,在C#语言中,重载了string对象的很多方法方法(包括equals()方法),使string对象用起来就像是值类型一样。
45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
可以。
47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
49.List,Set,Map是否继承自Collection接口?
List,Set是Map不是
51.数组有没有length()这个方法?
String有没有length()这个方法?
数组和string都没有Length()方法,只有Length属性。
52.sleep()和wait()有什么区别?
sleep()方法是将当前线程挂起指定的时间。
wait()释放对象上的锁并阻塞当前线程,直到它重新获取该锁。
53.shorts1=1;
s1=s1+1;
有什么错?
shorts1=1;
s1+=1;
shorts1=1;
有错,s1是short型,s1+1是int型,不能隐式转化为short型。
可修改为s1=(short)(s1+1)。
s1+=1正确。
复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型,s1+=1等价于s1=(short)s1+1;
55.如何处理几十万条并发数据?
用存储过程或事务。
取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.
56.Session有什么重大BUG,微软提出了什么方法加以解决?
是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sateserver或SQLServer数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。
57.进程和线程的区别?
进程是系统进行资源分配和调度的单位;
线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。
进程:
进程就是一组资源,它们构成了一个正在运行的程序。
线程:
在进程中系统创建了一个叫做线程的内核对象,线程体现了一个程序的真实执行情况。
58.堆和栈的区别?
栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;
堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。
栈:
它是一个内存数组,是一个LIFO的数据结构,数据只能从栈顶插入和删除。
堆:
它是一块内存区域,在堆里可以分配大块的内存用于存储某类型的数据,堆里的内存可以以任意顺序存入和取出。
59.成员变量和成员函数前加static的作用?
它们用来反映类的状态。
静态成员它被类的所有实例所共享,所有实例都访问同一内存位置。
它们独立于所有的类实例,即使没有类实例,也可以调用类的静态成员。
60.ASP。
NET与ASP相比,主要有哪些进步?
asp解释形,aspx编译型,性能提高,可以跟美工的工作分开进行,更有利于团队开发。
61.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
publicstaticint[]BuildIntArray()
{
int[]retsInt=newint[100];
List<
int>
tempList=newList<
();
Randomrandom=newRandom();
while(tempList.Count<
100)
intnum=random.Next(1,101);
tempList.Contains(num))
tempList.Add(num);
tempList.Sort();
for(inti=0;
tempList.Count;
retsInt[i]=tempList[i];
returnretsInt;
62.请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
QueryString传递一个或多个安全性要求不高或是结构简单的数值。
但是对于传递数组或对象的话,就不能用这个方法了
session(viewstate)简单,但易丢失作用于用户个人,过量的存储会导致服务器内存资源的耗尽。
application对象的作用范围是整个全局,也就是说对所有用户都有效。
其常用的方法用Lock和UnLock
cookie简单,但可能不支持,可能被伪造Cookie是存放在客户端的,而session是存放在服务器端的。
而且Cookie的使用要配合ASP.NET内置对象Request来使用
inputttype="
hidden"
简单,可能被伪造
url参数简单,显示于地址栏,长度有限
Server.Transfer把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流
数据库稳定,安全,但性能相对弱
63.请指出GAC的含义?
全局程序集缓存。
GAC(Global
AssemblyCache),他的作用是可以存放一些有很多程序都要用到的公共Assembly。
这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。
64.向服务器发送请求有几种方式?
get,post。
get一般为链接方式,post一般为按钮方式。
区别:
Get方式,服务器端用Request.Qurystring取变量的值,安全性不高,传送数据量小。
post方式,服务器端用Request.Form获取提交的数据,安全性高。
建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;
而在做数据添加、修改或删除时,建议用Post方式。
65.DataReader与Dataset有什么区别?
连接数据库时DataSet是非面向连接的,而DataReader是面向连接的。
DataSet表示一个数据集,是数据在内存中的缓存,可以包括多个表,是保存数据的数据结构。
而Datareader不承担保存数据的责任,它只负责从数据源读取数据到本地而已,它不是数据结构,而是网络通讯组件的高层封装。
DataSet可以离线处理,前后滚动,而DataReader不能离线处理,且是只读向前的,速度快。
DataSet可以存储数据库各种对象的,比如表触发器等,可以更新回原来的数据库。
而DataReader只能存储游标记录,不可以更新回原来的数据库,
它类似一个只能向前的游标记录集。
66.软件开发过程一般有几个阶段?
每个阶段的作用?
软件开发一般分为五个阶段:
问题的定义及规划
此阶段是软件开发与需求方共同讨论,主要确定软件的开发目标及其可行性。
需求分析
在确定软件开发可行性的情况下,对软件需要实现的各个功能进行详细需求分析。
需求分析阶段是一个很重要的阶段,这一阶段做的好,将为整个软件项目的开发打下良好的基础。
“唯一不变的是变化本身”,同样软件需求也是在软件开发过程中不断变化和深入的,因此,我们必须定制需求变更计划来应付这种变化,以保护整个项目的正常进行。
软件设计
此阶段中要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。
软件设计一般分为概要设计和详细设计,软件设计将为软件程序编写打下良好的基础。
程序编码
此阶段是将软件设计的结果转化为计算机可运行的程序代码。
在程序编码中必定要制定统一、符合标准的编写规范。
以保证程序的可读性、易维护性。
提高程序的运行效率。
软件测试
在软件设计完成之后要进行严密的测试,一发现软件在整个软件设计过程中存在的问题并加以纠正。
整个测试阶段分为单元测试、组装测试、系统测试三个阶段进行。
测试方法主要有白盒测试和黑盒测试。
6.部署及维护。
67.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?
Uning:
using做为命名空间指令:
通过在源文件顶端放置Using命名空间指令以避免不得不使用长名称,它通知编译器你将要使用来自某个指定命名空间的类型。
using做为别名指令:
它允许对一个命名空间或命名空间中的一个类型起一个别名。
using语句:
某些类型的非托管对象有数量限制或很耗费系统资源,这样在代码使用完它们后,就得尽可能快的释放它们,using语句有助于简化该过程并确保这些资源被适当的处置。
New:
创建类和结构的实例。
隐藏基类的方法。
创建匿名类型(var和new关键字一起使用时可以创建匿名类型,匿名类型只是一个继承了Object的、没有名称的类,该类的定义从初始化器中推断,类似于隐匿类型化的变量)。
68.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.
stringstr="
afdkdaskdfjiksdafj"
;
stringstrAfter=Regex.Replace(str.Trim(),@"
\s+"
"
"
69.下面这段代码输出什么?
为什么?
inti=5;
intj=5;
if(Object.ReferenceEquals(i,j))
Equal"
NotEqual"
NotEqual,因为ReferenceEquals是Object的静态方法,用于比较两个引用类型的对象是否是对于同一个对象的引用,对于值类型它总是返回false。
34.ReferenceEquals,==,Equals的区别
String对于声明的相同的字符串在堆上只保留一个Copy,所以有相同字符串值的两个字符串变量将会指向相同的Reference。
ReferenceEquals:
它是Object的静态方法,用于比较两个引用类型的对象是否是对于同一个对象的引用,对于值类型它总是返回false。
==:
它是一个可以重载的二元操作符,可以用于比较两个对象是否相等。
对于内置值类型,==判断的是两个对象的代数值是否相等。
它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false,而对于用户定义的值类型,如果没有重载==操作符,==将是不能够使用的。
对于引用类型,==默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。
但是.NETFramework中的类很多对==进行了重载,例如String类的==与Equals的行为相同,判断两个