• 什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式?
  • 类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET BCL里有哪些是类(结构),为什么它们不是结构(类)?在自定义类型时,您如何选择是类还是结构?
  • 在.NET程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗?“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗?
  • 泛型的作用是什么?它有什么优势?它对性能有影响吗?它在执行时的行为是什么?.NET BCL中有哪些泛型类型?举例说明平时编程中您定义的泛型类型。
  • 异常的作用是什么?.NET BCL中有哪些常见的异常?在代码中您是如何捕获/处理异常的?在“catch (ex)”中,“throw”和“throw ex”有什么区别?您会如何设计异常的结构,什么情况下您会抛出异常?
  • List<T>和T[]的区别是什么,平时你如何进行选择?Dictionary<TKey, TValue>是做什么的?.NET BCL中还有哪些常用的容器?它们分别是如何实现的(哪种数据结构)?分别是适用于哪些场景?
  • 抽象类和接口有什么区别?使用时有什么需要注意的吗?如何选择是定义一个“完全抽象”的抽象类,还是接口?什么是接口的“显式实现”?为什么说它很重要?
  • 字符串是引用类型类型还是结构类型?它和普通的引用类型相比有什么特别的地方吗?使用字符串时有什么需要注意的地方?为什么说StringBuilder比较高效?在连接多个字符串时,它无论何时都比直接相加更高效吗?
  • 如何高效地进行数组复制?“二维数组”和“数组的数组”有什么区别?在使用双重循环遍历一个二维数组时,如何选择内外层的遍历顺序?
  • 什么是元编程,.NET有哪些元编程的手段和场景?什么是反射?能否举一些反射的常用场景?有人说反射性能较差,您怎么看待这个问题?有什么办法可以提高反射的性能吗?
  • 委托是什么?匿名方法是什么?在C# 3.0中,Lambda表达式是什么?扩展方法是什么?LINQ是什么?您觉得C# 3.0中还有哪些重要的特性,它们带来了什么优势?BCL中哪些类库和这些特性有关?您平时最常用哪些?
  • 工作之外您看哪些技术相关的书、网站、社区、项目等等?您还接触哪些.NET以外的技术,能和.NET或.NET中有针对性的部分做个对比吗?
  • 以上便是暂时想到的问题,以后有需要再做补充──当然,不提供答案,一是写出来太累了,二是这些东西往往也没有完全标准的答案。您一定发现了,这些问题其实都是和.NET基础相关,与某个特定的框架或是类库并没有多大关系。在实际面试时,如果是Web开发人员,我一定还会考察对方对ASP.NET及Web基础(更主要是协议和理念相关,而不是HTML,JS,CSS编程)的了解,某些情况下还会有关于多线程、并发的知识点。其他可能还会有一些例如软件开发、设计、实现等实践方面的问题。更重要的是,我一定会需要您在白板上当场写代码来解决一个小问题。不难,也不会直接要求写某个经典算法,事实上甚至是“交换元素”这种简单到近乎毫无意义的问题,只可惜这类题目也能筛掉八成以上的人。

    我并不担心大家知道这些问题,而且我可以表示以后的面试估计也逃不开这些。如果您有某些意向,做些针对性的准备可能也是不错的。当然,既然是面试,就会有“随机应变”,你我都一样。我有自信可以在不断追问下发现到底是“真材实料”还是“临时抱佛脚”。

     

    =============================================================

     

    1、C#与.NET、CLRCLI是什么关系?什么是.NET框架?

         这个问题好专业啊!一句话两句话还真不好说清。您听说过C++中有个COM的概念吧?您听说过JAVA里的虚拟机吧?CLR(公共语言运行时)就是“COM虚拟机”。而CLI(公共语言基础架构)就是CLR的指令集。而.NETCLI的一种实现方式。简单的说,.NET框架是一个平台,.NET框架就相当于在现有操作系统(比如Windows)上再加上一个操作系统。编程人员针对.NET进行开发,然后由.NET与操作系统打交道可以用多种语言对.NET进行开发,如VB.NETC++J#等,但首选语言是C#

    ====================================

     

     

    C#点滴
    – CLR, CTS…等等基本概念


     


    1. CLR – Common Language Runtime


    为.NET应用程序提供运行环境。定位、加载和管理.NET类型,同时也负责一些底层细节的工作,如内存管理、创建应用程序域、线程和对象上下文边界,安全检查等等。



    2. CTS – Common Type System


    完整描述了运行库所支持的所有可能的数据类型和编程结构,指定了这些实体之间如何交互,也规定了它们在.NET元数据格式中的表示。



    CTS包括5种基本类型:class, interface, enum, delegate and struct


    CTS可能的成员:构造器,终结器,静态构造函数,嵌套类型,运算符,方法,属性,索引器,字段,只读字段,常量,事件



    3. CLS – Common Language Specification


    定义了一个让所有.NET语言都支持的公共类型和编程结构的子集。这个可以说是所有语言特性的一个子集,而CTS是所有语言特性的一个合集。


    CLS定义了一套规则,当程序完全遵守这套规则时,才能确保你的程序能被所有其它.NET语言正确调用。可以通过特性[assembly:
    System.CLSCompliant(true)]来进行CLS规则验证。



    4. BCL - Basic Class Library


    所有.NET语言都可以调用的一套公共类库,封装了很多最基本的类型和服务。



    5. Managed/Unmanaged code


    运行在CLR中的代码叫做managed code,反之称为unmanaged code。



    6. C#的优点



    • 不需要指针
    • 自动管理内存 - 垃圾回收机制
    • 面向对象语言
    • 操作符重载
    • 支持Attribute
    • 泛型编程更安全
    • 匿名函数的支持
    • 简化的委托/事件模型
    • partial class

    3.5支持的特性有:



    • LINQ
    • 匿名类型的支持
    • 扩展方法来扩展现有类型
    • Lambda语法
    • 新的初始化对象语法

    7. IL, CIL或者MSIL


    中间语言,或者成为公共中间语言。所有的.NET语言代码编译后都转换为中间语言。目的是为了支持多语言。



    8. 程序集内容


    主要包含了编译过的IL指令集、类型metadata和manifest(程序集本身的metadata)。类型metadata的作用主要是反射、对象序列化、晚期绑定、wcf以及vs的智能感知等等。manifest除了记录本程序集的版本、模块号之外,它还记录了让程序集正常运转的外部程序集信息。



    9. JIT - just in time


    即时编译器。程序运行是尝试编译IL指令,生成机器可识别的机器码,并保存编译结果。下次调用相同代码时不需要重新编译。



    10. namespace


    简单说就是对.NET类型的分组机制。我们最常用到的系统namespace有System.Data,
    System.IO等等。除了System打头的命名空间,最有用的还有以Microsoft开头的命名空间,包含在其中的类型一般都和微软操作系统服务相关,不能运行在其他OS上,如MAC,Linux等等。



    11. 查看IL,反编译


    使用.NET自带工具ildasm可以查看程序集IL。使用reflector可以反编译程序集,你可以从http://www.red-gate.com/products/reflector/下载。



    12. .NET的跨平台性


    简单说就是.NET是跨语言的平台,同时也支持跨平台的语言。跨语言的平台是指它支持多种编程语言,支持跨平台的语言理论上是说.NET可以在非Windows之外的OS上运行。不过,对于后者,MS本身并没有做这个工作,仅仅有2个开源的架构在提供有限的支持:


    http://www.mono-project.com/ -
    支持各种版本的Linux、Win32以及Mac OS X


    http://www.dotgnu.org/ - 支持Win32, AIX,
    BeOS, Mac OS X, Solaris and Linux

     

    posted on 2012-06-06 14:22  higirle  阅读(248)  评论(0)    收藏  举报