C#知识点

 

1.什么是CLR?   

答:CLR全称Common Language Runtime,翻译为公共语言运行时/公共语言运行库。因为 .Net 是一个多语言的平台,任何符合这个平台标准的编程语言编译后都可以在这个平台上运行,这些语言通过各自的编译器编译后生成中间代码CIL。既然是“公共”语言运行时,顾名思义就是可以被多种编程语言公共使用的。CLR提供了很多功能,比如内存管理(GC)、程序集加载、安全性、异常处理和线程同步等等功能。所以,基于CLR的编程语言都能使用这些功能。   

 

2.什么是应用程序域?    

应用程序域,英文Application Domain,一般简写为AppDomain。本来在Windows NT操作系统上,只有进程(Process)和线程(Thread)的概念。微软的 .Net 平台是基于Windows的,对Windows的抽象,所以 .Net 除了支持在操作系统原生的Process和Thread的概念外,还多抽象了一个叫做AppDomain的东西。对了,准确来说,是 CLR 对操作系统的抽象。Windows NT 进程的出现是为了把应用程序和其他应用程序以及操作系统内核代码隔离开来。通过怎么隔离的呢,一般来说,一个程序是一个进程,每个把程序的代码和数据以及要用到的资源放在一个特定的内存区域[虚拟地址空间],这样其他程序(进程)就不能轻易的访问到这个程序的数据,这个进程也不能轻易的访问其他程序的地址空间和Windows操作系统内核代码所在的内存。这样,Windows就在操作系统级别实现了程序之间和程序与OS内核之间资源的隔离。微软的 .Net 平台是基于Windows NT之上的抽象,所以Windows NT的很多东西都在 .Net平台(准确来说是CLR)都有相关的抽象。Windows NT 的进程对应于CLR 的进程,CLR的进程和Windows NT进程一样,也是为了应用程序之间的资源的。 前面说了Windows NT 进程是为了隔离程序与程序的,但是为了可扩展性,每个程序(进程)都可以加载第三方的DLL,这个DLL直接被加进了进程之中,成了进程的一部分,这个DLL可以访问进程里的所有资源了,也可以访问的原进程所能访问的所有资源了。这样第三方DLL就可能会破坏程序的数据和代码甚至会访问本来无权访问的资源。     而CLR在Windows NT基础上增加了AppDomain来解决上面的问题。AppDomain可以把第三方DLL放进程序所在的进程运行,但是却不会破环进程的数据结构、代码和其他资源。很多时候,可以把AppDomain理解为.Net平台上的缩小版进程。AppDomain还解决了一个问题,在一个Window NT进程里有多个AppDomain,而每个AppDomain都可以是一个应用程序。所以,.Net 平台的一个进程可以运行多个应用程序了,这也是AppDomain的功能之一。在IIS7里,每个工作进程w3wp.exe就通过运行多个AppDomain来运行多个Web应用程序的。这样对于操作系统来说,只需要1个进程就可以运行多个应用程序实例了,节省了资源,提高了系统健壮性。

 

3.什么是托管代码?    

托管代码和非托管代码是两个相对的概念。非托管代码是指直接运行在操作系统上的代码。而托管代码顾名思义就是需要在某个东西委托管理它的代,这个东西在.Net平台上就是CLR,说白了托管代码就是受CLR管理的代码,CLR[它的JIT编译器]负责把这些代码转换成操作系统能执行使用的代码。Java的中间代码就相当于.Net的托管代码,Java的虚拟机就相当于.Net的CLR。

 

4.什么是强类型系统?    

语言是静态类型是指:这门语言中每个变量和大部分表达式都有一个特定的类型,而且这个类型是在编译时已知的。而动态类型语言相反,某个变量的类型不但可以改变,而且只能在运行的时候才知道是否正确。C#属于静态语言,C#4.0出现的dynamic关键字,让C#具有了一部分动态语言的特性,C#不再是一门纯粹的静态类型语言。在很多资料和文档里,强类型指的得就是静态类型。强类型的定义是不明确的,在很多地方并不相同。所以我但是为了严谨起见,我一般不说强类型/弱类型,而是说静态类型/动态类型。

 

5.什么是重载?    

重载,overload。重载就是允许在一个类型中有多个同名的语言构造,比如一个类中有多个同名的方法,一个类中有多个同名的索引器等。C#支持方法重载,实例构造函数重载,索引器重载和操作符重载。方法重载是指允许同一个类中存在同名的多个方法,只需要满足一个条件:这些方法具有不同的签名。对于方法来说,签名是:方法的名称、参数的类型、个数和位置,不包括参数名、不包括返回值、不包括params修饰符,ref和out会被认为是相同的。【顺便说说,这是C#的规定,CLR是允许通过方法的返回值来区分同名方法的】  

 

6.是否可以继承String类?

不能。.Net FCL中System.String类定义为sealed,表示不可继承。之所以会被定义为sealed的是因为字符串太常用,太常见,CLR对它进行了特殊对待,比如拘留池和不可变性,如果String可以被继承的话,会打破CLR对它的一系列特殊对待和字符串的不可变性。  

 

7.using关键字有什么用?什么是IDisposable?    

①引入命名空间,这样减轻敲代码的工作量和代码量。    

②给名字冲突的类取别名,这样就可以区分不同命名空间里的同名类。    

③为所包括的所有实现了IDisposable接口的类型变量代表的资源进行释放。

本质是会自动生成一个try块和finally块,并在finally块里把变量转换成IDisposable并调用Dispose方法。    

IDisposable是一个接口,是为使用了非托管资源的类销毁资源准备的。如果某个类使用了非托管资源,就应该让这个类实现这个接口,这是.Net的非托管资源销毁的标准实现。IDisposable有一个Dispose方法,实现这个方法来销毁需要销毁的资源。

使用这个接口来销毁非托管资源有3种方法,

①手动在finally块调用这个方法。

②使用using包含这个变量,让编译器生成代码帮我们调用。

③如果大意之下,没有调用这个方法,这个方法最终也会在终结器中被调用。  

 

8.string str= null 和 string str="" 说明其中的区别?    

前者仅仅声明了一个字符串引用str,只是在线程栈上占用了4个字节的空间,str引用指向进程的虚拟内存地址空间的0x00000000,也就是没有指向任何对象。后者语句会在当前进程的字符串拘留池中查找,如果已经存在一个只为 "" 的字符串,则直接把这个 "" 所在虚拟空间的首地址(4字节)赋值给str变量,如果当前进程的字符串拘留池中没有 "" 这个字符串,则会在托管堆的GC堆里创建这个字符串,然后这这个字符串对象所在的首地址赋值给变量str。说白了,前者只定义了一个字符串引用,后者不但定义了一个字符串引用,而且把这个引用执行了一个具体的对象。在前者上调用方法会出现null引用错误,后者则不会。 

 

9.StringBuilder和String的区别?        

System.String是对应于C#的string,是C#的基元类型,受到了CLR和C#编译器的特殊对待,它是不可变字符串。每一个String实例构造以后,都不能改动或增长,每次对String的改动操作,其实都不是在原String对象上执行的,都会生成一个新的字符串。所以,String不适合用在大规模的字符串操作(截断、增长、替换等)上,这样会生成很多的String对象,而导致内存增大和GC回收的压力。而StringBuilder仅仅是万千.Net FCL类型中的一个普通引用类型而已,如果说特殊的话,仅仅特殊在它表示的数据是字符串而已。如果需要频繁对字符串进行变化操作的话,使用它比使用String能获得更行的性能。  

 

10.什么是虚函数?什么是抽象函数?   

虚函数只能可以有子类重写override,子类可以选择重写还是不重写。抽象函数必须由子类重写,子类没有选择权。虚函数可以定义在普通类里,也可以定义在抽象类里。而抽象函数只能定义在抽象类。   

 

11.用sealed修饰的类有什么特点?    

sealed类不能被继承。

 

12..Net的错误处理机制是什么?  

.Net的错误处理机制是基于Windows NT的「结构化异常实处理机制SEH」建立的。在C#中是使用try catch finally块表示的。

 

13.C#的checked和unchecked的作用是什么?

checked 和 unchecked是用来只是编译器检查或者不检查包含着的代码是否进行「算术计算溢出检查」的。如果checked的话,包围着的代码在运行时,如果出现算术计算溢出时,则会抛出异常。如果unchecked的话,即使溢出,也不会抛出异常。既不checked,也不unchecked的时候,默认是unchecked。

 

14.C#中的三元操作符是什么?    

C#只有一个三元操作符,它就是:条件操作符,【?:】。  a?b:c  这个表达式的值是:如果a为True,则表达式值为b;如果a为False,则表达式的值为c。

 

15.C#的is和as运算符有什么作用?    

is:检查对象的真实类型是否与给定类型兼容。兼容返回True,不兼容则返回False。as:把对象转换为给定的引用类型。能转换则返回引用,不能转换则返回null。is运算符既然检查是否兼容与引用类型也能检查是否兼容于值类型,但是不考虑用户自定义转换。as运算符只能把对象转换为引用类型,不能作用于值类型之上。

 

16.C#中如何利用DateTime获取季度?   

①通过DateTime.Now.Month属性拿到当前月份 month。    

②【month / 4 +1】就是季度数。

 

17.如何在DateTime时间追加工作日?

 

18.类和结构的区别是什么?    

类作为引用类型的代表,结构作为值类型的代表,他们之间的区别很多就是引用类型和值类型的区别。     值类型继承自ValueType;而引用类型继承自System.Object。值类型变量包含其实例数据,每个变量保存了其本身的数据拷贝(副本),因此在默认情况下,值类型的参数传递不会影响参数本身;而引用类型变量保存了其数据的引用地址,因此以值类型进行参数传递时会影响到参数本身,因为两个变量会引用了内存中的同一块地址。     值类型有两种表示:装箱与拆箱;引用类型只有装箱一种形式。而引用类型通常只有一种形式:装箱。值类型的内存不由GC控制,作用域结束时,值类型会自行释放,减少了托管堆的压力,因此具有性能上的优势。值类型是密封的(sealed),因此值类型不能作为其他任何类型的基类,但是可以单继承或者多继承接口;而引用类型一般都有继承性。值类型不具有多态性;而引用类型有多态性。值类型变量不可为null值,值类型都会自行初始化为0值;而引用类型变量默认情况下,创建为null值,表示没有指向任何托管堆的引用地址,所以会引发null引用异常。        

 

19.如何进行DateTime和字符串时间之间的转换?    

DateTime => 字符串时间  :ToString()方法以及几个重载,另外ToXxString方法。字符串时间 => DateTime  : 

① DateTime.Parse和DateTime.TryPase两个静态方法。

② Convert.ToDateTime("2013-03-21") 其实系统预定义的这些常见类型,比如Int32、DateTime等,特定类型和字符串直接的相互转换都有上面3种模式。   

 

20.简述C#中的虚方法?    

C#的虚方法用 virtual 关键字修饰。虚方法表示这个方法可以被子类重写override,当然子类是否重写由自己决定。虚方法是C#中实现多态的一种方式。当用一个父类型的变量调用虚方法时候,会根据这个变量指向的真实子类型调用子类的方法。

 

21.简述C#的密封类和密封方法?

C#中,密封类和密封方法都是使用sealed修饰。密封类表示这个类不能被继承。密封方法表示这个方法不能被重写,和virtual方法相对。

 

22.请介绍C#静态构造器的特点?静态构造函数在任意一个实例构造函数执行之前执行。    

①一个类型有0或1个静态构造器,不定义则木有,要定义也只能定义1个。    

②静态构造器不能有参数。    

③构造器是由CLR调用,而不是程序员调用的。    

④因为是由CLR调用的,所以不能有任何访问修饰符。    

⑤静态构造器的作用就是初始化类型的静态字段,并且静态构造器只能访问静态字段。    

⑥静态构造器会根据类型所在程序集的加载策略不同,而具有不同的性质。    

如果类型所在的程序集属于AppDomain中立加载,则即使在多个AppDomain中使用到了这个类型,也只会在进程第一个使用类型时候,静态构造器执行一次。而如果这个类型所在程序集是以AppDomain私有的方法加载的话,则在使用到它的每个AppDomain里,都执行一次这个类型的静态构造器。

 

23.简述C#派生类中的构造函数?    

C#的构造函数是不能继承的,即使这个构造函数是public或者proteced的。但是可以在派生类的构造函数后通过 base.父类构造器 调用父类构造器。其实不直接通过base显式调用父类构造器,在new一个子类实例的时候,编译器会默认往上调用父类的默认构造器,一层一层往上调用,知道System.Object的默认构造函数。

 

24.简述接口以及接口继承?

接口是一个或一组契约的合集,表示某个东西能做什么。接口是表示一组函数成员[方法、属性、事件、索引器]而不实现成员的引用类型。接口可以继承多个接口,接口也可以被多个接口继承。类和结构能够实现接口。

 

25.什么是多播委托?

多播委托就是在一个委托变量上绑定多个方法。这个委托实例就是多播委托。如果这个委托变量被使用的话,会按绑定顺序挨个触发所有的方法。

 

26.列举一个C#中的委托应用?

List<T>类的的Sort方法的其中一个重载,接受一个委托类型的参数。使用List<T>类的Sort方法时候,程序员可以放入一个委托变量。 LINQ的基石之一,扩展IEnumerable<T>接口的Enumerable类的那几十个方法,全是以委托为参数的。   

 

30.什么是Web窗体,什么是Web用户控件?    

Web窗体就是后缀为 .ASPx 的东西,在这个页面上,可以通过声明的方法定义控件,不管是HTML标签、还是HTML控件、还是服务器端控件、或者用户控件。Web窗体最后会被编译器编译成一个类,这个类派生自页面后台类,Web窗体上定义的那些控件最后并没有在Web窗体类中,而是跑到父类[页面后台类]中了。Web用户控件就是程序员自定义的控件,可以通过组合多个服务器端控件实现,也可以自己重头写而实现。写Web用户控件的目的就是为了重用,可以把Web用户控件用在多个Web窗体上,并且Web用户控件只能附属于Web窗体,因为它不能被单独访问。而Web窗体是可以被单独访问的。

 

31.简述XML的优缺点?    

XML一般是作为一种数据交换格式使用。    

优点:可扩展性强,根据程序员的定义,几乎可以表示任何数据;    

跨平台:可以跨多个异构平台传递数据,这也是他的主要用处所在。    

可读性强:因为是树状的文本文档。    

缺点:数据冗余,使用了很多标签和属性。 不容易解析,即使在.Net平台上有LINQ to XML的存在。    

上面两个缺点就是在很多领域XML被JSON这种数据交换格式替代的主要原因。JSON数据很轻量级,所以很容易传输,JSON不管是浏览器端的JavaScript还是其他端的其他语言,都可以很容易的解析。

  

32.什么是SOAP?SOAP协议由哪几部分组成?    

SOAP,简单对象访问协议,后来发展成已经不是简简单单的对象访问了,SOAP通过XML文档描述Web服务。     SOAP协议由 SOAP封装、SOAP编码规则、SOAP RPC表示、SOAP绑定4个部分组成。

 

33.什么是WSDL语言?    

WSDL:Web服务描述语言。其实就是用来描述Web服务的一种特殊格式的XML文档。在这个XML文档里,定义了Web服务的地址和这个服务上能进行的操作。说严肃点,就是WSDL定义了服务的元数据,用这些元数据可以在客户端创建服务代理。

 

39.什么是Web Service?    

Web Service,就是Web服务。就是把服务通过一个特殊的URL来公开而不是像以前那样通过组件来公开。     在.Net平台上,现在是用的主要Web Service技术有两种:ASP.Net XML Web Service和WCF。

 

55.什么是WPF?    

WinForm的下一次替换产品。用来编写C/S软件。

 

 

二、填空题

1.能用 foreach 遍历访问的对象的要求需要实现【IEnumerable或IEnumerable<T>】或者声明【一个返回值类型是一个包含一个public的MoveNext()方法,一个public的Current属性的public的GetEnumerator()方法】

 

2.Serializable

 

  1. 3.  List<T> 、 Dictionary<TKey,TValue> 、 ArrayList  、Hashtable 、HashSet<T>

                           

1.面向对象的思想主要包括什么?

封装,继承,多态

 

2.什么是ASP.Net 中的用户控件

用户控件就是 .ascx,复合控件就是.DLL

 

3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载? CTS、CLS 和CLR分别作何解释?

一个进程可以有 N个Domain, 一个Domain可以有 N个程序集, 他主要功用是分割程序的 ,

受管制代码就是有CLR公共语言运行时控制的代码 ! 这样的代码是类型安全的 ,

强类型就是有类型约束的比如说强类型 DataSet,

装箱就是把值类型装成引用类型 ,拆箱反之, 重载在同一个类中相同方法名不同参数 ,

CLR是公共语言运行时,CTS是通用类型系统 ,

 

4.列举一下你所了解的XML技术及其应用

XML用的地方太多了如果非要说一个就说 WebService 或Ajax 这些东西火 !说了老板开心

 

5.值类型和引用类型的区别?写出 C#的样例代码。

值类型存在内存栈里面,引用类型存在内存堆里面

 

6.ADO.Net 中常用的对象有哪些?分别描述一下。

ADO.Net里面的对象多了去了这里就说 SQL系列的(oledb 和 odbc系列不说了)SqlConnection,SqlCommand,SqlAdapter,SqlParameter,DataSet也算一个 ,至于用法地球人都知道

 

7.如何理解委托?

委托的正确理解就是函数指针

 

8.C#中的接口和类有什么异同。

接口只提供规则没有实现 ,接口可以多继承,类不行

 

10.UDP 连接和TCP连接的异同。

UDP是无连接状态的,TCP是有状态的这个才是他们的根本区别 ,也就是说TCP 比UDP可靠

 

11.ASP.Net 的身份验证方式有哪些?分别是什么原理?

ASP.Net验证有WinDows严整,form验证,PassPort验证,Windows一般在做企业内部 OA的时候用的多一些,FORM一般是做网站用的多他是采用 Cookie机制来实现的,PassPort是微软提供的一个WebService

 

12.进程和线程分别怎么理解?

进程就是一个程序实例 ,而线程可以理解为功能实例 !也就是说进程包含线程

 

13.什么是code-Behind 技术。

代码后制 !地球人都知道!.ASPX页面其实是个继承与 .CS文件类的类

 

14.活动目录的作用。

活动目录就是分布试环境目录服务 ,作用就是分布试应用程序的中心 !它记录程序各个部分的信息等等

 

15..Net 中读写XML的类都归属于哪些命名空间?

System.XML和System.Data

16.解释一下UDDI 、WSDL的意义及其作用。

UDDI说白了就是我们生活中114查号台 ,WSDL就是这个服务的说明书

 

17.什么是SOAP, 有哪些应用。

SOAP是简单传输协议用处想牛毛一样多!非要说一个就说WebService或开发Remoting程序用

 

18.如何部署一个ASP.Net页面。

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

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

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

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

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

 

2 .列举ASP.Net 页面之间传递值的几种方式。

答. 1.使用QueryString,  如....?id=1; response. Redirect()....

    2.使用Session变量

3.使用Server.Transfer

 

4.C#中的委托是什么?事件是不是一种委托?

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

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

是,是一种特殊的委托

 

5.override与重载的区别

答 :override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要

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

 

6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?

答 :

this.Server.Transfer

 

9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

答:不是。可以用任意类型。

 

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

答:一般为3层

        数据访问层,业务层,表示层。

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

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

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

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

缺点:  增加成本。

 

 

 

18.Net中读写数据库需要用到那些类?他们的作用?

答:DataSet:数据存储器。

    DataCommand:执行语句命令。

DataAdapter:数据的集合,用语填充。

 

20.什么是Code-Behind技术?

答:代码后植。

 

22.常用的调用WebService的方法有哪些?

答:1.使用WSDL.exe命令行工具。

2.使用VS.Net中的Add Web Reference菜单选项

 

23..Net Remoting 的工作原理是什么?

答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。

答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。

 

25.请详述在dotNet中类(class)与结构(struct)的异同?

答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.

 

26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:

namespace test

{

public delegate void OnDBOperate();

public class UserControlBase : System.Windows.Forms.UserControl

{

public event OnDBOperate OnNew;

privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)

{

if(e.Button.Equals(BtnNew))

{

//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。

}

}

}

答:if( OnNew != null ) 

OnNew( this, e );

 

27.分析以下代码,完成填空

string strTmp = "abcdefg某某某";

int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;

int j= strTmp.Length;

以上代码执行完后,i= j=

答:i=13,j=10

 

28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号

答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

 

29.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

public void test(int i)

{

   lock(this)

 {

   if (i>10)

   {

     i--;

     test(i);

   }

 }

}

答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

 

30.简要谈一下您对微软.Net 构架下remoting和webservice两项技术的理解以及实际中的应用。

答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

 

31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路

答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。

 

32.给定以下XML文件,完成算法流程图。

<FileSystem>

<DriverC>

<Dir DirName=”MSDOS622”>

<File FileName =” Command.com” ></File>

</Dir>

<File FileName =”MSDOS.SYS” ></File>

<File FileName =” IO.SYS” ></File>

</DriverC>

</FileSystem>

请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。

答:

void FindFile( Directory d )

{

   FileOrFolders = d.GetFileOrFolders();

   foreach( FileOrFolder fof in FileOrFolders ) 

   {

     if( fof is File ) 

     You Found a file;

     else if ( fof is Directory ) 

     FindFile( fof );

    }

}

 

35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。

答:IEnumerable 、 GetEnumerator。

 

36.GC是什么? 为什么要有GC?

答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

  System.gc()

  Runtime.getRuntime().gc()

 

37.String s = new String("xyz");创建了几个String Object?

答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

 

38.abstract class和interface有什么区别?

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

 

39.启动一个线程是用run()还是start()?

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

 

40.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

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

 

41.构造器Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

 

42.是否可以继承String类?

答:String类是final类故不可以继承。

 

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

答:会执行,在return前执行。

 

44.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

答:不对,有相同的hash code。

 

45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

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

 

