面试问题小结

来源:互联网 发布:淘宝有美王月饼官网吗 编辑:程序博客网 时间:2024/06/07 06:39
  Sql server复制表结构到一个指定表

 Q1:

select
    *
into 表5
from
    表4 m             /* m 为表4的复制 */
left join
    (select a.字段1,b.字段2,c.字段3 from 表A a,表B b,表C c where 1<>1) n   /* 表n由select 操作组成 */
on
    1=1

drop table 表4

exec sp_rename '表5','表4'


答小山的题:

Q1: 
        部门ID       部门名称
            1                   部门1
            2                   部门2
            3                   部门3
            4                   部门4

    人员ID     人员姓名         部门ID
      1                   姓名1           1
      2                   姓名2           1
      3                   姓名3           2
      4                   姓名4             3
      5                     姓名5         5

    (1)用一条SQL语句显示所有人员的姓名及所在部门,没有部门的用“未标志”代替。

 SQL-SERVER表连内连接、外连接和交叉连接


用一条SQL语句显示所有人员的姓名及所在部门,没有部门的用“未标志”代替

select a.人员ID,a.人员姓名,isnull(b.部门名称,'未标志') 部门名称 from 人员表 a left outer join 部门表 b on a.部门ID=b.部门ID


      (2)用ASP。NET中的DATAGRID控件,实现以下显示,描述你的思路。

                                                              姓名1
      部门1                                               姓名2
     
      部门2                                               ……
    部门3                                                     ……
 

Q3:   维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么

比较SQL Server约束和DML触发器

 当执行一个DML操作时,系统首先启动一个INSTEAD OF触发器,然后外键约束进行检查,接着再运行AFTER触发器。这表示,在调用AFTER触发器前,表中定义的任何外键约束必须得到满足。

尽可能用约束(包括CHECK(域一致)、主键、唯一键、外键(引用一致)、非空字段)实现,这种方式的效率最好;

其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;

约束能够维护数据库表域和关系之间的数据库完整性;而触发器则擅长于比较以往和当前值,并根据这些数据做出决策。
一般来说,如有可能,使用约束更为有利;而将棘手的商业和审计逻辑留给触发器来解决。

最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。

Q4:ADO。NET相对于ADO等主要有什么改进?

Q5:ASP。NET与ASP相比,主要有哪些进步?

Q6:C#中的委托是什么?事件是不是一种委托?

事件是委托的"变量"

委托本质上是一种“方法接口”,它相当于C/C 中的函数指针,当然它比函数指针安全,在C#中通常用于事件处理。与JAVA相比,可以避免使用大量小粒度的匿名类。

事件不是委托,不过由于事件的性质决定了处理它的程序逻辑能访问的参数,因此,在C#中处理事件的逻辑都包装为委托(一种“方法接口”)。实际上,如果你处理自定义的事件,就像JAVA中那样用接口实现也是可以的,不过这么做在C#一般没有什么特别的好处。

C#委托,事件入门


Q7:描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

get 访问器返回值。set 访问器分配值。
this 关键字用于定义索引器。
value 关键字用于定义由 set 索引器分配的值。
索引器允许类和结构的实例按照与数组相同的方式进行索引,索引器类似于属性,不同之处在于他们的访问器采用参数。被称为有参属性。类的每一个属性都必须拥有唯一的名称,而类里定义的每一个索引器都必须拥有唯一的签名(signature)或者参数列表(这样就可以实现索引器重载)。
属性可以是static(静态的)而索引器则必须是实例成员。

c#中索引器的使用方法详解

Q8:C#中要使一个类支持FOREACH遍历,实现过程怎样?

类要实现IEnumerable接口, 并通过IEnumerable接口的GetEnumerator();返回一个IEnumerator对象。

class ContryList: IEnumerable{

    private ArrayList m_list;
    public CountryList(){
        m_list = new ArrayList();
        m_list.Add("China");
        m_list.Add("America");
    }
    public IEnumerator GetEnumerator(){
        return m_list.GetEnumerator();
    }
}

http://blog.csdn.net/lovelacy/article/details/1601527

Q9:C#中,执行以下代码后S的结果:
        string[]   a=new   string[5];
        aa[0]= "33 ";
        aa[6]= "66 ";
string   s= " ";
foreach(string   m   in   aa)   s+=m;

