.Net工程师面试笔试宝典

培训班常见问题

1.你们会带着我们做完整个完整的项目吗?

答:小的项目会,大的项目则不可能,

1.众所周知,随便拿出一个中等大小的项目,也需要好多个熟练的开发人员开发好多个月才能勉强做得差不多,培训期间没有这么多时间,并且你还要先学会了很多技术后才能开始做项目。

2.一个项目中的很多东西都是重复性的工作量的累积,技术方面都大同小异。做一个项目就好比盖一座楼房,只要告诉你整个楼房的整体结构,然后带着你盖上一间两间房子,其他剩下的几百间房子,老师想继续盖给你看,或者让你自己盖剩下的房间,你肯定也不愿意吧。以后有的是练手的机会,拿着人家发给你的工资,你再去做这些重复性的工作也不迟,岂不是更好!

2.业务重要?还是编码实战更重要?

答:

1.对软件企业来说,两者都很重要,有的项目是业务为重心,有的则是以技术作为核心;以业务为重心的项目与做鞋差不多,没有多大技术含量和壁垒,只有积累了一定的经验,谁都可以做,利润很薄,例如大多数管理系统,靠的是人海战术和时间纠缠;以技术为核心的项目则很有技术壁垒,不是谁都能做的,利润率很高,例如,360杀毒软件、baidu,qq,迅雷下载,大型bbs项目和淘宝这样的电子商务网站。

2.对程序员来说,编码实战更重要,业务则不算什么!程序员和软件公司的工作就是要把用户的需求和业务变成代码,即为人作嫁,一开始,需求和业务都在用户那里,用户最懂业务,你不用了解业务,你的任务就是了解用户的业务后编写代码,在开始做项目前,用户会把业务告诉给你的。一个软件公司从来都不是只做自己熟悉业务的项目,而是来了业务不熟悉的项目机会,肯定也会冲上去做,软件公司通常都是在做自己以前没做过的项目,即做以前不了解业务的项目,只有项目做完了才完全熟悉了业务,这才叫做项目,否则就成了卖产品了,所以,软件工程里说的需求调研和理解业务的过程,也是在从侧面说明,程序员是在接到项目之后才开始了解其业务的,而在此之前,对业务可以是完全不懂的。

3.是培训内容和信息量大好?还是培训内容少而精的好?

答:内容和信息量大培训课程体系,对大多人来说是更合适的。程序员做的工作总是在变化的,没有一成不变的工作,为了适应这种变化,你的知识面必须很广泛。如果你学的知识内容很少,即使你把这些内容练的滚瓜烂熟了,除非你出去找的一份工作正好就是你以前练习的那些东西,这时候会让人感觉你比谁都厉害,但这种千载难逢的好事怎么就被你碰上了呢?软件开发毕竟不同于刷盘子,不是在重复干一件事情。软件开发的工作总是要面临不同的需求和问题,如果培训课程的内容和信息量很大,即使由于时间关系,你暂时没有完全消化和熟练这么多内容,但是,你在工作中不管遇到什么新问题,都有那么一点点印象,知道大概的解决办法和思路,你就可以慢慢地通过查阅资料和最终解决这个问题,软件开发的工作本来就是这么一种现状,如果你学的知识量很少,一旦遇到了新问题,你完全就没有了思路,完全无从下手,这是何等痛苦,只有灰溜溜走人的份了吧。

  1. 我们培养的不是IT蚁族和IT民工

先看看IT蚁族和IT民工的悲惨命运吧!

http://news.csdn.net/a/20100316/217473.html ()

http://topic.csdn.net/u/20100317/16/2dba32e3-90f4-40b5-b1fd-0bf3709297c6.html?97395

搜素 程序员的悲哀,还有更多辛酸的故事,但是,我并不同情他们,我只是说他们自己无能!程序员这个职业能创造出许多年轻的富翁,不靠父母不靠天,还有那个职业这么有机会和诱惑呢。不过,程序员毁坏身体是真,可是,不让你做程序员,你去打游戏,聊QQ不也照样坏身体吗?

.net不只是有ASP.net+SQLServer这套,我们不培养IT蚁族,如果你不想厌烦软件开发,那就不能只学ASP.net+SQLServer,这个没有太多技术含量的单一熟练工种。

别的培训机构培养的是技术单一的熟练技工,传智播客培养的是具有很强学习和解决问题能力的技术高手和未来技术经理。很多工厂说,清华毕业的学生刚进工厂时的动手操作不如技校毕业的学生熟练,但过一段时间后,清华学生则能解决工厂生成过程出现中的各种新问题和弊端,甚至能提出创新和发明,后劲十足,因为清华培养的就不是一个单一工种的熟练工人,而是知识全面和具有创新能力的高级工程师。别的机构和传智播客培养出来的学生差别好比如此。

这套面试题主要目的是帮助那些还没有.Net软件开发实际工作经验,而正在努力寻找.Net软件开发工作的朋友在笔试时更好地赢得笔试和面试。由于这套面试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完和学完这套面试宝典,即使你已经学过了有关的技术,那么至少也需要一个月的时间才能消化和掌握这套面试宝典,所以,大家应该早作准备,从拿到这套面试宝典之日起,就要坚持在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了。

回答问题的思路:先正面叙述一些基本的核心知识,然后描述一些特殊的东西,最后再来一些锦上添花的东西。要注意有些不是锦上添花,而是画蛇添足的东西,不要随便写上。把答题像写书一样写。我要回答一个新技术的问题大概思路和步骤是:我们想干什么,干这个遇到了什么问题,现在用什么方式来解决。其实我们讲课也是这样一个思路。

例如,讲ajax时,我们希望不改变原来的整个网页,而只是改变网页中的局部内容,例如,用户名校验,级联下拉列表,下拉树状菜单。用传统方式,就是浏览器自己直接向服务器发请求,服务器返回新页面会盖掉老页面,这样就不流畅了。

答题时,先答是什么,再答有什么作用和要注意什么(这部分最重要,展现自己的心得)

