就业模拟试题_Net(答案)

一、 基础知识部分(每题3分,共60分)

 

  1. 委托是什么,事件跟委托是不是一回事?

答案

委托是一种传递消息的机制,可以将与委托签名相同的方法作为参数传递

签名相同包括:方法的返回值类型,参数个数和类型

事件是一种特殊的委托

 

 

  1. net中读写数据库需要用到那些类?他们的作用?

答案

SqlConnection 连接数据库

SqlCommand 执行Sql语句或存储过程

SqlDataReader 实现对数据表记录向前只读,一次读取一条记录

SqlDataAapter 执行Sql语句或存储过程

SqlParameter  向Sql语句或存储过程传递参数

 

 

  1. DataSet和DataReader的区别是什么?

答案

DataSet提供一个内存中数据的关系表示形式,相当于内存中的数据库。DataSet中包含表集合和表和表之间的关系。

DataReader提供一个来自数据库的快速、向前、只读数据流。

DataSet 和DataReader都是ADO.NET提供以下两个操作关系数据库的主要对象。

DataSet经常会利用DataAdapter一次性从数据库里提取大量数据存放在其中,实现与用户数据源进行双向交互。当使用DataSet时,也可以利用DataView对DataSet中的数据应用排序和筛选。也可以从DataSet继承,创建强类型DataSet,用于将表、行和列作为强类型对象属性公开。
当设计应用程序时,要考虑应用程序所需功能的等级,以确定使用DataSet或者是DataReader。

 

  1. 能用foreach遍历访问的对象需要实现哪个接口或声明哪个方法的类型?

答案

IEnumerable 、 GetEnumerator

 

  1. 简述 private、 protected、 public、 internal 修饰符的访问权限

答案

Public 公有,其他类都可以访问

    Protected 保护,只有本类和子类可以访问

    Private 私有,只有本类可以使用

    Internal 内部,本程序集中的类可以使用。

 

  1. 列举ASP.NET 页面之间传递值的几种方式

答案

1.使用Url重写QueryString, 如....?id=1; response. Redirect()....
2.使用Session变量

3.使用Cookie

4.使用Server.Transfer

5.使用Button控件的PostBackUrl属性

 

  1. CTS、CLS、CLR分别作何解释?

答案

CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

 

  1. 什么是装箱和拆箱?

答案

从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。

 

  1. 分析以下代码,完成填空
    string strTmp = "abcdefg某某某";
    int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
    int j= strTmp.Length;
    以上代码执行完后,i=?  j=?

答案

i=13(i输出的是字节数,一个汉字占两个字节),j=10(输出字符数,不分中英文)

 

  1. GC是什么? 如何请求GC?

答案

GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()

 

  1. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

答案

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,前提是实体类必须有明确的构造函数。

 

  1. 什么是自定义控件?动态如何传数据?

答案

1)        概述:自定义控件也是asp.net的一种服务器控件,体现格式为*.dll

2)        适用场合:当.net平台给我们提供的web服务器控件不够用的时候,就需要我们自己开发一个自定义控件,或者又称为第三方控件;可以把该种控件添加到工具箱中,然后就像使用Web服务器控件一样。例如:分页控件

3)        在控件内部公开属性,通过给属性赋值进行数据的交互; 控件最终体现在界面上的样式是靠重写父类的Render方法来实现的

 

  1. 什么是Code-Behind技术?

答案

字面意思就是:代码在后面,也就是代码隐藏的意思。

主要是通过aspx页面指向对应的CS文件,可以实现显示逻辑和处理逻辑的分离,这样做有别于以前的asp页面和代码全混在一起不容易后期的修改和维护,使用code behind更容易维护,美工和程序员可以很好的分工

 

  1. 说明.net中的错误处理机制

答案

  异常处理有两种方法:一种是使用Try Catch处理,一种使用throw扔出

 

  1. 列举一种适合asp.net应用开发的分层结构,介绍每层的作用

答案

1)表现层  显示数据和接受输入

   2)业务逻辑层  用于进行业务数据的处理

   3)数据访问层  用于访问数据

   4)实体层  用于封装数据传递的对象

 

  1. net的身份验证方式有哪些?分别是什么原理?

答案

