码迷,mamicode.com
首页 > Windows程序 > 详细

C#基础概念面试题整理

时间:2015-11-29 13:31:30      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

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

internal:当前程序集内可以访问

----------------------------------------------------------------------

2,ADO.Net中的五个主要对象

Connection:主要是开启程序和数据库之间的连接。

Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达增删改查等指令,以及调用数据库的存储过程等。

DataAdapter:主要是在数据源以及DataSet之间执行数据传输的工作,它可以透过Command对象下达命令后,将取得的数据放入DataSet对象中。

DataSet:这个对象可以视为一个暂存区Cache,可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。

DataReader:当我们只需要循序的读取数据库而不需要其它操作时,可以使用DataReader对象。一次一笔的循序向下读取数据源中的数据,因为这个限定所以使用起来不但节省资源而且效率很好。

Ado.Net用Connection对象来连接数据库,使用Command或DataAdapter对象来执行SQL语句并将执行的结果返回给DataReader或DataAdapter然后再使用取得的DataReader或DataAdapter独享操作数据结果。

-----------------------------------------------------------------------

3,Asp.Net页面之间传递值得集中方式

-->QueryString,Response.Redirect();

-->Session变量

-->Server.Transfer

-->Cookie传值

-----------------------------------------------------------------------

4,C#中的委托是什么,事件是不是一种委托,事件和委托的关系

委托可以把一个方法作为参数代入另一个方法。

委托可以理解为指向一个函数的指针。

委托和事件没有可比性,因为委托是类型,事件是对象。

-->委托的对象和事件的区别:

    事件的内部使用委托实现的。因为对于事件来讲,外部只能注册和注销,外界不可以注销其它的注册者,不可以主动出发事件,因此如果用委托就没办法进行这种控制,因此诞生了事件这种语法。事件内部就是一个private的委托和Add,Remove两个方法。

-----------------------------------------------------------------------

5,override与重载(overload)的区别

重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载是面向过程的概念

重写是进行基类中函数的重写。Override是面向对象的概念。

----------------------------------------------------------------------

6,C#中索引器是否只能根据数字进行索引?是否允许多个索引器参数?

参数的个数和类型都是任意的。索引器的内部本质上就是set_item,get_item方法

索引的语法:public string this[string s],通过get,set块来定义取值,赋值和逻辑

索引可以有多个参数,参数类型任意

索引可以重载

如果只有get没有set就是只读的索引

----------------------------------------------------------------------

7,属性和public字段的区别是什么?调用set方法为一个属性设值,然后用get方法读取出来的值一定是set进去的值嘛?

属性可以对设置,取值的过程进行非法值控制,比如年纪禁止设置负数,而字段则不能进行这样的设置。虽然一般情况下get读取的值就是set设置的值,但是可以让get读取的值不是set设置的值。

----------------------------------------------------------------------

8,三层架构:

表现层,业务逻辑层,数据访问层

区分层次的目的即为了“高内聚,低耦合”的思想

三层架构是N层结构的一种,一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前,上层代码是无法开发的,下层代码接口(契约)的变化是将上层的代码一起变化。

 

数据访问层对数据库进行增删改查

业务层一般分为二层,业务表示层实现与表示层的沟通,业务规则层实现用户密码的安全等。

表示层为了与用户交互例如用户添加表单

 

优点:分工明确,条理清晰,易于调试,而且具有可扩展性。

缺点:增加成本。

---------------------------------------------------------------------

9,关于拆箱和装箱

-->什么是拆箱和装箱?

    装箱:从值类型接口转换到引用类型。

    拆箱:从引用类型转换到值类型。

    object obj=null;引用类型

    obj=1;装箱

    int i1=(int)obj;拆箱

.net重要技术和基础之一的CTS(类型系统)。CTS是为了实现在应用程序声明和使用这些类型时,必须遵循的规则而存在的通用类型系统,.net将整个系统的类型分成两大类:值类型和引用类型。

