.Net面试总结

1.ASP.NET WebForm与ASP.NET MVC的区别

ASP.NET WebForm提供了一个类似于winform事件响应的GUI模型,隐藏了HTTP、HTML、Javascript等细节,经用户界面构建成了一个服务器端的树结构控件,每个控件通过ViewState保持自己的状态,并自动将客户端的js事件和服务器端的事件联系起来,这使得开发winform与webform有着相近的开发体验,填平了winform(有状态,面向对象)和webform开发(无状态,面向html的)之间的鸿沟。

这种设计在大型网站开发的时候会暴露一些弱点:

1.ViewState可能过大:访问量非常大的情况下,viewstate占用的流量非常可观,这样直接影响页面传输速度。

2.页面声明周期过于复杂:比如控件的init方法在页面的init方法之前执行,而load事件是在控件后执行。

3.缺乏对html的控制:一般每个控件负责自己的HTML输出,开发人员无法修改输出的HTML结构,除非自己写控件。而且HTML的Id比较复杂,不便于js访问。

4.界面设计和逻辑开发的关注分离做的不好:webform开发是一个页面对应一个code-behind class,原本的目的将展示与逻辑分离。但是在实际开发的时候,面对某些需求,还是经常会在class中写一些控制界面展示的代码。

5.对测试的支持不好:页面的code-behind class绑定在一起,无法单独对逻辑进行测试;不支持单元测试。

ASP.NET MVC

ASP.NET MVC的优点如下:

1.采用MVC架构:分离了关注点,不如在开发Controller的时候只需关注如何交互,从request中获得什么数据,业务逻辑交给model处理,如何展示交于view处理。

2.更好的扩展性:ASP.NET MVC框架由一系列独立的组件构成,可以轻松替换,如路由系统、the view Engine、the controller factory或者其他框架组件。

3.更好的可测性:关注点的分离另一个好处是更好的可测性。

4.能够完全的处理输出的html

5.强大的路由功能。

摘自:http://www.voidcn.com/article/p-radaahfb-tw.html

2.抽象类与接口的相同点和区别:

相同点:

  1. 都可以被继承
  2. 都不能被实例化
  3. 都可以包含方法生命
  4. 派生类必须实现未实现的方法

不同点:

  1. 抽象基类可以定义字段、属性、方法实现。借口只能定义属性、索引器、事件和方法声明,不能包含字段。
  2. 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。
  3. 接口可以被多重实现,抽象类只能被单一继承
  4. 抽象类更对的是定义在一系列紧密相关的类间,而接口大多是关系疏松但都实现同一功能的类中
  5. 抽象类是从一系列相关对象中抽象出来的概念,因而反应的是内部的共性;接口是为了满足外部调用而定义的一个功能约定,因此反应的是事物外部特性
  6. 接口基本上不具备继承的任何具体特点,他仅仅承诺了能够调用的方法
  7. 接口可以用于支持回调,而继承不具备这个特点
  8. 抽象类实现的方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,可以自定义为虚的
  9. 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中的方法

摘自:https://www.cnblogs.com/chunhui212/p/5892273.html

3.MVC中页面传值的几种方式

使用ViewData

ViewData是在ControllerBase中类型为ViewDataDictionary的属性,以键值对的方式存储,通过key来获取值。

主要用途:

ViewData和ViewBag的作用是一样的,只不过在早期的ASP.NET MVC(1和2)版本中,使用的是ViewData,后期版本退出了ViewBag有更多的优点,推荐使用ViewBag。

优点:

  • 方便:以键值对的方式把Model存起来,再从控制器传递到视图。

缺点:

  • 单向传递:只能由控制器到视图

  • 只能存放当前请求下的model:无法维持在多个请求下的model,一旦页面跳转ViewData的值就变成了null

  • 只能存放小数据,如果传递大数据,不推荐使用ViewData。

  • 使用key获取的方式,可读性不如ViewBag

  • 没有智能提示

  • 没有编译期错误调查

使用ViewBag

ViewBag是在controllerBase中的类型为dynamic的属性。dynamic类型是C#4.0推出的一个类型,它使得在编译器不需要指明类型。

主要用途:

以name/value的形式将model存起来,再从控制器传递到视图。视图的Title就是通过ViewBag.Titlek来设置。

优点:

  • 方便 使用name获取对应的值,比ViewData使用key获取对应的值更好。
  • 不需要显式指明类型

缺点:

  • 单向传递:只能从控制器传递到视图
  • 只能存放当前情况下的model:无法维持在多个请求下的model。一旦页面跳转,ViewBag的值就变成了null
  • 只能存放小数据:如果传递大数据不推荐使用ViewBag
  • 没有智能提示
  • 没有编译期错误检查

使用PartialView

主要用途:

对于那些需要重复使用的视图部分,提取出来作为部分视图。

优点:

  • 方便重复使用
  • 只更新主视图的某个部分

缺点:

  • 过多的使用影响可读性

使用TempData

TempData在ControllerBase中类型为TempDataDictionary的属性,是键值对形式的字典,通过key来获取对应的值没在赋值的时候需要指明类型。和ViewBag和ViewData的不同之处在于:他可以跨controller,跨action来使用其内部使用了session机制。

主要用途:

可以用来传递一些非敏感的数据,比如验证信息、错误信息等。

优点:

  • 跨controller,跨action

缺点:

  • 需要显式赋值,并且需要判断是否为null以避免错误
  • 没有智能提示
  • 使用ViewModel

 

4.表连接查询的几种方式及区别

https://blog.youkuaiyun.com/xuanjiewu/article/details/50636465

5.m个苹果和n个盘子有几种摆放方式

https://www.cnblogs.com/wxgblogs/p/5742618.html

6.将一个数组中的偶数放在数组前半部分,奇数放在数组的后半部分

https://blog.youkuaiyun.com/qq_28863045/article/details/79821030

7.什么是委托,什么是事件。

https://demonkoo.github.io/2016/11/15/C-Delegate-Event/

8.“猫叫了,老鼠跑了,主人醒了”,事件问题

https://www.cnblogs.com/funeral/archive/2009/04/20/funeral_NewCatAndMouse.html

9.什么是事务,索引,存储过程

https://www.cnblogs.com/dong897812629/archive/2013/03/27/2981142.html

10.常见的数据库查询练习

https://www.cnblogs.com/liulinghua90/p/7505697.html

11.重载与重写的区别

https://blog.youkuaiyun.com/cdefg198/article/details/7414973

12.排序算法

https://www.cnblogs.com/onepixel/p/7674659.html

13.min函数找出栈中的最小值

https://blog.youkuaiyun.com/xyzbaihaiping/article/details/51171177

14.TCP/IP的三次握手过程

https://ioscaff.com/articles/252

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值