天天看点

C# 面试题一

1、         简述private、protected、public、internal修饰符的访问权限

答:private : 私有成员,在类的内部才可以访问

               Protected : 保护成员,该类内部和继承类中可以访问

               Pulbic : 公共成员,完全公开

                Internal : 在同一命名空间内可以访问

2、         C#中,string str = null,str=””,请尽量用文字说明区别

答:string str ="" 分配空间而string str = null不分配空间

3、         请叙述const与readonly的区别

答:const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。

const数据成员的声明式必须包含初值,且初值必须是一个常量表达式。因为它是在编译时就需要完全评估。

const成员可以使用另一个const成员来初始化,前提是两者之间没有循环依赖。

readonly在运行期评估赋值,使我们得以在确保“只读访问”的前提下,把object的初始化动作推迟到运行期进行。

readonly在运行期评估赋值,使我们得以在确保“只读访问”的前提下,把object的初始化动作推迟到运行期进行。根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数。

readonly 只能在声明时或者构造函数里面初始化,并且不能在 static 修饰的构造函数里面。

4、         readonly 只能在声明时或者构造函数里面初始化,并且不能在 static 修饰的构造函数里面。

答:session  简单,但易丢失

      Cookie 简单,但可能不支持

     Input type=”hidden” 简单

     url 参数简单显示于地址栏

5、         概述反射和序列化

答:反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性

      序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用HTTP通过Internet在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。

6、         什么是SOAP,有哪些应用

答:SOAP Simple Object Access Protocol 简单对象访问协议,是一种转量的,简单的,基于XML协议,它被设计成在WEB上交换结构化和固化的信息。SOAP可以和现丰的许多因特网协议和格式结合使用,包括超文本传输协议HTTP,简单邮件传输协议SMTP,多用途网际邮件扩充协议MIME,它还支持从消息系统到远程过程调用RPC等大量的应用程序。Web service 就是一个用编程的方法通过WEB 来调用这个应用程序

7、         ASP.NET中共有几种类型的控件?各有什么区别?

答:HTML控件传统的HTML标记;WEB控件可以回传数据,事件驱动;自定义控件在原有控件的基础上增加功能;复合控件多个子控件复合成一个新的控件。

8、         PDB是什么东西?在调试中它应该放在哪里?

答:PDB是用于保存调试和项目状态信息的文件,在DEBUG的时候产生PDB文件,调试的时候应该放在对应应用程序集相同目录。

9、         简述Ajax原理

答:Ajax简单的讲就是客户端通过javascript脚本获取服务器端的文本,通过解析返回值,更新部分的网页内容。

10、      描述线程与进程的区别

答:开个QQ,开了一个进程;开了迅雷,开了一个进程。

在QQ的这个进程里,传输文字开一个线程、传输语音开了一个线程、弹出对话框又开了一个线程。所以一个进程管着多个线程。

线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。

线程和进程各自有什么区别和优劣呢?

进程是资源分配的最小单位,线程是程序执行的最小单位。

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

11、      什么是windows服务,它的生命周期与标准的exe程序有什么不同

答:windows服务是运行在windows后台指定用户下的应用程序,它没有标准的UI界面,相比标准的EXE程序,windows服务是在服务开始的时候创建,而在服务结束的时候销毁,而且可以设置服务是否与操作系统一起启动,一起关闭。它支持三种方式:1)自动方式 2)手动方式 3)禁用。另外标准的EXE默认使用的当前登录的用户,而windows服务则默认使用system用户,这在对系统资源访问的时候特别需要注意。

12、      什么是强类型,什么是弱类型?哪种更好些,为什么?

答:强类型是在编译的时候就确定类型的数据,在执行的时候类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已确定好了,而且效率高。一般用于编译型编程语言,如C++ JAVA C# 。弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如js.

13、      什么是GAC?它解决了什么问题?

答:Gloal Assembly Cache全局应用程序集缓存,它解决了几个程序共享某一个程序集的问题。不必再将那个被共享的程序集拷贝至应用程序目录了,其实这个道理很简单,.net应用程序在加载的时候,会首先查看全局应用程序集缓存,如果有就可以直接用,没有再到应用程序目录进行查找。

14、      简述面向接口、面向对象、面向方面编程的区别

答:1).面向接口编程: 手段:通过接口规约对象的属性和方法,是面向对象一部分。 目的:统一标准问题,让大家不至于各行其事而对代码的可读性造成影响(公用部分行为)。

  2).面向对象编程: 手段:通过封装、继承、多态等更加有效的组织程序。 目的:解决的是复用问题(让代码可以复用,而不是重复造轮子)。

  3).面向方面编程: 手段:分离业务的主逻辑和次逻辑的一种思想。 目的:解决的是逻辑分离问题(主逻辑和次逻辑分开,其实主要是分离业务逻辑和非业务逻辑分开)。

  总结: 接口->统一行为 对象->重用代码 方面->分离逻辑

15、      简述用repeater实现手工分页的思路

 答:1)页面布局:

<table>

   <tr>

      <td align="center">               <asp:LinkButton ID="lbtnFirstPage" runat="server" OnClick="lbtnFirstPage_Click">页首</asp:LinkButton>              <asp:LinkButton ID="lbtnpritPage" runat="server" OnClick="lbtnpritPage_Click">上一页</asp:LinkButton>               <asp:LinkButton ID="lbtnNextPage" runat="server" OnClick="lbtnNextPage_Click">下一页</asp:LinkButton>              <asp:LinkButton ID="lbtnDownPage" runat="server" OnClick="lbtnDownPage_Click">页尾</asp:LinkButton><br />              第<asp:Label ID="labPage" runat="server" Text="Label"></asp:Label>页/共<asp:Label ID="LabCountPage" runat="server" Text="Label"></asp:Label>页

      </td>

  </tr>

</table>

     2)绑定数据:

真分页主要实现在于sql语句上:

select   top  每页显示的记录数 *  from  topic  where  id  not   in  ( select   top  (当前的页数-1)*每页显示的记录数 id  from  topic  order   by  id  desc )  order   by  id  desc

再查询出总记录数来计算总页数pageCount

int pageCount = (int)Math.Ceiling((double)查询出的总记录数个数/ (double)每页显示的记录数)

之后将返回的数据表直接绑定到repeater控件上,

16、      简述你对webservice的了解

答:webservice是什么:Web Service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。我们把能调用这个Web service 的应用程序叫做客户端程序。

       webservice可以做什么:不同应用程序之间的通信。

      webservcie调用原理:WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议(simple object access protocol,简单对象访问协议) 。

SOAP协议 = HTTP协议 + XML数据格式 

SOAP协议是基于HTTP协议的,两者的关系就好比高速公路是基于普通公路改造的,在一条公路上加上隔离栏后就成了高速公路。

17、      如何理解委托

答:1)委托类似于C++函数指针,但它是类型安全的。2)委托允许将方法作为参数进行传递。3)委托可以链接在一起:例如,可以对一个事件调用多个方法。

18、      override与重载的区别

答:重载是方法的名称相同,参数个数或参数类型不同。

 Override 是进行基类中函数的重写。为了适应需要。

19、      session有什么重大bug,微软提出了什么方法的加以解决?