答案的段落分别,层次分明,条理清楚都非常重要,从这些表面的东西也可以看出一个人的习惯、办事风格、条理等。

要讲你做出答案的思路过程,或者说你记住答案的思想都写下来。把答题想着是辩论赛。答题就是给别人讲道理、摆事实。答题不局限于什么格式和形式,就是要将自己的学识展现出来!

别因为人家题目本来就模棱两可,你就心里胆怯和没底气了,不敢回答了。你要大胆地指出对方题目很模糊和你的观点,不要把面试官想得有多高,其实他和你就是差不多的,你想想,如果他把你招进去了,你们以后就是同事了,可不是差不多的吗?

关于就业薪水,如果你是应届生,那不能要高工资,要拿高工资,就去中关村!少数人基础确实很好,在校期间确实又做过一些项目,那仍然是可以要到相对高的工资的。

初级程序员薪水:3000-4500

中级程序员薪水:4500-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.Transfer

4.Cookie传值

5.Application

6.previousPage

4、C#中的委托是什么?事件是不是一种委托?事件和委托的关系。

委托可以把一个方法作为参数代入另一个方法。

委托可以理解为指向一个函数的指针。

委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove自己,不能赋值。事件只能+=、-=,不能= 。加分的补充回答:事件内部就是一个private的委托和add、remove两个方法

面试聊:用Reflector查看.Net的类的内部实现,解决问题。

5、override与重载(overload)的区别

重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。

Override 是进行基类中函数的重写。Override是面向对象的概念

6、C#中索引器是否只能根据数字进行索引?是否允许多个索引器参数?

参数的个数和类型都是任意的。加分的补充回答:用reflector反编译可以看出,索引器的内部本质上就是set_item、get_item方法。

基础知识:

索引的语法:

public string this[string s],通过get、set块来定义取值、赋值的逻辑

索引可以有多个参数、参数类型任意

索引可以重载。

如果只有get没有set就是只读的索引。

索引其实就是set_Item、get_Item两个方法。

7、属性和public字段的区别是什么?调用set方法为一个属性设值,然后用get方法读取出来的值一定是set进去的值吗?