Windows身份验证,基于Windows系统的用户的认证

Forms身份验证,基于Form表单的认证

 

  1. 请详述在dotnet中类(class)与结构(struct)的异同?

答案

Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.Class可以被继承,struct不可以被继承

 

  1. 常用的调用WebService的方法有哪些?

答案

手动建立Web服务代理,

利用开发环境建立Web服务代理

 

  1. 在net中读取XML文件要用到那些包,类,方法?

答案

System.Xml命名空间包含了一些最重要的XML类,其中最主要的类是和XML文档的读写操作相关的类。这些类中包括4个与读相关的类以及2个与写相关的类。它们分别是:XmlReader、XmlTextReader、XmlValidatingReader、XmlNodeReader、XmlWriter以及 XmlTextWriter。

 

XmlReader类是一个虚基类,它包含了读XML文档的方法和属性。该类中的Read方法是一个基本的读XML文档的方法,它以流形式读取XML文档中的节点(Node)。另外,该类还提供了ReadString、ReadInnerXml、ReadOuterXml和ReadStartElement等更高级的读方法。除了提供读XML文档的方法外,XmlReader类还为程序员提供了MoveToAttribute、MoveToFirstAttribute、MoveToContent、MoveToFirstContent、MoveToElement以及 MoveToNextAttribute等具有导航功能的方法。

XmlTextReader、XmlNodeReader以及XmlValidatingReader等类是从XmlReader类继承过来的子类。根据它们的名称,我们可以知道其作用分别是读取文本内容、读取节点和读取XML模式(Schemas)。

XmlWriter类为程序员提供了许多写XML文档的方法,它是XmlTextWriter类的基类,我在后面的实例中会给出相关的运用方法。

XmlNode类是一个非常重要的类,它代表了XML文档中的某个节点。该节点可以是XML文档的根节点,这样它就代表整个XML文档了。它是许多很有用的类的基类,这些类包括插入节点的类、删除节点的类、替换节点的类以及在XML文档中完成导航功能的类。同时,XmlNode类还为程序员提供了获取双亲节点、子节点、最后一个子节点、节点名称以及节点类型等的属性。它的三个最主要的子类包括:XmlDocument、XmlDataDocument以及XmlDocumentFragment。XmlDocument类代表了一个XML文档,它提供了载入和保存XML文档的方法和属性。这些方法包括了Load、LoadXml和Save等。同时,它还提供了添加特性(Attributes)、说明(Comments)、空间(Spaces)、元素(Elements)和新节点(New Nodes)等XML项的功能。XmlDocumentFragment类代表了一部分XML文档,它能被用来添加到其他的XML文档中。XmlDataDocument类可以让程序员更好地完成和ADO.NET中的数据集对象之间的互操作。

 

  1. 什么是强类型系统?

答案

RTTI:类型识别系统。

 

 

二、 程序题(前6题每题5分,第7题10分。共40分)

 

1.  公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路。

答案

根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。

 

2.  根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:
namespaceTest
{
    public delegate void OnDBOperate();
    public class UserControlBase : System.Windows.Forms.UserControl
    {
       public event OnDBOperate OnNew;
       privatevoidtoolBar_ButtonClick(objectsender,

System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
    if(e.Button.Equals(BtnNew))
    {
      //请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。

}

}

}

   }

 

答案

if( OnNew != null )
OnNew( this, e );

 

3.  仔细阅读下列代码
using System;
class A
{
    public A()
    {
       PrintFields();
    }

//类中定义了一个虚方法
    public virtual void PrintFields(){}
}

//类B继承自类A
class B:A
{
    int x=1;
    int y;
   public B()
   {
     y=-1;
   }
  public override void PrintFields()
   {
     Console.WriteLine("x={0},y={1}",x,y);
   }

}
当使用new B()创建B的实例时,产生什么输出?

答案

X=1,Y=0;x= 1 y = -1

 

 

4.  写出程序的输出结果

class Class1 

{
          private string str = "Class1.str";
          private int i = 0;
          static void StringConvert(string str) 

   {
               str = "string being converted.";
         }
         static void StringConvert(Class1 c) 

{
             c.str = "string being converted.";
         }
         static void Add(int i) 

{
              i++;
         }
         static void AddWithRef(ref int i) 

