zoukankan      html  css  js  c++  java
  • 题目总结2

    1.根据线程安全的相关知识,分析以下代码,当调用test方法时 i>10时是否会引起死锁?并简要说明理由。

    public void test(int i)
    {
        lock(this)
        {
            if(i>10)
            {
                i--;
                test(i);
            }
        }
    }

    不会发生死锁。int型是按值传递的,所以每次改变都是一个副本,因此不会发生死锁。但如果int换做一个object,那么死锁会发生。

    2.简要谈一下您对.Net构架下remoting和Webservice两项技术的理解以及实际中的应用?

    WS主要是可利用HTTP,穿透防火墙。

    而Remoting可以利用TCP/IP,二进制传送提高效率。

    3.什么是方法签名?

    方法签名由方法名称和一个参数列表(方法的参数顺序和类型)组成。并没有返回值和访问修饰符。

    4.怎样实现类中的某个方法不会被覆盖(override)?

    class CC
        {
            public virtual void Print()
            {
                Console.WriteLine("CC");
            }
        }
    
        class DD:CC
        {
            public sealed override void Print()
            {
                Console.WriteLine("DD");
            }
        }

    sealed override。则在DD的子类中则无法覆盖DD中的Print方法。

     5.类可以继承多个接口么?如果这些接口中包含相同方法名呢?

    可以。可以使用 完全限定接口成员名

    6.const和readonly有什么区别?

    const在声明时必须初始化,而readonly则不需要。readonly只能在 声明时构造函数中被初始化

    const关键字用来声明编译时常量,readonly用来声明运行时常量。

    7.写出一条Sql 语句: 取出表A 中第31 到第40 记录(SQLServer, 以自动增长的ID 作为主键, 注意:ID 可能不是连续的。)

    答案1: select top 10 * from A where id not in (select top 30 id from A)

    答案2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

    答案3:  select *
         from (
        select ROW_NUMBER() OVER (ORDER BY GroupID ASC) AS [GSort],*
        from AA
      ) AS TA
      where [GSort]>30 AND [GSort]<=40

    注:

    row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。

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

    session(viewstate)简单,但易丢失;

    application是全局;

    cookie简单,但可能不支持,可能被伪造;

    input type="hidden"简单,可能被伪造;

    url参数简单,显示于地址栏,长度有限制;

    数据库稳定,安全,但性能相对较弱。

    9.接口和类的异同?

    接口和类都是类,不同的是,接口只包含方法或属性的声明,不包含具体实现方法的代码,接口可以实现多重继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法或属性。

    接口主要定义一种规范,统一调用方法,在大型项目中,接口整发挥着重要的作用。

    10.DataReader 和DataSet 的异同。

    DataReader 和DataSet 最大的区别在于,DataReader 使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection 的操作都会引发
    DataReader 的异常..因为DataReader 每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader 的特殊性和高性能.所以DataReader 是只进的..你读了第一条后就不能再去读取第一条了..DataSet 则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet 将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader 要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作。


    11.在c#中using 和new 这两个关键字有什么意义?说出你所知道的意义?

    using可以引入命名空间;在using语句里声明的变量,使用完后会自动调用Dispose方法(实现IDisposable接口)。

    new:实例化变量,调用构造函数,修饰一个方法,泛型声明中用于对泛型参数的约束。

    12.死锁的必要条件?怎么克服?

    系统资源不足;进程的推进的顺序不合适;资源分配不当;一个资源每次只能被一个进程使用,一个资源请求资源资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用完前,不能强行剥夺。

    13.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?

     接口可以继承接口;抽象类可以实现接口;抽象类也可以继承实体类,但有条件:实体类必须有明确的构造函数

    子类在实例化的时候,必定调用父类的构造函数。

     public class t
        {
            //若类未定义任何构造函数 系统会自动生成一个无参构造函数
            public t()
            {
                
            }
        }
    
        public abstract class c : t
        {
            //若类未定义任何构造函数 系统会自动生成一个无参构造函数 
            public c():base()//未指定base的情况下 子类默认调用base()
            {
                
            }
        }

     14.构造器Constructor 是否可以被继承?是否可以被Override?

     Constructor 不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).

    15.当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?

     不可以,一个对象的方法只能由一个线程访问。

    16.用最有效的方法算出等已8 对于几?

    2<<3

    17.C#是否可以对内存直接进行操作?

    C#是可以对内存进行直接操作的,虽然很少用到指针,在用的时候需要在前面加上unsafe。在.NET中使用了垃圾回收机制(GC)功能,它代替了程序员,不过在C#中不可以直接使用finalize方法,而是在析构函数中调用基类的finalize()方法。

    非安全代码

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

    unsafe
    {
         //unsafe context
        ..................
    }

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

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

    18.谈谈final,finally,finallize 的区别?

     final: 用于申明属性,方法和类;属性不可变,方法不可以被覆盖,类不可以被继承。

     Finally:是异常处理语句结构中,表示总是被执行的部分。

     Finalize:表示是object类个一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法。

     19.HashMap 和Hashtable 区别?

     HashMap是Hashtable的轻量级实现,非线程安全的实现,他们都实现了Map接口。主要区别是HashMap键值可以为空null,效率可以高于Hashtable。

    20.C#中委托是什么?事件是不是一种委托?

    委托是一种安全的类似于函数指针,但是他比指针要安全的多,它可以把方法作为一个参数传递给另一个方法,可以理解为指向函数的引用。

    事件是一种消息机制,它是一种委托,委托不带方法体。

    委托是安全的函数指针

    • C或C++,int (*P)() 定义了一个指向返回值为整型的函数指针,无需关心函数参数;
    • 委托则需指定具体的参数类型,个数等;

    21.new的几种用法?

    • 实例化对象;
    • 隐藏继承自父类的方法;
    • 泛型声明中对泛型参数的约束(泛型参数必须有公共无参构造函数);
    class ItemFactory<T> where T : new()
     {
       public T GetNewItem()
      {
                return new T();
             }
        }

     22.任何把一个Array 复制到Arraylist 中?

    • 使用foreach语句逐条加入到ArrayList;
    • 使用ArrayList的Adapter方法,ArrayList list1=ArrayList.Adapter(array);
    • 直接使用构造方法传入,因为Array实现了ICollection:ArrayList list3 = new ArrayList(array);

    arrayList.ToArray()可以转换为数组;

    23.概述反射和序列化?

    反射

       反射是一种动态分析程序集、模块、类型、字段等目标对象的机制。可以用反射动态的创建类型的实例,将类型绑定到现有的对象,或从现有的对象类型里获取类型,然后调用类型的方法或访问字段和属性等。

       他的实现依托于元数据。元数据是存储在PE(portable executable可移植执行)文件中的数据块,它详细记录了程序集或模块内部的结构,引用类型、程序集和清单。(大体可分为:定义表,引用表,清单表)。

    序列化

      对象的序列化,是指把实例对象转换为可方便存储、传输和交互的流。

      如:序列化一个对象,用HTTP通过internet在客户端和服务器之间传递该对象,在另一端用反序列化从该流中重新获得到对象。

    24.UDP和TCP连接有何异同?

      TCP是传输控制协议,提供的是面向连接的,是可靠的字节流服务;当用户和服务器彼此进行数据交互的时候,必须在他们数据交互前要进行TCP连接之后才能传输数据;TCP提供超时重拨检验数据功能。

      UDP是用户数据报协议,是一个简单的面向数据报的传输协议,是不可靠的连接。

    25.进程和线程的理解?

      进程是比线程大的程序运行单元,都是由操作系统的系统运行单元。一个程序中至少要有一个进程;一个进程中,至少要有一个线程;

    线程的划分尺度要比进程要小,进程拥有独立的内存单元,而线程是共享内存的,从而极大的提高了程序的运行效率,同一个进程中的多个线程可以并发执行。

    26.什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS 和CLR 分别作何解释?

     应用程序域:就是为安全性、可靠性、隔离性和版本控制,及卸载程序提供的隔离边界。它通常由运行库宿主创建,应用程序域提供了一个更安全,用途更广的处理单元。

     托管代码:使用CLR编译语言编译器开发编写的代码就叫托管代码。

     装箱和拆箱:是把值类型转换为引用类型的过程,是隐式的,相反的过程就是拆箱,是显式的

     CTS 是公共类型系统,CLS 是公共语言规范,CLR 公共语言运行库。

     强类型系统:每个变量和对象都必须具有申明类型。

    27.值类型和引用类型的区别?

      值类型的值是存放在堆栈中的,作为函数参数传递时,改变其值,不改变变量原有的值,而引用类型的值是存放在堆中的,其引用的地址是存放在堆栈中的,改变其值也就改变了变量原有的 值。值类型不允许包含null 值,然而可空类型可以将null 赋值给值类型。

    28.ASP.net 的身份验证方式有哪些?

    windows,forms,passport。

    29.解释一下UDDI、WSDL 的意义及其作用?

       UDDI是统一描述集成协议,是一套基于Web的,分布式的,为WEB服务提供的信息注册的实现标准规范,同时为也是为企业本身提供的web服务注册以让别的企业能够发现并访问的协议标准。提供了基于标准的规范,用于描述和发现服务,还提供了一组基于因特网的实现。

      WSDL是一个基于XML的描述WEB服务的接口。

    30.SOAP?

     简单对象访问协议:是在分布式环境中,交换信息并实现远程调用的协议。是一个基于XML的协议。使用SOAP可以不考虑任何传输协议,但通常还是HTTP协议,可以允许任何类型的对象或代码。在任何平台上,以任一种语言相互通信,它是一种轻量级协议。

    31.如何理解.net 中的垃圾回收机制?

      .NET 中的垃圾回收机制是引用程序对内存的回收和释放。当每次用new关键字创建一个对象时,运行库都要从托管堆中为其分配内存,因为空间是有限的,最终垃圾回收机制是要回收不用的内存的。已释放内存,重新使用。

    32.能用foreach 遍历访问的对象需要实现?

    实现IEnumerable接口或声明GetEnumerator方法的类型。

     33.Heap 与stack 的差别?

      Heap是堆,空间由手动操作分配和释放的,它是存储区很大的自由存储区。

      Statck是栈,是由操作系统自动分配和释放的,栈上的空间是有限的。程序在编译期间变量和函数分配内存都是在栈上进行的,且在运行时函数调用时的参数传递也是在栈上运行的。

  • 相关阅读:
    LeetCode 515. 在每个树行中找最大值(Find Largest Value in Each Tree Row)
    LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)
    LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)
    LeetCode 1022. 从根到叶的二进制数之和(Sum of Root To Leaf Binary Numbers)
    LeetCode 897. 递增顺序查找树(Increasing Order Search Tree)
    LeetCode 617. 合并二叉树(Merge Two Binary Trees)
    LeetCode 206. 反转链表(Reverse Linked List) 16
    LeetCode 104. 二叉树的最大深度(Maximum Depth of Binary Tree)
    LeetCode 110. 平衡二叉树(Balanced Binary Tree) 15
    LeetCode 108. 将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree) 14
  • 原文地址:https://www.cnblogs.com/zzunstu/p/3550722.html
Copyright © 2011-2022 走看看