属性可以对设值、取值的过程进行非法值控制,比如年龄禁止设值负数,而字段则不能进行这样的设置。虽然一般情况下get读取的值就是set设置的值,但是可以让get读取的值不是set设置的值的,极端的例子。Public Age{get{return 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);//输出3

8、三层架构

通常意义上的三层架构就是将整个业务应用划分为:表现层(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是引用类型,但是它的子类Int32竟然不能去Object能去的“要求必须是引用类型”

的地方,违反了继承的原则,所以需要把Int32装在Object中才能传递。

装箱:从值类型接口转换到引用类型。

拆箱:从引用类型转换到值类型。

        object obj = null;//引用类型obj = 1;//装箱,boxing。把值类型包装为引用类型。int i1 = (int)obj;//拆箱。unboxing

2)下面三句代码有没有错,以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中引入了装箱和拆箱:装箱就是将值类型用引用类型包装起来转换为引用类型;而从引用类型中拿到被包装的值类型数据进行拆箱。

object.ReferenceEquals();//用来判断两个对象是否是同一个对象

Console.WriteLine(object.ReferenceEquals(3,3));//因为两个3被装到了两个箱子中,所以是false

Equals ==的关系

12、CTS、CLS、CLR分别作何解释(*)把英文全称背过来。

C#和.Net的关系。

C#只是抽象的语言,可以把C#编译生成Java平台的二进制代码,也可以把Java代码编译生成.Net平台的二进制代码。所以C#只是提供了if、while、±*/、定义类、int、string等基础的语法,而Convert.ToInt32、FileStream、SqlConnection、String.Split等都属于.Net的东西。深蓝色是C#的,浅蓝色是.Net的。

C# new→IL:newobj

C# string →.Net中的String

类型的差别:.net中的Int32在C#中是int,在VB.Net中是Integer。

语法的差别:IL中创建一个对象的方法是L_0001: newobj instance void 索引.C1::.ctor()

C#中是new C1();VB.net中是 Dim c1 As New C1

CTS:Common Type System 通用类型系统。Int32、Int16→int、String→string、Boolean→bool。每种语言都定义了自己的类型,.Net通过CTS提供了公共的类型,然后翻译生成对应的.Net类型。

CLS:Common Language Specification 通用语言规范。不同语言语法的不同。每种语言都有自己的语法,.Net通过CLS提供了公共的语法,然后不同语言翻译生成对应的.Net语法。

CLR:Common Language Runtime 公共语言运行时,就是GC、JIT等这些。有不同的CLR,比如服务器CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相当于一个发动机,负责执行IL。

13、在dotnet中类(class)与结构(struct)的异同?

Class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。

Struct属于值类型,是分配在内存的栈上的。结构体是复制传递的。加分的回答:Int32、Boolean等都属于结构体。

14、堆和栈的区别?

栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。

堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。

15、能用foreach遍历访问的对象的要求

需要实现IEnumerable接口或声明GetEnumerator方法的类型。

16、GC是什么? 为什么要有GC?

C/C++中由程序员进行对象的回收像学校食堂中由学生收盘子,.Net中由GC进行垃圾回收像餐馆中店员去回收。

GC是垃圾收集器(Garbage Collection)。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection需要程序员调用Dispose进行资源的回收。

要请求垃圾收集,可以调用下面的方法:GC.Collect()一般不需要手动调用GC.Collect()。当一个对象没有任何变量指向(不再能使用)的时候就可以被回收了。

基础知识:当没有任何变量指向一个对象的时候对象就可以被回收掉了,但不一定会立即被回收。

        object obj = new object();//只有new才会有新对象Console.WriteLine(obj);object obj2 = obj;obj = null;obj2 = null;Console.WriteLine();

17、

string s1 = “abc”;

        string s2 = "123";string s3 = "abc";

上面代码有两个字符串对象,因为s1、s3都引用了字符串拘留池中的"abc"

        string s1 = "abc";string s2 = "123";

string s4 = new string(new char[]{‘a’,‘b’,‘c’});

中有三个字符串对象,因为new就一定会创建新的字符串对象

基础知识:字符串拘留池(Intern)

因为字符串是不可变的,所以如果程序发现声明了一个之前声明过的字符串,那么会复用之前的那个字符串对象的实例。

        string s1 = "abc";string s2 = "123";string s3 = "abc";//string s4 = new string("abc");//错误的用法string s4 = new string(new char[]{'a','b','c'});Console.WriteLine(object.ReferenceEquals(s1,s2));Console.WriteLine(object.ReferenceEquals(s1, s3));//字符串拘留池复用对象Console.WriteLine(object.ReferenceEquals(s1, s4));//new就会创建新的对象

18、值类型和引用类型的区别?

1.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。

2.值类型不可能派生出新的类型:所有的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也可以实现接口。

3.值类型不可能包含 null 值:然而,可空类型功能允许将 null 赋给值类型。

4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

19、C#中的接口和类有什么异同。

不同点:

不能直接实例化接口。

接口不包含方法的实现。

接口可以多继承,类只能单继承。

类定义可在不同的源文件之间进行拆分。

相同点:

接口、类和结构都可以从多个接口继承。

接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

接口和类都可以包含事件、索引器、方法和属性。

基础知识:接口只能定义方法(只能定义行为,不能定义实现也就是字段),因为事件、索引器、属性本质上都是方法,所以接口中也可以定义事件、索引器、属性。

20、abstract class和interface有什么区别?

相同点:

都不能被直接实例化,都可以通过继承实现其抽象方法。

不同点:

接口支持多继承;抽象类不能实现多继承。

接口只能定义行为;抽象类既可以定义行为,还可能提供实现。

接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;

抽象类可以定义字段、属性、包含有实现的方法。

接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。

加分的补充回答:讲设计模式的时候SettingsProvider的例子。

21、是否可以继承String类?

String类是sealed类故不可以继承。

22、

    static void Main(string[] args){Console.WriteLine(GetIt());Console.ReadKey();}static int GetIt(){int i = 8;try{i++;Console.WriteLine("a");return i;//把返回值设定为i,然后“尽快”返回(没啥事就回去吧)}finally{Console.WriteLine("b");i++;}}

上面程序的执行结果是ab9

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行,什么时候被执行?

会执行,在return后执行。

    static void Main(string[] args){//Console.WriteLine(GetIt());Console.WriteLine(GetPerson().Age);Console.ReadKey();}static int GetIt(){int i = 8;try{i++;Console.WriteLine("a");return i;//把返回值设定为i,然后“尽快”返回(没啥事就回去吧。搞完就走)}finally{Console.WriteLine("b");i++;}}static Person GetPerson(){Person p = new Person();p.Age = 8;try{p.Age++;Console.WriteLine("a");return p;//把返回值设定为i,然后“尽快”返回(没啥事就回去吧。搞完就走)}finally{Console.WriteLine("b");p.Age++;}}

加分的补充回答(也助记):读取数据库中数据的条数的程序

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 约束 用于在泛型声明中约束,可能用作类型参数的参数的类型。

class ItemFactory where T : new()

{public T GetNewItem(){return new T();}}

25、描述线程与进程的区别?(*)

1.线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。

2.一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比喻来说,如果一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也可以派出几个成员来协同完成,而家庭之外的人则没有办法直接消费不属于自己家庭的财产。

27、什么是反射?

程序集包含模块,而模块又包括类型,类型下有成员,反射就是管理程序集,模块,类型的对象,它能够动态的创建类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行时创建和使用类型实例

加分的补充回答:聊用反射实现编辑器动态插件和如鹏网项目中插件体系实现第三方支付和定时任务的案例。

28、int、DateTime、string是否可以为null?

null表示“不知道”,而不是“没有”。没有年龄和不知道年龄是不一样。

数据库中null不能用0表示。0岁和不知道多少岁不一样。

Sex is zero。《色即是空》

        //int i1 = null;//int? i2 = null;//值类型后加?就成了可空数据类型int i3 = i2;//所以把可空的赋值给一定不能为空的会报错。//int i4 = (int)i2;//可以显式转换,由程序员来保证“一定不为空”//int? i5 = i4;//一定会成功!//using()→try{]catch{}finally{}//int?是微软的一个语法糖。是一种和int没有直接关系的Nullable类型Nullable<int> d1 = new Nullable<int>();//int? d1=null;Nullable<int> d2 = new Nullable<int>(3);//int? d2=3;Console.WriteLine(d1==null);

int、DateTime不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null。string可以为null。

C#中int等值类型不可以为null、而数据库中的int可以为null,这就是纠结的地方。int?就变成了可空的int类型。bool?、DateTime?

        int i1 = 3;int? i2 = i1;//int i3 = i2;//不能把可能为空的赋值给一定不能为空的变量int i3 = (int)i2;//显式转换

可空数据类型经典应用场景:三层中的Model属性的设计。

int?翻译生成.Net的Nullable,CTS。

29、using关键字有什么用?什么是IDisposable?

using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源。加分的补充回答:using其实等价于try……finally,用起来更方便。

30、XML 与 HTML 的主要区别

  1. XML是区分大小写字母的,HTML不区分。

  2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略

    或者

  3. 之类的结束 标记。在XML中,绝对不能省略掉结束标记。

HTML:

XML:

  1. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。

  2. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

  3. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

XML是用来存储和传输数据的

HTML是用来显示数据的

如果使用了完全符合XML语法要求的HTML,那么就叫做符合XHTML标准。符合XHTML标准的页面有利于SEO。

31、string str = null 与 string str = “”说明其中的区别。

答:string str = null 是不给他分配内存空间,而string str = “” 给它分配长度为空字符串的内存空间。 string str = null没有string对象,string str = “”有一个字符串对象。

string s3 = string.Empty;//反编译发现,string.Empty就是在类构造函数中 Empty = “”;

32.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。

答:解1: select top 10 * from A where id not in (select top 30 id from A)

演变步骤:

1)select top 30 id from T_FilterWords–取前条

2)select * from T_FilterWords

where id not in (select top 30 id from T_FilterWords)–取id不等于前三十条的

–也就是把前条排除在外

3)select top 10 * from T_FilterWords

where id not in (select top 30 id from T_FilterWords)

–取把前条排除在外的前条,也就是-40条

解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

解答3:用ROW_NUMBER实现

select * from

(select *,row_number() over(order by Fid desc) as rnum from Student

) as t

where t.rnum between 31 and 40

33.面向对象的语言具有________性、_________性、________性

答:封装、继承、多态。

不要背,脑子中要有联想。

34.在.Net中所有可序列化的类都被标记为_____?

答:[serializable]

35、什么是code-Behind技术。

就是代码隐藏,在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像以前asp那样都代码和html代码混在一起,难以维护。code-Behind是基于部分类技术实现的,在我的项目的三层代码生成器中用到了部分类。

36、接口是一种引用类型,在接口中可以声明( a),但不可以声明公有的域或私有的成员变量。
a) 方法、属性、索引器和事件;

