C#总结二

Ajax实现步骤和原理 
答:Ajax的核心是JavaScript对象XmlHttpRequest,它使您可以使用JavaScript向服务器提出请求并处理响应, 而不阻塞用户,异步请求。

1.获取ajax异步对象

    IE4~IE12 : 使用new ActiveXObject("microsoft.xmlhttp");

    非IE : 使用new XMLHttpRequest();或者 new ActiceXObject(“msxml

2.XMLHTTP”)

2.ajax.open(method,url);

    method是提交方式  有 get和post两种

    url是提交路径

3.ajax.send()

4.ajax.onreadystatechange 这是一个监听函数

    包括五中状态码:

        0—ajax异步对象创建完毕,但是还未发送

        1—ajax已经调用了open()方法,但是还未调用send()方法

        2—已经调用send(),但是还未到达服务器端

        3—表示请求已经到达服务端,正在服务端的处理,但是还未响应返回

        4—ajax已经完全接收了服务器的响应信息,但是状态码未必是正确的

        状态码有:

        200:正确

        404/500:错误

        ps:a.每个浏览器的0,1,2,3这四种状态显示的不一样,但是4这个状态码每个浏览器都有,所以我们只需要使用4即可

        b.  0.1.2.3.4是ajax中的响应码,200/404/500是web中的状态码

5.ajax.readyState == 4

6.ajax.status == 200;

7.获取值  ajax.requestText或者ajax.requestXML

ajax的优点

   Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点:

(无刷新,响应快,分担服务器处理压力,标准化)

    1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。

  2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。

  3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

    4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

ajax的缺点

(干掉了back,安全问题 暴露逻辑 跨站点攻击,sql注入等,引擎主持弱,破坏异步机制,不太支持一些手机设备)

下面所阐述的ajax的缺陷都是它先天所产生的。

 1、ajax干掉了back按钮,即对浏览器后退机制的破坏。后退按钮是一个标准的web站点的重要功能,但是它没法和js进行很好的合作。这是ajax所带来的一个比较严重的问题,因为用户往往是希望能够通过后退来取消前一次操作的。那么对于这个问题有没有办法?答案是肯定的,用过Gmail的知道,Gmail下面采用的ajax技术解决了这个问题,在Gmail下面是可以后退的,但是,它也并不能改变ajax的机制,它只是采用的一个比较笨但是有效的办法,即用户单击后退按钮访问历史记录时,通过创建或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在Google Maps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。)

但是,虽然说这个问题是可以解决的,但是它所带来的开发成本是非常高的,和ajax框架所要求的快速开发是相背离的。这是ajax所带来的一个非常严重的问题。

     2、安全问题

技术同时也对IT企业带来了新的安全威胁,ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。ajax的逻辑可以对客户端的安全扫描技术隐藏起来,允许黑客从远端服务器上建立新的攻击。还有ajax也难以避免一些已知的安全弱点,诸如跨站点脚步攻击、SQL注入攻击和基于credentials的安全漏洞等。

     3、对搜索引擎的支持比较弱。

     4、破坏了程序的异常机制。至少从目前看来,像ajax.dll,ajaxpro.dll这些ajax框架是会破坏程序的异常机制的。关于这个问题,我曾经在开发过程中遇到过,但是查了一下网上几乎没有相关的介绍。后来我自己做了一次试验,分别采用ajax和传统的form提交的模式来删除一条数据……给我们的调试带来了很大的困难。

     5、另外,像其他方面的一些问题,比如说违背了url和资源定位的初衷。例如,我给你一个url地址,如果采用了ajax技术,也许你在该url地址下面看到的和我在这个url地址下看到的内容是不同的。这个和资源定位的初衷是相背离的。

     6、一些手持设备(如手机、PDA等)现在还不能很好的支持ajax,比如说我们在手机的浏览器上打开采用ajax技术的网站时,它目前是不支持的,当然,这个问题和我们没太多关系。