47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

 

48.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不能。

 

49.List,Set,Map是否继承自Collection接口?

答:List,Set是Map不是

 

50.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

 

51.数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length的属性。String有有length()这个方法。

 

52.sleep() 和 wait() 有什么区别?

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

(b)正在运行的线程因为其它原因而阻塞。

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

 

53.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

 

54.谈谈final, finally, finalize的区别。

答:

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize()      方法是在垃圾收集器删除对象之前对这个对象调用的。

 

55.如何处理几十万条并发数据?

答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.

 

56.Session有什么重大BUG,微软提出了什么方法加以解决?

答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate   server或SQL   Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。

 

57.进程和线程的区别?

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

 

58.堆和栈的区别?

答:

    栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。

    堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。

59.成员变量和成员函数前加static的作用?

答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。

 

60.ASP.Net与ASP相比,主要有哪些进步?

答:ASP解释形,ASPx编译型,性能提高,有利于保护源码。

 

62.DataReader与Dataset有什么区别?

DataSet可以离线处理,前后滚动 和进行数据更新.

DataReader不能离线处理,是个只读向前的游标,但速度会很快

DataSet可以存储数据库各种对象的,比如表触发器等,而DataReader只能存储游标记录

 

什么是WSE?目前最新的版本是多少?

答:WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,目前最

新版本2.0。

 

110.大概描述一下ASP。Net服务器控件的生命周期

答:初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件

 

概述反射和序列化

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

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

传输该对象。在另一端,反序列化将从该流重新构造对象。

 

3.datagrid.datasouse可以连接什么数据源

[dataset,datatable,dataview,IList]等接口类型的对象

 

4. new有几种用法

第一种:new Class(),新建一个类的对象,但是此类必须的又可访问的构造函数

第二种:显式覆盖基类的方法:public new Menthod(){}

 

5.概述o/r mapping 的原理

利用反射,配置 将类于数据库表映射O/RMapping(有学习曲线,没有工具支持会相当大):存在的时间已经很长,我认为它的最主要的作用是关系型数据库的反设计——关系型数据库的设计就是要把现实中的对象和对象间关系设计成实体和实体间的关系映射。而O/RMapping恰好相反,它是把实体和实体间的关系映射还原回对象和对象间的关系。

 

6.类成员有( )种可访问形式

可访问性:public ,protected ,private,internal可能还有其他的访问形式,具体的情况视编码需要而定

 

7.用sealed修饰的类有什么特点

sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。密封类不能同时为抽象类。sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。

 

8.列举ADO.Net中的五个主要对象,并简单描述

connection,command,dataReader,transaction,dataset ...其上对于各种对象,连接不同的数据库将会有不同的对象变体

Connection: 数据库的连接需要此对象

Command:执行数据表变化的命令

dataReader和dataset主要是对数据库的表信息进行两种不同方式的读取,具体的读取得区别,后面将会有讲解。

 

9.执行下面代码后:

String strTemp ="yyaccpx 某某某";

Int i System.Text.Encoding.Default.GetBytes(strTemp).Length;

Int j = strTemp.Length;

结果:i=(14 ) ;j=(11 )

i=(14 ) ;j=(11 ) 中文在内存中占两个字节

但是只算是一个字符

 

10.C#中,string str = null 与 string str ="",请尽量用文字说明区别。(要点:说明详细的内存空间分配)

string str ="" 在栈中存取地址,在堆中存放对象的值而String str=null;仅仅在内存栈中分配了空间

 

11.详述.Net里class和struct的异同!

class:放在属于引用类型,故其存放于内存的堆中

Struct属于值类型,其存放于栈中,作为参数传递的时候属于值传递类与结构有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。

 

12.概述.Net里对 remoting 和 webservice 两项技术的理解和实际中的应用。

其实现的原理并没有本质的区别,在应用开发层面上有以下区别:

1)、Remoting可以灵活的定义其所基于的协议,如果定义为HTTP,则与Web Service就没有什么区别了,一般都喜欢定义为TCP,这样

比Web Service稍为高效一些

2)、Remoting不是标准,而Web Service是标准;

3)、Remoting一般需要通过一个WinForm或是Windows服务进行启动,而Web Service则需要IIS进行启动。

4)、在VS.Net开发环境中,专门对Web Service的调用进行了封装,用起来比Remoting方便

我建议还是采用Web Service好些,对于开发来说更容易控制Remoting一般用在C/S的系统中,Web Service是用在B/S系统中后者还是各语言的通用接口相同之处就是都基于XML为了能清楚地描述Web Service 和Remoting之间得区别,我打算从他们的体系结构上来说起:

Web Service大体上分为5个层次:

1). Http传输信道

2). XML的数据格式

3). SOAP封装格式

4). WSDL的描述方式

5). UDDI

总体上来讲,.Net 下的 Web Service结构比较简单,也比较容易理解和应用:一般来讲在.Net结构下的WebService应用都是基于.Net framework以及IIS的架构之下,所以部署(Dispose)起来相对比较容易点。从实现的角度来讲,首先WebService必须把暴露给客户端的方法所在的类继承于:System.Web.Services.WebService这个基类 其次所暴露的方法前面必须有[WebMethod]或者[WebMethodAttribute]

 

WebService的运行机理

首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy Class) 这个代理类负责与WebService服务器进行Request 和Response 当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP包装,然后把这个包作为一个Response发送给客户端的代理类(Proxy Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作。 这就是WebService的一个运行过程。

 

下面对.Net Remoting进行概括的阐述:

.Net Remoting 是在DCOM等基础上发展起来的一种技术,它的主要目的是实现跨平台、跨语言、穿透企业防火墙,这也是他的基本特点,与WebService有所不同的是,它支持HTTP以及TCP信道,而且它不仅能传输XML格式的SOAP包,也可以传输传统意义上的二进制流,这使得它变得效率更高也更加灵活。而且它不依赖于IIS,用户可以自己开发(Development)并部署(Dispose)自己喜欢的宿主服务器,所以从这些方面上来讲WebService其实上是.Net Remoting的一种特例。

ASP.Net Web 服务基础结构通过将 SOAP 消息映射到方法调用,为 Web 服务提供了简单的 API。通过提供一种非常简单的编程模型(基于将 SOAP 消息交换映射到方法调用),它实现了此机制。ASP.Net Web 服务的客户端不需要了解用于创建它们的平台、对象模型或编程语言。而服务也不需要了解向它们发送消息的客户端。唯一的要求是:双方都要认可正在创建和使用的 SOAP 消息的格式,该格式是由使用 WSDL 和 XML 架构 (XSD) 表示的 Web 服务合约定义来定义的。

.Net Remoting 为分布式对象提供了一个基础结构。它使用既灵活又可扩展的管线向远程进程提供 .Net 的完全对象语义。ASP.Net Web 服务基于消息传递提供非常简单的编程模型,而 .Net Remoting 提供较为复杂的功能,包括支持通过值或引用传递对象、回调,以及多对象激活和生命周期管理策略等。要使用 .Net Remoting,客户端需要了解所有这些详细信息,简而言之,需要使用 .Net 建立客户端。.Net Remoting 管线还支持 SOAP 消息,但必须注意这并没有改变其对客户端的要求。如果 Remoting 端点提供 .Net 专用的对象语义,不管是否通过 SOAP,客户端必须理解它们。

 

13.什么是code-behind技术

对于每一个ASPx文件可以相对应一个CS文件类,ASPx继承自对应的CodeBehind类,在编译时,CodeBhind类编译到webui工程对应的dll中,而ASPx页面中的内含代码和ASPx一起编译到temporary.dll中,被客户端浏览器访问。

 

14.概述三层结构体系

webUI层:封装基本的页面布局形式,即表示层

DataAccess(DAO)层:数据访问层,利用各种相关的技术,与底层数据库进行交互

Business层:业务逻辑层,封装整个程序的业务逻辑代码,主要与DAO层相关联

Model 层: 封装程序领域对象,该层可以在上面的三层之间进行很好的交互

这只是基本的三层架构设计,如果利用设计模式,则可以在此基础上进行灵活的变化

 

15.ASP.Net如何实现MVC模式,举例说明!

在ASP.Net 中实现MVC模式,相对于 JAVA没有那么快捷,但是仍是可以实现的

且由于代码隐藏和事件驱动得引入,意义不时很大,具体的实现,可以利用HttpHandler,如此,则应在Web.config文件中配置相关的节点

//Author:renfuming

<httpHandlers>

<add verb="*" path="SendTopic.ASPx" type="wyzBBS.Servers.SendRootHandler"/>

<add verb="*" path="SelectTopic.ASPx" type="wyzBBS.Servers.SelectTopicHandler"/>

<add verb="*" path="Question.ASPx" type="wyzBBS.Servers.QuestionHandler"/>

<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>

</httpHandlers>

 

16.值类型和引用类型的区别?

C# 支持两种类型:“值类型”和“引用类型”。 值类型(如 char、int 和 float)、枚举类型和结构类型。 引用类型包括类 (Class) 类型、接口类型、委托类型和数组类型。 值类型与引用类型的区别在于值类型的变量直接包含其数据,而引用类型的变量则存储对象引用。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量

 

17.了解程序集强签名吗?

用强名称来给程序集签名即谓之程序集强签名! 通过签发具有强签名的程序集合,可以确保名称的全局唯一性!因为强名称是依赖于唯一的密钥对来确保名称的唯一性,其他人不会生成与你相同的程序集名称(不同的私钥产生的名称不同) 强名称保护程序集的版本沿袭,因为强名称的唯一性能够确保没有其他人能够生成你的程序集的后续版本 强名称提供可靠的完整性检查,通过.Net Framework安全检查后,可以确保程序集内容在生成后未被更改过! 要注意的是,具有强名称的程序集引用其他程序集,如果这个程序集没有强名称,那么具有强名称的程序集所带来的好处,并依旧会产生DLL冲突!因此具有强名称的程序集只能引用其他具有强名称的程序集。

 

18. C#中接口和类有什么区别?

接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。但接口是一个行为的规范,里面的所有东西都是抽象的!

一个类只可以继承一个基类也就是父类,但可以实现多个接口。

 

19.View State 的作用和实现方式?

设置是否要保存控件的状态,其功能的实质是利用隐藏表单域实现 如果设为false且在Page_Load中没有重新绑定数据的话,只要页面一刷新,控件的内容就没了 如果设为true,则页面会保存控件的内容 在一些不需要保存状态的页面中最好把它设为false,为什设为true会增加服务器的负担隐藏域。

 

20.在ASP.Net中可以利用哪些对象存储状态?几种维持状态的对象应用场合以及优缺点?

主要用Application,session,viewstate,cookie,cache。

Application:应用程序级别的共享变量,优点是应用程序一开启该站点都能访问此变量。缺点:所有对此进行写入操作要加锁,由此共享变量锁带来的内存开销只有此应用程序关闭才能结束。

Session:维护用户个人的状态信息,优点:个人所从事活动,如登录信息,购物车信息等较安全而且又服务器维护较稳定。缺点:维持http 连接的sessionID仍然有缺陷,同时为每个用户维护状态信息,服务器内存开销很大。

Viewsate:如4所说,在一些场合能体现它的特点,但同时带来的缺点:影响整个页面的速度以及隐藏字段未加密。

Cookie:优点是将状态信息维护在客户端的一个文本文件,不需要耗用服务器的内存,是目前各大网站主要采用的方式。 缺点:由于其将状态

信息存贮在客户端,很可能由别人破解此文件而获得此人的个人隐私和机密信息。其受限大小为4K.

Cache:优点是提供的此功能很强大,如文件缓存依赖、API依赖、数据库依赖以用于存贮数据变化而更换缓存状态数据。提供存储周期

从httpcontext到httpruntime。缺点:耗用服务器内存。Request

 

21.简单说说 ASP.Net 中基于表单的身份验证方式的用法?

配置文件提供对站点那些目录的保护以及登录页面,当访问该目录的文件时,如果用户未认证通过,将转入登录页面,用户输入用户名和密码,将此参数传入认证模块authentication,该模块负责认证,如果通过将isauthentication设置为true,并返回用户的identity对象,此时页面将转入初始请求页,如果未通过,将不允许访问此目录。

 

22.是否了解 URL Rewrite?请简要说明其原理和在 ASP.Net 中的实现方式?

一般放在httpmodule中applicatioin_request事情中,当每次http请求,将此URL定位到重写的url函数中并返回重写后的URL地址。主要用于当我们站点板块移动时由于链接仍然指向旧地址,故可以重定向到新的地址,当然查询参数也可以重写。url-mapping配置

 

23. 在超过10万条记录的页面显示时,你如何处理分页,有多少种替代方案?

一般根据页面选择的第几页PageIndex,以及服务端配置文件配置的每页行数PageSize,通过传入参数传入存贮过程,由其返回相应行数pagesize的记录。即每一页数据都由服务端返回。可以利用缓存Cache,将数据一次加载,在结合ASP.Net2.0中数据库缓存方式,跟踪数据库表的信息的变化,自动更新缓存信息 对于数据分野页,也可以利用gridview的数据邦定控件的自动分页的方式

 

24. DataReader和DataSet的异同?

Daatareader和datatset都是通过从数据源取数据。不同点:datareader提供只进行流的方式读取数据。Dataset提供一种容器里面主要由表以及表关系,由适配器来提供从数据源取得数据填充到此容器的表中。

DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作

 

25. 你会利用那些工具进行数据库的性能分析及其优化?说说你觉得优化数据库需要注意的方面。比如:如何设计优化查询为主、插入更新为主的表。我主要通过执行计划以及索引优化以及客户统计和服务器跟踪工具来检测从SQL到索引、硬盘IO和时间等信息。 对于查询为主的表,首先对数据量的大小有一定的估计,当达到一定程度应采用水平分区,有的根据主键有的根据时间段来区分。由于此表往往插入更新不是太快,可对适当字段采用索引并且填充因子可以尽量大。SQL优化等。 对于插入更新为主的表,我觉得健壮性更重要,只要根据标准外部采用存贮过程就可以了。

 

26. 数据库某表主键自增,是很常见的情形。在ASP. Net或C#程序中,要求向该表插入一条记录,并马上从该表查出这条记录。不能使用时间戳,请问你如何实现?

插入一条记录会返回◎◎identity,通过它就是该记录的主键,再select一下就可以了

 

27.Xhtml的三种DOCTYPE分别有什么含义?请说明。简单说明各个情况下,那些标签可以使用,那些不可以使用?

XHTML 1.0 提供了三种DTD声明可供选择:W3C规范

过渡的(Transitional):要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。完整代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">严格的(Strict):要求严格的DTD,你不能使用任何表现层的标识和属性,例如<br>。完整代码如下:<!DOCTYPE html PUBLIC

"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

框架的(Frameset):专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD。完整代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

 

28.请举例说明XHtml代码规范,越多越好。

1).所有的标记都必须要有一个相应的结束标记以前在HTML中,你可以打开许多标签,例如<p>和<li>而不一定写对应的</p>和</li>来关闭它们。但在XHTML中这是不合法的。XHTML要求有

严谨的结构,所有标签必须关闭。如果是单独不成对的标签,在标签最后加一个"/"来关闭它。例如:

<br /><img height="80" alt="网页设计师" src="../images/logo_w3cn_200x80.gif" width="200" />

 

2).所有标签的元素和属性的名字都必须使用小写

与HTML不一样,XHTML对大小写是敏感的,<title>和<TITLE>是不同的标签。XHTML要求所有的标签和属性的名字都必须使用小写。例

如:<BODY>必须写成<body> 。大小写夹杂也是不被认可的,通常dreamweaver自动生成的属性名字"onMouseOver"也必须修改

成"onmouseover"。

 

3).所有的XML标记都必须合理嵌套

同样因为XHTML要求有严谨的结构,因此所有的嵌套都必须按顺序,以前我们这样写的代码:

<p><b></p></b>

必须修改为:

<p><b></b></p>

就是说,一层一层的嵌套必须是严格对称。

 

4).所有的属性必须用引号""括起来

在HTML中,你可以不需要给属性值加引号,但是在XHTML中,它们必须被加引号。例如:

<height=80>

必须修改为:

<height="80">

特殊情况,你需要在属性值里使用双引号,你可以用",单引号可以使用',例如:

<alt="say'hello'">

 

5).把所有<和&特殊符号用编码表示

任何小于号(<),不是标签的一部分,都必须被编码为& l t ;

任何大于号(>),不是标签的一部分,都必须被编码为& g t ;

任何与号(&),不是实体的一部分的,都必须被编码为& a m p;

注:以上字符之间无空格。

 

6).给所有属性赋一个值

XHTML规定所有属性都必须有一个值,没有值的就重复本身。例如:

<td nowrap> <input type="checkbox" name="shirt" value="medium" checked>

必须修改为:

<td nowrap="nowrap"> <input type="checkbox" name="shirt" value="medium" checked="checked">

 

7).不要在注释内容中使“--”

“--”只能发生在XHTML注释的开头和结束,也就是说,在内容中它们不再有效。例如下面的代码是无效的:

<!--这里是注释-----------这里是注释-->

用等号或者空格替换内部的虚线。

<!--这里是注释============这里是注释-->

以上这些规范有的看上去比较奇怪,但这一切都是为了使我们的代码有一个统一、唯一的标准,便于以后的数据再利用。

 

29. 客户端与浏览器:如果让你做一个TreeView控件,你的思路

我会采用javascript来做,主要采用htc。 数据通过XML. 通过htc操作XML并定义一些方法如:load、addnode、deletenode、updatenode、selectednode等方法一些属性如对图标、节点位置、节点前复选框等属性,也会提供一些默认事件如修改节点前后刷新等。

 

30.谈谈论坛聊天室IM和各种网站程序的交互与刷新思路的差异与共同点。

IM交互式信息通信 ajax刷新思路,对于集中刷新方式,应该有部分和全部刷新的区别这个希望大家上网去找详细的资料

 

31.谈谈对WSE的认识。

目前Web Service广泛采用Https来保障安全,但是该方法也有很多的缺点,尤其是应用于现在越来越复杂的Web Service安全需求。

 

1.Https提供的是点对点安全保护,而Web Service的特点就是消息往往就要经过多个中介才能到达最终的服务提供方,每个中介还有可能对消息做出些处理,也就是说它需要的是端到端的保护。这显然是Https所不能提供的。

 

2.Https是在传输层提供的安全,而不是在消息层面,也就是只有在传输的过程中才有消息才是安全的(加密的),而一旦到达了终点就是明文的了。比如可以从消息队列中将重要的信息窃取出来。

 

3.在Https的建立完共享密钥后,传递消息的时候并没有使用数字签名技术,所以也就无法得到抗否认性的能力。而这又是在电子商务中不可豁缺的。

 

4.由于Https提供的是传输层的安全,当然也就不可能达到消息安全所需要的灵活性的要求。比如加密消息中的部分元素;用不同的密钥加密消息的不同部分,从而让不同的消息接受者查看与之对应的信息。因此,为了适应Web Service对安全的特殊要求,IBM和MS等公司共同制定了WS-Security规范。重新回顾安全问题的三个概念:Confidentiality(机密性), Integrity(完整性), Authentication(身份鉴别),在Web Service使用SOAP(XML 格式)作为消息传输协议的背景下,分别产生了XML Digital Signature,XML Encryption和SAML(XML格式的Security Token), 而WS-Security则是如何将他们组合起来以满足Web Service安全需求的一套规范Web Services Enhancements 2.0 for Microsoft .Net (WSE)是一个用来建设Web服务的.Net类库,它支持最新的Web服务协议,包括WS-Security、WS-SecureConversation、WS-Trust、WS-Policy、WS-SecurityPolicy、WS-Addressing和 WS-Attachments。 WSE可使开发人员跨安全平台建设可升级的、安全的Web服务。它支持用传输的方式发送SOAP消息,而不是HTTP。另一个特点是具有建立SOAP路由器的功能,SOAP消息被发送给SOAP路由器,路由器再将工作交付给托管该服务的Web服务器。

 

32. 你用过哪些版本控制工具

各位同学兄弟可以根据自己的实际情况,谈论一些自己在使用这些工具时所遇到的问题以及体会TFS(ASP.Net)、cvs、svn

 

33. 在开发中你利用那些工具进行单元测试和模块测试NUNIT和PDM.页面测试 httpunuit

 

34.如何进行Bug管理由一个BUG跟踪平台,提供该程序的各个模块的BUG,以及级别,以及解决时间等信息

 

35. 如何生成和管理开发文档一般用NDOC来生成文档,大部分文档主要还是Word为主。主要是各个模块以及版本的控制等

 

37.如果你是一位软件架构师,您将如何去搭建一个符合n-tie的架构?并请描述一下您搭建的每一层的作用。(注意:请您考虑项目中有WebService的情况)

主要根据实际情况来决定搭建的层数以及各层的规格。 一般情况下,可如下搭:

数据层:主要提供数据服务,该层继承实体的接口并定制自己的数据提取和存储。并根据数据库类型如sqlserver、oracle等来建立此层服务。执行逻辑我个人偏好采用存贮过程。

业务层:由于定制的实体的属性和操作实体的方法已由数据层获得和执行,故业务逻辑组件对此实体进行组合以满足上层对业务逻辑组件的调用,webservice也是建在此层,以用于提供数据服务和逻辑执行。

表示层:一般定制不同的容器控件,以用于加载从业务层不同类型的数据便于呈现。当然也要此层的风格以及各种显示设置,webservice显示页面建在层,通过加载对指定目录的webservice提供的方法用于呈现。

 

38.可否简要的介绍ASP.Net 2.0 Membership,WebPart和C#的匿名函数和泛型等你认为.Net 2.0自己感兴趣的内容,希望可以简要地阐述其中的特点(本题非常的重要)

1) Membership:成员管理主要提供了一套对用户信息、用户角色、用户配置信息的用户系统。通过MembershipConfigHandler加载配置文件中公有的基础信息,对配置文件中的信息进行了严格的边界检查和类型检查。通过MembershipProvider提供了实现membership的抽象方法以及配置信息。由SqlMembershipProvider继承MembershipProvider来实现sqlclient的数据提供服务。业务和实现相剥离,以利于扩展。当然里面有很多特点也有很多细节等。