b) 索引器和字段;
c) 事件和字段;

解读:接口中不能声明字段只能声明方法,属性、索引器和事件 最终都编译生成方法。因为字段属于实现层面的东西,只有存取值的时候才会用到字段,所以中接口中不能定义字段。

  1. 在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(c)。
    a) insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行;
    b) ExecuteNonQuery()方法返回执行Sql语句所影响的行数。
    c) Select操作的Sql语句只能由ExecuteReader()方法来执行;
    d) ExecuteReader()方法返回一个DataReader对象;

拿SQLHelper实现一下。

  1. 下列关于C#中索引器理解正确的是(c )
    a) 索引器的参数必须是两个或两个以上
    b) 索引器的参数类型必须是整数型
    c) 索引器没有名字
    d) 以上皆非

  2. 下面关于XML的描述错误的是(d)。
    a) XML提供一种描述结构化数据的方法;
    b) XML 是一种简单、与平台无关并被广泛采用的标准;
    c) XML文档可承载各种信息;
    d) XML只是为了生成结构化文档;

40、以下的C#代码,试图用来定义一个接口:
public interface IFile
{
int A;
int delFile()
{
A = 3;
}
void disFile();
}
关于以上的代码,以下描述错误的是(d )。
a) 以上的代码中存在的错误包括:不能在接口中定义变量,所以int A代码行将出现错误;
b) 以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数;
c) 代码void disFile();声明无错误,接口可以没有返回值;
d) 代码void disFile();应该编写为void disFile(){};

41、在ASP.NET中有Button控件myButton,要是单击控件时,导航到其他页面http://www.abc.com, 正确的代码为( c)。
a) private void myButton_Click(object sender, System.EventArgs e){Redirect(“http://www.abc.com”);}
b) private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(“http://www.abc.com”);}
c) private void myButton_Click(object sender, System.EventArgs e){Reponse.Redirect(“http://www.abc.com”);}

d) private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(“http://www.abc.com”);return true;}

  1. 声明一个委托public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是(b )。
    a) void myCallBack(int x) ;
    b) int receive(int num) ;
    c) string receive(int x) ;
    d) 不确定的;

43.StringBuilder 和 String 的区别?

答:String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String

如果要操作一个不断增长的字符串,尽量不用String类,改用StringBuilder类。两个类的工作原理不同:String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。

44、.请叙述属性与索引器的区别。 (*)

属性 索引器

通过名称标识。 通过签名标识。

通过简单名称或成员访问来访问。 通过元素访问来访问。

可以为静态成员或实例成员。 必须为实例成员。

属性的 get 访问器没有参数。 索引器的 get 访问器具有与索引器相同的形参表。

属性的 set 访问器包含隐式 value 参数。 除了 value 参数外,索引器的 set 访问器还具有与索引器相同的形参表。

45.请叙述const与readonly的区别。(*)

对于公用的static字段,比如数据库连接字符串 ,如果有人有意无意的修改了它的值,系统就坏掉了,所以应该是设置成只读的:

public static readonly string connstr =

        ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;

readonly的字段只能在声明时初始化,以后就不能再赋值了。

 public const string myconnstr="aaaaaaaaaaaaa";//定义常量,不变的量

永远不会变的量(今天、一万年以后,我这个电脑或者美国的电脑)都不会变的值才会声明为常量,比如圆周率可以,但是汇率不可以。通过计算出来的值就不能定义为常量,所以下面是错误的:

public const string connstr =

        ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;

const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。

    const数据成员的声明式必须包含初值,且初值必须是一个常量表达式。因为它是在编译时就需要完全评估。const成员可以使用另一个const成员来初始化,前提是两者之间没有循环依赖。readonly在运行期评估赋值,使我们得以在确保“只读访问”的前提下,把object的初始化动作推迟到运行期进行。readonly 关键字与 const 关键字不同: const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数。 const不能是“算出来的”

readonly 只能在声明时或者构造函数里面初始化,并且不能在 static 修饰的构造函数里面。

参考资料:

http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html

http://www.cnblogs.com/jams742003/archive/2010/03/23/1692913.html

http://www.cnblogs.com/wayfarer/archive/2006/04/27/386658.html

46. 请解释ASP。NET中的web页面与其隐藏类之间的关系?

一个ASP.NET页面一般都对应一个隐藏类,一般都在ASP.NET页面的声明中指定了隐藏类例如一个页面Tst1.aspx的页面声明如下

<%@ Page language=“c#” Codebehind=“Tst1.aspx.cs” AutoEventWireup=“false” Inherits=“T1.Tst1” %>

Codebehind=“Tst1.aspx.cs” 表明经编译此页面时使用哪一个代码文件

Inherits=“T1.Tst1” 表用运行时使用哪一个隐藏类

aspx页面会编译生成一个类,这个类从隐藏类继承。

47. 什么是viewstate,能否禁用?是否所用控件都可以禁用?

