C# & .NET软件工程师面试

本文汇总了C#软件工程师面试中常见的技术问题及其解答,包括堆栈区别、重载与覆盖、进程与线程等核心概念,以及面向对象、数据库索引等高级主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   C# & .NET软件工程师面试

           

    下答案纯属个人理解及总结,希望给正在找工作的朋友们一点小小的参考,欢迎批评指正

       

 

  一、常见面试题解析

  1.C#中堆和栈的区别

     答:堆:由程序员分配内存空间,并指明大小,一般速度比较慢,而且容易产生内存碎片,不过用起来很方便,地址由低向高增长。

          栈:由系统自动分配内存空间,速度较快,但程序员是无法控制的,地址由高向低减少。

 

  2.重载与覆盖的区别

      1)方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。

      2)覆盖只能由一个方法或者是一对方法产生关系;方法的重载是多个方法之间的关系。

      3)覆盖要求参数列表相同;重载要求参数列表不同。

      4)覆盖关系中,调用哪个方法体,是根据对象类型(对象对应的存储空间类型)来决定的;重载关系,是根据调用时的参数表与形参表来选择方法的。详细解析

 

  3.进程与线程的区别 

     答:简单说来,一个程序至少有一个进程,一个进程至少有一个线程。进程是包含了某些资源的内存区域,进程中所包含的一个或多个执行单元称为线程。进程是系统进行资源调度和分配的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。进程在执行过程中拥有独立的内存单元,而线程与运行在同一个进程中的线程共享进程中的所有资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程可以并发执行。

 

   4.简述 public ,private ,protected,internal的访问权限

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

 

   5.比较页面传值的几种方式

     答: 1) 使用QueryString,  如....?id=1; response. Redirect().... ,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案

           2)使用Session变量,Session变量存储过多的数据会消耗比较多的服务器资源,而且喜欢丢值。
        3)使用Server.Transfer,使用这种方法是简洁的同时又是面向对象的。
        4)Application 
        5)<input type="hidden"></input> 
        6)数据库

 

   6.简述什么是委托及其与事件的关系

     答:委托类似于函数指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实例方法,委托不带方法体。事件是一种消息机制,它是委托。当事件发生时,委托就会将事件传递给它的处理方法,由处理方法来结束事件的处理。

 

   7.System.String 和StringBuilder 的区别

    答:String的功能已经使得他在处理字符类类型上面应经很完美了。但是在创建大量使用文本数据的程序时,它的效率就显得低了些。.NET字符串的一个非常重要的事实,字符串一旦建立,它的值就将不可再被修改。表面上我们可以给字符串变量任意赋新值,但实际上并没有修改已存在的字符串对象的底层缓存区,而是字符串变量(引用型)指向了新的字符串对象,原先的字符串最终将被垃圾回收掉。StringBuilder:解决了String重复开辟空间对资源的浪费。它提供了对底层缓冲区的直接访问。长度是可变的。创建对象的同时可以指定对象所包含的字符串的初始个数,默认情况容量16。缓冲区会在初始容量不足时实时的调整大小。在许多情况下,应选择System.String表示文本,对多数应用程序来说,可以忽略返回一个修改的字符数据的副本的开销。但是,若创建的是一个文本密集的应用程序(如一个字符处理程序),使用System.Text.StringBuilder的性能要好得多。、

 

    8.DataSet与DataReader的区别

     答:DataSet实际上是一个离线数据集,它不用保持数据库连接,而DataReader要保持数据连接。DataSet使用前必须填充,所以必须开辟内存空间存储DataSet中的数据,而DataReader不必在内存中存储所有数据。因此,如果要读取少量数据时使用DataSet可以提升程序的性能,读取大量数据时使用DataReader将比DataSet更加快。DataSet可以对读取的数据进行操作,而DataReader的数据是只读的。

    9.抽象类和接口的异同

       http://blog.youkuaiyun.com/huang_dannier/archive/2010/04/17/5496268.aspx

 

   10.maching.config与web.config

 

     答:Machine.config 和 Web.config 文件共享许多相同的配置部分和 XML 元素。Machine.config 用于将计算机范围的策略应用到本地计算机上运行的所有 .NET Framework 应用程序。开发人员还可以使用应用程序特定的 Web.config 文件自定义单个应用程序的设置。

 

 

   11.接口的显式实现与隐式实现的区别                                                                

          http://www.52net.org/html/_Net_kaifayuyan/C_/20091109/10668.html

 

   12.谈谈你对面向对象的理解

          http://baike.baidu.com/view/125370.htm?fr=ala0_1

 

   13.谈谈数据库索引

 

       这个很详细   数据库索引的作用

 

 

   14.查询100~200条的数据记录

 

          select * from (
          select a.*,rownum r from tablea a where r<20)
          where r >=10

 

     15.<div>与<span>的区别

       答: <div>是一个块级元素,它包围的元素会自动换行,而<span>仅仅是一个行内元素,在它的前后不会换行。<span>没有结构的意义,纯粹是应用样式。<span>可以包含于<div>,反之不成立。

 

    16.浏览器的几个弹出窗口

       答:alert,confirm,prompt

 

   17.如何连接两个有序数组

       答:其实,我不怕说出来,将两个数组的数据都取出来放到第三个数组中,然后,对数组进行排序。O(∩_∩)O~ 很笨的方法。

 

   18.正则表达式,举例说明。

      答: 待续。

   19.简述装箱和拆箱

      答:将值类型的数据转换为引用类型的数据的过程叫做装箱,反之为拆箱。

 

   20.请说说.net中类和结构的区别。

      答:结构和类有大体的语法,但结构受到的限制比类多。结构不能申明有默认的构造函数,因为结构的副本是由编译器创建和销毁的,所以不需要默认的构造函数和析构函数。结构是值类型,所以对结构变量所做的改变不会影响其原值;而类是引用类型,改变其变量的值会改变其原值。申明结构用struct关键字,而申明类用class关键字。向方法传递结构是通过值传递的,而不是通过引用。与类不同,结构的实例化可以不使用new关键字。类可以实现接口。

    

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

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

 

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

      答:Constructor不可以被继承,因此不能被重写,但可以被重载。

 

   23.是否可以继承String类?

      答:因为String类是final类,所以不能被继承。

 

   24.数组有没有length()方法?string 有没有这个方法呢?

      答:数组没有length()方法,但是有length属性。string 有这个方法。

 

   25.error和exception的区别

      答:error的恢复不是不可能,但是会很困难。exception表示程序正常运行过程中不能发生的情况。

   26.谈谈final,finally和finallize的区别。

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

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

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

   27.hashMap和hashtable的区别。

      答:hashMap是hashtable的轻量级实现,非线程安全的实现他们都实现了map接口,主要区别是hashMap键值可以为null,效率可以高于hashtable。

 

    28.Collection和Collections的区别。

      答:Collection是集合类的上级接口,Collections是针对集合类的一个帮助类,它提供一系列的静态方法来实现对各种集合的搜索、排序和线程安全化操作。

 

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

      答:IEnumerable接口和GetEnumerator()方法。

 

    30.如何理解.net中的垃圾回收机制。

    31.什么事Soap?

   

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Daniel的技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值