c# .net 基本概念...
时间:2010-08-11 来源:fdh120
1. private、 protected、 public、 internal 修饰符的访问权限。 private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2. C#中的委托是什么?事件是不是一种委托? 委托可以把一个方法作为参数代入另一个方法。委托可以理解为指向一个函数的引用。事件是一种特殊的委托。 3. override与overload的区别? override 表示重写,overload 表示重载。 override是子类和父类之间的关系,是垂直关系;overload是同一个类中方法之间的关系,是水平关系。 override只能由一个方法,或只能由一对方法产生关系;overload是多个方法之间的关系。 override要求参数列表相同;overload要求参数列表不同。 override关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;overload关系,是根据调用时的实参表与形参表来选择方法体的。 4. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引? this[type index] { get{…} set{…} } 不是只能根据数字进行索引,可以用任意类型。 5. 用.net做B/S结构的系统,大多数用几层结构来开发,每一层之间的关系以及为什么要这样分层? 一般为3层,数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。 表示层为了与用户交互例如用户添加表单。 优点:分工明确,条理清晰,易于调试,而且具有可扩展性。 缺点:增加成本。 6. 什么叫应用程序域? 应用程序域为隔离正在运行的应用程序提供了一种灵活而安全的方法。 应用程序域通常由运行库宿主创建和操作。 应用程序域使应用程序以及应用程序的数据彼此分离,有助于提高安全性。 下面的代码示例创建一个新的应用程序域,然后加载并执行以前生成的程序集 HelloWorld.exe。 static void Main() { // Create an Application Domain: System.AppDomain newDomain = System.AppDomain.CreateDomain("NewApplicationDomain"); // Load and execute an assembly: newDomain.ExecuteAssembly(@"c:\HelloWorld.exe"); // Unload the application domain: System.AppDomain.Unload(newDomain); } 7. CTS、CLS、CLR分别作何解释? CTS:公共类型系统。 CLS:通用语言规范。 CLR:公共语言运行库。 8. 什么是装箱和拆箱? 装箱:从值类型转换到引用类型。 拆箱:从引用类型转换到值类型。 9. 什么是受管制的代码?什么是非受管制的代码? 在CLR虚拟机中运行的代码是受管制的代码;不经过CLR运行的代码是非受管制的代码。 10. 什么是强类型系统? 运行时类型识别(RTTI)(Run-Time Type Information) 11. 什么是Code-Behind技术? 代码分离技术;aspx,resx和cs三个后缀的文件,就是所谓的代码分离,它可以使你的程序显得更加有条理、可读性更强。实现了HTML代码和服务器代码分离.方便代码编写和整理。 12. 常用的调用WebService的方法有哪些? 使用WSDL.exe命令行工具 使用VS.NET中的Add Web Reference菜单选项 13. 在C#中,String str = null 与 String str = “”的区别。 String str = null 不给分配内存空间,而String str = ""分配长度为空字符串的内存空间。 14. 请详述在.NET中类(class)与结构(struct)的异同? 结构是值类型:值类型在栈上分配空间; 类是引用类型:引用类型在堆栈上分配空间; 虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object; 虽然结构的初始化也使用了new 操作符,可是结构对象依然分配在栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用。 结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed; 类:完全可扩展的,除非显示的声明sealed,否则类可以继承其他类和接口,自也能被继承虽然结构不能被继承,可是结构能够 继承接口,方法和类继承接口一样; 结构: 没有默认的构造函数,但是可以添加构造函数 Structs cannot contain explicit parameterless constructors 没有析构函数 没有 abstract 和 sealed(因为不能继承) 不能有protected 修饰符 可以不使用new 初始化 在结构中初始化实例字段是错误的 public struct myStruct { public Int32 i = 0; //error } 类: 有默认的构造函数 有析构函数 可以使用 abstract 和 sealed 有protected 修饰符 必须使用new 初始化 15. 简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。 WebService的特点是: 平台独立性(Platform-independent)、跨语言(只要能支持XML的语言都可以)以及穿透企业防火墙;webservice是基于http的是无状态的; 缺点:需要部署一台Web Server;而且速度比较慢; net Remoting的特点是: 优点是用户既可以使用TCP信道进行二进制流方式通信,也可以使用HTTP信道进行SOAP格式的通信,效率相对WebService要高不少;remoting可以用于有状态的情况; 缺点:.net remoting只能应用于MS的.net framework之下。 使用场合: 如果互动双方都是支持.NET技术的环境,并且在操作系统上能提供一致的验证机制,而且很重视沟通双方作业的效率,就是.NET Remoting上场的时机。相反的,如果沟通双方是异质环境,又或沟通的模式就是无状态的情况,持续进行的互动作业前后是没有关联的,Web Service就是理想选择了。 16. 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。 解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 A where rownum A 只需直接赋值(A = B)。 隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。 不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端。 63. params 有什么用? params 关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,它在参数列表只能出现一次并且不能在其后再有参数定义。 64. 什么是反射? 反射,Reflection,通过它我们可以在运行时获得各种信息,如程序集、模块、类型、字段、属性、方法和事件。通过对类型动态实例化后,还可以对其执行操作。 65. abstract class和interface有什么区别? 声明方法的存在而不去实现它的类被叫做抽像类(abstract class) 它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。 不能创建abstract 类的实例。 然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。 不能有抽像构造函数或抽像静态方法。 Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类。 取而代之,在子类中实现该方法。 知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽像类的变体。 在接口中,所有方法都是抽像的。 多继承性可通过实现这样的接口而获得。 接口中的所有方法都是抽像的,没有一个有程序体。 接口只可以定义static final成员变量。 接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。 当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。 然后,它可以在实现了该接口的类的任何对像上调用接口的方法。 由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。 引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 接口可以继承接口。 抽像类可以实现(implements)接口 抽像类是否可继承实体类(concrete class),但前提是实体类必须有明确的构造函数。 66. .net Remoting 的工作原理是什么? 服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Microsoft .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信(RPC)机 制,则在一个进程中执行的代码就不能访问另一进程。这是一种操作系统对应用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与另外的应用程序域进行通信,即穿越边界。 67. ASP.net的身份验证方式有哪些? 1)Windows 身份验证提供程序 提供有关如何将 Windows 身份验证与 Microsoft Internet 信息服务 (IIS) 身份验证结合使用来确保 ASP.NET 应用程序安全的信息。 2)Forms 身份验证提供程序 提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件。它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。 3)Passport 身份验证提供程序 提供有关由 Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置。 68. 活动目录的作用 Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松地查找和使用这些信息。 Active Directory使用了一种结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。 69. 如何理解.net中的垃圾回收机制? .NET Framework 的垃圾回收器管理应用程序的内存分配和释放。 每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。 只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。 但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。 垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。 当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。 70. final, finally, finalize的区别。 final:修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。 因此 一个类不能既被声明为 abstract的,又被声明为final的。 将变量或方法声明为final,可以保证它们在使用中不被改变。 被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。 被声明为 final的方法也同样只能使用,不能重载 finally:在异常处理时提供 finally 块来执行任何清除操作。 如果抛出一个异常,那么相匹配的 catch 子句就会执行. 然后控制就会进入 finally 块(如果有的话)。 finalize:方法名。 这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。 它是在 Object 类中定义的 ,因此所有的类都继承了它。 子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。 finalize() 方法是在垃圾收集器删除对像之前对这个对象调用的。 71. UDP连接和TCP连接的异同 TCP 传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接, 之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 UDP 用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去, 但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输 速度很快。 72. String str=new String("a")和String str = "a"有什么区别? String str = "a"; 这个只是一个引用,内存中如果有“a"的话,str就指向它;如果没有,才创建它; 如果你以后还用到"a"这个字符串的话并且是这样用: String str1 = "a"; String str2 = "a"; String str2 = "a"; 这4个变量都共享一个字符串"a"。 而String str = new String("a");是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str。 73. 请问进程调度中产生死锁的必要条件是什么?解决死锁有几种办法 产生死锁的四个必要条件: (1)互斥条件:一个资源每次只能被一个进程使用。 (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。 死锁排除的方法: (1)撤消陷于死锁的全部进程; (2)逐个撤消陷于死锁的进程,直到死锁不存在; (3)从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。 (4)从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态。 74. 解释一下UDDI、WSDL的意义及其作用 UDDI是统一描述集成协议,是一套基于Web的,分布式的,为WEB服务提供的信息注册的实现标准规范,同时为也是为企业本身提供的Web服务注册以让别的企业能够发现并访问的协议标准。提供了基于标准的规范,用于描述和发现服务,还提供了一组基于因特网的实现。 WSDL这是一个基于XML的描述WEB服务的接口。 75. DOM优点和缺点 Document Object Model,文档对象模型。 DOM的优势主要表现在:易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。 DOM的缺点主要表现在:效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外效率低还表现在大量的消耗时间,因为使用DOM进行解析时,将为文档的每个element、attribute、processing-instrUCtion和comment都创建一个对象,这样在DOM机制中所运用的大量对象的创建和销毁无疑会影响其效率。
相关阅读 更多 +