下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、我在面试NET/C#呈序员时会提出的问题2011-03-03 07:38 by 老赵,2067 visits说起来我也面试过相当数量的.NET (包括C#,后文不重复)程序员了,有的通过电话,有的面谈。后来发现,其实提的问题来来回回也 就那么几个。这些问题有的已经有十年历史了,至少也有三年。我想对于一个“不错”的.NET程序员来说,在简单的提示下绝大部分问题 应该可以“对答如流”。可能您也会觉得这些太细节,真要追究起来似乎也大都不是必须的,无视这些照样可以写程序,做网站,赚工资, 但是我不会满足于成为(包括招聘)这样的程序员,暂时也懒得解释掌握这些东西的益处和重要性。每个人都有自己的看法,一切
2、就 看您自己的选择了。那么现在就开始吧。什么是.NET?什么是CLI?什么是CLR? IL是什么? JIT是什么,它是如何工作的? GC是什么,简述一下GC的工作方式?CLI ( Common Language Infrastructure)通用语言基础结构(Common Language Infrastructure,CLI)是CLR的一个子集,也就是.NET中最终对编译成 MSIL代码的应略序的运行环境进行管理的那一部分。在CLR结构图中CLI位于下半部分,主要包括类加载器(Class Loader)、实时编译器(IL To Native Compilers)和一个运行时环境的垃圾收集器(
3、Garbage Collector) CLI 是.Net 和 CLR 的灵魂,CLI为IL代码提供运行的环境,你可以将使用任何语言编写的代码通过其特定的编译器转换为MSIL代码 之后运行其上,甚至还可以自己写MSIL代码在CLI上面运行。CLR(公共语言运行时,Common Language Runtime)和 Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分 配和垃圾收集),并保证应用和底层操作系统之间必要的分离。IL是.NET框架中中间语言(Intermediate Language)的缩写。使用.NET框架提供的编译器可以直接将源程序编译为exe 或.dll文件,但此时编译出
4、来的程序代码并不是CPU能直接执行的机器代码,而是一种中间语言IL(Intermedate Language)的代码。JIT是即时编译GC: Gabage Collection,垃圾收集器类(class)和结构(struct)的区别是什么?它们对性能有影响吗? .NET BCL里有哪些是类(结构),为什么它们不是结 构(类)?在自定义类型时,您如何选择是类还是结构?值类型与引用类型结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int对应S32结构,string对 应system.string结构,通过使用结构可以创建更多的值类型3.内部结构:结构:没有
5、默认的构造函数,但是可以添加构造函数没有析构函数没有abstract和sealed(因为不能继承)不能有protected修饰符可以不使用new初始化在结构中初始化实例字段是错误的类:有默认的构造函数有析构函数可以使用abstract和sealed有protected修饰符必须使用new初始化类是引用类型:引用类型在堆上分配地址堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基 类型对待的小对象,而类处理某个商业逻辑因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用2 .继承性结构:不能从另外一个结构
6、或者类继承,本身也不能被继承,虽然结构没有明确的Sealed声明,可是结构是隐式的 sealed .类:完全可扩展的,除非显示的声明sealed否则类可以继承其他类和接口,自身也能被继承三.如何选择结构还是类讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有1000个点对象的数组,则将为引用每个 对象分配附加的内存。在此情况下,结构的成本较低。在表现抽象和多级别的对象层次时,类是最好的选择大多数情况下该类型只是一些数据时,结构时最佳的选择在.NET程序运
7、行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗? “结构” 对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗?NET进程被创建时就会有一个堆随之被创建,用来保存该进程在运行中需要使用的对象/数据;当一个线程被创建时, 会有一个栈被创建,用来保存方法调用参数,局部变量等轻量型数据.当一个类里面包含一个结构体类型的变量时,该结构体类型会被分配在堆上.(不知道有什么需要注意的)泛型的作用是什么?它有什么优势?它对性能有影响吗?它在执行时的行为是什么? .NET BCL中有哪些泛型类型?举例 说明平时编程中您定义的泛型类型。泛型有利于算法重用.NET进程
8、地址空间中,对象和类型是分开存放的,当我们实例化一个泛型的时候 (比如List list = new List();),会有一个新的类型对象被创建(该对象并不位于GC堆上),当我们在使用这个实例化泛型去创建新的对 象时,才会有一个对象(GC堆上)被创建.所以性能上会有些许的损失.当我们使用一个值类型作为参数,去调用一个 接收引用类型参数的方法是,会有装箱发生,这时我们可以考虑实现一个泛型,并在运行时确定方法的参数类型.异常的作用是什么? .NET BCL中有哪些常见的异常?在代码中您是如何捕获/处理异常的?在“catch (ex)”中,“throw” 和“throw ex”有什么区别?您会如何
9、设计异常的结构,什么情况下您会抛出异常?呃,异常可以通知我们程序出错,比如ArgumentException, NullReferenceException.异常的发生会导致一次stack walk,去寻找对应的exception handler,在这个过程中,stack trace的信息会被一层层的收 集throw ex会清空之前收集的stack trace的信息,相当于抛出了一个新的异常,而throw不会,所以throw ex不利于 找出问题所在.不同的layer应该catch不同exception,最上层处理最general的exception,底层去处理一些detail的excepti
10、on.List和T的区别是什么,平时你如何进行选择? Dictionary是做什么的? .NET BCL中还有哪些常用的容器?它们分别是如何实现的(哪种数据结构)?分别是适用于哪些场景?T继承自Array,而List仅仅是对T的封装;相比于T, List的size是动态变化的.DictionaryTKey, TValue河以用来存储键/值对.其他的比如HashTable, SortedList等.抽象类和接口有什么区别?使用时有什么需要注意的吗?如何选择是定义一个“完全抽象”的抽象类,还是接口?什么是接口的“显式实现叩为什么说它很重要?抽象类定义了一个类及其子类是什么,而接口更多的表现出一个类
11、可以做什么.当一个类实现连个不同的接口,而这两个接口中包含一些相同签名的方法时需要用到显示实现字符串是引用类型类型还是结构类型?它和普通的引用类型相比有什么特别的地方吗?使用字符串时有什么需要注意的地方?为什么说StringBuilder比较高效?在连接多个字符串时,它无论何时都比直接相加更高效吗?String是引用类型,其特殊之处在于一个string是不可变的,当我们对两个string使用连接操作时,会生成一个新的string对象,而原来的两个string保持不变.在和native代码做interop时,对于传出参数(char* outStr),应当选择使用stringbuilder而非st
12、ring.StringBuilder内部维护着一个char数组,在做连接字符的操作时会动态增加其大小,但是,当原有的数组不够用时,StringBuilder会重新创建一个新的char数组,值得注意的是原来的数组不会被抛弃,新创建的数组只会用作存储新添加的字符.如果说StringBuilder有”不高效”的话,应该就是在原有数组空间用尽的情况下吧.如何高效地进行数组复制? “二维数组”和“数组的数组”有什么区别?在使用双重循环遍历一个二维数组时,如何选择内外层的遍历顺序?不清楚,因为数组的元素在内存中的分布是连续的,我能想到的方法是直接使用内存拷贝API.二维数组是二维的,数组的数组是一维的.根
13、据内存局部性原理,CPU在读取二维数组的第一个元素是第一行的数据也会被一起读入cache,所以应当先遍历行, 随后遍历列.什么是元编程,.NET有哪些元编程的手段和场景?什么是反射?能否举一些反射的常用场景?有人说反射性能较差,您怎么看待这个问题?有什么办法可以提高反射的性能吗?对元编程了解十分有限,.NET的CodeDom(或者使用reflection emit动态创建类型)应当是其中的一个场景.基于元数据,反射帮助我们在运行时动态获取程序集/类型/方法/属性等等的信息,可以用于加载Addin.有得必有失,反射功能强大,只要不是滥用,其带来的益处远大于性能上的损失委托是什么?匿名方法是什么?
14、在C# 3.0中,Lambda表达式是什么?扩展方法是什么? LINQ是什么?您觉得C# 3.0中还有哪些重要的特性,它们带来了什么优势? BCL中哪些类库和这些特性有关?您平时最常用哪些?委托可以认为是类型安全的函数指针工作之外您看哪些技术相关的书、网站、社区、项目等等?您还接触哪些.NET以外的技术,能和.NET或.NET中有针对性的部分做个对比吗?以上便是暂时想到的问题,以后有需要再做补充一一当然,不提供答案,一是写出来太累了,二是这些东西往往也没有完全标准的答案。 您一定发现了,这些问题其实都是和.NET基础相关,与某个特定的框架或是类库并没有多大关系。在实际面试时,如果是Web开发人员, 我一定还会考察对方对ASP.NET及Web基础(更主要是协议和理念相关,而不是HTML,JS,CSS编程)的了解,某些情况下还会有关 于多线程、并发的知识点。其他可能还会有一些例如软件开发、设计、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024铝合金材料研发与应用项目合同范本3篇
- 二零二五年度网络安全事件应急处理与响应计划合同2篇
- 二零二五版办公场地租赁信息咨询服务合同2篇
- 2024年高端设备采购与技术转让合同
- 2024水磨石新型装饰材料研发与应用承包合同3篇
- 二零二五年度5人合伙人工智能教育培训合同3篇
- 二零二五年度遗产分配与境外遗产继承协议3篇
- 二零二五年度出租车承包合同标准条款3篇
- 二零二五年度建筑安全责任协议范本解析3篇
- 2024版劳务分包合同(保洁类)2篇
- LED灯箱安装制作及施工方案
- 混凝土浇筑申请表
- 山丹丹开花红艳艳教案
- 中风后认知障碍中医临床路径
- 罂粟汤_朱氏集验方卷十_方剂加减变化汇总
- 《我相信---杨培安》歌词-励志歌曲
- 做一个幸福班主任
- 初中班主任案例分析4篇
- 公司7s管理组织实施方案
- Q∕GDW 12147-2021 电网智能业务终端接入规范
- 仁爱英语单词默写本(全六册)英译汉
评论
0/150
提交评论