.Net面试经验总结(.Net/C#)
首先是简历
简历一定要认真对待,不能随随便便找个模板,它是你能不能得到面试的一个关键。
简历的模板可以参考该网站超级简历的程序员简历模板。
自我介绍
参加工作以来,先后独立开发了几个项目模块,主要包括XXX等,其中让我收获最大的一个项目是XXX,当时接到的任务就是XXX,在此期间我的主要任务参与前期的一些设计讨论以及后面的开发和维护,…………(这里可以介绍你通过什么技术解决了什么,完成了什么任务等)。经过这个项目开发使我在技术的掌握和问题的处理上都有了很大的进步。
我今天求职的岗位是.Net开发工程师,在XXX两年的.Net开发中,一直从事企业级应用管理系统的开发维护,使我拥有了扎实的编程基础和良好的编码习惯,并能够熟练的使用C#语言开发基于Web Form和Asp.Net MVC架构的应用程序。也使我清楚的知道这个岗位的主要工作内容,并使我在这方面有了一定的能力和经验积累,我相信我能够胜任该职位的工作,我非常认可并喜欢贵公司的理念,也希望贵公司能够给我一次机会,让我加入到贵公司中。谢谢
常见的面试题
.Net
.Net简述面向对象中封装、多态、继承的概念
答:封装:把一些功能的实现写在一个文件中,对外只开放一个接口,调用者通过这个接口来调用方法
继承:子类继承父类中的方法和属性,并且子类可以拥有自己的一些方法和属性
多态:通过继承实现不同对象在调用相同的方法时,产生不同的结果,这就是多态,重写或者重载
简述private、protected、public修饰符的访问权限
答:private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 当前程序集内可以访问。
abstract、class、interface有什么区别
答:相同点:都不能被实例化,都可以通过继承来实现其抽象方法。
不同点:接口支持多继承,抽象类不能实现多继承;
接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含它们的实现;抽象类可以定义字段、属性、包含有实现的方法。
接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
写一段C#访问SqlServer数据库的代码(来列举出ADO.Net中五个主要对象)
答:
列举两种你所使用过的设计模式,简述他们的概念和好处
答:单例模式:确保一个类只有一个实例,并提供一个访问它的全局访问点
C#中值类型与引用类型的区别,作为参数传递时有何不同
赋值区别:将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只把对象的引用的指针赋值给变量,使得变量引用与对象共享同一个内存地址。
继承区别:值类型不能派生出新的类型:所有的值类型均隐式派生自 System.ValueType。引用类型一般都有继承性。
内存分配区别:值类型通常分配在栈上,引用类型通常分配在托管堆上
值类型不可能包含 null 值,然而,可空类型功能允许将 null 赋给值类型。
值类型传递的是值的副本,引用类型传递的是对象引用,所以值参数的修改不影响原始值,引用类型的修改影响原始值;
C#中使用StringBuilder拼接字符串时有何优点
StringBuilder是动态对象,允许扩充他所封装的字符串中的字符数量,在生成string对象之前,不会产生任何string对象,所以在进行大量的字符串拼接或者频繁的堆某一个字符串进行操作时最好使用StringBuilder,而不要使用string
C#委托与与泛型的概念,事件是不是一种委托
委托是一种可用于封装命名和匿名方法的引用类型,委托类似于指针,但是委托是类型安全和可靠的,委托类都继承于System.Delegate类型,委托类型的声明和方法签名类似,有一个返回值和任意数目任意类型的参数。
泛型是C#语言和公共语言运行库(CLR)中的一个新功能,它将类型参数的概念引入了.NET Framework,通过使用泛型可以大大的简化强制类型转换或装箱操作的过程。
一列数的规则如下:1、1、2、3、5、8、13、21、34……求第30位数是多少,用递归算法实现
解答:总结递归规律:F(n)=F(n-2)+F(n-1) Fibonacci数列
简述进程和线程的区别,以及写出多线程常用的对象和方法
进程是系统进行资源分配和调度的单位;线程是进程内部的一个执行单元,是CPU调度和分派的单位,一个线程可以创建和撤销另一个线程,同一个进程中的多个线程也可以并发执行
简述WebService、WebApi、WCF的区别,以及使用场景
列举Asp.Net页面之间传递值的几种方式
1.使用QueryString, 如…?id=1; response. Redirect()…
2.使用Session变量
3.使用Server.Transfer
4.Cookie传值
Asp.Net Session有什么作用,请描述你对Session的理解
简述重载和重写的概念,并手写一个简易的重载和重写
重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载是面向过程的概念
try
{
可能会出现异常的代码;
}
cath
{
出现异常后要执行的代码;
}
User类定义如下:
请使用Linq或者Lambda一种实现以下查询
1.查询姓名中包含“张”的所有人
2.查询年龄在20到30岁之间的人(包含)
3.查询出2008年三月出生的所有人
4.查询姓名等于“张三”年龄最大的第一个人
5.按年龄分组查询每段年龄有多少人
是否使用过EF、Dapper等ORM、框架,简述这些框架的好处
提高开发效率,降低开发成本
使开发更加对象化
可移植
可以很方便地引入数据缓存之类的附加功能
WEB端的
JavaScript中的基础类型有哪些
Undefined、Null、Boolean、Number和String
简述函数与闭包的概念
函数:就是封装了一段可被重复调用执行的代码块,通过此代码块可以实现大量代码的重复使用
闭包就是能够读取其他函数内部变量的函数,由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”
请写出jQuery id class 属性 标签选择器语法
id选择器:KaTeX parse error: Expected 'EOF', got '#' at position 3: ('#̲ids')、类选择器:(’.myClass’)、元素选择器:$(‘div’)
Ajax的概念,ajax请求的五个步骤
AJAX(即:异步的JavaScript和XML),是一种实现无页面刷新获取服务器数据的混合技术。
SQL方面的
用一条SQL语句查询出每门课程都大于80的学生的姓名
答:
使用SQL实现分页查询
写一条sql语句取出表A中第31到40的记录(SqlServer,以自动增长的ID作为主键,注意:ID可能不是连续的)
答:
编写SQL根据部门信息T_Org中的部门编号OrgCD、部门名称字段OrgName、以及员工信息表T_Employee中所属部门编号字段OrgCD、来更新员工信息表T_Employee中的所属部门字段OrgName
找出教师表(表名Teacher)中姓名(字段名Name)重复的数据,然后删除多余重复的记录,只留ID小的那个。
什么叫Sql注入,如何防止?
答:
用户根据系统的程序构造非法的参数从而导致程序执行不是程序员期望的恶意SQL语句。使用参数化的SQL就可以避免SQL注入。
介绍存储过程的基本概念和它的优缺点
答:
存储过程是一套已经预先编译好的SQL代码
1.运行速度:存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用,所以执行速度会比普通sql快。
2.减少网络传输:存储过程直接就在数据库服务器上跑,所有的数据访问都在数据库服务器内部进行,不需要传输数据到其它服务器,所以会减少一定的网络传输。
3.可维护性
4.增强安全性
5.可扩展性:应用程序和数据库操作分开,独立进行
现有一学生表如下:
请编写Sql查询出如下结果:
6.获取每个班级的English的平均成绩,并按照降序排序
7.获取有一门不及格的人,并统计每个班级的不及格人数(小于60分不及格)
注意:上面是找工作期间常遇到的部分面试题,其中设计模式基本都会考到
项目经验
这个是面试中最重要的了,基本都会根据你做的项目来进行询问里面遇到的一些技术,遇到的一些问题怎么解决的等等,这就要根据自己的项目来回答了
开放性问题
在工作中学习到了什么?
首先技术方面每个项目都会学到一些特定的技术知识,我在与同事的沟通合作中,注重团队内部的团结,在工作中学习认识到合作的宝贵,以及实践的重要性。
你有没有带领团队的经验
我在以往的项目中与团队成员都能够融洽相处,我们每周都会有技术培享会,我也会分享一些技术来相互学习,我们有时候周六会有技术的培训,我也针对自己掌握的技术做了几次培训,虽然我没有带队的经验,但我相信我自己是能够做到的
为什么选择这家公司?
我了解到贵公司在ERP行业属于领头行业,业务方面最为全面,研发实力也最为雄厚,通过公司的官方博客我还了解到公司的企业文化,我非常希望能加入到这样一个优秀的企业中,让我能够实战研发能力,我会女里的工作,证明自身的价值
对本公司了解多少?
我了解到贵公司是中国最早的互联网即时通信软件开发商,是我国互联网服务以及移动增值服务的提供商,并一直致力于即时通信以及相关的增值业务的服务运营
你曾经面临最大的专业挑战是什么?你是怎么战胜它的?
在项目开发过程中也遇到了很多问题,其中让我印象比较深刻的一个问题是XXX,通过这个问题也是我认识到,在编写代码时不仅要注意代码的逻辑和可读性,同时也要考虑一下这些代码有没有可能会出现某些问题。
你认为自己的技术水平怎么样?
经过这两年的积累和成长,我对自己的技术很有信心,我觉得我算一个中级的开发者,我感觉我可以胜任相关的各种开发任务
你对加班的看法?
如果是工作需要,我会义不容辞的加班,我本身没有什么负担,可以全身心的投入到工作中,同时我也会提高工作效率,减少不必要的加班
如何评价你上家公司,你为什么从上家公司离职?
上一家公司在项目管理和系统集成方面较为突出,从中也学习到了很多的东西,经过这两年对ERP中一些系统的研发,使我了解了相关的业务流程并掌握了很多开发上的技巧,以及相关的一些技术,
以前的行业发展空间比较有限
原来的工作与自己的职业规划不合
原来的业务相对传统,我想做一些偏向互联网方面的一些产品,
公司在新的研发方向上没有一个明确的信息,
自己在过去的几年中也有了一定的经验积累,所以想寻求更适合自己发挥的一个平台
并且公司所用的技术栈不够丰富,
我对XXX类系统的前景更看好,我也希望能够扩展自己的技能和对业务的了解,因此我希望寻找一家做专业的B2B系统的企业,所以做了离职的决定
你有什么优点?
我的优点是有足够的专业能力,工作认真负责,比如在项目的开发过程中,我作为项目的主要开发人员,每天都会认真规划和编写开发日程,方便其他成员了解开发进度并及时跟进项目进度
你有什么缺点?
缺点的话,比较执着把,比如有时候会因为一个技术问题导致很长时间或者可能加班到很晚都在研究怎么处理这个问题,这样有时候也会误了其他方面的工作,工作比较按部就班吧,总是按照主管的要求去完成任务,还有就是自己的工作范围内有创新意识,但是没有及时的分享给其他的同事,这些问题我也一直在改善,我也相信我能够很快的解决
你的职业规划是什么?
现在最大的愿望就是能入职贵公司,虚心向周围优秀的同事学习,追赶他们,让自己变得更专业,然后三到五年的一个计划就是达到高级工程师的水平,在此期间我也会注重自己管理方面知识的积累,如果三年以后在管理方面有一些能力的话,我会向技术主管和项目经理的方向努力发展
如果你离职,你的老板有什么反应?
我和现任公司的老板关系非常好,我在项目中也承担了一个核心的研发工作,因此我离开时,他非常的不舍,但我更希望有自己的一些职业发展,所以我们经过友好的交谈,他也尊重我离职的这个决定,我也非常感谢他的理解和支持