博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ASP.NET(C#)面试题

Posted on 2011-04-13 17:55  小皓园  阅读(1277)  评论(0编辑  收藏  举报
问答题沿用

S1 C#:

Ch1:

1、= = 与Equals方法的区别?

对于值类型:由于值类型是存储在栈中,两者都是比较的是两个变量的在栈中的值是否相等。

对于引用类型:引用类型是在堆一个存储引用,指向堆中的某个具体值。= =判断引用地址,equals判断值

       2、Java中的switch于C#中的switch的区别

       Java中的switch:只能判断int, short及比int所占字节还少的类型

         C#中的switch:可以判断string及比string所占字节少的类型

Ch2:

1、  冒泡排序(c#)口诀

           int[] numbers ={ 49, 12, 65, 45, 88, 54 };

            //排序前

            Console.WriteLine("排序前:");

            foreach (int i in numbers)

            {

                Console.Write(i + "  ");

            }

            //冒泡排序

            for (int i = 0; i < numbers.Length; i++ )

            {

                for (int j = 0; j < numbers.Length - 1 - i; j++ )

                {//将最大数交换到最后

                    if(numbers[j] > numbers[j+1])

                    {

                        int temp = numbers[j];

                        numbers[j] = numbers[j + 1];

                        numbers[j + 1] = temp;

                    }

                }

            }

            //排序后

            Console.WriteLine("\n排序后:");

            foreach (int i in numbers)

            {

                Console.Write(i + "  ");

            }

2、  分别写出四种循环语法

for(int i=0;i<length;i++){}     while(true){}  foreach(int i in numbers){}   do{}while(true);

3、  编程求数组中的最大数,打印所有的水仙花数,打印九九乘法表

求最大数:int[] numbers ={ 49, 12, 65, 45, 88, 54 };

            int max = 0;

            for (int i = 0; i < numbers.Length-1; i++ )

            {

                if(numbers[i] > numbers[i+1])

                {

                    max = numbers[i];

                }

            }

            Console.WriteLine("最大数为:"+max);

                  水仙花数:for (int i = 100; i < 1000; i++ )

            {

                int a = i % 10;        //个位数

                int b = i % 100;    //十位数

                b = b / 10;

                int c = i / 100; //百位数

                int number = (int)Math.Pow(a, 3) + (int)Math.Pow(b, 3) + (int)Math.Pow(c, 3);

                if(number == i)

                {

                    Console.Write(i + "   ");

                }

            }

                  打印九九乘法表:for (int i = 1; i <= 9; i++ )

            {

                for (int j= 1; j <= i; j++)

                {

                    Console.Write("{0}×{1}={2}\t", j, i, i * j);

                }

                Console.WriteLine();

            }

Ch3:

1、  命名空间的含义:包,便于管理

2、  引用传递和值传递的区别:主要是相对于值类型,用引用传递加ref,就可实现其值真正的改变。值传递,当调用方法结束后,则不会改变值。

3、  请写出String的常用方法(10个),并描述功能

Equals():判断值相等          Split():以…分割每个字符为string[]数组             IndexOf():返回指定字符的索引

Concat():连接,相当于’+’号       Trim():忽略前后空格        ToUpper():转换为大写      ToLower():转换为小写

StartsWith():开头字符是否匹配  SubString():截取字符串    ToCharArray():转换为char[]数组

4、  分别写出数据类型转换(至少四种)的方法,代码举例

显示转换:int i=(int)12.9;

隐式转换:double d=12;

int/double/float.parse ()转换:string s=”13”;              int i=int.parse(s);

convert:int x = 13;       double d = Convert.ToDouble(x);

Ch4:

1、  Partial关键字的含义

Partial局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。

适用于以下情况:(1) 类型特别大,不宜放在一个文件中实现。(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。(3) 需要多人合作编写一个类

http://blog.csdn.net/dotnet90/archive/2006/12/23/1455796.aspx

2、  Windows窗体的生命周期常用事件有哪些?

Initialize, Load, Activated(窗体被激活时), Deactivate(窗体被停用时), FormClosed, FormClosing

3、  写出常用的控件键盘事件和鼠标事件

键盘事件:KeyDown, KeyUp, KeyPress

鼠标事件:Click,DoubleClick,MouseClick,MouseDown,MouseEnter,MouseHover,MouseLeave,MouseMove,MouseUp

4、  请写出MessageBox常用的四种类型,以及返回值类型

MessageBox.Show(“消息内容”);   返回类型:DialogResult

MessageBox.Show(“消息内容”,”标题”);    返回类型:DialogResult

MessageBox.Show(“消息内容”,”标题”);    返回类型:DialogResult

MessageBox.Show(“消息内容”,”标题”, MessageBoxButtons按钮类型);    返回类型:DialogResult

MessageBox.Show(“消息内容”,”标题”, MessageBoxButtons按钮类型, MessageBoxIcon图标类型

);   返回类型:DialogResult

Ch5:

1、  anchor和dock的区别

anchor(锚定):距离容器边缘的距离,当控件锚定到某个边缘时,与指定边缘最接近的控件边缘与指定边缘之间的距离将保持不变。

dock(停靠):将控件停靠在窗体或容器的边缘,距离为0px

2、  如何创建一个MDI窗体(步骤),即多文档窗体

1)设置子窗体:子窗体名称 form = new  Form(); form.MdiParent=this(父窗体); form.show();

2)设置父窗体属性:isMdiContainer=true;

3、  模式窗体和非模式窗体的区别

模式窗体:form.ShowDialog();有返回值:DialogResult;程序会中断,主窗体不能激活,必须关闭模式窗体才能激活主窗体, 只能show出一个

非模式窗体:form.Show (); 无返回值,程序不会中断;可以show出多个

4、  使用第三方类传递窗体间的数据(代码演示)

public class UserHelpper

        {

        public static string loginId = "";     //用户名

         public static string loginType = "";   //登录类型

}

Ch6:

1、  ADO.Net重要组件(那幅图6.2)

.NetFramework和DateSet

2、  数据提供者程序有哪些

3、  连接字符串的写法(两种)

"Data Source=.\SQLEXPRESS;Initial Catalog=数据库名;Integrated security=true;"

"server=.\sqlexpress; database=数据库名; uid=用户名; password=密码"

4、  Connection对象的属性和方法:数据库连接对象

属性:state 连接状态, DataBase 获取连接对象的数据库名称, DataSource连接对象的实例名

方法:Open()/Close() 打开/关闭数据库, Dispose() 释放连接资源, ChangeDatabase() 为打开的当前连接对象更改数据库名。

5、  异常处理各关键字的作用

try:可能发生异常的代码块

catch:捕获到何种异常,如何去处理, 可以跟多个catch块,但子类异常必须写在父类异常的前面

finally:不管有没有异常都将执行的代码块

6、  Command对象的属性和方法:SQL语句执行命令

属性:CommandText获取或设置要对数据源执行的 Transact-SQL 语句、表名或存储过程。 Connection获取或设置 SqlCommand 的此实例使用的 SqlConnection

方法:ExecuteNonQuery() 执行增,删,改语句,并返回受影响行数; ExecuteScalar() 执行查询,返回结果的第一行第一列,忽略其他列或行; ExecuteReader() 执行查询,返回DataReader对象

Ch7:

1、  DataReader对象的主要属性和方法

属性:HasRows 有没有读取到DataReader中的数据;IsClosed 是否已关闭DataReader对象

方法:Read() 读取一行数据;GetString()/GetDouble()… 获取何种类型的数据值; Close() 关闭DataReader对象; IsDBNull() 获取一个值,用于指示列中是否包含不存在的或缺少的值

2、  请写出获取并使用DataReader对象的步骤

1)建立数据库连接conn=new …Connection(…);          2)创建Command对象cmd= new …Command(sql, conn);        3)执行SQL查询命令sdr=cmd. ExecuteReader();      4)处理数据 while(sdr.Read()){int i=sdr.getInt(0);}

