.Net通常指的是.Net Framework,提供了基础的.Net类,这些类能够被任何一种.Net编程语言调用,.Net Framework还提供了CLR、JIT、GC等基础功能。javascript
C#是使用最普遍的支持.Net的编程语言。除了C#还有VB.Net、IronPython等。html
VisualStudio是微软提供的用来进行.Net开发的集成开发环境(IDE),使用VisualStudio能够简化不少工做,不用程序员直接调用csc.exe等命令行进行程序的编译,并且VisualStudio提供了代码自动完成、代码高亮等功能方便开发。除了VisualStudio,还有SharpDevelop、MonoDevelop等免费、开源的IDE,其中微软提供的VisualStudio Express版是彻底免费的IDE。java
CTS:Common Type System 通用语言系统。Int32、Int16→int、String→string、Boolean→bool。每种语言都定义了本身的类型,.Net经过CTS提供了公共的类型,而后翻译生成对应的.Net类型。ios
CLS:Common Language Specification 通用语言规范。不一样语言语法的不一样。每种语言都有本身的语法,.Net经过CLS提供了公共的语法,而后不一样语言翻译生成对应的.Net语法。c++
CLR:Common Language Runtime 公共语言运行库,就是GC、JIT等这些。有不一样的CLR,好比服务器CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。至关于一个发动机,负责执行IL。程序员
类只能有public和internal两种访问修饰符。Public:公共成员,彻底公开,没有访问限制。Internal:当前程序集内能够访问。web
类的成员有:字段、属性、方法、事件。面试
类成员的访问修饰符包括:private、protected、public、internal。ajax
private : 私有成员, 在类的内部才能够访问。正则表达式
protected : 保护成员,该类内部和继承类中能够访问。
public : 公共成员,彻底公开,没有访问限制。
internal: 当前程序集内能够访问。
ref:该关键字使参数按引用传递,其效果是,当控制权传递回调用方法时,在方法中对参数所作的任何更改都将反映在该变量中。使用规则:定义方法时,在形参前必须加ref关键字;调用方法时,在实参前必须加ref关键字;调用方法前,ref实参必须已经被初始化。
out:该关键字也能够使参数按引用传递,其效果是,当控制权传递回调用方法时,在方法中对参数所作的任何更改都将反映在该变量中。使用规则:定义方法时,在形参前必须加out关键字;调用方法时,在实参前必须加out关键字;调用方法前,out实参能够先不初始化,但在方法内部,必须修改out参数的值。
params:该关键字,能够指定在方法参数数目可变处采用数组型参数实现。使用规则:在定义方法时,在数组型参数前加params关键字;调用方法时便可以传递数组型变量,也能够依次传递多个参数。
静态字段à非静态字段à静态构造方法à非静态构造方法
const修饰的常量在声明的时候必须初始化;readonly修饰的常量则既能够在声明的时候初始化,也能够延迟到构造函数初始化。
const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候。
结构是程序员自定义的数据类型,它很是相似于类。它内部能够有字段、属性和方法成员。其语法格式为:
访问修饰符 struct 结构名称
{
//结构成员
}
结构体和类的主要差异为:
结构体是值类型,类是引用类型;
类支持继承,结构体不支持继承;
结构体不能显示声明无参构造方法,类能够声明无参构造方法;
值类型的数据存储在内存的栈中;而引用类型的数据存储在托管堆中,并在栈中添加堆数据的指针或引用地址。
值类型:简单类型(int、double、float、bool、decimal、char、unit)、结构类型、枚举类型
引用类型:字符串、结构体、类、接口
装箱是指将值类型数据转换为引用类型;拆箱是指将引用类型转换为值类型。
装箱:int a = 5; object obj = a;
拆箱:string a = “5”; int b = (int)a;
l 一个类只能继承一个类,C#不支持类的多继承,但一个类能够继承多个接口。
l 建立子类对象时,首先会调用父类的构造方法,其次才执行子类的构造方法。
l 默认状况下,子类会调用父类无参的构造方法。
l 在调用子类构造方法时能够人为的显式调用父类的构造方法。
l 在子类中经过base关键字调用父类的成员。
l 能够经过is关键字判断某个对象是不是于指定类型兼容(对象所属的类或其祖先类是不是是指定的类型)。
将该类声明为密封的(sealed)便可防止该类被继承。语法以下:
访问修饰符 sealed class 类名称
{
//类成员
}
方法重载是指在同一个类中多个方法间,方法名称同样但参数列表(参数个数、参数类型、参数顺序)不一样。而方法重写是指子类的方法重写父类的方法。
被abstract关键字修饰的类就是抽象类。被abstract关键字修饰的方法就是抽象方法。
抽象类、抽象方法的语法格式为:
访问限定符 abstract class 类名称
{
访问限定符 abstract 返回值类型 方法名(参数列表);
}
l 抽象类不能经过其构造方法建立实例对象,但能够经过其实现类实例化。
l 若是一个类中存在抽象方法,那么这个类必须是抽象类;一个抽象类能够没有抽象方法,而且抽象类中能够存在非抽象方法。
l 抽象类不能被sealed关键字修饰。
l 抽象方法不能有方法实现,也就是说不能有方法体。方法声明以分号结束。
l 抽象方法其实是隐藏的virtual方法。
l 抽象类能够继承接口。
接口就是一组操做契约(属性、方法等)的集合。操做契约只能包含声明,不能包含实现部分。其语法格式以下:
访问限定符 interface 接口名称
{
//接口成员:成员不能有访问限定符
}
l 接口中的成员能够包括:属性、方法、索引器、事件。不能包括字段、构造方法。
l 接口能够有访问限定符,但其成员不能包含访问限定符。
l 接口能够继承接口,而且1个接口能够同时继承多个接口。
l 类继承接口后必需要实现接口中声明的属性或方法等等。
l 子类在继承父类的同时,还能够继承多个接口,基类或接口之间用逗号隔开。
l 抽象类能够继承接口。
is:检查对象是否与指定类型兼容。as:用于在兼容的引用类型之间执行转换
as用于在引用类型之间进行转换,而强制类型能够在任何类型间进行转换。
强制类型转换失败时,程序会抛出异常;as转换失败则不会抛出异常,直接返回null。
用法一:用于建立对象时调用构造函数
用法二:子类隐藏父类的成员
用法三:泛型约束,表示泛型T必需要包含无参的公共构造方法,where T : new()
计算机中一个正在运行的可执行程序的实例就是进程。一个进程能够包含多个线程。单个线程用于完成一个任务,而同时建立多个线程来完成多项任务,即是多线程。
两者都定义了某种边界,不一样的是进程定义的是应用程序与应用程序之间的边界,不一样的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。
用一个比喻来讲,若是一个家庭表明一个进程,在家庭内部,各个成员就是线程,家庭中的每一个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也能够派出几个成员来协同完成,而家庭以外的人则没有办法直接消费不属于本身家庭的财产。
序列化是指将对象的状态转换为能够存储或传输的格式的过程。
程序集包含模块,而模块又包括类型,类型下有成员,反射就是管理程序集,模块,类型的对象,它可以动态的建立类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行时建立和使用类型实例对象。
C#中和反射相关的命名空间是:System.Reflection。
自动属性是指:在经过属性封装字段时,无需定义字段和实现属性的get、set访问器,而由.NET框架自动生成。
如:
private string name;
public string Name
{
get{ return this.name; }
set{ this.name=value; }
}
等价于:
public string Name { get;set; }
对象初始化器是指:在调用类的构造方法建立对象时,同时为对象属性赋值。
如:StudentInfo stu = new StudentInfo(){ Name=”zhangsan”, Age=20 };
集合初始化器是指:在实例化一个集合对象的同时,为其指定元素。
如:
List<StudentInfo> list = new List<StudentInfo>()
{
new StudentInfo(){ Name=”zhangsan”, Age=20},
new StudentInfo(){Name=”lisi”, Age=25}
};
委托能够把一个方法做为参数代入另外一个方法。委托能够理解为指向一个函数的指针。
委托和事件没有可比性,由于委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。由于对于事件来说,外部只能“注册本身+=、注销本身-=”,外界不能够注销其余的注册者,外界不能够主动触发事件,所以若是用Delegate就无法进行上面的控制,所以诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove本身,不能赋值。事件只能+=、-=,不能= 。加分的补充回答:事件内部就是一个private的委托和add、remove两个方法
面试聊:用Reflector查看.Net的类的内部实现,解决问题。
l Connection:主要是开启程序和数据库之间的链接。没有利用链接对象将数据库打开,则没法从数据库中取得数据。
l Command:主要能够用来对数据库发出一些指令,例如能够对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。
l DataAdapter:数据适配器。它能够经过Command对象从指定数据源提取数据,并填充到DataSet 对象中。
l DataSet:数据集。能够视其为一个暂存区(Cache),其内部能够容纳多个DataTable,甚至能够将DataTable的主键以及DataTable之间的外键关联等存储起来,因此咱们有时贴切的称之为“内存中的小型数据库”。
l DataReader:当咱们只须要循序的读取数据时,能够使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,并且这些数据是只读的,并不容许对其进行修改等操做。由于DataReader 在读取数据的时候限制了每次只读取一笔,并且只能只读,因此使用起来不但节省资源并且效率很好。
1. 为项目添加引用:System.Configuration.dll
2. 在类文件中引入命名空间:using System.Configuration;
3. 读取链接字符串:string connectionString = ConfigurationManager.Connectionstrings[“链接名称”].ConnectionString;
一般意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
区分层次的目的即为了“高内聚,低耦合”的思想。
表现层(UI):通俗讲就是展示给用户的界面,即用户在使用一个系统的时候的所见所得。
业务逻辑层(BLL):针对具体问题的操做,也能够说是对数据层的操做,对数据业务逻辑处理。
数据访问层(DAL):该层所作事务直接操做数据库,针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系。
三层结构是N层结构的一种,通常来讲,层次之间是向下依赖的,下层代码未肯定其接口(契约)前,上层代码是没法开发的,下层代码接口(契约)的变化将使上层的代码一块儿变化。
优势: 分工明确,条理清晰,易于调试,并且具备可扩展性。
缺点: 增长成本。
MVC(Model View Controller)模型-视图-控制器。
MVC是典型的平行关系,没有说谁在上谁在下的关系,模型负责业务领域的事情,视图负责显示的事情,控制器把数据读取出来填充模型后把模型交给视图去处理。而各类验证什么的应该是在模型里处理了。它强制性的使应用程序的输入、处理和输出分开。MVC最大的好处是将逻辑和页面分离、分解关注点。
微软自08年推出asp.net mvc后至今经历了1.0、2.0、3.0、4.0几个版本。
MVC和三层的区别:MVC是三层中于UI层相关的技术。
栈是编译期间就分配好的内存空间,所以你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。
堆是程序运行期间动态分配的内存空间,你能够根据程序的运行状况肯定要分配的堆内存的大小。
须要实现IEnumerable接口或声明GetEnumerator方法的类型。
C/C++中由程序员进行对象的回收像学校食堂中由学生收盘子,.Net中由GC进行垃圾回收像餐馆中店员去回收。
GC是垃圾收集器(Garbage Collection)。程序员不用担忧内存管理,由于垃圾收集器会自动进行管理。GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection须要程序员调用Dispose进行资源的回收。
要请求垃圾收集,能够调用下面的方法:GC.Collect()通常不须要手动调用GC.Collect()。当一个对象没有任何变量指向(再也不能使用)的时候就能够被回收了。
基础知识:当没有任何变量指向一个对象的时候对象就能够被回收掉了,但不必定会当即被回收。
1. using能够导入namespace命名空间。
2. using还能够实现非托管资源的释放。实现了IDisposiable的类在using中建立,using结束后会自动调用该对象的Dispose方法,释放资源。加分的补充回答:using其实等价于try……finally,用起来更方便。
Ajax主要用于在Web方面实现客户端向服务器发送异步请求,从而达到客户端局部刷新的目的。
Ajax主要涉及浏览器的一个核心组件XmlHttpRequest。而且由于浏览器的差别,对XmlHttpRequest对象的建立也有所差别。
如今咱们在开发过程当中通常都是使用一些封装了ajax功能的第三方框架来实现,好比Jquery、Extjs、AjaxPro等等。
Web 应用程序是无状态的。每次从服务器请求网页时,都会建立网页类的一个新实例。这一般意味着在每次往返过程当中将会丢失全部与该页面及其控件关联的信息。视图状态是 ASP.NET 页框架默认状况下用于保存往返过程之间页和控件值的方法。能够经过将页面或控件的EnableViewState属性设置为false来禁用视图状态。
Server.Transfer仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;Response.Redirect则是彻底的跳转,浏览器将会获得跳转的地址,并从新发送请求连接,因此浏览器的地址栏中能够看到跳转后的连接地址。
Server.Transfer是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,而后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,因此它的地址栏中仍是原来的地址。 这个过程当中浏览器和Web服务器之间通过了一次交互。而Response.Redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器从新去请求那个地址,通常来讲浏览器会用刚才请求的全部参数从新请求。这个过程当中浏览器和Web服务器之间通过了两次交互。
用户根据系统的程序构造非法的参数从而致使程序执行不是程序员指望的恶意SQL语句。使用参数化的SQL就能够避免SQL注入。具体就是使用ADO.NET中的DbParameter类来处理用户提交的参数。
第一范式:表中每一个字段都不能再分。
第二范式:知足第一范式而且表中的非主键字段都依赖于主键字段。
第三范式:知足第二范式而且表中的非主键字段必须不传递依赖于主键字段。
事务具备四大特性:一致性、原子性、隔离性、持久性。
数据库事务是指:几个SQL语句,要么所有执行成功,要么所有执行失败。好比银行转帐就是事务的典型场景。
数据库事务的三个经常使用命令:Begin Transaction、Commit Transaction、RollBack Transaction。
Url传值。如:xxx.aspx?id=5&name=zhangsan Request.QueryString[“name”]
Session传值。
Application传值。
Cookie传值。
response. Redirect()
在当前页面内经过PreviosPage获取上一页面内控件值。
Session将数据存储在服务器端,是用户级别的,用户仅能访问本身会话中的数据,易丢失。
Application将数据存储在服务器端,是全局的,全部用户都可访问。
Cookie将数据存储在客户端,易被窃取,不安全。
1. get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中;
2. 使用post提交的页面在点击【刷新】按钮的时候浏览器通常会提示“是否从新提交”,而get则不会;
3. 用get的页面能够被搜索引擎抓取,而用post的则不能够;
4. 用post能够提交的数据量很是大,而用get能够提交的数据量则很是小(2k),受限于网页地址的长度。
5. 用post能够进行文件的提交,而用get则不能够。
GC是.Net的垃圾收集器,能够进行内存资源的回收,程序员无需关心资源的回收,当一个对象没有任何引用的时候就能够被回收了。一个对象能够被回收并不意味着必定会被当即回收,GC会选择时机进行回收。能够调用GC.Collect()让GC当即回收。GC不能回收非托管资源,对于非托管资源通常都实现了IDisposable接口,而后使用using关键字进行资源的回收。
Session中的数据有三种存储方式:1.IIS进程(内存)中;2.Windows服务;3.数据库。
能够经过在web.config文件中经过sessionState配置节的mode属性指定。其值能够是:InProc、StateServer、SqlServer。默认为InProc,即值存储在IIS进程中。
1. <%%>是执行<%%>中的C#代码;
2. <%=%>是将=后表达式的值输出到Response中;
3. <%#%>是数据绑定,通常用在ListView、GridView、Repeater等控件的绑定中。数据绑定分为:Eval(单向绑定)和Bind(双向绑定)。
1. HttpHandler继承自IHttpHandler接口,HttpModule继承自IHttpModule接口;
2. 一个用户请求能够被多个HttpModule处理,但最终只能由一个HttpHandler处理;
3. HttpHandler可以拦截指定格式的URL请求,但HttpModule可以拦截全部的URL。
WebService即:Web服务。它的主要目标是解决跨平台的可互操做性。为了实现这一目标,Web Service 彻底基于XML(可扩展标记语言)、XSD(XML Schema)等独立于平台、独立于软件供应商的标准,是建立可互操做的、分布式应用程序的新平台。
在构建和使用Web Service时,主要用到如下几个关键的技术和规则:
1. XML:描述数据的标准方法.
2. SOAP:简单对象访问协议.
3. WSDL:Web服务描述语言.
4. UDDI(Universal Description, Discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议。
1. 通常选择器:ID选择器、类选择器、标记选择器;
2. 层次选择器;
3. 过滤选择器:基本过滤选择器、内容过滤选择器、可见性过滤选择器、属性过滤选择器;
4. 表单选择器;
Show、hide、toggole、slideUp、slideDown、slideToggle、fadeIn、fadeOut、animate、stop
1. 经过ADO.NET中的oledb操做Excel,要求目标计算机安装Jet组件;
2. 经过COM方式操做Excel,要求目标计算机必定要安装Office软件;
3. 使用Aspose.Cells操做Excel,目标计算机无需安装Office软件;
4. 经过OpenXml操做Excel,目标计算机无需安装Office软件;
../表示从当前页面所属目录的上级目录算起;
/表示从当前应用程序的根路径算起;
code-Behind即:代码隐藏。在ASP.NET中经过ASPX页面指向CS文件的方法实现了显示逻辑和处理逻辑的分离,这样有助于web应用程序的建立。好比项目分工,美工和编程的能够个干各的,不用再像之前asp那样将代码和html代码混在一块儿,难以维护。code-Behind是基于部分类(Partial)技术实现的。
asp.net提供了3种认证方式:windows身份验证,Forms验证和Passport验证。
1. windows身份验证:IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问。
2. Forms验证:用Cookie来保存用户凭证,并将 未经身份验证的用户重定向到自定义的登陆页。
3. Passport验证:经过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登陆 和核心配置文件服务。
上述身份认证方式能够经过在Web.config中authentication配置节的mode属性设置。
需求分析、概要设计、详细设计、编码、测试、部署和实施
视图其实是在数据库中经过Select查询语句从多张表中提取的多个表字段的虚拟表。
视图并不占据物理空间,因此经过视图查询出的记录并不是保存在视图中,而是保存在原表中。
经过视图能够对指定用户隐藏相应的表字段,起到保护数据的做用。
在知足必定条件时,能够经过视图对原表中的记录进行增删改操做。
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
索引分为:汇集索引、非汇集索引、惟一索引。一张表能够有多个惟一索引和非汇集索引,但最多只能有一个汇集索引。
合理的建立索引虽然可以提高查询速度,但下降了新增、删除操做的速度,同时会消耗必定的数据库物理空间。
存储过程是一个预编译的SQL语句,优势是容许模块化的设计,就是说只需建立一次,之后在该程序中就能够调用屡次。若是某次操做须要执行屡次SQL,使用存储过程比单纯SQL语句执行要快。
触发器是一中特殊的存储过程,主要是经过事件来触发而被执行的。它能够强化约束,来维护数据的完整性和一致性,能够跟踪数据库内的操做从而不容许未经许可的更新和变化。能够联级运算。如,某表上的触发器上包含对另外一个表的数据操做,而该操做又会致使该表触发器被触发。
解1:select top 10 * from A where id not in (select top 30 id from A)
解2:select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
解3:select * from (select *, Row_Number() OVER (ORDER BY id asc) rowid FROM A) as A where rowid between 31 and 40
编码:Server.HtmlEncode(string html) <转< >转>
解码:Server.HtmlDecode(string html) <转< >转>
编码:Server.UrlEncode(string html)
解码:Server.UrlDecode(string html)
setInterval(function, time):每隔N毫秒均会指定指定的函数。
setTimeOut(function, time):等待N毫秒后仅仅执行1次目标函数。
1. 对于某些页面内不多发生改变的能够经过页面缓存提高访问速度;
2. 对于较少发生变更的业务数据能够经过数据缓存和缓存依赖项保证访问速度和更新;
3. 从数据库层面进行优化:优化查询语句、合理创建表索引、数据表的水平和垂直拆分;
4. 能够经过服务器群集来对访问量分流相应;
用.net作B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为何要这样分层?
答:
从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层
数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问
业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关
表示层:是系统的UI部分,负责使用者与整个系统的交互。
优势: 分工明确,条理清晰,易于调试,并且具备可扩展性。
缺点: 增长成本。
分层式结构究竟其优点何在?
一、开发人员能够只关注整个结构中的其中某一层;
二、能够很容易的用新的实现来替换原有层次的实现;
三、能够下降层与层之间的依赖;
四、有利于标准化;
五、利于各层逻辑的复用。
归纳来讲,分层式设计能够达至以下目的:分散关注、松散耦合、逻辑复用、标准定义。
分层式结构也不可避免具备一些缺陷:
一、下降了系统的性能。这是不言而喻的。若是不采用分层式结构,不少业务能够直接造访数据库,以此获取相应的数据,现在却必须经过中间层来完成。
二、有时会致使级联的修改。这种修改尤为体如今自上而下的方向。若是在表示层中须要增长一个功能,为保证其设计符合分层式结构,可能须要在相应的业务逻辑层和数据访问层中都增长相应的代码。
MVC模式
MVC(Model-View-Controller)把交互系统的组成分解成模型、视图、控制器三种部件
mvc的优势:
1.经过把项目分红model view和controller,使得复杂项目更加容易维护。
2.没有使用view state和服务器表单控件,能够更方便的控制应用程序的行为
3.应用程序经过controller来控制程序请求,能够提供丰富的url重写。
4.对单元测试的支持更加出色
5.在团队开发模式下表现更出众
MVC的不足:
(1)增长了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增长结构的复杂性,并可能产生过多的更新操做,下降运行效率。
(2)视图与控制器间的过于紧密的链接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是颇有限的,反之亦然,这样就妨碍了他们的独立重用。
(3)视图对模型数据的低效率访问。依据模型操做接口的不一样,视图可能须要屡次调用才能得到足够的显示数据。对未变化数据的没必要要的频繁访问,也将损害操做性能。
asp.net如何实现MVC模式,举例说明!
web/business/dataaccess
列举ASP.NET 页面之间传递值的几种方式。
1.使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session变量
3.使用Server.Transfer
请说明在.net中经常使用的几种页面间传递参数的方法,并说出他们的优缺点。
QueryString 传递一个或多个安全性要求不高或是结构简单的数值。可是对于传递数组或对象的话,就不能用这个方法了
session(viewstate) 简单,但易丢失 做用于用户我的,过量的存储会致使服务器内存资源的耗尽。
application 对象的做用范围是整个全局,也就是说对全部用户都有效。其经常使用的方法用Lock和UnLock
cookie 简单,但可能不支持,可能被伪造 Cookie是存放在客户端的,而session是存放在服务器端的。并且Cookie的使用要配合ASP.NET内置对象Request来使用
input ttype="hidden" 简单,可能被伪造
url参数简单,显示于地址栏,长度有限
Server.Transfer 把流程从当前页面引导到另外一个页面中,新的页面使用前一个页面的应答流
数据库稳定,安全,但性能相对弱
什么是Viewstate?它有什么做用?
ViewState用来保存页面状态,就是说提交以后咱们还能够看到文本框里面的内容就是ViewState保存的功劳。
ViewState只维护当前页面的状态,不一样页面之间不能共享,Session能够。
ViewState你能够理解为一个隐藏控件。
ASP.Net页面生命周期
每一个页面的生命周期为用户的每一次访问,也就是说每一次客户端与服务器之间的一个往返过程.全局变量的生命周期在此之间.
1. Page_Init();
2. Load ViewState and Postback data;
3. Page_Load();
4. Handle control events;
5. Page_PreRender();
6. Page_Render();
7. Unload event;
8. Dispose method called;
ADO.net中经常使用的对象有哪些?分别描述一下。
答:
Connection 打开数据库链接
Command 执行数据库命令
DataAdapter 链接数据,执行数据库命令,填充DataSet
DataSet 数据在内存中的缓存,数据结构
DataReader 只读向前的读取数据库
DataReader和DataSet的异同
DataReader使用时始终占用SqlConnection,在线操做数据库..任何对SqlConnection的操做都会引起DataReader的异常..由于DataReader每次只在内存中加载一条数据,因此占用的内存是很小的..由于DataReader的特殊性和高性能.因此DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet则是将数据一次性加载在内存中.抛弃数据库链接..读取完毕即放弃数据库链接..由于DataSet将数据所有加载在内存中.因此比较消耗内存...可是确比DataReader要灵活..能够动态的添加行,列,数据.对数据库进行回传更新操做...
存储过程和sql语句的优缺点
优势:
1.提升性能,减小网络传输,节约时间 。
2.减小网络流量 存储过程位于服务器上,调用的时候只须传递存储过程的名称以及参数,不用每次访问都传递很长的sql 语句。
4.安全性 减小sql 注入式攻击。
5.可维护性高 更新存储过程一般比更改、测试以及从新部署程序集须要较少的时间和精力。
缺点:
1.交互性差 。
2.可移植性差
说出你所了解的数据库访问组件(例如ADO,至少4种)
答:ADO,ADO.Net,MDAC(Microsoft Data Access Components),Microsoft SQL Server OLE DB Provider,
Microsoft Jet OLE DB Provider,Desktop Database Drivers ODBC Driver,Visual FoxPro ODBC Driver
什么是面向对象
万物都是对象,其主要特征:封装、继承、多态
怎样实现多态
1.经过对象直接调用成员函数时,始终默认使用该对象的类的成员函数(除非用::显示指定类名)。
2.经过指向对象的指针或引用调用成员函数时:若是该函数是实函数,则调用该指针或引用的类的成员函数;若是该函
数是虚函数,则调用该指针或引用指向的对象的类的成员函数。
面向对象的思想主要包括什么?
答:任何事物均可以理解为对象,其主要特征: 继承。封装。多态。特色:代码好维护,安全,隐藏信息
什么是装箱和拆箱?
答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。装箱(boxing)是将值类型的数据转化成引用类型,int i=3; object o = i ;即是装箱过程,而拆箱(unboxing)是将饮用类型数据转换值类型,好比int j = (int)o;属于拆箱
什么是Interface?它与Abstract Class有什么区别?
接口(Interface)是用来定义行为规范的,不会有具体实现,而抽象类除定义行为规范外,能够有部分实现,但一
个类能实现多个接口,但只能继承一个父类
何时使用抽象类,何时用接口
接口用于规范,抽象类用于共性。接口中只能声明方法,属性,事件,索引器。而抽象类中能够有方法的实
现,也能够定义非静态的类变量。抽象类是类,因此只能被单继承,可是接口却能够一次实现多个。抽象类能够
提供某些方法的部分实现,接口不能够.抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。
再抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要
从新编写(这就是为何说接口是一个类的规范了)。接口成员被定义为公共的,但抽象类的成员也能够是私有
的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。
此外接口不能包含字段、构造函数、析构函数、静态成员或常量。
什么是抽象类(abstract class)?
一种不能够被实例化的类。抽象类中通常含有抽象方法,固然也可有具体实现。继承类只有实现过全部抽
象类的抽象方法后才能被实例化。
什么时候必须声明一个类为抽象类?
当这个类中包含抽象方法时,或是该类并无彻底实现父类的抽象方法时。
接口(interface)是什么?
只含有共有抽象方法(public abstract method)的类。这些方法必须在子类中被实现。
为何不能指定接口中方法的修饰符?
接口中的方法用来定义对象之间通讯的契约,指定接口中的方法为私有或保护没有意义。他们默认为公有方法。
能够继承多个接口么?
固然。
那么若是这些接口中有重复的方法名称呢?
这种状况中你能够决定如何实现。固然须要特别得当心。可是在编译环节是没有问题的。
接口和抽象类的区别是什么?
接口中全部方法必须是抽象的,而且不能指定方法的访问修饰符。抽象类中能够有方法的实现,也能够指
定方法的访问修饰符。
详述.NET里class和struct的异同!
类是引用类型,能够继承类、接口和被继承,有默认的构造函数,有析构函数,能够使用abstract和sealed,有protected修饰符,必须使用new初始化。
结构是值类型,只能继承接口,不能被继承,没有默认的构造函数,能够建立,没有析构函数,不能够用abstract和sealed,没有protected修饰符,能够不用new初始化。
如何选择结构仍是类
1. 堆栈的空间有限,对于大量的逻辑的对象,建立类要比建立结构好一些
2. 结构表示如点、矩形和颜色这样的轻量对象
例如,若是声明一个含有 1000 个点对象的数组,则将为引用每一个对象分配附加的内存。
在此状况下,结构的成本较低。
3. 在表现抽象和多级别的对象层次时,类是最好的选择
4. 大多数状况下该类型只是一些数据时,结构时最佳的选择
C#中的接口和类有什么异同。
异:
不能直接实例化接口。
接口不包含方法的实现。
接口、类和结构可从多个接口继承。可是C# 只支持单继承:类只能从一个基类继承实现。
类定义可在不一样的源文件之间进行拆分。
同:
接口、类和结构可从多个接口继承。
接口相似于抽象基类:继承接口的任何非抽象类型都必须实现接口的全部成员。
接口能够包含事件、索引器、方法和属性。
一个类能够实现多个接口。
const和readonly有什么区别?
const关键字用来声明编译时常量,readonly用来声明运行时常量。
用sealed修饰的类有什么特色
sealed 修饰符用于防止从所修饰的类派生出其它类。若是一个密封类被指定为其余类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
sealed 修饰符主要用于防止非有意的派生,可是它还能促使某些运行时优化。具体说来,因为密封类永
远不会有任何派生类,因此对密封类的实例的虚拟函数成员的调用能够转换为非虚拟调用来处理。
虚函数的用法
答:
1)virtual指明一成员函数为虚函数,而virtual仅用于类的定义里,在类外可不加此关键字.
2)一个类的成员函数被定义为虚函数时,子类该函数仍保持虚函数特征.
3)子类覆盖此函数时,定义里可不加virtual关键字,但函数声明要和基类的彻底一致!且此声明是必须的.
4)不是纯虚函数时,父类的虚函数必需要实现; 而若将父类的虚函数设定为纯虚函数时,子类必须要覆盖之并且必需要实现之!
解释virtual、sealed、override和abstract的区别
virtual申明虚方法的关键字,说明该方法能够被重写
sealed说明该类不可被继承
override重写基类的方法
abstract申明抽象类和抽象方法的关键字,抽象方法不提供实现,由子类实现,抽象类不可实例化。
重载和覆写有什么区别?
答:重载是方法的名称相同,不一样的参数类型,不一样的参数个数,不一样的参数顺序。覆写提供了子类中改变父类方法行为的实现(是进行基类中函数的重写)。
在方法定义中,virtual有什么含义?
答:被virtual修饰的方法能够被子类覆写
可以将非静态的方法覆写成静态方法吗?
答:不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改成override。
能够覆写私有的虚方法吗?
答:不能够,甚至子类中没法访问父类中的私有方法
可以阻止某一个类被其余类继承吗?
答:能够,使用关键字sealed
可以实现容许某个类别继承,但不容许其中的某个方法被覆写吗?
答:能够,标记这个类为public,并标记这个方法为sealed。
如何区别重载方法?
不一样的参数类型,不一样的参数个数,不一样的参数顺序
C#中的委托是什么?事件是否是一种委托?
委托能够把一个方法做为参数代入另外一个方法。委托能够理解为指向一个函数的引用。是,是一种特殊的委托
C#中的堆和栈
栈(Stack)由系统管理生存期,存储代码执行和调用路径,执行或调用完毕即从栈中清除;
堆(Heap)中保存值和对象,调用完毕以后依然存在,由垃圾回收器查找栈中有无指向该值或对象的引用,无则从堆中删除
你对泛型了解吗?简单说明一下泛型的有什么好处?
泛型:经过参数化类型来实如今同一份代码上操做多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用
好处是——类型安全和减小装箱、拆箱。提升性能、类型安全和质量,减小重复性的编程任务
C#中全部对象共同的基类是什么?
System.Object.
如何在C#中实现继承?
在类名后加上一个冒号,再加上基类的名称。
C#支持多重继承吗?
不支持。能够用接口来实现。
被protected修饰的属性/方法在何处能够访问?
在继承或间接继承与这个类的子类中能够访问。
私有成员会被继承么?
会,可是不能被访问。因此看上去他们彷佛是不能被继承的,但实际上确实被继承了。
C#提供一个默认的无参构造函数,当我实现了另一个有一个参数的构造函数时,还想保留这个无参数的构
造函数。这样我应该写几个构造函数?
答:两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,因此须要手动实现那个无参构造
函数。
简述 private、 protected、 public、 internal 修饰符的访问权限。
private : 私有成员, 在类的内部才能够访问。
protected : 保护成员,该类内部和继承类中能够访问。
public : 公共成员,彻底公开,没有访问限制。
internal: 在同一命名空间内能够访问。
new的两种用法
答:实例话对象,隐藏基类方法。
.new有几种用法
第一种:new Class();
第二种:覆盖方法
public new XXXX(){}
第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。
3.datagrid.datasouse能够链接什么数据源 [dataset,datatable,dataview]
dataset,datatable,dataview , IList
类成员有( )种可访问形式
可访问性:public ,protected ,private,internal
委托与事件的用法
答:public delegate void handels();//返回值是void,没有参数
public event handels eventHandels;
his.eventHandels = new handels(fun);
public void fun()
{ }
传入某个属性的SET方法的隐含参数的名称是什么?
答:value,它的类型和属性所声明的类型相同。
string是值类型仍是引用类型?
引用类型
String类与StringBuilder类有什么区别?为何在.Net类库中要同时存在这2个类?(简答)
stringBuilder比string更节约内存,因此stringBuilder更快
String 对象是不可改变的。每次使用 System.String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要
在内存中建立一个新的字符串对象,这就须要为该新对象分配新的空间。而 StringBuilder 则不会。在须要对字
符串执行重复修改的状况下,与建立新的 String 对象相关的系统开销可能会很是昂贵。若是要修改字符串而不
建立新的对象,则能够使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串链接在一块儿时
,使用 StringBuilder 类能够提高性能。
在C#中,string str = null 与 string str = “” 请尽可能使用文字或图象说明其中的区别。
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。
ASP.net的身份验证方式有哪些?分别是什么原理?
答:Windwos(默认) 用IIS...From(窗体) 用账户....Passport(密钥)
Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中因为有进程回收机制,系统繁忙的话Session会丢失,能够用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,并且没法捕获Session的END事件
c#中的三元运算符是 ?:
.能用foreach遍历访问的对象须要实现() 接口或声明 ( GetEnumerator)方法的类型。
.<%# %> 和 <% %> 有什么区别?
<%# %>表示绑定的数据源 <% %>是服务器端代码块 常量
在.net(C# or vb.net)中如何得到当前窗体或控件的句柄,特别是控件自己的句柄(请列举)
this(C#) Me(vb.net).
.C#能否对内存进行直接的操做?
在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员 不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法
DateTime是否能够为null? 不能,由于其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null
DateTime.Parse(myString); 这行代码有什么问题?
有问题,当myString不能知足时间格式要求的时候,会引起异常,建议使用DateTime.TryParse()
net的错误处理机制是:
采用try->catch->finally结构,
为何不提倡catch(Exception)
try..catch在出现异常的时候影响性能; 应该捕获更具体得异常,好比IOExeception,OutOfMemoryException等
catch(Exception e){throw e;}和catch(Exception e){throw;}的区别
将发生的异常对象抛出,另外一个只是抛出异常,并无抛出原异常对象)
error和exception区别:
error 表示恢复不是不可能但很困难的状况下的一种严重问题。好比说内存溢出。不可能期望程序能处理这样的状况。
exception 表示一种设计或实现问题。也就是说,它表示若是程序运行正常,从不会发生的状况。
GET与POST的区别
在FORM提交的时候,若是不指定Method,则默认为GET请求,Form中提交的数据将会附加在url以后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
在使用 POST 方法的状况下,传输数据时不会将数据做为 URL 的一部分;它们会做为一个独立的实体来传输。所以,POST 方法更安全,你也能够用这个方法传输更多的数据。并且用 POST 传输的数据不必定要是文本,用 GET 方法传输的却必定要是文本。
(1)get是从服务器上获取数据,post是向服务器传送数据。
(1)在客户端,Get方式在经过URL提交数据,数据在URL中能够看到;POST方式,数据放置在HTML HEADER内提交。
(2)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
(2)GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(3)安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。因此,若是这些数据是中文数据并且是非敏感数据,那么使用 get;若是用户输入的数据不是中文字符并且包含敏感数据,那么仍是使用 post为好。
Bind和Eval函数的区别
绑定表达式
<%# Eval("字段名") %>
<%# Bind("字段名") %>
1 Eval 单向绑定:数据是只读的
Bind 双向绑定:数据能够更改,并返回服务器端,服务器能够处理更改后的数据,如存入数据库.
2.当对次表达式操做时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %>
3 绑定控件的属性时要用Bind,而Eval则是其它一些。
例如:<asp:TextBox ID="First" RunAt="Server" Text='<%# Bind("FirstName") %>' />
例如:<td><%# Eval("ProductID") %></td>
Response.Redirect和Server.Transfer
请求的过程:
1)浏览器aspx文件请求--->服务器执行--->遇到Response.Redirect语句->服务器发送Response.Redirect后面的地址给客户机端的浏览器--->浏览器请求执行新的地址
2)浏览器aspx文件请求->服务器执行->遇到Server.Transfer语句->服务器转向新的文件
能够见Server.Transfer比Response.Redirect少了一次服务器发送回来和客户端再请求的过程.
跳转对象:
1)Response.Redirect能够切换到任何存在的网页。
2)Server.Transfer只能切换到同目录或者子目录的网页.
数据保密:
一、Response.Redirect后地址会变成跳转后的页面地址。
二、Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具备数据保密功能。
传递的数据量(网址后附带的参数):
一、Response.Redirect可以传递的数据以2KB(也就是地址栏中地址的最大的长度)为限。
二、传递的数据超过2KB时,务必使用Server.Transfer。
Server.UrlEncode、HttpUtility.UrlDecode的区别
Server.UrlEncode的编码方式是按照本地程序设置的编码方式进行编码的,而HttpUtility.UrlEncode是默认的按照.net的utf-8格式进行编码的。
Static 和 非Static的区别:
1、用Static声明的方法和变量,不须要实例化该类就调用;
2、Static的,就必定要用实例化的对象来调用,即用new来实例化。
举例说:
若是有一个类People,有一个Static的方法MiaoShu(), 调用方法就是 People.MisoShu()
有一个非Static的方法getName(), 调用方法就是 People p= new People(); p.getName();
如何实现链接池
确保你每一次的链接使用相同的链接字符串(和链接池相同);只有链接字符串相同时链接池才会工做。若是链接字符串不相同,应用程序就不会使用链接池而是建立一个新的链接。
优势
使用链接池的最主要的优势是性能。建立一个新的数据库链接所耗费的时间主要取决于网络的速度以及应用程序和数据库服务器的(网络)距离,并且这个过程一般是一个很耗时的过程。而采用数据库链接池后,数据库链接请求能够直接经过链接池知足而不须要为该请求从新链接、认证到数据库服务器,这样就节省了时间。
缺点
数据库链接池中可能存在着多个没有被使用的链接一直链接着数据库(这意味着资源的浪费)。
技巧和提示
1. 当你须要数据库链接时才去建立链接池,而不是提早创建。一旦你使用完链接当即关闭它,不要等到垃圾收集器来处理它。
2. 在关闭数据库链接前确保关闭了全部用户定义的事务。
3. 不要关闭数据库中全部的链接,至少保证链接池中有一个链接可用。若是内存和其余资源是你必须首先考虑的问题,能够关闭全部的链接,而后在下一个请求到来时建立链接池。
链接池FAQ
1. 什么时候建立链接池?
当第一个链接请求到来时建立链接池;链接池的创建由数据库链接的链接字符创来决定。每个链接池都与一个不一样的链接字符串相关。当一个新的链接请求到来时若是链接字符串和链接池使用的字符串相同,就从链接池取出一个链接;若是不相同,就新建一个链接池。
2. 什么时候关闭链接池?
当链接池中的全部链接都已经关闭时关闭链接池。
3. 当链接池中的链接都已经用完,而有新的链接请求到来时会发生什么?
当链接池已经达到它的最大链接数目时,有新的链接请求到来时,新的链接请求将放置到链接队列中。当有链接释放给链接池时,链接池将新释放的链接分配给在队列中排队的链接请求。你能够调用close和dispose将链接归还给链接池。
4. 我应该如何容许链接池?
对于.NET应用程序而言,默认为容许链接池。(这意味着你能够没必要为这件事情作任何的事情)固然,若是你能够在SQLConnection对象的链接字符串中加进Pooling=true;确保你的应用程序容许链接池的使用。
5. 我应该如何禁止链接池?
ADO.NET默认为容许数据库链接池,若是你但愿禁止链接池,能够使用以下的方式:
1) 使用SQLConnection对象时,往链接字符串加入以下内容:Pooling=False;
2) 使用OLEDBConnection对象时,往链接字符串加入以下内容:OLE DB Services=-4;
提升.NET的性能
1 使用异步方式调用Web服务和远程对象
只要有可能就要避免在请求的处理过程当中对Web服务和远程对象的同步调用,由于它占用的是的ASP.NET 线程池中的工做线程,这将直接影响Web服务器响应其它请求的能力。
2 使用适当的Caching策略来提升性能
3 判断字符串,不要用""比较。
//避免
if(strABC!=null && strABC!="")
{}
//推荐
if(!strABC.IsNullOrEmpty)
{}
4 页面优化
5 用完立刻关闭数据库链接
6 尽可能使用存储过程,并优化查询语句
7 只读数据访问用SqlDataReader,不要使用DataSet
……….
.UDP链接和TCP链接的异同
答:前者只管传,无论数据到不到,无须创建链接.后者保证传输的数据准确,需要连结.
请解释转发与跳转的区别
转发就是服务端的跳转A页面提交数据到B页面,B页面进行处理而后从服务端跳转到其它页面
跳转就是指客户端的跳转
简述你对XML Web Service的原理的认识?
答:利用SOAP(简单对象访问协议)在http上执行远程方法的调用,也能够使用WSDL(Web服务描述语言)来
完成完整的描述Web服务,而后用UDDI注册各个服务提供商提供的服务,以便共享他们。
什么叫应用程序域?
答:应用程序域能够理解为一种轻量级进程。起到安全的做用。占用资源小。
CTS、CLS、CLR分别做何解释?
答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。
什么是受管制的代码?
答:unsafe:非托管代码。不通过CLR运行。
什么是强类型系统?
答:RTTI:类型识别系统。
什么是code-behind技术
codebehind是指代码和用户界面分开
aspx and cs
在.net中,配件的意思是?
答:程序集。(中间语言,源数据,资源,装配清单)
经常使用的调用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜单选项
net Remoting 的工做原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以肯定对象的位置。
O/R Mapping 的原理
答:利用反射,配置将对象和数据库表映射
remoting和webservice两项技术的理解以及实际中的应用。
答:WS主要是可利用HTTP,穿透防火墙。而Remoting能够利用TCP/IP,二进制传送提升效率。
out保留字怎么使用,何时使用
答:有时为了从一个函数中返回多个值,咱们须要使用out关键字,把输出值赋给经过引用传递给方法的变量(也就是参数)。但C#要求变量再被引用的前必须初始化。在调用该方法时,还须要添加out关键字
PDB是什么东西? 在调试中它应该放在哪里?
PDB是用于保存调试和项目状态信息的文件,在debug的时候将产生pdb文件,调试的时候应该放在和对应应用
程序集相同目录。
使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?
Web服务使用的消息机制,而Remoting采用的RPC. Web Service能用于不一样平台,不一样语言,Remoting只适用
于.Net。效率上Remoting高于Xml Web Service
类型系统是由XMLSchema表示的吗?CLS是XMLSchema表示的吗?
不清楚
从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?
这个就像是强弱类型的比较类似,前期绑定是在编译的时候就肯定了要绑定的数据,然后期绑定是在运行的时候
才填充数据。因此前期绑定若是失败,会在编译时报编译错误,然后期绑定失败只有在运行时的时候才发生
调用Assembly.Load算静态引用仍是动态引用?
动态
列举一下你所了解的XML技术及其应用
答:保存配置,站与站之间的交流,WEB SERVICE。以及与数据库的数据交互等地方都要用它.
7.如何理解委托?
答:
至关于函数指针,定义了委托就能够在不调用原方法名称的状况下调用那个方法.
委托具备如下特色:
委托相似于 C++ 函数指针,但它是类型安全的。
委托容许将方法做为参数进行传递。
委托可用于定义回调方法。
委托能够连接在一块儿;例如,能够对一个事件调用多个方法。
方法不须要与委托签名精确匹配。有关更多信息,请参见协变和逆变。
C# 2.0 版引入了匿名方法的概念,此类方法容许将代码块做为参数传递,以代替单独定义的方法。
概述反射和序列化
反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对
象。您能够使用反射动态地建立类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。而后,
能够调用类型的方法或访问其字段和属性
序列化:序列化是将对象转换为容易传输的格式的过程。例如,能够序列化一个对象,而后使用 HTTP 通
过 Internet 在客户端和服务器之间传输该对象。在另外一端,反序列化将从该流从新构造对象。
11) XmlSerializer是如何工做的?使用这个类的进程须要什么ACL权限?
我只知道XmlSerializer是将对象的属性和字段进行序列化和反序列化的,序列化成为xml数据,反序列化再将xml
转换成对象。应该至少须要ACL权限中的读权限.
23)XmlSerializer使用的针对属性的模式有什么好处?解决了什么问题?
只序列化有用的数据,而不是序列化整个对象。实现不必的数据冗余,和提高序列化时的性能。
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,那么死锁会发生)
3) 什么叫圈复杂度(cyclomatic complexity)?为何它很重要?
不知道,望指教 ?
4) 写一个标准的lock(),在访问变量的先后建立临界区,要有"双重检查",
lock的使用
public void LockTest()
{
Object lockObj = new Object();
lock (lockObj)
{
//
}
}
5) 什么叫FullTrust?放入GAC的assembly是不是FullTrust的?
FullTrust彻底信任。放入GAC中的Assembly是否FullTrust个人理解不是。我理解FullTrust是能够经过代码设定的
6) 代码加上须要安全权限的特性有什么好处?
能够更加灵活的设置对代码的访问权限,实现代码级保护。?这点不是特清楚,有明白的给讲解下
7) gacutil /l | find /i "Corillian" 这句命令的做用是什么?
全局程序集缓存中若是有Corillian就更新该程序集,没有就安装
8) sn -t foo.dll 这句命令是干吗的?
显示程序集foo.dll的公钥标记
9) DCOM须要防火墙打开哪些端口?端口135是干吗用的?
135端口,由于DCOM的端口号是随机分配的,默认状况下,会分配1024以上的端口号,因此默认状况下,DCOM
不能穿越防火墙。由于根本不晓得开哪一个端口。但有解决办法能够使DCOM分配的端口号固定,135是远程过程
调用(RPC)的默认端口
10)对比OOP和SOA,它们的目的分别是什么?
我想OOP和SOA应该没有对比性吧。OOP是一种编程模型,强调将复杂的逻辑分解出小的模块,特性是继承,封
装和多态 。而SOA是一个技术框架,技术框架和编程模型应该说不是一码事吧?SOA的思想是将业务逻辑封装
成服务或者中间件提供给应用程序来调用,固然其组件化思想是继承和发扬了OOP的优势。
13)Debug.Write和Trace.Write有什么不一样?什么时候应该使用哪个?
Debug.Write是调试的时候向跟踪窗口输出信息。当编译模式为debug的时候才有效,为release的时
候Debug.Write在编译的时候会忽略,而Trace则是在debug和release两种模式下都可以向跟踪窗口输出信息。
14)Debug Build和Release Build的区别,是否会有明显的速度变化?请说明理由。
Debug会产生pdb文件,release不会。Debug用于开发时的调试,不能要于部署,而release用于部署.debug编
译一些特殊代码,好比#IFDEBUG Debug.Write等,而Release则会将那些特殊标记省略
15)JIT是以assembly为单位发生仍是以方法为单位发生?这对于工做区有何影响?
方法,道理很简单,由于对于一次运行,极可能只用到一个程序集中极少数类型和对象,而大部分可能并不会被
使用,此时CLR傻乎乎的给整个程序集都给Compile了,CLR不是傻疯了么
17)a.Equals(b)和a == b同样吗?
不同。a.Equals(b)表示a与b一致, a==b表示a与b的值相等
18)在对象比较中,对象一致和对象相等分别是指什么?
对象一致是指两个对象是同一个对象,引用相同。而对象相等是指两个对象的值相同,但引用不必定相同
19)在.NET中如何实现深拷贝(deep copy)?
实现IClonable接口
20)请解释一下IClonable
IClonable方法是实现深度复制的接口,实现它应该能深度复制一个对象出来。深度复制的特征的调用对象的构造
方法,建立新的对象,包括建立对象中嵌套的引用对象的新实例。而Shadow复制则不一样,是浅表复制,不从新
建立新实例。浅表复制的实现是Object.MemberWiseClone().
深度复制(Deep Copy)与浅表复制(Shadow Copy)的比较
public class Name
{
public string FirstName;
public string LastName;
}
public class Person:ICloneable
{
public Name PersonName;
public string Email;
/**//// <summary>
/// Deep Copy的例子
/// </summary>
/// <returns></returns>
public Object Clone()
{
Person p = new Person();
p.Email = this.Email;
p.PersonName = new Name();
p.PersonName.FirstName = this.PersonName.FirstName;
p.PersonName.LastName = this.PersonName.LastName;
return p;
}
public void ChangLastName(string lastName)
{
this.PersonName.LastName = lastName;
}
public static void Main()
{
Person p = new Person();
p.PersonName = new Name();
p.PersonName.LastName = "jill";
p.PersonName.FirstName = "zhang";
p.Email = "jillzhang@126.com";
Person sameNamePerson = p.Clone() as Person;
sameNamePerson.ChangLastName("clr_");
Console.WriteLine(p.PersonName.LastName);
Console.WriteLine(sameNamePerson.PersonName.LastName);
Person samePerson = p.MemberwiseClone() as Person;
samePerson.ChangLastName("Shadow");
Console.WriteLine(p.PersonName.LastName);
Console.WriteLine(sameNamePerson.PersonName.LastName);
Console.Read();
}
}
24)为何不该该在.NET中使用out参数?它究竟好很差?
我挺喜欢用out参数的,特别是当函数须要有多于1个返回的时候,我比较愿意用out,至于它好很差没研究过 ?
25)特性可以放到某个方法的参数上?若是能够,这有什么用?
能够,做用能够对参数有进一步限定,好比输入参数为int类型,能够经过容许AttributeTargets=ParameterInfo
的Attribute自定义实现来限定输入参数的大小,好比当输入参数小于100的时候便抱错。
对方法的参数设置Attribute的例子
[AttributeUsage(AttributeTargets.Parameter)]
public class ParameterAtt : Attribute
{
public int Min = 100;
}
public class AttributeTest
{
public void TestMethod([ParameterAtt(Min = 100)] int par1)
{
ParameterInfo para = MethodInfo.GetCurrentMethod().GetParameters()[0];
ParameterAtt att = ParameterAtt.GetCustomAttribute(para, typeof(ParameterAtt)) as
ParameterAtt;
if (att.Min > par1)
{
throw new Exception("要求para1最小为" + att.Min);
}
}
}
9.执行下面代码后:
String strTemp ="abcdefg 某某某";
Int i System.Text.Encoding.Default.GetBytes(strTemp).Length;
Int j = strTemp.Length;
问:i=(14 ) ;j=(11 )
i=(14 ) ;j=(11 ) 中文两个字节
12.概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。
远程逻辑调用,remoing接口只能用在.net中
9. 如何给服务器端控件增长客户端脚本。
答:控件的Attributes
6. 私有程序集与共享程序集有什么区别?
一个私有程序集一般为单个应用程序所使用,而且存储于这个应用程序所在的目录之中,或此目录下面的一个子
目录中。共享程序集一般存储在全局程序集缓存(Global Assembly Cache)之中,这是一个由.NET运行时所维
护的程序集仓库。共享程序集一般是对许多应用程序都有用的代码库,好比.NET Framework类。
10 .请解释ASP.NET中以什么方式进行数据验证
Aps.net 中有非空验证,比较验证,取值范围验证,正则表达式验证及客户自定义验证五大控件,另还有一个集
中验证信息处理控件
11.WEB控件能够激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为何要
使用自动传回。
在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,而后根据传
回的状态信息自动调用服务端事件自动传回是当咱们在点击客户端控件时,采用提交表单的形式将数据直接传回
到务端
只有经过自动传回才能实现服务端事件的机制,若是没有自动回传机制就只能调用客户端事件,而不能调用服务
端事件
13. 请解释web.config文件中的重要节点
appSettings包含自定义应用程序设置。
system.web 系统配置
compilation动态调试编译设置
customErrors自定义错误信息设置
authentication身份验证,此节设置应用程序的身份验证策略。
authorization受权, 此节设置应用程序的受权策略.
14. 请解释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" 表用运行时使用哪个隐藏类
15. 什么是viewstate,可否禁用?是否所用控件均可以禁用?
Viewstate是保存状态的一种机制,EnableViewState属性设置为false便可禁用
16. 当发现不能读取页面上的输入的数据时颇有多是什么缘由形成的?怎么解决?
颇有多是在Page_Load中数据处理时没有进行Page的IsPostBack属性判断
17. 请解释什么是上下文对象,在什么状况下要使用上下文对象
上下文对象是指HttpContext类的Current 属性,当咱们在一个普通类中要访问内置对
象(Response,Request,Session,Server,Appliction等)时就要以使用此对象
1六、解释一下ajax及实现原理
答:Ajax的核心是JavaScript对象XmlHttpRequest,它使您能够使用JavaScript向服务器提出请求并处理响应, 而不阻塞用户,异步请求。
一、delegate是引用类型仍是值类型?enum、int[]和string呢(难度系数40%)?
答案:delegate引用类型,enum值类型,int[]引用类型,string引用类型。
三、base这个关键字有哪几种语法?override呢?
答案:base两个语法,分别是调用基类构造函数和调用基类方法,override用于重写基类方法。
四、请指出C#中是否有下列关键字?virtual、sealed、abstract、import、as、in、goto、final、Const、signed、
String(提示,仅指出C#中没有的便可)(难度系数50%)。
答案:没有的关键字:import、final、Const、signed、String
五、在循环:for( int i = 0; i < 100; i++ ) Console.WriteLine( i );中,请指出i++的执行时机。
答案:在Console.WriterLine( i );执行以后
六、试说明continue关键字的用处。
答案:立刻开始下一次循环,忽略循环体余下的语句
七、object是C#的关键字吗?请指出C#中有哪些类型关键字,如int、float。(提示,写得越多越好)。
答案:是,object、int、uint、long、ulong、short、ushort、byte、sbyte、char、float、double、decimal、boo
l,如回答:enum、struct、class、delegate也算对。
八、C#的XML文档注释中(以///开头的注释),<summary>标签用于描述什么?<param>标签呢?
答案:<summary>用于某个元素的概要说明,<param>用于某个方法的参数概要说明。
九、咱们知道[]是数组和索引器的访问操做符,但它还有一个语法,是什么?
答案:特性(Attribute)
18.请叙述属性与索引器的区别。
属性 索引器
经过名称标识。 经过签名标识。
经过简单名称或成员访问来访问。 经过元素访问来访问。
能够为静态成员或实例成员。 必须为实例成员。
属性的 get 访问器没有参数。 索引器的 get 访问器具备与索引器相同的形参表。
属性的 set 访问器包含隐式 value 参数。 除了 value 参数外,索引器的 set 访问器还具备与索引
器相同的形参表。
1) 描述线程与进程的区别?
线程(Thread)与进程(Process)两者都定义了某种边界,不一样的是进程定义的是应用程序与应用程序之间的边
界,不一样的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。一个进程可
以包括若干个线程,同时建立多个线程来完成某项任务,即是多线程。而同一进程中的不一样线程共享代码和数据
空间。用一个比喻来讲,若是一个家庭表明一个进程,在家庭内部,各个成员就是线程,家庭中的每一个成员都有
义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也能够派出几个
成员来协同完成,而家庭以外的人则没有办法直接消费不属于本身家庭的财产。
2) 什么是Windows服务,它的生命周期与标准的EXE程序有什么不一样
Windows服务是运行在windows后台指定用户下(默认System)的应用程序,它没有标准的UI界面,想比标准
的EXE程序,Windows服务是在服务开始的时候建立,而在服务结束的时候销毁,并且能够设置服务是否与操做
系统一块儿启动,一块儿关闭。它支持三种方式:1)自动方式 2)手动方式 3)禁用 。自动方式的时
候,windows服务将在OS启动后自动启动运行,而手动方式则必须手工启动服务,禁用的状况下服务将不能被
启动。另外标准的EXE默认使用的当前登陆的用户,而windows服务则默认使用System用户,这在对系统资源访
问的时候特别须要注意。
3) Windows单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存同样吗?这对于系统设计有什么
影响?
这个须要针对硬件平台,公式为单个进程能访问的最大内存量=2的处理器位数次方/2,好比一般状况下,32位
处理器下,单个进程所能访问的最大内存量为:232 /2 = 2G 。单个进程能访问的最大内存量是最大虚拟内存
的1/2,由于要分配给操做系统一半虚拟内存。
4) 什么是强类型,什么是弱类型?哪一种更好些?为何?
强类型是在编译的时候就肯定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会肯定类型。没有
好很差,两者各有好处,强类型安全,由于它事先已经肯定好了,并且效率高。通常用于编译型编程语
言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编
程语言,如javascript,vb等
5) PID是什么?在作系统的故障排除时如何使用它?
PID是进程编号,在系统发现故障的时候,能够根据它寻找故障所发生的具体进程,而且可经过visual studio.net
等ide将故障进程附加到进程中进行调试(debug)
6) 单个TCP/IP端口上可以被多少个进程侦听?
1个
7) 什么是GAC?它解决了什么问题?
Gloal Assembly Cache,全局应用程序集缓存。它解决了几个程序共享某一个程序集的问题。没必要再将那个被共
享的程序集拷贝到应用程序目录了,其实这道理很简单,.net应用程序在加载的时候,会首先查看全局应用程序
集缓存,若是有就能够直接使用,没有再到应用程序目录进行查找。
1.白盒测试和黑盒测试
答:黑盒测试:已知产品的功能设计规格,能够进行测试证实每一个实现了的功能是否符合要求。
白盒测试:已知产品的内部工做过程,能够经过测试证实每种内部操做是否符合设计规格要求,全部内部成
分是否以通过检查。
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看作一个黑盒子,测试人员彻底
不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明
。所以黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现如下几类错误:
一、是否有不正确或遗漏的功能?
二、在接口上,输入是否能正确的接受?可否输出正确的结果?
三、是否有数据结构错误或外部信息(例如数据文件)访问错误?
四、性能上是否可以知足要求?
五、是否有初始化或终止性错误?
软件的白盒测试是对软件的过程性细节作细致的检查。这种方法是把测试对象看作一个打开的盒子,它容许
测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序全部逻辑路径进行测试。经过在不
同点检查程序状态,肯定实际状态是否与预期的状态一致。所以白盒测试又称为结构测试或逻辑驱动测试。白盒
测试主要是想对程序模块进行以下检查:
一、对程序模块的全部独立的执行路径至少测试一遍。
二、对全部的逻辑断定,取“真”与取“假”的两种状况都能至少测一遍。
三、在循环的边界和运行的界限内执行循环体。
四、测试内部数据结构的有效性,等等。
请简述一下用Socket进行同步通信编程的详细步骤
一、在应用程序和远程设备中使用协议和网络地址初始化套接字
二、在应用程序中经过指定端口和地址创建监听
三、远程设备发出链接请求
四、应用程序接受链接产生通讯scoket
五、应用程序和远程设备开始通信(在通信中应用程序将挂起直到通信结束)
六、通信结束,关闭应用程序和远程设备的Socket回收资源
OSI网络结构的七层模型及其核心思想是什么
第七层:应用层
定义了用于在网络中进行通讯和数据传输的接口 - 用户程式;
提供标准服务,好比虚拟终端、文件以及任务的传输和处理;
第六层:表示层
掩盖不一样系统间的数据格式的不一样性;
指定独立结构的数据传输格式;
数据的编码和解码;加密和解密;压缩和解压缩
第五层:会话层
管理用户会话和对话;
控制用户间逻辑链接的创建和挂断;
报告上一层发生的错误
第四层:传输层
管理网络中端到端的信息传送;
经过错误纠正和流控制机制提供可靠且有序的数据包传送;
提供面向无链接的数据包的传送;
第三层:网络层
定义网络设备间如何传输数据;
根据惟一的网络设备地址路由数据包;
提供流和拥塞控制以防止网络资源的损耗
第二层:数据链路层
定义操做通讯链接的程序;
封装数据包为数据帧;
监测和纠正数据包传输错误
第一层:物理层
定义经过网络设备发送数据的物理方式;
做为网络媒介和设备间的接口;
定义光学、电气以及机械特性。
2 几十上百万行,如何快速查询出表数据
答:用分页存储过程
/*
函数名称: GetRecordFromPage
函数功能: 获取指定页的数据
参数说明: @tblName 包含数据的表名
@fldName 关键字段名
@PageSize 每页记录数
@PageIndex 要获取的页码
@OrderType 排序类型, 0 - 升序, 1 - 降序
@strWhere 查询条件 (注意: 不要加 where)
*/
CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(2000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(1000) -- 临时变量
declare @strOrder varchar(500) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName + '] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
exec (@strSQL)
GO
3、数据库查询优化:
一、多态性,多种数据库兼容;
二、支持翻页,支持查询总数,页码显示;
三、能处理100万以上数据量;
答:
CREATE PROCEDURE dbo.LSP_SP_SelectElementByPage
@SelectFields varchar(200),/*要查询的字段列表*/
@Condition varchar(300),/*查询条件*/
@PageSize int =20,/*页面大小,默认为20*/
@PageNumber int =1/*页号,默认为第一页*/
/*@PageCount int out返回知足条件的总页数*/
AS
begin
declare @count int
select @count =count(*) from lsp_t_elementInfo
if(@count %@PageSize=0)
set @count = @count/@PageSize
else
set @count = @count/@PageSize +1
select @count PageCount
select IDENTITY(int,1,1) as iid,ElementName,Type into #temptable from LSP_T_ElementInfo
select * from #temptable where iid between @PageSize * (@PageNumber -1) and @PageSize * @PageNumber
end
GO
1.两个表,写查询语句,根据两个字段一个是升序,一个将序。
答:select * from a,b where a.字段1 = b.字段1 order by a.字段2 asc,b.字段2 desc
2.根据第一题,每页面显示10条记录,在第25页时怎样显示
答:
/*
函数名称: GetRecordFromPage
函数功能: 获取指定页的数据
参数说明: @tblName 包含数据的表名
@fldName 关键字段名
@PageSize 每页记录数
@PageIndex 要获取的页码
@OrderType 排序类型, 0 - 升序, 1 - 降序
@strWhere 查询条件 (注意: 不要加 where)
*/
CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(2000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(1000) -- 临时变量
declare @strOrder varchar(500) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName + '] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
exec (@strSQL)
GO
2.写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, 以自动增加的ID做为主键, 注意:ID可能不是连续的。)
select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
3.public class c{ public c(string a) : this() {;}; public c() {;} } 解释第一个构造函数中发生了什么?这个构造函数有什么用?
(第一个构造函数调用了第二个构造函数,这个构造函数构造了一个c对象的实例。)
4.一个长度为10000的字符串,经过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。
答:
using System.Text;
StringBuilder sb = new StringBuilder(0, 10000);
string strABC = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
string[] ABC = strABC.Split(',');
int len = ABC.Length;
Random rd = new Random();
for (int i = 0; i < 10000; i++)
{
sb.Append(ABC[rd.Next(len)]);
}
5.产生一个int数组,长度为100,并向其中随机插入1-100,而且不能重复。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];
2.如何把一个Array复制到ArrayList里
答:
foreach( object o in array )arrayList.Add(o);
8.用C#写一段选择排序算法,要求用本身的编程风格。
答:private int min;
public void xuanZhe(int[] list)//选择排序
{
for (int i = 0; i < list.Length - 1; i++)
{
min = i;
for (int j = i + 1; j < list.Length; j++)
{
if (list[j] < list[min])
min = j;
}
int t = list[min];
list[min] = list[i];
list[i] = t;
}
}
4.写一个函数计算当参数为N的值:1-2+3-4+5-6+7……+N
答:public int returnSum(int n)
{
int sum = 0;
for (int i = 1; i <= n; i++)
{
int k = i;
if (i % 2 == 0)
{
k = -k;
}
sum = sum + k;
}
return sum;
}
public int returnSum1(int n)
{
int k = n;
if (n == 0)
{
return 0;
}
if (n % 2 == 0)
{
k = -k;
}
return aaa(n - 1) + k;
}
7. 某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循以下规则 :
(1) 密码单词的最小长度是两个字母,能够相同,也能够不一样
(2) K不多是单词的第一个字母
(3) 若是L出现,则出现次数不止一次
(4) M不能使最后一个也不能是倒数第二个字母
(5) K出现,则N就必定出现
(6) O若是是最后一个字母,则L必定出现
问题一:下列哪个字母能够放在LO中的O后面,造成一个3个字母的密码单词?
A) K B)L C) M D) N
答案:B
问题二:若是能获得的字母是K、L、M,那么可以造成的两个字母长的密码单词的总数是多少?
A)1个 B)3个 C)6个 D)9个
答案:A
问题三:下列哪个是单词密码?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C
62-63=1 等式不成立,请移动一个数字(不能够移动减号和等于号),使得等式成立,如何移动?
答案:62移动成2的6次方
1七、列出经常使用的使用javascript操做xml的类包
答:
XML.prototype.xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
XML.prototype.InitXML=InitXML;
XML.prototype.getFirstChild=getFirstChild;
XML.prototype.getLastChild=getLastChild;
XML.prototype.getChild=getChild; // 取得节点值
XML.prototype.getNodeslength=getNodeslength; // 最得节点下的子节点的个数
XML.prototype.getNode=getNode; // 取得指定节点
XML.prototype.delNode=delNode; // 删除指定节点,若是节点相同,则删除最前面的节点.
XML.prototype.getNodeAttrib=getNodeAttrib; // 取得节点的指定属性值.
XML.prototype.InsertBeforeChild=InsertBeforeChild; // 在指定节点以前插入一个节点.
XML.prototype.InsertChild=InsertChild; // 在指定节点下插入节点.
XML.prototype.setAttrib=setAttrib; // 设置指定属性的值.
XML.prototype.setNodeValue=setNodeValue; // 设置指定节点的值.
XML.prototype.CreateNodeS=CreateNodeS; // 建立一个指定名的节点.
XML.prototype.addAttrib=addAttrib; // 为指定节点添加指定属性,并设置初值.
XML.prototype.FindString=FindString; // 在指定节点下查找字符串.
给定如下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 );
}
}
6.C#代码实现,确保windows程序只有一个实例(instance)
///<summary>
///应用程序的主入口点。
///</summary>
[STAThread]
staticvoid Main()
{
//防止程序屡次运行
if(!OneInstance.IsFirst("GetPayInfo"))
{
MessageBox.Show ("警告:程序正在运行中! 请不要重复打开程序!可在右下角系统栏找到!","程序错误提
示:",MessageBoxButtons.OK,MessageBoxIcon.Stop); return; } Application.Run(new Form1()); } // ******************* 防止程序屡次执行 ************************** publicabstractclass OneInstance { ///<summary> ///判断程序是否正在运行 ///</summary> ///<param name="appId">程序名称</param> ///<returns>若是程序是第一次运行返回True,不然返回False</returns> publicstaticbool IsFirst(string appId) { bool ret=false; if(OpenMutex(0x1F0001,0,appId)==IntPtr.Zero) { CreateMutex(IntPtr.Zero,0,appId); ret=true; } return ret; } [DllImport("Kernel32.dll",CharSet=CharSet.Auto)] privatestaticextern IntPtr OpenMutex( uint dwDesiredAccess, // access int bInheritHandle, // inheritance option string lpName // object name ); [DllImport("Kernel32.dll",CharSet=CharSet.Auto)] privatestaticextern IntPtr CreateMutex( IntPtr lpMutexAttributes, // SD int bInitialOwner, // initial owner string lpName // object name ); }