继《.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. ES6的let和const命令

    刚开始学习es6,心里有点方,因为看了前言,感觉要用什么bebal来翻译成es5的代码,才能在各个平台上兼容运行,还有node各种运行环境. 不过自己也去百度了一些,发现还是有一丢丢的困难. 言归正传 ...

  2. System.Object 基类

    System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Object. 基类特性 正由于所有的类型都 ...

  3. Linux命令-挂载命令:mount

    设置虚拟机放入光盘,并且选中“已连接” mkdir /mnt/cdrom 设置光盘目录 ll /dev/cdrom 查看cdrom的软连接长格式信息 mount -t iso9660 /dev/sr0 ...

  4. ThreadLocal用法详解和原理(转)

    本文转自https://www.cnblogs.com/coshaho/p/5127135.html 感谢作者 一.用法 ThreadLocal用于保存某个线程共享变量:对于同一个static Thr ...

  5. 四种有能力取代Cookies的客户端Web存储方案

    目前在用户的网络浏览器中保存大量数据需要遵循几大现有标准,每一种标准都拥有自己的优势.短板.独特的W3C标准化状态以及浏览器支持级别.但无论如何,这些标准的实际表现都优于广泛存在的cookies机制. ...

  6. PostgreSQL配置文件--实时统计

    7 实时统计 RUNTIME STATISTICS 7.1 Query/Index Statistics Collector 下面的参数控制是否搜集特定的数据库运行统计数据 7.1.1 track_a ...

  7. word-wrap,word-break,white-space,text-overflow的区别和用法

    在div中,文本布局经常出现,换行混乱的情况. 问题表现:1.如果是全英文字符串,中间不包含任何符号(包括空格),不自动换行.            2.中英文混写,则在英文字符串的开始处换行(英文长 ...

  8. My97DatePicker日历控件配置

    一. 简介 1. 简介 目前的版本是:4.72 2. 注意事项 My97DatePicker目录是一个整体,不可破坏里面的目录结构,也不可对里面的文件改名,可以改目录名 My97DatePicker. ...

  9. (转)PV、UV、IP之间的区别与联系

    PV是网站分析的一个术语,用以衡量网站用户访问的网页的数量.对于广告主,PV值可预期它可以带来多少广告收入.一般来说,PV与来访者的数量成正比,但是PV并不直接决定页面的真实来访者数量,如同一个来访者 ...

  10. [Android Pro] android中permission_group与permisson区别、作用

    转载:http://blog.csdn.net/feng88724/article/details/6409313 其实Android在定义 permission 时, 为每个Permission都进 ...