C面试习题大全.docx
- 文档编号:11747673
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:119
- 大小:96.79KB
C面试习题大全.docx
《C面试习题大全.docx》由会员分享,可在线阅读,更多相关《C面试习题大全.docx(119页珍藏版)》请在冰点文库上搜索。
C面试习题大全
网上搜集的,应该对你有帮助吧,抽空看看吧.面试还是最重要的.
1.Stringstr=newString("a")和Stringstr="a"有什么区别?
Stringstr="a";这个只是一个引用,内存中如果有“a"的话,str就指向它,如果没有才创建如后还用到"a"这个字符串的话并且是这样用:
Stringstr1="a";Stringstr2="a";Stringstr2="a";这4个变量都共享一个字符串"a"而Stringstr=newString("a");是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str
2.判断字符串变量str是否为空的一下三种方法哪个性能更优
a、str=="";b、str==String.Empty;c、str.Length==0;?
答案是c;
3.string与String的区别
string、int是C#定义的类型,而String、Int32是.net类型即是CTS类型;string是.NET框架中System.String的别名。
string在编译的时候会转化为String类
4.虚方法(virtual)和抽象方法(abstract)的区别?
1:
抽象方法仅有声明,而没有任何实现,如abstractsomeMethod();,虚方法却不能如此
virtual用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。
2:
子类继承父类,可以对父类中的虚方法进行重写、覆盖、不处理三种处理(见5),对抽象方法却必须实现
5.子类对父类中虚方法的处理有重写(override)和覆盖(new),请说明它们的区别?
有父类ParentClass和子类ChildClass、以及父类的虚方法VirtualMethod。
有如下程序段:
ParentClasspc=newChildClass();pc.VirtualMethod(...);
如果子类是重写(override)父类的VirtualMethod,则上面的第二行语句将调用子类的该方法
如果子类是覆盖(new)父类的VirtualMethod,则上面的第二行语句将调用父类的该方法
6.抽象类(abstract)和接口(interface)的区别
抽象类可以有自己的实现,接口却仅有声明,可以有自己的静态数据字段;
java和C#中可以实现多个接口,却只能继承一个抽象类(或者非抽象类)(单继承,和c++的多继承不同);
7.填空:
(1)面向对象的语言具有继承性、多态性、封装性。
(2)能用foreach遍历访问的对象需要实现_IEnumerable___接口或声明_GetEnumerator_方法的类型。
(3)列举ADO.net中的五个主要对象
Connection,Command,DataReader,DataAdapter,DataSet
connection连接对象
command命令对象,指示要执行的命令和存储过程!
datareader是一个向前的只读的数据流。
dataadapter是功能强大的适陪器,支持增删改查的功能
dataset是一个数据级对象,相当与内存中的一张表或多张表
8.不定项选择:
(1)以下叙述正确的是:
BC
A.接口中可以有虚方法。
B.一个类可以实现多个接口。
C.接口不能被实例化。
D.接口中可以包含已实现的方法。
(2)从数据库读取记录,你可能用到的方法有:
BCD
A.ExecuteNonQueryB.ExecuteScalarC.FillD.ExecuteReader
9.简述private、protected、public、internal修饰符的访问权限。
A.Private:
关键字是一个成员访问修饰符。
私有访问是允许的最低访问级别。
私有成员只有在声明它们的类和结构体中才是可访问的,同一体中的嵌套类型也可以访问那些私有成员
B.Protected关键字是一个成员访问修饰符。
受保护成员在它的类中可访问并且可由派生类访问。
有关protected与其他访问修饰符的比较,请参见可访问性级别,只有在通过派生类类型发生访问时,基类的受保护成员在派生类中才是可访问的
C.Internal关键字是类型和类型成员的访问修饰符。
只有在同一程序集的文件中,内部类型或成员才是可访问的
DProtectedInternal它可以看作是Protected与Internal的并集,意思是:
如果是继承关系,无论在不在同一程序集里都能访问;如果不是继承关系,那么只能在同一程序集内访问。
E.Public具有最高级别的访问权限,对访问成员没有限制。
10.写出一条Sql语句:
取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:
ID
可能不是连续的。
)
11.列举ASP.NET页面之间传递值的几种方式。
QueryString,Session和Server.Transfer
12.写出程序的输出结果
classClass1{
privatestringstr="Class1.str";
privateinti=0;
staticvoidStringConvert(stringstr){
str="stringbeingconverted.";
}
staticvoidStringConvert(Class1c){
c.str="stringbeingconverted.";
}
staticvoidAdd(inti){
i++;
}
staticvoidAddWithRef(refinti){
i++;
}
staticvoidMain(){
inti1=10;
inti2=20;
stringstr="str";
Class1c=newClass1();
Add(i1);
AddWithRef(refi2);
Add(c.i);
StringConvert(str);
StringConvert(c);
Console.WriteLine(i1);
Console.WriteLine(i2);
Console.WriteLine(c.i);
Console.WriteLine(str);
Console.WriteLine(c.str);
}
}
13.写出程序的输出结果
publicabstractclassA
{
publicA()
{
Console.WriteLine('A');
}
publicvirtualvoidFun()
{
Console.WriteLine("A.Fun()");
}
}
publicclassB:
A
{
publicB()
{
Console.WriteLine('B');
}
publicnewvoidFun()
{
Console.WriteLine("B.Fun()");
}
publicstaticvoidMain()
{
Aa=newB();
a.Fun();
}
}
14.写出程序的输出结果:
publicclassA
{
publicvirtualvoidFun1(inti)
{
Console.WriteLine(i);
}
publicvoidFun2(Aa)
{
a.Fun1
(1);
Fun1(5);
}
}
publicclassB:
A
{
publicoverridevoidFun1(inti)
{
base.Fun1(i+1);
}
publicstaticvoidMain()
{
Bb=newB();
Aa=newA();
a.Fun2(b);
b.Fun2(a);
}
}
15.一列数的规则如下:
1、1、2、3、5、8、13、21、34......求第30位数是多少,用递归算法实现。
16.程序设计:
猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。
(C#语言)
要求:
1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。
参考答案
1.
(1)继承性、封装性、多态性。
(2)IEnumerable、GetEnumerator(3)对ADO.net的了解
2.
(1)B、C(考对接口的理解)
(2)B、C、D(考查对ADO.net的熟练程度)
3.private:
私有成员,在类的内部才可以访问。
protected:
保护成员,该类内部和继承类中可以访问。
public:
公共成员,完全公开,没有访问限制。
internal:
在同一命名空间内可以访问。
4.解1:
selecttop10*fromAwhereidnotin(selecttop30idfromA)
解2:
selecttop10*fromAwhereid>(selectmax(id)from(selecttop30idfromA)asA)
5.1.使用QueryString,如....id=1;response.Redirect()2.使用Session变量3.使用Server.Transfer
6.(考查值引用和对象引用)
10
21
0
Str
stringbeingconverted.
7.AB
A.Fun()
(考查在继承类中构造函数,以及new方法,)
8.2
5
1
6
评分标准:
答对一点得2分,两点得5分,3点得7分。
全对得10分。
9.
publicclassMainClass
{
publicstaticvoidMain()
{
Console.WriteLine(Foo(30));
}
publicstaticintFoo(inti)
{
if(i<=0)
return0;
elseif(i>0&&i<=2)
return1;
elsereturnFoo(i-1)+Foo(i-2);
}
}
评分标准:
写出returnFoo(i-1)+Foo(i-2);得5分。
写出if(i>0&&i<=2)return1;得5分。
方法参数过多需要扣分(扣除分数=参数个数-1)
不用递归算法扣5分
(递归算法在树结构建立等方面比较常用)
10.要点:
1.联动效果,运行代码只要执行Cat.Cryed()方法。
2.对老鼠和主人进行抽象
评分标准:
<1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
<2>从Mouse和Master中提取抽象(5分)
<3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。
(3分)
publicinterfaceObserver
{
voidResponse();//观察者的响应,如是老鼠见到猫的反映
}
publicinterfaceSubject
{
voidAimAt(Observerobs);//针对哪些观察者,这里指猫的要扑捉的对象---老鼠
}
publicclassMouse:
Observer
{
privatestringname;
publicMouse(stringname,Subjectsubj)
{
this.name=name;
subj.AimAt(this);
}
publicvoidResponse()
{
Console.WriteLine(name+"attempttoescape!
");
}
}
publicclassMaster:
Observer
{
publicMaster(Subjectsubj)
{
subj.AimAt(this);
}
publicvoidResponse()
{
Console.WriteLine("Hostwaken!
");
}
}
publicclassCat:
Subject
{
privateArrayListobservers;
publicCat()
{
this.observers=newArrayList();
}
publicvoidAimAt(Observerobs)
{
this.observers.Add(obs);
}
publicvoidCry()
{
Console.WriteLine("Catcryed!
");
foreach(Observerobsinthis.observers)
{
obs.Response();
}
}
}
classMainClass
{
staticvoidMain(string[]args)
{
Catcat=newCat();
Mousemouse1=newMouse("mouse1",cat);
Mousemouse2=newMouse("mouse2",cat);
Mastermaster=newMaster(cat);
cat.Cry();
}
}
//---------------------------------------------------------------------------------------------设计方法二:
使用event--delegate设计..
publicdelegatevoidSubEventHandler();
publicabstractclassSubject
{
publiceventSubEventHandlerSubEvent;
protectedvoidFireAway()
{
if(this.SubEvent!
=null)
this.SubEvent();
}
}
publicclassCat:
Subject
{
publicvoidCry()
{
Console.WriteLine("catcryed.");
this.FireAway();
}
}
publicabstractclassObserver
{
publicObserver(Subjectsub)
{
sub.SubEvent+=newSubEventHandler(Response);
}
publicabstractvoidResponse();
}
publicclassMouse:
Observer
{
privatestringname;
publicMouse(stringname,Subjectsub):
base(sub)
{
this.name=name;
}
publicoverridevoidResponse()
{
Console.WriteLine(name+"attempttoescape!
");
}
}
publicclassMaster:
Observer
{
publicMaster(Subjectsub):
base(sub){}
publicoverridevoidResponse()
{
Console.WriteLine("hostwaken");
}
}
classClass1
{
staticvoidMain(string[]args)
{
Catcat=newCat();
Mousemouse1=newMouse("mouse1",cat);
Mousemouse2=newMouse("mouse2",cat);
Mastermaster=newMaster(cat);
cat.Cry();
}
}
18.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性,并请举列来加以说明和分析.
19.A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函
数的执行过程.请附code
构造先父后子,析够反之
publicclassTestB
{
publicTestB()
{
Console.Write("begincreateBobject"r"n");
}
~TestB()
{
Console.Write("begindestoryBobject"r"n");
}
}
publicclassTestA:
TestB
{
publicTestA()
{
Console.Write("begincreateAobject"r"n");
}
~TestA()
{
Console.Write("begindestoryAobject"r"n");
}
}
21..Net中读写数据库需要用到哪些类?
他们的作用
sqlconnection连接数据库,sqlcommand执行T-SQL语句,或存储过程
22.ASP.net的身份验证方式有哪些?
分别是什么原理?
提供了3种认证方式:
windows身份验证,Forms验证和Passport验证.windows,身份验证:
IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问.Forms验证:
用Cookie来保存用户凭证,并将未经身份验证的用户重定向到自定义的登录页.Passport验证:
通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录和核心配置文件服务.
23.解释一下UDDI、WSDL的意义及其作用。
UDDI(UniversalDescription,DiscoveryandIntegration)统一描述、发现和集成协议,是为解决Web服务的发布和发现问题而制订的新一代基于Internet的电子商务技术标准。
它包含一组基于Web的、分布式的Web服务信息注册中心的实现标准,以及一组使企业能将自己提供的Web服务注册到该中心的实现标准。
UDDI利用SOAP消息来查找和注册Web服务。
并为应用程序提供了一系列接口来访问注册中心。
24.常用的调用webservice方法有哪些?
三种
利用webservice.htc调用WebService方法
在Internet上调用WebService方法
25.讲一讲你理解的webservice,在dotnetframework中,怎么很好的结合xml(讲概念就行了)
WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。
这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。
WebService是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。
WebService便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得WebService能与其他兼容的组件进行互操作。
它可以使用标准的互联网协议,像超文本传输协议HTTP和XML,将功能体现在互联网和企业内部网上。
WebService平台是一套标准,它定义了应用程序如何在Web上实现互操作性。
你可以用你喜欢的任何语言,在你喜欢的任何平台上写WebService。
可扩展的标记语言XML是WebService平台中表示数据的基本格式。
除了易于建立和易于分析外,XML主要的优点在于它既与平台无关,又与厂商无关。
XML是由万维网协会(W3C)创建,W3C制定的XMLSchemaXSD定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。
WebService平台是用XSD来作为数据类型系统的。
当你用某种语言如VB.NET或C#来构造一个WebService时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。
如想让它使用在不同平台和不同软件的不同组织间传递,还需要用某种东西将它包装起来。
这种东西就是一种协议,如SOAP。
26.C#可否对内存进行直接的操作?
(这可是个难点哦?
要注意!
),如果能,如何操作;如果不能,为什么
可以,用指针来操作
27.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
C#通过提供索引器,可以象处理数组一样处理对象。
特别是属性,每一个元素都以一个get或set方法暴露。
索引器不单能索引数字(数组下标),还能索引一些HASHMAP的字符串,所以,通常来说,C#中类的索引器通常只有一个,就是THIS,但也可以有无数个,只要你的参数列表不同就可以了索引器和返回值无关,索引器最大的好处是使代码看上去更自然,更符合实际的思考模式.
28.面向对象的思想主要包括什么?
封装:
用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。
继承:
子类拥有父类的所有数据和操作。
多态:
一个程序中同名的不同方法共存的情况。
有两种形式的多态–重载与重写。
29.什么是ASP.net中的用户控件
有时可能需要控件中具有内置ASP.NETWeb服务器控件未提供的功能。
在这种情况下,您可以创建自己的控件。
有两个选择。
您可以创建:
用户控件。
用户控件是能够在其中放置标记和Web服务器控件的容器。
然后,可以将用户控件作为一个单元对待,为其定义属性和方法。
自定义控件。
自定义控件是编写的一个类,此类从Control或WebControl派生。
ASP.NETWeb用户控件与完整的ASP.NET网页(.aspx文件)相似,同时具有用户界面页和代码。
可以采取与创建ASP.NET页相似的方式创建用户控件,然后向其中添加所需的标记和子控件。
用户控件可以像页面一样包含对其内容进行操作(包括执行数据绑定等任务)的代码。
用户控件与ASP.NET网页有以下区别:
用户控件的文件扩展名为.ascx。
用户控件中没有@Page指令,而是包含@Control指令,该指令对配置及其他属性进行定义。
用户控件不能作为独立文件运行。
而必须像处理任何控件一样,将它们添加到ASP.NET页中。
用户控件中没有html、body或form元素。
这些元素必须位于宿主页中。
可以在用户控件上使用与在ASP.NET网页上所用相同的HTML元素(html、body或form元除外)和Web控件。
例如,如果您要创建一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面试 习题 大全