2) WebPart:主要提供页面布局和自定义以及换皮肤的功能。通过定义主题Theme来决定整体的布局风格,以及版面通过设定不同的区域Zone来决定版面各块的区域设置。通过不同的skin和css来确定风格。让用户能够保存自己的个人设置以及回复默认设置的功能。

3) 匿名函数:使用匿名方法可以减少因实例化委托所需要的开销,1.0中使用委托必须实例化委托并且必须将所调用的类和方法作为参数传入也即命名方法,当然如果所调用的委托具有多变性应该还采用命名方法。

4) 泛型:一般用于集合类。由于以前集合类数据都由framework隐式转化为object类型,这种开销很大。而用泛型,你就可以指定传入对象类型,而用于生成强类型的数据集,这样各种操作就可以使用指定类型的特性和优势了,自然速度也快了很多。当然接口、方法、类等都同样使用这种方式

5) 编译模型除了ASP.Net1.0支持的批编译,也提供新的编译模式。

6) 在httpmodule和httphander的处理速度要比以前1.0要快。

7) 在请求响应输出中,将缓冲区由ASP.Net宿主进程移到本机内存,可以消除资源瓶颈。

8) 其缓存模型提供了数据库依赖和缓存后替功能。

9) 与IIS6.0集中能提供更好的性能,主要体现在缓存和缓冲操作上。

 

39.ASP.Net中的内建对象Page对象:Web Form 网页在执行的时候会被编译成Page 对象,Page对象通知来设置与网页有关的属性、方法和事件;

Response对象:用来决定服务器端在什么时候或如何输出数据到客户端;

Request对象:用来捕获由客户端返回服务器的数据;

Server对象:提供服务器端最基本的属性和方法;

Application对象:用来记录不击客户端共享的变量;

Session对象:用来记录各客户端的专用变量;

Cookies对象:为Web应用程序保存访问者相关信息.

 

40..Net具有跨平台的性质吗?现在是否可以在UNIX平台上广泛的应用?非常了不起的工具INet,实现.Net跨平台!

执行摘要微软的.Net是一套连接信息、人、系统、设备的软件技术。此新一代的技术是基于Web服务和小模块创建的应用,可以使任何应用彼此互连并且能连接到InterNet上的其他大型应用。.Net的基础核心是集成开发设备(IDE), Visual Studio.Net和一种新的应用执行环境-Microsoft .Net开发框架。这些系统使开发人员能够像灵活使用 Visual Basic 和C#一样开发强大的应用程序和Web服务。 但是有局限的一点是:用.Net开发的应用程序必须运行于.Net服务器或者客户端。如果所有的用户都按照.Net运行环境技术标准化这也许可行,但是实际上当然不是这样。成千上百万台电脑运行的是Linux、Unix,OS X 和其他操作系统,而这种环境不是.Net应用程序的标准化运行环境。因此软件开发组织需要考虑: 如何有效利用它们的 Microsoft开发人员和Visual Studio.Net的技术特征和优势但是仍然可以访问非微软服务器, PC机,手提电脑和移动设备?怎样才能使他们用.Net编写的程序运行时不受运行环境的局限? Stryon公司开发的iNet解决了这一难题。iNet可以使应用程序和Web服务在Visual Basic 和C#下开发,但发布于任何支持Java的运行环境,网络主机也从IBM网络服务器扩展到Linux和Unix的服务器。有了iNet技术,开发人员既可以利用Visual Studio .Net开发环境的优势,但是又不局限于Microsoft的运行环境。

 

41.写出global.asax文件的主要用途?

作用和ASP的global.asa一样,它可以使我们执行ASP.Net应用程序一层事件的代码,如:application_start等等,使你可以在这些事件中作一些自定义的处理;也可以定义应用程序一层的变量,如:Session等,这在整个ASP.Net应用程序中起作用。

 

42.列出web.config的常用的配置段,并对每个配置段进行简要的说明。

Web.config文件是一个XML文本文件,它用来储存 ASP.Net Web 应用程序的配置信息(如最常用的设置ASP.Net Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过VB.Net新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的 Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。在运行时对Web.config文件的修改不需要重启服务就可以生效(注:<processModel> 节例外)。当然Web.config文件是可以扩展的。appSettings包含自定义应用程序设置。

system.web 系统配置

compilation动态调试编译设置

customErrors自定义错误信息设置

authentication身份验证,此节设置应用程序的身份验证策略。

authorization授权, 此节设置应用程序的授权策略.

 

43.ASP.Net中的组件相对于ASP的组件部署方面有什么优点?

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用vbs/js这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:

1)、代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

2)、代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

3)、弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上php/jsp,其次就是缺乏完善的纠错/调试功能,这点上ASP/php/jsp差不多。那么,ASP.Net有哪些改进呢? ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括c++ , vb,js等等,当然,最合适的编程语言还是ms为.Net frmaework专门推出的c#(读csharp),它可以看作是vc和java的混合体吧,尽管ms自己讲c#内核中更多的象vc,但实际上我还是认为它和java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且c#和c++、java一样提供了完善的调试/纠错体系

1)、 经过解释的语言有两个缺点,一是缺乏强类型,二是缺乏一个编译环境,这将导致性能和伸缩性的问题

2)、ASP并没有为应用程序提供一个固有的结构,将代码和页面混合在一起使代码变得很复杂,源文件变的很大,结构和代码复用很难,维护也很难。

3)、ASP中无论工作多简单都必须在ASP中编写代码完成绝大多数工作,如验证表单字段等,其他还包括告诉缓存页面内容,保持表单状态等,甚至添加新HTML控件也需要写原始HTML。

4)、浏览器兼容性。移动设备访问站点,必须编写代码检测这些设备,同时为其提供合适内容。

5)、标准兼容性,XHTML被越来越多人接受,XML和XSL/T也得到广泛应用,并且与移动设备进行通信还应该支持WML,这意味着ASP应用不仅要利用现有标准工作,还要易于升级以支持将来的标准 ASP.Net四个主要目标 使代码更清晰 提高可部署性,可伸缩性,安全性以及可靠性 为不同浏览器和设备提供更好的支持 支持一种全新的web应用程序。

 

44.简述一下webservice技术,在何种场合下适合使用这项技术?

Web Service 是一种新的web应用程序分支,他们是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。Web Service是一种应用程序,它可以使用标准的互联网协议,像超文本传输协议(HTTP)和XML,将功能纲领性地体现在互联网和企业内部网上。可将Web服务视作Web上的组件编程。P2P 跨平台技术性应用 Web Services扮演什么角色?Web services角度所预示的四个趋势:

◆内容更加动态:一个web service必须能合并从多个不同源来的内容,可以包括股票,天气,新闻等,在传统环境中的内容,如存货水平,购物订单或者目录信息等,都从后端系统而来

◆带宽更加便宜:web services可以分发各种类型的内容(音频,视频流等)

◆存储更便宜: web services必须能聪明地处理大量数据,意味着要使用数据库,LDAP目录,缓冲,和负载平衡软件等技术保持可扩展能力

◆普遍式计算更重要:web services不能要求客户使用某一版本的windows的传统浏览器,必须支持各种设备,平台,浏览器类型,各种内容类型。两种重要技术要达到这样的目标,Web services要使用两种技术:

◆XML XML是在web上传送结构化数据的伟大方式,Web services要以一种可靠的自动的方式操作数据,HTML不会满足要求,而XML可以使web services十分方便的处理数据,它的内容与表示的分离十分理想

◆SOAP SOAP使用XML消息调用远程方法,这样web services可以通过HTTP协议的post和get方法与远程机器交互,而且,SOAP更加健壮和灵活易用。

 

51.Params是什么含义?

Params是C#中的关键字,采用此关键字可以指定参数数目为可变; 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方

法声明中只允许一个 params 关键字。

如:

public int fConvert(params int[] iParas)

{

}

 

52. C#中有没有运算符重载?能否使用指针?

有,C#中也有运算符重载,如对运算符“+”进行重载;

C#中也可以使用指针,但要声明为unsafe。

 

53.Internal修饰符有什么含义?

internal数据访问修饰符,表示对所修饰的成员在当前程序集内可以进行没有任何限制的访问;但在当前程序集外部则不能进行访问,其可访问性级别低于public ,高于protected。

 

55. 私有程序集与共享程序集有什么区别?

一个私有程序集通常为单个应用程序所使用,并且存储于这个应用程序所在的目录之中,或此目录下面的一个子目录中。共享程序集通常存储在全局程序集缓存(Global Assembly Cache)之中,这是一个由.Net运行时所维护的程序集仓库。共享程序集通常是对许多应用程序都有用的代码库,比如.Net Framework类。

 

56. 请解释进程与线程的区别?进程与程序的区别?

一般,一个应用程序对应于一个或多个进程,可以把进程看作是该应用程序在操作系统中的标识;而一个进程通常由多个线程组成,而线程是操作系统为该应用程序分配处理时间的最小单元。

 

57. CLR与IL分别是什么含义?

CLR:公共语言运行时,类似于Java中的JVM,Java虚拟机;在.Net环境下,各种编程语言使用一种共同的基础资源环境,这就是CLR,CLR将直接与操作系统进行通信,而编程语言如C#.Net将尽量避免直接与操作系统直接通信,加强了程序代码的执行安全性,可以这样看:CLR就是具体的编程语言如:C#.Net与操作系统之间的翻译,同时它为具体的编程语言提供了许多资源:

? 面向对象的编程模型(继承、多态、异常处理和垃圾收集等)

? 安全模型

? 类型系统

? 所有.Net基类

? 许多.Net Framework类

? 开发、调试和评测(profiling)工具

? 执行和代码管理

? IL到本地代码(IL-to-native)转换器和优化器IL,中间语言,也称MSIL,微软中间语言,或CIL,通用中间语言;所有.Net源代码(不管用哪种语言编写)在进行编译时都被编译成IL。在应用程序运行时被即时(Just-In-Time,JIT)编译器处理成为机器码,被解释及执行。

 

58 .请解释ASP。Net中以什么方式进行数据验证

Aps.Net 中有非空验证,比较验证,取值范围验证,正则表达式验证及客户自定义验证五大控件,另还有一个集中验证信息处理控件

 

59(1).WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。

在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件自动传回是当我们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端只有通过自动传回才能实现服务端事件的机制,如果没有自动回传机制就只能调用客户端事件,而不能调用服务端事件

 

59(2).WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?

可以调用

例如:<ASP:TextBox id="TextBox1" runat="server">

</ASP:TextBox>

<INPUT id="Button2" value="Button" name="Button2"

runat="server" >

 

59(3).请解释ASP.Net中的web页面与其隐藏类之间的关系?

一个ASP.Net页面一般都对应一个隐藏类,一般都在ASP.Net页面的声明中指定了隐藏类例如一个页面Tst1.ASPx的页面声明如下

<%@ Page language="c#" Codebehind="Tst1.ASPx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>

Codebehind="Tst1.ASPx.cs" 表明经编译此页面时使用哪一个代码文件

Inherits="T1.Tst1" 表用运行时使用哪一个隐藏类

 

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

如果要操作一个不断增长的字符串,尽量不用String类,改用StringBuilder类。两个类的工作原理不同:String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.Net框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。

 

64.请叙述属性与索引器的区别。

属性                             索引器

通过名称标识。                  通过签名标识。

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

可以为静态成员或实例成员。      必须为实例成员。

属性的 get 访问器没有参数。      索引器的 get 访问器具有与索引器相同的形参表。

属性的 set 访问器包含隐式 value 参数。 除了value 参数外,索引器的 set 访问器还具有与索引器相同的形参表

 

65.请叙述const与readonly的区别。

每一个class至多只可以定义一个static构造函数,并且不允许增加访问级别关键字,参数列必须为空。

为了不违背编码规则,通常把static数据成员声明为private,然后通过statci property提供读写访问。

const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。const数据成员的声明式必须包含初值,且初值必须是一个常量表达式。因为它是在编译时就需要完全评估。

const成员可以使用另一个const成员来初始化,前提是两者之间没有循环依赖。readonly在运行期评估赋值,使我们得以在确保“只读访问”的前提下,把object的初始化动作推迟到运行期进行。readonly 关键字与 const 关键字不同:const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数。 readonly 只能在声明时或者构造函数里面初始化,并且不能在 static 修饰的构造函数里面。

 

66.您需要创建一个ASP.Net应用程序,公司考虑使用Windows身份认证。所有的用户都存在于AllWin这个域中。您想要使用下列认证规则来配置这个应用程序:

    a、 匿名用户不允许访问这个应用程序。

    b、 所有雇员除了Tess和King都允许访问这个应用程序。

  请问您应该使用以下哪一个代码段来配置这个应用程序?( A )

A. <authorization>

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

   <allow users=”*”>

   <deny users=”?”>

 </authorization〉

 

67.您要创建一个ASP.Net应用程序在DataGrid控件中显示一个经过排序的列表。产品数据被存放于一个名为PubBase的Microsoft SQL Server 数据库。每个产品的主键是ProductID,Numeric型并且每个产品有一个字母描述字段,名为ProductName。您使用一个SqlDataAdapter对象和一个SqlCommand对象通过调用一个存储过程从数据库中获取产品数据。您将SqlCommand对象的CommandType属性设置为CommandType.StoredProcedure,并将它的CommandText属性设置为procProductList。您成功的获取了一个DataTable对象

 

69. 列举ASP.Net 页面之间传递值的几种方式。

1. 使用QueryString, 如....?id=1; response. Redirect()....

2.使用Session变量

3.使用Server.Transfer

 

70. 请说明在.Net中常用的几种页面间传递参数的方法,并说出他们的优缺点。

session(viewstate)     简单,但易丢失

application             全局

cookie                 简单,但可能不支持,可能被伪造

input ttype="hidden"    简单,可能被伪造

Url                     参数简单,显示于地址栏,长度有限

数据库稳定,安全,但性能相对弱Using 引入一个名子空间,或在使用了一个对像后自动调用其IDespose,New 实例化一个对像,或修饰一个方法,表此方法完全重写此方法

 

71.请简述一下用Socket进行同步通讯编程的详细步骤

1)、在应用程序和远程设备中使用协议和网络地址初始化套接字

2)、在应用程序中通过指定端口和地址建立监听

3)、远程设备发出连接请求

4)、应用程序接受连接产生通信scoket

5)、应用程序和远程设备开始通讯(在通讯中应用程序将挂起直到通讯结束)

6)、通讯结束,关闭应用程序和远程设备的Socket回收资源

 

72.什么叫做SQL注入,如何防止?请举例说明。

利用sql关键字对网站进行攻击。过滤关键字'等 所谓SQL注入(SQL Injection),就是利用程序员对用户输入数据的合法性检测不严或不检测的特点,故意从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取想得到的资料。http://localhost/lawjia/show.ASP?ID=444 and user>0,这时,服务器运行Select * from 表名 where 字段=444 and user>0这样的查询,当然,这个语句是运行不下去的,肯定出错,错误信息如下:

?错误类型:Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 'sonybb' 转换为数据类型为 int 的列时发生语法错误。

 

81.abstract class和interface有什么区别?

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

 

82.启动一个线程是用run()还是start()?

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

 

83.构造器Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

 

84.是否可以继承String类?

答:String类是final类故不可以继承。

 

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

答:会执行,在return前执行。

 

86.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

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

 

87.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

 

88.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不能。

 

89.List, Set, Map是否继承自Collection接口?

答:List,Set是Map不是

 

161.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

 

90.数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length的属性。String有有length()这个方法。

 

91.sleep() 和 wait() 有什么区别?

答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程

 

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

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

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

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

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

 

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

Connection:主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。

Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源。

DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。

DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.Net 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet包含若干DataTable、DataTableTable包含若干DataRow。

DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(通过游标)读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。

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

 

3、列举ASP.Net 页面之间传递值的几种方式。

1).使用QueryString, 如....?id=1; response. Redirect()....

2).使用Session变量

3).使用Server.Transfer

4).Cookie传值

 

13、在dotNet中类(class)与结构(struct)的异同?

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

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

 

14、堆和栈的区别?

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

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

 

15、能用foreach遍历访问的对象的要求

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

 

16、GC是什么? 为什么要有GC? 

C/C++中由程序员进行对象的回收像学校食堂中由学生收盘子,.Net中由GC进行垃圾回收像餐馆中店员去回收。

GC是垃圾收集器(Garbage Collection)。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection需要程序员调用Dispose进行资源的回收。

要请求垃圾收集,可以调用下面的方法:GC.Collect()一般不需要手动调用GC.Collect()。当一个对象没有任何变量指向(不再能使用)的时候就可以被回收了。

基础知识:当没有任何变量指向一个对象的时候对象就可以被回收掉了,但不一定会立即被回收。

            object obj = new object();//只有new才会有新对象

            Console.WriteLine(obj);

            object obj2 = obj;

            obj = null;

            obj2 = null;

            Console.WriteLine();

 

18、值类型和引用类型的区别?

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

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

3).值类型不可能包含 null 值:然而,可空类型功能允许将 null 赋给值类型。

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

 

19、C#中的接口和类有什么异同。

不同点:

不能直接实例化接口。

接口不包含方法的实现。

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

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

相同点:

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

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

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

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

 

20、abstract class和interface有什么区别?

相同点:

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

不同点:

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

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

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

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

接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。

加分的补充回答:讲设计模式的时候SettingsProvider的例子。

 

21、是否可以继承String类?

String类是sealed类故不可以继承。

 

31、string str = null 与 string str =””说明其中的区别。

答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 string str = null没有string对象,string str = “”有一个字符串对象。

string s3 = string.Empty;//反编译发现,string.Empty就是在类构造函数中 Empty = "";

 

34.在.Net中所有可序列化的类都被标记为_____?

答:[serializable]

 

35、什么是code-Behind技术。

就是代码隐藏,在ASP.Net中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像以前ASP那样都代码和html代码混在一起,难以维护。code-Behind是基于部分类技术实现的,在我的项目的三层代码生成器中用到了部分类。

 

 

43.StringBuilder 和 String 的区别?

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

如果要操作一个不断增长的字符串,尽量不用String类,改用StringBuilder类。两个类的工作原理不同:String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.Net框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。

 

44、.请叙述属性与索引器的区别。 (*)

属性 索引器    

  通过名称标识。 通过签名标识。    

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

  可以为静态成员或实例成员。 必须为实例成员。    

  属性的   get   访问器没有参数。 索引器的   get   访问器具有与索引器相同的形参表。    

  属性的   set   访问器包含隐式   value   参数。 除了   value   参数外,索引器的   set   访问器还具有与索引器相同的形参表。

 

46.  请解释ASP。Net中的web页面与其隐藏类之间的关系?

一个ASP.Net页面一般都对应一个隐藏类,一般都在ASP.Net页面的声明中指定了隐藏类例如一个页面Tst1.ASPx的页面声明如下

<%@ Page language="c#" Codebehind="Tst1.ASPx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>

Codebehind="Tst1.ASPx.cs" 表明经编译此页面时使用哪一个代码文件

Inherits="T1.Tst1" 表用运行时使用哪一个隐藏类

ASPx页面会编译生成一个类,这个类从隐藏类继承。

 

49、您在什么情况下会用到虚方法?它与接口有什么不同?

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

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

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

 

不定项选择:

(1) 以下叙述正确的是: B C

A. 接口中可以有虚方法。B. 一个类可以实现多个接口。 C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。

 

(2) 从数据库读取记录,你可能用到的方法有:B C D

A. ExecuteNonQuery            B. ExecuteScalar      C. Fill    D. ExecuteReader

 

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

  A.Close B.Dispose C.Finalize  

  D.using E.Quit  

 

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

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

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

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

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

 

51. 单项选择:

(1)下列选项中,(C)是引用类型。

a)enum类型   b)struct类型 c)string类型   d)int类型

 

(2).关于ASP.Net中的代码隐藏文件的描述正确的是(C)

a)Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名。

b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。

c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件。

d)以上都不正确。

 

(3).下列描述错误的是(D)

a)类不可以多重继承而接口可以;

b)抽象类自身可以定义成员而接口不可以;

c)抽象类和接口都不能被实例化;

d)一个类可以有多个基类和多个基接口;

 

52、DataReader和DataSet的异同?

DataReader使用时始终占用SqlConnection,在线操作数据库每次只在内存中加载一条数据,所以占用的内存是很小的是只进的、 只读的DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接(非连接模式)DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行 回传更新操作(动态操作读入到内存的数据)

 

53、public static const int  A = 1;这段代码有错误么?

错误:const不能被修饰为static ;因为定义为常量 (const )后就是静态的(static )。

 

54、传入某个属性的set方法的隐含参数的名称是什么?

value,它的类型和属性所声名的类型相同。

 

55、C#支持多重继承么?

类之间不支持,接口之间支持。类对接口叫做实现,不叫继承。 类是爹、接口是能力,能有多个能力,但不能有多个爹。

 

56、C#中所有对象共同的基类是什么?

System.Object

 

57、通过超链接怎样传递中文参数?

答:用URL编码,通过QueryString传递,用urlencode编码 用urldecode解码

 

58、string、String;int、Int32;Boolean、bool的区别

String、Int32、Boolean等都属于.Net中定义的类,而string、int、bool相当于C#中对这些类定义的别名。CTS。

 

59、Server.Transfer和Response.Redirect的区别是什么?(常考)

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

Server.Transfer是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 这个过程中浏览器和Web服务器之间经过了一次交互。

   Response.Redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。这个过程中浏览器和Web服务器之间经过了两次交互。

Server.Transfer不可以转向外部网站,而Response.Redirect可以。

Server.Execute效果和Server.Transfer类似,但是是把执行的结果嵌入当前页面。

 

60、不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?(传智播客.Net培训班原创模拟题)

String是不可变的在这段代码中,s原先指向一个String对象,内容是 "abc",然后我们将s指向"123",那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

 

