腾讯.NET基础面试题,居然这么老

科技   2024-10-22 07:16   北京  

网友收集的腾讯古老面试题。如下:

答题要求:打*号的部分为必答题,未指明为多选题的选择题均为单选题。

一、.Net Framework部分*

  1. 装箱、拆箱操作发生在: ( C   )

A.类与对象之间   B.对象与对象之间

C.引用类型与值类型之间   D.引用类型与引用类型之间

  1. 用户类若想支持Foreach语句需要实现的接口是: (  B  )

A.IEnumerable     B.IEnumerator

C.ICollection     D.ICollectData

  1. .Net Framework通过什么与COM组件进行交互操作?( C   )

A.Side By Side   B.Web Service

C.Interop D.PInvoke

  1. .Net依靠以下哪一项技术解决COM存在的Dll Hell问题的?(  A  )

A.Side By Side  B.Interop

C.PInvoke D.COM+

  1. 装箱与拆箱操作是否是互逆的操作?( A   )

A.是   B.否

  1. 以下哪个是可以变长的数组?(  D  )

A.Array   B.string[]

C.string[N]  D.ArrayList

  1. 用户自定义异常类需要从以下哪个类继承:( C   )

A.Exception                              B.CustomException

C.ApplicationException   D.BaseException

  1. 以下代码段中能否编译通过?请给出理由。
try
{
}
catch(FileNotFoundException e1)
{
}
catch(Exception e2)
{
}
catch(IOException e3)
{
}
catch
{
}

不能编译通过,因为e3是e2的子类,所有属于e3异常会被e2捕获。

  1. 对于一个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务?(多选) (    BD    )

A.Close    B.Dispose
C.Finalize D.using    E.Quit

  1. .Net依赖以下哪项技术实现跨语言互用性?(  C  )

A.CLR   B.CTS    C.CLS                  D.CTT

  1. 请问: String类与StringBuilder类有什么区别?为什么在.Net类库中要同时存在这2个类?(简答)

和JAVA中的StringBuffer类似,StringBuilder可以提高字符串连接时的性能。因为String是只读的,连接时内存中需要存在临时对象,而StringBuilder在内存中仅仅只有一份。

  1. 以下哪个类是int的基类?(  C  )

A.Int32   B.Object  C.ValueType   D.Int16

二、C# 部分*

  1. 以下哪些可以作为接口成员?(多选) ( ABDE)

A.方法      B.属性      C.字段      D.事件      E.索引器 F.构造函数      G.析构函数

  1. 以下关于ref和out的描述哪些项是正确的?(多选) ( ACD       )

A.使用ref参数,传递到ref参数的参数必须最先初始化。

B.使用out参数,传递到out参数的参数必须最先初始化。

C.使用ref参数,必须将参数作为ref参数显式传递到方法。

D.使用out参数,必须将参数作为out参数显式传递到方法。

  1. “访问范围限定于此程序集或那些由它所属的类派生的类型”是对以下哪个成员可访问性含义的正确描述?(  D )

A.public  B.protected    C.internal             D.protected internal

可访问性的关键字有如下5个:

internal:在所属程序集中可以访问。

private:私有成员, 在当前类中可以访问。

protected:保护成员,在当前类及其子类中可以访问。

public:公共成员,完全公开,没有访问限制。

internal protected:在所属程序集或当前类的子类中可以访问。(题目中未提及)

【扩展】

类的修饰符:abstract,sealed,static,unsafe 4个。

abstract:类是抽象的,不能创建类的实例

sealed:类是密封的,不能被继承

static:类是静态的,只有静态成员,没有非静态成员

unsafe:类有非安全的结构,比如指针


abstract class BaseClass
{
    public virtual void MethodA()
    {
    }
    public virtual void MethodB()
    {
    }
}
class Class1: BaseClass
{
    public void MethodA(string arg)
    {
    }
    public override void MethodB()
    {
    }
}
class Class2: Class1
{
    new public void MethodB()
    {
    }
}
class MainClass
{
    public static void Main(string[] args)
    {
        Class2 o = new Class2();
        Console.WriteLine(o.MethodA());
    }
}

