.Net程序员面试试题

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

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

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

public:没有限制,公开的访问权限;

internal:在程序集内部可以访问;

2:简述ASP.NET页面之间传值的几种方式?

Querystring():

Cookie:

Session:

Server.Transfer:

3:C#中什么是委托,委托和事件有什么关系?

委托可以把一个方法作为参数传递给另外一个方法,委托可以理解为指向一个函数 的函数指针。

委托是一种类型,而事件是一个对象,事件只能ADD和remove自己,而不能赋值。事件只能+=或者-=而不能用=。

事件的内部其实就是一个私有的委托和两个方法:add()和remove();

4:overload 和override的区别?

重载是方法 的名称相同而方法的参数的个数和参数的类型不同,方法进行多次重载来适应不同的需求方法重载是面向过程的概念;

重写是进行基类中的函数的重写,override是面向对象的概念;

5:什么是三层架构?

划分层次的目的是“高内聚,低耦合”的思想;

UI层,就是展现给用户的界面;

BLL层,主要是对业务逻辑的操作;

DAL层,直接操作数据库,对数据库进行增删改查;

三层其实是多层的一种特例,层层之间是向下的依赖关系;

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

6.什么是MVC?

模型

视图

控制器

7:类和结构的区别?

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

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

8:堆和栈的区别?

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

堆是在程序运行期间动态分配内存,他可以根据程序的运行情况来确定需要分配的内存的大小。

9:什么是GC?

GC是垃圾回收器,程序员可以不用担心内存管理,垃圾回收器可以自动进行管理。GC只能处理托管内存资源的释放。对于非托管资源不能使用GC垃圾回收器,必须由程序员手动回收。

10:值类型和引用类型的区别?

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

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

值类型不可能包含null值;

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

11:接口(interface)和抽象类(abstract class)的区别?

相同点:

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

不同点:

接口支持多继承,抽象类不支持多继承;

接口只能定义方法不能有方法的实现,抽象类不仅可以定义方法还可以有方法的实现;

接口可以用作值类型和引用类型,抽象类只能用作引用类型;

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

12:using关键词有什么作用?

using可以声明命名空间的引用;

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

其实这时候using相当于try 。。。。。finaly;

13:xml和html的区别?

xml区分大小写,html可以不区分;

xml不可以省略结束标签,html可以在合适的情况下省去结束标签;

xml中属性值必须写在引号中,html中引号可用可不用;

xml中所有的属性必须赋值,html中有些属性可以不赋值;

14:写出一条sql语句来查询出表A中第30--40条数据(id为主键,可能不连续)?

select  top 10 * from A where  id  not in (select  top 30 id from A);

15:面向对象有什么特性?

封装:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

继承:

继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”。

被继承的类称为“基类”、“父类”或“超类”。

继承的过程,就是从一般到特殊的过程。

多态:

实现多态,有二种方式,覆盖,重载。

覆盖,是指子类重新定义父类的虚函数的做法。

重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

16:const和readonly的区别?

const关键词用于修改字段或者局部变量的声明,他指定字段或者局部变量的值不能被修改,常数的声明引入指定类型的一个或者多个常数;

const关键字对数据成员的声明必须包含初始值,并且初始值必须是一个常量表达式;

const成员可以使用另外一个const成员来初始化前提是两者之间没有任何依赖关系;

readonly和const不同的是const字段只能在字段的声明中初始化,readonly字段可以在声明或者构造函数中初始化;

const字段是编译时常数,而readonly字段可用于运行时常数;

17:post和get的区别?

get的参数可以再浏览器地址栏中显示,而post则不会;

post提交的页面再点击[刷新]按钮的时候,浏览器一般会显示“是否要重新提交”而get则不会;

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

post可以提交的数据量可以非常大,而get的数据非常小(一般几k);

post可以进行文件的提交,而get则不可以;

18:一个数组:1,1,2,3,5,8,13,21,34......m,求第30位数字是什么?用递归实现。

static int F(int n)

{

  if(n==1)

  {

    return 1;

  }

  if(n==2)

  {

    return 1;

  }

  return  F(n-2) + F(n-1);

}

19:DataSet和DataTable的区别?

DataSet可以看做是一个暂存区,可以把从数据库中查询出来的数据保留起来,甚至可以把整个数据库显示出来。DataSet是存储在内存中的;

DataSet可以包含若干个DtatTable,DataTable可以包含若干的DataRow;

20:String和StringBuilder的区别?

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

两个类的工作原理不同:string是一种传统的修改字符串的方式,他可以完成把一个字符串添加到另外一个字符串中,但是在.net框架下这样的操作划不来,系统要先把两个字符串写入内存,接着删除原来的string对象然后再创建一个string对象,并读取内存中的数据赋值给该对象;

而stringbuilder提供了一个Append方法,能在已有的对象的原来地方进行字符串的修改;

 

 

posted @ 2013-07-18 18:10  殷跃杰  阅读(1314)  评论(0编辑  收藏  举报