1、MVC中的TempData\ViewBag\ViewData区别?

答:页面对象传值,有这三种对象可以传。

Temp:临时的

Bag:袋子

(1)  TempData  保存在Session中,Controller每次执行请求的时候,会从Session中先获取 TempData,而后清除Session,获取完TempData数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删 除。具体代码层面,TempData获取过程是通过SessionStateTempDataProvider.LoadTempData方法从 ControllerContext的Session中读取数据,而后清除Session,故TempData只能跨Controller传递一次。

(2) ViewBag和ViewData只在当前Action中有效,等同于View

(3)ViewData和ViewBag 中的值可以互相访问,因为ViewBag的实现中包含了ViewData

2、ASP.NET和ASP.NET MVC的关系

答:

ASP.NET MVC是ASP.NET的子集

从mvc的核心命名空间System.Web.Mvc就能看出,因为System.Web是Asp.NET的核心命名空间。

ASP.NET MVC是在核心ASP.NET基础之上构建的。

具体体现在以下方面

(1)ASP.NET MVC依赖于HttpHandler

关于请求是怎么进入控制器的,其实就是用到了HttpHandler

(2)Session、Cookie、Cache和Application这些ASP.NET的对象保存机制在MVC中依然是需要用到的

(3)HttpContext、Request、Response、Server对象在MVC中仍然可以使用,在Controller中通过智能感知的形式很容易得到这些对象

3、阐述下MVC框架的机制,各个模块的作用?

答:

我们来了解MVC的三大组件(模型、视图、控制器)。
所谓模型,就是MVC需要提供的数据源,负责数据的访问和维护。
所谓视图,就是用于显示模型中数据的用户界面。
所谓控制器,就是用来处理用户的输入,负责改变模型的状态并选择适当的视图来显示模型的数据。
以下是我绘制的MVC三大组件之间的交互图。
从交互图中可以看出,MVC从用户发送请求到页面呈现结果大致经历了五个步骤,分别如下:
(1). 用户在浏览器输入地址,向页面发送请求(实则是向控制器发出相关命令);
(2). 控制器接受命令后,向模型请求获得相关的数据;
(3). 模型将相应的数据返回给控制器;
(4). 控制器将相关数据发送到指定的视图;
(5). 指定的视图呈现相关的数据。
 
当启动MVC网站时,用户输入的URL地址将首先传递到UrlRoutingModule模块,该模块将解析该URL并选择对应的URL路由,并得到对应的IHttpContext对象来处理该URL路由。在默认情况下,该IHttpContext对象就是MvcHandler对象,通过该对象来选择相关的控制器来处理用户的请求。即UrlRoutingModule模块和MvcHandler对象是MVC网站的入口点,主要实现:选择对应的控制器,实例化控制器对象,调用控制器的相关方法。以下表格更详细地说明页面请求的执行过程。
 
总结:

1、UrlRoutingModule模块截获请求,从路由表中得到该URL对应的RouteData
2、RouteData+URL封装成一个IHttpContext对象
3、IHttpContext对象从RouteData中得到Controller名字,根据名字反射创建Controller对象
4、Controller对象执行对应的Action方法,并返回View()

 
4、存储过程的优缺点?
 答:

优点:
1.执行速度快。存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.减少网络通信量。当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
 
缺点:
1、可移植性差。不同的数据库语法不一样哦
 
5、drop、truncate、delete三者删除的区别?
答:

一:用法和区别

drop:drop table 表名

删除内容和定义,并释放空间。执行drop语句,将使此表的结构一起删除。

truncate (清空表中的数据):truncate table 表名

删除内容、释放空间但不删除定义(也就是保留表的数据结构)。与drop不同的是,只是清空表数据而已。

truncate不能删除行数据,虽然只删除数据,但是比delete彻底,它只删除表数据。

delete:delete from 表名 (where 列名 = 值)

与truncate类似,delete也只删除内容、释放空间但不删除定义;但是delete即可以对行数据进行删除,也可以对整表数据进行删除。

二:注意

1.delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。

2.执行速度一般来说:drop>truncate>delete

3.delete语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。

4.truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发trigger。

5.truncate语句执行以后,id标识列还是按顺序排列,保持连续;而delete语句执行后,ID标识列不连续

6、描述EF和ado.net的优缺点?

答:

EF  优点:(1)面向对象编程

(2)代码量少,开发方便

缺点:(1)有一定的性能损耗

(2)优化的时候不灵活,不如直接写sql

ado.net 优点:(1)直接操作数据库,速度快

(2)优化sql灵活

缺点:(1)代码量大,自己处理的事情多

7、MVC的Filter有几种?分别是什么?主要特点是什么?

8、阐述下数据库的三大范式?

   答: 

第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。
个人理解:列不可分(原子性,即字段不可以再分)
 
第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
个人理解:不存在部分依赖(唯一性,不可以把多种数据保存在同一张表中,即一张表只能保存“一种”数据)
 
第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
个人理解:不存在传递依赖(直接性,每一列都和主键直接相关,而不能间接相关)

9、怎么理解线程池,他的优缺点有哪些?

答:  线程池是用来存放线程的对象池。线程池的目的就是因为创建一个线程代价比较高,因此我们使用线程池来复用线程。

优点:

(1)减少创建线程的开销,线程能复用