Viewstate是保存状态的一种机制,EnableViewState属性设置为false即可禁用。最有力的举例子:Label、TextBox在禁用ViewState后不同的表现来说明。

48、你对web service的体会?

答:如果自己写的一些程序也希望别人可以通过Web服务来使用,也可以把自己编写的方法贴上标签[WebMethed]来实现Web 服务。[是当编写程序时,希望实现一些别的网站已经实现过的,也用Web服务可视成XML语言的编码。可以使用别人的编码生成的XML找到自己需要的信息,来实现自己编写的程序的一些功能。把传智播客.net培训的如鹏网项目中用WebService实现管理客户端的例子说出来。

SOAP、WSDL。

WSDL:WebService Definition Language。就是描述WebService提供了那些方法的协议。

SOAP:描述客户端向服务器端发送请求报文的格式(Http报文体的格式),服务器端返回的报文格式也是SOAP协议的。

49、您在什么情况下会用到虚方法?它与接口有什么不同?

答案:子类重新定义父类的某一个方法时,必须把父类的方法定义为virtual

在定义接口中不能有方法体,虚方法可以。

实现时,子类可以不重新定义虚方法,但如果一个类继承接口,那必须实现这个接口。

  1. 不定项选择:

(1) 以下叙述正确的是: B C

A. 接口中可以有虚方法。B. 一个类可以实现多个接口。 C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。

(2) 从数据库读取记录,你可能用到的方法有:B C D

  A. ExecuteNonQuery            B. ExecuteScalar      C. Fill                        D. ExecuteReader

(3).对于一个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务?(多选) ( ABCD )

A.Close B.Dispose C.Finalize

D.using E.Quit

(4)以下关于ref和out的描述哪些项是正确的?(多选) ( ACD )

A.使用ref参数,传递到ref参数的参数必须最先初始化。

B.使用out参数,传递到out参数的参数必须最先初始化。

C.使用ref参数,必须将参数作为ref参数显式传递到方法。

D.使用out参数,必须将参数作为out参数显式传递到方法。

  1. 单项选择:

(1)下列选项中,(C)是引用类型。

a)enum类型 b)struct类型 c)string类型 d)int类型

(2).关于ASP.NET中的代码隐藏文件的描述正确的是(C)

a)Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名。

b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。

c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件。

d)以上都不正确。

(3).下列描述错误的是(D)

a)类不可以多重继承而接口可以;

b)抽象类自身可以定义成员而接口不可以;

c)抽象类和接口都不能被实例化;

d)一个类可以有多个基类和多个基接口;

52、DataReader和DataSet的异同?

DataReader使用时始终占用SqlConnection,在线操作数据库

每次只在内存中加载一条数据,所以占用的内存是很小的

是只进的、 只读的

DataSet则是将数据一次性加载在内存中.抛弃数据库连接…读取完毕即放弃数据库连接(非连接模式)

DataSet将数据全部加载在内存中.所以比较消耗内存…但是确比DataReader要灵活…可以动态的添加行,列,数据.对数据库进行 回传更新操作(动态操作读入到内存的数据)

53、public static const; int A = 1;这段代码有错误么?

错误:const不能被修饰为static ;因为定义为常量 (const )后就是静态的(static )。

54、传入某个属性的set方法的隐含参数的名称是什么?

value,它的类型和属性所声名的类型相同。

55、C#支持多重继承么?

类之间不支持,接口之间支持。类对接口叫做实现,不叫继承。 类是爹、接口是能力,能有多个能力,但不能有多个爹。

56、C#中所有对象共同的基类是什么?

System.Object

57、通过超链接怎样传递中文参数?

答:用URL编码,通过QueryString传递,用urlencode编码 用urldecode解码

58、string、String;int、Int32;Boolean、bool的区别

String、Int32、Boolean等都属于.Net中定义的类,而string、int、bool相当于C#中对这些类定义的别名。CTS。

59、Server.Transfer和Response.Redirect的区别是什么?(常考)

答: Server.Transfer仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;Response.Redirect则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

Server.Transfer是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 这个过程中浏览器和Web服务器之间经过了一次交互。

Response.Redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。这个过程中浏览器和Web服务器之间经过了两次交互。

60、不是说字符串是不可变的吗?string s=“abc”;s="123"不就是变了吗?(传智播客.Net培训班原创模拟题)

String是不可变的在这段代码中,s原先指向一个String对象,内容是 “abc”,然后我们将s指向"123",那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

61、是否可以从一个static方法内部发出对非static方法的调用?

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部不能发出对非static方法的调用。

63、说出一些常用的类、接口,请各举5个

要让人家感觉你对.Net开发很熟,所以,不能仅仅只列谁都能想到的那些东西,要多列你在做项目中涉及的那些东西。就写你最近写的那些程序中涉及的那些类。

常用的类:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List

常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary

要出乎意料!不要仅仅完成任务!笔试不是高考!处处要显出牛!

65、编写一个单例(Singleton)类。

参考复习ppt。

把构造函数设置为private,设置一个public、static的对象实例

public FileManager

{
private FileManager(){}

public readonly static FileManager Instance = new FileManager();

}

扩展:搜“C# Singleton”,有线程安全的更牛B的实现

66、什么是sql注入?如何避免sql注入?

用户根据系统的程序构造非法的参数从而导致程序执行不是程序员期望的恶意SQL语句。使用参数化的SQL就可以避免SQL注入。

详细参考复习ppt。举例子,摆事实!

1’ or 1=1

67、数据库三范式是什么?

用自己的话解释,而不是背概念。

传智播客风格的非严谨却一下子明了的解答方式:

第一范式:字段不能有冗余信息,所有字段都是必不可少的。

第二范式:满足第一范式并且表必须有主键。

第三范式:满足第二范式并且表引用其他的表必须通过主键引用。

记忆顺序:自己内部不重复→别人引用自己→自己引用别人。

1)不一定满足第一范式,比如拼音检索中增加一个“拼音”字段。

Id Name Pinyin

1 杨中科 yangzhongke

2 杨开慧 yangkaihui

