2023年NET笔试面试宝典.doc
培训班常见问题(作者:张孝祥):1.你们会带着我们做完整个完整的项目吗?答:小的项目会,大的项目则不也许,1.众所周知,随便拿出一个中档大小的项目,也需要好多个纯熟的开发人员开发好多个月才干勉强做得差不多,培训期间没有这么多时间,并且你还要先学会了很多技术后才干开始做项目。 2.一个项目中的很多东西都是反复性的工作量的累积,技术方面都大同小异。做一个项目就好比盖一座楼房,只要告诉你整个楼房的整体结构,然后带着你盖上一间两间房子,其他剩下的几百间房子,老师想继续盖给你看,或者让你自己盖剩下的房间,你肯定也不乐意吧。以后有的是练手的机会,拿着人家发给你的工资,你再去做这些反复性的工作也不迟,岂不是更好!2.业务重要?还是编码实战更重要?答:1.对软件公司来说,两者都很重要,有的项目是业务为重心,有的则是以技术作为核心;以业务为重心的项目与做鞋差不多,没有多大技术含量和壁垒,只有积累了一定的经验,谁都可以做,利润很薄,例如大多数管理系统,靠的是人海战术和时间纠缠;以技术为核心的项目则很有技术壁垒,不是谁都能做的,利润率很高,例如,360杀毒软件、baidu,qq,迅雷下载,大型bbs项目和淘宝这样的电子商务网站。 2.对程序员来说,编码实战更重要,业务则不算什么!程序员和软件公司的工作就是要把用户的需求和业务变成代码,即为人作嫁,一开始,需求和业务都在用户那里,用户最懂业务,你不用了解业务,你的任务就是了解用户的业务后编写代码,在开始做项目前,用户会把业务告诉给你的。一个软件公司历来都不是只做自己熟悉业务的项目,而是来了业务不熟悉的项目机会,肯定也会冲上去做,软件公司通常都是在做自己以前没做过的项目,即做以前不了解业务的项目,只有项目做完了才完全熟悉了业务,这才叫做项目,否则就成了卖产品了,所以,软件工程里说的需求调研和理解业务的过程,也是在从侧面说明,程序员是在接到项目之后才开始了解其业务的,而在此之前,对业务可以是完全不懂的。3.是培训内容和信息量大好?还是培训内容少而精的好?答:内容和信息量大培训课程体系,对大多人来说是更合适的。程序员做的工作总是在变化的,没有一成不变的工作,为了适应这种变化,你的知识面必须很广泛。假如你学的知识内容很少,即使你把这些内容练的滚瓜烂熟了,除非你出去找的一份工作正好就是你以前练习的那些东西,这时候会让人感觉你比谁都厉害,但这种千载难逢的好事怎么就被你碰上了呢?软件开发毕竟不同于刷盘子,不是在反复干一件事情。软件开发的工作总是要面临不同的需求和问题,假如培训课程的内容和信息量很大,即使由于时间关系,你暂时没有完全消化和纯熟这么多内容,但是,你在工作中不管碰到什么新问题,都有那么一点点印象,知道大约的解决办法和思绪,你就可以慢慢地通过查阅资料和最终解决这个问题,软件开发的工作本来就是这么一种现状,假如你学的知识量很少,一旦碰到了新问题,你完全就没有了思绪,完全无从下手,这是何等痛苦,只有灰溜溜走人的份了吧。4. 我们培养的不是IT蚁族和IT民工先看看IT蚁族和IT民工的悲惨命运吧!()搜素 程序员的悲哀,尚有更多辛酸的故事,但是,我并不同情他们,我只是说他们自己无能!程序员这个职业能发明出许数年轻的富翁,不靠父母不靠天,尚有那个职业这么有机会和诱惑呢。但是,程序员毁坏身体是真,可是,不让你做程序员,你去打游戏,聊QQ不也照样坏身体吗?.net不只是有ASP.net+SQLServer这套,我们不培养IT蚁族,假如你不想厌烦软件开发,那就不能只学ASP.net+SQLServer,这个没有太多技术含量的单一纯熟工种。别的培训机构培养的是技术单一的纯熟技工,传智播客培养的是具有很强学习和解决问题能力的技术高手和未来技术经理。很多工厂说,清华毕业的学生刚进工厂时的动手操作不如技校毕业的学生纯熟,但过一段时间后,清华学生则能解决工厂生成过程出现中的各种新问题和弊端,甚至能提出创新和发明,后劲十足,由于清华培养的就不是一个单一工种的纯熟工人,而是知识全面和具有创新能力的高级工程师。别的机构和传智播客培养出来的学生差别好比如此。这套面试题重要目的是帮助那些还没有.Net软件开发实际工作经验,而正在努力寻找.Net软件开发工作的朋友在笔试时更好地赢得笔试和面试。由于这套面试题涉及的范围很泛,很广,很杂,大家不也许一天两天就看完和学完这套面试宝典,即使你已经学过了有关的技术,那么至少也需要一个月的时间才干消化和掌握这套面试宝典,所以,大家应当早作准备,从拿到这套面试宝典之日起,就要坚持在天天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了。回答问题的思绪:先正面叙述一些基本的核心知识,然后描述一些特殊的东西,最后再来一些锦上添花的东西。要注意有些不是锦上添花,而是画蛇添足的东西,不要随便写上。把答题像写书同样写。我要回答一个新技术的问题大约思绪和环节是:我们想干什么,干这个碰到了什么问题,现在用什么方式来解决。其实我们讲课也是这样一个思绪。例如,讲ajax时,我们希望不改变本来的整个网页,而只是改变网页中的局部内容,例如,用户名校验,级联下拉列表,下拉树状菜单。用传统方式,就是浏览器自己直接向服务器发请求,服务器返回新页面会盖掉老页面,这样就不流畅了。答题时,先答是什么,再答有什么作用和要注意什么(这部分最重要,展现自己的心得)答案的段落分别,层次分明,条理清楚都非常重要,从这些表面的东西也可以看出一个人的习惯、办事风格、条理等。要讲你做出答案的思绪过程,或者说你记住答案的思想都写下来。把答题想着是辩论赛。答题就是给别人讲道理、摆事实。答题不局限于什么格式和形式,就是要将自己的学识展现出来!别由于人家题目本来就模棱两可,你就心里胆怯和没底气了,不敢回答了。你要大胆地指出对方题目很模糊和你的观点,不要把面试官想得有多高,其实他和你就是差不多的,你想想,假如他把你招进去了,你们以后就是同事了,可不是差不多的吗?关于就业薪水,假如你是应届生,那不能要高工资,要拿高工资,就去中关村!少数人基础的确很好,在校期间的确又做过一些项目,那仍然是可以要到相对高的工资的。初级程序员薪水:2023-4500中级程序员薪水:4000-7000高级程序员薪水:7000以上公司招聘程序员更看重的要用到的编码技术、而不是那些业务不太相关的所谓项目经历:1.公司想招什么样的人2.公司面试会问什么,.3.简历怎么写4如何达成简历上的标准(培训中心教项目的目的)对于一些公司接到了一些项目,想招聘一些初中级的程序员过来帮助写代码,完毕这个项目,你更看重的是他的专业技术功底,还是以前做过几个项目的经历呢?我们先排除掉那些编码技术功底好,又正好做过相似项目的情况,事实上,这种鱼和熊掌兼得的情况并不常见。其实公司很清楚,只要招聘进来的人技术真的很明白,那他什么项目都可以做出来,公司招人不是让你去反复做你以前的项目,而是做一个新项目,业务方面,你只要进了项目团队,自然就能掌握。所以,大多数招聘单位在招聘那些编码级别的程序员时也没指望能招聘到做过类似项目的人,也不会刻意去找做过类似项目的人,用人单位也不是想把你招进,然后把你以前做过的项目重做一遍,所以,用人单位更看重招进来的人对要用到的编码技术的功底到底如何,技术扎实不扎实,项目则只要跟着开发团队走,自然就没问题。除非是一些非常专业的行业,要招聘特别高级的开发人员和系统分析师,招聘单位才特别注重他的项目经验和行业经验,要去找到行业高手,公司才关心项目和与你聊项目的细节,这样的人通常都不是通过常规招聘渠道去招聘进来的,而是通过各种手段挖过来的,这情况不再我今天要讨论的范围中。技术学得明白不明白,人家几个问题就把你的深浅问出来了,只要问一些具体的技术点,就很容易看出你是真懂还是假懂,很容看出你的技术深度和实力,所以,技术是来不得半点虚假的,必须扎扎实实。由于项目的种类繁多,涉及到现实生活中的各行各业,什么五花八门的业务都有,例如,酒店房间预定管理,公司车辆调度管理,学校课程教室管理,超市进销存管理,知识内容管理,等等成千上万等等,但是,不管是什么项目,采用的无非都是我们学习的那些目前流行和常用的技术。技术好、经验丰富,则项目做出来的效率高些,程序更稳定和更容易维护些;技术差点,碰碰磕磕最后也能把项目做出来,无非是做的周期长点、返工的次数多点,程序代码写得差些,用的技术笨拙点。假如一个人不是完完全全做过某个项目,他是不太关心该项目的业务的,对其中的一些具体细节更是一窍不知,(假如我招你来做图书管理,你项目经历说你做过汽车调度,那我能问你汽车调度具体怎么回事吗?不会,所以,你很容易蒙混过去的)而一个程序员的整个职业生涯中能实实在在和完完整整做出来的项目没几个,更别说在多个不同行业的项目了,有的程序员更是一辈子都只是在做某一个行业的项目,结果他就成了这个行业的专家(专门干一件事的家伙)。所以,技术面试官通常没正好亲身经历过你简历写的那些项目,他不也许去问你写的那些项目的具体细节,而是只能泛泛地问你这个项目是多少人做的,做了多长时间,开发的过程,你在做项目的过程中有什么心得和收获,用的什么技术等面上的问题,所以,简历上的项目经历可以具有很多水分,很容易作假,技术面试官也无法在项目上甄别你的真伪。简历该怎么写:精通那些技术,有一些什么项目经历教项目是为了巩固和灵活整合运用技术,增强学习的趣味性,熟悉做项目的流程,或得一些专业课程中无法获得的特有项目经验,增强自己面试的信心。讲的项目应当真实可靠才有价值,否则,表面上是项目,事实上还是知识点的整合,对巩固技术点和增强学习的趣味性,但无法获得实际的项目经验。(项目重要是增长你经验的可信度,获得更多面试机会,真正能不能找到工作,找到好工作,重要看你键盘上的功夫了)建议大家尽量开自己的blog,坚持天天写技术blog。在简历上写上自己的blog地址,可以多转载一些技术文章。1.如何过简历关?善意的谎言我先讲解几个软件求职相关的真实故事,以帮助大家了解大多数软件开发公司是如何赛选简历和录用新员工的。1.传智播客学员A是大四在读的应届毕业生,他自信技术学得很不错,实质上的确也达成用人单位的标准,他不乐意编写两年工作经验的虚假简历,希望凭借自己的真实情况去面对求职,投递了很多份简历,都没有回应;而他周边的很多相似背景的学员由于使用了假简历,都不久找到了薪水4.5k/月左右的工作,最后万不得已,他修改了自己的简历,增长了一些水分,以两年工作经验的身份去投递简历,结果就不久找到了满意的工作。2.一个穿着和气质给人的印象都很不错的女生征询时,问:“假如在传智播客学完了,能找到工作吗?”,我问了她一些基本情况后,得知她是郑州航空工业管理学院本科毕业,并且毕业时间已有两年,谈话中感觉很有工作经验,英语也不错,所以,我斩钉截铁地告诉她:“她学完后绝对能找到一份满意的工作”,并说出了一些因素:(1)她自身的谈吐气质就决定了她找工作没问题,应聘工作除了规定有那些必需的技能外,关键一点还要看这个人的性格和素养,按她的条件,假如她要找软件开发方面的工作,只需要把技术补上就可以了,这一点在传智播客学习是很容易补上的;(2)要想找到好工作,除了掌握必需的技术外,通常都需要编写两年工作经验的简历,她的毕业是证的确两年前的,编造两年软件开发的工作经验更容易,至少不用专门去做假的毕业证了。她听完后,很赞同我的观念,说她现在就在一家软件公司做人力资源,负责挑选应聘者的简历,按领导的吩咐:“凡是工作经验低于两年的简历直接删除到垃圾桶”,可见,假如你是以社会招聘的身份应聘的,那么你的简历一方面到达了类似这个女生的人力资源之手,即使你的技术再厉害,假如你的工作经验一栏上写得低于了两年,那简历就永无露脸之日了,何谈后来的笔试和面试呢? 3.与传智播客同一楼的一个软件开发单位,由于项目经理读过传智播客老师们的书籍和看过传智播客的视频,所以他们公司想到了从传智播客学员中招聘开发人员,提出薪水在2800元左后,我们公司老师对他们谁,2800元,我们学员肯定不会去!他们公司说对于没有实际经验的新手开出2800元的薪水已经很不错了,我们老师说,传智播客学员通过简历包装都能找到平均4500元的工资,楼下公司说假简历他们一聊就能聊出来,没工作经验的人是骗不住他们的,我们的老师当时就无语了,由于就在前几天,我们就有一个学员成功潜伏进了他们公司,并且工资是4500元,但我们老师不能当他们的面来说这事,就让他们一直蒙在鼓里还很自信吧! 4.前面谈到简历上的工作经验很重要,可是大多数要找工作的同学往往是没有工作经验的,所以,只能在简历上加点水分。但是,只要你将简历上写成了两年以上的工作经验,是不是一定就能得到笔试和面试的机会呢?写两年工作经验只是有效简历的开始,离简历被用人单位相中尚有一段差距。一个好的毕业学校、优秀的英语水平、中共党员的政治面貌、某省或直辖市的优秀毕业生、奥林匹克竞赛获几等奖等荣耀都会给用人单位一个很好的印象,假如你有这些荣耀,一定要在简历的基本信息部分写清楚。但是,很多人是没有这些荣耀的,那么只能平平淡淡列出自己的一些基本信息,这也没有很大的关系,顶多就是自己的简历不能脱颖而出。假如你没有上过大学,学历一栏怎么着也不能写为高中,起码也要写个大专或以上,毕业院校编个二线城市的不知名的小学院,假如你不乐意去做假证,等到别人面试你时,再说“闲弃以前上的学校不好,由于对编程太感爱好,就辍学了!”技术类面试、笔试题汇总(整理者:杨中科,部分内容从互联网中整理而来)注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系。下面的参考解答只是帮助大家理解,不用背,面试题、笔试题千变万化,不要梦想着把题覆盖了,下面的题是供大家查漏补缺用的,真正的把这些题搞懂了,才干“以不变应万变”。回答问题的时候能联系做过项目的例子是最佳的,有的问题后面我已经补充联系到项目中的相应的案例了。1、简述 private、 protected、 public、 internal 修饰符的访问权限。 private : 私有成员, 在类的内部才可以访问。protected : 保护成员,该类内部和继承类中可以访问。public : 公共成员,完全公开,没有访问限制。 internal: 当前程序集内可以访问。2、ADO.NET中的五个重要对象Connection:重要是启动程序和数据库之间的连接。没有运用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。Command:重要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源。DataAdapter:重要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保存起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataAdapter对象上,自身不具有和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet包含若干DataTable、DataTableTable包含若干DataRow。DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(通过游标)读取当前行的数据,并且这些数据是只读的,并不允许作其它的操作。由于DataReader 在读取数据的时候限制了每次只读取一笔,并且只能只读,所以使用起来不仅节省资源并且效率很好。使用DataReader 对象除了效率较好之外,由于不用把数据所有传回,故可以减少网络的负载。ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。3、列举ASP.NET 页面之间传递值的几种方式。 1.使用QueryString, 如.?id=1; response. Redirect(). 2.使用Session变量 3.使用Server.Transfer4.Cookie传值5.Application传值6.PreviosPage4、C#中的委托是什么?事件是不是一种委托?事件和委托的关系。委托可以把一个方法作为参数代入另一个方法。委托可以理解为指向一个函数的指针。委托和事件没有可比性,由于委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。由于对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以积极触发事件,因此假如用Delegate就没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove自己,不能赋值。事件只能+=、-=,不能= 。加分的补充回答:事件内部就是一个private的委托和add、remove两个方法面试聊:用Reflector查看.Net的类的内部实现,解决问题。5、override与重载(overload)的区别 重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。Override 是进行基类中函数的重写。Override是面向对象的概念 6、C#中索引器是否只能根据数字进行索引?是否允许多个索引器参数?参数的个数和类型都是任意的。加分的补充回答:用reflector反编译可以看出,索引器的内部本质上就是set_item、get_item方法。加分的补充回答:回答传智播客.net培训中讲解设计模式中开发的SettingsProvider就是用的string类型的参数名做索引器参数。7、属性和public字段的区别是什么?调用set方法为一个属性设值,然后用get方法读取出来的值一定是set进去的值吗?属性可以对设值、取值的过程进行非法值控制,比如年龄严禁设值负数,而字段则不能进行这样的设立。虽然一般情况下get读取的值就是set设立的值,但是可以让get读取的值不是set设立的值的,极端的例子。Public Agegetreturn 100;set。加分的补充回答:用reflector反编译可以看出,属性内部本质上就是set_*、get_*方法,具体参考传智播客.net培训视频中串讲.net基础的部分。 class Person public int Age get return 3; set Person p1 = new Person(); p1.Age = 30; p1.Age+; Console.Write(p1.Age);/输出38、三层架构通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候的所见所得。业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑解决。数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系。三层结构是N层结构的一种,一般来说,层次之间是向下依赖的,下层代码未拟定其接口(契约)前,上层代码是无法开发的,下层代码接口(契约)的变化将使上层的代码一起变化。优点: 分工明确,条理清楚,易于调试,并且具有可扩展性。 缺陷: 增长成本。9、MVC模式 (*)MVC(Model View Controller)模型视图控制器aspx就是View,视图;Model:DataSet、Reader、对象;Controller:cs代码。MVC是典型的平行关系,没有说谁在上谁在下的关系,模型负责业务领域的事情,视图负责显示的事情,控制器把数据读取出来填充模型后把模型交给视图去解决。而各种验证什么的应当是在模型里解决了。它强制性的使应用程序的输入、解决和输出分开。MVC最大的好处是将逻辑和页面分离。 MVC和三层的区别:MVC是UI层的技术。10、关于拆箱装箱:1)什么是装箱(boxing)和拆箱(unboxing)? (*)装箱:从值类型接口转换到引用类型。拆箱:从引用类型转换到值类型。 object obj = null;/引用类型 obj = 1;/装箱,boxing。把值类型包装为引用类型。 int i1 = (int)obj;/拆箱。unboxing2)下面三句代码有没有错,以inboxing或者unboxing为例,解释一下内存是怎么变化的int i=10; object obj = i;int j = obj;分析:在inboxing(装箱)时是不需要显式的类型转换的,但是unboxing(拆箱)需要显式的类型转换,所以第三行代码应当改为:3 int j = (int)obj; 要掌握装箱与拆箱,就必须了解CTS及它的特点: NET重要技术和基础之一的CTS(Common Type System)。CTS是为了实现在应用程序声明和使用这些类型时必须遵循的规则而存在的通用类型系统。.Net将整个系统的类型提成两大类 :值类型和引用类型。CTS中的所有东西都是对象;所有的对象都源自一个基类System.Object类型。值类型的一个最大的特点是它们不能为null,值类型的变量总有一个值。为了解决值类型不可认为null,引用类型可认为null的问题,微软在.Net中引入了装箱和拆箱:装箱就是将值类型用引用类型包装起来转换为引用类型;而从引用类型中拿到被包装的值类型数据进行拆箱。11、什么叫应用程序域(AppDomain) (*)一种边界,它由公共语言运营库围绕同一应用程序范围内创建的对象建立(即,从应用程序入口点开始,沿着对象激活的序列的任何位置)。应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的对象隔离,以使运营时行为可以预知。在一个单独的进程中可以存在多个应用程序域。应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。 class Worker : MarshalByRefObject private static int count; public void SetValue(int i) count = i; public int GetValue() return count; AppDomain appDomain1 = AppDomain.CreateDomain("domain1"); Worker worker1 = (Worker)appDomain1.CreateInstanceFromAndUnwrap("应用程序域.exe", "应用程序域.Worker"); worker1.SetValue(888); AppDomain appDomain2 = AppDomain.CreateDomain("domain2"); Worker worker2 = (Worker)appDomain2.CreateInstanceFromAndUnwrap("应用程序域.exe", "应用程序域.Worker"); worker2.SetValue(999); MessageBox.Show(worker1.GetValue().ToString(); MessageBox.Show(worker2.GetValue().ToString();12、CTS、CLS、CLR分别作何解释(*)CTS:Common Type System 通用系统类型。Int32、Int16int、Stringstring、BooleanboolCLS:Common Language Specification 通用语言规范。不同语言语法的不同。CLR:Common Language Runtime 公共语言运营时,就是GC、JIT等这些。13、在dotnet中类(class)与结构(struct)的异同?Class可以被实例化,属于引用类型,是分派在内存的堆上的。类是引用传递的。Struct属于值类型,是分派在内存的栈上的。结构体是复制传递的。加分的回答:Int32、Boolean等都属于结构体。14、堆和栈的区别?栈是编译期间就分派好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。堆是程序运营期间动态分派的内存空间,你可以根据程序的运营情况拟定要分派的堆内存的大小。15、能用foreach遍历访问的对象的规定需要实现IEnumerable接口或声明GetEnumerator方法的类型。16、GC是什么? 为什么要有GC? GC是垃圾收集器。程序员不用紧张内存管理,由于垃圾收集器会自动进行管理。GC只能解决托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection需要程序员调用Dispose进行资源的回收。要请求垃圾收集,可以调用下面的方法:GC.Collection()一般不需要手动调用GC.Collection()。加分的回答:有一次用OLEAutomation的方式操作Excel的时候,Excel经常不能正常退出,在MSDN网站上找到官方解答说要调用一下GC.Collection(),至于为什么这样就可以也没找到答案。17、String s = new String("xyz");创建了几个String Object? 两个对象,一个是“xyx”,一个是指向“xyx”的引用对象。string s1 = "xyz"string s2 = "xyz"是一个string对象,由于“字符串拘留池”(由于字符串不可变,所以就可以共享同一个字符串实例)18、值类型和引用类型的区别?1.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象自身。2.值类型不也许派生出新的类型:所有的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也可以实现接口。3.值类型不也许包含 null 值:然而,可空类型功能允许将 null 赋给值类型。 4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。 19、C#中的接口和类有什么异同。 不同点:不能直接实例化接口。接口不包含方法的实现。接口可以多继承,类只能单继承。类定义可在不同的源文献之间进行拆分。相同点:接口、类和结构都可以从多个接口继承。接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。接口和类都可以包含事件、索引器、方法和属性。20、abstract class和interface有什么区别? 相同点: 都不能被直接实例化,都可以通过继承实现其抽象方法。 不同点: 接口支持多继承;抽象类不能实现多继承。 接口只能定义行为;抽象类既可以定义行为,还也许提供实现。 接口可以用于支持回调(CallBack);抽象类不能实现回调,由于继承不支持。 接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的署名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包具有实现的方法。 接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。加分的补充回答:讲设计模式的时候SettingsProvider的例子。21、是否可以继承String类? String类是sealed类故不可以继承。 22、try 里有一个return语句,那么紧跟在这个try后的finally 里的代码会不会被执行,什么时候被执行? 会执行,在return后执行。加分的补充回答(也助记):读取数据库中数据的条数的程序public int QueryCount() . try return cmd.ExecuteScalar(); finally cmd.Dispose(); 先执行cmd.ExecuteScalar(),把返回值存起来,然后再去执行finally,然后把返回值返回。return都是最后执行,但是return后的表达式的计算则是在finally之前。假如C#设计的是先执行cmd.Dispose()再执行return就会出现return执行失败了,由于cmd已经Dispose了。23、new 关键字用法(*)new 运算符 用于创建对象和调用构造函数。new 修饰符 用于向基类成员隐藏继承成员。表达“我的这个方法和父类的同名方法没关系”,new只是不让编译器警告而已new 约束 用于在泛型声明中约束也许用作类型参数的参数的类型。24、如何把一个Array复制到ArrayList里(*)实现1 string s = "111", "22222" ; ArrayList list = new ArrayList(); list.AddRange(s);实现2 string s = "111", "22222" ; ArrayList list = new ArrayList(s);25、描述线程与进程的区别?(*)1.线程(Thread)与进程(Process)两者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。2.一个进程可以涉及若干个线程,同时创建多个线程来完毕某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比方来说,假如一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也可以派出几个成员来协同完毕,而家庭之外的人则没有办法直接消费不属于自己家庭的财产。26、什么是强类型,什么是弱类型?哪种更好些?为什么? C#中int i=3;i="a"不可以JavaScript中var i=3;i="a"可以强类型是在编译的时候就拟定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会拟定类型。没有好不好,两者各有好处,强类型安全,由于它事先已经拟定好了,并且效率高。弱类型更灵活,但是效率低,并且犯错概率高一般用于编译型编程语言,如c+,java,c#,pascal等,弱类型相比而言不安全,在运营的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb等 27、什么是反射? 程序集包含模块,而模块又涉及类型,类型下有成员,反射就是管理程序集,模块,类型的对象,它可以动态的创建类型的实例,设立现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运营时创建和使用类型实例 加分的补充回答:聊用反射实现编辑器动态插件和如鹏网项目中插件体系实现第三方支付和定期任务的案例。28、int、DateTime、string是否可认为null?int、DateTime不能,由于其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才干被赋值null。string可认为null。29、using关键字有什么用?什么是IDisposable?using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源。加分的补充回答:using其实等价于tryfinally,用起来更方便。int?Nullable<int>30、XML 与 HTML 的重要区别1. XML是区分大小写字母的,HTML不区分。 2. 在HTML中,假如上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束 标记。在XML中,绝对不能省略掉结束标记。 HTML:<img src="1.jpg"><br><br>XML:<img src="1.jpg"></img><br/><br/>3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。