• 求职技术题目收集③ C# and .NET基础


     

     

    delegate是引用类型还是值类型?enum、int[]和string呢(难度系数40%)?

    delegate引用类型,enum值类型,int[]引用类型,string引用类型。


    我们知道new可以调用构造函数创建一个对象,那么new还有什么别的语法吗?

    隐藏基类相同签名方法,如果在C# 2.0中则还作为泛型构造函数约束。


    base这个关键字有哪几种语法?override呢?

    base两个语法,分别是调用基类构造函数和调用基类方法,override用于重写基类方法。

    请指出C#中是否有下列关键字?virtual、sealed、abstract、import、as、in、goto、final、Const、signed、String(提示,仅指出C#中没有的即可)(难度系数50%)。

    没有的关键字:import、final、Const、signed、String

    在循环:for( int i = 0; i < 100; i++ ) Console.WriteLine( i );中,请指出i++的执行时机。

    在Console.WriterLine( i );执行之后


    试说明continue关键字的用处。

    马上开始下一次循环,忽略循环体余下的语句


    object是C#的关键字吗?请指出C#中有哪些类型关键字,如int、float。(提示,写得越多越好)。

    是,object、int、uint、long、ulong、short、ushort、byte、sbyte、char、float、double、decimal、bool,如回答:enum、struct、class、delegate也算对。


    C#的XML文档注释中(以///开头的注释),<summary>标签用于描述什么?<param>标签呢?

    <summary>用于某个元素的概要说明,<param>用于某个方法的参数概要说明。


    我们知道[]是数组和索引器的访问操作符,但它还有一个语法,是什么?

    特性(Attribute)

     

    重载与覆盖的区别?
    1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系
    2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
    3、覆盖要求参数列表相同;重载要求参数列表不同。
    4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调 用时的实参表与形参表来选择方法体的

     

    &和&&的区别
    &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)

    &不是短路运算 ,而&&是短路运算符。

     

    C#可否对内存进行直接的操作?
    在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员 不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法

     

    对于这样的一个枚举类型:
    enum Color:byte
    {
    Red,
    Green,
    Blue,
    orange
    }
    string[] ss=Enum.GetNames(typeof(Color));
    byte[] bb=Enum.GetValues(typeof(Color));

     

    在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?
    一个是退出整个应用程序,一个是关闭其中一个form。

    103.在C#中有一个double型的变量,比如10321.5,比如122235401.21644,作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50和$122,235,401.22而在英国则为£10 321.50和£122 235 401.22
    答:System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");
    //System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");为英 国 货币类型
    decimal y = 9999999999999999999999999999m;
    string str = String.Format(MyCulture,"My amount = {0:c}",y);

     

    在.net(C# or vb.net)中如何用户自定义消息,并在窗体中处理这些消息。
    在form中重载DefWndProc函数来处理消息:
    protected override void DefWndProc ( ref System.WinForms.Message m )
    {
    switch(m.msg)
    {
    case WM_Lbutton :
      ///string与MFC中的CString的Format函数的使用方法有所不同
      string message = string.Format("收到消息!参数为:{0},{1}",m.wParam,m.lParam);
      MessageBox.Show(message);///显示一个消息框
      break;
    case USER:
    处理的代码
    default:
      base.DefWndProc(ref m);///调用基类函数处理非自定义消息。
      break;
    }
    }

     

    在.net(C# or vb.net)中如何取消一个窗体的关闭。
    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
    e.Cancel=true;
    }

     

    利用operator声明且仅声明了==,有什么错误么?
    要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!="

     

    .net的错误处理机制是什么?
    .net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。

     

    类成员有_____种可访问形式?
    this.;new Class().Method;

     

    XML 与 HTML 的主要区别
    1. XML是区分大小写字母的,HTML不区分。
    2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略

    或者之类的结束 标记。在XML中,绝对不能省略掉结束标记。
    3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。
    4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
    5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

     

    什么是SOAP,有哪些应用。
    simple object access protocal,简单对象接受协议.以xml为基本编码结构,建立在已有通信协议上(如http,不过据说ms在搞最底层的架构在tcp/ip上的soap)的一种规范Web Service使用的协议..

     

    列举一下你所了解的XML技术及其应用
    xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和config,还有与flash通信。

     

    什么是虚函数?什么是抽象函数?
    虚函数:没有实现的,可由子类继承并重写的函数。抽象函数:规定其非虚子类必须实现的函数,必须被重写。

     

    什么是Application Pool?
    Web应用,类似Thread Pool,提高并发性能。

     

    用Singleton如何写设计模式
    static属性里面new ,构造函数private

     

    什么是反射?
    动态获取程序集信息

     

    下面这段代码输出什么?为什么?
    int i=5;
    int j=5;
    if (Object.ReferenceEquals(i,j))
    Console.WriteLine("Equal");
    else
    Console.WriteLine("Not Equal");
    不相等,因为比较的是对象

     

    需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.
    string inputStr=" xx xx ";
    inputStr=Regex.Replace(inputStr.Trim()," *"," ");

     

    在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令 和语句 new 创建实例 new 隐藏基类中方法。
    using 引入名称空间或者使用非托管资源
    new 新建实例或者隐藏父类方法

     

    DataReader与Dataset有什么区别?
    一个是只能向前的只读游标,一个是内存中的表。

     

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

    Random random = new Random();    
     int[] mat = new int[100];  
       int i, p=0, tmp=0;   
      for(i=0;i<num;i++)         
    mat[i] = i;    
     for (i = num-1; i >= 0;i-- )   
      {      
       p = random.Next(0, i); 
            tmp = mat[p];    
         mat[p] = mat[i];      
       mat[i] = tmp;   
      }
    
    

     

    成员变量和成员函数前加static的作用?
    它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。

     

    堆和栈的区别?
    栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
    堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。

     

    进程和线程的区别?
    进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。

     

    short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
    short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

     

    sleep() 和 wait() 有什么区别?
    sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级
    (b)正在运行的线程因为其它原因而阻塞。
    wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到

     

    swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
    switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

     

    两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

    不对,有相同的hash code。

     

    GC是什么? 为什么要有GC?
    GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
    System.gc()
    Runtime.getRuntime().gc()

     

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

     

    简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
    WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

     

    分析以下代码,完成填空
    string strTmp = "abcdefg某某某";
    int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
    int j= strTmp.Length;
    以上代码执行完后,i= j=
    i=13,j=10

     

    在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。
    string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。

     

    .net Remoting 的工作原理是什么?
    服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

     

    常用的调用WebService的方法有哪些?
    1.使用WSDL.exe命令行工具。
    2.使用VS.NET中的Add Web Reference菜单选项

     

    net中读写数据库需要用到那些类?他们的作用?
    DataSet:数据存储器。
    DataCommand:执行语句命令。
    DataAdapter:数据的集合,用语填充。
     

     

    什么是装箱和拆箱?
    从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。

     

    CTS、CLS、CLR分别作何解释?
    CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

     

    什么叫应用程序域?
    应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小

     

    用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
    一般为3层
    数据访问层,业务层,表示层。
    数据访问层对数据库进行增删查改。
    业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。
    表示层为了与用户交互例如用户添加表单。
    优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
    缺点: 增加成本。

     

    override与重载的区别

    override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要
    Override 是进行基类中函数的重写。为了适应需要。

     

    一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
    public class MainClass
    {
    public static void Main()
    {
    Console.WriteLine(Foo(30));
    }
    public static int Foo(int i)
    {
    if (i <= 0)
    return 0;
    else if(i > 0 && i <= 2)
    return 1;
    else return Foo(i -1) + Foo(i - 2);
    }
    }

     

    简述 private、 protected、 public、 internal 修饰符的访问权限。
    private : 私有成员, 在类的内部才可以访问。
    protected : 保护成员,该类内部和继承类中可以访问。
    public : 公共成员,完全公开,没有访问限制。
    internal: 在同一命名空间内可以访问。

    ado.net中常用的对象。

    Connection          打开数据库连接

    Command         执行数据库命令

    DataAdapter     连接数据,执行数据库命令,填充DataSet

    DataSet         数据在内存中的缓存,数据结构

    DataReader          只读向前的读取数据库

    String s = new String("abc");一共分配了几次内存。

    栈空间分配了2次,具体的分配: ”栈空间第一次分配一个指针指到"abc",第二次分配出来给new string("abc"), 第二次的栈指针有个名字叫s.

    面向对象技术的特点
    封装、继承、多态,

    封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。

    封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

    面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

    final,finally,finallize的区别

    final--如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。在.net中,我们使用的是sealed,称作密封类。

    finally—在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize —方法名。Java 技术允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。一旦垃圾回收器准备好释放对象占用的空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。垃圾回收只与内存有关,只所以会用finalize()方法,是由于在分配内存时采用了类似C语言的做法,这种情况主要发生在使用“本地方法”的情况下,本地方法采用的是非java代码方式,本地方法目前只支持C和C++,在非java代码中也许会调用到C的malloc()函数系列来分配存储空间,而且除非调用了free()函数,否则存储空间将得不到释放。

    接口和类的异同。

    异:
    不能直接实例化接口。  //ok
    接口不包含方法的实现。 //ok
    接口、类和结构可从多个接口继承。但是C# 只支持单继承:类只能从一个基类继承实现。 //no
    类定义可在不同的源文件之间进行拆分。//no
    同:
    接口、类和结构可从多个接口继承。//ok
    接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。 //no
    接口可以包含事件、索引器、方法和属性。//no
    一个类可以实现多个接口。//no

    托管资源和非托管资源的管理

    托管资源是指被CLR控制的内存资源,这些资源的管理可以由CLR来控制,例如程序中分配的对象,作用域内的变量等。非托管资源是CLR不能控制或者管理的部分,这些资源有很多,比如文件流,数据库的连接,系统的窗口句柄,打印机资源。

    对于托管资源,CLR为程序员提供了一种内存管理机制,使程序员在编写代码时不需要显示的去释放自己使用的内存资源。这种管理机制被称为GC(垃圾回收)。

    对于非托管资源,它不能释放资源,所以需要程序员手工释放。

    Abtract Class和Interface的区别

    其实网上一大堆,下面表的对比我觉得比较清晰。 

    抽象类( abstract method  ) 接口 (  interface  )
    可以包含实现区块 不能包含实现区块
    可以包含抽象方法 不能包含抽象方法
    可以包含非public成员 不可以包含非public成员
    能继承其他的类,包含非抽象类 能继承其他接口
    可以控制版本 无法控制版本
    不能被实例化 不能被实例化

    Class和Struct的区别

    结构是值类型而且不要求在堆上分配。结构类型的变量直接包含了结构的数据,而类类型的变量包括的是指向数据的引用,这个数据就是对象。

    结构是值类型。

    所有的结构类型都隐式地继承自System.ValueType类。

    对一个结构类型变量的赋值会创建一个被赋值的复制。

    结构的默认值是将所有的值类型字段设为默认值,并将所有的引用类型字段设为null。

    装箱和拆箱操作可用来在结构类型和object类型之间转换。

    对于结构来说this的含义是不同的。

    结构的实例字段声明不可以包含变量初始化语句。

    结构不可以声明无参的实例构造函数。

    结构不可以声明析构函数。

    C#中的委托是什么?事件是不是一种委托?
    委托可以把一个方法作为参数代入另一个方法。
    委托可以理解为指向一个函数的引用。
    是,是一种特殊的委托

    Event

    事件是一个可以让对象或类发出通知得成员。

    事件声明的类型必须是委托类型,而且必须有相同的可访问性。

    在包含了时间声明的类或结构的程序文本里,有些事件可以被当做字段来使用。

    Delegate

    委托实例封装了一个调用列表,这是一个包含了一或多个方法的列表,每一个都指向一个可调用的实体。

    Property

     属性是一个可以访问对象或类的特征成员。和公共字段不同,属性在对象的内部状态和它的公共接口之间提供了一层抽象。

    “Property”其实本质就是一个一对get/set方法(用public来限定),因此它就相当于c++的Member Function或者OOA/OOD中的Method,一个比较特殊一点的方法。

    Attribute

    C#允许程序员为在程序里声明的实体指定说明信息。C#允许程序员发明新的说明信息,称为特性。然后程序员就可以把这些特性附加到各种不同的程序实体上,并在运行时环境里获取这些特性信息。

    一个类无论是否直接继承自抽象类System.Attribute,它都是一个特性类。特性类声明定义了一个新类型的特性,这个特性可以被放置在其他声明之上。

    特性实例是一个在运行时表示特性的实例。特性是由特性类、位置实参和已命名实参定义的。特性实例就是特性类用位置和命名实参初始化出来的实例。

  • 相关阅读:
    Day 20 初识面向对象
    Day 16 常用模块
    Day 15 正则表达式 re模块
    D14 模块 导入模块 开发目录规范
    Day 13 迭代器,生成器,内置函数
    Day 12 递归,二分算法,推导式,匿名函数
    Day 11 闭包函数.装饰器
    D10 函数(二) 嵌套,命名空间作用域
    D09 函数(一) 返回值,参数
    Day 07 Day08 字符编码与文件处理
  • 原文地址:https://www.cnblogs.com/kulong995/p/1680276.html
Copyright © 2020-2023  润新知