Ch8:

1、  请写出DataSet(临时数据库)的内部结构(图8.2)

2、  写出填充一个DataSet的步骤

3、  数据集的工作原理(图8.3)

4、  如何将数据集中的数据保存到数据库,请写出步骤

 

 

 

 

S2 深入.NET

       Ch1:

1、  画出.NET框架的结构(图1.7)

.net Framework类库:ASP.Net(Web和Web Service)、WinForms、ADO.Net和XML类、基本框架类。

CLR:CLS和CTS。

2、  解释CTS(Common Type System通用类型系统)和CLS(Common Language Specification公共语言规范)的含义

CTS:解决不同语言的数据类型不同的问题。

CLS:实现多种语言之间的互操作性。

3、 
C#编译器
 
画出.NET编译过程(图1.8)


C#代码
 
Microsoft中间语言

(MSIL)
 
平台专用代码
 
VB.Net代码
 
VB.net编译器
 
CLR
 
JIT编译器
 
 

 

 

 




4、  解释.NET解决了DLL灾难

 

5、  解释垃圾回收机制工作原理(回去查资料)

垃圾回收器是用来管理应用程序的内存分配和释放的。当一个应用程序在运行的时候,垃圾回收器设置了一个托管堆。每次当开发人员使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。新创建的对象被放在上次创建的对象之后。垃圾回收器保存了一个指针,该指针总是指向托管堆中最后一个对象之后的内存空间。当新的对象被产生时,运行库就知道应该将新的对象放在内存的什么地方。当垃圾回收器的指针指向托管堆以外的内存空间时,就需要回收内存中的垃圾了。在这个过程中,垃圾回收器首先假设在托管堆中所有的对象都需要被回收。然后它在托管堆中寻找被根对象引用的对象(根对象就是全局,静态或处于活动中的局部变量以及寄存器指向的对象),找到后将它们加入一个有效对象的列表中,并在已经搜索过的对象中寻找是否有对象被新加入的有效对象引用。直到垃圾回收器检查完所有的对象后,就有一份根对象和根对象直接或间接引用了的对象的列表,而其它没有在表中的对象就被从内存中回收

6、  CLR主要用途(Common Language Runtime公共语言运行时)

是所有.Net应用程序运行时的环境,所有应用程序都要使用的编程基础,它如同一个支持.Net应用程序运行和开发的虚拟机。

Ch2:

1、  什么是类和对象

类:具有相同特征工共同行为的一级对象的集合。是一个模子。

对象:是真实的实体。

它们的关系:由对象归纳为类,是归纳对象共性的过程;在类的基础上,将状态和行为实体化为对象的过程称为实例化。

2、  什么是封装

封装是面向对象的三大特性之一,用于隐藏内部实现,对外只暴露对类的基本操作,而不会让其他对象影响类的实现。

3、  什么是函数重载

一个类中两个以上的方法,名字相同使用的参数类型或参数个数不同,称为重载。

其方式包括两种:参数不同类型的重载和参数个数不同的重载。

4、  解释静态方法和实例方法的差别(表2-2)


实例方法:需要使用类的实例对象来调用的方法
 静态方法:通过“类名.方法名”来调用的方法
 
不需要static关键字
 Static关键字修饰
 
实例对象调用
 类名调用,不需要new出来
 
可以直接访问静态成员
 可以访问静态成员
 
可以直接访问实例成员
 不可以直接访问实例成员
 
可以直接调用实例方法和静态方法
 不能直接调用实例方法
 
实例化对象时初始化
 调用前初始化
 


 

5、  写出Pascal和Camel命名法的意义

Pascal命名法:类、属性、方法(公有成员)的命名,单词的第一个字母要大写。

Camel命名法:变量(私有成员)的命名,首字母小写,后面的单词首字母大写。

只通过名称就能猜出此变量的含义,采取有意义的单词。

6、  写出out与ref的区别:都可以将参数值的更改保留

out传递参数:侧重于输出,必须对out参数先进行赋值。

ref传递参数: 侧重于修改,可以不先赋值。

Ch3:

1、  说明枚举的作用

枚举可以避免不合理的赋值,它表示一组有限的值,对可能的值进行约束;更易于输入,使代码更清晰,允许描述性的名称表示数据,使用时直观方便。

2、  写出如何用枚举来进行复合状态判断(上课扩展):http://aierong.javaeye.com/blog/282925

定义性别枚举:public enum Gender

              {

                  male=0, female=1

 }

//将字符串”male”转换为枚举:Gender 性别 = (Gender)Enum.Parse(typeof(Gender), "male");

//将数字0转换为枚举:Gender 性别男 = (Gender)Enum.Parse(typeof(Gender), "0");

//将枚举转换为数字:int i = Convert.ToInt32(Gender.male);

或:int j = ((IConvertible)((System.Enum) Gender.male)).ToInt32(null);

 




 

3、  结构和类的差别(表3-1)


结构struct
 类class
 
值类型
 引用类型
 
不能被继承
 可以被继承
 
可以有默认构造函数
 可以有默认构造函数
 
添加的构造函数必须带参数
 可以添加无参的构造函数
 
创建对象可以不用new
 创建对象必须使用new
 
在结构中给字段赋值是错误的
 类中可以给字段赋值,不能写属性
 
都可以包含字段、方法,也都可以实现接口
 


 

4、  什么是值类型,什么是引用类型

值类型:每个值类型的对象都有一个独立的内存区域保存自己的值,源自System.ValueType,主要包括基本数据类型、结构、枚举

引用类型:存储的是对象的引用,源自System.Object,主要包括类类型、接口类型、数组等

5、  int i=0; object o=new object();运行前两句的内存图


栈区:

int i
 0
 
100H
 new Object()
 

 
 
堆区:

Object o=100H
 
 
 

 
 
 

 

 

 

 




6、  什么是装箱拆箱并举例说明

装箱:把值类型转换成引用类型的过程 int i=10; object obj=i;

拆箱:由引用类型转换为值类型的过程 int j=(int)obj;

7、  请创建一个学生类的类关系图

 

Ch4:

1、  arrayList和hashtable的区别点,写出两种集合的常用方法


ArrayList:实现IList接口,IList继承自ICollection
 HashTable:键-值 key-value
 
使用大小可按需动态增加的数组实现
 表示键/值对的集合,这些键/值对根据键的哈希代码进行组织
 
只能通过数字索引访问元素
 可以通过数字索引和key访问元素
 
常用方法:Add()、Contains()、Remove()、RemoveAt()、ToArray()、Clear();

属性:Count、Item
 Add()、ContainsKey()、ContainsValue()、Remove()、Clear();

属性:Keys、Values、Count、Item
 


2、  什么是泛型,解释泛型的含义及优点

泛型:将类型参数化,通过泛型可以定义类型安全的数据类型,保证了类型的安全性,其性能更高。

如:List<int> list=new List<int>; 访问时不用再进行类型转换,添加元素时也只能添加int类型的数据。

Ch5:

1、  文件读写流程

1)创建文件流:FileStream fs = new FileStream(@"C:\test.txt", FileMode.Create);

            2)创建写入器:StreamWriter sw = new StreamWriter(fs); /读取器:StreamReader sr

            3)写入内容:sw.Write("aaaaaa"); /string content=fs.ReadToEnd();

            4)关闭写入器:sw.Close(); /sr.Close();

