程序员常见面精彩试题.docx
《程序员常见面精彩试题.docx》由会员分享,可在线阅读,更多相关《程序员常见面精彩试题.docx(13页珍藏版)》请在冰豆网上搜索。
程序员常见面精彩试题
程序员常见面试题
一、C#
1.请解释在new与override的区别?
在C#中,new关键字可用作运算符或修饰符。
"new运算符用于在堆上创建对象和调用构造函数。
"new修饰符用于隐藏基类成员的继承成员。
使用override修饰符来修改方法、属性、索引器或事件。
重写方法提供从基类继承的成员的新实现。
由重写声明重写的方法称为重写基方法。
重写基方法必须与重写方法具有相同的签名。
不能重写非虚方法或静态方法。
重写基方法必须是虚拟的、抽象的或重写的。
重写声明不能更改虚方法的可访问性。
重写方法和虚方法必须具有相同的访问级修饰符。
不能使用下列修饰符修改重写方法:
newstaticvirtualabstract重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且重写属性必须是虚拟的、抽象的或重写的。
2.请解释virtual的含义?
virtual关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。
虚拟成员的实现可由派生类中的重写成员更改。
调用虚方法时,将为重写成员检查该对象的运行时类型。
将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。
默认情况下,方法是非虚拟的。
不能重写非虚方法。
不能将virtual修饰符与以下修饰符一起使用:
staticabstractoverride除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。
"在静态属性上使用virtual修饰符是错误的。
"通过包括使用override修饰符的属性声明,可在派生类中重写虚拟继承属性
3.请解释.net采用委托实现的事件模型与JAVA中采用接口实现的事件模型有什么区别,以图示方式解释。
4.请解释接口的显式实现有什么意义?
接口是其他类型为确保它们支持某些操作而实现的引用类型。
接口从不直接创建而且没有实际的表示形式,其他类型必须转换为接口类型。
一个接口定义一个协定。
实现接口的类或结构必须遵守其协定。
接口可以包含方法、属性、索引器和事件作为成员。
5.请以图示方式解释.netframework?
VB
C++
C#
JScript
CommonLanguageSpecification
XMLWeb
services
WebFormsWindowsForms
DataandXML
BaseClassLibraryCLRCLI
VisualStudio.NET
6.什么是.net?
.net是一种平台和框架,.net不是单纯的语言也不是单纯的工具,它是从底层平台开始构建起来的一个整体框架
6.Ref与out有什么不同?
方法参数上的ref方法参数关键字使方法引用传递到方法的同一个变量。
当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
若要使用ref参数,必须将参数作为ref参数显式传递到方法。
ref参数的值被传递到ref参数。
传递到ref参数的参数必须最先初始化。
将此方法与out参数相比,后者的参数在传递到out参数之前不必显式初始化。
属性不是变量,不能作为ref参数传递。
如果两种方法的声明仅在它们对ref的使用方面不同,则将出现重载。
但是,无法定义仅在ref和out方面不同的重载。
方法参数上的out方法参数关键字使方法引用传递到方法的同一个变量。
当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明out方法非常有用。
使用out参数的方法仍然可以返回一个值。
一个方法可以有一个以上的out参数。
若要使用out参数,必须将参数作为out参数显式传递到方法。
out参数的值不会传递到out参数。
不必初始化作为out参数传递的变量。
然而,必须在方法返回之前为out参数赋值。
属性不是变量,不能作为out参数传递。
如果两个方法的声明仅在out的使用方面不同,则会发生重载。
不过,无法定义仅在ref和out方面不同的重载。
7.值类型与引用类型有什么不同?
请举例说明?
并分别列举几种相应的数据类型。
大多数编程语言提供内置的数据类型(比如整数和浮点数),这些数据类型会在作为参数传递时被复制(即,它们通过值来传递)。
在.NETFramework中,这些称为值类型。
您可以创建值类型的实例,将它们作为参数传递,将它们存储为局部变量,或将它们存储在另一值类型或对象的字段中。
值类型没有与存储类的实例相关的系统开销,并且它们不需要构造函数。
值类型可以有字段、属性和事件。
它们也有静态和非静态方法。
当它们被装箱时,会从System.ValueType继承虚方法,并可实现零个或更多接口。
值类型是密封的,这意味着不能从它们派生出其他类型。
但是,可以直接对值类型定义虚方法,并且既可对该类型的已装箱形式,也可对未装箱形式调用这些方法。
尽管不能从一种值类型派生出另一种类型,但是当所用语言处理虚方法比处理非虚方法或静态方法更方便时,可以对值类型定义虚方法。
引用类型的变量又称为对象,可存储对实际数据的引用。
以下用于声明引用类型的关键字:
"class
"interface
"delegate
8.结构体是值类型还是引用类型的?
是值类型。
9.C#中有没有静态构造函数,如果有是做什么用的?
有.静态构造函数用于初始化类。
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
静态构造函数既没有访问修饰符,也没有参数。
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
无法直接调用静态构造函数。
在程序中,用户无法控制何时执行静态构造函数。
静态构造函数的典型用途是:
当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
10.在C#中如何实现多态?
"多态性"指定义具有功能不同但名称相同的方法或属性的多个类的能力,这些类可由客户端代码在运行时交换使用。
大部分面向对象的编程系统都通过继承提供多态性。
基于继承的多态性涉及在基类中定义方法并在派生类中使用新实现重写它们。
11.什么是反射?
如何实现反射?
反射则提供了封装程序集、模块和类型的对象。
您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。
然后,可以调用类型的方法或访问其字段和属性。
通过反射命名空间中的类以及System.Type,您可以获取有关已加载的程序集和在其中定义的类型(如类、接口和值类型)的信息。
您也可以使用反射在运行时创建类型实例,然后调用和访问这些实例。
12.请解释流与文件有什么不同?
文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。
因此,对于文件,人们常会想到目录路径、磁盘存储、文件和目录名等方面。
相反,流提供一种向后备存储器写入字节和从后备存储器读取字节的方式,后备存储器可以为多种存储媒介之一。
正如除磁盘外存在多种后备存储器一样,除文件流之外也存在多种流。
例如,还存在网络流、内存流和磁带流等。
13. 程序集与命名空间有什么不同?
命名空间是用于避免命名冲突,专用于组织代码,当代码要在其他某个应用程序中重用时,可以降低复杂性。
程序集是重用代码的一种方式
不同:
可以将相同命名空间中的类部署到不同的程序集中,也可以命名空间中的类部署到一个程序集中
命名空间 程序集
有逻辑编译时机制有物理编译时机制
不是运行时实体是运行时实体
为源代码元素的名称提供逻辑结构为可执行文件的运行时提供物理结构
14.请编写一个捕获所有错误的错误处理代码
15.
16.Try{
17.…
18.}catch(Exceptione){…}
19.委托与事件是什么关系?
为什么要使用委托
o委托提供了封装方法的方式,事件是某动作已发生的说明,事件是建立于委托之上的
o程序运行时同一个委托能够用来调用不同的方法只要改变它的引用方法即可
o同一个委托能够用来调用不同的方法,只要改变它引用的方法即可,因此委托调节器用的方法不是在编译时决定的,而是在运行时确定的.
20.一个类中有几种元素?
类由字段,属性,方法组成
21.请解释这种语法现象Session["name"]=20;
给类的索引器赋值.
22.装箱与取消装箱是什么含义?
装箱是值类型到object类型或到该值类型所实现的任何接口类型的隐式转换。
将一个值的值装箱会分配一个对象实例并将该值复制到新的对象中。
取消装箱是从object类型到值类型或从接口类型到实现该接口的值类型的显式转换。
取消装箱操作包括:
"检查对象实例,确保它是给定值类型的一个装箱值。
"将该值从实例复制到值类型变量中。
23.一个构造函数能否调用另一个构造函数,如果能请写出简单的代码
能.
classclass1
{
inty;
publicclass1(){
newclass1(5);
}
publicclass1(inti)
{
this.y=i;
}
publicvoidx(){
Console.WriteLine(y.ToString());
}
staticvoidMain(string[]args)
{
//
class1cl=newclass1(5);
cl.x();
}
}
24.请编写创建一个线程的代码。
usingSystem;
usingSystem.IO;
usingSystem.Threading;
classMyThread{
publicintcount;
stringthrdName;
publicMyThread(stringname){
count=0;
thrdName=name;
}
publicvoidrun(){
Console.WriteLine(thrdName+"starting.");
do{
Thread.Sleep(500);
Console.WriteLine("In"+thrdName+",countis"+count);
count++;
}while(count<10);
Console.WriteLine(thrdName+"terminating.");
}
}
classMultiThread{
publicstaticvoidMain(){
Console.WriteLine("Mainthreadstarting.");
MyThreadmt=newMyThread("Child#1");
ThreadnewThrd=newThread(newThreadStart(mt.run));
newThrd.Start();
do{
Console.Write(".");
Thread.Sleep(100);
}while(mt.count!
=10);
Console.WriteLine("Mainthreadending.");
}
}
25.Params是什么含义?
params关键字可以指定在参数数目可变处采用参数的方法参数。
在方法声明中的params关键字之后不允许任何其他参数,并且在方法声明中只允许一个params关键字。
26.C#中有没有运算符重载?
能否使用指针?
o重载操作符意味着使该操作符具有不同的行为
o使用操作符可以使方程式简单易懂
o重载运算符使用operator关键字来创建一个运算符方法
能使用指针,在C#中很少需要使用指针,但仍有一些需要使用的情况。
例如,在下列情况中使用允许采用指针的不安全上下文是正确的:
"处理磁盘上的现有结构
"涉及内部包含指针的结构的高级COM或平台调用方案
"性能关键代码
不鼓励在其他情况下使用不安全上下文。
具体地说,不应该使用不安全上下文尝试在C#中编写C代码。
27.C#中有很多类被定义为public有什么意义?
Public关键字将公共访问权限授予一个或多个被声明的编程元素。
对公共元素的可访问性没有限制。
28.Internal修饰符有什么含义?
internal关键字是类型和类型成员的访问修饰符。
内部成员只有在同一程序集中的文件内才是可访问的。
内部访问通常用于基于组件的开发,因为它使一组组件能够以私有方式进行合作,而不必向应用程序代码的其余部分公开。
例如,用于生成图形用户界面的框架可以提供"控件"类和"窗体"类,这些类通过使用具有内部访问能力的成员进行合作。
由于这些成员是内部的,它们不向正在使用框架的代码公开。
在定义具有内部访问能力的成员的程序集外部引用该成员是错误的。
29.JAVA的代码是半编译半解释的C#的代码是否也是这样
C#源码经过语言编译器执行第一次编译,变为中间语言,然后再由CLR编译成可执行代码.
30.私有程序集与共享程序集有什么区别?
私有程序集:
o默认情况下,C# 程序编译为私有程序集
o需要放在应用程序所在的文件夹中
o程序集的名称在应用程序中应当是唯一的
共享程序集:
o可以被不同的应用程序共享
o在所有使用程序集的应用程序中,程序集名称应当是唯一的
o放在全局程序集缓存中
31.请解释进程与线程的区别?
进程与程序的区别?
用最简短的话来说,进程就是当前运行的应用程序。
线程是操作系统向其分配处理器时间的基本单位。
线程可执行进程的任何一部分代码,包括当前由另一线程执行的部分。
32.CLR与IL分别是什么含义?
CLR(公共语言运行库):
能管理内存,能够轻松地设计其对象可以跨语言互动的组件和应用程序,编译一次,并可以在任何支持运行库的CPU和操作系统上运行,跨语言集成(特别是跨语言继承)
IL(中间语言):
可用于语言互操作性,IL不是字节代码,但很接近字节代码,因此执行应用程序时,IL到机器代码的转换要快很多。
独立于CPU的指令集。
由CLR转换为特定于CPU的代码。
33.对象能否调用静态方法
对象能调用静态方法。
34.请说明如下代码的结果
classFather{
voidshow(){
Console.Write("Father");
}
staticvoidMain(string[]args){
Fatherobj=newChild();
obj.show();
}
}
classChild:
Father{
voidshow(){
Console.Write("Child");
}
}
执行结果为:
Father.
二、 asp.NET
1. asp.NET中的身份验证有那些?
请解释。
(1)Windows验证:
指定Windows身份验证作为默认的身份验证模式.如果是任何形式的Internet信息服务(IIS)身份验证,则使用此模式.
(2)Forms验证:
指定基于asp。
NET窗体的身份验证作为默认的身份验证模式。
(3)Passport:
指定MicrosoftPassport身份验证作为默认的身份验证模式。
(4)None:
不指定身份验证,仅适用于匿名用户,或者应用程序可以处理事件以提供它们自己的身份验证情况。
2.什么是WEB控件?
使用WEB控件有那些优势?
WEB控件是能拖放在WEB页面上的控件
WEB控件分为:
内部控件,列表控件,复杂控件,验证控件
oWEB控件优势:
Web控件是对象
-与对象一样,Web控件拥有方法和属性,并且响应事件
-一旦将Web控件包括在Web页中,就可以设置其属性并调用其方法
-可以为Web控件编写服务器端代码以响应在客户端上发生的事件
3.请解释asp。
NET中以什么方式进行数据验证?
是以验证控件进行数据验证的。
4.请谈谈对正则表达式的看法?
能将一些比较复杂的验证逻辑以简单的验证表达式验证.
5. asp。
NET中共有几种类型的控件?
各有什么区别?
WEB控件分为:
内部控件,列表控件,复杂控件,验证控件
内部控件--内部控件的使用方法与HTML控件相同,它们映射到HTML元素并通过使用runat="server"属性在服务器上执行
列表控件--用于在Web页中创建数据列表
复杂控件--o当希望控件拥有复杂的功能或使用HTML元素无法创建的功能丰富的用户界面时,可以使用复杂控件
验证控件--输入控件的数据需要进行准确性和取值范围方面的检查
6.WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?
自动传回是什么?
为什么要使用自动传回。
由于asp。
NET是Web页面和服务端分离的,因此要产生了服务端事件.
o使用_doPostBack函数能够自动地把客户端的javascript事件转变为一个服务器端的事件
框架自动为我们处理有关的细节简化工作
使用自动传回的特性:
在检测到一个特定用户动作时,自动传回能够将这个页面传回服务器以处理事件.
7.WEB控件及HTML服务端控件能否调用客户端方法?
如果能,请解释如何调用?
8. asp.NET与asp相比有什么优势?
asp的缺点:
(1)VBScript和JavaScript是在asp中仅可使用的两种脚本语言。
它们是基本的非类型化语言。
在asp中不能使用强类型语言.
(2) asp页面需要解释,使得它执行速度较慢。
(3) asp页面非常凌乱。
(4)在使用asp创建WEB应用程序时,程序员和设计人员必须在同一文件上一起工作。
(5)在asp中,必须通过编写代码来提供所需的任何功能。
(6)在asp中没有对代码给予太多的关注。
(7)在asp中没有调试机制。
(8)在asp中。
必须停止WEB服务器才能安装DLL的新版本,并且在应用程序中使用DLL的新版本之前,必须先在注册表中注册它,而且,DLL注册过程非常复杂。
asp.NET的优点:
(1) asp。
NET中支持强类型语言.
(2) asp。
NET页将被编译而不是解释,这样它们的执行速度就比asp页快。
(3) asp。
NET提供声明性服务器控件。
(4) asp。
NET通过继承机制来支持代码的重用。
(5) asp。
NET具有Trace的内置方法,可以帮助对页面进行调试。
(6)在asp。
NET中,置于应用程序的BIN目录中的任何组件将自动对应用程序可用.
9.请解释web.config文件中的重要节点
动态调试编译--,自定义错误信息--,身份验证-,授权--,应用程序级别跟踪记录--,会话状态设置--,全球化--
10.请解释asp。
NET中的web页面与其隐藏类之间的关系?
继承的关系
11.什么是viewstate,能否禁用?
是否所用控件都可以禁用?
可以全部禁用,viewstate就是hiddeninput,只不过加上了微软的编码方式
13.当发现不能读取页面上的输入的数据时很有可能是什么原因造成的?
怎么解决
可能就是事件没有关联,或者根本就没有写读取代码。
14.请解释一个WEB页面中代码执行次序。
参看.cs知道最先执行OnInit();然后到Page_Load,最后到具体的执行事件。
15.请解释什么是上下文对象,在什么情况下要使用上下文对象
HttpContext,在类中调用的时候需要用到HttpContext
16.请解释转发与跳转的区别?
Transfer是转发包括HttpHandler对象
Redirect就是跳转
17.请解释asp.NET中不同页面之间数据传递有那些方式?
Postget
18.请解释asp。
NET中buttonlinkbuttonimagebutton及hyperlink这四个控件之间的功别
这个地球人都知道
19.请解释一下。
NET多层应用程序中层与层之间以那几种方式进行数据传递。
并解释你自己的项目中采用那种方式进行。
这个传递方式不定,很多都是传递DataSet,我喜欢使用DataTable
20.如果出现asp。
NET中的事件不能触发可能由于什么原因造成?
事件丢失,特别是使用vss的时候最容易造成这种情况,原因不明
21.如果需要在datagride控件中的某一列中添加下拉列表框并绑定数据怎么解决?
使用模板列来添加dropdownlist,绑定数据使用代码前置的方式
22.请解释中的数据绑定与传统数据绑定有什么区别?
传统用的太少
23.请解释.net采用委托实现的事件模型与JAVA中采用接口实现的事件模型有什么区别,以图示方式解释。
如果你不会java难道就不能胜任这个工作吗?
24.请解释接口的显式实现有什么意义?