2011-2012 基础C#面试题目及答案

来源:互联网 发布:俄罗斯方块软件 编辑:程序博客网 时间:2024/05/07 02:30

此题目为公司HR而做,分初级(50分)、中级(60分)、高级程序员(70分)测试用。

基础题(50分)


  题目A:现有sqlserver数据库Test(数据库连接帐号/密码为:test/123)

    表Article(字段:ID,Title,Introduce,Content)


   1.使用ado.net写出(题目A中)数据库访问的代码(只写函数,返回类型为DataSet) (10分)
       考察点:.net常用框架中日常工作的理解力、代码规范
       答案:(考察点:1.使用Using,2.变量定义规范,3。需求的理解,要求写函数和返回DataSet、数据库表和链接帐号密码)

   2.写出(题目A中)此表的增加、删除、修改存储过程 (10分
      考察点:对数据库操作的熟悉程度

   3.常用的js类库的熟悉程度及其原理(10分)
     如jquery  YUI等
     考察点:对常用WEB开发中类库的使用熟练程度。

   4.传统3层开发框架和MVC的理解(10分)
     参考答案:
          1.表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)(答对这个给2分)
          2.ASP.NET三层架构是一种理论,告诉你理论上怎么分层,ASP.NET MVC 是一种实践,告诉你了具体怎么分层。(答对这个给3分)
 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了 “高内聚,低耦合”的思想。(答对这个给5分)
1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。   
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。   
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。 
MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。
所以, .net的三层结构中,并没有action这个概念。

   5.对c#泛型的理解和应用场景(10分)
    概念答案:
    泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。泛型为.NET框架引入了类型参数(type parameters)的概念。类型参数使得设计类和方法时,不必确定一个或多个具体参数,其的具体参数可延迟到客户代码中声明、实现。这意味着使用泛型的类型参数T,写一个类MyList<T>,客户代码可以这样调用:MyList<int>, MyList<string>或 MyList<MyClass>。这避免了运行时类型转换或装箱操作的代价和风险。
     应用场景:
       1.泛型避免装箱拆箱的性能损耗
       2.代码复用,比如用在ORM中 
       3.参数的范围约束

提高题(30分)

6.(题目A中)写一个监控此表变化的触发器 (8分)
 

   考察点:对数据库DB的深入一点理解(主要要区别对Update Insert Delete的监控)


7.WCF的概念及其应用场景(12分)(目前公司内部系统间接口使用)
   参考答案:
    WCF(原代号为Indigo)是一个用于创建和运行分布式系统的技术集合,使用它能创建安全的(Secure)、可靠的(Reliable)、跨平台的(transacted messaging along with interoperability)的分布式解决方案。它的面向服务的编程模型整合了.Net平台下以往全部的分布式开发技术,例如.Net Remoting,Asp.Net Xml Web Service,MSMQ,WSE,和Enterprise Service等,它可以支持跨应用程序域(AppDomain),进程(Process),网络(NetWork)的进行数据通讯,而且能寄宿在诸如IIS,Windows Service,Console,Windows Application等多种宿主(Host)中。
   1.展开概念包括:契约Contract、地址Address、绑定Binding细节等

8.c# Cache的理解及其应用 (对比Application, Cache, Session, Cookie, Viewstate, Hidden, memcached的用法和区别)(15分)
   参考答案:  
   Application 任意大小(内存限制), 整个应用程序的生命周期, 所有用户,服务器端 。
   Cache 任意大小(内存限制),程序指定生命周期,所有用户,服务器端。(比较灵活)
   Session 小量数据, 某个用户活动时间 + 延迟时间(默认20分钟), 单个用户, 服务器端。
   Cookie 小量数据, 程序指定生命周期, 单个用户, 客户端 。
   ViewState 小量数据,一个web页面的生命期,单个用户,客户端。 
   Hidden控件 小量简单的数据,一个web页面的生命期,单个用户, 客户端 。
   memcached非关系型数据库,支持KEY/VALUE存储和分布式,存储时间可以设定。

9.对常用的设计模式的理解(至少要写出一个,如简单工厂模式)(8分)
    参考答案:
    简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。一般涉及到三种角色(如下): 
工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。 
抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。 
具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,由具体类实现。 

简单工厂模式优缺点: 
模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。 

加分题(20分)

   10.设计一个通用的日志存储模块:(4分)
      要求:考虑到不同监控对象日志的通用性、完整性和高性能

      考察要点:1.数据库设计是否通用 2.是否考虑分布式 3.数据库设计是否考虑大数据量并发(数据如何按照一定的维度拆分,但要考虑统计的性能)


   11.对Nosql数据库和关系性数据库的理解及实际应用场景(4分)
     1、High performance - 对数据库高并发读写的需求 
     2、Huge Storage - 对海量数据的高效率存储和访问的需求
     3、High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求 
  上面提到的“三高”需求面前,关系数据库遇到了难以克服的障碍,所有才出现非关系性数据库。
    包括:
    一、满足极高读写性能需求的Kye-Value数据库:Memcached Redis,Tokyo Cabinet, Flare 
    二、满足海量存储需求和访问的面向文档的数据库:MongoDB,CouchDB 
    三、满足高可扩展性和可用性的面向分布式计算的数据库:Cassandra,Voldemort  
     应用场景: 1.SNS 2.大数据量访问的缓存,顶到数据库前面。
     不适用的场景:电信、金融证券等要求大量事物的应用场景。

   12.项目管理中需求、架构、开发、测试、运维的实际体验。(4分)
   
   13.设计一个高性能的分布式架构(4分)

     答案:(参考静态页面CDN和动态ask的架构)
        如:Cache+XML+MemCached+DB

   14.Map/Reduce的理解(4分)
  参考答案:
   MapReduce是一个最先由Google提出的分布式计算软件构架,它可以支持大数据量的分布式处理。这个架构最初起源于函数式程式的map和reduce两个函数组成。  MapReduce架构是用来解决大数据量的分布式计算问题,然后把计算后的结果放入文件系统或者数据库中。
"Map":主结点读入输入数据,把它分成可以用相同方法解决的小数据块(这里是一个分而治之的思想),然后把这些小数据块分发到不同的工作节点上(worder nodes)上,每一个工作节点(worder node)循环做同样的事,这就行成了一个树行结构(分布式计算中的很多模型都和图论有关,pageRank也是),而每一个叶子节点有来处理每一个具体的小数据块,再把这些处理结果返回给父节点。"Reduce":主结节得到所有子节点的处理结果,然后把所有结果组合并且返回到输出。
MapReduce的一个特点是可以用map和reduceion方法来处理分布式计算的问题(这里有一个移动计算而不是移动数据的概念,因为移动计算比移动数据代价更小)。这里的每一个mapping操作都是相对独立的,所有的maps都是并行运行的,虽然实践中会受到数据源和cpu个数的影响。同样的,这里用一个reducer集合来执行reduction操作,所有带有相同key的map输出会聚集到同一个reducer。虽然这个过程看上去没有串行计算来得高效,但是MapReduce能够处理一般服务器所不能处理的大数据量处理问题。大型的服务器集群可以在几个小时内处理petabyte数据量的排序问题。而并行处理可以提供部分容错和出错恢复的功能。当一个mapper或reducer失效时,整个工作就会被重新安排,从而不会影响工作的连续性。