 {
             i++;
         }
         static void Main() 

{
              int i1 = 10;
              int i2 = 20;
              string str = "str";
              Class1 c = new Class1();
              Add(i1);
              AddWithRef(ref i2);
             Add(c.i);
             StringConvert(str);        
             StringConvert(c);
             Console.WriteLine(i1);
             Console.WriteLine(i2);
             Console.WriteLine(c.i);
             Console.WriteLine(str);
             Console.WriteLine(c.str);
        } 
    }

答案

(考查值引用和对象引用)
10
21
0
str
string being converted.

 

 

5.  用socket实现服务器端向客户端传递几个字符,在客户端输出

答案

Using System.Net.Sockets;

//启动监听

TcpListener objLsn = new TcpListener(1000);

objLsn.Start();

Socket objSocket = objLsn.AcceptSocket();

//发送

String msg = “测试发送”;

Byte[] arr = System.Text.Encoding.Default.GetBytes(msg);

objSocket.Send(arr);

 

参考:WinForm第八章Socket编程

 

 

6.  写出程序的输出结果

public abstract class A 
{
        public A() 
        {
             Console.WriteLine('A');
        }
        public virtual void Fun() 
       {
             Console.WriteLine("A.Fun()");
        }
}

public class B: A 
{
        public B()
        {
             Console.WriteLine('B');
        }

        public new void Fun() 
         {
              Console.WriteLine("B.Fun()");
         }

        public static void Main() 
         {
             A a = new B();
             a.Fun();
         }
}

答案

A
B
A.Fun()
评分标准: 写出A.B 得5分,写出A.Fun()得5分,满分10分。
(考查在继承类中构造函数, 以及new 方法, )

 

 

7.  程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

要求:  1.要有联动性,老鼠和主人的行为是被动的。

2.考虑可扩展性,猫的叫声可能引起其他联动效应。

 

答案

要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
            <2>从Mouse和Master中提取抽象(5分)
            <3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)


    public interface Observer
    {
        void Response();    //观察者的响应,如是老鼠见到猫的反映
    }
    public interface Subject
    {
        void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
    }
    public class Mouse : Observer
    {
        private string name;
        public Mouse(string name, Subject subj)
        {          
            this.name = name;
            subj.AimAt(this);
        }
       
        public void Response()
        {
            Console.WriteLine(name + " attempt to escape!");
        }
    }
    public class Master : Observer
    {  
        public Master(Subject subj)
        {          
            subj.AimAt(this);
        }
       
        public void Response()
        {
            Console.WriteLine("Host waken!");
        } 
    }
 
    public class Cat : Subject
    {
        private ArrayList observers;
        public Cat()
        {  
            this.observers = new ArrayList();
        }
        public void AimAt(Observer obs)
        {
            this.observers.Add(obs);
        }
        public void Cry()
        {
            Console.WriteLine("Cat cryed!");
            foreach (Observer obs in this.observers)
            {
                obs.Response();
            }
        }
    }
    class MainClass
    {      
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
            Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }
    }


//---------------------------------------------------------------------------------------------

设计方法二: 使用event -- delegate设计..
    public delegate void SubEventHandler();
    public abstract class Subject
    {
        public event SubEventHandler SubEvent;
        protected void FireAway()
        {
            if (this.SubEvent != null)
                this.SubEvent();
        }  
    }
    public class Cat : Subject
    { 
        public void Cry()
        {
            Console.WriteLine("cat cryed.");
            this.FireAway();
        }
    }
    public abstract class Observer
    {
        public Observer(Subject sub)
        {
            sub.SubEvent += new SubEventHandler(Response);
        }
        public abstract void Response();   
    }
    public class Mouse : Observer
    {
        private string name;
        public Mouse(string name, Subject sub) : base(sub)
        {  
            this.name = name;
        }
        public override void Response()
        {
            Console.WriteLine(name + " attempt to escape!");
        }
    }
    public class Master : Observer
    {
        public Master(Subject sub) : base(sub){}
        public override void Response()
        {
            Console.WriteLine("host waken");
        }
    }
    class Class1
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
            Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }

    }

 

posted @ 2010-12-19 17:44  左正  阅读(403)  评论(0编辑  收藏  举报