1、什么是装箱和拆箱?
2、什么是局部变量,什么是成员变量?
3、概述序列化 序列化是将对象的状态存储到特定存储介质中的过程。
4、C#中所有对象共同的基类是什么? System.object
5、const和readonly有什么区别? 答:const关键字用来声明编译时常量,readonly用来声明运行时常量。
6、在方法定义中,virtual有什么含意? 被virtual修饰的方法可以被子类覆写
7、可以覆写私有的虚方法么? 不可以,甚至子类中无法访问父类中的私有方法。
8、请详述在.net中类(class)与结构(struct)的异同
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
9、base关键字的作用是什么?
答:子类继承父类的过程中,可能需要在子类中调用父类中的成员,如属性、方法或者构造方法。这个时候,可以使用base关键字来完成。base的作用是用于引用父类的成员,如属性、方法或者是构造方法。
10、面向对象的特征有哪些方面?
11、在C#中,string str=null string str= string.Empty与string str=“”
12、 用sealed修饰的类有什么特点
答: sealed(密封的)修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。密封类不能同时为抽象类。 sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。
13、什么是虚方法?什么是抽像方法?
答:虚方法:要有方法体,哪怕是一个分号,可由子类继承并重写的方法。 抽像方法:不允许有方法体,规定其非抽象子类必须实现的方法,必须被重写。
14、谈谈你对MVC模式的理解?
15、DataReader和DataSet的异同
答:DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库
任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的
因为DataReader的特殊性和高性能.所以DataReader是只进的。
DataSet则是将数据一次性加载在内存中. 读取完毕即放弃数据库连接 因为DataSet将数据全部加载在内存中.所以比较消耗内存
但是确比DataReader要灵活,可以动态的添加行,列,数据.对数据库进行回传更新操作
16、Internal修饰符有什么含义?
答:internal(内部的)数据访问修饰符,表示对所修饰的成员在当前程序集内可以进行没有任何限制的访问;但在当前程序集外部则不能进行访,其可访问性级别低于public,高于protected
17、NET BCL中有哪些泛型类型?举例说明平时编程中您定义的泛型类型。
List<T>:通过索引访问强类型的列表
Dictionary<T>:表示键值对的集合
Queue<T>:队列 Stack<T>: 栈
购物车用Dictionary模拟,OA中获取员工列表等数据的时候,返回值是泛型的
18、委托是什么?匿名方法是什么?在C# 3.0中,Lambda表达式是什么?扩展方法是什么?LINQ是什么?您觉得C# 3.0中还有哪些重要的特性,它们带来了什么优势?BCL中哪些类库和这些特性有关?您平时最常用哪些?
委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的指针。
匿名方法:就是没有实际方法声明的委托实例。或者说,它们的定义是直接内嵌在代码中的。
Lambda表达式:是比匿名方法更加简洁的一种匿名函数语法
委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove自己,不能赋值。事件只能+=、-=,不能= 。事件内部就是一个private的委托和add、remove两个方法。
19、在自定义类型时,您如何选择是类还是结构?
1). 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
2). 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3). 在表现抽象和多级别的对象层次时,类是最好的选择
4). 大多数情况下该类型只是一些数据时,结构时最佳的选择
20、描述线程与进程的区别?
进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。进程可以定义程序的一个实例,但它只是占据应用程序所使用的地址空间。为了让进程完成一定的工作,进程必须至少占有一个线程,这个线程即为主线程,默认程序的工作都在这个主线程中完成,可以通过程序创建多个线程,使多个线程可以同时运行(多CPU支持下),这就是多线程技术。
线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。同一进程中的不同线程共享代码和数据空间。
21、什么是Windows服务,它的生命周期与标准的EXE程序有什么不同?
Windows服务是运行在windows后台指定用户下(默认System)的应用程序,它没有标准的UI界面,相比标准的EXE程序,Windows服务是在服务开始的时候创建,而在服务结束的时候销毁,而且可以设置服务是否与操作系统一起启动,一起关闭。它支持三种方式:1)自动方式2)手动方式3)禁用。自动方式下,Windows服务控制器将指导OS启动后自动启动服务并运行,而手动方式则必须手工启动服务,禁用的情况下服务将不能被启动。另外标准的EXE默认使用的当前登录的用户,而Windows服务则默认使用System用户,这在对系统资源访问的时候特别需要注意。
22、Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响?
这个需要针对硬件平台,公式为单个进程能访问的最大内存量=2的处理器位数次方/2,比如通常情况下,32位处理器下,单个进程所能访问的最大内存量为:232/2 = 2G。单个进程能访问的最大内存量是最大虚拟内存的1/2,因为要分配给操作系统一半虚拟内存。
23、EXE和DLL之间的区间是什么?
EXE文件有一个入口点,比如说Main()函数,这样CLR可以由此处执行这个EXE文件,而DLL不包含这样一个入口点所以不是可执行的。DLL文件主要包含一些程序集供其它函数调用。
24、 什么是强类型,什么是弱类型?哪种更好些?为什么?
强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语言,如C#、Java与C++等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如Javascript,VB等。
25、PID是什么?在做系统的故障排除时如何使用它?
PID是进程编号,在系统发现故障的时候,可以根据它寻找故障所发生的具体进程。可通过Visual Studio将故障进程附加到进程中进行调试。
26、 单个TCP/IP端口上能够被多少个进程侦听?
1个
27、 什么是GAC?它解决了什么问题?
GAC是Global Assembly Cache,全局程序集缓存的简称。它解决了几个程序共享某一个程序集的问题。不必再将那个被共享的程序集拷贝到应用程序目录了,.NET应用程序在加载的时候,会首先查看全局应用程序集缓存,如果有就可以直接使用,没有再到应用程序目录进行查找。
GAC还有一个很重要的作用,所有被放入GAC的程序集都是强名程序集,这样可以保证相同文件名不同版本的程序集被正确的引用,这样解决了COM时代的DLL地狱问题。同时强名还可以防止程序集伪造。
中级.NET开发人员
1. 阐述面向接口、面向对象、面向方面编程的区别
面向接口更关注的是概念,它的原则是先定义好行为规范,再根据行为规范创建实现,严格的来说,面向接口应该是面向对象中的一部分,因为面向对象也强调的是本末倒置原则,也就是实现依赖于抽象,而抽象不依赖于具体实现。面向对象是对复杂问题的分解。面向方面的编程是一种新概念,它解决了很多面向对象无法解决的问题,比如面向对象技术只能对业务相关的代码模块化,而无法对和业务无关的代码模块化。而面向方面正是解决这一问题的方案,它的关键思想是“将应用程序中的商业逻辑与对其提供支持的通用服务进行分离”。
2. 什么是Interface?它与Abstract Class有什么区别?
接口(Interface)是用来定义行为规范的,不会有具体实现,而抽象类除定义行为规范外,可以有部分实现,但一个类能实现多个接口,但只能继承一个父类。Interface可以理解为是一种契约。
3. 什么是反射?
程序集包含模块,而模块又包括类型,类型下有成员(这些信息存于元数据中),反射就是在运行时管理程序集,模块,类型的对象,它能够动态的创建类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行时创建和使用类型实例。反射功能的类主要在Sytem.Type命名空间下,使用这些类可以在运行时创建类型实例,然后调用其中方法或访问其成员对象。
4. 使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?
Web服务使用的SOAP协议,而Remoting采用的RPC。Web Service能用于不同平台,不同语言,Remoting只适用于.NET应用程序之间的通信。效率上.NET Remoting高于Web Service。一般情况下Web Service主要应用于互联网,.NET Remoting主要应用于局域网。
5. 类型系统是由XMLSchema表示的吗?CLS是XMLSchema表示的吗?
XmlSchema是一个特定的XML文档必须满足的一套标准。这些标准能够描述不同的数据类型。如xs:decimal是一种XmlSchema数据类型,其他类型有像xs:Boolean,xs:Date,xs:int等等。CLS是公共语言规范(Common Language Specification),它是任何.NET下语言(C#,VB.NET等)使用的一套数据类型。如System.Double是一种CLS数据类型。其他的包括System.Int32,System.Boolean等。
CLS与XMLSchema表述的相同的意思,但其内在不同。
6. 从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?
这个就像是强弱类型的比较相似,前期绑定是在编译的时候就确定了要绑定的数据,而后期绑定是在运行的时候才填充数据。所以前期绑定如果失败,会在编译时报编译错误,而后期绑定失败只有在运行时的时候才发生。
7. 调用Assembly.Load算静态引用还是动态引用?
这种反射操作基本都是动态,即运行时引用。
8. 何时使用Assembly.LoadFrom?何时使用Assembly.LoadFile?
相比LoadFile,用LoadFrom加载程序集时,要求同时将此程序集所依赖的程序集加载进来。而LoadFile加载程序集文件时,只将传入参数的文件加载,不考虑程序集依赖,但如果有相同实现,但位置不同的文件用LoadFrom是不能同时加载进来的,而LoadFile却可以。由于LoadFile加载的是文件,所以调用它之后,可能因为缺少必要的依赖造成无法被执行。
9. 什么叫Assembly Qualified Name?它是一个文件名吗?它有什么不同?
它不是一个文件名,相比文件名,Assembly Qualified Name(程序集限定名称),更能确定一个程序集,它包含文件名,但同时包含版本,公钥,和区域。因为同样一个名称的文件可能有不同的版本和区域,此时单独靠文件名称,可能会造成不能确定程序集的正确性。
10. Assembly.Load("foo.dll");这句话是否正确?
错误,正确的应该是Assembly.Load("foo")或者Assembly.LoadFrom("foo.dll")
11. 做强签名的assembly与不做强签名的assembly有什么不同?
强签名程序集可以安装到GAC中,而不做强签名的确不能。强名程序集可以根据强名来区分相同文件名不同版本的程序集。
12. DateTime是否可以为null?
不能,因为DateTime为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null
13. 什么叫JIT?什么是NGEN?它们分别有什么限制和好处?
Just In Time及时编译,它是在程序第一次运行的时候才进行编译,而NGEN是所谓的pre-jit,就是说在运行前事先就将程序集生成为本机镜像,并保存到全局缓存中,运用NGEN可以提高程序集的加载和执行速度,因为它可以从本机映像中还原代码和数据结构,而不必像JIT那样动态生成它们。但是NGEN不能得到JIT编译时优化(如根据处理器)的好处,这是其有缺陷的一方面。
14. .NET CLR中一代的垃圾收集器是如何管理对象的生命周期的?什么叫非确定性终结?
垃圾收集执行的时机不定的,这个过程对于程序员是透明的,垃圾收集器自动控制着它。垃圾收集器的执行原理:周期性地遍历被应用当前引用的所有对象的列表。在这个搜索过程中,凡是没有发现的被引用的对象,都将准备予以销毁(标记为0代)。说明了对象在什么时候终结是不确定的,我认为这就是非确定性终结。通常来说,堆的耗尽是收集清扫的触发条件。
15. Finalize()和Dispose()之间的区别?
Finalize()相当于析构函数,我们不能手动调用这个函数(但可以通过GC.SupperFinalize方法阻止CLR调用Finalize),CLR自动判断什么时候调用这个函数。Dispose()同样用于释放托管资源,但是我们可以在任意时刻自行调用Dispose()方法。总结就是Finalize自动释放资源,Dispose()用于手动释放资源。
16. using() 语法有用吗?什么是IDisposable?它是如何实现确定性终结的。
有用。using编译后的MSIL会调用该对象的Dispose方法,释放资源。实现了IDisposable的类相当与一个契约,即说明这个类要实现Dispose()方法告诉CLR怎么释放它自身。因为Dispose()方法释放的非托管资源,所以可以手工调用它来确定性终结一个非托管资源。(托管资源都是非确定性终结,由CLR管理,没法改变)
17. tasklist /m "mscor*" 这句命令是干嘛的?
列出所有使用了以" mscor"作为开头的dll或者exe的映像名称,PID和模块信息。
18. in-proc和out-of-proc的区别
in-proc是进程内,进程内能共享代码和数据块,out-of-proc是进程外,进程外的互操作需要用进程间通讯来实现。
19. .NET里的哪一项技术能够实现out-of-proc通讯?
.Net Remoting技术或者WCF技术
20. 当你在ASP.NET中运行一个组件时,它在Windows XP, Windows 2000, Windows 2003上 分别跑在哪个进程里面?
XP: aspnet_Wp.exe、Windows 2000: aspnet_Wp.exe、Windows 2003: w3wp.exe。XP与2000是IIS5.1,2003是IIS6.0所以有了上述差别。
相关推荐
C# 推荐学习网站汇总 一 C# 是一个功能强大且广泛应用的编程语言,它是微软公司开发的基于公共语言运行库(Common Language Runtime,CLR)的面向对象的编程语言。本资源汇总了多个优秀的 C# 学习网站,为开发者...
C#是一种广泛应用于软件开发的面向对象的编程语言,由微软公司开发并纳入.NET框架中。随着技术的不断发展,C#已经成为许多开发者首选的语言,尤其在构建桌面应用、Web应用、移动应用以及游戏开发等领域。本文将围绕...
### C# 开源项目知识点汇总 #### 一、AOP框架 **AOP**(Aspect Oriented Programming,面向切面编程)是一种编程范式,它旨在通过将横切关注点(如日志记录、安全控制等)从业务逻辑中分离出来,从而提高代码的可...
C#加密算法汇总 C#加密算法 C#加密算法 C#加密算法
标题 "C#开源资源大汇总,磨练你的c#技巧" 暗示了这个压缩包文件包含了丰富的C#编程相关的开源资源,旨在帮助开发者提升C#技能。这些资源可能包括开源库、框架、工具、代码示例、教程以及社区讨论等。C#是一种广泛...
在C#编程中,数据分组是一个常见的任务,特别是在处理大量数据时,为了分析和理解数据,我们需要将数据按照特定的规则进行分类和汇总。本实例将深入探讨如何使用C#来实现数据分组统计。 首先,让我们了解C#中的数据...
"Excel表格读取汇总C#"这个项目就是针对这样的需求,它允许开发者将多个Excel工作表的数据整合到一个单一的工作表中。下面我们将深入探讨相关的知识点。 1. **C#与.NET Framework/NET Core**: C#是微软开发的一种...
【C#入门学习资料总汇】是一份针对初学者精心准备的资源集合,包含了大量关于C#编程语言的学习材料。这份资源包旨在帮助新手快速掌握C#的基础知识,并逐步提升编程技能。其中,包含了多种类型的文件,如文档、电子书...
c#正则表达式汇总,所有情况都有的哦。
根据给定的文件信息,以下是对“C#程序单词注释汇总”的详细解析与扩展。 ### C#程序单词注释汇总 #### 概述 在C#编程中,注释是一种非常重要的工具,它帮助开发者更好地理解代码逻辑、功能实现等。本篇将围绕C#...
C#(读作"C sharp")是一种面向对象的编程语言,由微软公司为.NET框架开发。它的设计目标是提供一种简洁、类型安全、高效且现代的编程语言,用于构建Windows桌面应用程序、Web应用程序以及移动平台的应用。 1. 变量...
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用、Web应用和游戏...文档"C#开源资源全汇总.docx"可能会提供更详细的资源列表和介绍,对于想要深入了解C#开源世界的开发者来说,是一份宝贵的资料。
标题“C# DataGridView合计行”所涉及的知识点主要是如何在DataGridView中实现这样的功能,让程序自动计算并显示数据的汇总信息。 首先,我们需要了解DataGridView的基础用法。这个控件可以从数据库、数组或其他...
在准备C#相关的面试时,了解并掌握一系列关键知识点至关重要。这份"面试题汇总"涵盖了C#编程语言、ASP.NET框架以及SQL Server数据库管理系统的常见面试问题,旨在帮助求职者全面复习并提升自己的技术水平。 首先,...
本篇文章将汇总并详细解析C#中的MD5加密方法,以及如何在Winform应用程序中使用。 MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的数据转化为固定长度的摘要信息。在C#中,MD5加密...
本知识点汇总将详细讲解C# 4.0的语法特点和常见用法,旨在帮助初学者快速掌握这一强大语言。 1. **基本语法**:C#的基础语法结构包括变量声明、数据类型(如int、string、bool等)、运算符(如算术、比较、逻辑等)...
C#作为一种广泛使用的编程语言,提供了丰富的库来支持各种加密算法,包括但不限于SHA1、MD5和DES等。这些算法在数据保护、用户认证和网络安全方面应用广泛。 #### SHA1加密 SHA1(Secure Hash Algorithm 1)是一种...
3. 程序基本单位:C#程序的基本单位是源程序文件(source file),其中包含一个或多个类定义。 4. 标识符规则:C#中,合法的用户标识符可以包含字母、数字和下划线,且不能以数字开头,void、for、case等是C#的...
在VS2008中,我们通常会利用Microsoft Office Interop库来操作Excel,这是一个允许C#代码与Office应用程序进行交互的接口。要使用此库,需要确保你的开发环境中已经安装了Microsoft Office,并且在项目引用中添加对...
C#作为.NET框架的主要编程语言之一,提供了多种方式来实现这一功能。本文将基于给定的文件信息,深入探讨C#中将数据导出到Excel的几种方法,包括在ASP.NET环境中导出Excel的具体步骤。 #### ASP.NET中导出Excel的...