ajax的几种框架

  目前我们采用的比较多的ajax框架主要有ajax.dll,ajaxpro.dll,magicajax.dll 以及微软的atlas框架。Ajax.dll和Ajaxpro.dll这两个框架差别不大,而magicajax.dll只是封装得更厉害一些,比如说它可以直接返回DataSet数据集,前面我们已经说过,ajax返回的都是字符串,magicajax只是对它进行了封装而已。但是它的这个特点可以给我们带来很大的方便,比如说我们的页面有一个列表,而列表的数据是不断变化的,那么我们可以采用magicajax来处理,操作很简单,添加magicajax之后,将要更新的列表控件放在magicajax的控件之内,然后在pageload里面定义更新间隔的时间就ok了,atlas的原理和magicajax差不多。但是,需要注意的一个问题是,这几种框架都只支持IE,没有进行浏览器兼容方面的处理,用反编译工具察看他们的代码就可以知道。

 除了这几种框架之外,我们平时用到的比较多的方式是自己创建xmlHttpRequest对象,这种方式和前面的几种框架相比更具有灵活性。另外,在这里还提一下aspnet2.0自带的异步回调接口,它和ajax一样也可以实现局部的无刷新,但它的实现实际上也是基于xmlhttprequest对象的,另外也是只支持IE,当然这是微软的一个竞争策略。

数据访问层 逻辑层 表示层

优势:分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用、标准定义

缺陷:降低性能,导致代码级联修改

Mvc模式

模型 试图 控制器

mvc的优点

1.清晰利于维护

2.没有viewstate和服务器表单控件,更方便控制应用程式

3.通过controller 来控制程序请求,可以提供丰富的url重写。

4.对单元测试支持更出众。

5.在团队开发模式下表现更出众。

Mvc缺点

1.增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。  

2. 视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用

3. 视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

 

MVC:即Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,也是一种经典的设计模式,控制器负责业务逻辑,并调用视图生成界面,从界面获取数据传到model,model层负责实体数据和业务逻辑,用一种业务逻辑,数据,界面显示分离的方法组织代码。

EF:实体框架(Entity Framework)是微软以ADO.Net为基础开发出来的对象关系映射(ORM)解决方案,它解决了对象持久化问题。ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。

网络方面

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

1、在应用程序和远程设备中使用协议和网络地址初始化套接字

2、在应用程序中通过指定端口和地址建立监听

3、远程设备发出连接请求

4、应用程序接受连接产生通信scoket

5、应用程序和远程设备开始通讯(在通讯中应用程序将挂起直到通讯结束)

6、通讯结束,关闭应用程序和远程设备的Socket回收资源

网络结构的七层模型及其核心思想是什么 
第七层:应用层  
     定义了用于在网络中进行通信和数据传输的接口 - 用户程式;  
     提供标准服务,比如虚拟终端、文件以及任务的传输和处理; 
第六层:表示层 
    掩盖不同系统间的数据格式的不同性; 
    指定独立结构的数据传输格式; 
    数据的编码和解码;加密和解密;压缩和解压缩 
第五层:会话层 
    管理用户会话和对话; 
    控制用户间逻辑连接的建立和挂断; 
    报告上一层发生的错误 
第四层:传输层 
    管理网络中端到端的信息传送; 
    通过错误纠正和流控制机制提供可靠且有序的数据包传送; 
    提供面向无连接的数据包的传送; 
第三层:网络层 
    定义网络设备间如何传输数据; 
    根据唯一的网络设备地址路由数据包; 
    提供流和拥塞控制以防止网络资源的损耗 
第二层:数据链路层  
    定义操作通信连接的程序;  
    封装数据包为数据帧;  
    监测和纠正数据包传输错误 
第一层:物理层  
    定义通过网络设备发送数据的物理方式;  
    作为网络媒介和设备间的接口; 
    定义光学、电气以及机械特性。

一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。

 using System.Text; 
StringBuilder sb = new StringBuilder(0, 10000); 
        string strABC = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"; 
        string[] ABC = strABC.Split(','); 
        int len = ABC.Length; 
        Random rd = new Random(); 
        for (int i = 0; i < 10000; i++) 
        { 
            sb.Append(ABC[rd.Next(len)]); 
        }

产生一个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];

如何把一个Array复制到ArrayList 
答: foreach( object o in array )arrayList.Add(o);

C#写一段选择排序算法,要求用自己的编程风格。 
答:private int min; 
    public void xuanZhe(int[] list)//选择排序 
    { 
        for (int i = 0; i < list.Length - 1; i++) 
        { 
            min = i;

            for (int j = i + 1; j < list.Length; j++) 
            { 
                if (list[j] < list[min])

                    min = j;

            }

            int t = list[min];

            list[min] = list[i];

            list[i] = t;

        } 
    }

写一个函数计算当参数为N的值:1-2+3-4+5-6+7……+N 