CTS中所有的东西都是对象,所有的对象都源自于一个基类Object类型。值类型的一个最大的特点就是它们不能为null,值类型的变量总有一个值。为了解决值类型不可以为null,引用类型可以为null的问题,微软在.net中引入了拆箱和装箱:装箱就是将值类型用引用类型包装起来转换为引用类型,而从引用类型中拿到被包装的值类型数据进行拆箱。

---------------------------------------------------------------------

10,CTS,CLS。CLR

-->CLR:common language runtime,.net Framework的核心,运行库的执行环境,称为公共语言运行库

-->CTS:common type system,通用类型系统。它定义了可以在中间语言中使用的预定义数据类型,所有用于.netFramework的语言都可以生成最终基于这些类型的编译代码

-->CLS:common langguage specification,和CTS一起确保语言的互操作性

-------------------------------------------------------------------

11,C#和.net的关系

C#知识抽象的语言,.net是这种语言规范的运行环境

-------------------------------------------------------------------

12,类与结构的异同

Class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。

Struct属于值类型,是分配在内存的栈上的,结构体是复制传递的。Int32,Boolean等都属于结构体;

------------------------------------------------------------------

13,堆和栈的区别

栈是编译期间就分配好的内存空间,因此你得代码中必须就栈的大小有明确的定义;局部值类型变量,值类型参数等都在栈内存中。

堆事程序运行期间动态分配的内存空间,可以根据程序的运行情况确定要分配的堆内存大小

------------------------------------------------------------------

14,能用foreach遍历访问的对象的要求

需要实现Ienumerable接口或声明GetEnumerator方法的类型。

-------------------------------------------------------------------

15,GC是什么,为什么要有GC?

GC是垃圾收集器。GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,比如FileStream或者SqlConnection需要程序员调用Dispost进行资源的回收。

要请求垃圾回收,可以调用下面的方法GC.Collect(),当一个对象没有任何变量指向(不能再使用)的时候就可以被回收了。但是不一定会被立即回收。

------------------------------------------------------------------

16,值类型和引用类型的区别:

-->将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。

-->值类型不可能派生出新的类型,所有的值类型均派生自System.ValueType。但与引用类型相同的是,结构也可以实现接口。

-->值类型不可能包含null值,然而可控类型功能将允许将null赋值给值类型

-->每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

--------------------------------------------------------------------

17,C#中接口和类有什么异同

不同点:

    不能直接实例化接口

    接口不包含方法的实现

    接口可以多继承,类只能单继承

    类定义可以在不同的源文件之间进行拆分。

相同点:

    接口,类和结构都可以从多个接口继承

    接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员

    接口和类都可以包含事件,索引器,方法和属性。

接口只能定义方法(只能定义行为,不能定义实现也就是字段),因为事件,索引器,属性本质上都是方法,所以接口中也可以定义事件,索引器,属性

-----------------------------------------------------------------------

18,abstract class(抽象类)和interface有什么区别

相同点:

    都不能直接被实例化,都可以通过继承实现其抽象方法

不同点

    接口支持多继承,抽象类不能实现多继承

    接口只能定义行为,抽象类既可以定义行为还能提供实现

    接口只包含方法,属性,索引器,事件的签名,但不能定义字段和包含实现的方法;

    抽象类可以定义字段属性,包含有实现的方法

    接口可以作用于值类型和引用类型,抽象类只能作用于引用类型,如Struct可以继承接口,而不能继承类

--------------------------------------------------------------------------

19,string是sealed类故不可以继承。

--------------------------------------------------------------------------

20,using关键字有什么用:什么是IDisposable?

using可以声明namespace的引入

可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源。

---------------------------------------------------------------------------

21,String和StringBuilder的区别

String在进行运算时(如赋值,拼接)会产生一个新的实例而StringBuilder则不会。所以在大量字符串拼接或频繁对一个字符串进行操作时最好使用StringBuilder,不要使用string;

-------------------------------------------------------------------------

22,属性和索引器的区别

属性

    通过名称标识。

    通过简单名称或成员访问来访问

    可以为静态成员或实例成员来访问。

    属性的get访问起没有参数,set访问起包含value参数

索引器

    通过签名标识

    通过元素来访问

    必须为实例成员

    get访问起具有索引器相同的参数

    set访问起除了value参数外索引器的set访问器还具有与索引器相同的形参表。