3 赵美美 zhaomeimei

whwere pinyin like ‘yang%’

68、说出一些数据库优化方面的经验?如何优化有百万条数据的数据库?

(1)在经常检索的字段上(select * from Person where Name=@Name)使用索引提高查询速度。索引内部原理:想象成Dictionary,插入、删除、更新的速度慢了,加上索引也多占用了空间,查询的速度快了,加上索引以后速度提升非常明显。对于范围查询的字段使用聚集索引。

(2)select中只列出必要的字段,而不是*。

(3)避免全表扫描:避免隐式类型转换造成的全表扫描,在索引上使用函数也会造成全表扫描(因为索引只是为字段建立的,一旦使用表达式或者函数,那么索引就是失效了,当然也可以使用“函数索引”、“表达式索引”解决这个问题),使用索引不一定能提高查询速度。比如对于Name字段使用SubStr进行过滤就会造成全表扫描;避免字段计算造成的全表扫描。避免使用Like。

(4)避免在索引列上使用计算(where Name+‘A’=@MyName)

加分的回答:不进行无意义优化,根据性能查看器的报表,对最耗时的SQL进行优化。

where Age+5=20转变为where age=15

where DateDiff(day,getdate(),createdatetime)<=7转变为where createdatetime>=DateAdd(day,GetDate(),-7)

70、谈谈你对设计模式的理解(传智播客.Net培训班原创模拟题)

世界上本没有模式,用的人多了,也就有了模式。不用刻意记每种模式的名字,手中无模式,心中有模式。

大部分设计模式就是接口、抽象类的一个组合。ADO.Net基于接口编程,SafeDbCommand、SafeConnection。SettingsProvider。没必要记模式的名字。

举例:传智播客.net培训时SettingsProvider的例子、工厂模式的例子。

71、谈谈ViewState。谈谈对ASP.Net原理的理解。

Label、Textbox在禁用ViewState的时候自增的不同表现

Http是无状态的,WebForm为了实现基于http的“有状态”从而简化开发,ViewState用来在两次请求间保持状态。页面返回前将界面的状态序列化到ViewState中,这样就将状态保存在了浏览器中,下次页面提交的时候会顺便再将ViewState提交到服务器,这样服务器就根据ViewState还原了状态,这样WebForm开发就像有状态一样了。谈谈自定义AutoInc控件。

常考:谈谈ASP.Net生命周期。背邹老师讲课说的那串。并且说:这是WebForm控件开发才会涉及到生命周期(用户请求到IIS到ASP.Net这部分正常回答,可以蔑视的部分是页面那些PreRender等那些方法),我很少用服务端控件开发,在我眼中只有:请求处理响应!

72、post、get的区别

get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中;

使用post提交的页面在点击【刷新】按钮的时候浏览器一般会提示“是否重新提交”,而get则不会;

用get的页面可以被搜索引擎抓取,而用post的则不可以;

用post可以提交的数据量非常大,而用get可以提交的数据量则非常小(2k),受限于网页地址的长度。

用post可以进行文件的提交,而用get则不可以。

参考阅读:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html

73、下面的程序执行结果是什么?(传智播客.Net培训班原创模拟题)

class Person{public int Age { get; set; }}int i1 = 20;int i2 = i1;i1++;Console.WriteLine(i2);Person p1 = new Person();p1.Age = 20;Person p2 = p1;p1.Age++;Console.WriteLine(p2.Age);

答案:

20

21

解释:引用类型和值类型的区别。

74、Http默认的端口号是(80)、Ftp默认的端口号是(21)、SQLServer的默认端口号是(1433)(传智播客.Net培训班原创模拟题)

76、下面程序的执行结果是什么?(传智播客.Net培训班原创模拟题)

        int i = 10;Console.WriteLine(i++);Console.WriteLine(++i);Console.WriteLine(i=20);

Console.WriteLine(i==20);

答案:

10

12

20

True

解答:前两个参考第80题,i++表达式的值为i自增之前的值,所以打印10,执行完成后i变成11,执行++i的时候表达式的值为自增以后的值12。C#中赋值表达式的值为变量被赋值的值,因此最后一个就输出i赋值后的值20

while((line=reader.ReadLine())!=null)

{
}

下面程序的执行结果是什么?

bool b=false;

if(b=true)

{
Console.WriteLine(“yes”);

}

else

{
Console.WriteLine(“no”);

}

77、如果不用VisualStudio,用哪个命令行编译C#程序?(*)(传智播客.Net培训班原创模拟题)

答:csc.exe。格式:csc.exe Test.cs

csc(C Sharp compiler)

78、下列哪个名词和WebService不直接相关?(B)(传智播客.Net培训班原创模拟题)

A、UDDI

B、GUID

C、WSDL

D、SOAP

UDDI用来自动发现WebService的协议(*)

SOAP和HTTP的关系:SOAP基于Http协议的,和普通网页不同的是网页返回HTML,SOAP则是符合SOAP协议的XML数据。

79、.Net Framework中的类是专门供C#调用的是吗?(传智播客.Net培训班原创模拟题)

答:错。VB.Net等语言都可以调用.Net Framework中的类。CTS、CLS。

80、开放性问题:说出尽可能多的基于.Net Framework的语言。(*)(传智播客.Net培训班原创模拟题)

参考解答:C#、VB.Net、F#、PowerShell、IronPython、J#、Ruby.Net

81、.Net、ASP.Net、C#、VisualStudio之间的关系是什么?(传智播客.Net培训班原创模拟题)

答:.Net一般指的是.Net Framework,提供了基础的.Net类,这些类可以被任何一种.Net编程语言调用,.Net Framework还提供了CLR、JIT、GC等基础功能。

ASP.Net是.Net中用来进行Web开发的一种技术,ASP.Net的页面部分写在aspx 文件中,逻辑代码通常通过Code-behind的方式用C#、VB.Net等支持.Net的语言编写。

C#是使用最广泛的支持.Net的编程语言。除了C#还有VB.Net、IronPython等。