5)关闭文件流:fs.Close();

2、  静态类和非静态类的区别


静态类
 非静态类
 
用static修饰
 不用static修饰
 
只包含静态成员
 可以包含静态成员,也可以包含非静态成员
 
不可以包含实例成员
 可以包含实例成员
 
使用类名调用静态成员:类名.方法名()
 使用实例对象调用非静态成员
 
不能被实例化
 可以被实例化
 
不能包含实例构造函数
 可以包含实例构造函数
 


3、  什么是XML:eXtensible Markup Language 可扩展标记性语言

XML用于描述数据,每对标记称为节点,是成对出现的,其各个节点可以自由地扩展,节点区分大小写

4、  写出xmlDocument、xmlNode的常用属性和方法

xmlDocument对象可表示整个XML文档:Load() 读取整个XML结构、ChildNodes 获取所有子节点、DocumentElement获取根节点。

xmlNode表示XML中的节点:InnerText 当前节点的内容、Name当前节点的名字、ChildNodes当前节点的所有子节点。

Ch6:

1、  什么是继承

一个类可以继承自另一个类,比如学生类Student和老师类Teacher继承自Person类,被继承的类称为父类或基类,继承自其他类的类称为子类或派生类。

继承关系在类图中用箭头表示,箭头指向父类。它们符合is-a的关系,即子类is a父类。

继承中的方法重写,虚方法等。用base关键字可以从子类访问父类的属性与方法。

2、  请写出public、private、protected的区别(表6-1)


修饰符
 类内部
 子类
 其他类
 
public
 可以
 可以
 可以
 
private
 可以
 不可以
 不可以
 
protected
 可以
 可以
 不可以
 


Ch7:

1、  什么是抽象类,什么是抽象方法

抽象方法是一个没有实现的方法,在定义方法时增加关键字abstract声明,它没有包括方法执行逻辑的方法体。如:public abstract void SayHi();  含有抽象方法的类称为抽象类。但抽象类的方法并不一定全是抽象方法,也可以包括具体方法。抽象类不能被实例化,也不能是密封或静态的。

2、  Override和new的区别

override:在子类或实现类中用来重写抽象方法或虚方法。将覆盖父类的方法。

new:在子类的用new关键字修饰的方法,将会是一个新的方法,它不会覆盖父类的方法。

3、  解释什么是里氏替换原则(左父右子)

一般发生在多态的情况下。如:父类类型 对象 = new 子类类型();

4、  is和as的区别

is:用于判断类型时,返回true/false。

as:用于两个对象之间的类型转换,当转换失败时,返回null,不会引发异常。

5、  解释关键字virtual的含义

Virtual用来修饰虚方法,虚方法可以有具体的实现,也可以被子类重写。

6、  请画图说明简单工厂设计模式


父类产品
 
子类产品A
 
子类产品B
 
子类产品C
 
工厂
 
客户
 
 

 

 

 

 

 

 

 




7、  虚方法和抽象方法的区别


虚方法
 抽象方法
 
用virtual修饰
 用abstract修饰
 
要有方法体,哪怕只有一个分号
 不能有方法体
 
可以被子类override
 必须被子类override
 
除了密封类外都可以写
 只能在抽象类中
 


 

8、  面向对象的三大特性是什么? 并简述每个原则的基本功能

三在特征:封装、继承、多态。

Ch8:

1、  请解释接口和抽象类的异同点(表8-1)


接口
 抽象类
 
用interface修饰
 用abstract修饰
 
实现类可以实现多个接口
 只能继承一个类
 
实现接口的类必须实现所有接口中的成员
 非抽象派生类必须实现抽象方法
 
直接实现
 需要override实现抽象方法
 
都不能实例化,且均包含未实现的方法,其派生类必须实现未实现的方法。
 


 

2、  接口作为参数的意义和接口作为返回值的意义

接口作为参数时,我们只需要传递一个实现了接口的对象,只要此对象实现了该接口都可作为参数传递进去。

接口作为返回值时,实际上要返回的也是实现了接口的对象。

3、  隐式实现接口和显示实现的操作(代码)

定义接口:public interface IPerson

              {

                  void SayHi();

}

隐式实现:public void SayHi()

             {

                   throw new Exception("The method or operation is not implemented.");

}

显示实现: 避免了接口成员之间因为同名而发生混淆。不能通过类的实例进行访问,强制转换为接口调用。

void IPerson.SayHi()

             {

                   throw new Exception("The method or operation is not implemented.");

}

http://cometlj.javaeye.com/blog/377912

Ch9:

1、  什么是特性

特性:即为目标元素(可以是数据集、模块、类、属性、方法、甚至函数参数等)加入附加信息,类似于注释。其本质上也是一个类。一般来说,特性命名都以Attribute结尾,使用时可以省略。

2、  什么是序列化,写出序列化的基本过程(图9-3)


格式化程序

 
 
序列化:将对象的状态存储到特定存储介质中的过程,也可以说是将对象状态转换为可保持或传输的格式的过程。在序列化过程中,会将对象的公有成员,私有成员包括类名,都转换成数据流的形式,存储到存储介质中,即通常所说的文件。

 


对象是否可序列化
 
对象的成员是否

可序列化
 
格式化器将对象格式化为特定格式数据流
 
写入文件
 
结束

 
 
异常处理退出
 
Yes
 
No
 
No
 
Yes
 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 




3、  序列化和反序列化的用途

当我们需要将对象的字段值保存在磁盘中时,不需要再去编写大量对象去写入,只需要将每个对象加一个可序列化标记[Serializable],就可实现。在远程通信中应用非常广泛。

4、  程序集和命名空间的区别

程序集就是一个编译好的.exe文件,是.net框架应用程序的生成块,它包含编译好的代码逻辑单元。.dll也是一个程序集。

而命名空间namespace是相当于一个包,使用管理我们的代码。

5、  程序集的结构

程序集由描述它的程序集清单(包含指定该程序集的版本要求和安全标识所需的所有元数据)、类型元数据、MSIL代码(实现类型元数据的中间代码)和资源组成。

6、  Sealed修饰属性、方法、类的含义

Sealed修饰类时,表示该类不能再被继承,不能和 abstract 同时使用,因为它们在含义上互相排斥。

用于方法和属性时,表示该方法或属性不能再被重写,必须和 override 关键字一起使用,因为使用 sealed 修饰符的方法或属性肯定是基类中相应的虚成员。

通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱

7、  什么是反射,及功能

反射就是可以用ILDasm反编译工具浏览一个dll和exe的构成。反射可以获取已加载的程序集和在其中定义的类型(如类、接口和值类型)的信息。也可以利用反射在运行时创建类型实例以及调用和访问这些实例。还可以查找程序集的信息。

8、  使用反射实现加载程序集,并实例化该程序集中某一类型,并调用该类型中的某一方法(代码实现)

如:string version=Assembly.LoadFile(@“D:\test.ext”).GetName().Version.ToString();

S2 在.NET框架下开发三层结构

       Ch1:

1、  什么是三层结构,并解释各层次的主要功能(图1-7)

三层:表示层、业务逻辑层(BLL)、数据访问层(DAL)。


表示层
 
业务逻辑层
 
数据访问层
 
为用户提供交互操作界面
 
负责关键业务的处理和数据传递
 
实现数据库访问
 
 

 

 

 

 

 

 




2、  请写出三层数据传递方向(图1-12)


表示层
 
业务逻辑层
 
数据访问层
 
客户请求
 
客户请求
 
响应数据
 
响应数据
 
 

 

 

 

 

 

 

 

 

 




3、  三层开发的优势

便于维护与后期开发,分工明确。

Ch2:

