2020最新面试宝典带答案MVC专题
注:答案均以红色字体标注!
文章目录
1、使用MVC模式有什么优点?
答:可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。 视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。 模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。 潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。
2、请简述使用ASP.NET MVC框架访问一个页面的执行流程。
答:一共分为以下几个步骤:
第一步:当请求到达我们的服务器时,在asp.net取得控制之前,windows操作系统的核心组件 HTTP.SYS一直在监听请求端口, 接下来asp.net会通知所有注册的httpModule。 有一个httpModule是默认注册了的。那就是UrlRoutingModule,也就进入了路由模块.核心路由接管控制。
第二步:当核心路由系统接管控制之后,会把请求封装成 RequestContext这样一个数据结构。这个数据结构中包含了几乎所有的请求信息,以便后面的组件可以任意的去使用它。mvc框架就是使用requestContext中的信息,将控制权转移给对应的controller对象,并提出其中的action参数。
第三步:mvcRouteHandler从核心路由模块过渡到mvc框架之后,就要生产对应的controller对象类处理了。
这些对象 你可以采用 不标准的方法通过直接实现Icontroller接口来创建 ,也可以通过controllerFactory来实现。当然这个控制器工厂可以是你自定义的实现了IcontrollerFactory接口的自定义工厂(或者是默认工厂的子类),也可以是mvc框架自带的DefaultControllerFactory来创建。
第四步:controllers内部的这些action并不是直接自己invoke的 而是通过一个IActionInvoker来触发执行,然后返回actionResult给ViewEngine去解析。同理,这个IActionInvoker我们也可以自行实现。
3、请说明MVC Filter的特点、思想;框架提供的Filter有哪些?如何扩展Filter?
答:Filter思想:AOP面向切面编程的思想,指的是:在不破坏原有的代码的情况下,可以动态的扩展功能。
.NetFramework 框架下的MVC一共有系统默认的三个Filter:
Authorize–权限Filter,专门用来控制权限。
ActionFilter:方法执行前/后,视图替换前后,扩展功能。
ExceptionFilter:异常处理Filter.
扩展Authorize:自定义Filter,继承自Authorize,覆写父类虚方法;标记在需要验证权限的方法、控制器即可,也可全局注册;
扩展ActionFilter:无法直接使用,自定义Filter,继承自ActionFilter,覆写父类虚方法,标记在需要扩展功能的方法、控制器即可。
扩展ExceptionFilter:自定义ExceptionFilter,继承自ExceptionFilter,实现虚方法即可!标记在需要捕捉异常的方法、控制器即可,也可全局注册;
4、请说明MVC中Filter的几种注册方式。
答:三种注册方式:方法注册,控制器注册、全局注册;
5、请详解MVC路由的特点!
答:能够根据系统需求,灵活的划分请求规则(不同模块请求的 URL 是不一样的)。屏蔽物理路径,提高系统的安全性,以上情况是无法根据 URL 分析视图文件在站点目录中的位置。有利于搜索引擎优化,可以将 URL 请求统一规范,以后维护中,如果页面发生变化,URL 可以保持不变。
可分为URL 模式的定义:url: “{占位符1}字面量{占位符2}字面量{占位符n}”,占位符:可以是一个字符串或字符,比如“x”、“id”、“year”等。字面量:可能是一个比较固定的字符,比较常见的是斜杠“/”;也可以是字符串。特殊规则:不能以斜杠“/”或波浪线“~”字符开头,不能包含“?”,同时占位符也不能连续。
可以定义多个路由,路由匹配的时候,只能匹配一个。注意路由名称不能重复;如果项目存在分区,需要添加string[] namespaces命名空间。string[] namespaces 这个命名空间 在分区的时候用到。
6、请说明MVC中global.asax.cs 文件的意义?
答:global.asax这个文件包含全局应用程序事件的事件处理程序。它响应应用程序级别和会话级别事件的代码。
运行时, Global.asax 将被编译成一个动态生成的 .NET Framework 类,该类是从HttpApplication基类派生的。
因此在global.asax中的代码可以访问HttpApplication类中所有的public或者protected的成员
global.asax不被用户直接请求,但global.asax中的代码会被自动执行来响应特定的应用程序事件。
global.asax是可选的,而且在一个web项目中是唯一的,它应该处于网站的根目录。
7、请说明在MVC视图中如果不使用using关键字,如何应用某个自定义实体类型!
答:可以通过Views文件夹下的WebConfig 文件配置:在该文件下的system.web.webPages.razor节点下的namespaces节点添加引用即可。(如果无法识别,请尝试重启VS)
8、请说明MVC中Area的作用以及在MVC中如果使用了Area以后我们需要注意什么?
答:Area:区域,从MVC 2开始,引进了区域的概念,它允许将模型,视图和控制器分成单独的功能节点,换句话说,可以在大型复杂的网站中建立几个区域(模块),每一个区域都有Model,View,Controller机制.
Area可以完全独立出一个项目。
在使用Area的过程中,注意路由的问题,需要在每个路由中指定命名空间。
9、请说明如何抓取并处理,异常Filter 抓取不到的异常?
答:可以在全局文件Global.asax中,编写Application_Error(object sender, EventArgs e)方法,可以抓取到所有异常,并做处理。
案例如下:
protected void Application_Error(object sender, EventArgs e) { var error = Server.GetLastError(); //获取到没有处理的异常 HttpContext.Current.Response.Write($"Error:{error.Message}"); //这就是异常消息的输出 Server.ClearError(); //清除这个异常 }
选择题:
1) 请问在ASP.NET MVC中(B)不属于默认规则的文件夹?
A、App_Start
B、App_End
C、Views
D、Controllers
2)在ASP.NET中以下创建Cookie语法错误的是(BD)?(多选)
A、Response.Cookies[Cookie的名称].Value = 变量值;
B、Request.Cookies[Cookie的名称].Value = 变量值;
C、HttpCookie hcCookie = new HttpCookie(Cookie的名称, 变量值);
Response.Cookies.Add(hcCookie);
D、HttpCookie hcCookie = new HttpCookie(Cookie的名称, 变量值);
Request.Cookies.Add(hcCookie);
3)在ASP.NET MVC的视图中注释错误的是(B)?
A、<!– html注释–>
B、<!%– 代码块–%!>
C、<%– 代码块–%>
D、<% //单行注释 %>
4)“StudentService”一般属于三层中(B)的命名规范?
- 显示层
- 业务逻辑层
- 数据访问层
- 模型层
5)看下面代码
class TesString{ static void Main(){ string strOriginal; strOriginal = Console.ReadLine(); bool A = strOriginal.Equals("A"); Console.WriteLine(A.ToString()); int B = strOriginal.Length; Console.WriteLine(B.ToString()); } }
程序运行时,输入” AAAAA”(五个A的前面有三个空格),则程序输出为(A)
A false
8
B -1
8
C 0
8
D false
5
6 ) 在C#程序中,通过(A )关键字引用命名空间。
a) using
b) include
c) import
d) have
7 ) 阅读下面的代码:
class Class1 { static void Main(string[]args) { float f = 123.56F; object obj = f; f = 789.123F; Console.WriteLine("f={0}",f); Console.WriteLine("obj={0}",obj); Console.ReadLine(); } }
程序运行后将在控制台窗口显示(D)。
- f=789.123 obj=789.123
- f=123.56 obj=123.56
- f=123.56 obj=789.123
- f=789.123 obj=123.56
8 ) 针对switch语句,下例理解正确的是()(选择二项)
- case语句和default语句是必须讲究先后顺序排列的。
- case语句和default语句是可以不讲究先后顺序排列的。
- default语句是可选的。
- default语句是必须的。
9 ) .NET三层架构中通常指的哪三层(C)
- 模型层、数据访问层、显示层
- 通用层、业务逻辑层、显示层
- 显示层、业务逻辑层、数据访问层
- 显示层、数据访问层、通用层
10) .NET中下列关于三层架构的引用关系正确的是(C)
a)数据访问层引用业务逻辑层、业务逻辑层引用显示层
b)数据访问层引用显示层、显示层引用业务逻辑层
c) 显示层引用业务逻辑层、业务逻辑层引用数据访问层
d) 以上说法都不对
11)在.NET中,关于异常处理组合正确的是(CD)(选择两项)
a) try块是必须的,catch和finally都可以不写。
b) catch块是必须的try和finally都可以不写
c) try块是必须的,catch和finally可以选择其中一个组合。
d) try块是必须的,catch块可以有多个,finally可选。
12)在C#中定义一个数组,正确的代码为(D)
- int arraya = new int;
- int[5] arraya = new int;
- int arraya = new int[5];
- int[] arraya = new int[5];
13)阅读下列代码:
class MyAnimals { private int bodytemp=98; public int BodyTemp { set{ bodytemp=value; } } public void PrintBodyTemp() { Console.WriteLine("温度为:{0}",BodyTemp); } } class Class1 { static void Main(string[]args) { MyAnimals a = new MyAnimals(); a.BodyTemp = 56; a.PrintBodyTemp(); } }
请问运行上述代码的结果为(A)
- 将输出:”温度为:56″
- 输出:”温度为:98″
- 将显示代码”a.BodyTemp=56;”有错误
- 将显示代码为”Console.WriteLine(“温度为:{0}”,BodyTemp);”有错误
14)C#中可选参数,阅读以下代码:
public double AddCalc(double num1,double num2,string operational) { double result=0; //中间代码省略.... return result; }
能够正确调用的是(D)
- AddCalc(operational=”+”,num1=2,num2=3)
- AddCalc(“+”,2,3)
- AddCalc(operational=”+”,2,3)
- AddCalc(2,3,”+”)
15)在ASP.NET MVC中关于控制器和视图数据传递说法正确的是(C)
- ViewData 存放的值在视图中使用无需类型转换
- ViewBag 存放的值在视图中使用需要类型转换
- TempData 主要用于多个动作方法传递数据
- 以上说法都不对
16)在ASP.NET MVC中关于路由、控制器说法描述错误的是(C)
- 路由系统主要是将各种URL请求转发给控制器处理
- 控制器中动作方法可以添加多个
- 视图名称不一定需要和动作方法对应
- URL中可以通过问号“?”键值的方式进行值传递
17)在ASP.NET中以下(D)不属于数据验证特性。
- Required必填验证
- Compare比较验证
- StringLength 长度验证
- Result 正确验证
18)以下关于委托定义说法错误的是(D)
- 委托是根据特定的方式传递参数值
- 委托可以将方法作为参数进行传递
- 委托是多线程中必须要使用到的方式
- 以上说法都不正确
19)Razor视图中使用的特殊字符是(B)
- $
- @
- &
- #
20)在ASP.NET以下对于Linq说法不正确的是(D)
- Linq可以在程序中有效的遍历查询集合或数组
- Linq语法包含以下关键词select、from、in、order by 等…
- Linq可以直接操作数据库物理数据
- 以上说法都不正确
21)下面代码的输出结果是( B )
int x = 5; int y = x++; Console.WriteLine(y); y = ++x; Console.WriteLine(y);
a) 5 6
b) 5 7
c) 6 7
d) 5 8
22) 在C#中,下列代码的运行结果是(D)。
int[] num = new int[]{1,3,5}; ArrayList arr = new ArrayList(); for(int i=0;i<num.Length;i++) arr.Add(num[i]); Console.Write(arr[2]);
a) 1
b) 4
c) 3
d) 5
23)以下C#程序代码:
int A = 3; int B = 4 Console.WriteLine(A+B);
因为第二行代码少写了一个分号,程序运行时将(D )。
- 程序中产生逻辑错误
- 程序运行后中断
- 程序可以正常运行
- 程序语法错误
24)以下的c#程序代码:
int count = 3; while (count > 1) { Console.WriteLine(count); --count; }
程序运行时在控制台打印输出值为(C)。
a)2
1
b)3
2
1
c)3
2
d)3
3
25)请阅读以下代码:
for(int i=1;i<=3;i++){ switch(i){ case 1:Console.write(i.ToString()); case 2:Console.write((i * 2).ToString()); case 1:Console.write((i * 3).ToString()); }
上述关于C#代码的描述正确的是(D)
- 运行时输出149
- 运行时输出123246369
- 运行时在屏幕上没有输出
- 程序将报告编译错误,提示Case1已经出现在改语句中,不能运行
除非注明,文章均由 Dotnet9 整理发布,欢迎转载。
转载请注明:
作者:Dotnet9
链接:https://dotnet9.com/9250.html
来源:Dotnet9
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。