VisualStudio是微软提供的用来进行.Net开发的集成开发环境(IDE),使用VisualStudio可以简化很多工作,不用程序员直接调用csc.exe等命令行进行程序的编译,而且VisualStudio提供了代码自动完成、代码高亮等功能方便开发。除了VisualStudio,还有SharpDevelop、MonoDevelop等免费、开源的IDE,VisualStudio Express版这个免费版本。

82、AJAX解决什么问题?如何使用AJAX?AJAX有什么问题需要注意?项目中哪里用到了AJAX?(传智播客.Net培训班原创模拟题)

答:AJAX解决的问题就是“无刷新更新页面”,用传统的HTML表单方式进行页面的更新时,每次都要将请求提交到服务器,服务器返回后再重绘界面,这样界面就会经历:提交→变白→重新显示这样一个过程,用户体验非常差,使用AJAX则不会导致页面重新提交、刷新。

AJAX最本质的实现是在Javascript中使用XMLHttpRequest进行Http的请求,开发中通常使用UpdatePanel、JQuery等方式简化AJAX的开发,UpdatePanel的方式实现AJAX最简单,但是数据通讯量比较大,因为要来回传整个ViewState,而且不灵活,对于复杂的需求则可以使用JQuery提供的ajax功能。

UpdatePanel的内部原理。

AJAX最重要的问题是无法跨域请求(www.rupeng.com →so.rupeng.com),也就是无法在页面中向和当前域名不同的页面发送请求,可以使用在当前页面所在的域的服务端做代理页面的方式解决。

在如鹏网项目中发帖的时候显示相关帖的功能、站内搜索项目中显示搜索Suggestion、数据采集项目中都用到了AJAX。

常考:不用任何框架编写一个AJAX程序。XHR:XmlHttpRequest。

83、NET通过对各语言先编译成( IL),然后再执行时用( JIT)将其编译成本地平台代码,来实现异构平台下对象的互操作。(*)

84、Application 、Cookie和 Session 两种会话有什么不同?

答:Application是用来存取整个网站全局的信息,而Session是用来存取与具体某个访问者关联的信息。Cookie是保存在客户端的,机密信息不能保存在Cookie中,只能放小数据;Session是保存在服务器端的,比较安全,可以放大数据。

85、开放式问题:你经常访问的技术类的网站是什么?