1、  什么是DataView

就是DataTable的动态视图,并可以对动态生成的视图中的数据进行排序、筛选等操作。

2、  使用三层开发用户登陆(画类图)

 

3、  使用代码实现DataSet结构(32页)

两种方式:1)通过指定DataSet中具体的DataTable的某行某列来获取数据:通过表名(从DataSet中获取指定的DataTable)、通过索引(从DataTable中获取指定的DataRow)、通过列名(从DataRow中获取指定列的数据)。2)将DataSet中的数据直接绑定到数据展示控件上

Ch3:

1、  实体类在三层结构中的应用(图3.1)

三层结构之间数据传递的载体,可以消除关系数据与类之间的差别,以便更好地使用面向对象思想来实现系统。

2、  Using关键字在c#中的用法

有两种用法:1)作为指令,引入命名空间;2)作为语句,允许用户定义一个范围,并在此范围末尾自动释放对象。

Ch4:

1、  为什么需要异常处理

处理程序运行时发生的错误。

当异常发生时,系统要能够自动处理,避免系统终止运行,防止出现故障而导致的系统崩溃。

2、  如何进行异常处理

Try…catch…finally

注意:不要用太多的异常处理,同时要尽量避免使用嵌套异常处理,因为异常处理使用不合理会使系统的性能下降。

3、  什么是单元测试

软件开发中的单元测试是对整个项目中的某一个模块及模块中的某一个类、或某类中的某一个方法的测试。

4、  为什么需要单元测试

单元测试要确保编写的代码语法和语义都正确,确保软件质量的具体操作方法。

5、  如何使用VSTS写单元测试(步骤)

创建测试、编写测试、运行测试。

6、  Exception类的常用属性(MESSAGE,SOURCE)的含义

Message:提供引用异常的详细信息

Source:导致异常发生的应用程序或对象的名称。

7、  简述throw关键字在异常处理中的使用过程

throw表示手动抛出一个异常。

如:throw new Exception(“我抛出的异常!”);

Ch5:

1、  什么是设计模式

设计模式描述了软件开发过程中某一类常见问题的一般性解决方案。

而面向对象设计模式是对在特定场景下,解决一般设计问题中类与相互通信工程对象的描述。

2、 

客户
 
抽象工厂设计模式结构图(图5-4\图5-5)


抽象工厂(基类)
 
实体工厂1
 
实体工厂2
 
抽象产品A
 
实体产品A2
 
实体产品A1
 
抽象产品B
 
实体产品B2
 
实体产品B1
 
 

 

 

 

 

 

 

 

 

 

 




3、  简述使用接口、抽象类、抽象方法实现抽象工程设计模式的过程

 




 

Y2 ASP.NET

       Ch1:

1、    ASP.NET的特色与优势(第7页)

优点:1)与浏览器无关;2)方便设置断点、易于调试;3)编译后执行,运行效果提高;

4)丰富的控件库;5)代码后置;

Ch2:

1、  简述ASP.NET的请求流程,说明第一次请求和第二次请求


.aspx文件
 
Asp.net

引擎
 
后置代码
 
生成的页面类
 
页面类
 
第一次请求
 
解析
 
生成
 
编译
 
响应
 
第二次请求
 
第二个请求

实例化
 
 

 

 

 

 

 

 

 

 

 

 




2、  说明Page的Language、AutoEventWireup、CodeFile、Inherits的含义

Language:指定页面代码和后置代码使用的语言;

AutoEventWireup:设置页面是否自动调用网页事件,默认为true;

CodeFile:指定代码后置的文件名

Inherits:页面类

3、  Request对象的QueryString、Form、ServerVariable、params的含义

QueryString:收集以Get方式请求而发送的数据;

Form:收集以Post方式请求而发送的数据;

ServerVariable(环境变量):包含服务器和客户端的系统信息;

Params:以上三种方式的集合,不区分是由哪种方式传递的参数。

4、  COOKIE、SESSION、APPLICATION的区别(表42页)

Cookie:保存少量的、简单的数据,一般不允许超过4KB(与浏览器有关)使用期限可以灵活设定,面向单个用户,保存在客户端。

Session:也只能保存少量的、简单的数据,面向单个用户,单个连接的信息,保存在服务器端。当Session超时或被关闭时,将清空保存的数据(20分钟)。一般用来保存单个用户的登录信息。

Application:能够保存任意大小的信息,在整个应用程序周期中有效,是面对所有应用程序用户的,保存在服务器端。一般保存一些用户共享的的信息。

5、  简述一个session的生命周期(创建->销毁的过程)

一般来说,一个IE启动后,开始请求服务器端的数据开始,Session就创建,当用户停止使用应用程序后(会话结束时),SessionSession一般还要保存20分钟才真正销毁。
6、  说明Server对象的常用方法(第43页表2)

HtmlEncode:可将其html标签,在浏览器中显示成字母,而不转换成标签。

HtmlDecode:与HtmlEncode相反,对已编码的内容进行解码。

MapPath:返回指定路径在磁盘中的绝对路径。

UrlEncode:对URL进行编码,如’#’,’&’等。

UrlDecode:与UrlEncode相反,对URL地址进行解码。

Execute:可将两个页面合并成一个页面显示。

Transfer:服务器端转向,使地址栏不发生变化。

7、  进程COOKIE和永久化COOKIE的区别

进程COOKIE:内存cookie,服务器停止就消失,在服务器运行

永久化COOKIE:

8、  代码演示从客户端取COOKIE,并回写到客户端

 

9、  用session和Cookie保存购物车的流程

 Ch3:

1、  html服务器控件和web服务器控件的区别

html服务器控件;直接产生html标签,响应较快,但功能弱。继承自:System.Web.UI.HtmlControls类。

web服务器控件:转换以后产生html标签,功能强,响应慢,可以执行复杂的页面请求。继承自:System.Web.UI.Control类。以asp:为前缀。

2、  母版页的特点

母版页是以“.master”为后缀的文件,它可以将页面上的公用元素整合到一起,对应内容页。

有4个特点:1)有利于站点修改和维护,降低开发人员的工作强度。2)提供高效的内容整合能力。3)有利于实现页面布局。4)提供一种便于利用的对象模型。

3、  母版页和普通页的区别

区别:1)声明:母版页对应Master,普通页对应Page。2)扩展名:母版页对应.master,普通页对应.aspx。 3)ContentPlaceHolder控件:母版页可以使用ContentPlaceHolder控件,而普通页不可以使用该控件,普通页应用母版页时多产生标签asp:content。

Ch5:

1、 
Control类
 
数据源控件的说明(表5-1)

 


普通数据源控件
 
层次化数据源控件
 
ObjectDataSource
 
SqlDataSource
 
XMLDataSource
 
SiteMapDataSource
 
AccessDataSource
 
 

 

 

 

 

 

 




2、  Eval和Bind的区别

Eval:只读(单向数据绑定),所绑定的内容不会提交回服务器,有一个重载的方法,以实现格式化

Bind:支持读/写(双向),可以更新数据,常常为TextBox控件绑定数据,以提交给服务器

Ch6:

1、  验证控件的工作原理

2、  写出5大验证控件,并分别写出常用属性

验证控件都有一个共同的属性:ControlToValidate 要验证的控件ID

1) RequiredFieldValidator非空验证: Text, ErrorMessage

2) CompareValidator 验证用户输入的内容是否符合要求。

3) RangeValidator 检查范围: MaximumValue, MinimumValue, Type

4) RegularExpressionValidator 正则表达式:

5) CustomValidator 用户自定义验证: ClientValidationFunction, OnServerValidate;

Ch7:

