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年后我计划再出国深造。

  • 相关阅读:
    AcWing 157. 树形地铁系统 (hash判断树同构)打卡
    AcWing 156. 矩阵 (哈希二维转一维查询)打卡
    AcWing 144. 最长异或值路径 01字典树打卡
    AcWing 143. 最大异或对 01字典树打卡
    AcWing 142. 前缀统计 字典树打卡
    AcWing 139. 回文子串的最大长度 hash打卡
    AcWing 138. 兔子与兔子 hash打卡
    常用C库函数功能及用法
    编程实现C库函数
    C语言面试题5
  • 原文地址:https://www.cnblogs.com/jerrychenfly/p/2138485.html
Copyright © 2011-2022 走看看