61、是否可以从一个static方法内部发出对非static方法的调用?

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部不能发出对非static方法的调用。

 

63、说出一些常用的类、接口,请各举5个

要让人家感觉你对.Net开发很熟,所以,不能仅仅只列谁都能想到的那些东西,要多列你在做项目中涉及的那些东西。就写你最近写的那些程序中涉及的那些类。

常用的类:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>

常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary

要出乎意料!不要仅仅完成任务!笔试不是高考!处处要显出牛!

 

64说出几个开源软件?MySQL、Linux、 Discuz、Apache、Paint.Net、Android、Chrome、Notepad++……

开源项目有一些是开发包。开源软件指的是可以直接用的。Jquery、NPOI、ASP.Net MVC、Silverlight  Toolkit、AJAX toolkit、json.Net  得瑟!

 

66、什么是sql注入?如何避免sql注入?

用户根据系统的程序构造非法的参数从而导致程序执行不是程序员期望的恶意SQL语句。使用参数化的SQL就可以避免SQL注入。

详细参考复习ppt。举例子,摆事实!

1' or 1=1

 

72、post、get的区别

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

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

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

用post可以提交的数据量非常大,而用get可以提交的数据量则非常小(2k),受限于网页地址的长度。

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

 参考阅读:http://www.cnblogs.com/skyNet/archive/2010/05/18/1738301.html

 

解释:引用类型和值类型的区别。

 

76、下面程序的执行结果是什么?(传智播客.Net培训班原创模拟题)

            int i = 10;

            Console.WriteLine(i++);

            Console.WriteLine(++i);

            Console.WriteLine(i=20);

  Console.WriteLine(i==20);

答案:

10

12

20

True       

解答:前两个参考第80题,i++表达式的值为i自增之前的值,所以打印10,执行完成后i变成11,执行++i的时候表达式的值为自增以后的值12。C#中赋值表达式的值为变量被赋值的值,因此最后一个就输出i赋值后的值20

while((line=reader.ReadLine())!=null)

{

}

下面程序的执行结果是什么?

bool b=false;

if(b=true)

{

    Console.WriteLine("yes");

}

else

{

    Console.WriteLine("no");

}

 

 

78、下列哪个名词和WebService不直接相关?(B)(传智播客.Net培训班原创模拟题)

A、UDDI

B、GUID

C、WSDL

D、SOAP

WebService解决的三个问题:接口的自我描述;采用Http协议等常规协议,不用写原始的Socket;基于Web服务器,不占用80端口之外的端口。

UDDI用来自动发现WebService的协议(*)

SOAP和HTTP的关系:SOAP基于Http协议的,和普通网页不同的是网页返回HTML,SOAP则是符合SOAP协议的XML数据。

WSDL(WebService Defination Language)是对WebService上的方法名、参数进行描述的协议。对接口的自描述。

SOAP(Simple Object Access Protocol)是对参数、返回值以什么样的格式进行传递进行描述的协议。对报文的格式规范。

实际工作中应该是自己调用别人的WebService或者别人调用自己的WebService,沟通语言就是WSDL,拿到WSDL什么都不用操心。

WebService是跨平台、跨语言调用,可以跨防火墙;缺点:效率低。所以适用于两个非内部系统的通讯(比如炒股软件和证券交易所之间的通讯)

WCF是对WebService、Socket、MQ等通讯方式的一个统一,底层还是采用这些通信协议,可以简化这些程序的开发,不用再换不同通信协议的时候重写代码并且学一堆新的技术。所以WCF和WebService不是一个竞争取代关系。

WCF是对.Net Remoting、WebService、MQ等通讯方式的一个高级封装,让我们开发不同通讯协议的程序的时候很简单,不用学更多的东西。并不是替代.Net Remoting、WebService、MQ这些东西。

 

81、.Net、ASP.Net、C#、VisualStudio之间的关系是什么?(传智播客.Net培训班原创模拟题)

答:.Net一般指的是.Net Framework,提供了基础的.Net类,这些类可以被任何一种.Net编程语言调用,.Net Framework还提供了CLR、JIT、GC等基础功能。

ASP.Net是.Net中用来进行Web开发的一种技术,ASP.Net的页面部分写在ASPx 文件中,逻辑代码通常通过Code-behind的方式用C#、VB.Net等支持.Net的语言编写。

C#是使用最广泛的支持.Net的编程语言。除了C#还有VB.Net、IronPython等。

VisualStudio是微软提供的用来进行.Net开发的集成开发环境(IDE),使用VisualStudio可以简化很多工作,不用程序员直接调用csc.exe等命令行进行程序的编译,而且VisualStudio提供了代码自动完成、代码高亮等功能方便开发。除了VisualStudio,还有SharpDevelop、MonoDevelop等免费、开源的IDE,VisualStudio Express版这个免费版本。

 

82、AJAX解决什么问题?如何使用AJAX?AJAX有什么问题需要注意?项目中哪里用到了AJAX?(传智播客.Net培训班原创模拟题)

答:AJAX解决的问题就是“无刷新更新页面”,用传统的HTML表单方式进行页面的更新时,每次都要将请求提交到服务器,服务器返回后再重绘界面,这样界面就会经历:提交→变白→重新显示这样一个过程,用户体验非常差,使用AJAX则不会导致页面重新提交、刷新。

AJAX最本质的实现是在Javascript中使用XMLHttpRequest进行Http的请求,开发中通常使用UpdatePanel、JQuery等方式简化AJAX的开发,UpdatePanel的方式实现AJAX最简单,但是数据通讯量比较大,因为要来回传整个ViewState,而且不灵活,对于复杂的需求则可以使用JQuery提供的ajax功能。

UpdatePanel的内部原理。

AJAX最重要的问题是无法跨域请求(www.rupeng.com →so.rupeng.com),也就是无法在页面中向和当前域名不同的页面发送请求,可以使用在当前页面所在的域的服务端做代理页面的方式解决。

在如鹏网项目中发帖的时候显示相关帖的功能、站内搜索项目中显示搜索Suggestion、数据采集项目中都用到了AJAX。

常考:不用任何框架编写一个AJAX程序。XHR:XmlHttpRequest。背也要背下来!

如果面试的时候谈AJAX谈到UpdatePanel的时候,就是NB的时候!!!先侃UpdatePanel的原理!引出为什么Dom操作的动态效果在用UpdatePanel提交刷新以后没有了,以及CKEditor被套在UpdatePanel中提交以后也变成了textarea,为什么把Fileupload放到Updatepanel中无法实现无刷新上传。说成是公司内部的一个菜鸟用UpdatePanel遇到这样问题,由于我懂XHR、UpdatePanel的原理,所以轻松解决!UpdatePanel生成的上万行JS脚本,不适合于互联网项目。“WebForm怎么可能把开发人员编程傻子呢!不明白原理苦命呀!还是MVC好呀,MVC。。。。。。。”

多准备几把斧子!上来找一切机会甩斧子!

 

84、Application 、Cookie和 Session 两种会话有什么不同?

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

谈到Session的时候就侃Session和Cookie的关系:Cookie中的SessionId。和别人对比说自己懂这个原理而给工作带来的方便之处。

 

85、开放式问题:你经常访问的技术类的网站是什么?

