zoukankan      html  css  js  c++  java
  • asp.net面试题

    1,类成员有哪几种可访问形式? this. ; new class().method;
    2,session的存储模式有哪些?
    mode="InProc"
    其中默认的mode是InProc类型,这种模式和以前ASP模式一样,就是服务器将Session信息存储在IIS进程当中,当IIS关闭、重起后这些进程信息都会丢失,但这种模式的性能最高(具体没测,看书上说),这种模式是ASP.NET的默认方式。
    mode="StateServer"
    这种模式当我们重起IIS,保存的session值不会丢失。另外这种方式还可以把信息保存在其他机器的进程中,不过还要更改 stateConnectionString="tcpip=127.0.0.1:42424",IP地址改为其他机器即可。
    mode="SQLServer"

    3,override与overload的区别
    OVERRIDE:重置,覆盖,使原来的失去效果。
    OVERLOAD超载是指在同一可访问区内被声名的、几个、具有不同参数列的(参数类型/个数/顺序,不同)、同名函数,程序会根据不同的参数列来确定需要调用的函数
    Overload没有关系,Override有点关系(范围小的可以被范围大的Override)。
    Overload返回值类型不同不能作为不同的两个函数,Override应该完全一样的返回类型。、

    4,接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
    接口可以继承接口.抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数.

    5,C#是否可以对内存直接进行操作?如果可以,怎么来操作?
    非安全代码

    非安全代码就是不在 CLR 完全控制下执行的代码,它有可能会导致一些问题,因此他们必须用 “unsafe” 进行表明:

    unsafe
    {
    ...
    // unsafe context: can use pointers here
    ...
    }

    在其他一些地方也可以使用关键字 ‘unsafe’,例如我们可以将类或方法表明为非安全的:

    unsafe class Class1 {}
    static unsafe void FastMove ( int* pi, int* pdi, int length) {...}

    ‘unsafe’ 关键字的必要性是它可以防止程序员的一些意外的用法。你可能会问既然是不安全的为什么还有人要用它。答案就是有时候,在有些情况下,还需要用到指针。

    6,遍历页面TextBox并赋值String.Empty,请用C#与js实现
    C#版

    void clean()//循环清空
    {
    for (int i = 0; i < Page.Controls.Count; i++)
    {
    foreach (System.Web.UI.Control control in Page.Controls[i].Controls)
    {
    if (control is TextBox)
    {
    (control as TextBox).Text = "";
    }
    }
    }
    }

    JS版

    <script language="javascript" type="text/javascript">
    function ClearAll()
    {
    var temp=document.forms[0].elements;
    for(var i=0;i <temp.length;i++)
    {
    if(temp[i].type=="text"||temp[i].type=="textarea")
    {
    temp[i].value="";
    }
    }
    }
    </script>

    <input name="button" type="button" onclick="ClearAll()" value="清空" />

    最直接的方法
    <input type="reset" name="Submit" value="重置" />

    7,public static const int A=1;有何错?为什么?
    const就是只读的意思,只在声明中使用;
    static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;
    对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见.
    static const 应该就是上面两者的合集.
    下面分别说明:
    全局:
    const,只读的全局变量,其值不可修改.
    static,规定此全局变量只在当前模块(文件)中可见.
    static const,既是只读的,又是只在当前模块中可见的.
    文件:
    文件指针可当作一个变量来看,与上面所说类似.
    函数:
    const,返回只读变量的函数.
    static,规定此函数只在当前模块可见.
    类:
    const,一般不修饰类,(在VC6.0中试了一下,修饰类没啥作用)
    static,C++中似乎没有静态类这个说法,一般还是拿类当特殊的变量来看.C#中有静态类的详细说明,且用法与普通类大不相同.


    8,请用C#实现一个双向链表
    /双向链表的示例,主要是LinkedList的底层实现方式,所以LinkedList插入和删除很快,不要移动数组
    //而ArrayList是数组的维护,所以读取的速度很快的,而插入和删除要移动数组,所以很慢。这是两者的重要的区别。请特别注意。
    class lianxi1
    {
    static void Main(string[] args)
    {
    LinkNodes <Int32> h1 = new LinkNodes <Int32>(1);
    h1.add(new LinkNodes <Int32>(2));
    h1.add(new LinkNodes <Int32>(3));
    int i = 0;
    while (i <9) //这是为了验证链表的
    {
    Console.WriteLine(h1.name);
    h1 = h1.next;
    i++;
    }
    Console.ReadKey();
    }
    }
    class LinkNodes <T>
    {
    public T name;//T用的是泛型的表示方式
    public LinkNodes <T> previous;
    public LinkNodes <T> next;

    public LinkNodes(T name)
    {
    this.name = name;
    next = this;
    previous = this;
    }
    //以下是仿照JAVA的源代码写出来的,有助于理解,加入的节点放在链表的最后一个位置
    //public LinkNodes(string name, LinkNodes ne, LinkNodes prev)
    //{
    // this.name = name;
    // next = ne;
    // previous = prev;
    //}
    //public void add(LinkNodes para)
    //{
    // addBefore(para, this);
    //}
    //private static void addBefore(LinkNodes para, LinkNodes header)
    //{
    // LinkNodes innerClass = new LinkNodes(para.name, header, header.previous);
    // innerClass.previous.next = innerClass;
    // innerClass.next.previous = innerClass;
    // innerClass = null;
    //}
    这是我理解后写的,代码少些,先把自己的上下连接做好,再去找链表中要修改的连接。
    public void add(LinkNodes <T> para)
    {
    para.next = this;
    para.previous = this.previous;

    para.previous.next = para;
    para.next.previous = para;
    }

    public bool delete(LinkNodes <T> para)
    {
    para.previous.next = para.next;
    para.next.previous = para.previous;
    para = null;
    return true;
    }
    }

    9,能用foreach遍历访问的对象需要怎样实现?
    能用foreach遍历访问的对象需要实现IEnumerable接口或声明GetEnumerator方法的类型

    注:不一定要实现IEnumerable接口,但一定要实现GetEnumrator方法。

    10,值类型与引用类型的区别。
    直白点儿说:值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。
    在把数据赋给值类型和引用类型的时候,两者表现完全不同:
    在把数据赋给一个值类型时,数据存储在堆栈上的变量中。
    在把数据赋给一个引用类型时,变量中只存储一个引用,数据则存储在托管堆上。

    11,asp.net的身份验证有哪些?

    Windows 身份验证提供程序
    提供有关如何将 Windows 身份验证与 Microsoft Internet 信息服务 (IIS) 身份验证结合使用来确保 ASP.NET 应用程序安全的信息。
    Forms 身份验证提供程序
    提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。
    Passport 身份验证提供程序
    提供有关由 Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置

  • 相关阅读:
    一个优秀的博主 有助于前端进阶
    JS异步的理解以及promise
    node-sass出错
    vuecli脚手架搭建
    GitHub上传项目方法
    ES6转ES5
    webpack---安装与卸载
    CSS之BFC详解
    Vue.js学习 --环境搭建
    python is和==的区别
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175899.html
Copyright © 2011-2022 走看看