个人总结ASP.NET必备面试题
1.你能解释下MVC的完整流程吗?
所有的终端用户请求被发送到控制器。控制器依赖请求去选择加载哪个模型,并把模型附加到对应的视图。附加了模型数据的最终视图做为响应发送给终端用户。
2. 那你说一下你对MVC的理解?
MVC是一种设计模式即主要的思想,是一种功能结构模块化的一种开发思想,目的是更好的管理自己的代码。
ASP.NET MVC是微软对ASP.NET WebForm框架做出的彻底重构,使Web应用程序的开发更加容易,更加清楚,而推出的一种UI框架。
3.什么是MVC中的Razor?
它是一个轻量级的视图引擎。
4.LinQ是什么?
LINQ是一种用来进行数据访问的编程模型,使得.NET语言可以直接支持数据查询LINQ的目标是降低访问数据的复杂度,
LINQ可以用统一的方法访问不同类型的数据,可以将数据作为对象使用,能够更好地与编程模型集成
5.Lambda表达式是什么呢?
Lambda表达式是匿名函数,而匿名函数又是委托,所以lambda表达式就是委托。
6.EF是什么?
EF是微软以Ado.net为基础发展而来的对象关系映射的orm框架,有三种实现方式:Code First,DB First,Model First,我们常用的是DB Frist,
设计好数据库,再进行代码编程,通过上下文对象实现交互。EF和Dapper的区别,EF是强类型的ORM框架,Dapper是弱类型的ORM框架
一、 Dapper
问题:简述你对Dapper的了解?
答案:1、Dapper是一个轻量级的ORM类,代码就一个SqlMapper.cs文件,编译后只有70k
2、Dapper支持多数据库,支持SqlServer,MySql,Oracle等
3、Dapper语法简单,容易上手
7、什么是委托,事件是不是一种委托?
1、委托可以把一个方法作为参数代入另一个方法。
2、委托可以理解为指向一个函数的引用。
3、事件是一种特殊的委托
delegate <函数返回类型> <委托名> (<函数参数>)
8.c#多线程是什么
多线程的优点:可以同时完成多个任务;可以使程序的响应速度更快;可以节省大量时间进行处理任务;可以随时停止任务;可以设置每个任务的优先级,以优化程序性能。
9.WebApi概述
Web API是在.NET Framework之上构建的Web的API的框架,Web API是一个编程接口,用于操作可通过标准HTTP方法和标头访问的系统,
Web API需要基于.NET 3.5或更高版本才可以进行开发
10.什么是WebService
webservice是一种跨平台,跨语言的规范,用于不同平台,不同语言开发的应用之间的交互,是基于网络的、分布式的模块化组件,它执行特定的任务,
遵守具体的技术规范。
11.存储过程是什么?有什么用?有什么优点?用什么来调用?
存储过程是预编译,安全性高,也是大大提高了效率,存储过程可以重复使用以减少数据库开发人员的工作量,复杂的逻辑我们可以使用存储过程完成,
在存储过程中我们可以使用临时表,还可以定义变量,拼接sql语句,调用时,只需执行这个存储过程名,传入我们所需要的参数即可,
12.何为触发器?
触发器是一种特殊的存储过程,主要是通过事件触发而被执行。它可以强化约束来维护数据的完整性和一致性,可以跟踪数据库内的操作从
而不允许未经许可的更新和变化。可以级联运算,
常见的触发器有三种:分别应用于Insert , Update , Delete 事件。
13.SQL优化
1.选择最有效率的表名顺序2.WHERE子句中的连接顺序3.SELECT查询中避免使用‘*‘4.减少访问数据库的次数5.使用DECODE函数来减少处理时间
6.用Where子句替换HAVING子句7.减少对表的查询使用表的别名9.用EXISTS替代IN。10.用NOT EXISTS替代NOT IN。11.用表连接替换EXISTS。
12.用EXISTS替换DISTINCT。13.用索引提高效率14.避免在索引列上使用计算15.避免在索引列上使用IS NULL和IS NOT NULL
14..事务的作用?
事物简单来说就是要么一起执行,要么就都不执行,如有一个地方出错,全部回滚,不执行
事务4大属性:
1 原子性(Atomicity):事务是一个完整的操作。
2 一致性(Consistency):当事务完成时,数据必须处于一致状态。
3 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的。
4 持久性(Durability):事务完成后,它对于系统的影响是永久性的。
T-SQL中管理事务的语句:开始事务:begin transaction提交事务commit transaction回滚事务 rollback transaction
事务分类:显式事务:用begin transaction明确指定事务的开始。
2 隐性事务:当以隐性事务模式操作时,SQL Servler将在提交或回滚事务后自动启动新事务。无法描述事务的开始,只需要提交或回滚事务。
3 自动提交事务:SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。
什么是Ajax异步调用?
就是不需要加载整个页面的数据,只请求一小部分的数据,这样可以实现了异步的调用。
15.ORM是什么?
ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,
这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
ORM方法论基于三个核心原则: 简单:以最基本的形式建模数据。 传达性:数据库结构被任何人都能理解的语言文档化。
精确性:基于数据模型创建正确标准化的结构。
16.什么叫做泛型?
从编程的角度说是在定义类或者方法的时候省去具体的类型,由调用者来指定,类型+泛型类型合成得到真正的类型。从实现机制上说,泛型是CLR在
运行时动态根据泛型类型创建的匿名类型。从OO设计的角度说,泛型体现了多态性。泛型使得程序员可以复用数据结构和算法,并且适应不同的类型,
享有编译期间的强类型检查和语法提示。一些经典的FCL提供的泛型类型和接口: List<T>、Dictionary<T1, T2>这个属于复用数据结构
IComparer<T>、IEnumerable<T>这个属于复用算法
17. C#中值类型和引用类型分别有哪些?
值类型:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。引用类型:数组,用户定义的类、接口、委托,object,字符串。
18.在项目中如何解决高并发问题?
答案:尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。
优化数据库查询语句。
优化数据库结构,多做索引,提高查询效率。
统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。
能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。
解决以上问题后,使用服务器集群来解决单台的瓶颈问题。
19.敏捷开发?
敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方式。它并不是一门技术,而是一种开发方式,也就是一种软件开发的流程。
它会指导我们用规定的环节去一步一步完成项目的开发。
因为它采用的是迭代式开发,所以这种开发方式的主要驱动核心是人。
20.请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
1、session(viewstate) 简单,但易丢失
2、application 全局
3、cookie 简单,但可能不支持,可能被伪造
4、input type=”hidden” 简单,可能被伪造
5、url参数简单,显示于地址栏,长度有限
6、数据库稳定,安全,但性能相对弱
21.IOC容器?
IOC即控制反转,是一种设计思想,在之前的项目中,当我们需要一个对象时,需要new一个对象,而IOC的设计思想是我们将需要的对象注入到一个容器中,
就会获得我们所需要的资源
【扩展】:IOC和DI IOC是控制反转,DI是依赖注入,控制反转的解释有些模棱两可,而依赖注入就很明确,我们将需要的对象注入到容器中,获取所需要的资源
22.Ado.net五大对象?
(1)Connection对象
Connection 对象就像是打仗时候的通信兵,他们在打仗之前需要先接通司令部与各个作战单位之间的通信线路。之后作战命令的获取以及发布都要靠通信线路来完成。
这里的司令部就类似于服务器,各作战单位就类似于各应用程序。
(2)Command对象
执行一些简单操作命令,如:增删改删,即执行T-SQL语句。Command对象有几个比较重要的方法,如ExecuteNonQuery()方法,执行增删改命令,返回的是受影
响的行数。查询方法有2种:一个是ExecuteReader()方法,返回一个DataReader对象。还有ExecuteScale()方法,返回首行首列值。
(3)DataAdapter对象
数据适配器,从数据库中检索数据,再填充到本地数据集中。同时,我们可以利用DataAdapter,再将数据反向从DataSet中更新回数据库。DataAdapter使用中主
要有4个命令对象比较重要。它们分别是:SelectCommand、InsertCommand、UpdateCommand、DeleteCommand。SelectCommand,主要是从数据库中检索数据
InsertCommand、UpdateCommand、DeleteCommand这3个命令对象主要负责把本地数据集DataSet中的数据上传回服务器。我们主要使用的是前者。
DataAdapter的Fill方法,用于使用DataAdapter的SelectCommand的执行结果集来填充DataSet。
(4)DataReader对象
当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序地读取数据源中的数据,不作其它的操作
。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。此外,因为不用把数据全部传回,
故可以降低网络的负载。但是,当我们从数据源中一条一条的读取数据的时候,一定记得要时刻打开数据库的连接。
二、DataSet对象
DataSet 这个对象可以视为本地内存中的一个数据库,可以把从数据库中所查询到的数据保留到本地。DataSet 的能力不只是可以储存多个Table,
还可以透过DataAdapter 对象取得一些例如主键等数据表结构,并可以记录数据表间的关联。当我们使用DataSet读取数据的时候,数据库的连接是否
关闭已经无关紧要了。DataSet 对象可以说是ADO.NET 中重量级的对象,通过DataAdapter 对象这个桥梁,实现了与数据源沟通的能力 。