1、自定义分页的SQL语句

       Select Top PageSize * from tablename where 条件 and id not in(select Top PageSize * (pageIndex-1)*PageSize order by 排序条件) order by 排序

2、使用自定义分页的步骤用名字描述

3、  GridView、DataList、repeater三大控件的特点

dataList, repeater两控件的用户类似: repeater不会产生多余的html标签

gridView:比较古板的多行显示。

Ch9:

1、  什么是用户控件: User Control

一种自定义的组合控件,通常由系统提供的可视化控件组合而成。它不仅可以定义显示界面,还可以编写事件处理代码。

2、  用户控件和普通页面的区别(表9-1)


 
 用户控件
 普通页面
 
后缀名
 .ascx
 .aspx
 
指令
 @Control
 @Page
 
继承
 System.Web.UI.UserControl
 System.Web.UI.Page
 
包含
 可以包含控件和其他用户控件,也可以被其他用户控件和页面包含
 可以包含控件和所有用户控件,但是不可以被其他页面所包含
 
直接访问
 不可以,必须包含在页面中才能发挥作用
 可以
 
标签
 不能包含<Html>、<body>等html标签
 可以包含所有的html标签
 
编译和运行
 可以独立编译,但不能单独运行。不可以直接访问。
 可直接访问
 


 

3、  写出用代码加载用户控件的步骤

4、  写出ASP.NET http请求内部过程(图9-12)并解释HTTPMODEL和HTTPHandler

5、  使用HTTPhandler实现水印的步骤

 

Ch10:

1、  web.config和machine.config的层次结构(图10.1)

2、  配置节点和读取该节点的代码

3、  解释身份验证类型(表10-1)

4、  Form常用属性(表10-2)

5、  如何配置自定义错误(P257)

 

 

Y2 使用AJAX和WEB Service重构网上书店

       Ch1:

1、  web service的优点

1)  是可互操作的分布式应用程序 2)具有普通性,它使用HTTP和XML进行通信

3)可以穿越防火墙,真正实现自由通信 4)通过SOAP实现异地调用

2、  解释SOAP协议

SOAP是Web Service的基本通信协议。它是在分散或分布式的环境中交换信息的,是基于XML的协议。通过它我们可以实现不同项目、不同站点,甚至异地调用。

3、  说明WSDL的作用,描述XML配置节的含义

Ch2:

1、  ajax的组成原理,并用代码实现

XmlHttpRequest从服务器(数据服务器或WEB服务器)获取数据到客户端的内存中,然后javascript根据实际需要对这些资源进行处理,并通过CSS和DOM实现界面布局呈现给浏览器。

2、  ASP.NET AJAX框架组成

主要包括:核心组件、工具包、增值组件、示例代码、框架类库5个部分

Ch4:

1、  为什么需要使用缓存,缓存的优势

因为:Web应用程序通常是需要不断的和数据库交互,如果在数据量非常大的情况下,将会严重降低应用程序的性能,甚至还会造成Web应用程序崩溃。

使用缓存是把访问频繁的数据以及需要大量处理时间来创建的数据存储在服务器内存中,当用户请求这些数据时,系统直接将内存中的数据返回给用户,从而大大提高应用程序的性能。

2、  整页缓存的主要属性P85

Duration:必需属性,表示缓存时间

VaryByParam:参数传递的缓存

VaryByControl:用户控件的缓存

Location:指定输出缓存项的位置,默认为Any

VaryBycustom:自定义输出缓存

3、  缓存的依赖性有哪些(数据缓存)

 

4、  如何实现部分页面缓存

最常用的方法是缓存后替换:

通过使用控件substitution实现,此控件可以用来替换缓存页面需要更新的部分。

 

 续:

ASP.NET面试题总结


一名入门的asp.net程序员应该掌握的知识:
(1)熟练使用Sql Server中企业管理器、查询分析器和事件探查器,能熟练编写T-SQL、存储过程、用户自定义函数、视图、触发器;
(2)了解ASP.net服务器控件的生命周期;
(3)熟练掌握HTML,CSS,javascript,xml,Web Service,AJAX;
(4)掌握多层结构以及类的设计方法;
(5)了解网站安全漏洞相关方面以及优化技巧;

1、可以使用抽象函数重写基类中的虚函数吗?
答:可以,需使用new修饰符显式声明,表示隐藏了基类中该函数的实现。
C#复制代码
<!--[if !supportLists]-->1.   <!--[endif]-->class BaseClass   
<!--[if !supportLists]-->2.   <!--[endif]-->{   
<!--[if !supportLists]-->3.   <!--[endif]-->    public virtual void A()   
<!--[if !supportLists]-->4.   <!--[endif]-->    {   
<!--[if !supportLists]-->5.   <!--[endif]-->        HttpContext.Current.Response.Write("阿会楠");   
<!--[if !supportLists]-->6.   <!--[endif]-->    }   
<!--[if !supportLists]-->7.   <!--[endif]-->}   
<!--[if !supportLists]-->8.   <!--[endif]-->  
<!--[if !supportLists]-->9.   <!--[endif]-->abstract class dClass : BaseClass   
<!--[if !supportLists]-->10.  <!--[endif]-->{   
<!--[if !supportLists]-->11.  <!--[endif]-->    public new abstract void A();   
<!--[if !supportLists]-->12.  <!--[endif]-->}  

2、接口可以包含哪些成员?
答:接口可以包含属性、方法、索引指示器和事件,但不能包含常量、域、操作符、构造函数和析构函
数,而且也不能包含任何静态成员。

3、如何把一个array复制到arrayList里。
C#复制代码
<!--[if !supportLists]-->1.   <!--[endif]-->string[] arrA = new string[]{"阿","会","楠"};   
<!--[if !supportLists]-->2.   <!--[endif]-->ArrayList arrB = new ArrayList();   
<!--[if !supportLists]-->3.   <!--[endif]-->foreach(string a in arrA)   
<!--[if !supportLists]-->4.   <!--[endif]-->{   
<!--[if !supportLists]-->5.   <!--[endif]-->    arrB.Add(a);   
<!--[if !supportLists]-->6.   <!--[endif]-->}   
<!--[if !supportLists]-->7.   <!--[endif]-->foreach (string b in arrB)   
<!--[if !supportLists]-->8.   <!--[endif]-->{   
<!--[if !supportLists]-->9.   <!--[endif]-->    Response.Write(b);   
<!--[if !supportLists]-->10.  <!--[endif]-->}  
4、概述三层结构体系。
答:主要包括界面层,业务逻辑层,数据访问层。

5、StringBuilder和String的区别。
答:使用String类,在赋值时会产生一个新的对象,而StringBuilder不会,所以在大量字符串拼接或频
繁对某一字符串进行操作时最好使用StringBuilder。

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

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

8、ADO.net常用对象有哪些?
答:
Connection:数据库连接对象
Command:数据库命令
DataReader:数据阅读器
DataSet:数据集

9、委托声明的关键字是?
答:delegate

10、在ASP.net中所有的自定义用户控件都必须继承自?
答:Control类
 
11、在.net托管代码总我们不必担心内存泄漏,这是因为有了?
答:GC 垃圾收集器。
12、&和&&的区别?
答:&是位运算符,表示按位运算;&&是逻辑运算符,表示逻辑与。
13、覆盖与重载的区别?
答:
覆盖:采用override声明,参数列表必须相同。
重载:不需要特别声明,只要参数列表不同(个数不同或类型不同)。

14、ASP.NET页面传值的几种方式?
答:
1、使用Request.QueryString或Request.Form。
2、使用Session,Cookies,Application。
3、使用Server.Transfer。
4、使用PostBackUrl传递。具体例子:http://www.sosuo8.com/article/show.asp?id=2026&page=1

