C#面试题大全包含所用企业的面试题Word下载.docx
《C#面试题大全包含所用企业的面试题Word下载.docx》由会员分享,可在线阅读,更多相关《C#面试题大全包含所用企业的面试题Word下载.docx(53页珍藏版)》请在冰豆网上搜索。
2
Int16
有符号(short)
(-32768~32767)
ushort
2
Unt16
无符号(short)
(0~65535)
Int
4
Int32
Uint
Uint32
Long
8
Int64
Ulong
Uint64
Char
Unicode字符
float
Single
三
浮
点
Double
Decimal
bool
Boolean
Trueorfalse
●除了基本类型,C#还有两种值类型:
enum(枚举)和struct(结构);
●编译器会默认带小数点的数位double类型,要赋值给一个float型变量,需要在数字后面加上f;
●常见转义字符:
\’单引号\”双引号\\反斜杠\0空\a警铃\b回退\f换页\n换行\r回车\t水平制表\v垂直制表
4.override与重载有什么区别?
Override:
覆盖:
在继承关系中,父类中的虚方法,在子类中需要重写时
Overload:
重载:
同一个类中,函数名相同,参数列表不同,实现不同功能
5.你在什么情况下会用到虚方法?
它与接口有什么不同?
子类要重写父类中的方法时,父类中方法应声明为虚方法;
接口:
只有方法声明,没有方法体,可以有属性和索引器(都是方法),有概念上的共同特征,要用接口实现,没有方法体
虚方法:
不但有方法声明,还要有方法体
6.什么是抽象方法?
什么是抽象类?
抽象方法:
只有方法签名,没有方法体
抽象类:
类前加关键字abstract,则为抽象类,抽象类不能创建对象
一个类中,如果有抽象方法,则该类一定位抽象类;
但是抽象类中不一定有抽象方法
7.怎样理解类、抽象类、和接口之间的异同?
抽象程度不同:
最高程度抽象,忽略对象,只考察行为概念,不考虑行为的具体实现
对对象属性和行为的抽象,以及重点考察方法的具体实现过程
抽象类:
二者中间:
行为一样,实现不同
8..c#是一种纯粹面向对象的语言。
面向对象语言具有什么特点?
抽象,封装(结果是类),继承,多态
9.类和类之间有哪些关系?
继承,多态,聚合,组合,关联
10.@的作用是什么?
是转义字符失效,用在常量字符串前
表示常量字符串没有需要转义的字符
11.什么是序列化?
为什么要序列化?
(什么时候必须作序列化?
)如何实现序列化?
序列化:
把对象数据成员转化为字节流,只序列化数据成员,不序列化方法
为了把对象保存到存储介质或者在网络上传输,做序列化!
默认的序列化方法:
类的定义前加属性:
Serializable,编译器会将序列化方法添加到类中
自定义序列化方法:
ISerilizable(GetOjbectData方法),还需要加上属性
序列化器:
BinaryFormatter,SoapFormatter
12.阐述C#中的访问修饰符。
类和类的成员的访问修饰符分别有哪些?
权限是什么?
类的Public:
任何地方都可用,Internal:
当前程序集中可用
类成员的
Public:
Protected:
本身和子类
Private:
13.什么是操作符重载?
为什么要操作符重载?
如何实现操作符重载?
操作符重载:
在不改变操作符固有的含义情况下,重新定义操作符,目的:
扩大操作符的作用范围,必须公有,静态,放在一个类中
PublicStatic返回类型operator——(参数列表),该操作符,作用在该类上
ClassA
{
PublicStatic返回类型operator——(Aa,B。
。
)//必须出现一个
}
14.C#中有指针吗?
十三种基本数据类型有指针,其他数据类型没有指针,在非安全模式下用
15..c#中的委托是什么?
事件是不是一种委托?
委托的作用是什么?
委托:
是一种特殊的类:
不用Class而用Delegate定义,
目的:
封装一个方法的名称
作用:
取代C++中的函数指针,把方法封装在委托对象中
定义委托对象,达到传递方法的目的
事件时委托定义的一个变量,事件只能作为类的数据成员出现,不能再方法体中出现
16.什么是应用程序域?
将进程的进一步划分为多个应用程序域,每个应用程序域运行一个应用程序。
应用程序域之间相互隔离,互不影响。
17.怎样理解托管代码?
运行在。
NET平台上的代码,运行在CLR(CommomLanguageRuntime)公共语言运行库上的代码,都是托管代码
18.怎样理解强类型系统?
强类型系统:
声明变量时,就指定其存放的数据类型,如C#;
JavaScript是弱类型系统
19.解释装箱和拆箱
装箱:
值类型到Ojbect类型,或者该值类型所实现的任何接口类型之间的转换。
对值类型装箱,会在堆上分配一个实例对象,并将该值复制到新的对象中。
在栈上在堆上
Inti=123;
图示:
Objecto=i;
拆箱与该操作相反。
20.const和readonly的区别是什么?
ref、out、和params的作用和区别是什么?
Const:
定义常量,只能在定义时,初始化;
Readonly:
只读变量,可以在定义时初始化,也可以在构造函数里初始化
Ref:
强制引用传递,阻止形参对实参的临时拷贝,实参和形参指向同一存储区域,
Out:
Params:
修饰传递可变参数的数组,
21.这些符号的含意是什么:
&
、&
&
、|、||、!
、^、~。
:
按位与,
逻辑与,操作数为逻辑表达式,;
短路现象:
a1=T,a2=F,(a1=null计算A1&
a2汇报错)a1&
a2,a2&
a1,a1||a2,a2||a1,1.结果一样2。
效率不一样。
|:
||:
!
逻辑非
~:
按位取反
^:
异或
22.CTS、CLS、CLR是什么?
图示VB.Net、C#.net、CTS、CLS、CLR之间的关系?
CTS:
CommonTypeSystem公共类型系统
CLS:
CommonLanguageSpecification公共语言规范
CLR:
CommonLanguageRuntime公共语言运行库
跨语言开发:
CTS;
C#.NET,C++,VB等语言遵循CLS,---CTS---CLR
23.c#中property与attribute的区别,他们各有什么用处,这种机制的好处在哪里?
Property:
类中的一种成员,如:
方法,索引器,一般格式:
publicstringName{get{returnthis._name;
}set{this._name=value}
Attribute:
(本身是一个类)一种解释说明,用来解释如何编译源代码,一般用[……]包含起来
用处:
property:
私有成员的读写;
(与索引是同一类东西)避免私有成员的直接暴露。
Attribute:
加入注解和说明
24.TCP、UDP的异同?
TCP:
面向连接的,可靠的,传输控制协议,速度慢
UDP:
非面向连接的,不可靠的,用户数据包协议,速度快
25.怎样把array复制到arraylist中?
Int[]arr=newInt[]{1,0,2,3,4,5,6};
ArrayListlist=newArrayList(arr);
List.addrange(arr);
26.将数组a1中从第6个成员起10个数据成员拷贝到数组a2中
Array.Copy(a1,6,a2,0,10);
Array.Sort(a1);
升序排序
Array.Reverse(a1);
倒序排序
27.string和strbuilder的区别,为什么要写这两个类?
String:
定长的常量字符串。
Strings=“abc”;
Stringbuilder:
可变字符串
S1=”hello”;
S2=”World”;
S1+=s2;
StringBuilderbuilder=newStringBUlder(s1);
Builder.Append(s2);
内部字符数组:
默认为十六个字符
28.什么是程序集?
强命名?
GAC?
程序集:
面向.NETFramework已经编译好的可独立发布最小逻辑单元,
强命名:
strongName标识程序集,加强了的名字,名字+公钥(ID)+版本+文化
GAC:
全局程序集缓存GlobalAssemblyCache,本质上是一个文件夹assembly
29.接口有几种实现模式?
请解释接口的显式实现有什么意义?
实现模式:
显示,隐式;
实现方法时,前面加上接口的名字,即为显示实现模式,反之,为隐式实现模式
意义:
一个类继承多个接口的时候,签名相同的方法需要实现时,必须使用显示实现模式,以区别于不同的接口
30.请列出c#中几种循环的方法,并指出他们的不同
For:
带有索引的集合,用For循环
Foreach:
使用范围广,当一个集合实现IEnumerator接口或者GetEnumerator()方法时,可以用该循环方法,
Foreach(Objectoinlist)其中o为只读的。
哦
While:
Do……while:
至少执行一次
31..通过超连接怎样传递中文参数?
HyperLinklink=newHyperLink();
1.Link.NavgatorUrl=string.Format(“~/Default.aspx?
Name={0}”,HttpContext.Current.Server.UrlEncode("
中文名称"
));
2.HttpUtility.UrlEncoding();
31’.如何通过cookie保存中文参数?
32.请编程遍历页面上的所有textbox控件并给它赋值为string.empty?
foreach(ControlcontrolinForm.Controls)
{
if(controlisTextBox)
{
TextBoxtextbox=controlasTextBox;
textbox.Text=string.Empty;
}
33.什么是form表单?
Form表单:
客户端向服务段发送信息,Get:
参数放在Url中,Post:
参数放在body中,
<
formmethod=”Get/Post”action=”Default.aspx”>
/form>
用get/post请求方法将该form表单中的数据提交到Default。
Aspx页面
34.什么是cookie?
什么是session?
Cookie:
在服务器端生成,保存在客户端的键值(name=value)对,向服务器发送请求的时候,如需要,则回发到服务端,服务器端可以禁用Cookie。
”
区别:
Session是存在服务器端的;
而Cookie是存在客户端的!
Session可以不用Cookie来支持和不会受浏览器端的设置影响,可记录每个访问者的信息,独立在服务器端,比Cookie安全!
Session是存在内存中的,浏览器关闭它也就“死”了;
Cookie是以文件方式存在的,可以修改其“存活”时间。
35.我们讲http协议是无状态的,其含义是什么?
含义:
同一客户向服务器发送的前后的不同请求,是没有关系的。
36..讲一讲你对webservice的理解?
在dotnetframework中,WebService怎么很好的结合xml?
WebService就是一种特殊的Web应用程序,没有界面,可被其他的应用程序通过http来调用。
Web服务要封装在一个类中,web方法要贴上[WebMethod]。
机制:
在Server端为Webserice生成WSDL(Web服务描述语言),
Client端要使用该web服务,首先要从服务端取得WSdl,生成本地Webservice代理类,
Client端通过该代理类与Web服务器进行通讯。
遵循协议:
http,SOAP:
SimpleObjectAccessProtocal(简单对象访问协议):
它规定了一种封装格式,将传输的数据包装为XML文件,通讯双方按照该协议进行解析。
与XML结合:
Client要取得Web服务器上的Web服务,
首先,向代理类发出请求,该代理类将该请求按照SOAP协议包装为XML文件,传输到Server端。
然后:
在Server端,按照SOAP协议,对请求进行解析,并将处理后的数据,在按照SOAP协议包装为XML文件,传输到Client端,
37.在HTML中,如何合并三行为一行?
如何合并三列为一列?
rowspan=”3”;
Colspan=”3”;
38.ASP.Net的身份验证方式有哪些?
什么原理?
身份验证:
Windows:
Windows身份验证与IIS身份验证结合,确保ASP。
NET应用程序安全。
Forms:
使用登陆窗体验证用户的用户名和密码,
未经过身份验证的用户被冲定向到登陆页面,
用户在页面上提供凭据和提交窗体。
Asp。
net成员管理和登陆控件。
Passport:
微软提供的集中身份验证服务。
该服务为成员站点提供单一登陆和核心配置文件服务。
39.什么是WebPart?
什么是MasterPage?
你会使用吗?
WebPart:
ASP.NETWeb部件功能集。
MasterPage:
母板页
40.什么是Soap?
作用是什么?
Soap:
SimpleobjectAccessprotocol简单对象访问协议
远程对象存取;
在提供Webservice服务时,客户端服务器之间遵循Soap协议,传输XML数据包
41.什么是MIME类型?
你知道哪些MIME类型?
你用过吗?
MIME:
MultipurposeInternetMailExtension多用途Internet邮件扩展,
MIME类型用于指定客户端Web浏览器和邮件应用程序处理已进制数据的方式,传输电子邮件,发送附件
HTTP支持MIME;
MIME类型:
42..用.net做b\s结构的系统,你是用几层结构来开发,每一层的关系以及为什么要这样分层?
三层结构:
数据层:
数据库和存储过程,以及ADO.NET所写的数据库访问接口
(C#代码中最好不要出现SQL语句。
触发器最好少用。
触发器的BUG很难调试。
游标也要少用)
业务逻辑层:
业务流程的表现层次,主要展示数据的处理和流向,核心,实现各种业务功能。
表示层:
用页面展示业务层功能,并从中接受参数,传递给业务层aspx页面组成
好处:
各层相互独立,互不影响。
某一层如果有变动,其他曾的代码或设置不需要更改。
43.解释ADO.Net中的连接池。
连接池:
为每个唯一的e连接字符串创建的e。
当创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。
将根据需要添加到池中,直至达到最大池大小。
连接池可以显著提高应用程序的性能和可缩放性。
ADONET自动使用连接池,系统维护一定数目的e连接。
44.解释WSDL、UDDI及其作用;
Wsdl:
WebServiceDscriptionLanguage;
Web服务描述语言
在服务器提供WebService时,客户端获得服务器端的WsDl;
生成web服务代理类,与服务器端进行通讯
UDDI:
Web服务的黄页。
45.DataGrid(或Gridview)中有一超链接列(TID),如何取出值(实现页面跳转),写出代码
for(inti=0;
i<
this.GridView1.Rows.Count;
i++)
Controlctl=this.GridView1.Rows[i].FindControl("
HyperLink"
);
if(ctlisHyperLink)
HyperLinklink=ctlasHyperLink;
link.NavigateUrl=link.NavigateUrl
46.写出DataGrid(或Gridview)中实现分页的方法。
如果要显示的数据量很大,你有什么办法加速服务器的响应速度?
asp:
GridViewID=”GridView”runat=”server”AutoPaging=”true”/>
数据量很大时,可以在数据库中分页,
createprocedureReadRecord
(
@StartIndexint,
@EndIndexint
)
as
declare@Countint
set@count=@EndIndex-@StartIndex+1
declare@UpCountint
set@UpCount=@StartIndex-1
declare@sqlvarchar(1000)//拼凑SQL字符串,条件要凑成SQL
set@sql='
selecttop'
+str(@Count)+'
*fromOrderswhereOrderIDnotin(selecttop'
+str(@UpCount)+'
OrderIDfromOrderswhereOrderID>
-1)'
execsp_executesql@sql//将查询语句作为字符串传递给存储过程,调用系统得存储过程,来执行拼接好的sql语句
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
数据库分页:
createprocedurePageingInDataBase
@pageNoint,
@pageSizeint
As//创建临时表,临时表的结构只设为两个字段,(一个子增长字段,一个所要查询表的ID主键),
//这样做表结构简单,插入的效率比较高
declare@tempTabletable//声明临时表,将ID号插入该表
(
OrderIDint,
OrderNointidentity(0,1)//子增长字段
)
insertinto@tempTable(OrderID)//将主表的ID插入临时表
(selectOrderIDfromOrders)
declare@startIndexint//设置每页的起始索引
set@startIndex=@pageNo*@pageSize
declare@endIndexint//设置每页的结束索引
set@endIndex=(@pageNo+1)*@pageSize-1
selecto.OrderID,o.CustomerID//内连接,选择出每页数据
from@tempTabletinnerjoinOrdersoont.OrderID=o.OrderID
wheret.OrderNo>
=@startIndexandt.OrderNo<
=@endIndex
--droptable@tempTable//临时表用完之后,自动消失
execPageingInDataBase0,10//测试
47.定义一个用户定义控件(第三方控件),并添加一个属性和事件(事件属性)
48.说明数据库表建立索引的好处和缺点
索引:
查询速度快,对增删改不利;
聚集索引(物理索引:
):
磁盘上的记录
逻辑索引:
本质是一张表
49.在页面中点击按钮,实现弹出窗口,提示“是否继续?
”,写出代码
<
scriptlanguage=”JavaScript”>
FunctionPop()
{confirm(“是否继续?
”);
/script>
inputtype=”submit”onclick=”pop();
”;
50.实现四舍五入小数点后两位
A=8.235;
Double.parse(String.Format(“{0:
n2}”,a));
0.00}”,a));
51.产生一个流水号,以ID开头后跟6为数字如ID000002不足六位以0补充
a=5;
string.Format(“ID”+”{0:
d6}”,a);
52.解释aspx、aspx.cs文件、区别及工作原理;
Aspx:
Aspx
53.写一个WebService的类并实现返回“GoodMorning!
”的字符串的方法,要求必须提供用户名和密码才能存取这个WebService。
利用SOAP,将用户的验证信息写在Header里面
PublicClassService:
System.Web.Services.WebService
{PublicService(){}
[WebMethod]
PublicstringGetString(stringusername,stringpassword)
If((Name==username)&
(Password==password))
return“GoodMorning!