---------------------------------------------------------------------------

23,虚方法与接口的不同

子类重新定义父类的某一个方法时,必须把父类方法定义为virtual

在定义接口中不能有方法体,虚方法可以

实现时,子类可以不重新定义虚方法,但是如果一个类继承接口,那必须实现这个接口

---------------------------------------------------------------------------

24,DataReader和DataSet的异同

   DataReader使用时始终占用sqlconnection只进只读

   DataSet则是将数据一次性加载在内存中,抛弃数据库链接,读取完毕即关闭,消耗内存但是使用灵活。

---------------------------------------------------------------------------

25,通过超链接怎样传递中文参数

用URL编码,通过querystring传递,用urlencode编码,用urldecode解码

----------------------------------------------------------------------------

26,Server.Transfer仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;Response.Redirect则是完全的跳转,浏览器将会得到转跳后的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到转跳后的链接地址。

-----------------------------------------------------------------------------

27,什么事sql注入,如何避免sql注入

用户根据系统的程序构造非法的参数从而导致程序执行不是程序员期望的恶意sql语句

使用参数化sql就可以避免sql注入

28,post,get的区别

get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中

使用post提交的页面在点击刷新按钮的时候,浏览器一般会提示是否重新提交而get不会

使用get的页面可以被搜索引擎抓取,而用post的则不可以

用post可以条的数量非常大,而用get可以提交的数量则只有2K受限于网页地址的长度

用post可以进行文件的条,而用get则不可以

------------------------------------------------------------------------------

29,Application,Cookie和Session两种回话有什么不同

Application是用来存取整个网站全局的信息,而Session是用来存取与具体某个访问者关联的信息。Cookie是保存在客户端的,机密信息不能保存在Cookie中,只能放小住居;Session是保存在服务器端的比较安全,可以放大数据

-------------------------------------------------------------------------------

30,如何让时间去秒显示

DateTime dt=new DateTeim();

dt.ToShortTimeString()

--------------------------------------------------------------------------------

31,什么叫应用程序域

    应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。

---------------------------------------------------------------------------------

32,什么叫受管制的代码

    unsafe:非托管代码。不经过CLR运行。

---------------------------------------------------------------------------------

33,在C#中,string str=null与string str=""的区别

    null是不给它分配内存空间,而“”给它分配长度为空字符串的内存空间

---------------------------------------------------------------------------------

34,String s=new String("xyz");创建了几个String Object

    两个对象,一个是"xyz",一个是指向“xyz”的引用对象s

---------------------------------------------------------------------------------

35,启动一个线程是用run()还是strart()

    启动一个线程是调用strart()方法。使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由jvm调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标识来停止一个线程。

---------------------------------------------------------------------------------

36,接口是否可以继承接口,抽象类是否可以实现接口,抽象类是否可继承实体类

    接口可以继承接口。抽象类可以实现接口,抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。

---------------------------------------------------------------------------------

37,try{}里有一个return语句,那么紧跟在try{}后面的finally{}里的code会不会被执行,什么时候被执行,在return前还是后

    会执行,在return前执行。

---------------------------------------------------------------------------------

38,swtich是否能作用在byte上,是否能作用在long上,是否能作用在string上

    seitch(expr1)中expr1是一个整数表达式,因此传递给switch和case语句的参数应该是int,short,char或者byte。long.string都不能作用于swtich

--------------------------------------------------------------------------------

39,sleep()和wait有什么区别

    sleep方法是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即恢复执行。这事因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非    a,醒来的线程具有更高的优先级    b,正在运行的线程因为其他原因而阻塞

    wait是线程交互时,如果线程对一个同步对象x发出一个wait调用,该线程会暂停执行,被调用对象进入等待状态,知道被唤醒或等待时间到。

--------------------------------------------------------------------------------

40,进程和线程的区别

    进程是系统进行资源分配和调度的单位,线程是cpu调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。



 

 

C#基础概念面试题整理

标签:

原文地址:http://www.cnblogs.com/Arrogance/p/5004553.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!