15、什么叫装箱和拆箱?
答:从值类型转换到引用类型叫装箱,反之称为拆箱。

16、接口是否可以继承接口?
答:可以。

17、是否可以继承String类。
答:String类是final类故不可以继承。

18、简述private、protected、public、internal修饰符的访问权限。
答:
private:私有的,类内部。
protected:受保护的,类内部和继承类中可以访问。
public:无限制
internal:在同一命名空间内可以访问

19、下面这段代码输出什么?为什么?
int i=5;
int j=5;
if (Object.ReferenceEquals(i,j))
        Console.WriteLine("Equal");
else
        Console.WriteLine("Not Equal");
答:不相等,因为比较的是对象

20、什么是ASP.NET中的用户控件。
答:ASP.NET中用户控件很关键一点是要区别于自定义控件。用户控件说白了其实就像是asp中的
include,只是功能更加强大。用户控件易于创建但易用性差,自定义控件难创建,但易用性好。

21、什么是强类型系统?
答:RTTI:类型识别系统

22、写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:select top 10 * from [A] where ID not in (select top 30 from A)

23、谈谈final、finally的区别。
答:
final:不能作为父类被继承。一个类不能声明是final,又声明为abstract。
finally:用于try{}catch{}finally{}结构,用于异常处理时执行任何清除操作。

24、ASP.NET与ASP相比,有哪些进步。
答:
ASP.NET编译型,面向对象编程语言,代码与界面分离。
ASP解释型,脚本语言。
 
 
 
想想还是要认真复习下相关的知识点,在网上找了些经常出的题目
1. 简述 private、 protected、 public、 internal 修饰符的访问权限。
答 . private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。
2 .列举ASP.NET 页面之间传递值的几种方式。
答. 1.使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session变量
3.使用Server.Transfer
3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
答:public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i - 2);
}
}
4.C#中的委托是什么?事件是不是一种委托?
答 :
委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的引用。
是,是一种特殊的委托
5.override与重载的区别
答 :
override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要
Override 是进行基类中函数的重写。为了适应需要。
6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
答 :
this.Server.Transfer
7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
答:
foreach (System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;
tb.Text = String.Empty ;
}
}
8.请编程实现一个冒泡排序算法?
答:
int [] array = new int [*] ;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
for (int j = i + 1 ; j < array.Length ; j++)
{
if (array[j] < array[i])
{
temp = array[i] ;
array[i] = array[j] ;
array[j] = temp ;
}
}
}
9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:不是。可以用任意类型。
10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
答:
int Num = this.TextBox1.Text.ToString() ;
int Sum = 0 ;
for (int i = 0 ; i < Num + 1 ; i++)
{
if((i%2) == 1)
{
Sum += i ;
}
else
{
Sum = Sum - I ;
}
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine() ;
11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
答:一般为3层
数据访问层,业务层,表示层。
数据访问层对数据库进行增删查改。
业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。
表示层为了与用户交互例如用户添加表单。
优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点: 增加成本。
12.在下面的例子里
using System;
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}
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
13.什么叫应用程序域?
答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。
14.CTS、CLS、CLR分别作何解释?
答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。
15.什么是装箱和拆箱?
答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。
16.什么是受管制的代码?
答:unsafe:非托管代码。不经过CLR运行。
17.什么是强类型系统?
答:RTTI:类型识别系统。
18.net中读写数据库需要用到那些类?他们的作用?
答:DataSet:数据存储器。
DataCommand:执行语句命令。
DataAdapter:数据的集合,用语填充。
19.ASP.net的身份验证方式有哪些?分别是什么原理?
答:10。Windwos(默认)用IIS...From(窗体)用帐户....Passport(密钥)
20.什么是Code-Behind技术?
答:代码后植。
21.在.net中,配件的意思是?
答:程序集。(中间语言,源数据,资源,装配清单)
22.常用的调用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜单选项
23..net Remoting 的工作原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。
25.请详述在dotnet中类(class)与结构(struct)的异同?
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:
namespace test
{
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 );
27.分析以下代码,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代码执行完后,i= j=
答:i=13,j=10
28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
29.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路
答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。
32.给定以下XML文件,完成算法流程图。
<FileSystem>
< DriverC >
<Dir DirName=”MSDOS622”>
<File FileName =” Command.com” ></File>
</Dir>
<File FileName =”MSDOS.SYS” ></File>
<File FileName =” IO.SYS” ></File>
</DriverC>
</FileSystem>
请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。
答:
void FindFile( Directory d )
{
FileOrFolders = d.GetFileOrFolders();
foreach( FileOrFolder fof in FileOrFolders )
{
if( fof is File )
You Found a file;
else if ( fof is Directory )
FindFile( fof );
}
}
33.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:解1: select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
34.面向对象的语言具有________性、_________性、________性
答:封装、继承、多态。
35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。
答:IEnumerable 、 GetEnumerator。
36.GC是什么? 为什么要有GC?
答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
37.String s = new String("xyz");创建了几个String Object?
答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
38.abstract class和interface有什么区别?
答:
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
39.启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
40.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
41.构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
42.是否可以继承String类?
答:String类是final类故不可以继承。
43.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在return前执行。
44.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,有
 
 
 
 
1. 简述 private、 protected、 public、 internal 修饰符的访问权限
答:
private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。
2. 列举ASP.NET页面之间传递值的几种方式
答:
(1) 使用QueryString, 如....?id=1; response. Redirect()....
(2) 使用Session变量
(3) 使用Server.Transfer
3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少,用递归算法实现
答:
public class MainClass
{
    public static void Main()
    {
        Console.WriteLine(Foo(30));
    }
    public static int Foo(int i)
    {
        if (i <= 0)
            return 0;
        else if (i > 0 && i <= 2)
            return 1;
        else return Foo(i - 1) + Foo(i - 2);
    }
}
 
4. C#中的委托是什么?事件是不是一种委托?
答:委托可以把一个方法作为参数代入另一个方法。委托可以理解为指向一个函数的引用。事件是一种特殊的委托
5. override与重载的区别
答:
override与重载的区别重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要
Override是进行基类中函数的重写。为了适应需要。
6. 如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
答:this.Server.Transfer
7. 请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
答:
foreach (System.Windows.Forms.Control control in this.Controls)
{
    if (control is System.Windows.Forms.TextBox)
    {
        System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control;
        tb.Text = String.Empty ;
    }
}
 