缺点:

(1)不能设置池中线程的优先级和名称

(2)线程池中的所有线程都是后台线程。如果进程的所有前台线程都结束了,所有的后台线程就会停止。不能把入池的线程改为前台线程

10、视图有更新操作,你不知道吗?

    答:

通过视图更新数据的必须条件
1、SELECT语句中没有使用聚合函数或Group by、Union、Distinct或Top子句
2、INSERT、UPDATE、DELETE语句必须满足一定的条件才能引用可更新的视图
 
通过视图更新数据的场景比较少,大家只是了解下视图可以更新就行了。
 
11、EntityFramework懒加载与预加载分别是设么?怎么理解
 答:

1、延迟加载又叫惰性加载(Lazy Loading):即在需要或者使用的时候加载数据。默认情况下,EF会使用延迟加载方式加载数据,即数据库上下文的属性:Configuration.LazyLoadingEnabled = true;
  eg:var customers = from c in dbcontext.Customer select c;
2、预加载:如果你想让所有数据一次性全部加载到内存中,那么你需要使用.Include(Entity)方法 。.Include(Entity)方法允许级联使用,你可以预先加载具有多层级结构的数据。
  eg:var q = from t in dbcontext.Customer.Include("Order") select t;
 
比较两种加载方式
预加载:
• 减少数据访问的延迟,在一次数据库的访问中返回所有的数据。不过缺点是,那就是如果数据量较大,一次性将所有数据载入内存往往并不是最明智的选择
• 减少与数据库的交互次数
延迟加载:
• 非常宽容,因为只在需要的时候加载数据,不需要预先计划
• 可能会因为数据访问的延迟而降低性能,考虑到每访问父实体的子实体时,就需要访问数据库。
3、显式加载和延迟加载非常类似,不同的是显式加载要手动关闭EF的延迟加载属性,通过代码ctx.Configuration.LazyLoadingEnabled = false;来完成。
 

(未完待续。。。。)

asp.net面试题总结1(未完待续。。。。)的更多相关文章

  1. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  2. ASP.NET Core 2.2 基础知识(八) 主机 (未完待续)

    主机负责应用程序启动和生存期管理.共有两个主机 API : 1.Web 主机 : 适用于托管 Web 应用,基于 IWebHostBuilder ; 2.通用主机 : 适用于托管非 Web 应用. 基 ...

  3. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  4. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  5. 关于DOM的一些总结(未完待续......)

    DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...

  6. 我的SQL总结---未完待续

    我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...

  7. virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)

    virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...

  8. MVC丶 (未完待续······)

         希望你看了此小随 可以实现自己的MVC框架     也祝所有的程序员身体健康一切安好                                                     ...

  9. 一篇文章让Oracle程序猿学会MySql【未完待续】

    一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...

随机推荐

  1. CountDownLatch(闭锁)、Semaphore(信号量)、CyclicBarrier

    一.CountDowmLatch(闭锁)(倒计数锁存器) CountDownLatch类位于java.util.concurrent包下,在完成某些运算时,只有其他所有线程的运算全部完成,当前运算才继 ...

  2. python中的随机数生成

    结论先行 生成随机数: # salt = ''.join(random.choices(string.ascii_letters + string.digits, k=3)) salt = ''.jo ...

  3. JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼?

    <JavaScript 深入浅出>系列: JavaScript 深入浅出第 1 课:箭头函数中的 this 究竟是什么鬼? JavaScript 深入浅出第 2 课:函数是一等公民是什么意 ...

  4. 【微信小程序】安装DingoApi开发小程序api

    1.安装 composer require dingo/api 2.发布配置: php artisan vendor:publish 选择DingoApi发布. 3.向.env文件添加配置 (1)项目 ...

  5. Angular 学习笔记(三)

    调试时抓取作用域: 1.右键选取审查元素,调出 debugger(或按 F12) 2.调试器允许用变量 $0 来获取当前选取的元素 3.在 console 中执行 angular.element($0 ...

  6. MongoDB安装调试

    1:安装 去mongodb的官网http://www.mongodb.org/downloads下载32bit的包 解压后会出现以下文件 在安装的盘C:下建立mongodb文件夹,拷贝bin文件夹到该 ...

  7. Linux 内存文件系统-ramfs and tmpfs

    Linux内存文件系统:可满足高IO的要求 ramdisk: 基于虚拟在内存中的其他文件系统(ex2fs). 挂载方式:mount /dev/ram /mnt/ramdisk ramfs: 物理内存文 ...

  8. linux--top工具分析

    top分析工具详解 第一行:10:01:23 当前系统时间126 days, 14:29 系统已经运行了126天14小时29分钟(在这期间没有重启过)2 users 当前有2个用户登录系统   loa ...

  9. CodeForces - 1250B The Feast and the Bus (贪心+暴力)

    题意 https://vjudge.net/problem/CodeForces-1250B 每个人属于队伍ai,汽车一次至多载两只队伍(全员),费用为车的容量*载人次数,问最少花费. 思路 k(队伍 ...

  10. 线上可用django和gunicorn的dockerfile内容

    一,基础镜像 [xxx.com.cn/3rd_part/python.3.6.8:alpine3.9-mysqlclient1.4.2] FROM python:3.6.8-alpine3.7 MAI ...