继《.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)》跟《.Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)》之后,今天回答Scott Hanselman在他清单上列出的“中级.Net程序员应该知道的问题”。

1. 面向接口,面向对象,面向方向的编程的不同 (Describe the difference between Interface-oriented, Object-oriented and Aspect-oriented programming.)

Interface-oriented (面向接口): 其实项目中非常频繁的使用Interface,但从来不知道这就叫 Interface-oriented programming. 使用Interface的好处就是降低代码的耦合程度,比方说,一个Url需要用户登陆才能访问,如果 thisUrl : IAuthentication, 那么你在实现 thisUrl class的时候,就不需要操心Authentication的问题。使用Interface的另外一个好处是,单元测试thisUrl 类的时候,可以mock IAuthentication.

Object-oriented (面向对象): 自己从来没有严谨的定义过,但知道对象有状态,有方法,相似对象的抽象叫做类,对象是类的具体。面向对象的编程有封装,多台,继承等概念。

Aspect-oriented (面向方向): 一种避免重复性代码的编程方法,当代码中很多地方都重复用到同一个功能的时候 e.g. logging,可以使用aspect统一处理logging这部分的逻辑。The Ted Neward Challenge (AOP without the buzzwords) 这篇文章对我理解这个概念非常有帮助。

2. 接口跟类的区别 Describe what an Interface is and how it’s different from a Class.

接口(Interface): 不能实列化,自己没有状态,方法也没有具体的实现,被继承时,继承类需要实现接口的所有方法。接口就像租房时网上下载的一个租房合同模板。

类 (Class): 可以被实例化,有状态,被继承时,继承类也不需要重新实现被继承类中的方法。但是如果被继承类的方法中有abstract修饰的,继承类则需要实现这个方法。类像是已经被填上内容的租房合同的模板。

3. 什么是反射?What is Reflection?

代码在运行过程中动态获取程序集的信息,对象的信息,或者直接调用对象的方法或属性 e.g. var i = 100; i.GetType(); 输出System.Int32.

4. XML web service 跟 .Net Remoting 的不同 (What is the difference between XML Web Services using ASMX and .NET Remoting using SOAP?)

XML Web service: 是开放标准,使用Http/SOAP协议交互。

.Net Remoting: 是微软自己的技术,只能在.Net里面使用。

因为自己没有接触过ASMX, .Net Remoting, 所以只能了解个皮毛,在网上看到一个答案,比较的详细:

Remoting assumes the other end is .NET. This is because .NET remoting using SOAP uses the SoapFormatter to serialize data. SoapFormatter embeds the type information required to deserialize the object into the message itself. This requires that the client and the server must have access to this assembly. Remoting believes in the .NET Type System. Remoting believes in sharing types and assemblies. Remoting can support DCOM style Client Activated Objects which are stateful. The use of CAOs though have to be carefully thought about because CAOs cannot be load balanced. ASMX model does not assume that the other end is .NET. ASMX uses XmlSerializer to serialize data. Xmlserailizer believes that the XML Type System, that is the XSD is superior and works on serializing data conforming to a schema. In other words XML Web Services believe in sharing schema and contracts over types and assemblies. This makes the Web Services interoperable. ASMX services are usually stateless.

5. XmlSchema和CLS的类型体系是否异种同形? (Are the type system represented by XmlSchema and the CLS isomorphic?)

查了baidu才知道, isomorphic的意思, 异种同形. XmlSchema跟CLS的类型体系是不完全一样的, 比如说数字类型, XmlSchema 就有negativeInteger等.Net没有的类型.

6. 早期绑定跟晚期绑定的不同?(what is the difference between early-binding and late-binding?)

不知道是不是这么翻译的,early-binding: 是指编译的时候绑定,late-binding是指运行的时候绑定.e.g. person.DoSomething() early binding.
late binding:

1 Type animal = typeof(Animal);
2  object o = Activator.CreateInstance(animal);
3 var text = animal.InvokeMember("DoSomething", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, null);

7. Is using Assembly.Load a static reference or dynamic reference?

动态

8. 什么时候合适使用Assembly.LoadFrom 或 Assembly.LoadFile?(When would using Assembly.LoadFrom or Assembly.LoadFile be appropriate?)

自己不太明白,什么时候用比较合适,有哪位知道吗?

9. 一个程序集合格的名字是怎么样的?是文件名吗?如不是,区别是什么?(What is an Asssembly Qualified Name? Is it a filename? How is it different?)

一个程序集的名字有四个部分组成,文件名(file name),不包含后缀,Public key Token, Culture, Version. 跟文件名不同,

10. Assembly.Load("foo.dll") 对吗?(Is this valid? Assembly.Load("foo.dll");)

不对,Assembly.Load("foo, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3")

11. strongly-named 程序集跟非strongly-named 程序集有何不同?(How is a strongly-named assembly different from one that isn’t strongly-named?)

strongly-named 程序集可以保成程序集的独特性,并且可以防止使用被别人篡改过的程序集

12. Can DateTimes be null?

DateTime 不能为Null.

13. 解释JIT, NGEN,以及它们的优劣?(What is the JIT? What is NGEN? What are limitations and benefits of each?)

JIT: Just In Time 编译,优势: 任何JIT都可以编译; 劣势: 启动时间比较长.

NGEN: 直接编译成机器代码,优势: 启动时间比较长; 劣势: 只能运行在本系统.

不确定是否这样解释?请高手指正.

14. How does the generational garbage collector in the .NET CLR manage object lifetime? What is non-deterministic finalization?

CLR把对象分成三代, .Net GC通过一个对象被创建的时间来决定这个对象的寿命. 创建时间比较短的对象越早被收集, 创建时间比较长的对象越晚被收集.