Q10:写一个HTML页面,实现以下功能,左键点击页面时显示“您好”,右键点击时显示“禁止右键”。并在2分钟后自动关闭页面。
http://hi.baidu.com/liutaiyu3040/blog/item/3cbac9463a5ec20c6b63e5dd.html

Q11:你对XMLHTTP、WEBSERVICE   了解吗?简单描述其特点、作用

WebService是由W3C组织定义的“一个软件系统被设计为支持跨网络实现机器到机器共同操作”。WebService经常使用诸如Web APIs来跨网络访问并执行远端系统上的服务。从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。可扩展的标记语言XML是Web Service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既与平台无关,又与厂商无关。XML是由万维网协会(W3C)创建,W3C制定的XML SchemaXSD定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。Web Service平台是用XSD来作为数据类型系统的。当你用某种语言如VB.NET或C#来构造一个Web Service时,为了符合Web Service标准,所有你使用的数据类型都必须被转换为XSD类型。如想让它使用在不同平台和不同软件的不同组织间传递,还需要用某种东西将它包装起来。这种东西就是一种协议,如 SOAP。

XMLHTTP是一组API函数集,可被JavaScript、JScript、VBScript以及其它web浏览器内嵌的脚本语言调用,通过HTTP在浏览器和web服务器之间收发XML或其它数据。XMLHTTP最大的好处在于可以动态地更新网页,它无需重新从服务器读取整个网页,也不需要安装额外的插件。该技术被许多网站使用,以实现快速响应的动态网页应用。例如:Google的Gmail服务、Google Suggest动态查找界面以及Google Map地理信息服务。XMLHTTP是AJAX网页开发技术的重要组成部分。除XML之外,XMLHTTP还能用于获取其它格式的数据,如JSON或者甚至纯文本。