typeof(foo)myFoo.GetType()

typeof(x)中的x,必须是具体的类名、类型名称等,不可以是变量名称;
typeof是运算符,获得某一类型的System.Type对象;
typeof得到一个Class的Type;
GetType()是基类System.Object的方法,因此只有建立一个实例之后才能够被调用
GetType是方法,获取当前实例的类型.
GetType得到一个Class的实例的Type.

使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?

Web服务使用的消息机制,而Remoting采用的RPC。

Web Service能用于不同平台,不同语言,

Remoting只适用于.Net。

效率上Remoting高于Xml Web Service

Web服务使用的SOAP协议,而Remoting采用的RPC。Web Service能用于不同平台,不同语言,Remoting只适用于.NET应用程序之间的通信。效率上.NET Remoting高于Web Service。一般情况下Web Service主要应用于互联网,.NET Remoting主要应用于局域网。

类型系统是由XMLSchema表示的吗?CLS是XMLSchema表示的吗?

XmlSchema是一个特定的XML文档必须满足的一套标准。这些标准能够描述不同的数据类型

不清楚

 进程(Process)、线程(Thread)、应用程序域(AppDomain)、上下文(Context)的关系如图

net Remoting 的工作原理是什么? 

https://blog.csdn.net/sh524555685/article/details/7454244
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

remotingwebservice两项技术的理解以及实际中的应用。 
答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

属性与索引器的区别

属性 索引器

  通过名称标识。 通过签名标识。

  通过简单名称或成员访问来访问。 通过元素访问来访问。

  可以为静态成员或实例成员。 必须为实例成员。

  属性的 get 访问器没有参数。 索引器的 get 访问器具有与索引器相同的形参表。

  属性的 set 访问器包含隐式 value 参数。 除了 value 参数外,索引器的 set 访问器还具有与索引器相同的形参表。

静态类:

静态类是不能被继承的

a、静态类不能相互继承,因为静态类没有实例构造函数

b、静态类默认直接从Object去继承

c、静态类的本质其实是一个密封类。

类和结构

类是引用类型,可以继承类、接口和被继承,有默认的构造函数,有析构函数,可以使用abstract和sealed,有protected修饰符,必须使用new初始化。 
结构是值类型,只能继承接口,不能被继承,没有默认的构造函数,可以创建,没有析构函数,不可以用abstract和sealed,没有protected修饰符,可以不用new初始化。 

如何选择结构还是类 
1. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些 
2. 结构表示如点、矩形和颜色这样的轻量对象 
例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。 
在此情况下,结构的成本较低。 
3. 在表现抽象和多级别的对象层次时,类是最好的选择 
4. 大多数情况下该类型只是一些数据时,结构是最佳的选择 

关键字——散列函数(哈希函数)——散列地址

优点:一对一的查找效率很高;

缺点:一个关键字可能对应多个散列地址;需要查找一个范围时,效果不好。

散列冲突:不同的关键字经过散列函数的计算得到了相同的散列地址。

好的散列函数=计算简单+分布均匀(计算得到的散列地址分布均匀)

哈希表是种数据结构,它可以提供快速的插入操作和查找操作。

优缺点

优点:不论哈希表中有多少数据,查找、插入、删除(有时包括删除)只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。

哈希表运算得非常快,在计算机程序中,如果需要在一秒种内查找上千条记录通常使用哈希表(例如拼写检查器)哈希表的速度明显比树快,树的操作通常需要O(N)的时间级。哈希表不仅速度快,编程实现也相对容易。

如果不需要有序遍历数据,并且可以提前预测数据量的大小。那么哈希表在速度和易用性方面是无与伦比的。

缺点:它是基于数组的,数组创建后难于扩展,某些哈希表被基本填满时,性能下降得非常严重,所以程序员必须要清楚表中将要存储多少数据(或者准备好定期地把数据转移到更大的哈希表中,这是个费时的过程)。

数据库:

存储过程和sql语句的优缺点

优点: 
1.提高性能,减少网络传输,节约时间 。

2.减少网络流量    存储过程位于服务器上,调用的时候只须传递存储过程的名称以及参数,不用每次访问都传递很长的sql 语句。

4.安全性     减少sql 注入式攻击。

5.可维护性高    更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。

缺点:

1.交互性差 。

2.可移植性差

猜你喜欢

转载自blog.csdn.net/u010773333/article/details/81067493