C#面试题2(子文章)持续更新

-----> 总文章 入口

什么是MVC?

MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开
Model:模型层
View:视图层
Controller:控制层

你能解释下MVC 的完整流程吗?

MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,
然后模型用业务逻辑来处理用户的请求并返回数据,
最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。

MVC优缺点是什么?

优点:
使你的软件在健壮性,代码重用和结构方面上一个新的台阶

缺点:
额外的工作量和复杂性

post 和 get 的区别?

POST和GET是HTTP请求的两种方式,都可实现将数据从浏览器向服务器发送带参数的请求。
HTTP请求底层协议都是TCP/IP,所以两者没有本质的区别。
区别就在于数据存储的位置。各自有适用环境,根据需求选择合适的方法即可

  1. GET提交的数据放在URL中,POST则不会。这是最显而易见的差别。
    这点意味着GET更不安全(POST也不安全,因为HTTP是明文传输抓包就能获取数据内容,要想安全还得加密)
  2. GET回退浏览器无害,POST会再次提交请求(GET方法回退后浏览器再缓存中拿结果,POST每次都会创建新资源)
  3. GET提交的数据大小有限制(是因为浏览器对URL的长度有限制,GET本身没有限制),POST没有
  4. GET可以被保存为书签,POST不可以。这一点也能感受到。 GET能被缓存,POST不能 GET只允许ASCII字符,POST没有限制
  5. GET会保存再浏览器历史记录中,POST不会。这点也能感受到。

请说明在.net 中常用的几种页面间传递参数的方法,并说出他们的优缺点?

  1. 使用QueryString, 如…?id=1; response. Redirect()…
    优点: 简单,粗暴
    缺点:
    QueryString 有一个最大长度,如果你必须发送很多信息这种方法不起作用。
    QueryString 在您的浏览器的地址部分中可见,因此您不应将其与敏感信息一起使用。
    QueryString 不能用于发送&和空格字符。
  1. Session&Cookie
    缺点:
    Session变量存储大量的数据会消耗较多的服务器资源。容易丢失.
    Cookie 以简单的文本格式存储数据,因此根本不安全。
    Cookie数据有一个大小限制(4096字节/ 4KB), 允许的最大cookie数量也是有限的
  1. Application
    缺点:
    作为全局变量容易被误操作。所以单个用户使用的变量一般不能用application。
  1. Server.Transfer 终止当前页面的执行并开始执行当前请求的新页面。

>>>查看详情

在MVC中如何保持Sessions?及各种方法有什么不同?

MVC Controller有多少种不同的结果类型?

ActionResult
ContentResult
EmptyResult
HttpUnauthorizedResult
JavaScriptResult
JsonResult
FileResult
FileContentResult
FilePathResult
FileStreamResult
RedirectResult
RedirectToRouteResult
RedirectToActionResult
ViewResultBase
ViewResult
PartialViewResult

ADO.net中常用的对象有哪些?分别描述一下

SqlConnection 连接数据库
SqlCommand 命令对象.执行的命令和存储过程!
SqlDataAdapter 适配器
SqlDataReader 数据读取器
DataSet 数据集,相当与内存中的一张表或多张表.

如何处理几十万条并发数据

用存储过程或事务。取得最大标识的时候同时更新。注意主键不是自增量方式,
这种方法并发的时候是不会有重复主键的,取得最大标识要有一个存储过程来获取。

在C#中,string str = null 与 string str = “” .说明其中的区别.

一个是什么都没有,一个是空字符串,
string str=null 把这个引用指向了一个null,没有地址没有值的地方。不占用任何空间.
string str="" 把这个引用指向了一个地址,地址里面存的是空的字符。

C# 中 new 有几种用法?

1)new 运算符:用于创建对象和调用构造函数。这种大家都比较熟悉.
2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。
3)new 约束:用于在泛型声明中 约束 可能用作类型参数的参数的类型。

什么叫做泛型?

通过 参数化类型 来实现在同一份代码上操作多种数据类型

谈谈你对EF 的理解

原先用的是三层架构中ADO.NET做底层开发,纯手工sql语句拼装。后来遇到一个MVC+EF项目,体会到了EF的强大性。
它是微软封装好一种ADO.NET数据实体模型,将数据库结构以ORM模式映射到应用程序中。
优点:
1.简洁的Linq to Sql语句大大提高了开发人员的效率,不要再写复杂的sql语句;
2.不再需要再管应用程序如何去连接数据库;
3.EF可以用作用于数据服务和OData Service的基础设施;
缺点:
1.由于linq语句编译之后就是sql,对于这种自动生成的sql语句无法控制;
2.EF的运行机制会消耗大量内存,大大降低了程序运行效率,从而导致降低了用户在客户端的体验效果;
3.一旦数据结构发生变化,需要更新EF数据model;有时还可能会出现找不到更新过的实体类这种情况;

什么叫做SQL注入?如何防止?

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.

防护 归纳一下,主要有以下几点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。


