.Net面试经验总结
提醒:本人从事.Net开发多年,并作为面试官组织参与过多场面试。当然如果有说的不对的地方,请大家指正
前言/背景
金九银十即将到来,求职套路多,但是网上很多都是Web前端、Java方面的面经,很少有,Net和C#相关的面经。一方面国内从事.Net的程序员和Java相比少很多,另一方面公司的岗位不多并且薪资也比Java低。当时.Net还是有许许多多有趣的地方,C#的语法跟Java很相似,并且很多知识是多语言通用的(比如数据库、数据结构和算法、设计模式等等)。
简历
简历一定要认真对待,不能随随便便找个模板,一份优秀的简历不仅是你能得到面试的机会,更能为你的接下来的面试加分。
这里说下简历上需要注意的三点:
- 要写上你在项目中使用过的技术栈或者是你准备的技术栈,切记贪多。很多小伙伴会写一大推自己学过的技术栈,但是只学了皮毛,面试官针对一个知识点问的细致了,就答不上来。
- 精通、熟练、掌握的用法。
- 写上项目的亮点和你为这个项目做的贡献,并取得了哪些业绩。
自我介绍
这里说一下我的一个主要模板,需要根据不同的公司有针对的准备不同的自我介绍。
各位面试官,您们好,很高兴得到这次面试机会,我叫XXX,毕业于XXX,具有较强的自学能力,在校期间通过自学掌握了相关的编程技术,
参加工作以来,先后独立开发了几个项目模块,主要包括XXX等,其中让我收获最大的一个项目是XXX,当时接到的任务就是XXX,在此期间我的主要任务参与前期的一些设计讨论以及后面的开发和维护,…………(这里可以介绍你通过什么技术解决了什么,完成了什么任务等)。经过这个项目开发使我在技术的掌握和问题的处理上都有了很大的进步。
我今天求职的岗位是.Net开发工程师,在XXX两年的.Net开发中,一直从事企业级应用管理系统的开发维护,使我拥有了扎实的编程基础和良好的编码习惯,并能够熟练的使用C#语言开发…(这里写上你准备好的技术栈)。也使我清楚的知道这个岗位的主要工作内容,并使我在这方面有了一定的能力和经验积累,我相信我能够胜任该职位的工作,我非常认可并喜欢贵公司的理念,也希望贵公司能够给我一次机会,让我加入到贵公司中。谢谢
常见的面试题
-
.Net简述面向对象中封装、多态、继承的概念
答:封装:把一些功能的实现写在一个文件中,对外只开放一个接口,调用者通过这个接口来调用方法
继承:子类继承父类中的方法和属性,并且子类可以拥有自己的一些方法和属性
多态:通过继承实现不同对象在调用相同的方法时,产生不同的结果,这就是多态,重写或者重载 -
简述一下IOC和AOP
IOC的概念
IOC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。
对象A依赖于对象B,当对象 A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。
IOC:控制反转,其实是一种思想,通过new来创建一个对象,是程序主动创建依赖对象。
IOC的作用:消减计算机程序的耦合(只能解决程序间的依赖关系)
AOP的概念
1、Aop:面向切面编程
2、经典应用:事务管理、性能监视、安全检查、缓存 、日志等
优势:
减少重复代码
提高开发效率
维护方便 -
C#中的委托是什么?事件是不是一种委托?
委托的本质是一个类,委托是将一种方法作为参数代入到另一种方法。 事件是委托的实例,事件是一种特殊的委托。 //比如:onclick事件中的参数就是一种方法。 -
C#静态构造函数特点是什么?
最先被执行的构造函数,且在一个类里只允许有一个无参的静态构造函数 执行顺序:静态变量>静态构造函数>实例变量>实例构造函数 -
CTS、CLS、CLR分别作何解释
CTS:通用类型系统。CLS:通用语言规范。CLR:公共语言运行库。 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。 -
C#中什么是值类型与引用类型?
值类型:struct、enum、int、float、char、bool、decimal 引用类型:class、delegate、interface、array、object、string -
请详述在C#中类(class)与结构(struct)的异同?
class可以被实例化,属于引用类型, class可以实现接口和单继承其他类,还可以作为基类型,是分配在内存的堆上的 struct属于值类型,不能作为基类型,但是可以实现接口,是分配在内存的栈上的. -
new关键字的作用
运算符:创建对象实例 修饰符:在派生类定义一个重名的方法,隐藏掉基类方法 约束:泛型约束定义,约束可使用的泛型类型 -
int?和int有什么区别
int?为可空类型,默认值可以是null int默认值是0 int?是通过int装箱为引用类型实现 -
C#中值传递与引用传递的区别是什么?
值传递时,系统首先为被调用方法的形参分配内存空间,并将实参的值按位置一一对应地复制给形参,此后,被调用方法中形参值得任何改变都不会影响到相应的实参;
引用传递时,系统不是将实参本身的值复制后传递给形参,而是将其引用值(即地址值)传递给形参,因此,形参所引用的该地址上的变量与传递的实参相同,方法体内相应形参值得任何改变都将影响到作为引用传递的实参。
简而言之,按值传递不是值参数是值类型,而是指形参变量会复制实参变量,也就是会在栈上多创建一个相同的变量。而按引用传递则不会。可以通过 ref 和 out 来决定参数是否按照引用传递。 -
C#中参数传递 ref 与 out 的区别?
(1)ref指定的参数在函数调用时必须先初始化,而out不用
(2)out指定的参数在进入函数时会清空自己,因此必须在函数内部进行初始化赋值操作,而ref不用 总结:ref可以把值传到方法里,也可以把值传到方法外;out只可以把值传到方法外 注意:string作为特殊的引用类型,其操作是与值类型看齐的,若要将方法内对形参赋值后的结果传递出来,需要加上ref或out关键字。 -
C#中什么是装箱和拆箱?
装箱:把值类型转换成引用类型 拆箱:把引用类型转换成值类型 装箱:对值类型在堆中分配一个对象实例,并将该值复制到新的对象中。 (1)第一步:新分配托管堆内存(大小为值类型实例大小加上一个方法表指针。 (2)第二步:将值类型的实例字段拷贝到新分配的内存中。 (3)第三步:返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。
拆箱:检查对象实例,确保它是给定值类型的一个装箱值。将该值从实例复制到值类型变量中。 在装箱时是不需要显式的类型转换的,不过拆箱需要显式的类型转换。 int i=0; System.Object obj=i; //这个过程就是装箱!就是将 i 装箱! int j=(int)obj;//这个过程 obj 拆箱! -
C#实现多态的过程中 overload 重载 与override 重写的区别?
override 重写与 overload 重载的区别。 重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要 override 是进行基类中函数的重写。实现多态。 重载:是方法的名称相同,参数或参数类型不同;重载是面向过程的概念。 重写:是对基类中的虚方法进行重写。重写是面向对象的概念。
更多面试题可以关注博主获取,后续会开放资源供大家获取。
项目经验
这个是面试中最重要的了,基本都会根据你做的项目来进行询问里面遇到的一些技术,遇到的一些问题怎么解决的等等,要写上你在项目中使用过的技术栈或者是你准备的技术栈,切记贪多。很多小伙伴会写一大推自己学过的技术栈,但是只学了皮毛,面试官针对一个知识点问的细致了,就答不上来。
开放性问题
-
你有没有带领团队的经验
我在以往的项目中与团队成员都能够融洽相处,我们每周都会有技术培享会,我也会分享一些技术来相互学习,我们有时候周六会有技术的培训,我也针对自己掌握的技术做了几次培训,虽然我没有带队的经验,但我相信我自己是能够做到的。 -
为什么选择这家公司?
我了解到贵公司在ERP行业属于领头行业,业务方面最为全面,研发实力也最为雄厚,通过公司的官方博客我还了解到公司的企业文化,我非常希望能加入到这样一个优秀的企业中,让我能够实战研发能力,我会女里的工作,证明自身的价值。 -
对本公司了解多少?
我了解到贵公司是中国最早的互联网即时通信软件开发商,是我国互联网服务以及移动增值服务的提供商,并一直致力于即时通信以及相关的增值业务的服务运营。 -
你曾经面临最大的专业挑战是什么?你是怎么战胜它的?
在项目开发过程中也遇到了很多问题,其中让我印象比较深刻的一个问题是XXX,通过这个问题也是我认识到,在编写代码时不仅要注意代码的逻辑和可读性,同时也要考虑一下这些代码有没有可能会出现某些问题。 -
你认为自己的技术水平怎么样?
经过这两年的积累和成长,我对自己的技术很有信心,我觉得我算一个中级的开发者,我感觉我可以胜任相关的各种开发任务。 -
你对加班的看法?
如果是工作需要,我会义不容辞的加班,我本身没有什么负担,可以全身心的投入到工作中,同时我也会提高工作效率,减少不必要的加班。 -
你有什么优点?
我的优点是有足够的专业能力,工作认真负责,比如在项目的开发过程中,我作为项目的主要开发人员,每天都会认真规划和编写开发日程,方便其他成员了解开发进度并及时跟进项目进度。 -
你有什么缺点?
缺点的话,比较执着把,比如有时候会因为一个技术问题导致很长时间或者可能加班到很晚都在研究怎么处理这个问题,这样有时候也会误了其他方面的工作,工作比较按部就班吧,总是按照主管的要求去完成任务,还有就是自己的工作范围内有创新意识,但是没有及时的分享给其他的同事,这些问题我也一直在改善,我也相信我能够很快的解决。 -
你的职业规划是什么?
现在最大的愿望就是能入职贵公司,虚心向周围优秀的同事学习,追赶他们,让自己变得更专业,然后三到五年的一个计划就是达到高级工程师的水平,在此期间我也会注重自己管理方面知识的积累,如果三年以后在管理方面有一些能力的话,我会向技术主管和项目经理的方向努力发展。
寄语
用你的自信,书写你的人生;用你的能力,展现你的风采;用你的态度,铺筑前进的道路。
评论记录:
回复评论: