常规技术面试题(.NET)下一部分

 (我只是个努力的搬运工,别人整理的,暂时发布,供我自己复习的。)

目录

1.你对泛型了解吗?简单说明一下泛型的有什么好处?

6.2  .NET WinForm部分

6.3  .NET Web开发部分

6.4  数据访问部分

6.5  集群与分布式

6.6  其他部分

1.你对泛型了解吗?简单说明一下泛型的有什么好处?

泛型:“泛型”的字面意思就是广泛的类型。通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用 好处是——可以复用代码,降低耦合性,而且还提高了代码的可读性以及安全性。


2 DateTime.Parse(myString); 这行代码有什么问题?

有问题,当myString不能满足时间格式要求的时候,会引发异常,建议使用DateTime.TryParse() 



3 XML  HTML的主要区别?

  • 1. XML是区分大小写字母的,HTML不区分。 
  • 2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略结束标记。在XML中,绝对不能省略掉结束标记。 
  • 3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。 
  • 4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。 
  • 5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。



4 请简述结构和类的区别

  • 1、类型不同:结构是一种值类型,而类是引用类型。
  • 2、存储不同:结构使用栈存储,而类使用堆存储。栈的空间相对较小.但是访问效率相对较高.堆的空间相对较大.但是访问效率相对较低。
  • 3、作用不同:类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性。
  • 4、初始化不同:类可以在声明的时候初始化,结构不能在申明的时候初始化(不能在结构中初始化字段),否则报错。



5 请解释一下IClonable

IClonable方法是实现深度复制的接口,实现它应该能深度复制一个对象出来。深度复制的特征的调用对象的构造方法,创建新的对象,包括创建对象中嵌套的引用对象的新实例。而Shadow复制则不同,是浅表复制,不重新创建新实例。浅表复制的实现是Object.MemberWiseClone().

深度复制(Deep Copy)与浅表复制(Shadow Copy)

6 用接口或父类作为输入的参数有什么好处?返回值如果是接口是为了什么?

接口或父类作为参数,所有继承了此接口或父类的类都可以使用,即你给此方法传参数的时候,可以把继承了这个接口或父类的类的实例传给这个方法。可以一次性传入多种字段、方法等而不用定义多个形参,接口作为返回值,返回的是实现接口的对象。

7 =  == 的区别?

= 是赋值运算符, ==是关系运算符,用于等值判断

8 数组有没有length()这个方法?String 有没有length()这个方法?

数组是没有length()这个方法的,有length这个属性,可以计算数组的长度。

String是有length()这个方法的,用来计算字符串的长度。

9 数组和泛型集合的区别

泛型集合只能放定义类型的元素,会自动增大,取出时不用做类型转换。

数组只能放定义类型的元素,不会自动增大,取出时不用做类型转换。

10 System.Object中有什么方法?有什么用?

  • 1.ToString():是获取对象的字符串表示的一种快捷方式
  • 2.Finalize():允许对象在垃圾回收该对象之前尝试并执行释放资源并执行其他清理操作
  • 3.GetType():获取当前实例的确切运行时类型
  • 4.GetHashCode():用作特定类型的哈希函数
  • 5.构造函数方法:主要用来在创建对象时初始化对象

11 Linqconcat union intersect的区别

Concat  :连接两个序列。

Union  : 通过使用默认的相等比较器生成两个序列的并集。

Intersect : 通过使用默认的相等比较器对值进行比较生成两个序列的交集。

12 请问哈希表(hashtable)是如何存储数据的?

以哈希表的形式存储数据,数据的形式是键值对。

13 .NET中的CTS、CLS和CLR

  • CLR公共语言运行库
  • CLS通用语言规范
  • CTS通用类型系统

14 NETC#的区别

.NET一般指.Net Framework框架,是Microsoft为开发应用程序而创建的一个具有革命意义的平台,C#运行在.NET(CLR)上的,用于创建应用程序的一种高级编程语言。

15 设计模式有哪些?

  • 1.单例设计模式
  • 2.工厂设计模式
  • 3.代理设计模式
  • 4.观察者设计模式
  • 5.适配器模式
  • 6.原型模式

16 StringBuilder  String的区别?

String是不可变化的字符,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象。

StringBuilder是可以变化的字符,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充。

17 LinqSQL语句的执行速度哪个更快?

 SQL语句的执行速度更快

18 C#代码编译成中间语言有什么作用?

优点:一是可以实现平台无关性,既与特定CPU无关;二是只要把.NET矿建某种语言编译成IL代码,就实现.NET矿建中语言之间的交互操作。

    IL是.NET矿建中的中间语言(Intermediate Language)的缩写。



6.2  .NET WinForm部分



1 在.NETC# or vb.net)中如何取消一个窗体的关闭?

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{


e.Cancel=true;

}


2 在.NETC# or vb.net)如何启动另一个程序

Process.Start("cmd");


3 在.netC# or vb.net)中,Appplication.Exit()  Form.Close()有什么不同

Appplication.Exit()是退出整个应用程序,Form.Close()是关闭其中一个form。


4 DataGridViewDataSource可以连接什么数据源?

  • 第一种:
  •    DataSet ds=new DataSet ();
  •    this.dataGridView1.DataSource=ds.Tables[索引或表名];
  • 第二种:
  •    ArrayList al = new ArrayList();
  •    this.dataGridView1.DataSource = al;
  • 第三种:
  •     Dictionary dic = new Dictionary();
  •     this.dataGridView1.DataSource = dic;
  • 第四种:
  •      DataView dv = new DataView();
  •      this.dataGridView1.DataSource = dv;



6.3  .NET Web开发部分


1 Page_Onload里面一般会写什么代码?

通过判断IsPostBack属性判断是否首次加载。在页面首次加载时,编写控件初始化代码和页面变量初始化代码


2 什么时候会用到cookie,session?它们的区别分别是什么?

Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

  • 1.session 在服务器端,cookie 在客户端(浏览器)
  • 2.session 默认被存在服务器的一个文件里(不是内存)
  • 3.session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
  • 4.session 可以放在 文件、数据库、或内存中都可以。
  • 5.用户验证这种场合一般会用 session 因此,维持一个会话的核心就是客户端的唯一标识,即 session id


3 ASP.NETWebPage的生命周期?

初始化-》加载视图状态-》处理回发数据-》加载-》发送回发更改通知-》处理回发事件-》预呈现-》保存状态-》呈现-》处置-》卸载


4 页面之间传值的几种方式?

    页面间传值: 

  • 1.使用QueryString变量
  • 2. PostBackUrl()方法

  • 3.使用Server.Transfer方法。

5 应用程序范围内传值:

  • 1.使用Cookie对象变量。

  • 2.使用Session变量。

  • 3.使用Application对象变量。


6 Ajax异步交互数据。

使用AJAX实现异步刷新就是在用户“无察觉”的情况下“偷偷”访问了远程服务器进行工作,然后将结果返回后由JS提供在客户端,让用户感受好像B/S架构的程序和C/S的差不多的感觉。


7  IIS如何进行配置

  • 1.打开IIS管理器。
  • 2.展开“本地计算机”-“网站”目录,选中“默认网站”节点,右键“属性”,设置主目录。
  • 3.右键“默认网站”图标,选择“新建”-“虚拟目录”命令。IIS将启动“虚拟目录创建向导”对话框帮助我们完成创建虚拟目录的步骤。
  • 4.单击对话框的“下一步”按钮以显示虚拟目录别名页,如HelloWorld。别名是我们用来标识该目录中的资源的名称。在VS.NET中,别名是用来指定项目位置的名称。
  • 5.单击“下一步”按钮,以显示Web站点内容目录页。在此,输入包含此网站内容的目录的路径。
  • 6.单击“下一步”按钮,打开虚拟目录访问权限设置页面。选中“读取”复选框和“运行脚本”复选框。
  • 7.单击“下一步”按钮,再单击“完成”按钮创建虚拟目录并终止向导。查看IIS管理器中虚拟目录的创建结果,可以发现,默认网站中多了一个齿轮状图标的HelloWorld节点。

如果当前还不是齿轮状,右键节点,打开属性页,在虚拟目录中的应用程序设置中创建应用程序名为HelloWorld的应用程序就可以了


8 MVC中的视图是用来干什么的?

MVC是三个单词的首字母缩写,它们是Model(模型)、View(视图)和Controller(控制)

从结构上看,可以分成三层,

  • 1)最上面的一层,是直接面向最终用户的"视图层"(View)。它是提供给用户的操作界面,是程序的外壳。
  • 2)最底下的一层,是核心的"数据层"(Model),也就是程序需要操作的数据或信息。
  • 3)中间的一层,就是"控制层"(Controller),它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。

这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。


9 asp.net状态管理技术中可用于保存与传递数据的方法的是

所谓 “状态管理”,是指使用ASP.NET中的ViewState、Cookie、Session和Application等对象实现页面数据缓存和传递的技术。


10 postget的区别。

  • 1. get/post均可向服务器传送页面数据。
  • 2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
  • 3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
  • 4. get传送的数据量较小不能大于2KBpost传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
  • 5. get安全性非常低post安全性较高。但是执行效率却比Post方法好。

建议:

  • 1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
  • 2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;


11 某aspx页面中有一用户控件UserCtrl1,以及一web服务器控件Button1,用户控件内有uiAdd()方法用来动态添加显示效果,此页面AutoEventWireup="true",在页面page_load事件内有调用uiAdd()方法的代码,Button1点击后将触发Button1_Click事件。假设现在浏览该页面后点击了Button1,请列出页面page_load,按钮Button1_Click,用户控件uiAdd()以及用户控件的page_load的触发先后顺序。

  • 1.aspx页面中的page_load
  • 2.UserCtrl1中的page_load
  • 3.用户控件uiAdd()
  • 4.Button1点击后将触发Button1_Click事件


12 请编程遍历页面上所有TextBox 控件并给它赋值为空。

foreach (System.Windows.Forms.Control control in this.Controls)

      {

        if (control is System.Windows.Forms.TextBox)

         {

            System.Windows.Forms.TextBox tb =          (System.Windows.Forms.TextBox)control ; 

            tb.Text = String.Empty ;

         }

      }

上边的方法只是针对于桌面软件类的,如果要针对于web开发中怎么实现呢?

首先.aspx文件一定会包含一个:

只有在此标记中的代码享有和后台交换。

由此:

foreach(System.Web.UI.Control ctl in this.Form.Controls){

      if (ctl is System.Web.UI.WebControls.TextBox)

      {

            System.Web.UI.WebControls.TextBox tb = (System.Web.UI.WebControls.TextBox)ctl;

            tb.Text = string.Empty;

       }

}


13 简述WebServices

WebService 就是web服务。是微软主推的一种跨平台的分布式应用程序。他使用SOAP协议通讯,用XML封装数据,所以是跨平台的。任何客户端只要按照WebService发布的格式发送数据就都可以得到结果。


14 在Asp.net中所有的自定义用户控件都必须继承自哪个类? 

Control:所有控件的基类。


15 在.Net中,类System.Web.UI.Page 可以被继承么?

可以,每个页的cs文件中定义的类就是继承这个类的


16 什么情况用HTML控件,什么情况用WEB控件,并比较两者差别

  Html控件:

  • 1.Html控件就是我们通常说的Html语言标记,Html是以Input为前缀的。不能在服务器端控制。如果Html想要在服务器端控制,就加上”Runat="Server"”这句话,就构成了Html服务器控件。Html服务器控件可也运行在服务器端,能够在后台对其进行设置修改。
  • 2.Html控件直接发送给浏览器,不灵耗费服务器资源

  Web控件:

  • 1.Web控件是构成ASP.Net服务器控件的一部分,Web控件是以Asp:为前缀的
  • 他不像Html需要加上”Runat="Server"”才可以运行在服务器端,它本身隐身包含这句话。
  • 2.Web控件需要通过服务器处理后译为Html控件在发送给浏览器,所以比较耗费服务器资源,并由于有VIEWSTATE,所以在会送的时候会保持控件状态(也可以不保存),也因此增加了回送信息量。


17 请解释ASP.NET中的数据绑定与传统数据绑定有什么区别?

ASP.NET的数据绑定:控件中数据的变化不会自动同步到数据源中,传统数据绑定可以自动同步。


18 如果需要在GridView控件中的某一列中添加下拉列表框并绑定数据怎么解决?

在GridView里面加入模版列。把GridView拖入以后这个控件的右上角有一个小箭头,然后选择编辑列,然后在里面添加一个模版列(TemplateField),然后点确定,关闭编辑,然后在GridView控件上点鼠标右键选择编辑模版列,在那个ItemTemplate里面拖入下拉列表控件,然后再为这个下拉列表控件选择数据源就行了!或者你可以使用代码绑定,也可以!如果是使用代码绑定的话,是在GridView的RowDataBound的时间里面,然后用e.FindControl("下拉列表的控件ID") as DropDownList 找到下拉列表控件就行了


19 如果出现ASP.NET中的事件不能触发可能由于什么原因造成?

如果在web窗体中使用了验证控件,那么当验证控件中的验证逻辑没有通过时一般会使事件不能触发执行。

如果使用了诸如Textchange、Checkchange、Selectedindexchanged这类事件并在

服务器端进行了事件处理,但是没有设置AutoPostBack=true属性时会使事件不能触发执行。


20 请解释转发与跳转的区别?

转发的特点:forward

  • 1.转发地址栏路径不变
  • 2.转发只能访问当前服务器下的资源
  • 3.转发是一次请求,可以使用request对象来共享数据
  • 4.请求来源:服务器内部使用,不需要加虚拟目录。

跳转(重定向)的特点:redirect (浏览器响应头:302,即重定向)

  • 1.地址栏发生变化
  • 2.重定向可以访问其他站点(服务器)的资源
  • 3.重定向是两次请求。不能使用request对象来共享数据
  • 4.请求来源不同:客户端浏览器发起,需要加虚拟目录,动态获取request.getContextPath()


21 请解释什么是上下文对象,在什么情况下要使用上下文对象

上下文对象HttpContext。如果需要在网页类之外的其他类中访问ASP.NET系统对象时,需要使用上下文对象。


22 请解释一个WEB页面中代码执行次序。

常用事件执行次序:Init(初始化) -> Load(加载) -> Event(控件事件) -> PreRender(呈现之前)

 -> UnLoad(卸载)


23  当发现不能读取页面上的输入的数据时很有可能是什么原因造成的?怎么解决

可能情况:

  • 1)可能事件没有关联
  • 2)根本就没有写读取代码
  • 3)写错了事件
  • 4)在Load事件中有清空代码,但没有写 if (!IsPostBack)


24 什么是viewstate,能否禁用?是否所用控件都可以禁用

Web页面是没有状态的,ViewState(视图状态)可用来保存Web页面在客户端和服务器端往返过程的状态

说简单点ViewState只不过是Hidden控件,加上微软写上的一些代码而已

可以禁用,有三种方法:

  • 1)禁用单个控件:控件.EnableViewState = false。
  • 2)禁用单个页面:在@Page指令中设置这个属性以达到页面级禁用ViewState的目的。
  • 3)禁用整个程序:修改Web.config中相应元素的属性即可。

最后,禁用服务器全局的ViewState,修改.Net Framework安装目录下的machine.config即可。


25 请解释ASP.NET中的web页面与其隐藏类之间的关系?

ASP.NET中的页面由两部分组成,页面显示(aspx文件)和代码逻辑(aspx.cs文件)通过Page指令联系在一起,如下:所以关系为:Web页面会继承隐藏类。


26 WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?

可以,其调用过程大致如下:用户使用WEB控件或者html服务端控件,控件的调用方法事件被激发,于是服务器开始自动寻找所匹配的方法代码,当在客户端找到后解释执行客户端的方法代码,完毕后继续返回服务器执行剩余代码.


27 WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。

在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件自动传回是当我们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端

只有通过自动传回才能实现服务端事件的机制,如果没有自动回传机制就只能调用客户端事件,而不能调用服务端事件


28  请解释ASP.NET中以什么方式进行数据验证?

.net中提供了几个数据验证控件,可以在服务器端或者客户端进行验证。


29 什么是WEB控件?使用WEB控件有那些优势?

WEB控件是能拖放在WEB页面上的控件

WEB控件分为:内部控件, 列表控件, 复杂控件, 验证控件

WEB控件优势:Web 控件是对象

–与对象一样,Web 控件拥有方法和属性,并且响应事件

–一旦将 Web 控件包括在 Web 页中,就可以设置其属性并调用其方法

–可以为 Web 控件编写服务器端代码以响应在客户端上发生的事件


30 概述.NET里对 Remoting  Webservice 两项技术的理解和实际中的应用。

  • 1、Remoting可以灵活的定义其所基于的协议,如果定义为HTTP,则与Web Service就没有什么区别了,一般都喜欢定义为TCP,这样比Web Service稍为高效一些
  • 2、Remoting不是标准,而Web Service是标准;
  • 3、Remoting一般需要通过一个WinForm或是Windows服务进行启动,而Web Service则需要IIS进行启动。
  • 4、在VS.net开发环境中,专门对Web Service的调用进行了封装,用起来比Remoting方便


31 常用的调用Webservice方法有哪些?

  • 1.使用WSDL.exe命令行工具。

  • 2.使用VS.NET中的Add Web Reference菜单选项


32 什么是SOAP,有哪些应用。

SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。

SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。


33 解释一下UDDIWSDL的意义及其作用。

什么是UDDI?

UDDI 是一个独立于平台的框架,用于通过使用 Internet 来描述服务,发现企业,并对企业服务进行集成。具体是:

  • 1、UDDI 指的是通用描述、发现与集成服务
  • 2、UDDI 是一种用于存储有关 web services 的信息的目录。
  • 3、UDDI 是一种由 WSDL 描述的 web services 界面的目录。
  • 4、UDDI 经由 SOAP 进行通信
  • 5、UDDI 被构建入了微软的 .NET 平台

什么是WSDL?

WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。

WSDL的作用

Web services 可把您的应用程序转换为 web 应用程序。通过使用 XML,可以在应用程序间传送消息。最大的意义就是不管你使用什么的语言编写的WEB应用,只要有WSDL,便可以自由的调用!


34 Session有什么重大BUG,微软提出了什么方法加以解决??

是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate   server或SQL   Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。

 
35请解释ASP.NET中的Web页面与其隐藏类之间的关系?

就是asp的升级版,asp之前是C#代码与html在一起写的,美工人员不容易维护,因为他看不懂C#代码,所以才有了asp.net这样的有了隐藏类,html与代码进行了分离,但这是紧耦合,一但没有了隐藏类,就会报错,MVC就解决了这一现象,视图、控制器分离


36 WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。

每个asp.net页有一个对应的.aspx页和一个对应的aspx.cs可编译逻辑,每个asp.net 控件有相应的事件处理,他们是由属性中的DataBinding绑定相应的事件处理。在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件自动传回是当我们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端

只有通过自动传回才能实现服务端事件的机制,如果没有自动回传机制就只能调用客户端事件,而不能调用服务端事件


37 什么是ASP.NET中的用户控件

用户控件就是扩展名为.ascx的特殊页面,它不能像.aspx页面一样直接访问,用户控件用以在同一应用程序中实现功能和外观的重用。


38 ASP.NETASP相比,主要有哪些进步?

区别:

  • ASP是解释性编程框架,而ASP.NET是编译性框架;
  • ASP.NET无论是从执行效率和安全上都远远超过ASP;
  • ASP.NET实现了代码分离,让代码管理更加直观。


39 什么是Code-Behind技术。

代码后置, 即HTML代码与C#代码写在不同的文件中,使得代码更整洁和便于维护.


40 ASP.NET的身份验证方式有哪些?分别是什么原理?

Windows: 使用IIS验证方式  Forms: 使用基于窗体的验证方式  Passport: 采用Passport cookie验证模式  None: 不采用任何验证方式


41 在.Net中,类System.Web.UI.Page 可以被继承么?

可以。


42 <%# %>  <% %> 有什么区别?

<%# %>表示绑定的数据源,<% %>是服务器端代码块


43 session喜欢丢值且占内存,Cookis不安全,请问用什么办法代替这两种原始的方法

使用用户配置Profile,或者自行编程存储在数据库中。


44 动态创建的控件PostBack后是否可以保存下来,为什么?

不可以,因为页面的每一次生命周期页面对象都是重新实例化的。


45 .O/R Mapping 的原理 

利用反射,配置将对象和数据库表映射。

46 RequestResponse的下面有什么方法和作用

Request类:

  • 1.getSession():获取Session对象
  • 2.getCookies():获取所有的Cookie,返回一个Cookie数组
  • 3.getMethod():获取请求类型

Response类:

  • 1.setHeader():设置消息头
  • 2.addCookie():添加Cookie
  • 3.setContentType():告知浏览器数据类型

47 <%%><%#%>的区别

前者是服务器端代码块,后者表示绑定的数据源

48 MVCwebform相比有什么优势?

MVC的优点:

  • 1.通过把项目分成Model、View和Controller,使得复杂项目更加容易维护,减少项目之间的耦合。
  • 2.没有服务器表单控件,可以更方便的控制应用程序的行为
  • 3.应用程序通过Controller来控制程序请求,并提供了原生的UrlRouting功能来重写Url。
  • 4.使Web程序对单元测试的支持更加出色
  • 5.强类型view实现,更安全,更高效。

49 webapiwebservice的区别?

答:webapi用的是http协议,webservice用的是soap协议

webapi无状态,相对webservice更轻量级。webapi支持如get,post等http操作

50 MVC有多少种不同类型的结果类型,请详细描述。

有12种,最主要的是ActionResult类,它是一个基础类,它有11个子类型。

ViewResult  - 给响应流渲染指定的视图

PartialViewResult  - 给响应流渲染指定的局部视图

EmptyResult  - 返回空的响应结果。

RedirectResult  - 执行一个HTTP转向到指定的URL。

RedirectToRouteResult  -执行一个HTTP转向到一个URL,这个URL由基于路由数据的路由引擎来决定

JsonResult  - 序列化一个ViewData对像到JSON格式。

JavaScriptResult  - 返回一段Javascript代码,它可以在客户端执行。

ContentResult  - 写内容到响应流,不需要视图支持。

FileContentResult  - 返回一个文件到客户端。

FileStreamResult  - 返回一个文件到客户端,它提供的是流。

FilePathResult  - 返回一个文件到客户端。

51 mvc过滤器你使用过吗?用来做什么?

ActionFilter(方法过滤器):接口名为[IActionFilter],在控制器方法调用前/后执行

ResultFilter(结果过滤器):接口名为[IResultFilter],在控制器方法调用完,跳转至view页面前/后执行

AuthorizationFilter(授权过滤器):接口名为[IAuthorizationFilter],所有过滤器中最先执行的

ExceptionFilter(异常处理过滤器):接口名为[IExceptionFilter],在控制器方法抛出异常时执行



6.4  数据访问部分


1 连接数据库的字符串应该写在哪儿?

写在配置文件中。 


2 解释ADO.NET中的使用Connetion对象的Close()Dispose()的区别。

Close()表示关闭连接,可以重新通过Open()打开;Dispose()表示销毁,销毁后的链接不能再打开,因为ConnectionString清空了,但此时Connection对象还在。

如果程序中没有向连接池发出请求说要Connection对象,Connection对象便会销毁,这也是连接池存在的意义。


3  DataReaderDataSet的异同

DataReader和DataSet最大的区别在于,DataReader使用时始终占用Connection对象,而且DataReader是只进的..你读了第一条后就不能再去读取第一条了..

DataSet则是将数据一次性加载在内存中.抛弃数据库连接,读取完毕即放弃数据库连接,比较消耗内存,但是却比DataReader要灵活,可以动态的添加行,列,数据.对数据库进行回传更新操作


4 从数据库读取记录,你可能用到的方法有哪些

通常有两种方式 SqlDataReader(非断开式连接) 和SqlDataAdapter|DataSet(断开式连接)方式。


5 ADO.NET相对于ADO等主要有什么改进?

  • ADO.NET不依赖于ole db提供程序,而是使用.net托管提供的程序;
  • ADO.NET不使用com
  • ADO.NET不再支持动态游标和服务器端游 
  • ADO.NET可以断开connection而保留当前数据集可用 
  • ADO.NET强类型转换 
  • ADO.NET xml支持异同


6 概述O/R mapping ORM)及其原理

ORM,Object-Relationl Mapping即为对象-关系映射。它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。

原理主要是利用反射等技术手段,自动生成SQL,将业务对象持久化到关系数据库中。


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

DataSet对象:数据集,表示内存中数据的缓存,可以把它想像成一个临时的数据库,它里可以存多个表(DataTable),而且是断开式的,不用每进行一次操作就对数据库进行更新,从而提高了效率。 

DataReader对象:读取器,它与DataSet最大的不同是有连接式的,每次对数据库进行存取都会影响到数据库。 

Connection对象:连接池,用于连接数据库的对象,表示到数据源的一个唯一的连接。 

Command对象:命令对象,表示要对数据库执行的一个SQL语句或一个存储过程。 

DataAdapter对象:适配器,该对象是与DataSet配合使用的对象,用于把表填充到DataSet,和更新DataSet等。


8 对数据的并发采用什么办法进行处理较好。

可以控制连接池的连接数量,条件好的话可以用负载平衡

9 编写数据库查询分页SQL

假设每页显示X条,用pagesize表示;当前要显示第X页,用currentPage表示;

10 SQLServer中:

select top pagesize * from tablename

where id not in (select top (currentPage-1)*pagesize id from tablename)

select top pagesize * from

(select ROW_NUMBER() over (order by id asc) as rownumber, * from (select * from tablename) as oo) as o

where rownumber>(currentPage-1)*pagesize

mysql中:select * from tablename limit (currentPage-1)*pagesize,pagesize

Oracle中:select *  from (select rownum rn,t.* from tablename ) t

where t.rn>(currentPage-1)*pagesezie and t.rn<=currentPage*pagesezie



6.5  集群与分布式



1 什么是Zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper包含一个简单的原语集,[1]  提供Java和C的接口。



2 写出你对zookeeper的理解

随着大数据的快速发展,多机器的协调工作,避免主要机器单点故障的问题,于是就引入管理机器的一个软件,他就是zookeeper来协助机器正常的运行。

     Zookeeper有两个角色分别是leader与follower ,其中leader是主节点,其他的是副节点,在安装配置上一定要注意配置奇数个的机器上,便于zookeeper快速切换选举其他的机器。

在其他的软件执行任务时在zookeeper注册时会在zookeeper下生成相对应的目录,以便zookeeper去管理机器。



3 zookeeper 的搭建过程

主要是配置文件zoo.cfg 配置dataDir 的路径一句dataLogDir 的路径以及myid的配置以及server的配置,心跳端口与选举端口。



4 ThreadLocal内存泄漏问题,如何防止

ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用ThreadLocal,就可能会导致内存泄漏。

ThreadLocal的实现是这样的:每个Thread 维护一个 ThreadLocalMap 映射表,这个映射表的 key 是 ThreadLocal 实例本身,value 是真正需要存储的 Object。

ThreadLocal内存泄漏的根源是:由于ThreadLocalMap的生命周期跟Thread一样长,如果没有手动删除对应key就会导致内存泄漏。综合上面的分析,我们可以理解ThreadLocal内存泄漏的前因后果,那么怎么避免内存泄漏呢?

防止方案:

每次使用完ThreadLocal,都调用它的remove()方法,清除数据。

在使用线程池的情况下,没有及时清理ThreadLocal,不仅是内存泄漏的问题,更严重的是可能导致业务逻辑出现问题。所以,使用ThreadLocal就跟加锁完要解锁一样,用完就清理。




5 简述高可用.

高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响。 停止服务的原因可能由于网卡、路由器、机房、CPU负载过高、内存溢出、自然灾害等不可预期的原因导致,在很多时候也称单点问题。



6.6  其他部分



1 堆和栈的区别

数据结构的堆和栈 :

  • 1. 栈是一种可以实现“先进后出”(或者称为“后进先出”)的存储结构。
  • 2. 堆则是一种经过排序的树形数据结构,常用来实现优先队列等

内存分配中的堆和栈

  • 1. 栈空间的内存是由系统自动分配,一般存放局部变量,比如对象的地址等值,不需要程序员对这块内存进行管理
  • 2. 堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存。


2 请谈谈对正则表达式的看法?

正则表达式是一种字符规则。它是用来匹配字符串的。

打个比方,某警官学院要招生,要求:身高170以上,体重:70以上,性别:男性。。。。

这些条件就是一种规则,通过这个规则,该警官学院就可以招到符合要求的一批学生。

正则表达式与上面这种规则一样,只不过它不是用来找人的,而是在程序里面用来找字符串的。

在编程的时候,我们要从一个字符串里找出特定的部分,就可以用这种规则来匹配。



3 UDP连接和TCP连接的异同。

都可以实现远程通信,主要区别在于TCP需要保持连接而UDP不需要,因此UDP具有更高的效率和更少的资源占用,而TCP传输数据更加可靠.




4 什么叫做SQL注入,如何防止?请举例说明。

利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

防止SQL注入:

  • 1、对输入内容进行过滤,去掉有可能的威胁

  • 2、对于用来执行查询的数据库帐户,限制其权限。

  • 3、在查询语句中使用参数。

  • 4、用存储过程来执行所有的查询。

  • 5、将用户登录名称、密码等数据加密保存。



5 请简述一下用Socket进行同步通讯编程的详细步骤

  • 1.创建socket

  • 2.确定本地计算机端点(ip和端口号)
  • 3.socket绑定端点

  • 4.socket.receive(); 接收数据

  • 5.socket.send();发送数据

  • 6.socket.close();关闭socket


6 float f=-123.567F;int i=(int)f;i的值现在是

-123。



7 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

int[] intArr=new int[100];

ArrayList myList=new ArrayList();

Random rnd=new Random();

while(myList.Count<100)

{

int num=rnd.Next(1,101);

if(!myList.Contains(num))

myList.Add(num);

}

for(int i=0;i<100;i++)

intArr[i]=(int)myList[i];


8 编程实现冒泡排序。

int [] array = new int [*] ;

 int temp = 0 ;

 for (int i = 0 ; i < array.Length - 1 ; i++)

 {

  for (int j =0 ; j < array.Length-i-1 ; j++)

  {

   if (array[j] > array[j+1])

   {

    temp = array[j] ;

    array[j] = array[j+1] ;

    array[j+1] = temp ;

   }

  }

9 分层式结构究竟其优势何在?

  • 1、开发人员可以只关注整个结构中的其中某一层; 
  • 2、可以很容易的用新的实现来替换原有层次的实现; 
  • 3、可以降低层与层之间的依赖; 
  • 4、有利于标准化; 
  • 5、利于各层逻辑的复用。 

概括来说,分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用、标准定义。

10 分层式结构也不可避免具有一些缺陷

1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。 

2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。



11请解释一下.NET多层应用程序中层与层之间以哪几种方式进行数据传递。并解释你自己的项目中采用哪种方式进行。

三层架构一般指的是界面层,业务层,数据层。

界面层就是系统的操作界面,和用户直接交互的地方。

业务层又称为逻辑层,英文名称是Business Logic Layer,简称BLL,是执行业务逻辑的地方数据层也称为数据访问层,英文名称是Database Access Layer,简称DAL,这里是直接和数据库进行交互的地方,也是整个系统里唯一允许访问数据库的地方。

除此之外,还有一个业务实体层,这个层比较特殊,就是定义实体类的地方,有些人把这个层归属业务层,有些人把这个独立出来,变成一个公共层。

各个层次之间的访问关系:

界面层只能单向访问业务逻辑层,业务逻辑层只能单向访问数据层,这三层都可以访问公共模块(公共层)。

12 对三层架构的理解。

答: 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了”高内聚,低耦合”的思想。

  •   1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
  •   2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
  •   3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。

13 MVC与三层架构比最主要的优势是什么?

三层是:  UI 界面层     

             BLL 业务逻辑层  

DAL数据访问层 

(特殊的Model实体层)

MVC是:

                   M  Model(模型层)      业务逻辑以及数据库的交互               

                   V  View(视图层)         显示数据和提交数据

        C  Controller(控制器)  负责从视图读取数据,控制用户输入,并向模型发送数据。 

两者的区别 :

                 三层的 UI    =    MVC的 View

                  三层的 Model+ BLL+DAL =    MVC的 Model

MVC优点:

易于进行单元测试

易于进行测试驱动开发

低耦合性、高重用性、可适用性

较低的生命周期成本

快速的部署

可维护性

有利于软件工程化管理

MVC缺点

内部结构复杂

14 MVC的生命周期是怎样的?

Request 请求到来

IIS 根据请求特征将处理权移交给 ASP.NET

UrlRoutingModule将当前请求在 Route Table中进行匹配

UrlRoutingModule在RouteCollection中查找Request匹配的RouteHandler,默认是MvcRouteHandler MvcRouteHandler 创建 MvcHandler实例.

MvcHandler执行 ProcessRequest.

MvcHandler 使用 IControllerFactory 获得实现了IController接口的实例,找到对应的HomeController

根据Request触发HomeController的Index方法

Index将执行结果存放在ViewData

HomeController的Index方法返回 ActionResult

Views/Home/Index.aspx将 ViewData呈现在页面上

Index.aspx执行ProcessRequest方法

Index.aspx执行Render方法 输出到客户端

15 启用一个线程是用run()还是start()

start()

你可能感兴趣的:(笔记,.net,microsoft)