请问,o.MethodA调用的是: (    )

A.BaseClass.MethodA

B.Class2.MethodA

C.Class1.MethodA

D.都不是

  1. 请叙述属性与索引器的区别。
  1. 请叙述const与readonly的区别。

const必须在声明时赋值,而readonly可以在构造函数中赋值;

const会被编译器优化,编译后const常量会消失,而readonly在运行时才确定值;

当版本升级,const变量修改后,调用const变量的所有应用程序需要重新编译,而readonly不需要重新编译。

  1. 请叙述类与结构的区别。

1)语法不同(比如class默认是无参构造函数,但是可以显示声明;struct不能显示声明无参构造函数)。

2)struct对struct赋值是拷贝,而class是引用。

3)struct不能存在继承,class可以继承一个class

4)struct定义的属性不能直接在构造函数给赋值,但是class可以。

5)struct没有析构函数和重写什么的概念(因为不存在继承啊)。

  1. 从值类型和引用类型的区别展开

1、值类型通常被分配在栈上,它的变量直接包含变量的实例,使用效率比较高。

2、引用类型分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。

3、值类型继承自ValueType(注意:而System.ValueType又继承自System.Object);而引用类型继承自System.Object。

4、值类型变量包含其实例数据,每个变量保存了其本身的数据拷贝(副本),因此在默认情况下,值类型的参数传递不

会影响参数本身;而引用类型变量保存了其数据的引用地址,因此以引用方式进行参数传递时会影响到参数本身,因为两个变量会引用了内存中的同一块地址。

5、值类型有两种表示:装箱与拆箱;引用类型只有装箱一种形式。我会在下节以专门的篇幅来深入讨论这个话题。

6、典型的值类型为:struct,enum以及大量的内置值类型;而能称为类的都可以说是引用类型。

7、值类型的内存不由GC(垃圾回收,Gabage Collection)控制,作用域结束时,值类型会自行释放,减少了托管堆的压力,

因此具有性能上的优势。例如,通常struct比class更高效;而引用类型的内存回收,由GC来完成,微软甚至建议用户最好不要自行释放内存。

8、值类型是密封的(sealed),因此值类型不能作为其他任何类型的基类,但是可以单继承或者多继承接口;而引用类型一般都有继承性。

9、值类型不具有多态性;而引用类型有多态性。

10、值类型变量不可为null值,值类型都会自行初始化为0值;而引用类型变量默认情况下,创建为null值,表示没有指向

任何托管堆的引用地址。对值为null的引用类型的任何操作,都会抛出NullReferenceException异常。

11、值类型有两种状态:装箱和未装箱,运行库提供了所有值类型的已装箱形式;而引用类型通常只有一种形式:装箱。

  1. Override与重载有什么区别?

Override涉及到继承,而重载则是方法的名称相同,而签名不同

重写(override)指用override关键字重新实现基类中的虚方法,在运行过程中,无论通过哪个类型的引用,真正对象类型的方法将被调用。

重载(overload)指多个方法共享一个名字并且拥有相同的返回值,但是拥有不同的参数。

隐藏(new)指用new关键字重新实现基类中的方法,在运行的过程中通过引用的类型判断应该调用哪个类型的方法。

  1. 怎样理解静态变量?

类的静态变量只维护一份

C#中的委托是什么?

答:委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的调用可以像

其他任何方法一样,具有参数和返回值。

委托是函数的封装,代表一"类"函数,它们都符合一定的签名:拥有相同的参数列表、返回值类型。

同时,委托也可以看成是对函数的抽象,是函数的"类"。此时委托的实例代表一个具体的函数

三、ASP.NET & ADO.NET部分*

  1. 您需要创建一个ASP.NET应用程序,公司考虑使用Windows身份认证。