non-deterministic finalization 是指你根本没有办法确定或控制一个对象被GC收集.

15. Finalize() 和 Dispose() 的区别 (What is the difference between Finalize() and Dispose()?)

GC在收集一个对象的时候, 调用Finalize(), 程序员没有办法调用. 但是程序员应该负责在使用未托管资源(unmanaged object or resources)时使用Dispose(), 确保该资源被GC及时收集.

16. How is the using() pattern useful? What is IDisposable? How does it support deterministic finalization?

using()可以确保Dispose()在using() block 结束的时候被调用. IDisposable 只有一个方法, Dispose(), 当一个类继承IDisposable时, 这个类的对象使用using()时, Dispose()被调用.

17. What does this useful command line do? tasklist /m "mscor*"

列出所有使用符合引号内pattern的dll的进程.

18. What is the difference between in-proc and out-of-proc?

In-proc 发生在一个进程之内, Out-of-proc 发生在不同进程之间。

19. What technology enables out-of-proc communication in .NET?

.Net remoting

20. When you’re running a component within ASP.NET, what process is it running within on Windows XP? Windows 2000? Windows 2003?

Windows XP and 2000 : aspnet_wp.exe

Windows 2003 : w3wp.exe

  回答这20道题目的时候,明显感觉到难度,花了大半天的时间,其中很多是在借助了google 之后阅读了很多的文章才知道一些。看来,成为一位合格的中级.Net程序员要补的课还真是不少呢。

  很好奇,不知道博客园里的.Net程序员们有多少对这些问题都能够了如指掌,对答如流的?

.Net程序员面试 中级篇 (回答Scott Hanselman的问题)的更多相关文章

  1. .Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)

    昨天回答了Scott Hanselman在他清单上关于C#那部分的题目,.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题),今天接着回答他在清单上列出的"每个写 ...

  2. .Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)

    过去几年都在忙着找项目,赶项目,没有时间好好整理深究自己在工作中学到的东西.现在好了,趁着找工作的这段空余时间,正好可以总结和再继续夯实自己的.Net, C#基本功.在05年的时候,Scott Han ...

  3. 《PHP程序员面试笔试宝典》——如何回答系统设计题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 应届生在面试时,偶尔也会遇到一些系统设计题,而这些题目往往只是测试求职者的知识面,或者测试求职者对系统架构方面的了解,一 ...

  4. 《PHP程序员面试笔试宝典》——如何应对自己不会回答的问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 在面试的过程中,对面试官提出的问题求职者并不是都能回答出来,计算机技术博大精深,很少有人能对计算机技术的各个分支学科了如 ...

  5. 《PHP程序员面试笔试宝典》——如何回答算法设计问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 程序员面试中的很多算法设计问题,都是历年来各家企业的"炒现饭",不管求职者以前对算法知识掌握得是否扎 ...

  6. 《PHP程序员面试笔试宝典》——如何回答快速估算类问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 有些大企业的面试官,总喜欢出一些快速估算类问题,对他们而言,这些问题只是手段,不是目的,能够得到一个满意的结果固然是他们 ...

  7. 《PHP程序员面试笔试宝典》——如何回答非技术性问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 评价一个人的能力,除了专业能力,还有一些非专业能力,如智力.沟通能力和反应能力等,所以在IT企业招聘过程的笔试.面试环节 ...

  8. 《PHP程序员面试笔试宝典》——如何回答技术性的问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 程序员面试中,面试官会经常询问一些技术性的问题,有的问题可能比较简单,都是历年的面试.笔试真题,求职者在平时的复习中会经 ...

  9. 《PHP程序员面试笔试宝典》——如何巧妙地回答面试官的问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 所谓"来者不善,善者不来",程序员面试中,求职者不可避免地需要回答面试官各种"刁钻&quo ...

随机推荐

  1. 使用织梦开源的分词算法库编写的YII获取分词扩展

    在编辑文章中,很多时候都需要自动根据文章内容获取关键字的功能,因此,本文主要是说明如何在yii中使用织梦开源的分词算法编写一个独立的扩展,可以在不同的模块中使用,步骤如下: 1 到这里下载其他朋友整理 ...

  2. Laravel简⃣单⃣的⃣路⃣由⃣

    在⃣routes.php文⃣件⃣中⃣写⃣如⃣下⃣几⃣个⃣函⃣数⃣: Route::get('/', function () { return view('welcome'); }); // 获⃣取⃣a ...

  3. Android源代码编译apk导入第三方包报错

    报错内容例如以下: make: *** 没有规则能够创建"out/target/common/obj/APPS/ AndroidWFS_intermediates/classes-full- ...

  4. [转]SQL SERVER 函数组合实现oracle的LPAD函数功能

    本文转自:http://blog.csdn.net/a475701239/article/details/8295976      在写存储过程的时候遇到个问题,就是 将数字转成4位右对齐的字符串,不 ...

  5. JavaScript Dictionary

    Excellent.  The 4guysfromrolla example is very helpful, thanks.  I've pasted a complete javascript.j ...

  6. TensorFlow进阶(一)----张量的阶和数据类型

    张量的阶和数据类型 TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通.其实张量更 ...

  7. linux下软件的更新命令

    linux下软件的更新命令   在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢? 1.区 ...

  8. scrapy-splash抓取动态数据例子七

    一.介绍 本例子用scrapy-splash抓取36氪网站给定关键字抓取咨询信息. 给定关键字:个性化:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信 ...

  9. Linux115条常用命令

    1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部2, ...

  10. 利用squid配置代理服务器-Fedora 19

    我的系统:  x86_64位Feodra 18 # yum install squid 不需要用户名密码认证的配置方式 edit /etc/squid/squid.conf # # Recommend ...