zoukankan      html  css  js  c++  java
  • C#面试题汇总

    以下列出的所有题目是从网上找的,也有自己修改的地方。

    1. 如果理解装箱、拆箱操作?运用此操作时对系统性能有什么影响?

    装箱:从值类型转换为引用类型

    拆箱:从引用类型转换为值类型

    创建引用类型会比创建值类型对象的系统开销要大得多,因为它在堆上创建了对象,消耗了内存。

    而值类型却只是把值放在了线程堆栈上,所以运用此操作时,对系统性能没什么影响。

    2. XML中的XmlDocument跟XmlReader有什么区别?

    XmlDocument用于读取、操作和修改XmL文档。XmlReader类也读取XML,但它提供非缓存的只进、只读访问。这意味着使用XmlReader无法编辑属性值或元素内容,或无法插入和移除节点。

    3. 接口跟抽象有什么异同?你在平时项目设计过程中何时使用接口?何时使用抽象类?

    接口只能包含方法、属性、索引器和事件四种成员

    抽象类的主要目的是用于继承,表达一种is-a的关系(即:什么是什么的关系),而接口传达的是has-abilities(具有某种能力)的概念

    除非是非常强烈的is-a关系,才用抽象类,其它的情况都优先考虑使用接口。

    4. string 是引用类型还是值类型

    string 是引用类型

    5.进程和线程的区别?

    线程【Thread】与进程【Process】二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比喻来说,如果一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也可以派出几个成员来协同完成,而家庭之外的人则没有办法直接消费不属于自己家庭的财产。

    6. 什么是windiows服务?它的生命周期与标准的EXE程序有什么不同?

    Windows服务是运行在windows后台指定用户(默认system)下的应用程序,它没有标准的UI界面,想比标准的EXE程序,Windows服务是在服务开始的进修创建,而在服务结束的时候销毁,而且可以设置服务是否与操作系统一起启动,一起关闭。它支持三种方式:1)自动方式;2)手动方式;3)禁用。自动方式的时候,Windows服务将在OS启动后自动启动运行,而手动方式则必须手工启动服务,禁用的情况下服务将不能被启动。另外标准的EXE默认使用的当前登录的用户,而Windows服务默认使用System用户,这在对系统资源访问的时候特别需要注意。

    7. Windows单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响?

    这个需要针对硬件平台,公式为:单位上进程能访问的最大内存量=2的处理器位数次方/2,比如通常情况下,32位处理器下,单个进程所能访问的最大内存量为:233/2=2G。单个进程能访问的最大内存量是最大虚拟内存的1/2,因为要分配给操作系统一半虚拟内存。

    8. 什么是强类型,什么是弱类型?哪种更好些?为什么?

    强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语言,如C++,java,C#,Pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如Javascript,VB等。

    9. PID是什么?在做系统的故障排除时,如何使用它?

    PID是进程编号,在系统发现故障的时候,可以根据它寻找故障所发生的具体进程,并且可通过Visual Studio.net等IDE将故障进程附加到进程中进行调试(Debug)。

    10. 单个TCP/IP端口上能够被多少个进程侦听?

    可以为多个,多个为端口复用

    看下面的代码

    端口复用

    Socket socket1 = new Socket(AddressFamily.InternetWork, SocketType.Stream, ProtocalType.Tcp);

    Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocalType.Tcp);

    socket1.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"),8235);

    socket1.Listen(10);

    socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

    socket2.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"),8235);

    socket2.Listen(10);

    Console.Read();

    11. 什么是GAC?它解决了什么问题?

    GAC(Global Assembly Cache),全局应用程序集缓存。它解决了几个应用程序共享某一个程序集的问题。不必再将程序集拷贝到应用程序目录了,其实这道理很简单,.net应用程序在加载的时候,会首先查看全局应用程序集缓存,如果有就可以直接使用,没有再到应用程序目录进行查找。

    .Net开发人员(中)

    1. 简述面向接口、面向对象、面向方面编程的区别。

    面向接口更关注的是概念,它的原则是先定义好行为规范,再根据行为规范创建实现,严格的来说,面向接口应该是面向对象的一部分,因为面向对象也强调的是依赖倒置原则,也就是实现依赖于抽象,而抽象不依赖于具体实现,更具比较的应该是面向接口与面向抽象对象。面向接口更加灵活,但实时时候稍等有些代码冗余,而面向抽象可以结合面向接口,先定义接口,再定义抽象类,在抽象类中处理一些公共逻辑,再实现具体实现类。而面向对象是对复杂问题的分解。面向方面的编程是一种新概念,它解决了很多面向对象无法解决的问题,比如面向对象技术只能对业务相关的代码模块化,而无法对和业务无关的代码模块化,而面向方面正是解决这一问题的方案,它的关键思想是“将应用程序中的商业逻辑与对其提供支持的通用服务进行分离”。

    2. 什么是Interface?它与Abstract Class有什么区别?

    接口(Interface)是用来定义行为规范的,不允许有具体的实现,而抽象类除定义行为规范外,还可以有部分实现,但一个类能实现多个接口,但只能继承一个父类。

    3. 什么是反射?

    程序集包含模块,模块又包括类型,类型下有成员,反射就是管理程序集、模块、类型的对象,它能够动态的创建类型的实例,设置现有对象的类型或获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行是创建和使用类型实例。

    4. 使用ASMX的XMLWeb服务与使用SOAP的.NET Remoting的区别?

    Web服务使用的消息,而Remoting采用的是RPC,Web Service可用于不同的平台,不同的语言,Remoting只能用于.Net。从效率上讲,Remoting比Web服务效率高。

    5. 类型系统是由XML Schema表示的吗?CLS是XML Schematic的表示吗?    (不知道)

    6. 从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?

    这个是不是有点像强弱类型的比较呢?前期绑定是在编译时就确定了要绑定的数据,而后期绑定是只有在运行时才能确定要绑定的数据。所以前期绑定如果失败,会在编译时报编译错误,而后期绑定只有在运行的时候才发生。

    7.调用Assembly.load算静态引用还是动态引用?   应该是动态绑定

    8.何时使用Assembly.LoadFrom?何时使用Assembly.LoadFile?

    用LoadFrom加载的是程序集,这就要求同时将此程序集所依赖的所有程序集一起加载进来,而LoadFile是加载程序集文件的内容,只将传入参数的文件加载进来,不考试依赖程序集,但如果有相同实现,但位置不同的文件用LoadFrom是不能同时加载进来的,而LoadFile可以。因为LoadFile加载的是文件,所以调用它之后,可能因为缺少必要的依赖造成无法被执行。

    9. 什么叫Assembly Qualified Name?它是一个文件名吗?它有什么不同?

    Assembly Qualified Name是程序集限定名称,它不是一个文件名。但比文件名更能确定一个程序集,它包括文件名,但同时也包括文件的版本、公钥和区域。因为同样一个名称的文件可能有不同的版本和区域,此时单独靠文件名称可能会造成不能确定程序集的正确性。

    10. Assembly.Load("foo.dll");这句话是否正确?

    不正确。应该是Assembly.Load("foo"),或者Assembly.LoadFrom("foo.dll");

    11. 做强签名的Assembly与不做强签名的Assembly有什么不同?

    做强签名的Assembly可以做成Com,而不做成强签名的Assembly则不行,同样强签名程序集可以安装到GAC中,而不做强签名的是不可以的。

    12. DateTime是否可以为NULL?

    不可以,因为DateTime为Struct类型,而结构属性值类型,值类型不能为NULL,只有引用类型才可以为NULL。

    13. 什么叫JIT?什么是NGEN?它们分别有什么限制和好处?

    JIT:Just In Time,及时编译,它是在程序第一次运行的时候才进行编译,而NGEN是所谓的Pre-jit,就是说在运行前事先就已经生成程序集的本机镜像,并保存到全局缓存中,NGEN可以提高程序集的加载和执行速度,因为它可以从本机映像中还原代码和数据结构,而不必像JIT那样动态生成它们。

    14. Finalize()和Dispose()之间的区别?

    Finalize()用于隐式释放资源,Dispose用于显示释放资源,FInalize()相当于C++的析构函数。

    15. Using()语法有用吗?什么是IDisposable?它是如何实现确定性终结的?

    有用,实现了IDisposable的类在Using中创建,Using结束后会自动调用该对象的Dispose方法,释放资源。

    16. tasklist /m "mscor"这句命令是干什么的?

    列出所有使用了以“mscor”作为开发的DLL或者EXE的进程和模块信息。

    17. in-proc和out-of-proc的区别

    in-proc是进程内,进程内能共享代码和数据块,out-of-proc是进程外,进程外的互操作需要进程间通讯来实现。

    18. .NET里的哪一项技术能够实现out-of-proc通讯?

    .Net Remoting和WCF技术。

    19. 当你在ASP.NET中运行一个组件时,它在WIndows XP,WIndows 2000,WIndows 2003上分别跑在哪个进程里面?

    Windows XP:aspnet_wp.exe

    Windows 2000: aspnet_wp.exe

    Windows 2003: w3wp.exe

    其它:

    1. DateTime.Parse(myString)这行代码什么问题?

    有问题,如果myString的格式不能满足时间格式,就会出现异常,可以使用DateTime.TryParse()。

    2. PDB是什么东西?在调试中它应该放在哪里?

    PDB是用于保存调试和项目状态信息的文件,在Debug的时候会产生PDB文件,调试的时候它应该放在和对应应用程序集相同的目录中。

    3. 什么叫圈复杂度(Cyclomatic complexity)?它为什么很重要?

    一种代码复杂度的衡量标准。在软件测试的概念里,圈复杂度用来衡量一个模块判定复杂程序,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护。

    4. 写一个标准的Lock,在访问变量的前后创建临界区,要有“双重检查”。

    public void LockTest(0

    {

      Object lockObj = new Object();

      lock(lockobj)

      {

      }

    }

    5. 代码加上需要安全权限的我发有什么好处?

    可以更加灵活的设置对代码的访问权限,实现代码级保护,防止被移动代码恶意利用。

    6. gacutil /l| find /i "Corillian"是什么意思?

    全局程序集缓存中如果有Corillian就更新该程序集,没有就安装。

    7. sn -t foo.dll这句话是干什么的?

    显示程序集foo.dll的公钥标记。

    8. DCOM需要防火墙打开哪些端口?端口135是干什么用的?

    135是远程过程调用(RPC)的默认端口。

    9. 对比OOP和SOA,它们的目的分别是什么?

    OOP是一种编程模型,强调将复杂的逻辑分解成小的模块,主要特性是封装、继承和多态。而SOA是一个技术框架,SOA的思想是将业务逻辑封装成服务或者中间件提供给应用程序来调用,当然其思想是继承和发扬了OOP的优点。

    10. XmlSerializer是如何工作的?使用这个类的进程需要什么ACL权限?

    XmlSerializer是将对象的属性和字段进行序列化和反序列化的,序列化成XML数据,反序列化再将XML转换成对象。应该至少要有ACL读取权限。

    11. 为什么不提倡Catch(Exception)?

      1) try...catch在出现异常的时候影响性能

      2) 应该捕获更具体的异常,如FileNotFound等

    12. Debug.Write和Trace.Write有什么不同?何时应该使用哪一个?

    Debug.Write是调试的时候用来向跟踪窗口输出信息。当编译模式为Debug的时候才有效,为Release时不Debug.Write在编译的时候会忽略。而Trace.Write则在Debug和Release两人种模式下都可以向跟踪窗口输出消息。

    13. Debug Build和Release Build的区别,是否会有明显的速度变化?

    Debug会产生PDB文件,Release不会。Debug用于开发时的调试,不能用于部署,而Release用于部署。Debug编译一些特殊代码,如Debug.Write等,而Release忽略这样的代码。

    14. JIT是以Assembly为单位发生还是以方法为单位发生?这对工作区有何影响?

    以方法为单位发生。因为对于一次运行,很可能只用到一个程序集中极少数类型和对象,而大部分可能并不会被使用,因此CLR不可能把整个程序集都给编译了。

    15. 对比抽象基类和接口的使用

    抽象类可以有具体实现,而接口只定义行为规范,不能有具体实现。一个类只能有一个父类,但可以有多个接口。

    16. a.Equal(b)和a==b一样吗?

    不一样。a.Equal(b)表示 a与b 一致,a==b表示a与b的值相等。

    17. 在对象比较中,对象一致和对象相等分别是指什么?

    对象一致是指两个对象是同一个对象,引用相同。对象相等是指对象的值相同,而引用不一定相同。

    18. 在.NET中如何实现深拷贝?

    实现IClonable接口。

    19. 请解释一下IClonable

    IClonable方法是实现深度复制的接口,实现它应该能实现深度复制一个对象出来。深度复制的特征是调用对象的构造函数,重新生成一个新的实例对象,包括创建对象中嵌套的引用对象的新实例。而Shadow实现的是浅复制,不重新创建新实例,浅复制要实现Object.MemberWiseClone();

    20. 什么叫装箱?

    装箱是将值类型转化成引用类型;而拆箱是指将引用类型转化成值类型。

    21. string是值类型还是引用类型?

    string是引用类型。

    22. XmlSerializer使用的针对属性的模式有什么好处?解决了什么问题?

    只序列化有用的数据,而不是序列化整个对象。  实现没必要的数据冗余,提升序列化时的性能。

    23. 为什么不应该在.NET中使用out参数?它究竟好不好?

    out参数的作用时当一个函数需要有一个或多个返回值的时候,就可以用out。

    24. 有表A,结构如下:

    A:   P_ID  P_Num  S_ID

        1    10    01

        1    12    02

        2    8     01

        3    11    01

        3    8    01

    其中:P_ID为产品ID,P_NUM为产品库存量,S_ID为仓库ID。请用SQL语句实现将上表中的数据合并,合并后的数据为:

    P_ID  S1_ID  S2_ID  S3_ID

    1    10    12    0

    2    8     0     0

    3    11    0     8

    其中:S1_ID为仓库1的库存量,S2_ID为仓库2的库存量,S3_ID为仓库3的库存量。如果该产品在某仓库中无库量,那么就是0代替。

    SELECT P_ID, SUM(CASE S_ID WHEN' 01' THEN P_NUM ELSE 0 END) AS S1_ID,

           SUM(CASE S_ID WHEN '02' THEN P_NUM ELSE 0 END) AS S2_ID,

             SUM(CASE S_ID WHEN '03' THEN P_NUM ELSE 0 END) AS S3_ID

    FROM A GROUP BY P_ID

    25. 叙述Page页面的生命周期?

    PreInit  框架使用该事件来分配Web控件,应用主题,确立母版页,并设置用户个性化配置

    Init    框架使用该事件通过回传或查看状态数据,把Web控件的属性设置为它们先前的值

    Load   当该事件触发时,页面与其控件被完全初始化,并且它们先前的值得以恢复。此刻,与各个Web窗口部件进行交互都是安全的

    引发回传的事件  该事件仅仅是指任何导致浏览器对Web服务器发出回传的事件(如单击按钮)

    PreRender  所有控件数据绑定和UI配置已经发生,并且控件已经准备好用于将它们的数据呈现到将要发出的HTTP响应里

    UnLoad  页面与控件已经完成了呈现过程,并且页面对象将被销毁。

    26. 有AAAA.aspx页面,在Codebehind里动态在页面里面创建一个Checkbox控件,创建后用户在页面中选中该CheckBox,在Codebehind里面如何取该CheckBox值?

    假设窗体中有个Panel控件

    CheckBox cb = new CheckBox();

    cb.ID=“CheckBoxTest”;

    cb.Text="Test CheckBox";

    Panel1.Controls.Add(cb);

    bool isChecked = ((CheckBox)Panel.FindControl("CheckBoxTest")).Checked;

    27.Session跟Cookie有什么关系?假如IE禁止使用Cookie,那Session还有用吗?

    Session(会话状态)它是asp的内置对象,在服务器端存有用户的个人信息,用来唯一表示一名用户。当用户登陆服务器时,系统会自动创建一个Session,它可以暂存用户的首选项和登陆名,时间,状态以及其它实时信息。当Session到期或你的浏览器关闭时,服务器将终止Session。

    Cookie(网上信息数据块)它是asp的内置对象Request和Response中的集合。它在在于你机器上的一个文件夹里,每个有唯一的名字标识,是服务器用于跟踪用户信息,存储用户信息的文件。它可含有Web站点地址信息,用户登陆次数信息,用户登陆信息,Cookie过期时间等内容。

    当用户每次连接服务器时,服务器可以以用Response.Cookie('名称')=值的方式把Session中所有的信息写入Cookie里。服务器也可用Request.Cookies来访问Cookie中值的这种方式把Cookie内容传回服务器做处理并管理Session对象。

    由于COokie和服务器和Session联系紧密,所以当Cookie关闭,Session作用就不大了。

    你为什么想来我们公司工作?  D

    A.主要是这份工作的内容很吸引我。

         B.贵公司在业界颇出名的,听说管理也很人性化。

         C.我的大学同学在贵公司会计部工作,是他建议我来应征的。

         D.贵公司所处的产业,以及在业界的声誉、工作性质,都很吸引我。

    除了我们公司之外,你还应征了其它哪些公司呢? C

         A.除了向贵公司这样的计算机外设产品公司外,我还应征了××饮料公司、××软件设计公司及××化工公司。

         B.因为是通过人才网站,所以有很多公司与我联络,不胜枚举。

         C.由于我只对计算机公司较感兴趣,因此除贵公司外,我还应征了××及××公司。

         D.我不是很积极地想换工作,这半年多来陆陆续续寄了一些履历,公司名字不太记得。

    你希望5年后达到什么成就? D

         A.做一天和尚敲一天钟,尽人事听天命、顺其自然。

         B.依我的机灵及才干,晋升到部门经理是我的中期目标。

         C.自己独当一面开公司。

         D.“全力以赴”是我的座右铭,希望能随着经验的增加,被赋予更多的职责及挑战。
     
    如果你离开现职,你认为你的老板会有什么反应?   A

         A.很震惊,因为老板对我算是很信赖,我就如同他的左右手一样。

         B.还好吧,他大概心里也有数,反正公司现在也不忙。

         C.他大概习惯了,反正他手下的人来来去去已是司空见惯。

         D.我想他一定会生气地破口大骂,他是一个相当情绪化的人。

    如果我录用你,你认为你在这份工作上会待多久呢?  B

         A.这问题可能要等我工作一段时间后,才能比较具体地回答。

         B.一份工作至少要做3年、5年,才能学习到精华的部分。

         C.这个问题蛮难回答的,可能要看当时的情形。

         D.至少2年,2年后我计划再出国深造。

  • 相关阅读:
    typescript-泛型-类型检查
    typescript-class-interface
    typescript-类class
    typescript-接口interface
    Oracle 密码过期
    VMware Redhat虚拟机扩容硬盘
    华硕 U系列电脑拆后盖注意事项
    VS + QT 出现 LNK2001 无法解析的外部符号 QMetaObject 的问题
    c++ _pFirstBlock == pHead
    c++ 套路多
  • 原文地址:https://www.cnblogs.com/jerrychenfly/p/2138485.html
Copyright © 2011-2022 走看看