.NET面试题整理(持续更新)

.NET面试题整理(持续更新)

1、get和post有什么区别?

    get是不安全的,因为在传输过程中数据是放在请求中的URL中;post的所有操作对用户来说都是不可见的。

    get传送的数据量较小,主要原因是受URL长度限制;post传送的数据量较大,一般被默认认为不受限制。

    get限制Form表单的数据集的值必须为ASCII字符;post支持整个ISO10646字符集。

    get执行效率比post方法好。get是form提交的默认方式。

2、什么是json?

    json是一种基于JavaScript语法子集的开放标准数据交换格式。json是基于文本的,轻量级的,通常被认为易于读/写

    json虽然与JavaScript紧密相连,但json与语言无关。虽然是独立的,但json使用与其他语言类似的约定,使json称为理想的数据交换语言。

    特性:

        a.灵活性,允许程序员定义键;

        b.内容较少,因为内容主要是数据;

        c.便捷式数据;

        d.被专有的;

        e.Web服务的通用和便捷格式。

3、session和cookie有什么区别?

    session是存储在服务器端的,cookie是存储在客户端的,所以session的安全性要高于cookie。

    我们获取的session里的信息是通过存放在会话cookie里的sessionId获取的。

    session是存放在服务器里的,所以session里的东西不断增加会增加服务器的负担,所以我们需要把一些重要的东西放在session里,不太重要的放在客户端cookie里。

    cookie分为两大类,一个是会话cookie和持久化cookie,他们的生命周期和浏览器是一致的,浏览器关了会话cookie也消失了,而持久化会存储在客户端的硬盘中。

    当浏览器关闭的时候回话cookie也就消失所以session也就消失了,session在服务器关闭或者session过期(默认30分钟)的时候会丢失。

4、JS数组中,var arr = [1,2,1,'apple']; arr的操作函数?

    arr.push();//在数组结尾添加,返回数组长度,改变原数组。

    arr.unshift();//在数组头部添加,返回数组长度,改变原数组。

    arr[index] = val;//修改数组中的元素,index为索引。

    arr.indexOf('apple');//查找某个元素,获取索引,返回查找元素的索引,否则返回-1,不会改变原数组。indexOf对NaN判断有误;es6的新方法:find(),findIndex(),includes()。

    arr.pop();//删除数组最后一个值,返回删除的元素,数组为空返回undefined,改变原数组。

    arr.shift();//删除数组第一个值,返回删除的元素,数组为空返回undefined,改变原数组。

    arr.splice(index,1);//删除指定元素(一般与indexOf一起用),index为索引,1 --删除个数。

5、拼接字符串的几种方式和性能。

    简单的“+=”拼接法,实现原理为先在内存中分配空间,存储变量的对象;“+=”时,又会重新创建一个对象来存储新的字符串,把对象指向新的地址。如果需要循环拼接时,会不断创建新的对象,很浪费性能和内存。

    string.Format(),实现原理是先创建一个StringBuilder类型的变量,长度为第一个参数的长度+参数长度的8倍。.NET自动分配一个比较大的容量来存储。这种方式的代码看起来比较整洁,易于维护,效率也比“+=”高效很多。

    StringBuilder.Append(),实现原理是StringBuilder预先创建一个比较大的内存,以后每次操作时判断容量上限是否不够用,如果不够用就自动把容量扩大一倍,修改的还是第一次创建的对象的值。

    如果是简单的拼接时,可以使用“+=”和string.Format(),循环内拼写很长的字符串时则需要使用到StringBuilder来省性能和内存了。

6、除了返回结果,还有哪些返回参数的方法?有什么区别?

    out和ref都可以返回参数

    使用ref型参数时,传入的参数必须先被初始化,对out而言,必须在方法中对其完成初始化。

    使用ref和out时,在方法的参数和执行方法时,都要加ref或out关键字以满足匹配。

    out适合用在需要return多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

    若要使用ref参数,必须将参数作为ref参数显式传递到方法,ref参数的值被传递到ref参数。

7、函数参数传递时值参数和引用参数传递有什么区别?

    作为引用参数,当参数在函数内被改变,那么该变量也会被改变,而值传递不会。

    参数的类型是值类型还是引用类型和传参数时用值传递还是引用传递是两个不同的概念。

    函数的参数如果不加ref,out这样的修饰符显式申明参数是通过引用传递外,默认都是值传递。

