.NET技术方向面试题库
试题解答
1. Linq查询,lambda表达式
语言集成查询(LINQ) 是 Visual Studio 2008 中引入的一组功能,可为 C# 和 Visual Basic 语言语法提供强大的查询功能。 LINQ 引入了标准、易学的数据查询和更新模式,该技术可以扩展为几乎支持任何类型的数据存储。Visual Studio 包含 LINQ 提供程序的程序集,借助这些程序集,就能将 LINQ 用于 .NET Framework 集合、SQL Server 数据库、ADO.NET 数据集和 XML 文档。
“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
2. C#中的垃圾回收机制。
GC就是垃圾回收器,一般来说系统会自动检测不会使用的对象或变量进行内存的释放,不需要手动调用,用Collect()就是强制进行垃圾回收,使内存得到及时的释放,让程序效率更高。
3. Linq查询的优势。
无需复杂学习过程即可上手;
编写更少代码即可创建完整应用;
更快开发错误更少的应用程序;
无需求助奇怪的编程技巧就可合并数据源;
让新开发者开发效率更高;
任何对象或数据源都可以定制实现Linq适配器,为数据交互带来真正方便
4. 面向对象的主要思想包括什么?
封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。
继承:子类拥有父类的所有数据和操作。
多态:一个程序中同名的不同方法共存的情况。有两种形式的多态– 重载与重写。
5. c#中的接口和类有什么异同?
接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!
而类是负责功能的具体实现!
在类中也有抽象类的定义,抽象类与接口的区别在于:
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。
但接口是一个行为的规范,里面的所有东西都是抽象的!
一个类只可以继承一个基类也就是父类,但可以实现多个接口
6. 什么是装箱和拆箱?
装箱就是把值类型到引用类型的转换
拆箱就是引用类型到值类型的转换
7. 简述 private、protected、internal 、public 修饰符的访问权限。
private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
internal: 在同一程序集内可以访问。
public : 公共成员,完全公开,没有访问限制。
8. c#中的委托是什么?事件是不是一种委托?
委托本质上是一种“方法接口”,它相当于C/C++中的函数指针,当然它比函数指针安全,在C#中通常用于事件处理。与JAVA相比,可以避免使用大量小粒度的匿名类。(不过,也许微软就是使用类似于JAVA的匿名类实现委托的,只不过从字面上看起不是那么回事罢了,谁知道呢?)
事件不是委托,不过由于事件的性质决定了处理它的程序逻辑能访问的参数,因此,在C#中处理事件的逻辑都包装为委托(一种“方法接口”)。实际上,如果你处理自定义的事件,就像JAVA中那样用接口实现也是可以的,不过这么做在C#一般没有什么特别的好处。
9. Override 与重载的区别。
override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要
Override 是进行基类中函数的重写。为了适应需要。
10. .NET的错误处理机制是什么?
.net错误处理机制采用try-〉catch-〉finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
11. 线程和进程的区别
进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元。
同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程。
线程是轻量级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的
线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源
12. WCF、WPF、WF、WebServices 简述
WPF:下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。使用 WPF,您可以创建广泛的独立应用程序以及浏览器承载的应用程序。
WCF:由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。
WF:工作流开发平台。
Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行交互操作。Internet Inter-Orb Protocol(IIOP)都已经发布了很长时间了,但是这些模型都依赖于特殊对象模型协议,而 Web Services 利用 SOAP 和 XML对这些模型在通讯方面作了进一步的扩展以消除特殊对象模型的障碍。Web Services 主要利用 HTTP 和 SOAP 协议使业务数据在 Web 上传输,SOAP通过 HTTP 调用业务对象执行远程功能调用,Web 用户能够使用 SOAP 和 HTTP通过 Web 调用的方法来调用远程对象的。
13. int[][] myArray3=new int[3] []{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}};myArray3[2][1]的值是
答案:2
14. 启动一个线程主要用什么方法_______
Start
15. 能用foreach遍历访问的对象需要实现 ______ 接口或声明____方法的类型。
能用foreach遍历访问的对象需要实现 IEnumerable 接口或声明GetEnumerator 方法的类型
16. 请叙述const与readonly的区别。
readonly 关键字与 const 关键字不同: const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
17. c#中的三元运算符是什么
C#中有一个三元运算符”?:”,语法为:条件表达式?表达式1:表达式2;
该操作首先求出条件表达式的值(bool类型),为true时调用表达式1,为flase时调用表达式2。其逻辑为:”如果为真执行第一个,否则执行第二个。”
18. 当整数a赋值给一个object对象时,整数a将会被什么?
装箱。
19. 类成员有几种可访问形式?
private
public
protected
internal
20. public static const int A=1;这段代码有错误么?是什么?
const成员都是static所以应该去掉static
21. 利用operator声明且仅声明了==,有什么错误么?
重载了“==” 就必须重载 “!=”
22. 委托声明的关键字是什么?
delegate
23. 用sealed修饰的类有什么特点?
不可被继承
24. 在.Net中所有可序列化的类都被标记为什么?
Serializable
25. 在.Net托管代码中我们不用担心内存漏洞,这是因为有了哪个?
GC。
26. 下面的代码中有什么错误吗?
using System;
class A
{
public virtual void F(){
Console.WriteLine(“A.F”);
}
}
abstract class B:A
{
public abstract override void F();
}
答案:abstract override 是不可以一起修饰
27. C#中的接口和类有什么异同。
接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!
而类是负责功能的具体实现!
在类中也有抽象类的定义,抽象类与接口的区别在于:
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。
但接口是一个行为的规范,里面的所有东西都是抽象的!
一个类只可以继承一个基类也就是父类,但可以实现多个接口
28. 请解释接口的显式实现有什么意义?
规定强制执行,保持一致
29. 请解释.NET采用委托实现的事件模型与JAVA中采用接口实现的事件模型有什么区别,
.net中的委托概念java中没有相同的,只有事件模式是一样的,java中有一个叫Obserable接口,可以添加IEventListener,使用内部类可以构建类似于委托的概念
30. 请解释ASP.NET中button linkbutton imagebutton 及hyperlink这四个控件之间的功能区别?
button 是普通按钮控件,具有按钮所有的属性和事件方法, linkbutton组件也是一个服务器端的组件,这个组件有点类似于HTML中的<A>标识符。它的主要作用是就是在ASP.NET页面中显示一个超链接。当这个链接被按动的时候,页面就会往服务器端传递信息,并且在服务器端来处理相应的事件, imagebutton 是图片按钮,它以一张图片来代替按钮,来执行按钮的功能,显示为图片,具有按钮的所有功能, hyperlink 为超级链接控件, 以用鼠标选中的文字或图形。不论在任何地方,点击一个超级链接可以使用户转移到同一页面的不同部分或另一个页面.不具有按钮的功能.
31. override与重载的区别
Override用来重写父类的方法,重载使用相同名的方法或操作符拥有不同类型的参数
32. 对于一个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务?
Close
Dispose
Finalize
33. 请描述一下ref和out在方法参数传递上的异同点?
Ref和Out这样个2个关键字都能够提供相似的功效,其作用也很像C中的指针变量。稍有不相同之处是:
用Ref型参数时,传入的参数必须先被初始化。而Out则不需要,对Out而言,就必须在方法中对其完成初始化。
用Ref和Out时都必须注意,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
Out更适合用在要要Return多个返回值的地方,而Ref则用在要要被调出使用的方法修改调出使用者的引用的时候。
34. 请指出GAC的含义
全局程序集缓存 (GAC)
计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强名称,gac中的所有的assembly都会存放在系统目录"%winroot%/assembly下面。放在系统目录下的好处之一是可以让系统管理员通过用户权限来控制assembly的访问。
35. 请指出.NET中所有类型的基类
object
36. 请列出C#中几种循环的方法,并指出他们的不同
for:带有索引的集合,用for循环
foreach:使用范围广,当一个集合实现IEnumerable接口或者GetEnumerator()方法时,可以用该循环方法,foreach(Object o in list) 其中o为只读的。
while: 条件成立循环
do...while:至少执行一次
37. 请说出强名的含义
垃圾回收的原理是根据是否空引用,和该数据类型占用内存来判断该收回多少内存.强类型说白就是必须要有个数据类型.
38. 请说明.NET中的错误处理机制,并举例
异常是从 Exception 类类继承的对象。异常从发生问题的代码区域引发,然后沿堆栈向上传递,直到应用程序处理它或程序终止。
try
{ //执行代码,不确定是否会出错 }
catch
{ //出错处理 }
finally
{ //无论怎样,都要执行 }
39. 用C#实现以下功能:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复
namespace Wolfy.RandomDemo
{
class Program
{
static void Main(string[] args)
{
int[] result = GetRandom(100);
for (int i = 0; i < result.Length; i++)
{
Console.WriteLine(result[i]);
}
Console.WriteLine("over:" + result.Length);
Console.Read();
}
/// <summary>
/// 获得无重复随机数组
/// </summary>
/// <param name="n">上限n</param>
/// <returns>返回随机数组</returns>
static int[] GetRandom(int n)
{
//容器A和B
int[] arryA = new int[n];
int[] arryB = new int[n];
//填充容器a
for (int i = 0; i < arryA.Length; i++)
{
arryA[i] = i + 1;
}
//随机对象
Random r = new Random();
//最后一个元素的索引 如n=100,end=99
int end = n - 1;
for (int i = 0; i < n; i++)
{
//生成随机数 因为随机的是索引 所以从0到100取,end=100
//一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数,即:返回的值范围包括 minValue 但不包括 maxValue。
//如果 minValue 等于 maxValue,则返回 minValue
//
int minValue = 0;
int maxValue = end + 1;
int ranIndex = r.Next(minValue, maxValue);
//把随机数放在容器B中
arryB[i] = arryA[ranIndex];
//用最后一个元素覆盖取出的元素
arryA[ranIndex] = arryA[end];
//缩减随机数生成的范围
end--;
}
//返回生成的随机数组
return arryB;
}
}
}
40. 简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
WS主要是可利用HTTP穿透防火墙。Remoting可以利用TCP/IP,二进制传送提高效率。
41. 根据线程安全的相关知识,分析以下代码,当调用test方法时i〉10时是否会引起死锁?并简要说明理由。
public void test(int i)
{
lock(this)
{
if (i〉10)
{
i--;
test(i);
}
}
}
不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
42. 根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(object sender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。
}
}
}
}
答: if(OnNew != null ){
OnNew( );
}
43. NET Remoting 的工作原理是什么?
服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置
44. 在.NET中,配件的意思是?
程序集。(中间语言,源数据,资源,装配清单)
45. .NET中读写文件需要用到那些方法?他们的作用?
File:
什么时候使用:当大小不大,同时可以一次性进行读写操作的时候使用
不同的方式可以读写文件类型不一样。
ReadAllBytes() WriteAllByte():可以读写任意类型的文件 (里面封装的是FileStream)
ReadAllLines() ReadAllText():(里面封装是StreamWriter,StreamReader),只能读写文本类型文件
FileStream:
当读写大文件的时候使用,它可以自定义读写的数组大小
一个流只能做一个事情:如果需要读和写那么就需要创建两个流
读取:将数据读取到数组 写入是将数组的数据再写入到文件(类型转换)
StreamReader/StreamWrite:
只能对文本文件进行读写操作
它可以按行进行读取和写入
46. 在C#中有一个double型的变量,比如10321.5和122235401.21644,作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50和$122,235,401.22而在英国则为£10 321.50和£122 235 401.22
System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");
//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");为英 国 货币类型decimal y = 9999999999999999999999999999m;
string str = String.Format(MyCulture,"My amount = {0:c}",y);
47. 在C#中using和new这两个关键字有什么意义,请写出你所知道的意义?
Using 引入一个名称空间,或在使用了一个对像后自动调用其IDespose,New 实例化一个对像,或修饰一个方法,表示此方法显式隐藏父类的同名方法
48. 在下面的例子里
using System;
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
public override void PrintFields()
{
Console.WriteLine(“x={0},y={1}”,x,y);
}
当使用new B()创建B的实例时,产生什么输出?
X=1,Y=0
49. 求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
int Num = this.TextBox1.Text.ToString() ;
int Sum = 0 ;
for (int i = 0 ; i 〈 Num + 1 ; i++)
{
if((i%2) == 1)
{
Sum += i ;
}
else
{
Sum = Sum - I ;
}
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine() ;
50. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
不是。可以用任意类型。
51. NET中读写XML的类都归属于哪些命名空间?
答:System.Xml
52. CLR与IL分别是什么含义?
CLR:公共语言运行时,类似于Java中的JVM,Java虚拟机;在.Net环境下,各种编程语言使用一种共同的基础资源环境,这就是CLR,CLR将直接与*作系统进行通信,而编程语言如C#.NET将尽量避免直接与*作系统直接通信,加强了程序代码的执行安全性,可以这样看:CLR就是具体的编程语言如:C#.NET与*作系统之间的翻译,同时它为具体的编程语言提供了许多资源:
IL,中间语言,也称MSIL,微软中间语言,或CIL,通用中间语言;所有.NET源代码(不管用哪种语言编写)在进行编译时都被编译成IL。在应用程序运行时被即时(Just-In-Time,JIT)编译器处理成为机器码,被解释及执行。IL,中间语言,也称MSIL,微软中间语言,或CIL,通用中间语言;所有.NET源代码(不管用哪种语言编写)在进行编译时都被编译成IL。在应用程序运行时被即时(Just-In-Time,JIT)编译器处理成为机器码,被解释及执行。
53. 请解释进程与线程的区别?进程与程序的区别?
一般,一个应用程序对应于一个或多个进程,可以把进程看作是该应用程序在操作系统中的标识;而一个进程通常由多个线程组成,而线程是操作系统为该应用程序分配处理时间的最小单元。
54. 私有程序集与共享程序集有什么区别?
一个私有程序集通常为单个应用程序所使用,并且存储于这个应用程序所在的目录之中,或此目录下面的一个子目录中。共享程序集通常存储在全局程序集缓存(Global Assembly Cache)之中,这是一个由.NET运行时所维护的程序集仓库。共享程序集通常是对许多应用程序都有用的代码库,比如.NET Framework类。
55. 请叙述类与结构的区别。
结构是值类型;
结构不支持继承;
结构不能定义默认的构造函数;
结构不能定义析构函数;
结构不能使用初始值设置域值。
56. New有几种用法
第一种:new Class();
第二种:覆盖(隐藏)方法
public new XXXX(){}
第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。
57. 如何把一个Array复制到ArrayList里
foreach( object o in array ){
arrayList.Add(o);
}
58. 什么叫应用程序域?什么是受管制的代码?什么是强类型系统?
应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小
受管制的代码:unsafe:非托管代码。不经过CLR运行。
强类型系统 RTTI:类型识别系统。
59. C#中,string str = null 与 string str =““,请尽量用文字说明区别。(要点:说明详细的内存空间分配)
string str = null 是不分配内存空间,而string str = ““ 给它分配长度为空字符串的内存空间。
60. 概述反射和序列化
反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性
序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。
61. C#中的委托是什么?事件是不是一种委托?
委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。
事件不是委托。
62. 如何理解委托
委托是一种特殊的引用类型,它将方法作为特殊的对象封装起来,从而将方法作为变量或是参数进行传递。
委托在使用过程中的一般步骤:类型定义、对象创建和方法绑定,方法调用。
所谓的委托就是我委托你去买火车票,你有自己去买火车票的方法,我要的最终结果是你把火车票买了。在这过程中你就是一个委托。其中这个委托要进行四个步骤:类型定义(让别人帮你买火车票这一事件)对象创建(具体委托谁去买和那人说一声),方法绑定(告诉你委托的人要买什么样的火车票),方法的调用(委托的人买到了你要的火车票)。
在使用委托的时候首先是在程序的开始声明一个委托,在使用这个委托的时候要实例化一个委托(使用 的具体的委托就是一个对象),委托的本质是类,在用new的表达式中要封装的就是方法名,而不包括方法的参数和返回值(如果是非静态的方法还要指出方法所属的对象)。
委托是一种引用方法类型,一旦委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。委托可以看作是对函数的抽象,是函数的‘类’,委托的实例将代表一个具体的函数。
63. C#中能使用指针吗,怎样使用指针?
能,在方法、类、代码块中使用unsafe关键词
64. 概述三层结构体系?
表示层(UI),业务逻辑层(BLL),数据访问层(DAL)。
65. 列举一下你所了解的XML技术及其应用?
xml可以用来做网页(xslt)、可以当作数据库、可以用来保存对象的序列化(web服务是基于这个的)。
66. 值类型和引用类型的区别?
基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
所有的值类型均隐式派生自 System.ValueType。与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。
与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将null 赋给值类型。 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
值类型主要由两类组成:结构、枚举; 结构分为以下几类:Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。
引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字:class、interface、delegate、内置引用类型: object、string。
67. 构造器Constructor是否可以被继承?是否可以被Override?
Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).
68. 是否可以继承String类?
因为String类是密封类所以不可以继承string类。
69. 当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?
取决于是否进行线程同步。如果进行了线程同步,只能一个线程进入。
70. 用最有效的方法算出2乘以8等于几?
2<<3。
71. C#是否可以对内存直接进行操作?
C#是可以对内存进行直接操作的,虽然很少用到指针,但是C#是可以使用指针的,在用的时候需要在前边加unsafe,,在.net中使用了垃圾回收机制(GC)功能,它替代了程序员,不过在C#中不可以直接使用finalize方法,而是在析构函数中调用基类的finalize()方法。
72. 什么是受管制的代码?
unsafe:非托管代码。不经过CLR运行。
73. sleep() 和 wait() 有什么区别?
sleep()方法是将当前线程挂起指定的时间。
wait()释放对象上的锁并阻塞当前线程,直到它重新获取该锁。
74. 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正确。
75. 什么是虚函数?什么是抽像函数?
虚函数:可由子类继承并重写的函数。
抽像函数:规定其非虚子类必须实现的函数,必须被重写。
76. 什么是XML?
XML即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,即可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。
77. C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?
一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质
78. .net的错误处理机制是什么?
.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
79. &和&&的区别
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).
80. 用Singleton如何写设计模式
static属性里面new ,构造函数private.
81. 在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令 和语句 new 创建实例 new 隐藏基类中方法。
using 引入名称空间或者使用非托管资源
new 新建实例或者隐藏父类方法
82. String s = new String("xyz");创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对像s。
83. C#中,i++与++i,有什么区别?
i++是使用完 i 之后再使 i 加一
++i是在使用 i 之前便使 i 加一
84. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少,用递归算法实现。
public class MainClass {
public static void Main(){
Console.WriteLine(Foo(30));
}
public static int Foo(int i) {
if (i <= 0) return 0;
else if(i > 0 && i <= 2) return 1;
else return Foo(i -1) + Foo(i - 2);
}
}
85. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引
C#通过提供索引器,可以象处理数组一样处理对象。特别是属性,每一个元素都以一个get或set方法暴露。索引器不单能索引数字(数组下标),还能索引一些HASHMAP的字符串,所以,通常来说,C#中类的索引器通常只有一个,就是THIS,但也可以有无数个,只要你的参数列表不同就可以了索引器和返回值无关, 索引器最大的好处是使代码看上去更自然,更符合实际的思考模式.
86. 什么是Code-Behind技术?
代码后置。
87. int、DateTime、string是否可以为null?
int、DateTime不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null。string可以为null。
88. 传入某个属性的set方法的隐含参数的名称是什么?
value,它的类型和属性所声名的类型相同。
89. string、String;int、Int32;Boolean、bool的区别
String、Int32、Boolean等都属于.Net中定义的类,而string、int、bool相当于C#中对这些类定义的别名。
90. 不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?
String是不可变的在这段代码中,s原先指向一个String对象,内容是 "abc",然后我们将s指向"123",那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。
91. 是否可以从一个static方法内部发出对非static方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部不能发出对非static方法的调用。
92. 说出一些常用的类、接口,请各举5个。
常用的类:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>
常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary
93. 如果不用VisualStudio,用哪个命令行编译C#程序?
csc.exe。
94. 你对泛型了解吗?简单说明一下泛型的有什么好处?
泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用
好处是——类型安全和减少装箱、拆箱。提高性能、类型安全和质量,减少重复性的编程任务
95. DateTime.Parse(myString); 这行代码有什么问题?
有问题,当myString不能满足时间格式要求的时候,会引发异常,建议使用DateTime.TryParse()
96. XmlSerializer使用的针对属性的模式有什么好处?解决了什么问题?
只序列化有用的数据,而不是序列化整个对象。实现没必要的数据冗余,和提升序列化时的性能。
97. PDB是什么东西? 在调试中它应该放在哪里?
PDB是用于保存调试和项目状态信息的文件,在debug的时候将产生pdb文件,调试的时候应该放在和对应应用程序集相同目录。
98. 请解释一下IClonable
IClonable方法是实现深度复制的接口,实现它应该能深度复制一个对象出来。深度复制的特征的调用对象的构造方法,创建新的对象,包括创建对象中嵌套的引用对象的新实例。而Shadow复制则不同,是浅表复制,不重新创建新实例。浅表复制的实现是Object.MemberWiseClone().
深度复制(Deep Copy)与浅表复制(Shadow Copy)
99. 代码实现,确保windows程序只有一个实例(instance)
///〈summary〉
///应用程序的主入口点。
///〈/summary〉
[STAThread]
staticvoid Main()
{
//防止程序多次运行
if(!OneInstance.IsFirst(“GetPayInfo“))
{
MessageBox.Show (“警告:程序正在运行中! 请不要重复打开程序!可在右下角系统栏找到!“,”程序错误提示:“,MessageBoxButtons.OK,MessageBoxIcon.Stop);
return;
}
Application.Run(new Form1());
}
// ******************* 防止程序多次执行 **************************
Public abstract class OneInstance
{
///〈summary〉
///判断程序是否正在运行
///〈/summary〉
///〈param name=“appId“〉程序名称〈/param〉
///〈returns〉如果程序是第一次运行返回True,否则返回False〈/returns〉
Public static bool 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)]
Private static extern 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
);
}
);
}
100. 在.NET(C# or vb.net)中如何取消一个窗体的关闭
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel=true;
}
101. 在.NET(C# or vb.net)如何启动另一个程序。
Process.Start("cmd");//启动CMD
102. 在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?
一个是退出整个应用程序,一个是关闭其中一个form
103. DataGridView的DataSource可以连接什么数据源
第一种:
DataSet ds=new DataSet ();
this.dataGridView1.DataSource=ds.Tables[0];
第二种:
DataTable dt=new DataTable();
this.dataGridView1.DataSource=dt;
第三种:
DataSet ds=new DataSet ();
this.dataGridView1.DataSource = ds.Tables["表名"];
第四种:
DataSet ds=new DataSet ();
this.dataGridView1.DataSource = ds;
this.dataGridView1.DataMember = "表名";
第五种:
ArrayList Al = new ArrayList();
this.dataGridView1.DataSource = Al;
第六种:
Dictionary<string, string> dic = new Dictionary<string, string>();
this.dataGridView1.DataSource = dic;
第七种:
DataView dv = new DataView();
this.dataGridView1.DataSource = dv;
第八种:
this.dataGridVi.DataSource = new BindingList<Object>(List<Object>);
104. Page_onload里面一般会写什么代码?
答:通过判断IsPostBack属性判断是否首次加载。在页面首次加载时,编写控件初始化代码和页面变量初始化代码
105. MVC框架中(model,view,controller)这三个是怎么工作的?
答:Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
106. 什么时候会用到cookie,session?它们的区别分别是什么?
答:Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
1,session 在服务器端,cookie 在客户端(浏览器)
2,session 默认被存在服务器的一个文件里(不是内存)
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
4,session 可以放在 文件、数据库、或内存中都可以。
5,用户验证这种场合一般会用 session 因此,维持一个会话的核心就是客户端的唯一标识,即 session id
107. ASP.NET的WebPage的生命周期?
答:初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件 预呈现 保存状态 呈现 处置 卸载
108. 页面之间传值的几种方式?
答:
页面间传值:
1.使用QueryString变量。
2.PostBackUrl()方法。
3.使用Server.Transfer方法。
应用程序范围内传值:
1.使用Cookie对象变量。
2.使用Session变量。
3.使用Application对象变量。
109. Ajax异步交互数据。
答:使用AJAX实现异步刷新就是在用户“无察觉”的情况下“偷偷”访问了远程服务器进行工作,然后将结果返回后由JS提供在客户端,让用户感受好像B/S架构的程序和C/S的差不多的感觉。
110. IIS如何进行配置
答:1.打开IIS管理器。
2.展开“本地计算机”-“网站”目录,选中“默认网站”节点,右键“属性”,设置主目录。
3.右键“默认网站”图标,选择“新建”-“虚拟目录”命令。IIS将启动“虚拟目录创建向导”对话框帮助我们完成创建虚拟目录的步骤。
4.单击对话框的“下一步”按钮以显示虚拟目录别名页,如HelloWorld。别名是我们用来标识该目录中的资源的名称。在VS.NET中,别名是用来指定项目位置的名称。
5.单击“下一步”按钮,以显示Web站点内容目录页。在此,输入包含此网站内容的目录的路径。
6.单击“下一步”按钮,打开虚拟目录访问权限设置页面。选中“读取”复选框和“运行脚本”复选框。
7.单击“下一步”按钮,再单击“完成”按钮创建虚拟目录并终止向导。查看IIS管理器中虚拟目录的创建结果,可以发现,默认网站中多了一个齿轮状图标的HelloWorld节点。
如果当前还不是齿轮状,右键节点,打开属性页,在虚拟目录中的应用程序设置中创建应用程序名为HelloWorld的应用程序就可以了
111. MVC中的视图是用来干什么的?
答:MVC是三个单词的首字母缩写,它们是Model(模型)、View(视图)和Controller(控制)
从结构上看,可以分成三层,
1)最上面的一层,是直接面向最终用户的"视图层"(View)。它是提供给用户的操作界面,是程序的外壳。
2)最底下的一层,是核心的"数据层"(Model),也就是程序需要操作的数据或信息。
3)中间的一层,就是"控制层"(Controller),它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。
这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。
112. asp.net状态管理技术中可用于保存与传递数据的方法的是
答:所谓 “状态管理”,是指使用ASP.NET中的ViewState、Cookie、Session和Application等对象实现页面数据缓存和传递的技术。
113. asp.net mvc中的mvc是什么意思?
答:MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
Model(模型)表示应用程序核心(比如数据库记录列表)。
View(视图)显示数据(数据库记录)。
Controller(控制器)处理输入(写入数据库记录)。
114. Post和get的区别。
答:1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
115. 某aspx页面中有一用户控件UserCtrl1,以及一web服务器控件Button1,用户控件内有uiAdd()方法用来动态添加显示效果,此页面AutoEventWireup="true",在页面page_load事件内有调用uiAdd()方法的代码,Button1点击后将触发Button1_Click事件。假设现在浏览该页面后点击了Button1,请列出页面page_load,按钮Button1_Click,用户控件uiAdd()以及用户控件的page_load的触发先后顺序。
答:
1) aspx页面中的page_load
2)UserCtrl1中的page_load
3)用户控件uiAdd()
4)Button1点击后将触发Button1_Click事件
116. 请编程遍历页面上所有TextBox 控件并给它赋值为空。
答:foreach
(System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb =
(System.Windows.Forms.TextBox)control
;
tb.Text =
String.Empty ;
}
}
上边的方法只是针对于桌面软件类的,如果要针对于web开发中怎么实现呢?
首先.aspx文件一定会包含一个:<form id="form1" runat="server"> 只有在此标记中的代码享有和后台交换。
由此:
foreach(System.Web.UI.Control ctl in this.Form.Controls){
if
(ctl is System.Web.UI.WebControls.TextBox)
{
System.Web.UI.WebControls.TextBox tb = (System.Web.UI.WebControls.TextBox)ctl;
tb.Text = string.Empty;
}
}
117. 简述WebServices?
答:WebService 就是web服务了。是微软主推的一种跨平台的分布式应用程序。他使用SOAP协议通讯,用XML封装数据,所以是跨平台的。任何客户端只要按照WebService发布的格式发送数据就都可以得到结果。
118. 在Asp.net中所有的自定义用户控件都必须继承自哪个类_
答:Control:所有控件的基类。
119. 在.Net中,类System.Web.UI.Page 可以被继承么?
答:可以,每个页的cs文件中定义的类就是继承这个类的
120. 什么情况用HTML控件,什么情况用WEB控件,并比较两者差别
答:第一:
Html控件:
1. Html控件就是我们通常说的Html语言标记,这些语言标记在静态页面和其他网页里存在,不能在服务器端控制。比如:
2.如果Html想要在服务器端控制,就加上”Runat="Server"”这句话,就构成了Html服务器控件。Html服务器控件可也运行在服务器端,能够在后台对其进行设置修改。
Web控件:
Web控件如下:
1.Web控件是构成ASP.Net服务器控件的一部分,他不像Html需要加上”Runat="Server"”才可以运行在服务器端,它本身隐身包含这句话。Web服务器控件不必映射任何已有的Html元素,它代表更复杂的原色。
2.Web控件的特点:
(1)Web控件是对象,它与对象一样拥有方法和属性,并且相应事件。
(2)当Web控件包含在Web页中时,就可以设置其属性并调用其方法;
(3)最重要的功能就是实现页面与后台的交互服务
第二:
1.从最简单的来比较:写法
如:Html是以Input为前缀的,而Web控件是以Asp:为前缀的
2.事件处理不同:
Html的事件处理都是在客户端的页面上,同时Html不能相应服务器端事件,也可以通过注册此事件处理程序来响应,比如在Html中添加事件处理程序:将控件事件属性设置为JavaScript事件来处理程序函数Onclick+Javascript中的事件名称。另一种方法就是以编程方式添加他。
3.编译处理不同
1.Web控件:Web控件需要通过服务器处理后译为Html控件在发送给浏览器,所以比较耗费服务器资源,并由于有VIEWSTATE,所以在会送的时候会保持控件状态(也可以不保存),也因此增加了回送信息量。
2.Html控件:Html控件直接发送给浏览器,不灵耗费服务器资源
4.获得Hemlock控件的值需要使用REQUEST的Form方法,WEB控件就可以直接通过属性直接处理
121. 请解释ASP.NET中的数据绑定与传统数据绑定有什么区别?
答:ASP.NET的数据绑定:控件中数据的变化不会自动同步到数据源中,传统数据绑定可以自动同步。
122. 如果需要在GRIDVIEW控件中的某一列中添加下拉列表框并绑定数据怎么解决?
答:在GridView里面加入模版列。你把GridView拖入以后这个控件的右上角有一个小箭头,然后选择编辑列,然后在里面添加一个模版列(TemplateField),然后点确定,关闭编辑,然后在GridView控件上点鼠标右键选择编辑模版列,在那个ItemTemplate里面拖入下拉列表控件,然后再为这个下拉列表控件选择数据源就行了!或者你可以使用代码绑定,也可以!如果是使用代码绑定的话,是在GridView的RowDataBound的时间里面,然后用e.FindControl("下拉列表的控件ID") as DropDownList 找到下拉列表控件就行了
123. 如果出现ASP.NET中的事件不能触发可能由于什么原因造成?
答:如果在web窗体中使用了验证控件,那么当验证控件中的验证逻辑没有通过时一般会使事件不能触发执行。
如果使用了诸如Textchange、Checkchange、Selectedindexchanged这类事件并在
服务器端进行了事件处理,但是没有设置AutoPostBack属性时会使事件不能触发执行。
124. 请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
答:foreach (System.Windows.Forms.Control
control in this.Controls)
{
if (control is
System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb =
(System.Windows.Forms.TextBox)control
;
tb.Text =
String.Empty ;
}
}
上边的方法只是针对于桌面软件类的,如果要针对于web开发中怎么实现呢?
首先.aspx文件一定会包含一个:<form id="form1" runat="server"> 只有在此标记中的代码享有和后台交换。
由此:
foreach(System.Web.UI.Control ctl
in this.Form.Controls){
Response.Write(ctl.ToString()+"<br
/>");
if (ctl is System.Web.UI.WebControls.TextBox)
{
System.Web.UI.WebControls.TextBox tb =
(System.Web.UI.WebControls.TextBox)ctl;
tb.Text = string.Empty;
}
}
125. 请解释转发与跳转的区别?
答:HttpServerUtility.Transfer();
属于POST提交
跳转:HttpResponse.Redirect();
属于GET提交
126. 请解释什么是上下文对象,在什么情况下要使用上下文对象
答:上下文对象HttpContext。如果需要在网页类之外的其他类中访问ASP.NET系统对象时,需要使用上下文对象。
127. 请解释一个WEB页面中代码执行次序。
答:常用事件执行次序:Init(初始化) -> Load(加载) -> Event(控件事件) -> PreRender(呈现之前)
-> UnLoad(卸载)
128. 当发现不能读取页面上的输入的数据时很有可能是什么原因造成的?怎么解决
答:可能情况:
1)可能事件没有关联
2)根本就没有写读取代码
3)写错了事件
4)在Load事件中有清空代码,但没有写 if (!IsPostBack)
129. 什么是viewstate,能否禁用?是否所用控件都可以禁用?
答:Web页面是没有状态的,ViewState(视图状态)可用来保存Web页面在客户端和服务器端往返过程的状态
说简单点ViewState只不过是Hidden控件,加上微软写上的一些代码而已
可以禁用,由三种方法:
1)禁用单个控件:控件.EnableViewState = false。
2)禁用单个页面:在@Page指令中设置这个属性以达到页面级禁用ViewState的目的。
3)禁用整个程序:修改Web.config中相应元素的属性即可。
最后,禁用服务器全局的ViewState,修改.Net Framework安装目录下的machine.config即可。
130. 请解释ASP。NET中的web页面与其隐藏类之间的关系?
答:ASP.NET中的页面由两部分组成,页面显示(aspx文件)和代码逻辑(aspx.cs文件)通过Page指令联系在一起,如下:所以关系为:Web页面会继承隐藏类。
131. WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
答:可以,其调用过程大致如下:用户使用WEB控件或者html服务端控件,控件的调用方法事件被激发,于是服务器开始自动寻找所匹配的方法代码,当在客户端找到后解释执行客户端的方法代码,完毕后继续返回服务器执行剩余代码.
132. WEB控件可以激法服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。
答:在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件自动传回是当我们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端
只有通过自动传回才能实现服务端事件的机制,如果没有自动回传机制就只能调用客户端事件,而不能调用服务端事件
133. ASP.NET中共有几种类型的控件?各有什么区别?
答:WEB控件分为:内部控件, 列表控件, 复杂控件, 验证控件
内部控件–内部控件的使用方法与 HTML 控件相同,它们映射到 HTML 元素并通过使用 runat = “server” 属性在服务器上执行
列表控件–用于在 Web 页中创建数据列表
复杂控件– •当希望控件拥有复杂的功能或使用 HTML
元素无法创建的功能丰富的用户界面时,可以使用复杂控件
验证控件–输入控件的数据需要进行准确性和取值范围方面的检查
134. 请解释ASP.NET中以什么方式进行数据验证?
答:.net中提供了几个数据验证控件,可以在服务器端或者客户端进行验证。
135. 什么是WEB控件?使用WEB控件有那些优势?
答:WEB控件是能拖放在WEB页面上的控件
WEB控件分为:内部控件, 列表控件, 复杂控件, 验证控件
WEB控件优势:Web 控件是对象
–与对象一样,Web 控件拥有方法和属性,并且响应事件
–一旦将 Web 控件包括在 Web 页中,就可以设置其属性并调用其方法
–可以为 Web 控件编写服务器端代码以响应在客户端上发生的事件
136. 概述.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方便
137. 常用的调用Webservice方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜单选项
138. 什么是SOAP,有哪些应用。
答:SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML格式的消息。
SOAP也被称作XMLP,为两个程序交换信息提供了一种标准的工作机制。在各类机构之间通过电子方式相互协作的情况下完全有必要为此制定相应的标准。
SOAP描述了把消息捆绑为XML的工作方式。它还说明了发送消息的发送方、消息的内容和地址以及发送消息的时间。SOAP是Web Service的基本通信协议。SOAP规范还定义了怎样用XML来描述程序数据(Program Data),怎样执行RPC(Remote Procedure Call)。大多数SOAP解决方案都支持RPC-style应用程序。SOAP还支持 Document-style应用程序(SOAP消息只包含XML文本信息)。
最后SOAP规范还定义了HTTP消息是怎样传输SOAP消息的。MSMQ、SMTP、TCP/IP都可以做SOAP的传输协议。
SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。
139. 解释一下UDDI、WSDL的意义及其作用。
答:什么是UDDI?
UDDI 是一个独立于平台的框架,用于通过使用 Internet 来描述服务,发现企业,并对企业服务进行集成。具体是:
1、UDDI 指的是通用描述、发现与集成服务
2、UDDI 是一种用于存储有关 web services 的信息的目录。
3、UDDI 是一种由 WSDL 描述的 web services 界面的目录。
4、UDDI 经由 SOAP 进行通信
5、UDDI 被构建入了微软的 .NET 平台
UDDI 的作用及好处任何规模的行业或企业都能得益于 UDDI。在 UDDI 之前,还不存在一种 Internet 标准,可以供企业为它们的企业和伙伴提供有关其产品和服务的信息。也不存在一种方法,来集成到彼此的系统和进程中。UDDI 规范帮助我们解决的问题:
1、使得在成百万当前在线的企业中发现正确的企业成为可能
2、定义一旦首选的企业被发现后如何启动商业
3、扩展新客户并增加对目前客户的访问4、扩展销售并延伸市场范围
5、满足用户驱动的需要,为在全球 Internet 经济中快速合作的促进来清除障碍
什么是WSDL?
WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。
WSDL的作用
Web services 可把您的应用程序转换为 web 应用程序。通过使用 XML,可以在应用程序间传送消息。最大的意义就是不管你使用什么的语言编写的WEB应用,只要有WSDL,便可以自由的调用!
140. Session有什么重大BUG,微软提出了什么方法加以解决??
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。
141. 请解释ASP.NET中的Web页面与其隐藏类之间的关系?
答:就是asp的升级版,asp之前是C#代码与html在一起写的,美工人员不容易维护,因为他看不懂C#代码,所以才有了asp.net这样的有了隐藏类,html与代码进行了分离,但这是紧耦合,一但没有了隐藏类,就会报错,MVC就解决了这一现象,视图、控制器分离
142. WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。
答:每个ASP.net页有一个对应的.aspx页和一个对应的aspx.cs可编译逻辑,每个asp.net 控件有相应的事件处理,他们是由属性中的DataBinding绑定相应的事件处理。在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件自动传回是当我们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端
只有通过自动传回才能实现服务端事件的机制,如果没有自动回传机制就只能调用客户端事件,而不能调用服务端事件
143. 什么是ASP.net中的用户控件
答:用户控件就是扩展名为.ascx的特殊页面,它不能象.aspx页面一样直接访问,用户控件用以在同一应用程序中实现功能和外观的重用。
144. ASP.NET与ASP相比,主要有哪些进步?
答:区别:
ASP是解释性编程框架,而ASP.NET是编译性框架;
ASP.NET无论是从执行效率和安全上都远远超过ASP;
ASP.NET实现了代码分离,让代码管理更加直观。
145. 什么是Code-Behind技术。
答:代码后置, 即HTML代码与C#代码写在不同的文件中,使得代码更整洁和便于维护.
146. ASP.NET的身份验证方式有哪些?分别是什么原理?
答:Windows: 使用IIS验证方式 Forms: 使用基于窗体的验证方式 Passport: 采用Passport cookie验证模式 None: 不采用任何验证方式
147. XML 与 HTML 的主要区别
答:1. XML是区分大小写字母的,HTML不区分。
2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束 标记。在XML中,绝对不能省略掉结束标记。
3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用查找结束标记了。
4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。
148. 在.Net中,类System.Web.UI.Page 可以被继承么?
答:可以。
149. <%# %> 和 <% %> 有什么区别?
答:<%# %>表示绑定的数据源,<% %>是服务器端代码块
150. session喜欢丢值且占内存,Cookis不安全,请问用什么办法代替这两种原始的方法
答:使用用户配置Profile,或者自行编程存储在数据库中。
151. 动态创建的控件PostBack后是否可以保存下来,为什么?
答:不可以,因为页面的每一次生命周期页面对象都是重新实例化的。
152. .O/R Mapping 的原理
答:利用反射,配置将对象和数据库表映射。
153. 连接数据库的字符串应该写在哪儿?
答:写在配置文件中。
154. 什么叫做事务?使用的场合以及作用.
答:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。
简单举个例子就是你要同时修改数据库中两个不同表的时候,如果它们不是一个事务的话,当第一个表修改完,可是第二表改修出现了异常而没能修改的情况下,就只有第二个表回到未修改之前的状态,而第一个表已经被修改完毕。
而当你把它们设定为一个事务的时候,当第一个表修改完,可是第二表改修出现了异常而没能修改的情况下,第一个表和第二个表都要回到未修改的状态!这就是所谓的事务回滚。
155. 解释ADO.NET中的使用Connetion类的Close()和Dispose()的区别。
答:close掉的connection可以重新open,dispose的不行,因为connectionstring清空了,但此时sqlconnection对象还在。
如果程序中没有向连接池发出请求说要connection对象,sqlconnection对象便会销毁,这也是连接池存在的意义
156. DataReader和DataSet的异同
答:DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库.任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作
157. 从数据库读取记录,你可能用到的方法有哪些
答:通常有两种方式 SqlDataReader 和SqlDataAdapter|DataSet方式
158. ADO.NET相对于ADO等主要有什么改进?
答:1:ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,2:不使用com3:不在支持动态游标和服务器端游 4:,可以断开connection而保留当前数据集可用 5:强类型转换 6:xml支持
159. 概述O/R mapping (ORM)的原理
答:主要是利用反射等技术手段,自动生成SQL,将业务对象持久化到关系数据库中。
160. ADO.NET中常用的对象有哪些?分别描述一下。
答:DataSet对象:表示内存中数据的缓存,可以把它想像成一个临时的数据库,它里可以存多个表(DataTable),而且是断开式的,不用每进行一次操作就对数据库进行更新,从而提高了效率。
DataReader对象:它与DataSet最大的不同是有连接式的,每次对数据库进行存取都会影响到数据库。
Connection对象:用于连接数据库的对象,表示到数据源的一个唯一的连接。
Command对象:表示要对数据库执行的一个SQL语句或一个存储过程。
DataAdapter对象:该对象是与DataSet配合使用的对象,用于把表填充到DataSet,和更新DataSet等。
}
161. 对数据的并发采用什么办法进行处理较好。
答:可以控制连接池的连接数量,条件好的话可以用负载平衡
187. 对三层架构的理解。
答: 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了”高内聚,低耦合”的思想。
1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
188. 堆和栈的区别
答:堆和栈的区别:
一、堆栈空间分配区别:
1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
二、堆栈缓存方式区别:
1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
三、堆栈数据结构区别:
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。
189. 解释正则表达式<as+hrefs*=s*””?([^””>]+)””?>(.+)</a>各部分代表的含义。
答:取href的链接的
href是正常的href字符
s表示一个空格,*表示1个或者多个匹配,当前的意思是一个或者多个空格
=是正常的字符
?<1>在这里应该是命名捕获组,我不知道你这个正则是哪个流派的,但应该不是js和c#的,呵
\S+,\前面一个表示转义,这个的意思是后面带一个S,而S可以是多个,同样,"也是转义,因为"和都是正则的元字符
[^"],在方括号中的^,如果我没记错的话,应该是不包含的意思吧,就是不不含"
190. 请解释一下.NET多层应用程序中层与层之间以那几种方式进行数据传递。并解释你自己的项目中采用那种方式进行。
答:三层架构一般指的是界面层,业务层,数据层。
界面层就是系统的操作界面,和用户直接交互的地方。
业务层又称为逻辑层,英文名称是Business Logic Layer,简称BLL,是执行业务逻辑的地方,也就是业务规则都在这一层体现。
数据层也称为数据访问层,英文名称是Database Access Layer,简称DAL,这里是直接和数据库进行交互的地方,也是整个系统里唯一允许访问数据库的地方。
除此之外,还有一个业务实体层,这个层比较特殊,就是定义实体类的地方,有些人把这个层归属业务层,有些人把这个独立出来,变成一个公共层。
各个层次之间的访问关系:
界面层只能单向访问业务逻辑层,业务逻辑层只能单向访问数据层,这三层都可以访问公共模块(公共层)。这样做有很多好处,比如界面层就不知道数据层的存在,我们在界面层或者数据层做的更改都不会对双方造成大的影响。这一点很重要,因为这样我们开发的数据层就可以同时被多个系统使用,比如同时被BS和CS的系统使用;另外,我们也可以同时支持多个数据库,比如我们可以让系统同时支持oracle,access,sql server,而界面层不用更改。
当然,这种单向调用就牵涉到我们上面所说的业务实体层的归属问题,如果我们把它放到业务罗基层,就会破坏这种关系,所以最好把它独立出去,做成公共层。
191. 请谈谈对正则表达式的看法?
答:正则表达式是一种字符规则。它是用来匹配字符串的。
打个比方,某警官学院要招生,要求:身高170以上,体重:70以上,性别:男性。。。。
这些条件就是一种规则,通过这个规则,该警官学院就可以招到符合要求的一批学生。
正则表达式与上面这种规则一样,只不过它不是用来找人的,而是在程序里面用来找字符串的。
在编程的时候,我们要从一个字符串里找出特定的部分,就可以用这种规则来匹配。
192. UDP连接和TCP连接的异同。
答:都可以实现远程通信,主要区别在于TCP需要保持连接而UDP不需要,因此UDP具有更高的效率和更少的资源占用,而TCP传输数据更加可靠.
193. 什么叫做SQL注入,如何防止?请举例说明。
答:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
防止:
1、对输入内容进行过滤,去掉有可能的威胁
2、对于用来执行查询的数据库帐户,限制其权限。
3、在查询语句中使用参数。
4、用存储过程来执行所有的查询。
5、将用户登录名称、密码等数据加密保存。
194. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
答:public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if(i == 1 || i == 2)
return 1;
return Foo(i -1) + Foo(i - 2);
}
}
195. 请简述一下用Socket进行同步通讯编程的详细步骤
答:1.创建socket
2.确定本地计算机端点(ip和端口号)
3.socket绑定端点
4.socket.receive(); 接收数据
5.socket.send();发送数据
6.socket.close();关闭socket
196. float f=-123.567F;int i=(int)f;i的值现在是?
答:-123。
197. 产生一个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];
198. 编程实现冒泡排序。
答:
int [] array = new int [*] ;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
for (int j = i + 1 ; j < array.Length ; j++)
{
if (array[j] < array[i])
{
temp = array[i] ;
array[i] = array[j] ;
array[j] = temp ;
}
}