8. 请编程实现一个冒泡排序算法?
答:
int [] array = new int;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
    for (int j = i + 1 ; j < array.Length ; j++)
    {
        if (array[j] < array[i])
        {
            temp = array[i];
            array[i] = array[j];
            array[j] = temp ;
        }
    }
}
 
 
9. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:不是。可以用任意类型。
10. 求以下表达式的值,写出您想到的一种或几种实现方法:1-2+3-4+……+m
答:
int Num = this.TextBox1.Text.ToString();
int Sum = 0;
for (int i = 0; i < Num + 1; i++)
{
    if ((i % 2) == 1)
    {
        Sum += i;
    }
    else
    {
        Sum = Sum - I;
    }
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine();
 
11. 用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
答:一般为3层。数据访问层,业务层,表示层。数据访问层对数据库进行增删查改。业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。表示层为了与用户交互例如用户添加表单。
优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点: 增加成本。
12. 在下面的例子里
using System;
class A
{
    public A()
    {
        PrintFields();
    }
    public virtual void PrintFields()
    {
   
    }
}
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
13. 什么叫应用程序域?
答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。
14. CTS、CLS、CLR分别作何解释?
答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。
15. 什么是装箱和拆箱?
答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。
16. 什么是受管制的代码?
答:unsafe:非托管代码。不经过CLR运行。
17. 什么是强类型系统?
答:RTTI:类型识别系统。
18. .net中读写数据库需要用到那些类?他们的作用?
答:DataSet:数据存储器。
DataCommand:执行语句命令。
DataAdapter:数据的集合,用语填充。
19. ASP.net的身份验证方式有哪些?分别是什么原理?
答:10。Windwos(默认)用IIS...From(窗体)用帐户....Passport(密钥)
20. 什么是Code-Behind技术?
答:代码后植。
21. 在.net中,配件的意思是?
答:程序集。(中间语言,源数据,资源,装配清单)
22. 常用的调用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。 2.使用VS.NET中的Add Web Reference菜单选项
23. .net Remoting 的工作原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
24. 在C#中,string str = null 与 string str = " " 请尽量使用文字或图象说明其中的区别
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。
25. 请详述在dotnet中类(class)与结构(struct)的异同?
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
(1)、结构是值类型;
(2)、结构不支持继承;
(3)、结构不能定义默认的构造函数;
(4)、结构不能定义析构函数;
(5)、结构不能使用初始值设置域值
26. 根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:
namespace test
{
    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);
27. 分析以下代码,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代码执行完后,i=______   j=______
答:i=13,j=10
28. SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号,LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
29. 根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i)
{
    lock (this)
    {
        if (i > 10)
        {
            i--;
            test(i);
        }
    }
}
答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
30. 简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。
31. 公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路
答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。
32. 给定以下XML文件,完成算法流程图
<FileSystem>
  <DriverC>
    <Dir DirName="MSDOS622">
      <File FileName ="Command.com"></File>
    </Dir>
    <File FileName ="MSDOS.SYS"></File>
    <File FileName ="IO.SYS"></File>
  </DriverC>
</FileSystem>
请画出遍历所有文件名(FileName)流程图(请使用递归算法)。
答:
void FindFile( Directory d )
{
    FileOrFolders = d.GetFileOrFolders();
    foreach( FileOrFolder fof in FileOrFolders )
    {
        if( fof is File )
            You Found a file;
        else if ( fof is Directory )
            FindFile( fof );
    }
}
 
33. 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:解1:  select top 10 * from A where id not in (select top 30 id from A)
    解2:  select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
34. 面向对象的语言具有_______性、________性、_______性
答:封装、继承、多态。
35. 能用foreach遍历访问的对象需要实现 ____________接口或声明____________方法的类型。
答:IEnumerable 、 GetEnumerator。
36. GC是什么? 为什么要有GC?
答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:  System.gc()        Runtime.getRuntime().gc()
37. String s = new String("xyz");创建了几个String Object?
答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
38. abstract class和interface有什么区别?
答:
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
39. 启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
40. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
41. 构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
42. 是否可以继承String类?
答:String类是final类故不可以继承。
43. try{ }里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在return前执行。
44. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,有相同的hash code。
45. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
47. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
48. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
答:都不能。
49. List, Set, Map是否继承自Collection接口?
答:List,Set是Map不是
50. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
51. 数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有length()这个方法,有length的属性。String有有length()这个方法。
52. sleep() 和 wait() 有什么区别?
答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级
(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
54. 谈谈final, finally, finalize的区别
答:
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此     一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中     不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为     final的方法也同样只能使用,不能重载
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会     执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理     工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的     ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize()      方法是在垃圾收集器删除对象之前对这个对象调用的。
55. 如何处理几十万条并发数据?
答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.
56. Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate  server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。
57. 进程和线程的区别?
答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比喻来说,如果一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也可以派出几个成员来协同完成,而家庭之外的人则没有办法直接消费不属于自己家庭的财产。
58. 堆和栈的区别?
答:栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。
59. 成员变量和成员函数前加static的作用?
答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。
60. ASP.NET与ASP相比,主要有哪些进步?
答:asp解释形,aspx编译型,性能提高,有利于保护源码。
61. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复
int[] intArr = new int[100];
ArrayList myList = new ArrayList();
Random rnd = new Random();
while (myList.Count < 100)
{
    int num = rnd.Next(1, 101);
    if (!myList.Contains(num))
        myList.Add(num);
}
for (int i = 0; i < 100; i++)
    intArr[i] = (int)myList[i];
 
62. 请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
答:
session(viewstate) 简单,但易丢失
application 全局
cookie 简单,但可能不支持,可能被伪造
input ttype="hidden" 简单,可能被伪造
url参数 简单,显示于地址栏,长度有限
数据库 稳定,安全,但性能相对弱
63. 请指出GAC的含义?
答:全局程序集缓存。它解决了几个程序共享某一个程序集的问题。不必再将那个被共享的程序集拷贝到应用程序目录了,其实这道理很简单,.net应用程序在加载的时候,会首先查看全局应用程序集缓存,如果有就可以直接使用,没有再到应用程序目录进行查找。
64. 向服务器发送请求有几种方式?
答:get,post。get一般为链接方式,post一般为按钮方式。
65. DataReader与Dataset有什么区别?
答:一个是只能向前的只读游标,一个是内存中的表。
66. 软件开发过程一般有几个阶段?每个阶段的作用?
答:需求分析,架构设计,代码编写,QA,部署
67. 在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令 和语句 new 创建实例 new 隐藏基类中方法。
答:using 引入名称空间或者使用非托管资源
new 新建实例或者隐藏父类方法
68. 需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.
答:
string inputStr=" xx xx ";
inputStr=Regex.Replace(inputStr.Trim()," *"," ");
69. 下面这段代码输出什么?为什么?
int i = 5;
int j = 5;
if (Object.ReferenceEquals(i, j))
    Console.WriteLine("Equal");
else
    Console.WriteLine("Not Equal");
 
答:不相等,因为比较的是对象
70. 什么是反射和序列化?
答:反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。
71. 用Singleton如何写设计模式
答:static属性里面new ,构造函数private
72. 什么是Application Pool?
答:Web应用,类似Thread Pool,提高并发性能。
73. 什么是虚函数?什么是抽象函数?
答:虚函数:没有实现的,可由子类继承并重写的函数。抽象函数:规定其非虚子类必须实现的函数,必须被重写。
74. 什么是ASP.net中的用户控件?
答:用户控件一般用在内容多为静态,或者少许会改变的情况下..用的比较大..类似ASP中的include..但是功能要强大的多。
75. 列举一下你所了解的XML技术及其应用
答:xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和config
76. ADO.net中常用的对象有哪些?分别描述一下。
答:Connection 数据库连接对象; Command 数据库命令; DataReader 数据读取器; DataSet 数据集
77. 什么是code-Behind技术。
答:ASPX,RESX和CS三个后缀的文件,这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理.
78. 什么是SOAP,有哪些应用。
答:simple object access protocal,简单对象接受协议.以xml为基本编码结构,建立在已有通信协议上(如http,不过据说ms在搞最底层的架构在tcp/ip上的soap)的一种规范Web Service使用的协议..
79. XML与HTML的主要区别
答:
1. XML是区分大小写字母的,HTML不区分。
2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略或者之类的结束 标记。在XML中,绝对不能省略掉结束标记。
3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。
4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。
80. 当整数a赋值给一个object对象时,整数a将会被?
答:装箱。
81. 类成员有_____种可访问形式?
答:this.; new Class(); .Method;
82. public static const int A=1;这段代码有错误么?是什么?
答:const成员都是static所以应该去掉static。const不能用static修饰。
83. float f=-123.567F; int i=(int)f; i的值现在是_____?
答:-123。
84. 委托声明的关键字是______?
答:delegate.
85. 用sealed修饰的类有什么特点?
答:密封,不能继承。
86. 在Asp.net中所有的自定义用户控件都必须继承自________?
答:System.Web.UI.UserControl
87. 在.Net中所有可序列化的类都被标记为_____?
答:[serializable]
88. 在.Net托管代码中我们不用担心内存漏洞,这是因为有了______?
答:GC。
89. 下面的代码中有什么错误吗?_______
using System;
class A
{
    public virtual void F()
    {
        Console.WriteLine("A.F");
    }
}
abstract class B:A
{
    public abstract override void F();
} // new public abstract void F();
答:abstract override 是不可以一起修饰.
 
90. 当类T只声明了私有实例构造函数时,则在T的程序文本外部,___可以___(可以or不可以)从T派生出新的类,不可以____(可以or不可以)直接创建T的任何实例。
答:不可以,不可以。
91.下面这段代码有错误么?
switch (i)
{
    case(): //case()条件不能为空
        CaseZero();
        break;
    case 1:
        CaseOne();
        break;
    case 2:
        dufault; //wrong,格式不正确
        CaseTwo();
        break;
}
 
92. 在.Net中,类System.Web.UI.Page可以被继承么?
答:可以。
93. .net的错误处理机制是什么?
答:.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
94. 利用operator声明且仅声明了==,有什么错误么?
答:要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!="
95. 在.net(C# or vb.net)中如何用户自定义消息,并在窗体中处理这些消息。
答:在form中重载DefWndProc函数来处理消息:
protected override void DefWndProc ( ref System.WinForms.Message m )
{
    switch(m.msg)
    {
        case WM_Lbutton :
        //string与MFC中的CString的Format函数的使用方法有所不同
            string message = string.Format("收到消息!参数为:{0},{1}",m.wParam,m.lParam);
            MessageBox.Show(message);//显示一个消息框
            break;
        case USER:
            //处理的代码
        default:
            base.DefWndProc(ref m);//调用基类函数处理非自定义消息。
            break;
    }
}
 
96. 在.net(C# or vb.net)中如何取消一个窗体的关闭。
答:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    e.Cancel = true;
}
 
97. 在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?
答:一个是退出整个应用程序,一个是关闭其中一个form。
98. 在C#中有一个double型的变量,比如10321.5,比如122235401.21644,作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50和$122,235,401.22而在英国则为£10 321.50和£122 235 401.22
答:
System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");
//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");为英国货币类型
decimal y = 9999999999999999999999999999m;
string str = String.Format(MyCulture,"My amount = {0:c}",y);
99. 某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:
(1) 密码单词的最小长度是两个字母,可以相同,也可以不同
(2) K不可能是单词的第一个字母
(3) 如果L出现,则出现次数不止一次
(4) M不能使最后一个也不能是倒数第二个字母
(5) K出现,则N就一定出现
(6) O如果是最后一个字母,则L一定出现
问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?
A) K B)L C) M D) N
答案:B
问题二:如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的总数是多少?
A)1个 B)3个 C)6个 D)9个
答案:A
问题三:下列哪一个是单词密码?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C
100. 对于这样的一个枚举类型:
enum Color : byte
{
    Red,
    Green,
    Blue,
    orange
}
 