所有的用户都存在于AllWin这个域中。您想要使用下列认证规则来配置这个应用程序:匿名用户不允许访问这个应用程序。所有雇员除了Tess和King都允许访问这个应用程序。请问您应该使用以下哪一个代码段来配置这个应用程序?(B    )

A. <authorization>

<deny users=”allwin\tess, allwin\king”>

<allow users=”*”>

<deny users=”?”>

</authorization>

B. <authorization>

<allow users=”*”>

<deny users=”allwin\tess, allwin\king”>

<deny users=”?”>

</authorization>

C.  <authorization>

<deny users=”allwin\tess, allwin\king”>

<deny users=”?”>

<allow users=”*”>

</authorization>

D. <authorization>

<allow users=”allwin\tess, allwin\king”>

<allow users=”*”>

</authorization>

E. <authorization>

<allow users=”*”>

<deny users=”allwin\tess, allwin\king”>

</authorization>

  1. 您要创建一个显示公司员工列表的应用程序。您使用一个DataGrid控件显示员工的列表。您打算修改这个控件以便在这个Grid的Footer显示员工合计数。请问您应该怎么做?(  C  )

A.重写OnPreRender事件,当Grid的Footer行被创建时显示合计数。

B.重写OnItemCreated事件,当Grid的Footer行被创建时显示合计数。

C.重写OnItemDataBound事件,当Grid的Footer行被创建时显示合计数。

D. 重写OnLayout事件,当Grid的Footer行被创建时显示合计数。

  1. 您要创建ASP.NET应用程序用于运行AllWin公司内部的Web站点,这个应用程序包含了50个页面。您想要配置这个应用程序以便当发生一个HTTP代码错误时它可以显示一个自定义的错误页面给用户。您想要花最小的代价完成这些目标,您应该怎么做?(多选)( AD    )

A.在这个应用程序的Global.asax文件中创建一个Application_Error过程去处理ASP.NET代码错误。

B.在这个应用程序的Web.config文件中创建一个applicationError节去处理ASP.NET代码错误。

C.在这个应用程序的Global.asax文件中创建一个CustomErrors事件去处理HTTP错误。

D.在这个应用程序的Web.config文件中创建一个CustomErrors节去处理HTTP错误。

E.在这个应用程序的每一页中添加一个Page指示符去处理ASP.NET 代码错误。

F. 在这个应用程序的每一页中添加一个Page指示符去处理ASP.NET HTTP错误。

  1. 您的公司有一个DB Server,名为AllWin,其上装了MS SQLSERVER 2000。现在需要您写一个数据库连接字符串,用以连接AllWin上SQL SERVER中的一个名为PubBase实例的Test库。请问,应该选择下面哪一个字符串?(   D )

A. “Server=AllWin;Data Source=PubBase;Initial Catalog=Test; Integrated Security=SSPI”

B. “Server= AllWin;Data Source=PubBase;Database=Test; Integrated Security= SSPI”

C. “Data Source= AllWin \PubBase;Initial Category=PubBase; Integrated Security= SSPI”

D. “Data Source= AllWin \ PubBase;Database=Test; Integrated Security= SSPI”

  1. 您为AllWin公司创建了一个ASP.NET应用程序。这个应用程序调用一个 Xml Web Service。这个Xml Web Service将返回一个包含了公司雇员列表的DataSet对象。请问您该如何在这个程序中使用这个Xml Web Service?(B    )

A.在“引用”对话框的.Net标签中选择System.Web.Services.dll。

B.在“Web引用”对话框中输入这个XML Web service的地址。

C.在您的Global.asax.cs中添加一条using语句并指定这个XML Web service的地址。

D.在您的Global.asax.cs中写一个事件处理器导入这个Xml Web Service相应的.wsdl和.disco文件。

  1. 您要创建一个ASP.NET应用程序在DataGrid控件中显示一个经过排序的列表。产品数据被存放于一个名为PubBase的Microsoft SQL Server 数据库。每个产品的主键是ProductID,Numeric型并且每个产品有一个字母描述字段,名为ProductName。您使用一个SqlDataAdapter对象和一个SqlCommand对象通过调用一个存储过程从数据库中获取产品数据。您将SqlCommand对象的CommandType属性设置为CommandType.StoredProcedure,并将它的CommandText属性设置为procProductList。您成功的获取了一个DataTable对象,其中是已经按ProductID降序排列的产品列表。您打算显示以相反的字母顺序排列的ProductName,请问该怎么做?(B    )