博客园(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文档、msdn论坛(遇到问题先到网上搜解决方案,还不行就问同事,同事也解决不了就去MSDN论坛提问,一定能得到解决)。Cnbeta.com。

 

86、你对.Net的GC的理解

GC是.Net的垃圾收集器,可以进行内存资源的回收,程序员无需关心资源的回收,当一个对象没有任何引用的时候就可以被回收了。一个对象可以被回收并不意味着一定会被立即回收,GC会选择时机进行回收。可以调用GC.Collect()让GC立即回收。GC不能回收非托管资源,对于非托管资源一般都实现了IDisposable接口,然后使用using关键字进行资源的回收。

 

 

106、不用JQuery等框架实现AJAX无刷新登录。(常考)

提示:用纯XMLHttpRequest实现。

 

107、Http状态码各是什么意思。

301(永久重定向)、302 :重定向404 :页面不存在

500:服务器内部错误

 

108、 对html文本框进行赋值的JQuery语句,对html文本框进行取值的JQuery语句,对TextBox服务端控件进行取值的语句JQuery。

 

110、Session有什么重大BUG,微软提出了什么方法加以解决?(常考)

iis中由于有进程回收机制,系统繁忙的话Session会丢失,IIS重启也会造成Session丢失。这样用户就要重新登录或者重新添加购物车、验证码等放到Session中的信息。可以用State  server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。但是(一定要写上,这样才够拽)我认为这不是Bug,只能说是In-Proc方式存储Session的缺陷,缺陷是和Bug不一样的,In-Proc方式存储Session会由服务器来决定什么时候释放Session,这是By Design,In-Proc方式不满足要求的话完全可以用StateServer和数据库的方式。

StateServer还可以解决集群Session共享的问题。

配置StateServer的方法:

http://support.microsoft.com/kb/317604

http://blog.csdn.Net/zj1103/archive/2008/09/14/2926773.ASPx

 

111、ASP.Net中<%%>、<%=%>、<%#%>的区别是什么

<%%>是执行<%%>中的C#代码,<%=%>是将=后表达式的值输出到Response中,<%#%>是数据绑定,一般用在ListView、GridView、Repeater等控件的绑定中。数据绑定分为:Eval:单向绑定和Bind:双向绑定。

 

113、说说在软件设计中你遇到的以空间换时间的例子?

参考回答:谈Cache(缓存)、索引这些例子。用额外的磁盘、内存空间的消耗来提高执行速度。Lucene.Net也是一个例子。

 

114、ASP.Net中的错误机制。(常考)

参考:

定制错误页来将显示一个友好的报错页面。

页面中未捕获一样会触发Page_Error(不常用),应用程序中的未捕获异常会触发Application_Error。通过HttpContext.Current.Server.GetLastError()、HttpContext.Current.Error;拿到未捕捉异常,记录到Log4Net日志中。

 

115、不用中间变量交换两个变量(常考)

            i = i + j;//i=30

            j = i - j;//j=10;

            i = i - j;//i=20;

            Console.WriteLine("i={0},j={1}",i,j);

另外一个解决方案:位运算。

int   a=5; int   b=6;

a=a^b;   b=b^a;   //b^a相当于   b^a^b   也就是   b^a^b的值就是a了,   下边相同   a=a^b; 

下面的SQL题是常考题中的常考题,必须重视!!!!!!!!

 

 

118、介绍几个使用过的开源的项目

Lucene.Net、NPOI、JQuery、ASP.Net AJAX  toolkit、Quartz.Net、JqueryUI、ASP.Net MVC。在CodePlex、SourceForge等网站上有更多的开源项目。

 

119、说出五个集合类

List、Dictionary、Set、Stack(先入后出)、Queue(先入先出)、Tree等。

解答:HashSet用于盛放不同的数据,相同的数据只保留一份

 

141、下面的HTML代码

<style type="text/css">

        #Text1{ background-color:Red}

        .txt{ background-color:Green}

        input {background-color:Black}

    </style>

<input id="Text1" type="text" class="txt" />

<input type="text" class="txt" />

两个文本框各是什么颜色?

参考资料:个人大于集体:元素单独设置的样式>class命名样式>标签样式。样式override父级别的。

 

14. 假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句

--实现代码:

ALTER TABLE BOOKS ADD PRIMARY KEY(BNO)

15.1 将NAME最大列宽增加到10个字符(假定原为6个字符)

--实现代码:

ALTER TABLE CARD ALTER COLUMN NAME varchar(10)

15.2 为该表增加1列NAME(系名),可变长,最大20个字符

--实现代码:

ALTER TABLE CARD ADD 系名 varchar(20)

锁的问题:

       public void Test(int i)

        {

            lock (this)

            {

                if (i > 10)

                {

                    i--;

                    Test(i);

                }

            }

        }

执行Test(10)是否会造成死锁?

答:不会,因为多线程才有锁的问题,线程无法自己锁自己(单线程必然是有先后执行顺序的,没必要锁)

问学网2011

3、Math.Round(11.5)、Math.Round(11.3)、Math.Round(-11.5)、Math.Round(-11.3)的值各是多少?

答案:Round 四舍五入:Math.Round(-11.5)=-12,因为是按照绝对值考虑。

扩展:Math.Ceiling(-11.6)=-11,因为负数的天花板也在上面。

Math.Floor(-11.5)=-12

 

面试题2  介绍ASP.Net和ASP的区别答:

1、ASP.Net支持预编译。

2、ASP.Net拥用更为强大的ADO.Net、身份认证体系、众多服务器控件、支持自定义控件编写。

3、ASP.Net拥有事件驱动的控件。

 

面试题3  说明ASP.Net的Application特性

答:Application对象用于记录不同用户访问网站留下的信息,如:可以用来当前访问网页的IP数,在服务运行期间都能持久的保存数据。Application支持启动和结束等事件。

 

面试题4  简述ASP.Net的页面运行机制

答:1、IIS接到客户请求。

2、IIS把请求交给ASPNet_ispai.dll进行处理。

3、(第一次运行)装载Bin目录下的dll。

4、(第一次运行)读取Web.config配置。

5、(第一次运行)初始化HttpApplication实例

6、创建HttpContext,创建HttpTextWrite。

7、找到对应的HttpHandler(.ASPx页面),处理http请求

8、处理Session。

9、返回结果结客户。

 

面试题5  简述ASP.Net一个页面的生命周期

答:客户端请求页面 预初始化(OnPreInit) 初始化(OnInit) 完成初始化(OnInitComplete) 载入ViewState(LoadViewState) 处理回送数据(IPostBackDataHandler) Page_OnPreLoad—》Page_OnLoad 回发更改通知(RaisePostDataChangedEvent) 处理回发事件(RaisePostBackEvent) Page_OnLoadComplete 预呈现(OnPreRender) 完成预呈现(OnPreRenderComplete) 保存ControlState(SaveControlState) 保存ViewState(SaveViewState) 呈现(Render) Page_UnLoad。

 

面试题6  C#中的托管代码是什么

答:由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。

 

面试题7  C#中的非托管代码是什么

答:在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。

 

面试题8  IL语言如何在.Net下运行

答:IL(MSIL)就是中间语言,基于高级语言和汇编语言中间伪汇编语言。

 

面试题17  什么是XCOPY部署

答:使用XCOPY命令在控制台下面把一个工程或应用程序从一个位置复制到另一个位置的简单方法。

 

面试题18  如何通过安装向导配置一个Web站点

答:创建一个安装项目---配置安装项目---生成安装包文件---在指定的服务器上运行安装包。

 

面试题20  C#支持哪几个预定义的值类型

答:int,float,bool,decmail,char面试题21  C#支持哪几个预定义的引用类型

答:object,String,ArrayList面试题22  如何解决装箱和拆箱引发的性能问题

答:可以使用泛类型解决装箱和拆箱引发的性能问题

 

面试题23  有几种方法可以判断值类型和引用类型

答:值类型是在栈中分配空间的,引用类型是在堆中分配空间的。判断的方法有三种:

1、通过赋值操作。

2、检测类型是否继承System.ValueType。

 

面试题38  Array与ArrayList的区别

答:array初始化大小不同,它是一维的,它是同构的

Arraylist可以添加删除项,它是多维的,它是异构的。

 

面试题39  Array与ArrayList如何进行互相转换

1、Araylist.adapter(array)

2、通过循环把array添加到arraylist;

3、arraylist.toarray(arraylist);

 

面试题51  简述接口及接口继承

答:1、只定义

2、可以有方法,事件、属性

3、公共的

4、不能实例

5、不能有字段

6、也可以继承接口。

 

面试题63  什么是ViewState

答:可以持久化客户端的状态。

 

面试题64  ViewState优缺点有哪些

不可夸页面。数据量大时性能底。

 

面试题76  ASP.Net有几种存储会话状态的方式

答:InProc(IIS进程)、StateServer(状态服务器)、SqlServer(sql数据库中)

 

面试题77  请介绍ASP.Net会话状态InProc的特点

答:关闭IIS就没有,比其他两种性能要高。不能夸服务器共享面试题78  请介绍ASP.Net会话状态StateServer的特点

答:需要夸服务器可以使用StateServer。面试题81  ADO.Net支持多少种数据源

答:Sql\oledb\odbc\xml\oracle

 

面试题82  如何提高数据库连接的使用效率

答:避免使用oledb\odbc等数据源

 

面试题83  如何安全地管理连接字符串

答:把字符串写在web.config文件里面。并且可以加密connectionstring加密。

 

面试题84  using子句管理数据库连接有何作用

答:获取、使用、释放,它能自动关闭数据库链接。

 

面试题86  ADO.Net中如何执行动态的SQL语句

答:使用SqlCommand对象的ExecuteRead、ExecuteNonQuery、ExecuteScalar方法

 

面试题87  解释ADO.Net中的事务处理作用

答:事务用于执行多个SQL语句时确保每个SQL语句都正确执行后才会对数据库做永久性修改,否则将不对数据库做任何更改。

 

面试题89  什么是LINQ

答:LINQ To Object, LINQ to XML,LINQ TO ADO.Net

 

面试题94  XML文档结构包括哪些

答:XML是可扩散标记语言;声明、元素、注示、字符引用、处理指令

 

面试题96  SOAP协议由哪几部分组成

答:SOAP是 WebService的基础协议。它是一种简单对象访问协议。基于XML。可序列化的。

 

面试题97  什么是WSDL语言

答:WebService的描述语言。

1、什么是WCF技术,WCF可以解决什么业务问题?2、什么是AOP,在C#中实现AOP有几种方式,列举你熟悉的AOP组件。

 

 

本人在深圳面试十来家,发现百分之八十的题目都是来之于以下题目,今天分享给大家,好好背吧.

1、@page指令只能在_ASPx___文件(填写扩展名)中使用,而@Control指令只能用在_ascx___文件(填写扩展名)中使用.

 

2、说明控件DataGrid,DataTable,DataView,DetailsView,formView,Repeator常用属性,如果要想把一条记录分成两列显示,以上控件哪些可以用,哪些不可以用?如果可用,如何处理?

答:DataMember:绑定的表或者视图,DataSourseID:数据源控制的ID,Visible:是否显示该控件. FormView,Repeator可以用,其他的控件不能可用,在ItemTemplate模板里用表格或者用列表来显示.

 

3、写出下列的含义 <% %>,<%# %>,

答:<% %>是服务器端代码块

   <%# %>表示绑定的数据源

 

4、请解释Page.IsPostBack,Response.Write,Response.End,DBNull.Value, DataSet,DataTable,DataView,SqlDataReader,stringbuilder,ArrayList?

   Page.IsPostBack:是否正是被首次加载

   Response.Write:打印指定的文本

   Response.End:停止当前的程序并返回结果

   DBNull是一个类。DBNull.Value是它唯一的实例。它指数据库中数据为空(<NULL>)时,在.Net中的值。

   DataSet:DataSet是数据在内存中的表示形式,是不依赖与数据库的独立数据集合.

   DataTable:是一个包含列和行表.

   DataView:数据视图

   SqlDataReader:提供一种从 SQL Server 数据库读取行的只进流的方式。

 

 5、 stringbuilder:StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

   ArrayList:动态加载的数组

   partial,protected,private,public的含义:

   答:partial:仅所属类的成员才可以访问

      protected:可被所属的类或派生自所属类的类型访问

      public:访问不受限制。

 

 

6、如何理解死锁的概念?死锁是如何形成的?在应用中应注意什么事项避免死锁?

死锁是一种条件,不仅仅是在关系数据库管理系统 (RDBMS) 中发生,在任何多用户系统中都可以发生的。当两个用户(或会话)具有不同对象的锁,并且每个用户需要另一个对象的锁时,就会出现死锁。每个用户都等待另一个用户释放他的锁。当两个连接陷入死锁时,Microsoft? SQL Server? 会进行检测。其中一个连接被选作死锁牺牲品。该连接的事务回滚,同时应用程序收到错误。

阻塞任何基于锁的并发系统都不可避免地具有可能在某些情况下发生阻塞的特征。当一个连接控制了一个锁,而另一个连接需要冲突的锁类型时,将发生阻塞。其结果是强制第二个连接等待,或在第一个连接上阻塞。

其实所有的死锁最深层的原因就是一个——资源竞争。

表现一:一个用户A 访问表A(锁住了表A),然后又访问表B,另一个用户B 访问表B(锁住了表B),然后企图访问表A。这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了。

同样用户B要等用户A释放表A才能继续这就死锁了。

解决方法:

这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法。

仔细分析你程序的逻辑:

1:尽量避免同时锁定两个资源;

2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源。

表现二:

用户A读一条纪录,然后修改该条纪录,这是用户B修改该条纪录,这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。

这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。

解决方法:

让用户A的事务(即先读后写类型的操作),在select 时就是用Update lock

 

7、什么是事务? 使用事务的语句有哪些?

答:事务是一种机制,是一个操作序列,它包括了一组数据库操作命令,并且所有的命令作为一个整体向

    系统提交或者撤消操作请求,要么全部,要么全部不执行.

    begin transaction

    commit transaction

rollback transaction

 

8、在update触发器中如何使用修改前,后的数据?

   if   update(字段1) 

  begin 

  ... 

  end

 

说明控件DataGrid,DataTable,DataView,DetailsView,formView,Repeator常用属性,如果要想把一条记录分成两列显示,以上控件哪些可以用,哪些不可以用?如果可用,如何处理?

 

写出下列的含义 <% %>,<%# %>?

 

请解释Page.IsPostBack,Response.Write,Response.End,DBNull.Value,DataSet,DataTable,DataView,SqlDataReader,stringbuilder,ArrayList?

 

如何理解死锁的概念?死锁是如何形成的?在应用中应注意什么事项避免死锁?

 

使用ASP.Net开发的网站有哪几种sessionState存储方式,分别各是什么?

 

为什么要用ISPORTBACK?

 

DataReader和DataSet的异同?

 

列举ASP.Net 页面之间传递值的几种方式?

 

.Net的错误处理机制是什么在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?

 

new有几种用法?

 

详述.Net里class和struct的异同!

 

什么是受管制的代码?

 

什么是强类型系统?

 

什么是装箱和拆箱?

 

什么是重载?

 

CTS、CLS和CLR分别作何解释?

 

ASP.Net的身份验证方式有哪些?分别是什么原理?

 

请解释进程与线程的区别?

62-63=1 等式不成立,请移动一个数字(不可以移动减号和等于号),使得等式成立,如何移动?

 

写一个冒泡排序?

 

用代码实现一加到一百?

 

斐波那契序列数的特点是除前两项数外,其他项数的值等于前两项的和。0,1,1,2,3,5,8,13,21,34,55,…求前24项斐波那契序列数?

 

用C#实现以下功能a产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。b对上面生成的数组排序,需要支持升序、降序两种顺序产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。(要求使用两种方法)

 

1.什么是CLR?   

答:CLR全称Common Language Runtime,翻译为公共语言运行时/公共语言运行库。因为 .Net 是一个多语言的平台,任何符合这个平台标准的编程语言编译后都可以在这个平台上运行,这些语言通过各自的编译器编译后生成中间代码CIL。既然是“公共”语言运行时,顾名思义就是可以被多种编程语言公共使用的。CLR提供了很多功能,比如内存管理(GC)、程序集加载、安全性、异常处理和线程同步等等功能。所以,基于CLR的编程语言都能使用这些功能。   

 

2.什么是应用程序域?    

应用程序域,英文Application Domain,一般简写为AppDomain。本来在Windows NT操作系统上,只有进程(Process)和线程(Thread)的概念。微软的 .Net 平台是基于Windows的,对Windows的抽象,所以 .Net 除了支持在操作系统原生的Process和Thread的概念外,还多抽象了一个叫做AppDomain的东西。对了,准确来说,是 CLR 对操作系统的抽象。Windows NT 进程的出现是为了把应用程序和其他应用程序以及操作系统内核代码隔离开来。通过怎么隔离的呢,一般来说,一个程序是一个进程,每个把程序的代码和数据以及要用到的资源放在一个特定的内存区域[虚拟地址空间],这样其他程序(进程)就不能轻易的访问到这个程序的数据,这个进程也不能轻易的访问其他程序的地址空间和Windows操作系统内核代码所在的内存。这样,Windows就在操作系统级别实现了程序之间和程序与OS内核之间资源的隔离。微软的 .Net 平台是基于Windows NT之上的抽象,所以Windows NT的很多东西都在 .Net平台(准确来说是CLR)都有相关的抽象。Windows NT 的进程对应于CLR 的进程,CLR的进程和Windows NT进程一样,也是为了应用程序之间的资源的。 前面说了Windows NT 进程是为了隔离程序与程序的,但是为了可扩展性,每个程序(进程)都可以加载第三方的DLL,这个DLL直接被加进了进程之中,成了进程的一部分,这个DLL可以访问进程里的所有资源了,也可以访问的原进程所能访问的所有资源了。这样第三方DLL就可能会破坏程序的数据和代码甚至会访问本来无权访问的资源。     而CLR在Windows NT基础上增加了AppDomain来解决上面的问题。AppDomain可以把第三方DLL放进程序所在的进程运行,但是却不会破环进程的数据结构、代码和其他资源。很多时候,可以把AppDomain理解为.Net平台上的缩小版进程。AppDomain还解决了一个问题,在一个Window NT进程里有多个AppDomain,而每个AppDomain都可以是一个应用程序。所以,.Net 平台的一个进程可以运行多个应用程序了,这也是AppDomain的功能之一。在IIS7里,每个工作进程w3wp.exe就通过运行多个AppDomain来运行多个Web应用程序的。这样对于操作系统来说,只需要1个进程就可以运行多个应用程序实例了,节省了资源,提高了系统健壮性。

 

3.什么是托管代码?    

托管代码和非托管代码是两个相对的概念。非托管代码是指直接运行在操作系统上的代码。而托管代码顾名思义就是需要在某个东西委托管理它的代,这个东西在.Net平台上就是CLR,说白了托管代码就是受CLR管理的代码,CLR[它的JIT编译器]负责把这些代码转换成操作系统能执行使用的代码。Java的中间代码就相当于.Net的托管代码,Java的虚拟机就相当于.Net的CLR。

 

4.什么是强类型系统?    

语言是静态类型是指:这门语言中每个变量和大部分表达式都有一个特定的类型,而且这个类型是在编译时已知的。而动态类型语言相反,某个变量的类型不但可以改变,而且只能在运行的时候才知道是否正确。C#属于静态语言,C#4.0出现的dynamic关键字,让C#具有了一部分动态语言的特性,C#不再是一门纯粹的静态类型语言。在很多资料和文档里,强类型指的得就是静态类型。强类型的定义是不明确的,在很多地方并不相同。所以我但是为了严谨起见,我一般不说强类型/弱类型,而是说静态类型/动态类型。

 

5.什么是重载?    

重载,overload。重载就是允许在一个类型中有多个同名的语言构造,比如一个类中有多个同名的方法,一个类中有多个同名的索引器等。C#支持方法重载,实例构造函数重载,索引器重载和操作符重载。方法重载是指允许同一个类中存在同名的多个方法,只需要满足一个条件:这些方法具有不同的签名。对于方法来说,签名是:方法的名称、参数的类型、个数和位置,不包括参数名、不包括返回值、不包括params修饰符,ref和out会被认为是相同的。【顺便说说,这是C#的规定,CLR是允许通过方法的返回值来区分同名方法的】  

 

6.是否可以继承String类?

不能。.Net FCL中System.String类定义为sealed,表示不可继承。之所以会被定义为sealed的是因为字符串太常用,太常见,CLR对它进行了特殊对待,比如拘留池和不可变性,如果String可以被继承的话,会打破CLR对它的一系列特殊对待和字符串的不可变性。  

 

7.using关键字有什么用?什么是IDisposable?    

①引入命名空间,这样减轻敲代码的工作量和代码量。    

②给名字冲突的类取别名,这样就可以区分不同命名空间里的同名类。    

③为所包括的所有实现了IDisposable接口的类型变量代表的资源进行释放。

本质是会自动生成一个try块和finally块,并在finally块里把变量转换成IDisposable并调用Dispose方法。    

IDisposable是一个接口,是为使用了非托管资源的类销毁资源准备的。如果某个类使用了非托管资源,就应该让这个类实现这个接口,这是.Net的非托管资源销毁的标准实现。IDisposable有一个Dispose方法,实现这个方法来销毁需要销毁的资源。

使用这个接口来销毁非托管资源有3种方法,

①手动在finally块调用这个方法。

②使用using包含这个变量,让编译器生成代码帮我们调用。

③如果大意之下,没有调用这个方法,这个方法最终也会在终结器中被调用。  

 

8.string str= null 和 string str="" 说明其中的区别?    

前者仅仅声明了一个字符串引用str,只是在线程栈上占用了4个字节的空间,str引用指向进程的虚拟内存地址空间的0x00000000,也就是没有指向任何对象。后者语句会在当前进程的字符串拘留池中查找,如果已经存在一个只为 "" 的字符串,则直接把这个 "" 所在虚拟空间的首地址(4字节)赋值给str变量,如果当前进程的字符串拘留池中没有 "" 这个字符串,则会在托管堆的GC堆里创建这个字符串,然后这这个字符串对象所在的首地址赋值给变量str。说白了,前者只定义了一个字符串引用,后者不但定义了一个字符串引用,而且把这个引用执行了一个具体的对象。在前者上调用方法会出现null引用错误,后者则不会。 

 

9.StringBuilder和String的区别?        

System.String是对应于C#的string,是C#的基元类型,受到了CLR和C#编译器的特殊对待,它是不可变字符串。每一个String实例构造以后,都不能改动或增长,每次对String的改动操作,其实都不是在原String对象上执行的,都会生成一个新的字符串。所以,String不适合用在大规模的字符串操作(截断、增长、替换等)上,这样会生成很多的String对象,而导致内存增大和GC回收的压力。而StringBuilder仅仅是万千.Net FCL类型中的一个普通引用类型而已,如果说特殊的话,仅仅特殊在它表示的数据是字符串而已。如果需要频繁对字符串进行变化操作的话,使用它比使用String能获得更行的性能。  

 

10.什么是虚函数?什么是抽象函数?   

虚函数只能可以有子类重写override,子类可以选择重写还是不重写。抽象函数必须由子类重写,子类没有选择权。虚函数可以定义在普通类里,也可以定义在抽象类里。而抽象函数只能定义在抽象类。   

 

11.用sealed修饰的类有什么特点?    

sealed类不能被继承。

 

12..Net的错误处理机制是什么?  

.Net的错误处理机制是基于Windows NT的「结构化异常实处理机制SEH」建立的。在C#中是使用try catch finally块表示的。

 

13.C#的checked和unchecked的作用是什么?

checked 和 unchecked是用来只是编译器检查或者不检查包含着的代码是否进行「算术计算溢出检查」的。如果checked的话,包围着的代码在运行时,如果出现算术计算溢出时,则会抛出异常。如果unchecked的话,即使溢出,也不会抛出异常。既不checked,也不unchecked的时候,默认是unchecked。

 

14.C#中的三元操作符是什么?    

C#只有一个三元操作符,它就是:条件操作符,【?:】。  a?b:c  这个表达式的值是:如果a为True,则表达式值为b;如果a为False,则表达式的值为c。

 

15.C#的is和as运算符有什么作用?    

is:检查对象的真实类型是否与给定类型兼容。兼容返回True,不兼容则返回False。as:把对象转换为给定的引用类型。能转换则返回引用,不能转换则返回null。is运算符既然检查是否兼容与引用类型也能检查是否兼容于值类型,但是不考虑用户自定义转换。as运算符只能把对象转换为引用类型,不能作用于值类型之上。

 

16.C#中如何利用DateTime获取季度?   

①通过DateTime.Now.Month属性拿到当前月份 month。    

②【month / 4 +1】就是季度数。

 

17.如何在DateTime时间追加工作日?

 

18.类和结构的区别是什么?    

类作为引用类型的代表,结构作为值类型的代表,他们之间的区别很多就是引用类型和值类型的区别。     值类型继承自ValueType;而引用类型继承自System.Object。值类型变量包含其实例数据,每个变量保存了其本身的数据拷贝(副本),因此在默认情况下,值类型的参数传递不会影响参数本身;而引用类型变量保存了其数据的引用地址,因此以值类型进行参数传递时会影响到参数本身,因为两个变量会引用了内存中的同一块地址。     值类型有两种表示:装箱与拆箱;引用类型只有装箱一种形式。而引用类型通常只有一种形式:装箱。值类型的内存不由GC控制,作用域结束时,值类型会自行释放,减少了托管堆的压力,因此具有性能上的优势。值类型是密封的(sealed),因此值类型不能作为其他任何类型的基类,但是可以单继承或者多继承接口;而引用类型一般都有继承性。值类型不具有多态性;而引用类型有多态性。值类型变量不可为null值,值类型都会自行初始化为0值;而引用类型变量默认情况下,创建为null值,表示没有指向任何托管堆的引用地址,所以会引发null引用异常。        

 

19.如何进行DateTime和字符串时间之间的转换?    

DateTime => 字符串时间  :ToString()方法以及几个重载,另外ToXxString方法。字符串时间 => DateTime  : 

① DateTime.Parse和DateTime.TryPase两个静态方法。

② Convert.ToDateTime("2013-03-21") 其实系统预定义的这些常见类型,比如Int32、DateTime等,特定类型和字符串直接的相互转换都有上面3种模式。   

 

20.简述C#中的虚方法?    

C#的虚方法用 virtual 关键字修饰。虚方法表示这个方法可以被子类重写override,当然子类是否重写由自己决定。虚方法是C#中实现多态的一种方式。当用一个父类型的变量调用虚方法时候,会根据这个变量指向的真实子类型调用子类的方法。

 

21.简述C#的密封类和密封方法?

C#中,密封类和密封方法都是使用sealed修饰。密封类表示这个类不能被继承。密封方法表示这个方法不能被重写,和virtual方法相对。

 

22.请介绍C#静态构造器的特点?静态构造函数在任意一个实例构造函数执行之前执行。    

①一个类型有0或1个静态构造器,不定义则木有,要定义也只能定义1个。    

②静态构造器不能有参数。    

③构造器是由CLR调用,而不是程序员调用的。    

④因为是由CLR调用的,所以不能有任何访问修饰符。    

⑤静态构造器的作用就是初始化类型的静态字段,并且静态构造器只能访问静态字段。    

⑥静态构造器会根据类型所在程序集的加载策略不同,而具有不同的性质。    

如果类型所在的程序集属于AppDomain中立加载,则即使在多个AppDomain中使用到了这个类型,也只会在进程第一个使用类型时候,静态构造器执行一次。而如果这个类型所在程序集是以AppDomain私有的方法加载的话,则在使用到它的每个AppDomain里,都执行一次这个类型的静态构造器。

 

23.简述C#派生类中的构造函数?    

C#的构造函数是不能继承的,即使这个构造函数是public或者proteced的。但是可以在派生类的构造函数后通过 base.父类构造器 调用父类构造器。其实不直接通过base显式调用父类构造器,在new一个子类实例的时候,编译器会默认往上调用父类的默认构造器,一层一层往上调用,知道System.Object的默认构造函数。

 

24.简述接口以及接口继承?

接口是一个或一组契约的合集,表示某个东西能做什么。接口是表示一组函数成员[方法、属性、事件、索引器]而不实现成员的引用类型。接口可以继承多个接口,接口也可以被多个接口继承。类和结构能够实现接口。

 

25.什么是多播委托?

多播委托就是在一个委托变量上绑定多个方法。这个委托实例就是多播委托。如果这个委托变量被使用的话,会按绑定顺序挨个触发所有的方法。

 

26.列举一个C#中的委托应用?

List<T>类的的Sort方法的其中一个重载,接受一个委托类型的参数。使用List<T>类的Sort方法时候,程序员可以放入一个委托变量。 LINQ的基石之一,扩展IEnumerable<T>接口的Enumerable类的那几十个方法,全是以委托为参数的。   

 

30.什么是Web窗体,什么是Web用户控件?    

Web窗体就是后缀为 .ASPx 的东西,在这个页面上,可以通过声明的方法定义控件,不管是HTML标签、还是HTML控件、还是服务器端控件、或者用户控件。Web窗体最后会被编译器编译成一个类,这个类派生自页面后台类,Web窗体上定义的那些控件最后并没有在Web窗体类中,而是跑到父类[页面后台类]中了。Web用户控件就是程序员自定义的控件,可以通过组合多个服务器端控件实现,也可以自己重头写而实现。写Web用户控件的目的就是为了重用,可以把Web用户控件用在多个Web窗体上,并且Web用户控件只能附属于Web窗体,因为它不能被单独访问。而Web窗体是可以被单独访问的。

 

31.简述XML的优缺点?    

XML一般是作为一种数据交换格式使用。    

优点:可扩展性强,根据程序员的定义,几乎可以表示任何数据;    

跨平台:可以跨多个异构平台传递数据,这也是他的主要用处所在。    

可读性强:因为是树状的文本文档。    

缺点:数据冗余,使用了很多标签和属性。 不容易解析,即使在.Net平台上有LINQ to XML的存在。    

上面两个缺点就是在很多领域XML被JSON这种数据交换格式替代的主要原因。JSON数据很轻量级,所以很容易传输,JSON不管是浏览器端的JavaScript还是其他端的其他语言,都可以很容易的解析。

  

32.什么是SOAP?SOAP协议由哪几部分组成?    

SOAP,简单对象访问协议,后来发展成已经不是简简单单的对象访问了,SOAP通过XML文档描述Web服务。     SOAP协议由 SOAP封装、SOAP编码规则、SOAP RPC表示、SOAP绑定4个部分组成。

 

33.什么是WSDL语言?    

WSDL:Web服务描述语言。其实就是用来描述Web服务的一种特殊格式的XML文档。在这个XML文档里,定义了Web服务的地址和这个服务上能进行的操作。说严肃点,就是WSDL定义了服务的元数据,用这些元数据可以在客户端创建服务代理。

 

39.什么是Web Service?    

Web Service,就是Web服务。就是把服务通过一个特殊的URL来公开而不是像以前那样通过组件来公开。     在.Net平台上,现在是用的主要Web Service技术有两种:ASP.Net XML Web Service和WCF。

 

55.什么是WPF?    

WinForm的下一次替换产品。用来编写C/S软件。

 

 

二、填空题

1.能用 foreach 遍历访问的对象的要求需要实现【IEnumerable或IEnumerable<T>】或者声明【一个返回值类型是一个包含一个public的MoveNext()方法,一个public的Current属性的public的GetEnumerator()方法】

 

2.Serializable

 

  1. 3.  List<T> 、 Dictionary<TKey,TValue> 、 ArrayList  、Hashtable 、HashSet<T>

                           

1.面向对象的思想主要包括什么?

封装,继承,多态

 

2.什么是ASP.Net 中的用户控件

用户控件就是 .ascx,复合控件就是.DLL

 

3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载? CTS、CLS 和CLR分别作何解释?

一个进程可以有 N个Domain, 一个Domain可以有 N个程序集, 他主要功用是分割程序的 ,

受管制代码就是有CLR公共语言运行时控制的代码 ! 这样的代码是类型安全的 ,

强类型就是有类型约束的比如说强类型 DataSet,

装箱就是把值类型装成引用类型 ,拆箱反之, 重载在同一个类中相同方法名不同参数 ,

CLR是公共语言运行时,CTS是通用类型系统 ,

 

4.列举一下你所了解的XML技术及其应用

XML用的地方太多了如果非要说一个就说 WebService 或Ajax 这些东西火 !说了老板开心

 

5.值类型和引用类型的区别?写出 C#的样例代码。

值类型存在内存栈里面,引用类型存在内存堆里面

 

6.ADO.Net 中常用的对象有哪些?分别描述一下。

ADO.Net里面的对象多了去了这里就说 SQL系列的(oledb 和 odbc系列不说了)SqlConnection,SqlCommand,SqlAdapter,SqlParameter,DataSet也算一个 ,至于用法地球人都知道

 

7.如何理解委托?

委托的正确理解就是函数指针

 

8.C#中的接口和类有什么异同。

接口只提供规则没有实现 ,接口可以多继承,类不行

 

10.UDP 连接和TCP连接的异同。

UDP是无连接状态的,TCP是有状态的这个才是他们的根本区别 ,也就是说TCP 比UDP可靠

 

11.ASP.Net 的身份验证方式有哪些?分别是什么原理?

ASP.Net验证有WinDows严整,form验证,PassPort验证,Windows一般在做企业内部 OA的时候用的多一些,FORM一般是做网站用的多他是采用 Cookie机制来实现的,PassPort是微软提供的一个WebService

 

12.进程和线程分别怎么理解?

进程就是一个程序实例 ,而线程可以理解为功能实例 !也就是说进程包含线程

 

13.什么是code-Behind 技术。

代码后制 !地球人都知道!.ASPX页面其实是个继承与 .CS文件类的类

 

14.活动目录的作用。

活动目录就是分布试环境目录服务 ,作用就是分布试应用程序的中心 !它记录程序各个部分的信息等等

 

15..Net 中读写XML的类都归属于哪些命名空间?

System.XML和System.Data

16.解释一下UDDI 、WSDL的意义及其作用。

UDDI说白了就是我们生活中114查号台 ,WSDL就是这个服务的说明书

 

17.什么是SOAP, 有哪些应用。

SOAP是简单传输协议用处想牛毛一样多!非要说一个就说WebService或开发Remoting程序用

 

18.如何部署一个ASP.Net页面。

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

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

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

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

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

 

2 .列举ASP.Net 页面之间传递值的几种方式。

答. 1.使用QueryString,  如....?id=1; response. Redirect()....

    2.使用Session变量

3.使用Server.Transfer

 

4.C#中的委托是什么?事件是不是一种委托?

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

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

是,是一种特殊的委托

 

5.override与重载的区别

答 :override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要

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

 

6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?

答 :

this.Server.Transfer

 

9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

答:不是。可以用任意类型。

 

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

答:一般为3层

        数据访问层,业务层,表示层。

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

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

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

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

缺点:  增加成本。

 

 

 

18.Net中读写数据库需要用到那些类?他们的作用?

答:DataSet:数据存储器。

    DataCommand:执行语句命令。

DataAdapter:数据的集合,用语填充。

 

20.什么是Code-Behind技术?

答:代码后植。

 

22.常用的调用WebService的方法有哪些?

答:1.使用WSDL.exe命令行工具。

2.使用VS.Net中的Add Web Reference菜单选项

 

23..Net Remoting 的工作原理是什么?

答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。

答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。

 

25.请详述在dotNet中类(class)与结构(struct)的异同?

答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.

 

26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:

namespace test

{

public delegate void OnDBOperate();

public class UserControlBase : System.Windows.Forms.UserControl

{

public event OnDBOperate OnNew;

privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)

{

if(e.Button.Equals(BtnNew))

{

//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。

}

}

}

答:if( OnNew != null ) 

OnNew( this, e );

 

27.分析以下代码,完成填空

string strTmp = "abcdefg某某某";

int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;

int j= strTmp.Length;

以上代码执行完后,i= j=

答:i=13,j=10

 

28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号

答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

 

29.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

public void test(int i)

{

   lock(this)

 {

   if (i>10)

   {

     i--;

     test(i);

   }

 }

}

答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

 

30.简要谈一下您对微软.Net 构架下remoting和webservice两项技术的理解以及实际中的应用。

答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

 

31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路

答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。

 

32.给定以下XML文件,完成算法流程图。

<FileSystem>

<DriverC>

<Dir DirName=”MSDOS622”>

<File FileName =” Command.com” ></File>

</Dir>

<File FileName =”MSDOS.SYS” ></File>

<File FileName =” IO.SYS” ></File>

</DriverC>

</FileSystem>

请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。

答:

void FindFile( Directory d )

{

   FileOrFolders = d.GetFileOrFolders();

   foreach( FileOrFolder fof in FileOrFolders ) 

   {

     if( fof is File ) 

     You Found a file;

     else if ( fof is Directory ) 

     FindFile( fof );

    }

}

 

35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。

答:IEnumerable 、 GetEnumerator。

 

36.GC是什么? 为什么要有GC?

答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

  System.gc()

  Runtime.getRuntime().gc()

 

37.String s = new String("xyz");创建了几个String Object?

答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

 

38.abstract class和interface有什么区别?

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

 

39.启动一个线程是用run()还是start()?

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

 

40.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

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

 

41.构造器Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

 

42.是否可以继承String类?

答:String类是final类故不可以继承。

 

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

答:会执行,在return前执行。

 

44.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

答:不对,有相同的hash code。

 

45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

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

 

47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

 

48.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不能。

 

49.List,Set,Map是否继承自Collection接口?

答:List,Set是Map不是

 

50.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

 

51.数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length的属性。String有有length()这个方法。

 

52.sleep() 和 wait() 有什么区别?

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

(b)正在运行的线程因为其它原因而阻塞。

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

 

53.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

 

54.谈谈final, finally, finalize的区别。

答:

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize()      方法是在垃圾收集器删除对象之前对这个对象调用的。

 

55.如何处理几十万条并发数据?

答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.

 

56.Session有什么重大BUG,微软提出了什么方法加以解决?

答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate   server或SQL   Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。

 

57.进程和线程的区别?

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

 

58.堆和栈的区别?

答:

    栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。

    堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。

59.成员变量和成员函数前加static的作用?

答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。

 

60.ASP.Net与ASP相比,主要有哪些进步?

答:ASP解释形,ASPx编译型,性能提高,有利于保护源码。

 

62.DataReader与Dataset有什么区别?

DataSet可以离线处理,前后滚动 和进行数据更新.

DataReader不能离线处理,是个只读向前的游标,但速度会很快

DataSet可以存储数据库各种对象的,比如表触发器等,而DataReader只能存储游标记录

 

什么是WSE?目前最新的版本是多少?

答:WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,目前最

新版本2.0。

 

110.大概描述一下ASP。Net服务器控件的生命周期

答:初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件

 

概述反射和序列化

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

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

传输该对象。在另一端,反序列化将从该流重新构造对象。

 

3.datagrid.datasouse可以连接什么数据源

[dataset,datatable,dataview,IList]等接口类型的对象

 

4. new有几种用法

第一种:new Class(),新建一个类的对象,但是此类必须的又可访问的构造函数

第二种:显式覆盖基类的方法:public new Menthod(){}

 

5.概述o/r mapping 的原理

利用反射,配置 将类于数据库表映射O/RMapping(有学习曲线,没有工具支持会相当大):存在的时间已经很长,我认为它的最主要的作用是关系型数据库的反设计——关系型数据库的设计就是要把现实中的对象和对象间关系设计成实体和实体间的关系映射。而O/RMapping恰好相反,它是把实体和实体间的关系映射还原回对象和对象间的关系。

 

6.类成员有( )种可访问形式

可访问性:public ,protected ,private,internal可能还有其他的访问形式,具体的情况视编码需要而定

 

7.用sealed修饰的类有什么特点

sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。密封类不能同时为抽象类。sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。

 

8.列举ADO.Net中的五个主要对象,并简单描述

connection,command,dataReader,transaction,dataset ...其上对于各种对象,连接不同的数据库将会有不同的对象变体

Connection: 数据库的连接需要此对象

Command:执行数据表变化的命令

dataReader和dataset主要是对数据库的表信息进行两种不同方式的读取,具体的读取得区别,后面将会有讲解。

 

9.执行下面代码后:

String strTemp ="yyaccpx 某某某";

Int i System.Text.Encoding.Default.GetBytes(strTemp).Length;

Int j = strTemp.Length;

结果:i=(14 ) ;j=(11 )

i=(14 ) ;j=(11 ) 中文在内存中占两个字节

但是只算是一个字符

 

10.C#中,string str = null 与 string str ="",请尽量用文字说明区别。(要点:说明详细的内存空间分配)

string str ="" 在栈中存取地址,在堆中存放对象的值而String str=null;仅仅在内存栈中分配了空间

 

11.详述.Net里class和struct的异同!

class:放在属于引用类型,故其存放于内存的堆中

Struct属于值类型,其存放于栈中,作为参数传递的时候属于值传递类与结构有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。

 

12.概述.Net里对 remoting 和 webservice 两项技术的理解和实际中的应用。

其实现的原理并没有本质的区别,在应用开发层面上有以下区别:

1)、Remoting可以灵活的定义其所基于的协议,如果定义为HTTP,则与Web Service就没有什么区别了,一般都喜欢定义为TCP,这样