答:
string[] ss=Enum.GetNames(typeof(Color));
byte[] bb=Enum.GetValues(typeof(Color));
101. C#中property与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?
答:attribute:自定义属性的基类;property :类中的属性
102. C#可否对内存进行直接的操作?
答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员 不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法
103. ADO.NET相对于ADO等主要有什么改进?
答:1:ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,2:不使用com3:不在支持动态游标和服务器端游 4:,可以断开connection而保留当前数据集可用 5:强类型转换 6:xml支持
104. 大概描述一下ASP.NET服务器控件的生命周期
答:初始化 -> 加载视图状态 -> 处理回发数据 -> 加载 -> 发送回发更改通知 -> 处理回发事件 -> 预呈现 -> 保存状态 -> 呈现 -> 处置 -> 卸载
105. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
答:不能,可以实现接口
106. Static Nested Class和Inner Class的不同,说得越多越好
答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
107. &和&&的区别
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
108. HashMap和Hashtable的区别
答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable.
109. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
110. Overloaded的方法是否可以改变返回值的类型?
答:Overloaded的方法是可以改变返回值的类型
111. error和exception有什么区别?
答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
112. <%# %> 和 <% %>有什么区别?
答:<%# %>表示绑定的数据源; <% %>是服务器端代码块
113. 你觉得ASP.NET 2.0(VS2005)和你以前使用的开发工具(.Net 1.0或其他)有什么最大的区别?你在以前的平台上使用的哪些开发思想(pattern / architecture)可以移植到ASP.NET 2.0上 (或者已经内嵌在ASP.NET 2.0中)
答:
1 ASP.NET 2.0 把一些代码进行了封装打包,所以相比1.0相同功能减少了很多代码.
2 同时支持代码分离和页面嵌入服务器端代码两种模式,以前1.0版本,.NET提示帮助只有在分离的代码文件,无 法 在页面嵌入服务器端代码获得帮助提示,
3 代码和设计界面切换的时候,2.0支持光标定位.这个我比较喜欢
4 在绑定数据,做表的分页.Update,Delete,等操作都可以可视化操作,方便了初学者
5 在ASP.NET中增加了40多个新的控件,减少了工作量
114. 重载与覆盖的区别?
答:
1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系
2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
3、覆盖要求参数列表相同;重载要求参数列表不同。
4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调 用时的实参表与形参表来选择方法体的。
115. 分析以下代码
public static void test(string ConnectString)
{
    System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
    conn.ConnectionString = ConnectString;
    try
    {
        conn.Open();
        …….
    }
    catch(Exception Ex)
    {
        MessageBox.Show(Ex.ToString());
    }
    finally
    {
        if (!conn.State.Equals(ConnectionState.Closed))
            conn.Close();
    }
}
 
请问
1)以上代码可以正确使用连接池吗?
答:回答:如果传入的connectionString是一模一样的话,可以正确使用连接池。不过一模一样的意思是,连字符的空格数,顺序完全一致
2)以上代码所使用的异常处理方法,是否所有在test方法内的异常都可以被捕捉并显示出来?
答:只可以捕捉数据库连接中的异常吧. (finally中,catch中,如果有别的可能引发异常的操作,也应该用try,catch。所以理论上并非所有异常都会被捕捉。)
116. 下面的例子中
using System;
class A
{
    public static int X;
    static A()
    {
        X = B.Y + 1;
    }
}
class B
{
    public static int Y = A.X + 1;
    static B() { }
    static void Main()
    {
        Console.WriteLine("X={0},Y={1}", A.X, B.Y);
    }
}
产生的输出结果是什么?
答:x=1,y=2
117. Collection 和 Collections的区别。
答案:
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
118. 什么时候用assert。
答案:1.4新增关键字(语法),用于测试boolean表达式状态,可用于调试程序。
使用方法 assert <boolean表达式>,表示如果表达式为真(true),则下面的语句执行,否则抛出AssertionError。
另外的使用方式assert < boolean表达式>:<other表达式>,表示如果表达式为真,后面的表达式忽略,否则后面表达式的值用于AssertionError的构建参数。
注意编译时要增加-source 1.4 参数,否则报错。]运行时要增加 -ea参数,否则assert行被忽略
119. GC是什么? 为什么要有GC?
答案:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法
转载请注明出自应届生求职招聘论坛 http://bbs.yingjiesheng.com/,本贴地址:http://bbs.yingjiesheng.com/thread-87935-1-1.html



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiangchengboy/archive/2009/11/05/4770320.aspx