8、静态成员的定义?静态成员与非静态成员的区别?能否大量的使用静态成员?

    定义:static类型标示符,常用的是在类外定义,类内声明。

    区别:

        a.访问方式不一样,静态成员(通过类名.静态成员名访问),而非静态成员(通过对象名.非静态成员名访问);

        b.静态成员属于类,该类的所有对象共同拥有这一个成员,而非静态成员属于对象,每个对象都有一份;

        c.静态成员属于类,类中的所有对象共同拥有这个成员,而非静态成员属于对象,每个对象都有一份

    不能,静态成员初始化在内存中,在整个程序运行期间都不释放,如果后续不引用会加大内存负担和程序运行负担。如果静态成员在多处调用赋值,很可能会造成调用数据混乱的问题

9、谈谈对面向对象的理解?

    封装性:指的是隐藏了对象的属性和细节,仅仅对外提供公共的访问方法,这样会将一些具体的变化隔离开来,提高了复用性和安全性。

    继承性:就是两种事物间存在一定的所属关系,那么继承的类就可以从被继承的类中获得一些属性和方法,提高了复用性。同时继承也是作为多态的前提的。

    多态性:不同对象对同一个事物做出不同的反应,多态存在的三个条件(①有继承关系,②子类重写父类方法,③父类引用子类对象)

10、string str = null 与 string str = "" 有什么区别?

    string str = null 是不给它分配内存空间,而 string str = "" 给它分配长度为空字符串的内存空间。

    string str = null 没有string对象,而 string str = "" 有一个字符串对象。

11、通过超链接如何传递中文参数?

    用URL编码,通过QueryString传递,用urlencode编码,用urlencode解码

12、在.NET中,类(class)与结构(struct)有什么异同?

    class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。

    struct是值类型,是分配在内存的栈上的。结构体是复制传递的。Int32、Boolean等都属于结构体。

13、ADO.NET中的五个主要对象?

    Connection:主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。

    Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源。

    DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。

    DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。

    DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。

    ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。

14、列举ASP.NET页面之间传递值的方式?

    QueryString

    response.Redirect

    session

    cookie

    Server.Transfer

15、使用代码实现冒泡排序功能?

class Program
{
    static void Main(string[] args)
    {
        int[] intList = new int[] { 32, 65, 43, 87, 46, 98, 53, 76, 19, 48 };
        int[] returnList = GetMaoPao(intList);
        foreach (var item in returnList)
        {
            Console.WriteLine(item);
        }
        Console.ReadLine();
    }

    static int[] GetMaoPao(int[] intList)
    {
        int temp = 0;
        for (int i = 0; i < intList.Length - 1; i++)
        {
            for (int j = i + 1; j < intList.Length; j++)
            {
                if (intList[j] < intList[i])
                {
                    temp = intList[i];
                    intList[i] = intList[j];
                    intList[j] = temp;
                }
            }
        }
        return intList;
    }
}

16、简述WebService。

    WebService服务可以描述为可以在web上部署并可以被任何应用程序或其他服务调用的功能。所谓服务就是系统提供一组接口,并通过接口使用系统提供的功能,WebService服务可以提供任何企业到客户,企业到企业,点对点或部门对部门通讯所需的服务,比如一个公司可以通过网络连接到另一个公司的服务,从而直接传递订购单。

17、概述.NET中的GC机制。

    GC的全称是garbage collection,中文名称垃圾回收,是.NET中对内存管理的一种功能。垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时,GC会自动进行。

    在进行垃圾回收时,垃圾回收器会首先搜索内存中的托管对象,然后从托管代码中搜索被引用的对象并标记为有效,接着释放没有被标记为有效的对象并收回内存,最后整理内存将有效对象挪动到一起

18、接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?

    接口是可以继承接口的,抽象类是可以实现接口的。

    抽象类可以继承实体类,但是有个条件就是实体类必须要有明确的构造函数。

19、Override, Overload 的区别?

    Override是重写的意思,它表示重写基类的方法,而且方法的名称,返回类型,参数类型,参数个数要与基类相同。

    Overload是重载是意思,它也表示重写基类的方法,但是只要方法名相同,别的可以不同。



持续更新......

版权声明:若无特殊注明,本文为《奕独客》原创,转载请保留文章出处。
本文链接:.NET面试题整理(持续更新) [https://www.yiduk.com/学习分享/15.html]
正文到此结束

热门推荐