比Web Service稍为高效一些

2)、Remoting不是标准,而Web Service是标准;

3)、Remoting一般需要通过一个WinForm或是Windows服务进行启动,而Web Service则需要IIS进行启动。

4)、在VS.Net开发环境中,专门对Web Service的调用进行了封装,用起来比Remoting方便

我建议还是采用Web Service好些,对于开发来说更容易控制Remoting一般用在C/S的系统中,Web Service是用在B/S系统中后者还是各语言的通用接口相同之处就是都基于XML为了能清楚地描述Web Service 和Remoting之间得区别,我打算从他们的体系结构上来说起:

Web Service大体上分为5个层次:

1). Http传输信道

2). XML的数据格式

3). SOAP封装格式

4). WSDL的描述方式

5). UDDI

总体上来讲,.Net 下的 Web Service结构比较简单,也比较容易理解和应用:一般来讲在.Net结构下的WebService应用都是基于.Net framework以及IIS的架构之下,所以部署(Dispose)起来相对比较容易点。从实现的角度来讲,首先WebService必须把暴露给客户端的方法所在的类继承于:System.Web.Services.WebService这个基类 其次所暴露的方法前面必须有[WebMethod]或者[WebMethodAttribute]

 

WebService的运行机理

首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy Class) 这个代理类负责与WebService服务器进行Request 和Response 当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP包装,然后把这个包作为一个Response发送给客户端的代理类(Proxy Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作。 这就是WebService的一个运行过程。

 

下面对.Net Remoting进行概括的阐述:

.Net Remoting 是在DCOM等基础上发展起来的一种技术,它的主要目的是实现跨平台、跨语言、穿透企业防火墙,这也是他的基本特点,与WebService有所不同的是,它支持HTTP以及TCP信道,而且它不仅能传输XML格式的SOAP包,也可以传输传统意义上的二进制流,这使得它变得效率更高也更加灵活。而且它不依赖于IIS,用户可以自己开发(Development)并部署(Dispose)自己喜欢的宿主服务器,所以从这些方面上来讲WebService其实上是.Net Remoting的一种特例。

ASP.Net Web 服务基础结构通过将 SOAP 消息映射到方法调用,为 Web 服务提供了简单的 API。通过提供一种非常简单的编程模型(基于将 SOAP 消息交换映射到方法调用),它实现了此机制。ASP.Net Web 服务的客户端不需要了解用于创建它们的平台、对象模型或编程语言。而服务也不需要了解向它们发送消息的客户端。唯一的要求是:双方都要认可正在创建和使用的 SOAP 消息的格式,该格式是由使用 WSDL 和 XML 架构 (XSD) 表示的 Web 服务合约定义来定义的。

.Net Remoting 为分布式对象提供了一个基础结构。它使用既灵活又可扩展的管线向远程进程提供 .Net 的完全对象语义。ASP.Net Web 服务基于消息传递提供非常简单的编程模型,而 .Net Remoting 提供较为复杂的功能,包括支持通过值或引用传递对象、回调,以及多对象激活和生命周期管理策略等。要使用 .Net Remoting,客户端需要了解所有这些详细信息,简而言之,需要使用 .Net 建立客户端。.Net Remoting 管线还支持 SOAP 消息,但必须注意这并没有改变其对客户端的要求。如果 Remoting 端点提供 .Net 专用的对象语义,不管是否通过 SOAP,客户端必须理解它们。

 

13.什么是code-behind技术

对于每一个ASPx文件可以相对应一个CS文件类,ASPx继承自对应的CodeBehind类,在编译时,CodeBhind类编译到webui工程对应的dll中,而ASPx页面中的内含代码和ASPx一起编译到temporary.dll中,被客户端浏览器访问。

 

14.概述三层结构体系

webUI层:封装基本的页面布局形式,即表示层

DataAccess(DAO)层:数据访问层,利用各种相关的技术,与底层数据库进行交互

Business层:业务逻辑层,封装整个程序的业务逻辑代码,主要与DAO层相关联

Model 层: 封装程序领域对象,该层可以在上面的三层之间进行很好的交互

这只是基本的三层架构设计,如果利用设计模式,则可以在此基础上进行灵活的变化

 

15.ASP.Net如何实现MVC模式,举例说明!

在ASP.Net 中实现MVC模式,相对于 JAVA没有那么快捷,但是仍是可以实现的

且由于代码隐藏和事件驱动得引入,意义不时很大,具体的实现,可以利用HttpHandler,如此,则应在Web.config文件中配置相关的节点

//Author:renfuming

<httpHandlers>

<add verb="*" path="SendTopic.ASPx" type="wyzBBS.Servers.SendRootHandler"/>

<add verb="*" path="SelectTopic.ASPx" type="wyzBBS.Servers.SelectTopicHandler"/>

<add verb="*" path="Question.ASPx" type="wyzBBS.Servers.QuestionHandler"/>

<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>

</httpHandlers>

 

16.值类型和引用类型的区别?

C# 支持两种类型:“值类型”和“引用类型”。 值类型(如 char、int 和 float)、枚举类型和结构类型。 引用类型包括类 (Class) 类型、接口类型、委托类型和数组类型。 值类型与引用类型的区别在于值类型的变量直接包含其数据,而引用类型的变量则存储对象引用。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量

 

17.了解程序集强签名吗?

用强名称来给程序集签名即谓之程序集强签名! 通过签发具有强签名的程序集合,可以确保名称的全局唯一性!因为强名称是依赖于唯一的密钥对来确保名称的唯一性,其他人不会生成与你相同的程序集名称(不同的私钥产生的名称不同) 强名称保护程序集的版本沿袭,因为强名称的唯一性能够确保没有其他人能够生成你的程序集的后续版本 强名称提供可靠的完整性检查,通过.Net Framework安全检查后,可以确保程序集内容在生成后未被更改过! 要注意的是,具有强名称的程序集引用其他程序集,如果这个程序集没有强名称,那么具有强名称的程序集所带来的好处,并依旧会产生DLL冲突!因此具有强名称的程序集只能引用其他具有强名称的程序集。

 

18. C#中接口和类有什么区别?

接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。但接口是一个行为的规范,里面的所有东西都是抽象的!

一个类只可以继承一个基类也就是父类,但可以实现多个接口。

 

19.View State 的作用和实现方式?

设置是否要保存控件的状态,其功能的实质是利用隐藏表单域实现 如果设为false且在Page_Load中没有重新绑定数据的话,只要页面一刷新,控件的内容就没了 如果设为true,则页面会保存控件的内容 在一些不需要保存状态的页面中最好把它设为false,为什设为true会增加服务器的负担隐藏域。

 

20.在ASP.Net中可以利用哪些对象存储状态?几种维持状态的对象应用场合以及优缺点?

主要用Application,session,viewstate,cookie,cache。

Application:应用程序级别的共享变量,优点是应用程序一开启该站点都能访问此变量。缺点:所有对此进行写入操作要加锁,由此共享变量锁带来的内存开销只有此应用程序关闭才能结束。

Session:维护用户个人的状态信息,优点:个人所从事活动,如登录信息,购物车信息等较安全而且又服务器维护较稳定。缺点:维持http 连接的sessionID仍然有缺陷,同时为每个用户维护状态信息,服务器内存开销很大。

Viewsate:如4所说,在一些场合能体现它的特点,但同时带来的缺点:影响整个页面的速度以及隐藏字段未加密。

Cookie:优点是将状态信息维护在客户端的一个文本文件,不需要耗用服务器的内存,是目前各大网站主要采用的方式。 缺点:由于其将状态

信息存贮在客户端,很可能由别人破解此文件而获得此人的个人隐私和机密信息。其受限大小为4K.

Cache:优点是提供的此功能很强大,如文件缓存依赖、API依赖、数据库依赖以用于存贮数据变化而更换缓存状态数据。提供存储周期

从httpcontext到httpruntime。缺点:耗用服务器内存。Request

 

21.简单说说 ASP.Net 中基于表单的身份验证方式的用法?

配置文件提供对站点那些目录的保护以及登录页面,当访问该目录的文件时,如果用户未认证通过,将转入登录页面,用户输入用户名和密码,将此参数传入认证模块authentication,该模块负责认证,如果通过将isauthentication设置为true,并返回用户的identity对象,此时页面将转入初始请求页,如果未通过,将不允许访问此目录。

 

22.是否了解 URL Rewrite?请简要说明其原理和在 ASP.Net 中的实现方式?

一般放在httpmodule中applicatioin_request事情中,当每次http请求,将此URL定位到重写的url函数中并返回重写后的URL地址。主要用于当我们站点板块移动时由于链接仍然指向旧地址,故可以重定向到新的地址,当然查询参数也可以重写。url-mapping配置

 

23. 在超过10万条记录的页面显示时,你如何处理分页,有多少种替代方案?

一般根据页面选择的第几页PageIndex,以及服务端配置文件配置的每页行数PageSize,通过传入参数传入存贮过程,由其返回相应行数pagesize的记录。即每一页数据都由服务端返回。可以利用缓存Cache,将数据一次加载,在结合ASP.Net2.0中数据库缓存方式,跟踪数据库表的信息的变化,自动更新缓存信息 对于数据分野页,也可以利用gridview的数据邦定控件的自动分页的方式

 

24. DataReader和DataSet的异同?

Daatareader和datatset都是通过从数据源取数据。不同点:datareader提供只进行流的方式读取数据。Dataset提供一种容器里面主要由表以及表关系,由适配器来提供从数据源取得数据填充到此容器的表中。

DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作

 

25. 你会利用那些工具进行数据库的性能分析及其优化?说说你觉得优化数据库需要注意的方面。比如:如何设计优化查询为主、插入更新为主的表。我主要通过执行计划以及索引优化以及客户统计和服务器跟踪工具来检测从SQL到索引、硬盘IO和时间等信息。 对于查询为主的表,首先对数据量的大小有一定的估计,当达到一定程度应采用水平分区,有的根据主键有的根据时间段来区分。由于此表往往插入更新不是太快,可对适当字段采用索引并且填充因子可以尽量大。SQL优化等。 对于插入更新为主的表,我觉得健壮性更重要,只要根据标准外部采用存贮过程就可以了。

 

26. 数据库某表主键自增,是很常见的情形。在ASP. Net或C#程序中,要求向该表插入一条记录,并马上从该表查出这条记录。不能使用时间戳,请问你如何实现?

插入一条记录会返回◎◎identity,通过它就是该记录的主键,再select一下就可以了

 

27.Xhtml的三种DOCTYPE分别有什么含义?请说明。简单说明各个情况下,那些标签可以使用,那些不可以使用?

XHTML 1.0 提供了三种DTD声明可供选择:W3C规范

过渡的(Transitional):要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。完整代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">严格的(Strict):要求严格的DTD,你不能使用任何表现层的标识和属性,例如<br>。完整代码如下:<!DOCTYPE html PUBLIC

"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

框架的(Frameset):专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD。完整代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

 

28.请举例说明XHtml代码规范,越多越好。

1).所有的标记都必须要有一个相应的结束标记以前在HTML中,你可以打开许多标签,例如<p>和<li>而不一定写对应的</p>和</li>来关闭它们。但在XHTML中这是不合法的。XHTML要求有

严谨的结构,所有标签必须关闭。如果是单独不成对的标签,在标签最后加一个"/"来关闭它。例如:

<br /><img height="80" alt="网页设计师" src="../images/logo_w3cn_200x80.gif" width="200" />

 

2).所有标签的元素和属性的名字都必须使用小写

与HTML不一样,XHTML对大小写是敏感的,<title>和<TITLE>是不同的标签。XHTML要求所有的标签和属性的名字都必须使用小写。例

如:<BODY>必须写成<body> 。大小写夹杂也是不被认可的,通常dreamweaver自动生成的属性名字"onMouseOver"也必须修改

成"onmouseover"。

 

3).所有的XML标记都必须合理嵌套

同样因为XHTML要求有严谨的结构,因此所有的嵌套都必须按顺序,以前我们这样写的代码:

<p><b></p></b>

必须修改为:

<p><b></b></p>

就是说,一层一层的嵌套必须是严格对称。

 

4).所有的属性必须用引号""括起来

在HTML中,你可以不需要给属性值加引号,但是在XHTML中,它们必须被加引号。例如:

<height=80>

必须修改为:

<height="80">

特殊情况,你需要在属性值里使用双引号,你可以用",单引号可以使用',例如:

<alt="say'hello'">

 

5).把所有<和&特殊符号用编码表示

任何小于号(<),不是标签的一部分,都必须被编码为& l t ;

任何大于号(>),不是标签的一部分,都必须被编码为& g t ;

任何与号(&),不是实体的一部分的,都必须被编码为& a m p;

注:以上字符之间无空格。

 

6).给所有属性赋一个值

XHTML规定所有属性都必须有一个值,没有值的就重复本身。例如:

<td nowrap> <input type="checkbox" name="shirt" value="medium" checked>

必须修改为:

<td nowrap="nowrap"> <input type="checkbox" name="shirt" value="medium" checked="checked">

 

7).不要在注释内容中使“--”

“--”只能发生在XHTML注释的开头和结束,也就是说,在内容中它们不再有效。例如下面的代码是无效的:

<!--这里是注释-----------这里是注释-->

用等号或者空格替换内部的虚线。

<!--这里是注释============这里是注释-->

以上这些规范有的看上去比较奇怪,但这一切都是为了使我们的代码有一个统一、唯一的标准,便于以后的数据再利用。

 

29. 客户端与浏览器:如果让你做一个TreeView控件,你的思路

我会采用javascript来做,主要采用htc。 数据通过XML. 通过htc操作XML并定义一些方法如:load、addnode、deletenode、updatenode、selectednode等方法一些属性如对图标、节点位置、节点前复选框等属性,也会提供一些默认事件如修改节点前后刷新等。

 

30.谈谈论坛聊天室IM和各种网站程序的交互与刷新思路的差异与共同点。

IM交互式信息通信 ajax刷新思路,对于集中刷新方式,应该有部分和全部刷新的区别这个希望大家上网去找详细的资料

 

31.谈谈对WSE的认识。

目前Web Service广泛采用Https来保障安全,但是该方法也有很多的缺点,尤其是应用于现在越来越复杂的Web Service安全需求。

 

1.Https提供的是点对点安全保护,而Web Service的特点就是消息往往就要经过多个中介才能到达最终的服务提供方,每个中介还有可能对消息做出些处理,也就是说它需要的是端到端的保护。这显然是Https所不能提供的。

 

2.Https是在传输层提供的安全,而不是在消息层面,也就是只有在传输的过程中才有消息才是安全的(加密的),而一旦到达了终点就是明文的了。比如可以从消息队列中将重要的信息窃取出来。

 

3.在Https的建立完共享密钥后,传递消息的时候并没有使用数字签名技术,所以也就无法得到抗否认性的能力。而这又是在电子商务中不可豁缺的。

 

4.由于Https提供的是传输层的安全,当然也就不可能达到消息安全所需要的灵活性的要求。比如加密消息中的部分元素;用不同的密钥加密消息的不同部分,从而让不同的消息接受者查看与之对应的信息。因此,为了适应Web Service对安全的特殊要求,IBM和MS等公司共同制定了WS-Security规范。重新回顾安全问题的三个概念:Confidentiality(机密性), Integrity(完整性), Authentication(身份鉴别),在Web Service使用SOAP(XML 格式)作为消息传输协议的背景下,分别产生了XML Digital Signature,XML Encryption和SAML(XML格式的Security Token), 而WS-Security则是如何将他们组合起来以满足Web Service安全需求的一套规范Web Services Enhancements 2.0 for Microsoft .Net (WSE)是一个用来建设Web服务的.Net类库,它支持最新的Web服务协议,包括WS-Security、WS-SecureConversation、WS-Trust、WS-Policy、WS-SecurityPolicy、WS-Addressing和 WS-Attachments。 WSE可使开发人员跨安全平台建设可升级的、安全的Web服务。它支持用传输的方式发送SOAP消息,而不是HTTP。另一个特点是具有建立SOAP路由器的功能,SOAP消息被发送给SOAP路由器,路由器再将工作交付给托管该服务的Web服务器。

 

32. 你用过哪些版本控制工具

各位同学兄弟可以根据自己的实际情况,谈论一些自己在使用这些工具时所遇到的问题以及体会TFS(ASP.Net)、cvs、svn

 

33. 在开发中你利用那些工具进行单元测试和模块测试NUNIT和PDM.页面测试 httpunuit

 

34.如何进行Bug管理由一个BUG跟踪平台,提供该程序的各个模块的BUG,以及级别,以及解决时间等信息

 

35. 如何生成和管理开发文档一般用NDOC来生成文档,大部分文档主要还是Word为主。主要是各个模块以及版本的控制等

 

37.如果你是一位软件架构师,您将如何去搭建一个符合n-tie的架构?并请描述一下您搭建的每一层的作用。(注意:请您考虑项目中有WebService的情况)

主要根据实际情况来决定搭建的层数以及各层的规格。 一般情况下,可如下搭:

数据层:主要提供数据服务,该层继承实体的接口并定制自己的数据提取和存储。并根据数据库类型如sqlserver、oracle等来建立此层服务。执行逻辑我个人偏好采用存贮过程。

业务层:由于定制的实体的属性和操作实体的方法已由数据层获得和执行,故业务逻辑组件对此实体进行组合以满足上层对业务逻辑组件的调用,webservice也是建在此层,以用于提供数据服务和逻辑执行。

