C#技术之路

描述线程与进程的区别?

线程属于进程,进程可以拥有多个线程而且至少拥有一个线程;进程可以拥有资源,线程没有;

体现在通信机制上面,正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便。但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进程快,效率高,但是正由于进程之间独立的特点,使得进程安全性比较高,也因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。一个线程死掉就等于整个进程死掉。

什么是Windows服务,它的生命周期与标准的EXE程序有什么不同?

Windows 服务由三部分组成:1.一个服务可执行文件;2.一个服务控制程序(SCP);3.服务控制管理器(SCM),负责在HKLM/SYSTEM/CurrentControlSet/Services 下创建服务键值。用户可通过 SCP 控制服务的启动、停止、暂停等,SCP 会通过 SCM 调用服务程序

EXE程序通常都有用户操作界面,Console或GUI,通常由用户来启动或停止。

阐述面向接口、面向对象、面向方面编程的区别

面向接口编程:通过接口规约对象的属性和方法,是面向对象一部分。

面向对象编程:通过封装、继承、多态等更加有效的组织程序。

面向方面编程:把业务的主逻辑和次逻辑分开的一种思想。

什么是Interface?它与Class有什么区别?

接口可以理解是一种特殊的类,从接口的方法和参数2个方面来体现他的特殊性:

接口的方法不包含方法体,只定义;接口的参数默认为static;

接口只能被类继承,被继承的时候所有方法都必须被重写(实现)。

什么是反射?

反射是:指程序可以访问、检测和修改它本身状态或行为的一种能力

反射是一种能力,所以给的定义就是说明了它能干嘛。

我们平时用反射主要做:

  • 获取类型的相关信息
  • 动态调用方法
  • 动态构造对象
  • 从程序集中获得类型

使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?

webservice是用的应用层协议http封装的,可以穿过防火墙,所以它可以被很多其它语言调用,很多语言也都实现了webservice代理端封装以及工具。
.net remoting是用传输层协议tcp封装的,所以可以以二进制传输数据,效率高;.net remoting基于.net的反射机制,只方便.net使用。
原理:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

类型系统是由XMLSchema表示的吗?CLS是XMLSchema表示的吗?

CLS是公共语言规范(Common Language Specification),它是任何.net 语言(C#,VB.net等)使用的一套数据类型。

XmlSchema是一个特定的XML文档必须满足的一套标准;

这个问题比较模糊,不好解答,CLS的类型系统应该不是XMLSchema表示的,因为编程的时候还支持自定义类型。至于自定义类型的具体原理我也说不清楚了。

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; 

从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?

这个就像是强弱类型的比较相似,前期绑定是在编译的时候就确定了要绑定的数据,而后期绑定是在运行的时候才填充数据。所以前期绑定如果失败,会在编译时报编译错误,而后期绑定失败只有在运行时的时候才发生

调用Assembly.Load算静态引用还是动态引用?

 Assembly.Load 是动态引用的。用Assembly.Load 来加载托管程序集并使用反射功能时,一般需要先通过Assembly.Load(), Assembly.LoadFrom() 等方法将目标托管程序集加载到当前应用程序域中,然后生成对应实例,最后再进行调用实例的属性或者方法。

何时使用Assembly.LoadFrom?何时使用Assembly.LoadFile?

相比LoadFile,LoadFrom则显得不地道,因为它娶媳妇的时候,是让人家穿上嫁妆,坐上马车,还得带着人家的妹妹来,:)用它加载的是程序集,这就要求同时将此程序集所依赖的程序集加载进来。而LoadFile就地道的多,它是加载程序集文件的内容,只将传入参数的文件加载,不考虑程序集依赖,但如果有相同实现,但位置不同的文件用LoadFrom是不能同时加载进来的,而LoadFile却可以。由于LoadFile加载的是文件,所以调用它之后,可能因为缺少必要的依赖造成无法被执行。

什么叫Assembly Qualified Name?它是一个文件名吗?它有什么不同?

它不是一个文件名,相比文件名,Assembly Qualified Name(程序集限定名称),更能确定一个程序集,它包含文件名,但同时包含版本,公钥,和区域。因为同样一个名称的文件可能有不同的版本和区域,此时单独靠文件名称,可能会造成不能确定程序集的正确性。

Assembly.Load("foo.dll"); 这句话是否正确?

错误,正确的应该是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll");

做强签名的assembly与不做强签名的assembly有什么不同?

强签名的程序集可以做成com,而不做强签名的就不行,同样强签名程序集可以安装到GAC中,而不做强签名的却不能。

DateTime是否可以为null?

不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null

什么叫JIT?什么是NGEN?它们分别有什么限制和好处?

Just In Time 及时编译,它是在程序第一次运行的时候才进行编译,而NGEN是所谓的pre-jit,就是说在运行前事先就将生成程序集的本机镜像,并保存到全局缓存中,适用NGEN可以提高程序集的加载和执行速度,因为它可以从本机映像中还原数代码和数据结构,而不必像jit那样动态生成它们。感觉和缓存的道理大同小异。

.NET CLR中一代的垃圾收集器是如何管理对象的生命周期的?什么叫非确定性终结?

Finalize()和Dispose()之间的区别?

Finalize()用于隐式释放资源,Dispose()用于显示释放资源 (Finalize()的确相当于C++中的析构函数

using() 语法有用吗?什么是IDisposable?它是如何实现确定性终结的。

tasklist /m "mscor*" 这句命令是干嘛的?

in-proc和out-of-proc的区别

.NET里的哪一项技术能够实现out-of-proc通讯?

当你在ASP.NET中运行一个组件时,它在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值