博客园(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文档、msdn论坛(遇到问题先到网上搜解决方案,还不行就问同事,同事也解决不了就去MSDN论坛提问,一定能得到解决)

86、你对.net的GC的理解

GC是.Net的垃圾收集器,可以进行内存资源的回收,程序员无需关心资源的回收,当一个对象没有任何引用的时候就可以被回收了。一个对象可以被回收并不意味着一定会被立即回收,GC会选择时机进行回收。可以调用GC.Collect()让GC立即回收。GC不能回收非托管资源,对于非托管资源一般都实现了IDisposable接口,然后使用using关键字进行资源的回收。

87、请写一个SQL语句:从user表中取出name列中的起始字符是“北京”的全部记录

select * from [user] wherer name like ‘北京%’

88、请你简单的说明数据库建立索引的优缺点

使用索引可以加快数据的查询速度,不过由于数据插入过程中会建索引,所以会降低数据的插入、更新速度,索引还会占磁盘空间。

89、什么是WEB服务控件?使用WEB服务控件有那些优势、劣势?

web服务控件就是可以在服务器执行的控件,优势在于可以回传数据(ViewState),带有事件驱动(doPostBack),简化了Html标签的使用,使得开发ASP.net程序可以像开发Winform程序一样简单。Web服务控件最终还是被渲染(Render)为Html标签。使用WEB服务控件的劣势是会生成一些无用的属性、ViewState等,不利于SEO,一般在内网系统或者互联网系统的后台中使用WEB服务控件。如果没有复杂的服务器交互动作,就不用Web服务器控件。

runat=server的HTML控件有什么特点:路径不用程序员解析,可以使用“~”来虚拟路径。

90、下面程序的执行结果是什么?(传智播客.Net培训班原创模拟题)

        int i = 10;if (i <=0) ;Console.WriteLine("i必须大于0");Console.WriteLine("ok");

答案:

i必须大于0

ok

解答:注意if (i <=0)后面的“;”,由于有了“;”,所以Console.WriteLine(“i必须大于0”)不再是和if一起的一部分,而是独立的语句。

for循环也是如此。

92、开放式问题:工作中遇到不懂的问题是怎样去解决的?(传智播客.Net培训班原创模拟题)

参考解答:首先到百度上搜索中文的资料,一般都可以找到解决方案,如果还找不到解决方案就到google上搜索英文的资料,如果还没有解决方案就请教同事,如果同事也没有解决方案,就将问题提交到MSDN论坛。

93、开放性问题:能说出尽可能多的数据库管理系统?(传智播客.Net培训班原创模拟题)

参考解答:MSSQLServer、Oracle、Access、DB2、Sybase

94、开放性问题:你能说出尽可能多的你听说过的编程语言?(传智播客.Net培训班原创模拟题)(*)

参考解答:C#、VB.Net、Ada、Cobol、C、C++、Delphi、Erlang、F#、Fortran、Java、JavaScript、Pascal、Python、PowerShell、Ruby、Smalltalk。

95、请翻译下面的文章(*)
The BaseDataBoundControl is the root of all data-bound control classes. It defines the DataSource and DataSourceID properties and validates their assigned content. DataSource accepts enumerable objects obtained and assigned the ASP.NET 1.x way.

Mycontrol1.DataSource = dataSet;

Mycontrol1.DataBind();

DataSourceID is a string and refers to the ID of a bound data source component. Once a control is bound to a data source, any further interaction between the two (in both reading and writing) is handled out of your control and hidden from view. This is both good and bad news at the same time. It is good (rather, great) news because you can eliminate a large quantity of code. The ASP.NET framework guarantees that correct code executes and is written according to recognized best practices. You’re more productive because you author pages faster with the inherent certainty of having no subtle bugs in the middle. If you don’t like this situation—look, the same situation that many ASP.NET 1.x developers complained about—you can stick to the old-style programming that passes through the DataSource property and DataBind method. Also in this case, the base class saves you from common practices even though the saving on the code is less remarkable.

参考翻译(自我感觉翻译的很烂,仅供参考。):

BaseDataBoundControl是所有的数据绑定控件类的根类。它定义了DataSource、DataSourceID两个属性,并且对为它们赋值的内容进行验证。DataSource属性接受读取、设置ASP.Net 1.x方式的IEnumerable 对象。

Mycontrol1.DataSource = dataSet;

Mycontrol1.DataBind();

DataSourceID 是一个字符串,引用绑定的数据源控件的ID。一旦一个控件绑定到了数据源,这两者之间的任何交互(读和写)都会在你的控件之外被处理,并且被隐藏起来。这既是好消息也是坏消息。ASP.Net框架保证代码按照最佳实践进行代码的执行、编写。你会更加高效,因为你编写了更快的、没有任何错误的分页代码。如果你不喜欢这样的行为(看,就和ASP.Net 1.x开发人员抱怨的一样),你仍然可以使用老的编程风格,也就是将对象传递给DataSource属性,然后调用DataBind方法。另外在这种情况下,基类可以帮你避免常规的做法,即使看起来改进不明显。

96、在下述选项时,没有构成死循环的程序是 ©

A.int i=100;while (1) { i=i%100+1; if (i>100) break; }

B.for (;

【.Net工程师面试笔试宝典】相关推荐

  1. .Net工程师面试笔试宝典

    .Net工程师面试笔试宝典 传智播客.Net培训班内部资料 http://net.itcast.cn 这套面试笔试宝典是传智播客在多年的教学和学生就业指导过程中积累下来的宝贵资料,大部分来自于学员从面 ...

  2. 我的新书——《PHP程序员面试笔试宝典》

    你好,是我琉忆. 一个文艺的PHP开发工程师. 很荣幸能够在这里带来我的第一本新书--<PHP程序员面试笔试宝典>. 一.创作过程 <PHP程序员面试笔试宝典>是我的第一本书, ...

  3. 【书】《数据库面试笔试宝典系列》简介

    [系列书]<数据库面试笔试宝典>相关内容 本文档说明 本文档主要是给数据库笔试面试系列书籍 < Oracle 数据库笔试面试宝典> . <数据库 程序员 面试笔试宝典&g ...

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

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

  5. python程序员面试算法宝典pdf-Python程序员面试笔试宝典

    本书是一本讲解Python程序员面试笔试的百科全书,在写法上,除了讲解如何解答Python程序员面试笔试问题以外,还引入了相关知识点辅以说明,让读者能够更加容易理解.本书将Python程序员面试笔试过 ...

  6. 程序员求职之道(《程序员面试笔试宝典》)之走进微软

    以下内容属于原创,同时发表于Lich's blog L!ch,2014届硕士研究生,签约微软. 一分耕耘,一分收获 谨以此篇,记录我即将结束的学生生涯,和对马上到来的新生活的向往. 现在研三,14年3 ...

  7. 《PHP程序员面试笔试宝典》——如何克服面试中紧张的情绪?

    本文摘自<PHP程序员面试笔试宝典>. PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 面试的成功与否,往小的方面讲,直接关系到求职者的工作问题,往大 ...

  8. 程序员面试笔试宝典学习笔记(一)

    以下是一些著名互联网企业的部分面试笔试真题以及考察知识点 本文的内容是对一些网址上的知识点介绍做了相应的整理 1.extern的作用 自己理解:应该需要区分extern在C语言中和C++语言中的作用, ...

  9. 【深度学习笔记】神经网络模型及经典算法知识点问答巩固(算法工程师面试笔试)

    文章目录 前言 一.前馈神经网络模型 1.请说说你对前馈神经网络中"前馈"二字的理解. 2.记忆和知识是存储在_____上的.我们通常是通过逐渐改变_____来学习新知识. 3.在 ...

最新文章

  1. c语言二叉树链式存储,二叉树链式存储基本操作(C语言)
  2. 使用javaHelp制作java swing帮助文档
  3. Windows XP下如何设置电脑定时关机
  4. Check failed: error == cudaSuccess (74 vs. 0) misaligned address的解决方法
  5. mysql centos 源码安装_centos7源码安装mysql8
  6. 领域应用 | 企业效益最大化的秘密:知识图谱
  7. Timer类 和 TimerTask类。一种有用计时器工具。可以每隔相同时间去执行某任务一次。
  8. Debug和Release区别
  9. Linux入门——开机启动过程浅析
  10. 富文本编辑器在Java中使用
  11. Noip 2016 蛋碎一地晚节不保
  12. 北京林业大学matlab公选课,北京林业大学视频类公共选修课学习指引-北京林业大学教务处.DOC...
  13. 用LSTM自动生成古诗
  14. FlashFXP上传下载
  15. Madgwick AHRS算法笔记
  16. Redis 可视化管理(AnotherRedisDesktopManager / Medis / redis-commander / RedisDesktopManager)
  17. 公式宝典之颜色混合模式公式
  18. 又拿下一块屏幕,中景园2.08寸OLED SH1122 带字库芯片 GT30L32S4W
  19. 实时行情难处理?睿凝资本选择DolphinDB解决流数据难题
  20. 成才之路杂志社成才之路编辑部成才之路杂志2022年第33期目录

热门文章

  1. 全球十大OTA 谁能有一席之地?
  2. labelGo:基于 YOLOv5 的辅助标注工具
  3. 网线延长- HDMI1.4 over ip延长器
  4. 【DevOps】什么是混沌工程?
  5. 学习使用SAMinside心得笔记
  6. STC51单片机26——串口发送DS18B20温度值
  7. 【转】 oracle中英文分开排序
  8. 公共场所英语提示语大全_如何在公共场所拍照
  9. 查看视频播放时的分辨率
  10. 那些从黑马毕业的学生,都去哪工作了?