表示层:一般定制不同的容器控件,以用于加载从业务层不同类型的数据便于呈现。当然也要此层的风格以及各种显示设置,webservice显示页面建在层,通过加载对指定目录的webservice提供的方法用于呈现。

 

38.可否简要的介绍ASP.Net 2.0 Membership,WebPart和C#的匿名函数和泛型等你认为.Net 2.0自己感兴趣的内容,希望可以简要地阐述其中的特点(本题非常的重要)

1) Membership:成员管理主要提供了一套对用户信息、用户角色、用户配置信息的用户系统。通过MembershipConfigHandler加载配置文件中公有的基础信息,对配置文件中的信息进行了严格的边界检查和类型检查。通过MembershipProvider提供了实现membership的抽象方法以及配置信息。由SqlMembershipProvider继承MembershipProvider来实现sqlclient的数据提供服务。业务和实现相剥离,以利于扩展。当然里面有很多特点也有很多细节等。

2) WebPart:主要提供页面布局和自定义以及换皮肤的功能。通过定义主题Theme来决定整体的布局风格,以及版面通过设定不同的区域Zone来决定版面各块的区域设置。通过不同的skin和css来确定风格。让用户能够保存自己的个人设置以及回复默认设置的功能。

3) 匿名函数:使用匿名方法可以减少因实例化委托所需要的开销,1.0中使用委托必须实例化委托并且必须将所调用的类和方法作为参数传入也即命名方法,当然如果所调用的委托具有多变性应该还采用命名方法。

4) 泛型:一般用于集合类。由于以前集合类数据都由framework隐式转化为object类型,这种开销很大。而用泛型,你就可以指定传入对象类型,而用于生成强类型的数据集,这样各种操作就可以使用指定类型的特性和优势了,自然速度也快了很多。当然接口、方法、类等都同样使用这种方式

5) 编译模型除了ASP.Net1.0支持的批编译,也提供新的编译模式。

6) 在httpmodule和httphander的处理速度要比以前1.0要快。

7) 在请求响应输出中,将缓冲区由ASP.Net宿主进程移到本机内存,可以消除资源瓶颈。

8) 其缓存模型提供了数据库依赖和缓存后替功能。

9) 与IIS6.0集中能提供更好的性能,主要体现在缓存和缓冲操作上。

 

39.ASP.Net中的内建对象Page对象:Web Form 网页在执行的时候会被编译成Page 对象,Page对象通知来设置与网页有关的属性、方法和事件;

Response对象:用来决定服务器端在什么时候或如何输出数据到客户端;

Request对象:用来捕获由客户端返回服务器的数据;

Server对象:提供服务器端最基本的属性和方法;

Application对象:用来记录不击客户端共享的变量;

Session对象:用来记录各客户端的专用变量;

Cookies对象:为Web应用程序保存访问者相关信息.

 

40..Net具有跨平台的性质吗?现在是否可以在UNIX平台上广泛的应用?非常了不起的工具INet,实现.Net跨平台!

执行摘要微软的.Net是一套连接信息、人、系统、设备的软件技术。此新一代的技术是基于Web服务和小模块创建的应用,可以使任何应用彼此互连并且能连接到InterNet上的其他大型应用。.Net的基础核心是集成开发设备(IDE), Visual Studio.Net和一种新的应用执行环境-Microsoft .Net开发框架。这些系统使开发人员能够像灵活使用 Visual Basic 和C#一样开发强大的应用程序和Web服务。 但是有局限的一点是:用.Net开发的应用程序必须运行于.Net服务器或者客户端。如果所有的用户都按照.Net运行环境技术标准化这也许可行,但是实际上当然不是这样。成千上百万台电脑运行的是Linux、Unix,OS X 和其他操作系统,而这种环境不是.Net应用程序的标准化运行环境。因此软件开发组织需要考虑: 如何有效利用它们的 Microsoft开发人员和Visual Studio.Net的技术特征和优势但是仍然可以访问非微软服务器, PC机,手提电脑和移动设备?怎样才能使他们用.Net编写的程序运行时不受运行环境的局限? Stryon公司开发的iNet解决了这一难题。iNet可以使应用程序和Web服务在Visual Basic 和C#下开发,但发布于任何支持Java的运行环境,网络主机也从IBM网络服务器扩展到Linux和Unix的服务器。有了iNet技术,开发人员既可以利用Visual Studio .Net开发环境的优势,但是又不局限于Microsoft的运行环境。

 

41.写出global.asax文件的主要用途?

作用和ASP的global.asa一样,它可以使我们执行ASP.Net应用程序一层事件的代码,如:application_start等等,使你可以在这些事件中作一些自定义的处理;也可以定义应用程序一层的变量,如:Session等,这在整个ASP.Net应用程序中起作用。

 

42.列出web.config的常用的配置段,并对每个配置段进行简要的说明。

Web.config文件是一个XML文本文件,它用来储存 ASP.Net Web 应用程序的配置信息(如最常用的设置ASP.Net Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过VB.Net新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的 Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。在运行时对Web.config文件的修改不需要重启服务就可以生效(注:<processModel> 节例外)。当然Web.config文件是可以扩展的。appSettings包含自定义应用程序设置。

system.web 系统配置

compilation动态调试编译设置

customErrors自定义错误信息设置

authentication身份验证,此节设置应用程序的身份验证策略。

authorization授权, 此节设置应用程序的授权策略.

 

43.ASP.Net中的组件相对于ASP的组件部署方面有什么优点?

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用vbs/js这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:

1)、代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

2)、代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

3)、弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上php/jsp,其次就是缺乏完善的纠错/调试功能,这点上ASP/php/jsp差不多。那么,ASP.Net有哪些改进呢? ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括c++ , vb,js等等,当然,最合适的编程语言还是ms为.Net frmaework专门推出的c#(读csharp),它可以看作是vc和java的混合体吧,尽管ms自己讲c#内核中更多的象vc,但实际上我还是认为它和java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且c#和c++、java一样提供了完善的调试/纠错体系

1)、 经过解释的语言有两个缺点,一是缺乏强类型,二是缺乏一个编译环境,这将导致性能和伸缩性的问题

2)、ASP并没有为应用程序提供一个固有的结构,将代码和页面混合在一起使代码变得很复杂,源文件变的很大,结构和代码复用很难,维护也很难。

3)、ASP中无论工作多简单都必须在ASP中编写代码完成绝大多数工作,如验证表单字段等,其他还包括告诉缓存页面内容,保持表单状态等,甚至添加新HTML控件也需要写原始HTML。

4)、浏览器兼容性。移动设备访问站点,必须编写代码检测这些设备,同时为其提供合适内容。

5)、标准兼容性,XHTML被越来越多人接受,XML和XSL/T也得到广泛应用,并且与移动设备进行通信还应该支持WML,这意味着ASP应用不仅要利用现有标准工作,还要易于升级以支持将来的标准 ASP.Net四个主要目标 使代码更清晰 提高可部署性,可伸缩性,安全性以及可靠性 为不同浏览器和设备提供更好的支持 支持一种全新的web应用程序。

 

44.简述一下webservice技术,在何种场合下适合使用这项技术?

Web Service 是一种新的web应用程序分支,他们是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。Web Service是一种应用程序,它可以使用标准的互联网协议,像超文本传输协议(HTTP)和XML,将功能纲领性地体现在互联网和企业内部网上。可将Web服务视作Web上的组件编程。P2P 跨平台技术性应用 Web Services扮演什么角色?Web services角度所预示的四个趋势:

◆内容更加动态:一个web service必须能合并从多个不同源来的内容,可以包括股票,天气,新闻等,在传统环境中的内容,如存货水平,购物订单或者目录信息等,都从后端系统而来

◆带宽更加便宜:web services可以分发各种类型的内容(音频,视频流等)

◆存储更便宜: web services必须能聪明地处理大量数据,意味着要使用数据库,LDAP目录,缓冲,和负载平衡软件等技术保持可扩展能力

◆普遍式计算更重要:web services不能要求客户使用某一版本的windows的传统浏览器,必须支持各种设备,平台,浏览器类型,各种内容类型。两种重要技术要达到这样的目标,Web services要使用两种技术:

◆XML XML是在web上传送结构化数据的伟大方式,Web services要以一种可靠的自动的方式操作数据,HTML不会满足要求,而XML可以使web services十分方便的处理数据,它的内容与表示的分离十分理想

◆SOAP SOAP使用XML消息调用远程方法,这样web services可以通过HTTP协议的post和get方法与远程机器交互,而且,SOAP更加健壮和灵活易用。

 

51.Params是什么含义?

Params是C#中的关键字,采用此关键字可以指定参数数目为可变; 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方

法声明中只允许一个 params 关键字。

如:

public int fConvert(params int[] iParas)

{

}

 

52. C#中有没有运算符重载?能否使用指针?

有,C#中也有运算符重载,如对运算符“+”进行重载;

C#中也可以使用指针,但要声明为unsafe。

 

53.Internal修饰符有什么含义?

internal数据访问修饰符,表示对所修饰的成员在当前程序集内可以进行没有任何限制的访问;但在当前程序集外部则不能进行访问,其可访问性级别低于public ,高于protected。

 

55. 私有程序集与共享程序集有什么区别?

一个私有程序集通常为单个应用程序所使用,并且存储于这个应用程序所在的目录之中,或此目录下面的一个子目录中。共享程序集通常存储在全局程序集缓存(Global Assembly Cache)之中,这是一个由.Net运行时所维护的程序集仓库。共享程序集通常是对许多应用程序都有用的代码库,比如.Net Framework类。

 

56. 请解释进程与线程的区别?进程与程序的区别?

一般,一个应用程序对应于一个或多个进程,可以把进程看作是该应用程序在操作系统中的标识;而一个进程通常由多个线程组成,而线程是操作系统为该应用程序分配处理时间的最小单元。

 

57. CLR与IL分别是什么含义?

CLR:公共语言运行时,类似于Java中的JVM,Java虚拟机;在.Net环境下,各种编程语言使用一种共同的基础资源环境,这就是CLR,CLR将直接与操作系统进行通信,而编程语言如C#.Net将尽量避免直接与操作系统直接通信,加强了程序代码的执行安全性,可以这样看:CLR就是具体的编程语言如:C#.Net与操作系统之间的翻译,同时它为具体的编程语言提供了许多资源:

? 面向对象的编程模型(继承、多态、异常处理和垃圾收集等)

? 安全模型

? 类型系统

? 所有.Net基类

? 许多.Net Framework类

? 开发、调试和评测(profiling)工具

? 执行和代码管理

? IL到本地代码(IL-to-native)转换器和优化器IL,中间语言,也称MSIL,微软中间语言,或CIL,通用中间语言;所有.Net源代码(不管用哪种语言编写)在进行编译时都被编译成IL。在应用程序运行时被即时(Just-In-Time,JIT)编译器处理成为机器码,被解释及执行。

 

58 .请解释ASP。Net中以什么方式进行数据验证

Aps.Net 中有非空验证,比较验证,取值范围验证,正则表达式验证及客户自定义验证五大控件,另还有一个集中验证信息处理控件

 

59(1).WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。

在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件自动传回是当我们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端只有通过自动传回才能实现服务端事件的机制,如果没有自动回传机制就只能调用客户端事件,而不能调用服务端事件

 

59(2).WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?

可以调用

例如:<ASP:TextBox id="TextBox1" runat="server">

</ASP:TextBox>

<INPUT id="Button2" value="Button" name="Button2"

runat="server" >

 

59(3).请解释ASP.Net中的web页面与其隐藏类之间的关系?

一个ASP.Net页面一般都对应一个隐藏类,一般都在ASP.Net页面的声明中指定了隐藏类例如一个页面Tst1.ASPx的页面声明如下

<%@ Page language="c#" Codebehind="Tst1.ASPx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>

Codebehind="Tst1.ASPx.cs" 表明经编译此页面时使用哪一个代码文件

Inherits="T1.Tst1" 表用运行时使用哪一个隐藏类

 

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

如果要操作一个不断增长的字符串,尽量不用String类,改用StringBuilder类。两个类的工作原理不同:String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.Net框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。

 

64.请叙述属性与索引器的区别。

属性                             索引器

通过名称标识。                  通过签名标识。

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

可以为静态成员或实例成员。      必须为实例成员。

属性的 get 访问器没有参数。      索引器的 get 访问器具有与索引器相同的形参表。

属性的 set 访问器包含隐式 value 参数。 除了value 参数外,索引器的 set 访问器还具有与索引器相同的形参表

 

65.请叙述const与readonly的区别。

每一个class至多只可以定义一个static构造函数,并且不允许增加访问级别关键字,参数列必须为空。

为了不违背编码规则,通常把static数据成员声明为private,然后通过statci property提供读写访问。

const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。const数据成员的声明式必须包含初值,且初值必须是一个常量表达式。因为它是在编译时就需要完全评估。

const成员可以使用另一个const成员来初始化,前提是两者之间没有循环依赖。readonly在运行期评估赋值,使我们得以在确保“只读访问”的前提下,把object的初始化动作推迟到运行期进行。readonly 关键字与 const 关键字不同:const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数。 readonly 只能在声明时或者构造函数里面初始化,并且不能在 static 修饰的构造函数里面。

 

66.您需要创建一个ASP.Net应用程序,公司考虑使用Windows身份认证。所有的用户都存在于AllWin这个域中。您想要使用下列认证规则来配置这个应用程序:

    a、 匿名用户不允许访问这个应用程序。

    b、 所有雇员除了Tess和King都允许访问这个应用程序。

  请问您应该使用以下哪一个代码段来配置这个应用程序?( A )

A. <authorization>

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

   <allow users=”*”>

   <deny users=”?”>

 </authorization〉

 

67.您要创建一个ASP.Net应用程序在DataGrid控件中显示一个经过排序的列表。产品数据被存放于一个名为PubBase的Microsoft SQL Server 数据库。每个产品的主键是ProductID,Numeric型并且每个产品有一个字母描述字段,名为ProductName。您使用一个SqlDataAdapter对象和一个SqlCommand对象通过调用一个存储过程从数据库中获取产品数据。您将SqlCommand对象的CommandType属性设置为CommandType.StoredProcedure,并将它的CommandText属性设置为procProductList。您成功的获取了一个DataTable对象

 

69. 列举ASP.Net 页面之间传递值的几种方式。

1. 使用QueryString, 如....?id=1; response. Redirect()....

2.使用Session变量

3.使用Server.Transfer

 

70. 请说明在.Net中常用的几种页面间传递参数的方法,并说出他们的优缺点。

session(viewstate)     简单,但易丢失

application             全局

cookie                 简单,但可能不支持,可能被伪造

input ttype="hidden"    简单,可能被伪造

Url                     参数简单,显示于地址栏,长度有限

数据库稳定,安全,但性能相对弱Using 引入一个名子空间,或在使用了一个对像后自动调用其IDespose,New 实例化一个对像,或修饰一个方法,表此方法完全重写此方法

 

71.请简述一下用Socket进行同步通讯编程的详细步骤

1)、在应用程序和远程设备中使用协议和网络地址初始化套接字

2)、在应用程序中通过指定端口和地址建立监听

3)、远程设备发出连接请求

4)、应用程序接受连接产生通信scoket

5)、应用程序和远程设备开始通讯(在通讯中应用程序将挂起直到通讯结束)

6)、通讯结束,关闭应用程序和远程设备的Socket回收资源

 

72.什么叫做SQL注入,如何防止?请举例说明。

利用sql关键字对网站进行攻击。过滤关键字'等 所谓SQL注入(SQL Injection),就是利用程序员对用户输入数据的合法性检测不严或不检测的特点,故意从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取想得到的资料。http://localhost/lawjia/show.ASP?ID=444 and user>0,这时,服务器运行Select * from 表名 where 字段=444 and user>0这样的查询,当然,这个语句是运行不下去的,肯定出错,错误信息如下:

?错误类型:Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 'sonybb' 转换为数据类型为 int 的列时发生语法错误。

 

81.abstract class和interface有什么区别?

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

 

82.启动一个线程是用run()还是start()?

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

 

83.构造器Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

 

84.是否可以继承String类?

答:String类是final类故不可以继承。

 

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

答:会执行,在return前执行。

 

86.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

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

 

87.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

 

88.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不能。

 

89.List, Set, Map是否继承自Collection接口?

答:List,Set是Map不是

 

161.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

 

90.数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length的属性。String有有length()这个方法。

 

91.sleep() 和 wait() 有什么区别?

答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程

 

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

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

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

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

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

 

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

Connection:主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。

Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源。

DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。

DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.Net 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet包含若干DataTable、DataTableTable包含若干DataRow。

DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(通过游标)读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。

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

 

3、列举ASP.Net 页面之间传递值的几种方式。

1).使用QueryString, 如....?id=1; response. Redirect()....

2).使用Session变量

3).使用Server.Transfer

4).Cookie传值

 

13、在dotNet中类(class)与结构(struct)的异同?

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

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

 

14、堆和栈的区别?

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

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

 

15、能用foreach遍历访问的对象的要求

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

 

16、GC是什么? 为什么要有GC? 

C/C++中由程序员进行对象的回收像学校食堂中由学生收盘子,.Net中由GC进行垃圾回收像餐馆中店员去回收。

GC是垃圾收集器(Garbage Collection)。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection需要程序员调用Dispose进行资源的回收。

要请求垃圾收集,可以调用下面的方法:GC.Collect()一般不需要手动调用GC.Collect()。当一个对象没有任何变量指向(不再能使用)的时候就可以被回收了。

基础知识:当没有任何变量指向一个对象的时候对象就可以被回收掉了,但不一定会立即被回收。

            object obj = new object();//只有new才会有新对象

            Console.WriteLine(obj);

            object obj2 = obj;

            obj = null;

            obj2 = null;

            Console.WriteLine();

 

18、值类型和引用类型的区别?

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

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

3).值类型不可能包含 null 值:然而,可空类型功能允许将 null 赋给值类型。

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

 

19、C#中的接口和类有什么异同。

不同点:

不能直接实例化接口。

接口不包含方法的实现。

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

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

相同点:

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

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

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

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

 

20、abstract class和interface有什么区别?

相同点:

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

不同点:

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

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

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

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

接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。

加分的补充回答:讲设计模式的时候SettingsProvider的例子。

 

21、是否可以继承String类?

String类是sealed类故不可以继承。

 

31、string str = null 与 string str =””说明其中的区别。

答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 string str = null没有string对象,string str = “”有一个字符串对象。

string s3 = string.Empty;//反编译发现,string.Empty就是在类构造函数中 Empty = "";

 

34.在.Net中所有可序列化的类都被标记为_____?

答:[serializable]

 

35、什么是code-Behind技术。

就是代码隐藏,在ASP.Net中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像以前ASP那样都代码和html代码混在一起,难以维护。code-Behind是基于部分类技术实现的,在我的项目的三层代码生成器中用到了部分类。

 

 

43.StringBuilder 和 String 的区别?

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

如果要操作一个不断增长的字符串,尽量不用String类,改用StringBuilder类。两个类的工作原理不同:String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.Net框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。

 

44、.请叙述属性与索引器的区别。 (*)

属性 索引器    

  通过名称标识。 通过签名标识。    

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

  可以为静态成员或实例成员。 必须为实例成员。    

  属性的   get   访问器没有参数。 索引器的   get   访问器具有与索引器相同的形参表。    

  属性的   set   访问器包含隐式   value   参数。 除了   value   参数外,索引器的   set   访问器还具有与索引器相同的形参表。

 

46.  请解释ASP。Net中的web页面与其隐藏类之间的关系?

一个ASP.Net页面一般都对应一个隐藏类,一般都在ASP.Net页面的声明中指定了隐藏类例如一个页面Tst1.ASPx的页面声明如下

<%@ Page language="c#" Codebehind="Tst1.ASPx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>

Codebehind="Tst1.ASPx.cs" 表明经编译此页面时使用哪一个代码文件

Inherits="T1.Tst1" 表用运行时使用哪一个隐藏类

ASPx页面会编译生成一个类,这个类从隐藏类继承。

 

49、您在什么情况下会用到虚方法?它与接口有什么不同?

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

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

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

 

不定项选择:

(1) 以下叙述正确的是: B C

A. 接口中可以有虚方法。B. 一个类可以实现多个接口。 C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。

 

(2) 从数据库读取记录,你可能用到的方法有:B C D

A. ExecuteNonQuery            B. ExecuteScalar      C. Fill    D. ExecuteReader

 

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

  A.Close B.Dispose C.Finalize  

  D.using E.Quit  

 

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

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

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

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

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

 

51. 单项选择:

(1)下列选项中,(C)是引用类型。

a)enum类型   b)struct类型 c)string类型   d)int类型

 

(2).关于ASP.Net中的代码隐藏文件的描述正确的是(C)

a)Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名。

b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。

c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件。

d)以上都不正确。

 

(3).下列描述错误的是(D)

a)类不可以多重继承而接口可以;

b)抽象类自身可以定义成员而接口不可以;

c)抽象类和接口都不能被实例化;

d)一个类可以有多个基类和多个基接口;

 

52、DataReader和DataSet的异同?

DataReader使用时始终占用SqlConnection,在线操作数据库每次只在内存中加载一条数据,所以占用的内存是很小的是只进的、 只读的DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接(非连接模式)DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行 回传更新操作(动态操作读入到内存的数据)

 

53、public static const int  A = 1;这段代码有错误么?

错误:const不能被修饰为static ;因为定义为常量 (const )后就是静态的(static )。

 

54、传入某个属性的set方法的隐含参数的名称是什么?

value,它的类型和属性所声名的类型相同。

 

55、C#支持多重继承么?

类之间不支持,接口之间支持。类对接口叫做实现,不叫继承。 类是爹、接口是能力,能有多个能力,但不能有多个爹。

 

56、C#中所有对象共同的基类是什么?

System.Object

 

57、通过超链接怎样传递中文参数?

答:用URL编码,通过QueryString传递,用urlencode编码 用urldecode解码

 

58、string、String;int、Int32;Boolean、bool的区别