客户端xmlhttp调用webservice

  • 通过SOAP对WebService进行调用
  • 通过HTTP POST对WebService进行调用
  • 借助MS的webservice.htc简化调用
  • 异步交互、JavaScript脚本和XML封装数据是AJAX的三大特征

    我个人理解web service是跨网络提供服务的一项技术的集合,主要通过各种不同的协议来实现一个服务的支持,比如http(Hypertext Transfer Protocol) 协议,xml(eXtensible Markup Language),soap(Simple Object Access Protocol)协议,WSDL (Web Services Description Language),UDDI (Universal Description, Discovery and Integration)。.net framework中提出了xml web service的概念。这个概念主要阐述了,将xml web service作为一个英特网上进行分布式计算的基础构架。开放标准和通信,实现通过人与应用程序的协作,通过xml web service整合应用程序来创建一个平台。应用程序从不同的源中经过xml web service来整合实现。以下是.net关于xml web service的定义:
    . xml web service通过一个标准的协议向web用户公布实用功能。大多数情况下这个协议是SOAP协议。
    . xml web service通过一种方法去描述接口,这些信息必须足够详细以便用户能根据这些信息去实现一个客户应用程序。这个描述通常是以一个xml文档(Web Services Description Language)呈现。
    .一旦xml web service被注册,那么潜在的用户可以很容易的通过Universal Discovery Description and Integration 找到这些服务。


    Q12:接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?

    接口是一个规范和比抽象类约束更强的类,接口不能拥有实体,而抽象类可以有实体。在定义规范的时候使用接口,在设计类体系是使用抽象类。

    接口是一个纯粹的抽象类,没有任何实际的东西,只是定义了一个框架,而抽象类里面可以有实际的一个方法,并不要求所有的方法都是抽象的。可以实现一个接口中的所有方法,也可以继承一个抽象的类,然后覆写其中的方法。接口一般只有方法,而没有数据成员或属性。抽象类有方法,也有数据成员或属性,一般情况下,优先考虑用接口,只有当可能要访问到数据成员或属性时,用抽象类。

    Q13:自定义控件和一般用户控件的异同?如果要用这两者之一,你会选择哪种?为什么

    Q14:大概描述一下ASP。NET服务器控件的生命周期

    ASP.NET 页面生命周期:
    ASP.NET服务器控件生命周期所要经历的11个阶段


    Q15:UML

    http://www.bianceng.cn/Programming/project/201003/15576_2.htm
    Q16:面向对象的概念,主要特点
    Q17:类划分的依据。类粒度问题

    Q18:   NET Framework与.NET Framework SDK有什么不同?

    .NET Framework是微软开发的运行于老版本之上的.NET软件运行平台。只要安装了.NET Framework,则从Windows 98到Windows XP都可以运行.NET程序。它是一种新的软件运行平台,提供了.NET程序运行时支持和功能强大的类库。可以从微软网站免费下载,大概20多MB。

    如果只安装了.NET Framework,只能运行.NET应用程序,而不能开发.NET应用程序。

    .NET Framework SDK(software development kit) 包括了微软提供的.NET 语言编译器(如C#编译器CSC.exe和VB.NET编译器VBC.exe),完整的.NET Framework文档,以及各种工具(如AL.exe和SN.exe等),大概有110多MB。

    装了这两个东西之后,你就可以用记事本来编写代码,然后在DOS窗口中手动编译.NET程序啦。
    NET  Framework  (约20M)是运行  .NET  程序必需的环境,在以后的  Windows  操作系统(如  Windows  .NET  Server)中,会集成  .NET  Framework。 
    .NET  Framework  SDK  (约100M)是开发  .NET  程序必需的环境。 
    Visual  Studio  .NET  (约2000M)  是  Microsoft  功能强大的  .NET  程序开发工具,但不是开发  .NET  程序必需的。

     

    Q19:C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?

    property用法
    get/set方法。主要用于类与外部程序之间的数据交互使用。增加了对类内部数据访问的安全性和方便性,在编译期就可以进行类型检查和访问权限;

    attribute:

    是一个派生自System.Attribute基类的类。attribute可在反射中被枚举,查询。(当编译器看到一个属性被附着给一个类型或成员时,它会搜索具有指定属性名System.Attribute派生类。如果编译器没有找到匹配的类,它就在指定的属性名后面加上Attribute,然后再进行搜索。因此,常见的使用做法是将属性类名定义为以Attribute结尾,在使用时忽略名称的这一部分。)使用Attribute可以让用户把自定义的信息附属到实体上,还可以在运行时动态查询,这些信息不仅可以被用户取出来作为一种类型的标注,它更可以被编译器所识别,作为编译时的一种附属条件参加程序的编译。

     

    Q20:C#, Java 和 c++的特点,有什么相同的地方,不同的地方,C#分别从c++和java中吸取了他们那些优点?
    (1)语法比较相似
    (2)都是面向对象编程语言,C#和Java是纯面向对象,而c++包含多种编程模式。
    (3)C#, Java都有垃圾回收机制,而c++的内存释放需要程序员自己控制。
    (4)C#, Java都是被编译一种中间语言的模式,然后在运行时由运行环境进行生产机器语言。而c++是直接编译到机器语言。
    (5)C#, Java支持类单继承和接口多重继承,而C++支持类多重继承。
    (6)C#从java中吸取了垃圾自动回收,类单继承和接口多继承,基于一个运行时环境便于平台移植,
    (7)C#,Java没有指针,C++有
    (8)C#加强了Java的属性概念,并在编译器进行安全类型检查和访问控制检查。C++没有
    (9)C#, Java吸收了C++泛型编程的思想,和接口的思想并使其成为语言的一种特性。
    (10)C#还支持对象索引机制。
    (11)没有全局变量,都是从一个基类开始,具有自己的类体系结构,没有头文件概念,都是用层次名称空间来控制体系。

    Q21:C#可否对内存进行直接的操作?
    可以直接操作,只不过需要一下系统的API,如OpenMapingFile等。由于在托管代码中我们不能使用指针,那么需要使用unsafe标记来声明来使用指针对内存进行操作。

     

    Q22:用Visual C++ 6.0编写的代码(unmanaged code),如何在CLR下和其他dot net component结合?
    将unmanaged code 编译成dll, 然后通过DllImport属性的方式导入公开的方法到framework.

    Q23. net的错误处理机制是什么
    异常处理,通过抛出一个异常,在代码块中使用try... catch ... finally关键字来实现异常捕获和处理。.net的所有异常类都是从System.Exception类继承而来。

    Q24. 您了解设计模式么?请列出您所知道的设计模式的名称。
    用来在特定环境下解决问题的一个较优方法。
    单件模式、桥接模式、工厂模式、抽象工厂模式、构建者模式、适配器模式、观察者模式、组合模式。

    Q25. 什么是Application Pool?
    应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置。应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响。

    Q26. Remoting在客户端服务器怎么实现 ?


    Q27 .什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
    应用程序域是一个.net framework提供的执行托管代码的环境。这个环境是提供了一个隔绝的不可卸载的安全边界。你可以在一个应用程序域里加载装配件或可执行程序。并且一个应用程序域运行出错了,可以卸载掉而不用担心影响其他应用程序域的工作。

    托管代码是为面向公共语言运行库的服务编写的代码。

    强类型系统是对数据类型有严格的要求和限制,每一个变量和每一个表达式都有类型,在使用一个变量前系统都会进行类型检查。

    简单的说装箱就是将值类型转换成引用类型,而拆箱刚好是相反的过程。

    重载就是对于同名函数赋予不同的参数列表,以适应同的访问需求:如
    void Output(string name) {}
    void Output(string name, int start) {}

    CTS:公共类型系统.主要是为了语言之间的进行标准化处理.
    CLS:公共语言规范.主要是确保代码可以在任何语言中访问的最小标准集体
    CLR:公共语言运行时.主要是管理代码..处理,加载代码,以及所有服务的代码

    Q28:谈谈final, finally, finalize的区别。

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

    finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会     执行,然后控制就会进入 finally 块(如果有的话)。

    finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理     工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的     ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize()      方法是在垃圾收集器删除对象之前对这个对象调用的。

    Q29:如何处理几十万条并发数据?

    答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.

     

    Q30:Session有什么重大BUG,微软提出了什么方法加以解决?

    答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate   server或SQL   Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。

                 

    Q31:进程和线程的区别?

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

     

    Q32:堆和栈的区别?

    答: 栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。

        堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。

     

    Q33:成员变量和成员函数前加static的作用?

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

     

    Q34:ASP。NET与ASP相比,主要有哪些进步?

    答:asp解释型,aspx编译型,性能提高,有利于保护源码。

     

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

    答:session(viewstate) 简单,但易丢失

        application        全局

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

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

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

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

     

    Q36:请指出GAC的含义?

    答:全局程序集缓存。

    向服务器发送请求有几种方式?

    答:get,post。get一般为链接方式,post一般为按钮方式。

     

    Q37:DataReader与Dataset有什么区别?

    答:一个是只能向前的只读游标,一个是内存中的表。

     

    Q38:软件开发过程一般有几个阶段?每个阶段的作用?

    答:需求分析,架构设计,代码编写,QA,部署

     

    Q39:在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令和语句 new 创建实例 new 隐藏基类中方法。

    答:using 引入名称空间或者使用非托管资源

        new 新建实例或者隐藏父类方法

    Q40:什么叫做SQL注入,如何防止?请举例说明。

    答:利用sql关键字对网站进行攻击。过滤关键字'等

     

    Q41:什么是反射?

    Q42:用Singleton如何写设计模式

    答:static属性里面new ,构造函数private

     

    Q43:什么是虚函数?什么是抽象函数?

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

     

    Q44.什么是XML?

    答:XML即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,即可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。

     

    Q45.什么是Web Service?UDDI?

    答:Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。

       UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

     

    Q46.什么是ASP.net中的用户控件?

    答:用户控件一般用在内容多为静态,或者少许会改变的情况下..用的比较大..类似ASP中的include..但是功能要强大的多。

     

    Q47.列举一下你所了解的XML技术及其应用

    答:xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和config

     

    Q48.ADO.net中常用的对象有哪些?分别描述一下。

    答:Connection 数据库连接对象

        Command 数据库命令

        DataReader 数据读取器

        DataSet 数据集

     

    Q49:什么是code-Behind技术。

    答:ASPX,RESX和CS三个后缀的文件,这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理.

     

    Q50:什么是SOAP,有哪些应用。

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

     

    Q51:XML 与 HTML 的主要区别

    答:1. XML是区分大小写字母的,HTML不区分。 

        2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束       标记。在XML中,绝对不能省略掉结束标记。 

        3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用       查找结束标记了。 

        4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。 

        5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

    Q52:类成员有_____种可访问形式?

    答:this.;new Class().Method;