简述 a.Equals(b) 和 a==b 的区别?

a==b:
当a和b指向同一对象时为true,
即a和b指向内存和内存地址的内容都相同时才为true;(地址相同,内容必相同)

a.equals(b):
当a和b的值相同时,即为ture;(只判断值相等)

ASP.NET的Application、Session、Cookie、ViewState和Cache等变量的区别是什么?

Application是公共的,所有人都能看到,所以可以用来做聊天室,
session是私有的,每个客户端都存在一个不同的session 生存期正常是20分钟,也可以自己设定为1分钟或2个小时
cookie是保存在本机的文件,记录短小的信息,除非你让cookie过期,否则会一直存在
viewstate类似于asp中的hidden控件,用来记录页面中的控件的状态的,主要在页面间信息传递时用,
cache是缓存,用来记录已经执行过的一些数据,比如读取数据库,目的是加速显示,减少服务器的负担,过期时间也是可以自己设定的,

简述 asp.net webapi 相对于 asp.net mvc 的优点?

MVC主要用来构建网站,既关心数据也关心页面展示,而Web API只关注数据
Web API支持格式协商,客户端可以通过Accept header通知服务器期望的格式 Web API支持SelfHost,MVC目前不支持 Web API通过不同的http verb表达不同的动作(CRUD),MVC则通过Action名字表达动作
Web API内建于ASP.NET System.Web.Http命名空间下,MVC位于System.Web.Mvc命名空间下,因此model binding/filter/routing等功能有所不同 Web API非常适合构建移动客户端服务

简述asp.net 请求的生命周期?

  1. 页面请求:页面请求发生在页面生命周期开始之前,用户请求页时,ASP.NET将确定是否需要分析和编译页
  2. 开始:在开始阶段,将设置页属性,如Request和Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性
  3. 页初始化:在页初始化期间,可以使用页中的控件,并设置每个控件的UniqueID属性。
  4. 加载:在加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。
  5. 验证:在验证期间,将调用所有验证程序控件的Validate方法,此方法将设置各个验证程序控件和页的IsValidate属性。
  6. 回发事件处理:如果请求是回发请求,则将调用所有事件处理程序
  7. 呈现:在呈现之前,会针对该页和所有控件保存视图状态。在呈现阶段中,页会针对每个控件调用Render方法,它会提供一个文本编写,用于将控件的输出写入页的Response属性和OutputStream中
  8. 卸载:完全呈现页并将页发送至客户端、准备丢弃该页后,将调用卸载。此时,将卸载页属性并执行清理。

ORM 中的延迟加载与直接加载有什么异同?

延迟加载(lazyload)(也称为懒加载),
延迟加载机制是为了避免一些无谓的性能开销而提出来的,
所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。
可以简单理解为,只有在使用的时候,才会发出sql语句进行查询。

简述 Func 与Action 的区别?

.Net内置的委托。
Func有返回值
Action 无返回值

开启一个异步线程的几种方式?多线程编程时的注意事项?

Thread
ThreadPool
Task new
Task Factory
Task.Run()
注意事项:
一定要考虑公共资源的线程安全性 一般非阻塞状态下每个循环都要有SLeep,这样保证减少线程对CPU的抢夺
线程的终止一般要使线程体在完成一件工作的情况下终止,一般不要直接使用抛出线程异常的方式终止线程。

简述Linq 是什么,编写一个Linq to object的示例代码

Language Integrated Query(LINQ,语言集成查询) 使用相同API操作不同的数据源

// 示例代码
var racer = from r in Formula1.GetChampions()
            where r.Wins > 15 && r.Country == "Austria"
            select r;

简述面向对象的特性有哪些? 你是如何理解的?

封装 :就是类的私有化。将代码及处理数据绑定在一起的一种编程机制,该机制保证程序和数据不受外部干扰。
继承: 就是保留父类的属性,开扩新的东西。通过子类可以实现继承,子类继承父类的所有状态和行为,同时添加自身的状态和行为。
多态: 是允许将父对象设置成为和一个和多个它的子对象相等的技术。包括重载和重写。重载为编译时多态,重写是运行时多态。

重载:两个或者多个函数在同一类中,名一样,参数列表不一样
重写:在父类有个函数,在子类也又有一个同样名字的函数,而且在子类内中把这个功能做的更具体化。

列举你所知道的设计模式? 你在真实项目中使用过哪些?有什么心得?

  1. 单例模式: 确保一个类只有一个实例,并提供一个全局访问点. 例子: 用 全局的Log4实例 去记录系统日志
  2. 工厂模式: 通过工厂模式可以降低对象之间的耦合度,符合开闭原则 例子: 多个功能相同的方法可以使用工厂模式,使得系统更容易扩展。
  3. 策略模式: 定义了一组算法(业务规则)这族的算法可互换代替. 例子: 在运行时动态选择具体要执行的行为。对客户隐藏具体策略(算法)的实现细节,彼此完全独立

持续更新中…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章