String、Int32、Boolean等都属于.Net中定义的类,而string、int、bool相当于C#中对这些类定义的别名。CTS。

 

59、Server.Transfer和Response.Redirect的区别是什么?(常考)

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

Server.Transfer是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 这个过程中浏览器和Web服务器之间经过了一次交互。

   Response.Redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。这个过程中浏览器和Web服务器之间经过了两次交互。

Server.Transfer不可以转向外部网站,而Response.Redirect可以。

Server.Execute效果和Server.Transfer类似,但是是把执行的结果嵌入当前页面。

 

60、不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?(传智播客.Net培训班原创模拟题)

String是不可变的在这段代码中,s原先指向一个String对象,内容是 "abc",然后我们将s指向"123",那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

 

61、是否可以从一个static方法内部发出对非static方法的调用?

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部不能发出对非static方法的调用。

 

63、说出一些常用的类、接口,请各举5个

要让人家感觉你对.Net开发很熟,所以,不能仅仅只列谁都能想到的那些东西,要多列你在做项目中涉及的那些东西。就写你最近写的那些程序中涉及的那些类。

常用的类:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>

常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary

要出乎意料!不要仅仅完成任务!笔试不是高考!处处要显出牛!

 

64说出几个开源软件?MySQL、Linux、 Discuz、Apache、Paint.Net、Android、Chrome、Notepad++……

开源项目有一些是开发包。开源软件指的是可以直接用的。Jquery、NPOI、ASP.Net MVC、Silverlight  Toolkit、AJAX toolkit、json.Net  得瑟!

 

66、什么是sql注入?如何避免sql注入?

用户根据系统的程序构造非法的参数从而导致程序执行不是程序员期望的恶意SQL语句。使用参数化的SQL就可以避免SQL注入。

详细参考复习ppt。举例子,摆事实!

1' or 1=1

 

72、post、get的区别

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

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

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

用post可以提交的数据量非常大,而用get可以提交的数据量则非常小(2k),受限于网页地址的长度。

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

 参考阅读:http://www.cnblogs.com/skyNet/archive/2010/05/18/1738301.html

 

解释:引用类型和值类型的区别。

 

76、下面程序的执行结果是什么?(传智播客.Net培训班原创模拟题)

            int i = 10;

            Console.WriteLine(i++);

            Console.WriteLine(++i);

            Console.WriteLine(i=20);

  Console.WriteLine(i==20);

答案:

10

12

20

True       

解答:前两个参考第80题,i++表达式的值为i自增之前的值,所以打印10,执行完成后i变成11,执行++i的时候表达式的值为自增以后的值12。C#中赋值表达式的值为变量被赋值的值,因此最后一个就输出i赋值后的值20

while((line=reader.ReadLine())!=null)

{

}

下面程序的执行结果是什么?

bool b=false;

if(b=true)

{

    Console.WriteLine("yes");

}

else

{

    Console.WriteLine("no");

}

 

 

78、下列哪个名词和WebService不直接相关?(B)(传智播客.Net培训班原创模拟题)

A、UDDI

B、GUID

C、WSDL

D、SOAP

WebService解决的三个问题:接口的自我描述;采用Http协议等常规协议,不用写原始的Socket;基于Web服务器,不占用80端口之外的端口。

UDDI用来自动发现WebService的协议(*)

SOAP和HTTP的关系:SOAP基于Http协议的,和普通网页不同的是网页返回HTML,SOAP则是符合SOAP协议的XML数据。

WSDL(WebService Defination Language)是对WebService上的方法名、参数进行描述的协议。对接口的自描述。

SOAP(Simple Object Access Protocol)是对参数、返回值以什么样的格式进行传递进行描述的协议。对报文的格式规范。

实际工作中应该是自己调用别人的WebService或者别人调用自己的WebService,沟通语言就是WSDL,拿到WSDL什么都不用操心。

WebService是跨平台、跨语言调用,可以跨防火墙;缺点:效率低。所以适用于两个非内部系统的通讯(比如炒股软件和证券交易所之间的通讯)

WCF是对WebService、Socket、MQ等通讯方式的一个统一,底层还是采用这些通信协议,可以简化这些程序的开发,不用再换不同通信协议的时候重写代码并且学一堆新的技术。所以WCF和WebService不是一个竞争取代关系。

WCF是对.Net Remoting、WebService、MQ等通讯方式的一个高级封装,让我们开发不同通讯协议的程序的时候很简单,不用学更多的东西。并不是替代.Net Remoting、WebService、MQ这些东西。

 

81、.Net、ASP.Net、C#、VisualStudio之间的关系是什么?(传智播客.Net培训班原创模拟题)

答:.Net一般指的是.Net Framework,提供了基础的.Net类,这些类可以被任何一种.Net编程语言调用,.Net Framework还提供了CLR、JIT、GC等基础功能。

ASP.Net是.Net中用来进行Web开发的一种技术,ASP.Net的页面部分写在ASPx 文件中,逻辑代码通常通过Code-behind的方式用C#、VB.Net等支持.Net的语言编写。

C#是使用最广泛的支持.Net的编程语言。除了C#还有VB.Net、IronPython等。

VisualStudio是微软提供的用来进行.Net开发的集成开发环境(IDE),使用VisualStudio可以简化很多工作,不用程序员直接调用csc.exe等命令行进行程序的编译,而且VisualStudio提供了代码自动完成、代码高亮等功能方便开发。除了VisualStudio,还有SharpDevelop、MonoDevelop等免费、开源的IDE,VisualStudio Express版这个免费版本。

 

82、AJAX解决什么问题?如何使用AJAX?AJAX有什么问题需要注意?项目中哪里用到了AJAX?(传智播客.Net培训班原创模拟题)

答:AJAX解决的问题就是“无刷新更新页面”,用传统的HTML表单方式进行页面的更新时,每次都要将请求提交到服务器,服务器返回后再重绘界面,这样界面就会经历:提交→变白→重新显示这样一个过程,用户体验非常差,使用AJAX则不会导致页面重新提交、刷新。

AJAX最本质的实现是在Javascript中使用XMLHttpRequest进行Http的请求,开发中通常使用UpdatePanel、JQuery等方式简化AJAX的开发,UpdatePanel的方式实现AJAX最简单,但是数据通讯量比较大,因为要来回传整个ViewState,而且不灵活,对于复杂的需求则可以使用JQuery提供的ajax功能。

UpdatePanel的内部原理。

AJAX最重要的问题是无法跨域请求(www.rupeng.com →so.rupeng.com),也就是无法在页面中向和当前域名不同的页面发送请求,可以使用在当前页面所在的域的服务端做代理页面的方式解决。

在如鹏网项目中发帖的时候显示相关帖的功能、站内搜索项目中显示搜索Suggestion、数据采集项目中都用到了AJAX。

常考:不用任何框架编写一个AJAX程序。XHR:XmlHttpRequest。背也要背下来!

如果面试的时候谈AJAX谈到UpdatePanel的时候,就是NB的时候!!!先侃UpdatePanel的原理!引出为什么Dom操作的动态效果在用UpdatePanel提交刷新以后没有了,以及CKEditor被套在UpdatePanel中提交以后也变成了textarea,为什么把Fileupload放到Updatepanel中无法实现无刷新上传。说成是公司内部的一个菜鸟用UpdatePanel遇到这样问题,由于我懂XHR、UpdatePanel的原理,所以轻松解决!UpdatePanel生成的上万行JS脚本,不适合于互联网项目。“WebForm怎么可能把开发人员编程傻子呢!不明白原理苦命呀!还是MVC好呀,MVC。。。。。。。”

多准备几把斧子!上来找一切机会甩斧子!

 

84、Application 、Cookie和 Session 两种会话有什么不同?

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

谈到Session的时候就侃Session和Cookie的关系:Cookie中的SessionId。和别人对比说自己懂这个原理而给工作带来的方便之处。

 

85、开放式问题:你经常访问的技术类的网站是什么?

博客园(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文档、msdn论坛(遇到问题先到网上搜解决方案,还不行就问同事,同事也解决不了就去MSDN论坛提问,一定能得到解决)。Cnbeta.com。

 

86、你对.Net的GC的理解

GC是.Net的垃圾收集器,可以进行内存资源的回收,程序员无需关心资源的回收,当一个对象没有任何引用的时候就可以被回收了。一个对象可以被回收并不意味着一定会被立即回收,GC会选择时机进行回收。可以调用GC.Collect()让GC立即回收。GC不能回收非托管资源,对于非托管资源一般都实现了IDisposable接口,然后使用using关键字进行资源的回收。

 

 

106、不用JQuery等框架实现AJAX无刷新登录。(常考)

提示:用纯XMLHttpRequest实现。

 

107、Http状态码各是什么意思。

301(永久重定向)、302 :重定向404 :页面不存在

500:服务器内部错误

 

108、 对html文本框进行赋值的JQuery语句,对html文本框进行取值的JQuery语句,对TextBox服务端控件进行取值的语句JQuery。

 

110、Session有什么重大BUG,微软提出了什么方法加以解决?(常考)

iis中由于有进程回收机制,系统繁忙的话Session会丢失,IIS重启也会造成Session丢失。这样用户就要重新登录或者重新添加购物车、验证码等放到Session中的信息。可以用State  server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。但是(一定要写上,这样才够拽)我认为这不是Bug,只能说是In-Proc方式存储Session的缺陷,缺陷是和Bug不一样的,In-Proc方式存储Session会由服务器来决定什么时候释放Session,这是By Design,In-Proc方式不满足要求的话完全可以用StateServer和数据库的方式。

StateServer还可以解决集群Session共享的问题。

配置StateServer的方法:

http://support.microsoft.com/kb/317604

http://blog.csdn.Net/zj1103/archive/2008/09/14/2926773.ASPx

 

111、ASP.Net中<%%>、<%=%>、<%#%>的区别是什么

<%%>是执行<%%>中的C#代码,<%=%>是将=后表达式的值输出到Response中,<%#%>是数据绑定,一般用在ListView、GridView、Repeater等控件的绑定中。数据绑定分为:Eval:单向绑定和Bind:双向绑定。

 

113、说说在软件设计中你遇到的以空间换时间的例子?

参考回答:谈Cache(缓存)、索引这些例子。用额外的磁盘、内存空间的消耗来提高执行速度。Lucene.Net也是一个例子。

 

114、ASP.Net中的错误机制。(常考)

参考:

定制错误页来将显示一个友好的报错页面。

页面中未捕获一样会触发Page_Error(不常用),应用程序中的未捕获异常会触发Application_Error。通过HttpContext.Current.Server.GetLastError()、HttpContext.Current.Error;拿到未捕捉异常,记录到Log4Net日志中。

 

115、不用中间变量交换两个变量(常考)

            i = i + j;//i=30

            j = i - j;//j=10;

            i = i - j;//i=20;

            Console.WriteLine("i={0},j={1}",i,j);

另外一个解决方案:位运算。

int   a=5; int   b=6;

a=a^b;   b=b^a;   //b^a相当于   b^a^b   也就是   b^a^b的值就是a了,   下边相同   a=a^b; 

下面的SQL题是常考题中的常考题,必须重视!!!!!!!!

 

 

118、介绍几个使用过的开源的项目

Lucene.Net、NPOI、JQuery、ASP.Net AJAX  toolkit、Quartz.Net、JqueryUI、ASP.Net MVC。在CodePlex、SourceForge等网站上有更多的开源项目。

 

119、说出五个集合类

List、Dictionary、Set、Stack(先入后出)、Queue(先入先出)、Tree等。

解答:HashSet用于盛放不同的数据,相同的数据只保留一份

 

141、下面的HTML代码

<style type="text/css">

        #Text1{ background-color:Red}

        .txt{ background-color:Green}

        input {background-color:Black}

    </style>

<input id="Text1" type="text" class="txt" />

<input type="text" class="txt" />

两个文本框各是什么颜色?

参考资料:个人大于集体:元素单独设置的样式>class命名样式>标签样式。样式override父级别的。

 

14. 假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句

--实现代码:

ALTER TABLE BOOKS ADD PRIMARY KEY(BNO)

15.1 将NAME最大列宽增加到10个字符(假定原为6个字符)

--实现代码:

ALTER TABLE CARD ALTER COLUMN NAME varchar(10)

15.2 为该表增加1列NAME(系名),可变长,最大20个字符

--实现代码:

ALTER TABLE CARD ADD 系名 varchar(20)

锁的问题:

       public void Test(int i)

        {

            lock (this)

            {

                if (i > 10)

                {

                    i--;

                    Test(i);

                }

            }

        }

执行Test(10)是否会造成死锁?

答:不会,因为多线程才有锁的问题,线程无法自己锁自己(单线程必然是有先后执行顺序的,没必要锁)

问学网2011

3、Math.Round(11.5)、Math.Round(11.3)、Math.Round(-11.5)、Math.Round(-11.3)的值各是多少?

答案:Round 四舍五入:Math.Round(-11.5)=-12,因为是按照绝对值考虑。

扩展:Math.Ceiling(-11.6)=-11,因为负数的天花板也在上面。

Math.Floor(-11.5)=-12

 

面试题2  介绍ASP.Net和ASP的区别答:

1、ASP.Net支持预编译。

2、ASP.Net拥用更为强大的ADO.Net、身份认证体系、众多服务器控件、支持自定义控件编写。

3、ASP.Net拥有事件驱动的控件。

 

面试题3  说明ASP.Net的Application特性

答:Application对象用于记录不同用户访问网站留下的信息,如:可以用来当前访问网页的IP数,在服务运行期间都能持久的保存数据。Application支持启动和结束等事件。

 

面试题4  简述ASP.Net的页面运行机制

答:1、IIS接到客户请求。

2、IIS把请求交给ASPNet_ispai.dll进行处理。

3、(第一次运行)装载Bin目录下的dll。

4、(第一次运行)读取Web.config配置。

5、(第一次运行)初始化HttpApplication实例

6、创建HttpContext,创建HttpTextWrite。

7、找到对应的HttpHandler(.ASPx页面),处理http请求

8、处理Session。

9、返回结果结客户。

 

面试题5  简述ASP.Net一个页面的生命周期

答:客户端请求页面 预初始化(OnPreInit) 初始化(OnInit) 完成初始化(OnInitComplete) 载入ViewState(LoadViewState) 处理回送数据(IPostBackDataHandler) Page_OnPreLoad—》Page_OnLoad 回发更改通知(RaisePostDataChangedEvent) 处理回发事件(RaisePostBackEvent) Page_OnLoadComplete 预呈现(OnPreRender) 完成预呈现(OnPreRenderComplete) 保存ControlState(SaveControlState) 保存ViewState(SaveViewState) 呈现(Render) Page_UnLoad。

 

面试题6  C#中的托管代码是什么

答:由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。

 

面试题7  C#中的非托管代码是什么

答:在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。

 

面试题8  IL语言如何在.Net下运行

答:IL(MSIL)就是中间语言,基于高级语言和汇编语言中间伪汇编语言。

 

面试题17  什么是XCOPY部署

答:使用XCOPY命令在控制台下面把一个工程或应用程序从一个位置复制到另一个位置的简单方法。

 

面试题18  如何通过安装向导配置一个Web站点

答:创建一个安装项目---配置安装项目---生成安装包文件---在指定的服务器上运行安装包。

 

面试题20  C#支持哪几个预定义的值类型

答:int,float,bool,decmail,char面试题21  C#支持哪几个预定义的引用类型

答:object,String,ArrayList面试题22  如何解决装箱和拆箱引发的性能问题

答:可以使用泛类型解决装箱和拆箱引发的性能问题

 

面试题23  有几种方法可以判断值类型和引用类型

答:值类型是在栈中分配空间的,引用类型是在堆中分配空间的。判断的方法有三种:

1、通过赋值操作。

2、检测类型是否继承System.ValueType。

 

面试题38  Array与ArrayList的区别

答:array初始化大小不同,它是一维的,它是同构的

Arraylist可以添加删除项,它是多维的,它是异构的。

 

面试题39  Array与ArrayList如何进行互相转换

1、Araylist.adapter(array)

2、通过循环把array添加到arraylist;

3、arraylist.toarray(arraylist);

 

面试题51  简述接口及接口继承

答:1、只定义

2、可以有方法,事件、属性

3、公共的

4、不能实例

5、不能有字段

6、也可以继承接口。

 

面试题63  什么是ViewState

答:可以持久化客户端的状态。

 

面试题64  ViewState优缺点有哪些

不可夸页面。数据量大时性能底。

 

面试题76  ASP.Net有几种存储会话状态的方式

答:InProc(IIS进程)、StateServer(状态服务器)、SqlServer(sql数据库中)

 

面试题77  请介绍ASP.Net会话状态InProc的特点

答:关闭IIS就没有,比其他两种性能要高。不能夸服务器共享面试题78  请介绍ASP.Net会话状态StateServer的特点

答:需要夸服务器可以使用StateServer。面试题81  ADO.Net支持多少种数据源

答:Sql\oledb\odbc\xml\oracle

 

面试题82  如何提高数据库连接的使用效率

答:避免使用oledb\odbc等数据源

 

面试题83  如何安全地管理连接字符串

答:把字符串写在web.config文件里面。并且可以加密connectionstring加密。

 

面试题84  using子句管理数据库连接有何作用

答:获取、使用、释放,它能自动关闭数据库链接。

 

面试题86  ADO.Net中如何执行动态的SQL语句

答:使用SqlCommand对象的ExecuteRead、ExecuteNonQuery、ExecuteScalar方法

 

面试题87  解释ADO.Net中的事务处理作用

答:事务用于执行多个SQL语句时确保每个SQL语句都正确执行后才会对数据库做永久性修改,否则将不对数据库做任何更改。

 

面试题89  什么是LINQ

答:LINQ To Object, LINQ to XML,LINQ TO ADO.Net

 

面试题94  XML文档结构包括哪些

答:XML是可扩散标记语言;声明、元素、注示、字符引用、处理指令

 

面试题96  SOAP协议由哪几部分组成

答:SOAP是 WebService的基础协议。它是一种简单对象访问协议。基于XML。可序列化的。

 

面试题97  什么是WSDL语言

答:WebService的描述语言。

1、什么是WCF技术,WCF可以解决什么业务问题?2、什么是AOP,在C#中实现AOP有几种方式,列举你熟悉的AOP组件。

 

 

本人在深圳面试十来家,发现百分之八十的题目都是来之于以下题目,今天分享给大家,好好背吧.

1、@page指令只能在_ASPx___文件(填写扩展名)中使用,而@Control指令只能用在_ascx___文件(填写扩展名)中使用.

 

2、说明控件DataGrid,DataTable,DataView,DetailsView,formView,Repeator常用属性,如果要想把一条记录分成两列显示,以上控件哪些可以用,哪些不可以用?如果可用,如何处理?

答:DataMember:绑定的表或者视图,DataSourseID:数据源控制的ID,Visible:是否显示该控件. FormView,Repeator可以用,其他的控件不能可用,在ItemTemplate模板里用表格或者用列表来显示.

 

3、写出下列的含义 <% %>,<%# %>,

答:<% %>是服务器端代码块

   <%# %>表示绑定的数据源

 

4、请解释Page.IsPostBack,Response.Write,Response.End,DBNull.Value, DataSet,DataTable,DataView,SqlDataReader,stringbuilder,ArrayList?

   Page.IsPostBack:是否正是被首次加载

   Response.Write:打印指定的文本

   Response.End:停止当前的程序并返回结果

   DBNull是一个类。DBNull.Value是它唯一的实例。它指数据库中数据为空(<NULL>)时,在.Net中的值。

   DataSet:DataSet是数据在内存中的表示形式,是不依赖与数据库的独立数据集合.

   DataTable:是一个包含列和行表.

   DataView:数据视图

   SqlDataReader:提供一种从 SQL Server 数据库读取行的只进流的方式。

 

 5、 stringbuilder:StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

   ArrayList:动态加载的数组

   partial,protected,private,public的含义:

   答:partial:仅所属类的成员才可以访问

      protected:可被所属的类或派生自所属类的类型访问

      public:访问不受限制。

 

 

6、如何理解死锁的概念?死锁是如何形成的?在应用中应注意什么事项避免死锁?

死锁是一种条件,不仅仅是在关系数据库管理系统 (RDBMS) 中发生,在任何多用户系统中都可以发生的。当两个用户(或会话)具有不同对象的锁,并且每个用户需要另一个对象的锁时,就会出现死锁。每个用户都等待另一个用户释放他的锁。当两个连接陷入死锁时,Microsoft? SQL Server? 会进行检测。其中一个连接被选作死锁牺牲品。该连接的事务回滚,同时应用程序收到错误。

阻塞任何基于锁的并发系统都不可避免地具有可能在某些情况下发生阻塞的特征。当一个连接控制了一个锁,而另一个连接需要冲突的锁类型时,将发生阻塞。其结果是强制第二个连接等待,或在第一个连接上阻塞。

其实所有的死锁最深层的原因就是一个——资源竞争。

表现一:一个用户A 访问表A(锁住了表A),然后又访问表B,另一个用户B 访问表B(锁住了表B),然后企图访问表A。这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了。

同样用户B要等用户A释放表A才能继续这就死锁了。

解决方法:

这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法。

仔细分析你程序的逻辑:

1:尽量避免同时锁定两个资源;

2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源。

表现二:

用户A读一条纪录,然后修改该条纪录,这是用户B修改该条纪录,这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。

这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。

解决方法:

让用户A的事务(即先读后写类型的操作),在select 时就是用Update lock

 

7、什么是事务? 使用事务的语句有哪些?

答:事务是一种机制,是一个操作序列,它包括了一组数据库操作命令,并且所有的命令作为一个整体向

    系统提交或者撤消操作请求,要么全部,要么全部不执行.

    begin transaction

    commit transaction

rollback transaction

 

8、在update触发器中如何使用修改前,后的数据?

   if   update(字段1) 

  begin 

  ... 

  end

 

posted @ 2015-02-26 15:56  ァ颏餶こ铭訫の  阅读(473)  评论(0编辑  收藏  举报