我的经历过的和收集的C#面试题目,答案仅供大家参考,如果有不一样的答案,请留言,先谢谢大家啦~~~
1、简述private、protected、public、internal修饰符的访问权限。
答:private,私有成员,只能在类的内部可以访问;
protected,受保护成员,在该类的内部及继承类中可以访问;
public,公共成员,完全公开,无访问限制;
internal,在同一命名空间内可以访问。
2、例举ASP.NET页面之间传递值的几种方式。
答:QueryString、Session、Server.Transfer
3、一列数的规则如下:1、1、2、3、5、8、13、21、34……求第30位数是多少,用递归算法实现。
答:public class MainClass
{
public static void Main ()
{
Console.WriteLine(Foo(30));
Console.ReadLine(); //读取数据,可以使运行结果停留显示
}
public static int Foo(int i)
{
if(i<=0)
{
return 0;
}
else if(i>0 && i<=2)
{
return 1;
}
else
{
return Foo(i-1)+Foo(i-2);
}
}
}
4、C#中的委托是什么?事件是不是一种委托?
答:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。这种将方法动态赋给参数的做法,可以避免在程序中大量使用if-else(switch)语句,同时使得程序具有更好的可扩展性。
事件是一种委托。
5、重写(override)与重载(overload)的区别
答:重写是指重写基类的方法。
重载是指方法名相同,参数列表不同,即类中的一个方法有多重调用方式。
6、如果在一个B/S结果的系统中需要传递变量值,但又不能使用Session、Cookie、Application,您有几种方法进行处理?
答:this.Serber.Transfer、QueryString
7、请编程遍历页面上所有TextBox控件并给它赋值为String.Empty
答:foreach(System.Windows.Forms.Control control in this.Controls)
{
if(control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb=(System.Windows.Forms.TextBox)control;
tb.Text=String.Empty;
}
}
8、请编程实现一个冒泡排序算法?
答:public static void Main ()
{
int[] array=new int[10]{1,10,7,8,6,2,-2,12,26,3};
int temp=0;
for(int i=0;i<array.Length-1;i++)
{
for(int j=i+1;j<array.Length;j++)
{
if(array[j]<array[i])
{
temp=array;
array=array[j];
array[j]=temp;
}
}
}
for(int i=0;i<array.Length;i++)
{
Console.WriteLine(“{0}”,array[i]);
}
}
9、描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:索引器(indexer),就是一类特殊的属性,通过它们就可以像数组一样引用自己的类。
索引器不是只能根据数字进行索引,可以用任意类型。
10、求以下表达式的值,写出您想到的一种或几种实现方法:1-2+3-4+……+m
答:public static void Main ()
{
int m= System.Console.ReadLine();
int Sum=0;
for(int i=1;i<=m;i++)
{
if(i%2==1)
{
Sum+=i;
}
else
{
Sum=Sum-i;
}
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine();
}
11、用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要能够分层?
答:一般分为3层:数据访问层(DataAccess Layer)、业务逻辑层(Bussiness Logical Layer)、用户界面层
数据访问层,负责实际的数据存储和检索;
业务逻辑层,是数据访问层和用户界面层两层的纽带,对用户界面层输入的数据进行有效的验证,处理数据,将处理后的数据传送到数据访问层。或者从用户截面层接收数据,处理后再送回表现层。
用户界面层,负责处理用户的输入和向用户输出。
3层结构的优点:分工明确,条理清晰,易于调试,而且具有可扩展性;缺点:增加成本。
12、在下面的例子里
Using System;
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
public override void PrintFields()
{
Console.WriteLine(“x={0},y={1}”,x,y);
}
}
当使用new B()创建B的实例时,产生什么输出?
答:x=1,y=0;x=1,y=-1
13、什么叫应用程序域?
答:应用程序域(通常为AppDomain)是一个用于隔离应用程序的虚拟进程。在同一应用程序范围内创建的所有对象都创建在同一应用程序域中。应用程序域起到安全的作用;占用资源小。
14、CTS、CLS、CLR分别作何解释?
答:CTS:Common Type System,通用类型系统,描述了类型的定义和行为。
CTS规范定义一个类型可以包含0个或多的成员;CTS规范定义了类型可见性和访问类型成员的一些规则;
CLS:Common Language Specification,公共语言规范。CLS是CTS的一个子集。
CLR:Common Language Runtime,公共语言运行库(时)。CLR是CTS的实现,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。
15、什么是装箱和拆箱?
答:装箱,从值类型转换到引用类型的过程。
拆箱,从引用类型转换到值类型的过程。
16、什么是受管制的代码?
答:在.NET环境中运行的任何代码都称为受管制的代码(unmanaged code)。
17、什么是强类型系统?
答:
18、.net中读写数据库需要用到哪些类?他们的作用?
答:Connection:连接数据库;
Command:执行语句命令;
DataSet:数据存储器;
DataAdapter:功能最强大的适配器,支持增删改查的功能;
DataReader:一个向前的只读数据留;
19、Asp.net的身份验证方式有哪些?分别是什么原理?
答:Windows身份验证提供程序:提供有关如何将Windows身份验证与Microsoft Internet信息服务(IIS)身份验证结合使用来确保ASP. NET应用程序安全的信息;
Froms身份验证提供程序:提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。应用Froms身份验证的一种简便方法是使用ASP.NET成员资格和ASP.NET登录控件,他们一起提供了一种只需少量或无需打骂可以收集、验证和管理用户凭据的方法。
Passport身份验证提供程序:提供有关由Microsoft提供集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置。
20、什么是Code-Behind技术?
答:Code-Behind就是所谓的代码分离,它可以使你的程序显得更加有条理、可读性更强。
21、在.net中,配件的意思是什么?
答:配件(assembly),一个配件有时候是指一个EXE或者DLL文件,实际上是一个应用程序(就是指带有主程序入口电的模块)或者一个库文件。
22、常用的调用WebService的方法有哪些?
答:使用WSDL.EXE命令行工具;使用VS.NET中的Add Web Reference菜单选项
23、.net Remoting的工作原理是什么?
答:
24、在C#中,string str=null与string str=””请尽量使用文字或图像说明其中的区别。
答:string str=null没有给str分配内存空间,string str=””给str分配了长度为空的字符串的内存空间
25、请详述在.net中类(class)与结构(struct)的异同?
答:(1)数据类型不同。结构(struct)是值类型,值类型在栈上分配地址;类(class)是引用类型,引用类型是在堆上分配地址;
(2)继承性不同。结构不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确Sealed声明,但结构是隐式的Sealed;类完全可以扩展,除非显示声明Sealed,否则类可以继承其他类和接口,自身也可以被继承;
(3)内部结构不同。结构没有默认的构造函数,但可以添加带参数的构造函数(结构不能添加不带任何参数的构造函数);没有析构函数;没有abstract和sealed(因为不能继承);没有protected修饰符(因为不能被继承);可以不使用new初始化;类有默认的构造函数;有析构函数;可以使用abstract和sealed;有protrcted修饰符;必须使用new关键字初始化。
26、什么是死锁?死锁的必要条件?怎么才能克服死锁?
答:死锁指的是由于两个或多个执行单元之间互相等待对方结束而引起阻塞的情况。
系统的资源不足,进程的推进的顺序不合适,资源分配不当都会导致死锁。
针对死锁主要有三种解决方位案:(1)在同一时刻不允许一个线程访问多个资源;(2)在资源访问权的获取定义一个关系顺序;(3)为所有访问资源的请求系统地定义一个最大等待时间(超时时间),并妥善处理请求失败的情况。
27、接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
答:接口是可以继承接口的;
抽象类是可以实现接口的;
抽象类可以继承实体类,但有个条件,实体类必须要有欧明确的构造函数。
28、构造器Constructor是否可以继承?是否可以被Override?
答:Constructor是不可以被继承的,因此不能被重写(Overriding),但可以被重载(Overloading)
29、当一个线程进入一个对象的方法后,其他线程是否可以进入该对象的方法?
答:不可以,一个对象的方法只能由一个线程访问。
30、面向对象的思想主要包括什么?
答:继承、封装、多态
31、值类型和引用类型的区别?
答:一个具有值类型(value type)的数据存放在栈内的一个变量中。即是在栈中分配内存空间,直接存储所包含的值,其值就代表数据本身。值类型的数据具有较快的存取速度。
一个具有引用类型(reference type)的数据并不驻留在栈中,而是存储于堆中。即是在堆中分配内存空间,不直接存储所包含的值,而是指向所要存储的值,其值代表的是所指向的地址。当访问一个具有引用类型的数据时,需要到栈中间插变量的内容,该变量引用堆中的一个实际数据。引用类型的数据比值类型的数据有更大的存储规模和较低的访问速度。
(未完待续……)