A. 将SqlCommand对象的CommandType属性修改为CommandType.Text,将CommandText属性修改为”SELECT * FROM procProductList ORDER BY ProductName DESC”。然后将这个DataTable对象绑定到DataGrid控件。

B. 创建一个基于这个DataTable对象的新的DataView并将这个DataView的Sort属性设置为“ProductName DESC”。然后将这个DataView对象绑定到DataGrid控件。

C. 将DataGrid控件的AllowSorting属性设置为True,并将DataGridColumn的SortExpression属性设置为 “ProductName DESC”.以显示ProductName。然后将这个DataTable对象绑定到DataGrid控件。

D. 将DataTable对象的DisplayExpression属性设置为 “ORDER BY ProductName DESC”.。然后将这个DataTable对象绑定到DataGrid控件。

  1. 用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

多层架构问题

  1. ASP.NET 页面之间传递值的几种方式?

    有 querystring,cookie,session,server.transfer,application 5种方式

    【扩展】

    1.使用QueryString方式(或称url传值、Response.Redirect传值),这是最简单的方式,因为传递的值在浏览器的url中会显示出来,所以用来传递没有安全要求的值。

    发送页面代码:

    Response.Redirect("index.aspx?username="+txtUserName.Text.Trim());

接收页面代码:

     if(Request.QueryString["username"]!=null)

     {

         strUserName = Request.QueryString["username"];

     }

2.使用cookie方式,cookie由服务器创建,但是保存在客户端

发送页面代码:

     HttpCookie userName = new HttpCookie("username");

     userName.Value = this.txtUserName.Text.Trim();

     Response.Cookies.Add(userName);

     Response.Redirect("index.aspx");

接收页面代码:

     if (Request.Cookies["username"] != null)

     {

         strUserName = Request.Cookies["username"].Value;

     }

3.使用Session变量,session在用户向服务器发出首次请求时被创建,在服务器端,在用户关闭浏览器或异常发生时终止(还有别的session过期情况)。

发送页面代码:

    Session["username"] = this.txtUserName.Text.trim();

    Response.Redirect("index.aspx");

接收页面代码:

     if (Session["username"] != null)

     {

         strUserName = Session["username"].ToString();

     }

4.使用Application变量

发送页面代码:

    Application["username"] = this.txtUserName.Text.trim();

    Response.Redirect("index.aspx");

接收页面代码:

    if (Application["username"] != null)

     {

         strUserName = Application["username"].ToString();

     }

5.使用Server.Transfer方式(或称为HttpContext方式),要传递的变量可以通过属性或方法来获得,使用属性比较容易一些。

发送页面制作一个属性:

     public string GetName

     {

        get { return this.txtUserName.Text.Trim(); }

}

发送页面代码:

    1 Server.Transfer("index.aspx");

    接收页面代码:

    w = (WebForm4)Context.Handler;

    strUserName = w.GetName;
  1. 微软推出了一系列的Application Block,请举出您所知道的Application Block并说明其作用?

讲述的越多、越清楚越好

  1. 请列举一些您用到过的设计模式以及在什么情况下使用该模式?

比较基础的单例模式、命令模式、工厂模式、策略模式应该讲清楚

.NET糖果网

出处:donet5.com/Doc/4/73


关注公众号DotNet开发跳槽    

DotNet开发跳槽
本公众号专注为.net开发工程师提供一个学习技术及求职/跳槽的交流平台。不定期分享NET技术类文章、面试题、求助技巧等干货,原创文章300+篇,让.net开发工程师学习/面试不再迷茫。ps: 后台回复“跳槽”,免费领取.NET开发面试题!
 最新文章