doNet面试宝典-02整理后

1.简述 privateprotectedpublicinternal 修饰符的访问权限。

. private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

public : 公共成员,完全公开,没有访问限制。

internal: 在同一命名空间内可以访问。

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

.

1.使用QueryString, ....?id=1; response. Redirect()....

 

2.使用Session变量

 

3.使用Server.Transfer

 

4.Cookie传值

 

3. 一列数的规则如下: 112358132134...... 求第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#中的委托是什么?事件是不是一种委托?

答:委托可以把一个方法作为参数代入另一个方法。

 

委托可以理解为指向一个函数的指针。

 

委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能addremove自己,不能赋值。事件只能+=-=,不能= 。加分的补充回答:事件内部就是一个private的委托和addremove两个方法

 

委托可以理解为指向一个函数的引用。

是,是一种特殊的委托

5.override与重载的区别

答:

override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要

Override 是进行基类中函数的重写。为了适应需要。

6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用SessionCookieApplication,您有几种方法进行处理?

答: cxz

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..netB/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.CTSCLSCLR分别作何解释?

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

15.什么是装箱和拆箱?

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

16.什么是受管制的代码?

答:unsafe:非托管代码。不经过CLR运行。

17.什么是强类型系统?

答:RTTI:类型识别系统。

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

答:DataSet:数据存储器。

DataCommand:执行语句命令。

DataAdapter:数据的集合,用语填充。

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

答:10Windwos(默认)IIS...From(窗体)用帐户....Passport(密钥)

20.什么是Code-Behind技术?

就是代码隐藏,在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像以前asp那样都代码和html代码混在一起,难以维护。code-Behind是基于部分类技术实现的,在我的项目的三层代码生成器中用到了部分类。

21..net中,配件的意思是?

答:程序集。(中间语言,源数据,资源,装配清单)

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

答:1.使用WSDL.exe命令行工具。

2.使用VS.NET中的Add Web Reference菜单选项

23..net Remoting 的工作原理是什么?

答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

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

答: Class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。

Struct属于值类型,是分配在内存的栈上的。结构体是复制传递的。加分的回答:Int32Boolean等都属于结构体。

 

25.根据委托(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 );

以上代码执行完后,i= j=

答:i=13,j=10

26.SQLSERVER服务器中,给定表 table1 中有两个字段 IDLastUpdateDateID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号

答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

27.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

public void test(int i)

{

lock(this)

{

if (i>10)

{

i--;

test(i);

}

}

}

答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

28.简要谈一下您对微软.NET 构架下remotingwebservice两项技术的理解以及实际中的应用。

答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

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

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

30.给定以下XML文件,完成算法流程图。

< DriverC >

请画出遍历所有文件名(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 );

}

}

}

31.写出一条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 (select top 40 * from A order by ID) order by ID desc 

演变步骤:

 

1select top 30 id from T_FilterWords--取前条

2select * from T_FilterWords

where id not in (select top 30 id from T_FilterWords)--id不等于前三十条的

--也就是把前条排除在外

3select top 10 * from T_FilterWords

where id not in (select top 30 id from T_FilterWords)

--取把前条排除在外的前条,也就是-40

 

2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

 

解答3:用ROW_NUMBER实现

select   top   m   *   from   tablename   where   id   not   in   (select   top   n   *   from   tablename)  SELECT TOP 10 * FROM (SELECT TOP 40 *         FROM tb         ORDER by id) t ORDER BY id desc select   top   10   *   from   (select   top   40   *   from   table)   t   order   by   id   desc

32.面向对象的语言具有____封装____性、______继承___性、____多态____

答:封装、继承、多态。

33.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。

答:IEnumerable GetEnumerator

34.GC是什么? 为什么要有GC?

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

System.gc()

Runtime.getRuntime().gc()

35.String s = new String("xyz");创建了几个String Object?

答:两个对象,一个是xyx,一个是指向“xyx”的引用对象s

36.abstract classinterface有什么区别?

答:

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

37.启动一个线程是用run()还是start()?

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

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

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

39.构造器Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading

40.是否可以继承String?

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

41.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

答:会执行,在return后执行。

        static void Main(string[] args)

        {

            //Console.WriteLine(GetIt());

            Console.WriteLine(GetPerson().Age);

            Console.ReadKey();

        }

 

        static Person GetPerson()

        {

            Person p = new Person();

            p.Age = 8;

            try

            {

                p.Age++;

                Console.WriteLine("a");

                return p;//把返回值设定为i,然后“尽快”返回(没啥事就回去吧。搞完就走)

            }

            finally

            {

                Console.WriteLine("b");

                p.Age++;

            }

        }

加分的补充回答(也助记):读取数据库中数据的条数的程序

 

public int QueryCount()

{

   try

   {

      return cmd.ExecuteScalar();

   }

   finally

   {

      cmd.Dispose();

   }

}

先执行cmd.ExecuteScalar(),把返回值暂时存起来,然后再去执行finally(钱放在这,我去劫个色),然后把返回值返回。return都是最后执行,但是return后的表达式的计算则是在finally之前。如果C#设计的是先执行cmd.Dispose()再执行return就会出现return执行失败了,因为cmd已经Dispose了。

42.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

答:不对,有相同的hash code

43.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String?

答:switchexpr1)中,expr1是一个整数表达式。因此传递给 switch case 语句的参数应该是 intshortchar 或者 bytelong,string 都不能作用于swtich

44.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

45.abstractmethod是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不能。

46.List, Set, Map是否继承自Collection接口?

答:ListSetMap不是

47.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

48.数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length的属性。String有有length()这个方法。

49.sleep() wait() 有什么区别?

答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级

(b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

50.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:short s1 = 1; s1 = s1 + 1;有错,s1short型,s1+1int,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) short s1 = 1; s1 += 1正确。

51.谈谈final, finally, finalize的区别。

答:

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

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

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

52.如何处理几十万条并发数据?

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

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

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

iis中由于有进程回收机制,系统繁忙的话Session会丢失,IIS重启也会造成Session丢失。这样用户就要重新登录或者重新添加购物车、验证码等放到Session中的信息。可以用State  serverSQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获SessionEND事件。但是(一定要写上,这样才够拽)我认为这不是Bug,只能说是In-Proc方式存储Session的缺陷,缺陷是和Bug不一样的,In-Proc方式存储Session会由服务器来决定什么时候释放Session,这是By DesignIn-Proc方式不满足要求的话完全可以用StateServer和数据库的方式。

 

StateServer还可以解决集群Session共享的问题。

 

配置StateServer的方法:

http://support.microsoft.com/kb/317604

http://blog.csdn.net/zj1103/archive/2008/09/14/2926773.aspx

 

54.进程和线程的区别?

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

55.堆和栈的区别?

答:

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

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

56.成员变量和成员函数前加static的作用?

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

57.ASPNETASP相比,主要有哪些进步?

答: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];

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

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

application 全局

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

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

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

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

59.请指出GAC的含义?

答:全局程序集缓存。

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

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

61.DataReaderDataset有什么区别?

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

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

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

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

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

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

64.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.

答:string inputStr=" xx xx ";

inputStr=Regex.Replace(inputStr.Trim()," *"," ");

65.下面这段代码输出什么?为什么?

int i=5;

int j=5;

if (Object.ReferenceEquals(i,j))

{

Console.WriteLine("Equal");

}

Else

{

Console.WriteLine("Not Equal");

}

答:不相等,因为比较的是对象

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

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

67.什么是反射?

答:动态获取程序集信息

68.Singleton如何写设计模式

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

69.什么是Application Pool

答:Web应用,类似Thread Pool,提高并发性能。

70.什么是虚函数?什么是抽象函数?

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

71.什么是XML

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

72.什么是Web ServiceUDDI

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

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

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

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

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

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

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

答:Connection 数据库连接对象

Command 数据库命令

DataReader 数据读取器

DataSet 数据集

76.什么是SOAP,有哪些应用。

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

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

Property的解释如下: Property一般是指一对getset方法,可以称为是类的成员属性,它大部分时候用来对类的成员变量进行读取或赋值。

Attributes的解释如下: 公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。AttributesMicrosoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。 说的通俗些Attribute是类,不过是一类比较特殊的类,Attribute必须写在一对方括号中,用来处理net中多种问题:序列化、程序的安全特征等等.

在翻译方面,虽然都可以翻译成属性,但是为了区别开来,Attributes也翻译成特性”. 对于Property,我们可以用Attributes给它加上一些特性,比如是否可以序列化等。

对于Property来说,和直接使用成员变量相比,好处很多,比如,可以在赋值或读取值前进行数据校验,可以很容易提供触发事件的方法等等。当然也可以提供只读或只写的属性。 Attributes的引入,使得我们在设计方法,属性,事件等的时候,可以加入我们的一些信息或约束。使得我们编程更加方便

78.XML HTML 的主要区别

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

2. HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略

或者之类的结束标记。在XML中,绝对不能省略掉结束标记。

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

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

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

79.c#中的三元运算符是?

答:?:。

80.当整数a赋值给一个object对象时,整数a将会被?

答:装箱。

81.类成员有_____种可访问形式?

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

82.public static const int A=1;这段代码有错误么?是什么?

答:const不能用static修饰。

83.float f=-123.567F; int i=(int)f;i的值现在是_____?

答:-123

84.委托声明的关键字是______?

答:delegate.

85.sealed修饰的类有什么特点?

答:密封,不能继承。

86.Asp.net中所有的自定义用户控件都必须继承自_____?

答:Control

87..Net托管代码中我们不用担心内存漏洞,这是因为有了____?

答:GC

88.下面的代码中有什么错误吗?_____

using System;

class A

{

public virtual void F()

{

Console.WriteLine("A.F");

}

}

abstract class B:A

{

public abstract override void F(); 答:abstract override 是不可以一起修饰.

} // new public abstract void F();

89.当类T只声明了私有实例构造函数时,则在T的程序文本外部,___可以___(可以 or 不可以)从T派生出新的类,不可以____(可以 or 不可以)直接创建T的任何实例。

答:不可以,不可以。

90.下面这段代码有错误么?

switch (i){

case(): 答://case()条件不能为空

CaseZero();

break;

case 1:

CaseOne();

break;

case 2:

dufault; 答://wrong,格式不正确

CaseTwo();

break;

}

91..Net中,类System.Web.UI.Page 可以被继承么?

答:可以。

92..net的错误处理机制是什么?

答:.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。

93.利用operator声明且仅声明了==,有什么错误么?

答:要同时修改EqualeGetHash() ? 重载了"==" 就必须重载 "!="

94..netC# or vb.net)中如何用户自定义消息,并在窗体中处理这些消息。

答:在form中重载DefWndProc函数来处理消息:

protected override void DefWndProc ( ref System.WinForms.Message m )

{

switch(m.msg)

{

case WM_Lbutton :

  ///stringMFC中的CStringFormat函数的使用方法有所不同

  string message = string.Format("收到消息!参数为:{0},{1}",m.wParam,m.lParam);

  MessageBox.Show(message);///显示一个消息框

 break;

case USER:

处理的代码

default:

  base.DefWndProc(ref m);///调用基类函数处理非自定义消息。

 break;

}

}

95..netC# or vb.net)中如何取消一个窗体的关闭。

答:private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{

e.Cancel=true;

}

96..netC# or vb.net)中,Application.Exit 还是 Form.Close有什么不同?

答:一个是退出整个应用程序,一个是关闭其中一个form

97.C#中有一个double型的变量,比如10321.5,比如122235401.21644,作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50$122235401.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);

98.某一密码仅使用KLMNO5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:

1)密码单词的最小长度是两个字母,可以相同,也可以不同

2K不可能是单词的第一个字母

3)如果L出现,则出现次数不止一次

4M不能使最后一个也不能是倒数第二个字母

5K出现,则N就一定出现

6O如果是最后一个字母,则L一定出现

问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?

A) K B)L C) M D) N

答案:B

问题二:如果能得到的字母是KLM,那么能够形成的两个字母长的密码单词的总数是多少?

A)1B)3C)6D9

答案:A

问题三:下列哪一个是单词密码?

A) KLLN B) LOML C) MLLO D)NMKO

答案:C

8. 62-63=1 等式不成立,请移动一个数字(不可以移动减号和等于号),使得等式成立,如何移动?

答案:62移动成26次方

99.对于这样的一个枚举类型:

enum Color:byte

{

Red,

Green,

Blue,

orange

}

答:string[] ss=Enum.GetNames(typeof(Color));

byte[] bb=Enum.GetValues(typeof(Color));

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

答:attribute:自定义属性的基类;property :类中的属性

101.C#可否对内存进行直接的操作?

答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法

102.ADONET相对于ADO等主要有什么改进?

答:1:ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,2:不使用com3:不在支持动态游标和服务器端游 4:,可以断开connection而保留当前数据集可用 5:强类型转换 6:xml支持

103.写一个HTML页面,实现以下功能,左键点击页面时显示“您好”,右键点击时显示“禁止右键”。并在2分钟后自动关闭页面。

答:

104.大概描述一下ASPNET服务器控件的生命周期

答:初始化加载视图状态处理回发数据加载发送回发更改通知处理回发事件预呈现保存状态呈现处置卸载

105.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

答:不能,可以实现接口

106.Static Nested Class Inner Class的不同,说得越多越好

答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

107.&&&的区别。

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and.

108.HashMapHashtable的区别。

答:HashMapHashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key,由于非线程安全,效率上可能高于Hashtable.

109.Overloaded的方法是否可以改变返回值的类型?

答:Overloaded的方法是可以改变返回值的类型。

110.errorexception有什么区别?

答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

111. 和有什么区别?

答:表示绑定的数据源

是服务器端代码块

112.你觉得ASP.NET 2.0VS2005)和你以前使用的开发工具(.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多个新的控件,减少了工作量

113.重载与覆盖的区别?

答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系

2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。

3、覆盖要求参数列表相同;重载要求参数列表不同。

4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。

114.C#中,string str = null string str = " " 请尽量使用文字或图象说明其中的区别。

答:null是没有空间引用的;

" " 是空间为0的字符串;

115.分析以下代码,完成填空

string strTmp = "abcdefg某某某";

int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;

int j= strTmp.Length;

以上代码执行完后,i= j=

答:i=13.j=10

116.分析以下代码。

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。所以理论上并非所有异常都会被捕捉。)

117.什么是WSE?目前最新的版本是多少?

答:WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,目前最新版本2.0

118.在下面的例子里

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

119.下面的例子中

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

120.C#property attribute(抽像类)的区别,他们各有什么用处,这种机制的好处在哪里?

答:propertyattribute汉语都称之为属性。不过property是指类向外提供的数据区域。而attribute则是描述对象在编译时或运行时属性的。这两者是有本质区别的。

 

121.在下面的例子里

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

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

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

123.什么是SOAP,有哪些应用。

:SOAPSimple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML格式的消息。

 

SOAP也被称作XMLP,为两个程序交换信息提供了一种标准的工作机制。在各类机构之间通过电子方式相互协作的情况下完全有必要为此制定相应的标准。

 

SOAP描述了把消息捆绑为XML的工作方式。它还说明了发送消息的发送方、消息的内容和地址以及发送消息的时间。SOAPWeb Service的基本通信协议。SOAP规范还定义了怎样用XML来描述程序数据(Program Data,怎样执行RPCRemote Procedure Call)。大多数SOAP解决方案都支持RPC-style应用程序。SOAP还支持 Document-style应用程序(SOAP消息只包含XML文本信息)。

 

最后SOAP规范还定义了HTTP消息是怎样传输SOAP消息的。MSMQSMTPTCP/IP都可以做SOAP的传输协议。

 

SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。

 

SOAP 定义了一种方法以便将 XML 消息从 A 点传送到 B 点。为此,它提供了一种基于 XML 且具有以下特性的消息处理框架: 1) 可扩展, 2) 可通过多种底层网络协议使用, 3) 独立于编程模型。

124.ADO.NET中的五个主要对象

Connection:主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。CloseDispose的区别,Close以后还可以OpenDispose以后则不能再用。

 

Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源。

 

DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。

 

DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet包含若干DataTableDataTable包含若干DataRow

 

DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(通过游标)读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。

 

ADO.NET 使用Connection 对象来连接数据库,使用Command DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader DataAdapter ,然后再使用取得的DataReader DataAdapter 对象操作数据结果。

125.<%# %><% %>有什么区别?

答:<%# %>表示绑定的数据源<% %>是服务器端代码块

126.分析以下代码。

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是一模一样的话,可以正确使用连接池。不过一模一样的意思是,连字符的空格数,顺序完全一致。

127.在下面的例子里

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

128.下面的例子中

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

129.override与重载(overload)的区别

重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。

Override 是进行基类中函数的重写。Override是面向对象的概念

130.C#中索引器是否只能根据数字进行索引?是否允许多个索引器参数?

参数的个数和类型都是任意的。加分的补充回答:用reflector反编译可以看出,索引器的内部本质上就是set_itemget_item方法。

 

基础知识:

索引的语法:

public string this[string s],通过getset块来定义取值、赋值的逻辑

索引可以有多个参数、参数类型任意

索引可以重载。

如果只有get没有set就是只读的索引。

索引其实就是set_Itemget_Item两个方法。

131.属性和public字段的区别是什么?调用set方法为一个属性设值,然后用get方法读取出来的值一定是set进去的值吗?

属性可以对设值、取值的过程进行非法值控制,比如年龄禁止设值负数,而字段则不能进行这样的设置。虽然一般情况下get读取的值就是set设置的值,但是可以让get读取的值不是set设置的值的,极端的例子。Public Age{get{return 100;}set{}}。加分的补充回答:用reflector反编译可以看出,属性内部本质上就是set_***get_***方法,详细参考传智播客.net培训视频中串讲.net基础的部分。

 

    class Person

    {

        public int Age

        {

            get

            {

                return 3;

            }

            set

            {

            }

        }

    }

            Person p1 = new Person();

            p1.Age = 30;

            p1.Age++;

            Console.Write(p1.Age);//输出3

 

必须手写掌握的代码(既包含拿电脑写,拿笔写):

1、手写三层架构

2、手写冒泡排序

3、手写AJAXXMLHttpRequest

4、手写增删改查、SQLHelper

132.三层架构

通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

区分层次的目的即为了“高内聚,低耦合”的思想。

表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候的所见所得。

业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系。

三层结构是N层结构的一种,一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前,上层代码是无法开发的,下层代码接口(契约)的变化将使上层的代码一起变化。

优点:分工明确,条理清晰,易于调试,而且具有可扩展性。

缺点:增加成本。

133.关于拆箱装箱:

1)什么是装箱(boxing)和拆箱(unboxing)?(*

 

Object是引用类型,但是它的子类Int32竟然不能去Object能去的“要求必须是引用类型”的地方,违反了继承的原则,所以需要把Int32装在Object中才能传递。

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

拆箱:从引用类型转换到值类型。

            object obj = null;//引用类型

            obj = 1;//装箱,boxing。把值类型包装为引用类型。

            int i1 = (int)obj;//拆箱。unboxing

 

2)下面三句代码有没有错,以inboxing或者unboxing为例,解释一下内存是怎么变化的

int i=10;

object obj = i;

int j = obj;

 

分析:在inboxing(装箱)时是不需要显式的类型转换的,不过unboxing(拆箱)需要显式的类型转换,所以第三行代码应该改为:

 

3 )int j = (int)obj;   

要掌握装箱与拆箱,就必须了解CTS及它的特点:

    NET重要技术和基础之一的CTS(Common Type System)CTS是为了实现在应用程序声明和使用这些类型时必须遵循的规则而存在的通用类型系统。.Net将整个系统的类型分成两大类:值类型和引用类型。

CTS中的所有东西都是对象;所有的对象都源自一个基类——System.Object类型。值类型的一个最大的特点是它们不能为null,值类型的变量总有一个值。为了解决值类型不可以为null,引用类型可以为null的问题,微软在.Net中引入了装箱和拆箱:装箱就是将值类型用引用类型包装起来转换为引用类型;而从引用类型中拿到被包装的值类型数据进行拆箱。

(*)

object.ReferenceEquals();//用来判断两个对象是否是同一个对象

Console.WriteLine(object.ReferenceEquals(3,3));//因为两个3被装到了两个箱子中,所以是false

Equals ==的关系

134CTSCLSCLR分别作何解释(*)把英文全称背过来。

C#.Net的关系。

C#只是抽象的语言,可以把C#编译生成Java平台的二进制代码,也可以把Java代码编译生成.Net平台的二进制代码。所以C#只是提供了ifwhile+-*/、定义类、intstring等基础的语法,而Convert.ToInt32FileStreamSqlConnectionString.Split等都属于.Net的东西。深蓝色是C#的,浅蓝色是.Net的。

C# newIL:newobj

C# string .Net中的String

类型的差别:.net中的Int32C#中是int,在VB.Net中是IntegerStringInt32等公共类型。

语法的差别:IL中创建一个对象的方法是L_0001: newobj instance void 索引.C1::.ctor()

C#中是new C1();VB.net中是 Dim c1 As New C1

CTSCommon Type System 通用类型系统。Int32Int16intStringstringBooleanbool。每种语言都定义了自己的类型,.Net通过CTS提供了公共的类型,然后翻译生成对应的.Net类型。

CLSCommon Language Specification 通用语言规范。不同语言语法的不同。每种语言都有自己的语法,.Net通过CLS提供了公共的语法,然后不同语言翻译生成对应的.Net语法。

CLRCommon Language Runtime 公共语言运行时,就是GCJIT等这些。有不同的CLR,比如服务器CLRLinux CLRMono)、Silverlight CLR(CoreCLR)。相当于一个发动机,负责执行IL

135.能用foreach遍历访问的对象的要求

需要实现IEnumerable接口或声明GetEnumerator方法的类型。

136.值类型和引用类型的区别?

1.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。

2.值类型不可能派生出新的类型:所有的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也可以实现接口。

3.值类型不可能包含 null 值:然而,可空类型功能允许将 null 赋给值类型。

4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

137.C#中的接口和类有什么异同。

不同点:

不能直接实例化接口。

接口不包含方法的实现。

接口可以多继承,类只能单继承。

类定义可在不同的源文件之间进行拆分。

 

相同点:

接口、类和结构都可以从多个接口继承。

接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

接口和类都可以包含事件、索引器、方法和属性。

 

基础知识:接口只能定义方法(只能定义行为,不能定义实现也就是字段),因为事件、索引器、属性本质上都是方法,所以接口中也可以定义事件、索引器、属性。

138.以下结果是

        static void Main(string[] args)

        {

            Console.WriteLine(GetIt());

            Console.ReadKey();

        }

        static int GetIt()

        {

            int i = 8;

            try

            {

                i++;

                Console.WriteLine("a");

                return i;//把返回值设定为i,然后“尽快”返回(没啥事就回去吧)

            }

            finally

            {

                Console.WriteLine("b");

                i++;

            }

        }

上面程序的执行结果是ab9

 

139.intDateTimestring是否可以为null?

null表示“不知道”,而不是“没有”。没有年龄和不知道年龄是不一样。

数据库中null不能用0表示。0岁和不知道多少岁不一样。

Sex is zero。《色即是空》

            //int i1 = null;

            //int? i2 = null;//值类型后加?就成了可空数据类型

            ////int i3 = i2;//所以把可空的赋值给一定不能为空的会报错。

            //int i4 = (int)i2;//可以显式转换,由程序员来保证“一定不为空”

            //int? i5 = i4;//一定会成功!

            //using()try{]catch{}finally{}

            //int?是微软的一个语法糖。是一种和int没有直接关系的Nullable类型

            Nullable<int> d1 = new Nullable<int>();//int? d1=null;

            Nullable<int> d2 = new Nullable<int>(3);//int? d2=3;

            Console.WriteLine(d1==null);

 

intDateTime不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值nullstring可以为null

C#int等值类型不可以为null、而数据库中的int可以为null,这就是纠结的地方。int?就变成了可空的int类型。bool?DateTime?

            int i1 = 3;

            int? i2 = i1;

            //int i3 = i2;//不能把可能为空的赋值给一定不能为空的变量

            int i3 = (int)i2;//显式转换

 

可空数据类型经典应用场景:三层中的Model属性的设计。

int?翻译生成.NetNullable<int>CTS

140.using关键字有什么用?什么是IDisposable

using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源。加分的补充回答:using其实等价于try……finally,用起来更方便。

141.string str = null string str =””说明其中的区别。

答:string str = null 是不给他分配内存空间,string str = \"\" 给它分配长度为空字符串的内存空间。 string str = null没有string对象,string str = “”有一个字符串对象。

 

string s3 = string.Empty;//反编译发现,string.Empty就是在类构造函数中 Empty = "";

142.面向对象的语言具有________性、_________性、________

答:封装、继承、多态。

不要背,脑子中要有联想。

143..Net中所有可序列化的类都被标记为_____?

答:[serializable]

144.接口是一种引用类型,在接口中可以声明(   a),但不可以声明公有的域或私有的成员变量。

  a) 方法、属性、索引器和事件;

  b) 索引器和字段;

  c) 事件和字段;

 

解读:接口中不能声明字段只能声明方法,属性、索引器和事件最终都编译生成方法。因为字段属于实现层面的东西,只有存取值的时候才会用到字段,所以中接口中不能定义字段。

145.ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(c)。

  a) insertupdatedelete等操作的Sql语句主要用ExecuteNonQuery()方法来执行;

  b) ExecuteNonQuery()方法返回执行Sql语句所影响的行数。

  c) Select操作的Sql语句只能由ExecuteReader()方法来执行;

  d) ExecuteReader()方法返回一个DataReader对象;

 

SQLHelper实现一下。

146.下列关于C#中索引器理解正确的是(c   )   

  a) 索引器的参数必须是两个或两个以上

  b) 索引器的参数类型必须是整数型

  c) 索引器没有名字

  d) 以上皆非

147.下面关于XML的描述错误的是(d)。

  a) XML提供一种描述结构化数据的方法;

  b) XML   是一种简单、与平台无关并被广泛采用的标准;

  c) XML文档可承载各种信息;

  d) XML只是为了生成结构化文档;

148.以下的C#代码,试图用来定义一个接口:

  Public  interface IFile   

  {   

  int   A;   

  int   delFile()   

  {   

  A   =   3;   

  }   

  void   disFile();

  }   

关于以上的代码,以下描述错误的是(d   )

  a) 以上的代码中存在的错误包括:不能在接口中定义变量,所以int   A代码行将出现错误;

  b) 以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数;

  c) 代码void   disFile();声明无错误,接口可以没有返回值;

  d) 代码void   disFile();应该编写为void   disFile(){}

149.ASP.NET中有Button控件myButton,要是单击控件时,导航到其他页面http://www.abc.com,   正确的代码为(   c)

a)private void myButton_Click(object sender,System.EventArgs e)

{

Redirect(http://www.abc.com);

}   

b)private void myButton_Click(object sender,System.EventArgs e)

{

Request.Redirect(http://www.abc.com);

}   

c)private void myButton_Click(object sender,System.EventArgs e)

{

Reponse.Redirect(http://www.abc.com);

}

d)private void myButton_Click(object sender,System.EventArgs e)

{

Request.Redirect(http://www.abc.com);

return true;

}

150.声明一个委托public   delegate   int   myCallBack(int   x);   则用该委托产生的回调方法的原型应该是(b   )。

  a) void  myCallBack(int  x)

  b) int  receive(int  num)

  c) string  receive(int  x)

  d) 不确定的;

151.StringBuilder String 的区别?

答:String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String

 

如果要操作一个不断增长的字符串,尽量不用String,改用StringBuilder类。两个类的工作原理不同:String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。

152.请叙述属性与索引器的区别。(*

属性索引器

通过名称标识。通过签名标识。

通过简单名称或成员访问来访问。通过元素访问来访问。

可以为静态成员或实例成员。必须为实例成员。

属性的   get   访问器没有参数。索引器的   get   访问器具有与索引器相同的形参表。

属性的   set   访问器包含隐式   value   参数。除了   value   参数外,索引器的   set   访问器还具有与索引器相同的形参表。

153.请解释ASPNET中的web页面与其隐藏类之间的关系?

一个ASP.NET页面一般都对应一个隐藏类,一般都在ASP.NET页面的声明中指定了隐藏类例如一个页面Tst1.aspx的页面声明如下

<%@Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>

Codebehind="Tst1.aspx.cs" 表明经编译此页面时使用哪一个代码文件

Inherits="T1.Tst1" 表用运行时使用哪一个隐藏类

aspx页面会编译生成一个类,这个类从隐藏类继承。

154.您在什么情况下会用到虚方法?它与接口有什么不同?

答案:子类重新定义父类的某一个方法时,必须把父类的方法定义为virtual

在定义接口中不能有方法体,虚方法可以。

实现时,子类可以不重新定义虚方法,但如果一个类继承接口,那必须实现这个接口。

155.不定项选择:

(1) 以下叙述正确的是: B C

A. 接口中可以有虚方法。B. 一个类可以实现多个接口。 C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。

(2) 从数据库读取记录,你可能用到的方法有:B C D

A. ExecuteNonQuery   B. ExecuteScalar      C. Fill          D. ExecuteReader

 

(3).对于一个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务?(多选)   (ABCD)  

  A.Close B.Dispose C.Finalize  

  D.using E.Quit  

4)以下关于refout的描述哪些项是正确的?(多选)   (    ACD   )  

 

  A.使用ref参数,传递到ref参数的参数必须最先初始化。

  B.使用out参数,传递到out参数的参数必须最先初始化。

  C.使用ref参数,必须将参数作为ref参数显式传递到方法。

  D.使用out参数,必须将参数作为out参数显式传递到方法。

156.单项选择:

1)下列选项中,(C)是引用类型。

a)enum类型   b)struct类型 c)string类型   d)int类型

 

2.关于ASP.NET中的代码隐藏文件的描述正确的是(C

 

a)Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名。

b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。

c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件。

d)以上都不正确。

3.下列描述错误的是(D

a)类不可以多重继承而接口可以;

b)抽象类自身可以定义成员而接口不可以;

c)抽象类和接口都不能被实例化;

d)一个类可以有多个基类和多个基接口;

157.DataReaderDataSet的异同?

DataReader使用时始终占用SqlConnection,在线操作数据库

每次只在内存中加载一条数据,所以占用的内存是很小的

是只进的、只读的

DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接(非连接模式)

DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,,数据.对数据库进行回传更新操作(动态操作读入到内存的数据)

158.public static const int  A = 1;这段代码有错误么?

错误:const不能被修饰为static ;因为定义为常量(const )后就是静态的(static )。

159.传入某个属性的set方法的隐含参数的名称是什么?

value,它的类型和属性所声名的类型相同。

160.C#支持多重继承么?

类之间不支持,接口之间支持。类对接口叫做实现,不叫继承。类是爹、接口是能力,能有多个能力,但不能有多个爹。

161.C#中所有对象共同的基类是什么?

System.Object

162.通过超链接怎样传递中文参数?

答:用URL编码,通过QueryString传递,用urlencode编码用urldecode解码

163.stringStringintInt32Booleanbool的区别

StringInt32Boolean等都属于.Net中定义的类,而stringintbool相当于C#中对这些类定义的别名。CTS

164.Server.TransferResponse.Redirect的区别是什么?(常考)

:Server.Transfer仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;Response.Redirect则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

 

Server.Transfer是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。这个过程中浏览器和Web服务器之间经过了一次交互。

 

   Response.Redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。这个过程中浏览器和Web服务器之间经过了两次交互。

 

Server.Transfer不可以转向外部网站,而Response.Redirect可以。

Server.Execute效果和Server.Transfer类似,但是是把执行的结果嵌入当前页面。

165.不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?(传智播客.Net培训班原创模拟题)

String是不可变的在这段代码中,s原先指向一个String对象,内容是 "abc",然后我们将s指向"123",那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

166.是否可以从一个static方法内部发出对非static方法的调用?

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部不能发出对非static方法的调用。

167.说出一些常用的类、接口,请各举5

要让人家感觉你对.Net开发很熟,所以,不能仅仅只列谁都能想到的那些东西,要多列你在做项目中涉及的那些东西。就写你最近写的那些程序中涉及的那些类。

 

常用的类:StreamReaderWebClientDictionary<K,V>StringBuilderSqlConnectionFileStreamFileRegexList<T>

 

常用的接口:IDisposableIEnumerableIDbConnectionIComparableICollectionIListIDictionary

要出乎意料!不要仅仅完成任务!笔试不是高考!处处要显出牛!

 

说出几个开源软件?MySQLLinuxDiscuzApachePaint.NetAndroidChromeNotepad++……

开源项目有一些是开发包。开源软件指的是可以直接用的。JqueryNPOIASP.Net MVCSilverlight  ToolkitAJAX toolkitjson.net

168.编写一个单例(Singleton)类。

把构造函数设置为private,设置一个publicstatic的对象实例

public FileManager

{

    private FileManager(){}

    public readonly static FileManager Instance = new FileManager();

}

 

扩展:搜C#  Singleton”,有线程安全的更牛B的实现

169.什么是sql注入?如何避免sql注入?

用户根据系统的程序构造非法的参数从而导致程序执行不是程序员期望的恶意SQL语句。使用参数化的SQL就可以避免SQL注入。

详细参考复习ppt。举例子,摆事实!

1' or 1=1

170.数据库三范式是什么?

用自己的话解释,而不是背概念。

 

传智播客风格的非严谨却一下子明了的解答方式:

 

第一范式:字段不能有冗余信息,所有字段都是必不可少的。

第二范式:满足第一范式并且表必须有主键。

第三范式:满足第二范式并且表引用其他的表必须通过主键引用。

 

员工内部→自己的老大→外部的老大

记忆顺序:自己内部不重复→别人引用自己→自己引用别人。

171.postget的区别

get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中;

 

使用post提交的页面在点击【刷新】按钮的时候浏览器一般会提示“是否重新提交”,而get则不会;

 

get的页面可以被搜索引擎抓取,而用post的则不可以;

 

post可以提交的数据量非常大,而用get可以提交的数据量则非常小(2k),受限于网页地址的长度。

 

post可以进行文件的提交,而用get则不可以。

 

参考阅读:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html

172.下面的程序执行结果是什么?(传智播客.Net培训班原创模拟题)

    class Person

    {

public int Age { get; set; }

}

            int i1 = 20;

            int i2 = i1;

            i1++;

            Console.WriteLine(i2);

Person p1 = new Person();

            p1.Age = 20;

            Person p2 = p1;

            p1.Age++;

            Console.WriteLine(p2.Age);

答案:

20

21

解释:引用类型和值类型的区别。

173.下面程序的执行结果是什么?(传智播客.Net培训班原创模拟题)

            int i = 10;

            Console.WriteLine(i++);

            Console.WriteLine(++i);

            Console.WriteLine(i=20);

            Console.WriteLine(i==20);

答案:

10

12

20

True       

解答:前两个参考第80题,i++表达式的值为i自增之前的值,所以打印10,执行完成后i变成11,执行++i的时候表达式的值为自增以后的值12C#中赋值表达式的值为变量被赋值的值,因此最后一个就输出i赋值后的值20

while((line=reader.ReadLine())!=null)

{

 

}

下面程序的执行结果是什么?

bool b=false;

if(b=true)

{

    Console.WriteLine("yes");

}

else

{

    Console.WriteLine("no");

}

174.下列哪个名词和WebService不直接相关?(B)(传智播客.Net培训班原创模拟题)

AUDDI

BGUID

CWSDL

DSOAP

 

WebService解决的三个问题:接口的自我描述;采用Http协议等常规协议,不用写原始的Socket;基于Web服务器,不占用80端口之外的端口。

 

UDDI用来自动发现WebService的协议(*

 

SOAPHTTP的关系:SOAP基于Http协议的,和普通网页不同的是网页返回HTMLSOAP则是符合SOAP协议的XML数据。

 

WSDL(WebService Defination Language)是对WebService上的方法名、参数进行描述的协议。对接口的自描述。

 

SOAP(Simple Object Access Protocol)是对参数、返回值以什么样的格式进行传递进行描述的协议。对报文的格式规范。

 

实际工作中应该是自己调用别人的WebService或者别人调用自己的WebService,沟通语言就是WSDL,拿到WSDL什么都不用操心。

 

WebService是跨平台、跨语言调用,可以跨防火墙;缺点:效率低。所以适用于两个非内部系统的通讯(比如炒股软件和证券交易所之间的通讯)

 

WCF是对WebServiceSocketMQ等通讯方式的一个统一,底层还是采用这些通信协议,可以简化这些程序的开发,不用再换不同通信协议的时候重写代码并且学一堆新的技术。所以WCFWebService不是一个竞争取代关系。

 

WCF是对.Net RemotingWebServiceMQ等通讯方式的一个高级封装,让我们开发不同通讯协议的程序的时候很简单,不用学更多的东西。并不是替代.Net RemotingWebServiceMQ这些东西。

175..NetASP.NetC#VisualStudio之间的关系是什么?(传智播客.Net培训班原创模拟题)

答:.Net一般指的是.Net Framework,提供了基础的.Net类,这些类可以被任何一种.Net编程语言调用,.Net Framework还提供了CLRJITGC等基础功能。

 

ASP.Net.Net中用来进行Web开发的一种技术,ASP.Net的页面部分写在aspx 文件中,逻辑代码通常通过Code-behind的方式用C#VB.Net等支持.Net的语言编写。

 

C#是使用最广泛的支持.Net的编程语言。除了C#还有VB.NetIronPython等。

 

VisualStudio是微软提供的用来进行.Net开发的集成开发环境(IDE),使用VisualStudio可以简化很多工作,不用程序员直接调用csc.exe等命令行进行程序的编译,而且VisualStudio提供了代码自动完成、代码高亮等功能方便开发。除了VisualStudio,还有SharpDevelopMonoDevelop等免费、开源的IDEVisualStudio Express版这个免费版本。

176.AJAX解决什么问题?如何使用AJAXAJAX有什么问题需要注意?项目中哪里用到了AJAX?(传智播客.Net培训班原创模拟题)

答:AJAX解决的问题就是“无刷新更新页面”,用传统的HTML表单方式进行页面的更新时,每次都要将请求提交到服务器,服务器返回后再重绘界面,这样界面就会经历:提交→变白→重新显示这样一个过程,用户体验非常差,使用AJAX则不会导致页面重新提交、刷新。

 

AJAX最本质的实现是在Javascript中使用XMLHttpRequest进行Http的请求,开发中通常使用UpdatePanelJQuery等方式简化AJAX的开发,UpdatePanel的方式实现AJAX最简单,但是数据通讯量比较大,因为要来回传整个ViewState,而且不灵活,对于复杂的需求则可以使用JQuery提供的ajax功能。

 

UpdatePanel的内部原理。

 

AJAX最重要的问题是无法跨域请求(www.rupeng.com so.rupeng.com),也就是无法在页面中向和当前域名不同的页面发送请求,可以使用在当前页面所在的域的服务端做代理页面的方式解决。

 

在如鹏网项目中发帖的时候显示相关帖的功能、站内搜索项目中显示搜索Suggestion、数据采集项目中都用到了AJAX

 

常考:不用任何框架编写一个AJAX程序。XHR:XmlHttpRequest。背也要背下来!

 

如果面试的时候谈AJAX谈到UpdatePanel的时候,就是NB的时候!!!先侃UpdatePanel的原理!引出为什么Dom操作的动态效果在用UpdatePanel提交刷新以后没有了,以及CKEditor被套在UpdatePanel中提交以后也变成了textarea,为什么把Fileupload放到Updatepanel中无法实现无刷新上传。说成是公司内部的一个菜鸟用UpdatePanel遇到这样问题,由于我懂XHRUpdatePanel的原理,所以轻松解决!UpdatePanel生成的上万行JS脚本,不适合于互联网项目。“WebForm怎么可能把开发人员编程傻子呢!不明白原理苦命呀!还是MVC好呀,MVC。。。。。。。”

177.Application CookieSession 两种会话有什么不同?

答:Application是用来存取整个网站全局的信息,而Session是用来存取与具体某个访问者关联的信息。Cookie是保存在客户端的,机密信息不能保存在Cookie中,只能放小数据;Session是保存在服务器端的,比较安全,可以放大数据。

 

谈到Session的时候就侃SessionCookie的关系:Cookie中的SessionId。和别人对比说自己懂这个原理而给工作带来的方便之处。

178.开放式问题:你经常访问的技术类的网站是什么?

博客园(www.cnblogs.com)、csdncodeplexcodeprojectmsdn文档、msdn论坛(遇到问题先到网上搜解决方案,还不行就问同事,同事也解决不了就去MSDN论坛提问,一定能得到解决)。Cnbeta.com

179.你对.netGC的理解

GC.Net的垃圾收集器,可以进行内存资源的回收,程序员无需关心资源的回收,当一个对象没有任何引用的时候就可以被回收了。一个对象可以被回收并不意味着一定会被立即回收,GC会选择时机进行回收。可以调用GC.Collect()GC立即回收。GC不能回收非托管资源,对于非托管资源一般都实现了IDisposable接口,然后使用using关键字进行资源的回收。

180.请写一个SQL语句:从user表中取出name列中的起始字符是“北京”的全部记录

select * from [user] wherer name like '北京%'

181.请你简单的说明数据库建立索引的优缺点

使用索引可以加快数据的查询速度,不过由于数据插入过程中会建索引,所以会降低数据的插入、更新速度,索引还会占磁盘空间。

182.下面程序的执行结果是什么?

    public struct Point

    {

        public int x;

        public int y;

        public Point(int x, int y)

        {

            this.x = x;

            this.y = y;

        }

    }

            Point p1 = new Point(100, 100);

            Point p2 = p1;

            p1.x = 200;

            Console.WriteLine("{0},{1}", p1.x, p2.x);

答案:

200,100

解答:结构体是复制传递的。

扩展:为啥this.Size.Width = 100;编译不通过。

183.不用JQuery等框架实现AJAX无刷新登录。(常考)

提示:用纯XMLHttpRequest实现。

184.Http状态码各是什么意思。

301(永久重定向)、302 :重定向

404 :页面不存在

500:服务器内部错误

185.介绍几个使用过的开源的项目

Lucene.netNPOIJQueryASP.Net AJAX  toolkitQuartz.NetJqueryUIASP.Net MVC。在CodePlexSourceForge等网站上有更多的开源项目。

186.asp.net<%%><%=%><%#%>的区别是什么

<%%>是执行<%%>中的C#代码,<%=%>是将=后表达式的值输出到Response中,<%#%>是数据绑定,一般用在ListViewGridViewRepeater等控件的绑定中。数据绑定分为:Eval:单向绑定和Bind:双向绑定。

187.说说在软件设计中你遇到的以空间换时间的例子?

参考回答:谈Cache(缓存)、索引这些例子。用额外的磁盘、内存空间的消耗来提高执行速度。Lucene.Net也是一个例子。

188.asp.net中的错误机制。(常考)

参考:

定制错误页来将显示一个友好的报错页面。

 

页面中未捕获一样会触发Page_Error(不常用),应用程序中的未捕获异常会触发Application_Error。通过HttpContext.Current.Server.GetLastError()HttpContext.Current.Error;拿到未捕捉异常,记录到Log4Net日志中。

189.不用中间变量交换两个变量(常考)

            i = i + j;//i=30

            j = i - j;//j=10;

            i = i - j;//i=20;

            Console.WriteLine("i={0},j={1}",i,j);

另外一个解决方案:位运算。

int   a=5;

int   b=6;

a=a^b;   

b=b^a;   //b^a相当于   b^a^b   也就是   b^a^b的值就是a,   下边相同

a=a^b;  

下面的SQL题是常考题中的常考题,必须重视!!!!!!!!

190.横表、纵表转换(常考!!!

1)纵表结构 TableA

Name

Course

Grade

张三

语文

75

张三

数学

80

张三

英语

90

李四

语文

95

李四

数学

55

 

横表结构 TableB

Name

语文

数学

英语

张三

75

80

90

李四

95

55

0

先理解:

select Name

 (case Course when ‘语文‘ then Grade else 0 end) as 语文,

 (case Course when ‘数学‘ then Grade else 0 end) as 数学,

 (case Course when ‘英语‘ then Grade else 0 end) as 英语

from TableA

然后理解标准答案:

select Name

sum(case Course when ‘语文‘ then Grade else 0 end) as 语文,

sum(case Course when ‘数学‘ then Grade else 0 end) as 数学,

sum(case Course when ‘英语‘ then Grade else 0 end) as 英语

from TableA

group by Name

2)、横表转纵表的"SQL"示例

横表结构: TEST_H2Z

      ID      姓名语文数学英语

      1       张三     80         90         70            

      2       李四     90         85         95          

      3       王五     88         75         90          

转换后的表结构:  

      ID     姓名科目成绩

      1       张三语文     80  

      2       张三数学     90  

      3       张三英语     70  

      4       李四语文     90  

      5       李四数学     80    

      6       李四英语     99  

      7       王五语文     85  

      8       王五数学     96  

      9       王五英语     88  

横表转纵表SQL示例:

SELECT   姓名,'语文'   AS     科目,语文   AS   成绩   FROM   TEST_H2Z   UNION   ALL

SELECT   姓名,'数学'   AS     科目,数学   AS   成绩   FROM   TEST_H2Z   UNION   ALL

SELECT   姓名,'英语'   AS     科目,英语   AS   成绩   FROM   TEST_H2Z

ORDER BY 姓名,科目 DESC;

191.删除姓名、年龄重复的记录(只保留Id最大的一条)(常考!!!)

Id  name  age  salary

1   yzk    80  1000

2   yzk    80  2000

3   tom    20  20000

4   tom    20  20000

5   im     20  20000

 

//取得不重复的数据

select * from Persons

where Id in

(

SELECT  MAX(Id) AS Expr1

FROM  Persons

GROUP BY Name, Age

)

根据姓名、年龄分组,取出每组的Id最大值,然后将Id最大值之外的排除。

 

删除重复的数据:

delete from Persons

where Id not in

(

SELECT  MAX(Id) AS Expr1

FROM  Persons

GROUP BY Name, Age

)

192.说出五个集合类

ListDictionarySetStack(先入后出)、Queue(先入先出)、Tree等。

 

解答:HashSet用于盛放不同的数据,相同的数据只保留一份

193.有一个10个数的数组,计算其中不重复数字的个数。{3,5,9,8,10,5,3}

工程化的非最优解答:用HashSet或者List

            int[] values = { 3, 5, 9, 8, 10, 5, 3 };

            HashSet<int> set = new HashSet<int>();

            foreach (int i in values)

            {

                set.Add(i);

            }

            Console.WriteLine(set.Count);

194.下面是一个由*号组成的4行倒三角形图案。要求:1、输入倒三角形的行数,行数的取值3-21之间,对于非法的行数,要求抛出提示“非法行数!”;2、在屏幕上打印这个指定了行数的倒三角形。

*******

 

*****

 

***

 

*

195.一个文本文件含有如下内容:

4580616022644994|3000|赵涛

4580616022645017|6000|张屹

4580616022645090|3200|郑欣夏

上述文件每行为一个转账记录,第一列表示帐号,第二列表示金额,第三列表示开户人姓名。

创建一张数据库表(MS SQLServer数据库,表名和字段名自拟),请将上述文件逐条插入此表中。

196.一个文本文件含有如下内容,分别表示姓名和成绩:

张三 90

李四 96

王五 78

赵六 82

 

提供用户一个控制台界面,允许用户输入要查询的姓名,输入姓名并且按回车以后,打印出此人的成绩,如果不输入姓名直接按回车则显示所有人的姓名以及成绩。(注意:不能使用数据库)

197.下面程序的执行结果是什么?

class Person

    {

       public DateTime BirthDay = DateTime.Now;

    }

        static void Main(string[] args)

        {

            Person p1 = new Person();//1:00:00

            Console.WriteLine(DateTime.Now);

            Thread.Sleep(1000 * 10);

            Console.WriteLine(DateTime.Now);

            Console.WriteLine(p1.BirthDay);

        }

通过在public DateTime BirthDay = DateTime.Now上设定断点来验证。

再难一点

    class Person

    {

        public static int A = 30;

        static Person()//静态构造函数在static字段初始化完成后执行

        {//静态构造函数只执行一次

            A++;

        }

        public int B = A++;//字段的初始化赋值代码只是在new一个对象的时候执行,而不是每次用字段的时候都执行

        public Person()

        {B++;}

    }

程序的执行结果是什么?

            Person p1 = new Person();

            Console.WriteLine(p1.B);

            Console.WriteLine(Person.A);

            Console.WriteLine(p1.B);

            Console.WriteLine(Person.A);

 

            Person p2 = new Person();

            Console.WriteLine(p2.B);

            Console.WriteLine(Person.A);

198.说一下SQLServer中索引的两种类型(常考!!!)

参考:聚簇(或者叫做聚集,cluster)索引和非聚簇索引。

 

字典的拼音目录就是聚簇(cluster)索引,笔画目录就是非聚簇索引。这样查询“GM的汉字”就非常快,而查询“6划到8划的字”则慢。

 

聚簇索引是一种特殊索引,它使数据按照索引的排序顺序存放表中。聚簇索引类似于字典,即所有词条在字典中都以字母顺序排列。聚簇索引实际上重组了表中的数据,所以你只能在表中建立一个聚簇索引。

 

当数据按值的范围查询时,聚簇索引就显得特别有用。因为所有SQLServer都必需先找到所查询范围的第一行,然后依次下去,直到该范围的最后一个值找到为止,并且保证了所有其他值也落在这个范围内。举一个例子,一个应用程序要查找首字母位于GP之间的姓名列表,SQLServer首先找到以字母G开头的名字,取出所有记录,直到找到以字母P开头的名字为止,这种方法使得查询过程非常高效。

 

进行大量数据改动的表不适宜用聚簇索引,因为SQLServer将不得不在表中维护行的次序。如果要索引的值极少,例如一个列包含的全都是10,创建聚簇索引就不是个好主意。如果表经常由一个指定的列来排序,该列将是簇索引的最佳候选列。这是因为表中的数据已经为你排好序了。如果访问一个表并使用BETWEEN<>>=<=操作符来返回一个范围的值时,应该考虑使用聚簇索引。

199.能否脱离VS用类似editplus的工具手写代码?你觉得如何才能提高代码的效率和性能?

可以,使用CSC.exe 来编译.cs文件!

 

可以根据业务流程、业务数据的特点进行优化,比如可以采用缓存、索引、表驱动等来提升代码的效率和性能,同时不要进行无意义的代码优化,重点优化系统的性能瓶颈。

200.如何提高页面的显示速度?假如一个页面的加载时间是10.89s,你会用什么样的方式进行优化?

回答要大气!显得很牛!

提示:分而治之的思想。

首先要找出问题所在,是服务器端运行的速度慢还是服务器端到客户端的下载慢还是页面在浏览器的加载速度慢。

如果是服务器端运行速度慢,则找是数据库的原因还是算法的问题,如果是数据库的问题则尝试添加索引.优化SQL语句,如果是算法的问题,则优化算法。如果对于一些不经常改动的页面可以使用静态页技术!对于一些数据不需要及时更新的而且取数据的过程非常耗时可以使用缓存。页面中的内容可以按需加载(比如说可以像verycd网站的评论那样当用户需要看的时候再加载其内容),可以在图片需要显示的时候再进行加载。

如果是服务器端到客户端的下载慢则看是页面体积过于臃肿还是网络问题,如果是页面体积过于臃肿,则优化HTML代码,去掉无用的标签,压缩JS.CSS,可以用CSS Spirit技术将多个图片放到一个图片中,减少向服务器的请求。如果是网络问题,则尝试在不同的网络.地区部署服务器,然后使用CDN技术加速访问。

如果是页面中的JavaScript运行复杂导致运行速度慢,则优化JavaScript

webkaka:测网速。

201.如何处理百万条数据的优化?

对于经常进行检索的字段创建索引,对于经常进行范围查询的一个字段创建聚集索引;

当有大量数据进行插入的时候进行批量插入;

一些代码用存储过程进行重写(当一个逻辑有多行SQL要执行的时候用存储过程可以优化速度,可以避免客户端和SQLServer之间多次交互);

(*)集群.读写分离;

(*)分区.分表;

202.在程序编码的时候,你会对Sql注入漏洞的防范采取什么样的措施?

尽量不要拼SQL语句!使用参数化查询或存储过程可以防止SQL注入攻击!在必须用SQL拼接的地方对用户输入的内容进行检查.过滤。

203.你会采用什么样的策略和方法来实现系统缓存?

ASP.NET中 缓存有 页面缓存,数据源缓存,和一些自己定义的缓存!

对于那些整个页面不经常变化的我们可以使用页面缓存,而对于那些执行非常耗时的SQL语句并且数据的及时性要求不高的我们可以使用数据源缓存。

对于页面缓存.数据源缓存等都不满足要求的情况下采用直接操作HttpRuntime.Cache来自定义缓存策略。如果需要用多台Web服务器作为一个集群来承载网站的情况,则可以部署专门的分布式缓存服务器,比如Memcached

204.网站想要实现文件防盗链的功能,说说你的解决方案。

读取HTTP报文头中的UrlReferrerApplication_BeginRequest中我们可以判断用户的请求是否来源于本网站。如果不是我们可以终止用户的请求(Response.End();)!

205.有这样一个功能需求,用户新注册的时候需要给他推荐3个好友,说说你的推荐算法

比如说类似豆瓣网我们可以根据用户兴趣来匹配,类似于人人网那些地区性比较比较强的网站我们可以根据用户的地区来匹配。

206.如果给学英语的用户设计一个在线应用,你会选择什么作为切入点,简述你的想法和理由。

英语学习资料的下载.在线答疑.用户交流.在线英语角作为切入点。

207.是否有以下相关开发经验?如有请简要说明开发情况(有可看项目网址也请提供)。

a.lucene相关开发经验

b.分布式文件处理经验

c.流媒体相关开发经验

d.语音技术

e.高负载网站开发

f.手机相关开发

208.请编程遍历WinForm页面上所有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 ;

}

}

209.

 

            int i=2000;

            object o=i;

            i=2001;

            int j=(int)o;

            Console.WriteLine("i={0},o={1},j={2}",i,o,j);

输出的结果是:

210.一个数组:1,1,2,3,5,8,13,21...+m,求第30位数是多少?用递归实现;(常考!!!)

写递归要确定两个:递归的终止条件;递归表达式。

解答:总结递归规律:F(n)=F(n-2)+F(n-1) Fibonacci数列

        static int F(int n)

        {

            if (n == 1)

            {

                return 1;

            }

            if (n == 2)

            {

                return 1;

            }

            return F(n - 2) + F(n - 1);

        }

非递归(bug吗?),递归算法的缺点:测试大数据

           int n = Convert.ToInt32(Console.ReadLine());

           if(n<=0)

           {Console.WRiteLine("必须大于0");return;}

           if(n==1)  //时刻注意边界值!!!

           {

                Console.WriteLine("1");

                return;

           }

            int[] data =new int[n];

            data[0] = 1;

            data[1] = 1;

            for(int i=2;i<n;i++)

            {

                data[i] = data[i-1]+data[i-2];

            }

            Console.WriteLine(data[n-1]);

上面程序的时间复杂度为O(n),空间复杂度为O(n)

BigInteger解决溢出的问题。

如果回答斐波那契数列:提到用非递归实现.注意边界条件以及用BigInteger解决溢出问题!

211.计算两个非常大的整数的加法.乘法。用程序实现乘法.加法运算。最起码把思路说出来,说自己写不出来,但是工作中用BigInteger解决。

参考:

算法复杂度:时间复杂度:算法运行需要消耗的时间的数量级.空间复杂度:算法运行需要消耗的内存的数量级。

消耗的时间或者内存随着问题规模的扩大而成正比增加,就是O(n)

消耗的时间或者内存随着问题规模的扩大而不变,就是O(1)

 

消耗的时间或者内存随着问题规模的扩大而n*n增加,就是O(n*n)

算法复杂度只考虑最差情况(从一个数组中找出第一个大于10的数,时间复杂度为O(n)),并且算法复杂度忽略常量和低阶。把数组数一遍和数两遍的时间复杂度都是O(n)。把长度为n的数组数n/2遍的时间复杂度还是O(n*n)

上课时把数组前后颠倒的算法的时间复杂度为O(n),空间复杂度为O(1)

212.refout的区别?

213.A字段Idnumberic(18,0),哪个SQL语句是错误的:

select * from A where id='';

select * from A where id='13';

select * from A where id=null;

select * from A where id=' 13';

214.SQLServer中求当前时间与2012-01-01 00:0相差的秒数?

215.做一个表格,三行三列,第一列,前两行合一;第二行,后两列合一。

216.下面的HTML代码

<style type="text/css">

#Text1{ /style>

<input id="Text1" type="text" class="txt" />

<input type="text" class="txt" />

两个文本框各是什么颜色?

参考资料:个人大于集体:元素单独设置的样式>class命名样式>标签样式。样式override父级别的。

217.传智播客.net培训精品就业班学员总结SQL

表一:student_info学号,姓名,性别,出生年月,家庭住址,备注

0001, 张三,,1981-8-9,北京,NULL

表二:curriculum课程编号 课程名称 学分

    0001    计算机基础 2

    0002      C语言    2

表三:grade 学号  课程编号   分数

0001 0001     80

0001 0002 90

GRADE表中查找80-90份的学生学号和分数

select 学号,分数 from grade where 分数 between 80 and 90

GRADE 表中查找课程编号为003学生的平均分

   select avg(分数) from grade where 课程编号='003

GRADE 表中查询学习各门课程的人数

Select课程编号,count(学号) as 人数from grade group by 课程编号

查询所有姓张的学生的学号和姓名

   select  姓名,学号 from student_info where 姓名 like '%'

嵌套查询:

查询和学号0001’的这位同学性别相同的所有同学的姓名和出生年月

 select 姓名,出生年月 from student_info where 性别 in(select 性别 from student_info where sno='0001')

查询所有选修课程编号为0002 0003的学生的学号.姓名和性别

select 学号,姓名,性别 from student_info where 学号 in(select 学号 from grade where 课程编号='0002' and 学号 in(select 学号 from grade where 课程编号='0001'))

查询出学号为0001的学生的分数比0002号学生最低分高的课程编号的课程编号和分数

select 课程编号, 分数 from grade where 学号='0001' and 分数>(select min(分数) from grade where 学号='0002')

多表查询:

查询分数在80-90分的学生的学号.姓名.分数

select student_info.学号,student_info.姓名,grade.分数 from student_info,grade where grade.分数 between 80 and 90

查询学习了C语言’课程的学生学号.姓名和分数

select student_info.学号,student_info.姓名,grade.成绩from student_info,grade,curriculum where student_info.学号=grade.学号and grade.课程号=curriculum.课程号and curriculum.课程名='C语言'

查询所有学生的总成绩,要求列出学号.姓名.总成绩,没有选课的学生总成绩为空。

select grade.学号,student_info.姓名,sum(grade.成绩) as 总成绩from student_info,grade where grade.学号=student_info.学号group by grade.学号,student_info.姓名

查询平均成绩大于60分的同学的学号和平均成绩;

    select S#,avg(score)

    from sc

    group by S# having avg(score) >60;

查询所有同学的学号.姓名.选课数.总成绩;

  select Student.S#,Student.Sname,count(SC.C#),sum(score)

  from Student left Outer join SC on Student.S#=SC.S#

  group by Student.S#,Sname

查询姓“李”的老师的个数;

  select count(distinct(Tname))

  from Teacher

  where Tname like '%';

 

查询没学过“叶平”老师课的同学的学号.姓名;

    select Student.S#,Student.Sname

    from Student

    where S# not in (select distinct( SC.S#) from SC,Course,Teacher where  SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');

 

查询学过001”并且也学过编号“002”课程的同学的学号.姓名;

  select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');

 

查询学过“叶平”老师所教的所有课的同学的学号.姓名;

  select S#,Sname

  from Student

  where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher  where Teacher.T#=Course.T# and Tname='叶平'));

 

查询课程编号002”的成绩比课程编号“001”课程低的所有同学的学号.姓名;

  Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2

  from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;

 

查询所有课程成绩小于60分的同学的学号.姓名;

  select S#,Sname

  from Student

  where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);

 

查询没有学全所有课的同学的学号.姓名;

    select Student.S#,Student.Sname

    from Student,SC

    where Student.S#=SC.S# group by  Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);

 

查询至少有一门课与学号为1001”的同学所学相同的同学的学号和姓名;

    select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';

 

查询至少学过学号为001”同学所有一门课的其他同学学号和姓名;

    select distinct SC.S#,Sname

    from Student,SC

    where Student.S#=SC.S# and C# in (select C# from SC where S#='001');

 

SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

    update SC set score=(select avg(SC_2.score)

    from SC SC_2

    where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');

 

查询和1002”号的同学学习的课程完全相同的其他同学学号和姓名;

    select S# from SC where C# in (select C# from SC where S#='1002')

    group by S# having count(*)=(select count(*) from SC where S#='1002');

 

删除学习“叶平”老师课的SC表记录;

    Delect SC

    from course ,Teacher

    where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';

 

查询出只选修了一门课程的全部学生的学号和姓名

  select SC.S#,Student.Sname,count(C#) AS 选课数

  from SC ,Student

  where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;

 

查询男生.女生人数

    Select count(Ssex) as 男生人数 from Student group by Ssex having Ssex='';

Select count(Ssex) as 女生人数 from Student group by Ssex having Ssex=''

 

查询姓“张”的学生名单

    SELECT Sname FROM Student WHERE Sname like '%';

 

查询同名同性学生名单,并统计同名人数

  select Sname,count(*) from Student group by Sname having  count(*)>1;;

 

1981年出生的学生名单(注:Student表中Sage列的类型是datetime)

    select Sname,  CONVERT(char (11),DATEPART(year,Sage)) as age

    from student

    where  CONVERT(char(11),DATEPART(year,Sage))='1981';

 

查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

    Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;

 

查询平均成绩大于85的所有学生的学号.姓名和平均成绩

    select Sname,SC.S# ,avg(score)

    from Student,SC

    where Student.S#=SC.S# group by SC.S#,Sname having    avg(score)>85;

 

查询课程名称为“数据库”,且分数低于60的学生姓名和分数

    Select Sname,isnull(score,0)

    from Student,SC,Course

    where SC.S#=Student.S# and SC.C#=Course.C# and  Course.Cname='数据库'and score <60;

 

查询所有学生的选课情况;

    SELECT SC.S#,SC.C#,Sname,Cname

    FROM SC,Student,Course

    where SC.S#=Student.S# and SC.C#=Course.C# ;

 

查询任何一门课程成绩在70分以上的姓名.课程名称和分数;

    SELECT  distinct student.S#,student.Sname,SC.C#,SC.score

    FROM student,Sc

    WHERE SC.score>=70 AND SC.S#=student.S#;

 

查询不及格的课程,并按课程号从大到小排列

    select c# from sc where scor e <60 order by C# ;

 

查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;

    select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';

 

求选了课程的学生人数

    select count(*) from sc;

 

查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩

    select Student.Sname,score

    from Student,SC,Course C,Teacher

    where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# );

 

查询各个课程及相应的选修人数

    select count(*) from sc group by C#;

 

查询不同课程成绩相同的学生的学号.课程号.学生成绩

  select distinct  A.S#,B.score from SC A  ,SC B where A.Score=B.Score and A.C# <>B.C# ;

 

查询每门功成绩最好的前两名

    SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数

      FROM SC t1

      WHERE score IN (SELECT TOP 2 score

              FROM SC

              WHERE t1.C#= C#

            ORDER BY score DESC

              )

      ORDER BY t1.C#;

 

统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列

    select  C# as 课程号,count(*) as 人数

    from  sc

    group  by  C#

    order  by  count(*) desc,c#

 

查询没学过“叶平”老师讲授的任一门课程的学生姓名

    select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname='叶平');

 

查询两门以上不及格课程的同学的学号及其平均成绩

    select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score <60 group by S# having count(*)>2)group by S#;

 

检索004”课程分数小于60,按分数降序排列的同学学号

    select S# from SC where C#='004'and score <60 order by score desc;

 

删除002”同学的“001”课程的成绩

delete from Sc where S#='001'and C#='001';

 

SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号.2.号课的平均成绩;

    Insert SC select S#,'002',(Select avg(score)

    from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');

 

按平均成绩从高到低显示所有学生的“数据库”.“企业管理”.“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分

    SELECT S# as 学生ID

        ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库

        ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理

        ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语

        ,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩

    FROM SC AS t

    GROUP BY S#

    ORDER BY avg(t.score)

 

查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

    SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分

    FROM SC L ,SC AS R

    WHERE L.C# = R.C# and

        L.score = (SELECT MAX(IL.score)

                      FROM SC AS IL,Student AS IM

                      WHERE L.C# = IL.C# and IM.S#=IL.S#

                      GROUP BY IL.C#)

        AND

        R.Score = (SELECT MIN(IR.score)

                      FROM SC AS IR

                      WHERE R.C# = IR.C#

                  GROUP BY IR.C#

                    );

 

按各科平均成绩从低到高和及格率的百分数从高到低顺序

    SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩

        ,100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数

    FROM SC T,Course

    where t.C#=course.C#

    GROUP BY t.C#

    ORDER BY 100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC

 

查询如下课程平均成绩和及格率的百分数("1"显示): 企业管理(001),马克思(002),OO&UML 003),数据库(004

    SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分

        ,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数

        ,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分

        ,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数

        ,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分

        ,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数

        ,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分

        ,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数

 

  FROM SC

查询不同老师所教不同课程平均分从高到低显示

  SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩

    FROM SC AS T,Course AS C ,Teacher AS Z

    where T.C#=C.C# and C.T#=Z.T#

  GROUP BY C.C#

  ORDER BY AVG(Score) DESC

 

查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML 003),数据库(004

    [学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩

    SELECT  DISTINCT top 3

      SC.S# As 学生学号,

        Student.Sname AS 学生姓名 ,

      T1.score AS 企业管理,

      T2.score AS 马克思,

      T3.score AS UML,

      T4.score AS 数据库,

      ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分

      FROM Student,SC  LEFT JOIN SC AS T1

                      ON SC.S# = T1.S# AND T1.C# = '001'

            LEFT JOIN SC AS T2

                      ON SC.S# = T2.S# AND T2.C# = '002'

            LEFT JOIN SC AS T3

                      ON SC.S# = T3.S# AND T3.C# = '003'

            LEFT JOIN SC AS T4

                      ON SC.S# = T4.S# AND T4.C# = '004'

      WHERE student.S#=SC.S# and

      ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

      NOT IN

      (SELECT

            DISTINCT

            TOP 15 WITH TIES

            ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

      FROM sc

            LEFT JOIN sc AS T1

                      ON sc.S# = T1.S# AND T1.C# = 'k1'

            LEFT JOIN sc AS T2

                      ON sc.S# = T2.S# AND T2.C# = 'k2'

            LEFT JOIN sc AS T3

                      ON sc.S# = T3.S# AND T3.C# = 'k3'

            LEFT JOIN sc AS T4

                      ON sc.S# = T4.S# AND T4.C# = 'k4'

      ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);

统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]

    SELECT SC.C# as 课程ID, Cname as 课程名称

        ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]

        ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]

        ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]

        ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]

    FROM SC,Course

    where SC.C#=Course.C#

    GROUP BY SC.C#,Cname;

 

查询学生平均成绩及其名次

      SELECT 1+(SELECT COUNT( distinct 平均成绩)

              FROM (SELECT S#,AVG(score) AS 平均成绩

                      FROM SC

                  GROUP BY S#

                  ) AS T1

            WHERE 平均成绩 > T2.平均成绩) as 名次,

      S# as 学生学号,平均成绩

    FROM (SELECT S#,AVG(score) 平均成绩

            FROM SC

        GROUP BY S#

        ) AS T2

    ORDER BY 平均成绩 desc;

 

查询各科成绩前三名的记录:(不考虑成绩并列情况)

      SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数

      FROM SC t1

      WHERE score IN (SELECT TOP 3 score

              FROM SC

              WHERE t1.C#= C#

            ORDER BY score DESC

              )

      ORDER BY t1.C#;

 

查询每门课程被选修的学生数

  select c#,count(S#) from sc group by C#;

 

检索至少选修两门课程的学生学号

    select  S#

    from  sc

    group  by  s#

    having  count(*)  >  =  2

 

查询全部学生都选修的课程的课程号和课程名

    select  C#,Cname

    from  Course

    where  C#  in  (select  c#  from  sc group  by  c#)

 

NAME最大列宽增加到10个字符(假定原为6个字符)

--实现代码:

ALTER TABLE CARD ALTER COLUMN NAME varchar(10)

 

为该表增加1NAME(系名),可变长,最大20个字符

--实现代码:

ALTER TABLE CARD ADD 系名 varchar(20)

 

218.活期存款中,“储户”通过“存取款单”和“储蓄所”发生联系。假定储户包括:账号,姓名,电话,地址,存款额;“储蓄所”包括:储蓄所编号,名称,电话,地址(假定一个储户可以在不同得储蓄所存取款)

写出设计以上表格的语句(4分)

 

创建一个触发器TR1完成下面内容:

 

当向“存取款单”表中插入数据时,如果存取标志=1则应该更改储户表让存款额加上存取金额,如果存取标志=0则应该更改储户表让存款额减去存取金额,如果余额不足显示余额不足错误。

CREATE TABLE CREATE TRIGGER tr1 on qukuan after insert

AS

BEGIN

declare @sid nvarchar(50)

declare @type int

declare @qian int

declare @yuer int

select @sid=sid,@type=[type],@m=m from inserted

select @yuer=yuer from cunkuan

if(@type=1)

begin

update cunkuan set yuer=yuer+@qian

end

else

begin

if(@yuer<@qian)

 begin

print '余额不足'

end

else

begin

update cunkuan set yuer=yuer-@qian

 

End

end

END

GO

219.本题用到下面三个关系表:

CARD 借书卡:(CNO 卡号,NAME  姓名,CLASS 班级)

BOOKS 图书:(BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数 )

BORROW 借书记录:(CNO 借书卡号,BNO 书号,RDATE 还书日期)

备注:限定每人每种书只能借一本;库存册数随借书.还书而改变。

要求实现如下处理:

写出自定义函数,要求输入借书卡号能得到该卡号所借书金额的总和

CREATE FUNCTION getSUM

(

@CNO int

)

RETURNS int

AS

BEGIN

    declare @sum int

select @sum=sum(price) from BOOKS where bno in (select bno from BORROW where cno=@CNO)

return @sum

END

GO

找出借书超过5本的读者,输出借书卡号及所借图书册数。

select CNO,count(BNO) as 借书数量from BORROW group by CNO having count(BNO)>3

 

查询借阅了"水浒"一书的读者,输出姓名及班级。

select name,class from card where cno in( select cno from borrow where bno in(

 

select bno from BOOKS where bname='水浒'))

查询过期未还图书,输出借阅者(卡号).书号及还书日期。

select CNO,BNO,RDATE from borrow where getdate()>RDATE

 

查询书名包括"网络"关键词的图书,输出书号.书名.作者。

 

select bno,bname,author from books where bname like '网络%'

查询现有图书中价格最高的图书,输出书名及作者。

select bname,author from books where price in(select max(price) from books  )

 

查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。

select cno from borrow where bno in (select bno from books where bname='计算方法') and cno not in ( select cno from borrow where bno in(select bno from books where bname='计算方法习题集')) order by cno desc

SELECT a.CNO

FROM BORROW a,BOOKS b

WHERE a.BNO=b.BNO AND b.BNAME=N'计算方法'

AND NOT EXISTS(

SELECT * FROM BORROW aa,BOOKS bb

WHERE aa.BNO=bb.BNO

AND bb.BNAME=N'计算方法习题集'

AND aa.CNO=a.CNO)

ORDER BY a.CNO DESC

 

"C01"班同学所借图书的还期都延长一周。

update borrow set rdate=dateadd(day,7,rdate) from BORROW where cno in(select cno from card where class='一班')

 

BOOKS表中删除当前无人借阅的图书记录。

 

DELETE A FROM BOOKS a

WHERE NOT EXISTS(

    SELECT * FROM BORROW

    WHERE BNO=a.BNO)

 

如果经常按书名查询图书信息,请建立合适的索引。

 

(这个不确定对不 90%应该是对的 自己看了下书写的)

CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)

 

BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。

 

CREATE TRIGGER TR_SAVE ON BORROW

FOR INSERT,UPDATE

AS

IF @@ROWCOUNT>0

INSERT BORROW_SAVE SELECT i.*

FROM INSERTED i,BOOKS b

WHERE i.BNO=b.BNO

    AND b.BNAME=N'数据库技术及应用'

 

建立一个视图,显示"01"班学生的借书信息(只要求显示姓名和书名)。

 

CREATE VIEW V_VIEW

AS

select name,bname

from  books,card,borrow

where borrow.cno=card.cno and borrow.bno=books.bno and class='一班'

 

查询当前同时借有"计算方法""组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。

 

select a.cno from borrow a,borrow b

where a.cno=b.cno and

 a.bno in(select bno from books where bname='计算方法') and

b.bno in(select bno from books where bname='组合数学')

order by a.cno desc

SELECT a.CNO

FROM BORROW a,BOOKS b

WHERE a.BNO=b.BNO

  AND b.BNAME IN('计算方法','组合数学')

GROUP BY a.CNO

HAVING COUNT(*)=2

ORDER BY a.CNO DESC

 

用事务实现如下功能:一个借书卡号借走某书号的书,则该书的库存量减少1,当某书的库存量不够1本的时候,该卡号不能借该书

 

alter PROCEDURE pro_jieshu

 @cno int,

 @bno int,

 @date datetime

AS

BEGIN

begin tran

declare @quantity int

select @quantity=quantity from books where bno=@bno

  insert into borrow values(@cno,@bno,@date)

     update books set quantity=@quantity-1 where bno=@bno

if(@quantity>0)

  begin

   commit tran

  end

else

  begin

   print '已无库存'

   rollback

  end

END

GO

 

220.Math.Round(11.5).Math.Round(11.3).Math.Round(-11.5).Math.Round(-11.3)的值各是多少?

答案:Round 四舍五入:Math.Round(-11.5)=-12,因为是按照绝对值考虑。

扩展:Math.Ceiling(-11.6)=-11,因为负数的天花板也在上面。

Math.Floor(-11.5)=-12

221.short s=1;s=s+1;有错吗?short s=1;s+=1;有错吗?

答案:第一个有错,因为1int类型,int+short结果是int,无法隐式转换,改为s = (short)(s + 1);就可以了。

第二个没错,经过反编译发现编译器自动优化成s = (short)(s + 1);

222.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。(要求使用两种方法)

解答:Random类是一个伪随机数算法,原理:

r(n)=(sed+r(n-1))%100;

    class MyRand

    {

        private int seed;

        private int prevNumber = 10;

        public MyRand(int seed)

        {

            this.seed = seed;

        }

        public int Next()

        {

            int newRand = (seed + prevNumber) % 100;

            prevNumber = newRand;

            return newRand;

        }

    }

生成的随机数是依赖于上一个的,所以叫“随机数序列”。,确定的种子产生确定的随机数序列。

为了避免每次生成的随机数序列都一样,所以一般采用当前系统运行的毫秒数Environment.TickCount做种子。

这就明白为什么

            //for (int i = 0; i < 10; i++)

            //{

            //    Random rand = new Random();

            //    Console.WriteLine(rand.Next(100));

            //}

是错的。

经过反编译,Random类的无参构造函数最终也是调用有参的,传递的就是当前毫秒数

public Random() : this(Environment.TickCount)

这就验证了

            //for (int i = 0; i < 10; i++)

            //{

            //    Random rand = new Random();

            //    Console.WriteLine(rand.Next(100));

            //}

为什么一样,或者一半一样,是因为在同一毫秒内。

做法1

            List<int> list = new List<int>();

            Random rand = new Random();

            while (list.Count < 100)

            {

                int number = rand.Next(1, 101);//>=1,<101

                if (!list.Contains(number))//如果list中已经含有这个数,则不插入

                {

                    list.Add(number);

                }

            }

            foreach (int i in list)

            {

                Console.WriteLine(i);

            }

做法2

先把1-100100个数按顺序放入数组arr,再重复100次下面的操作,生成两个介于 >=0,<100 之间的随机数m.n,颠倒arr[m]arr[n]的数。

            int[] arr = new int[100];

            //100个数顺序放入

            for (int i = 0; i < 100; i++)

            {

                arr[i] = i + 1;

            }

            Random rand = new Random();

            for (int i = 0; i < 100; i++)

            {

                //随机生成两个位置

                int m = rand.Next(0, 100);

                int n = rand.Next(0, 100);

                //颠倒两个位置

                int temp = arr[m];

                arr[m] = arr[n];

                arr[n] = temp;

            }

223.select * from t where id=(select max(id) from t)更简单的就是:

select top 1 * from t order by id desc

224.题有问题,应该增加一个主键字段create table T_Persons(id bigint identity(1,1),name nvarchar(20),age int)

insert into T_Persons(name,age) values('小明',20);

insert into T_Persons(name,age) values('小明',20);

insert into T_Persons(name,age) values('小黑',20);

insert into T_Persons(name,age) values('小明',20);

insert into T_Persons(name,age) values('小宏',20);

225.你为什么来我们公司?

如果是知名公司,就说仰慕贵公司,(举例,看到你们网站发展速度快,还听说过关于你们技术团队.技术架构的介绍);如果是不知名公司,就说喜欢这个行业。描述自己针对这个职位的优势

226.2+5+"8"得到的结果是什么?

 

解答:从左向右运算,int+stringstring。所以是"78"

"8"+2+5"825",而"8"+(2+5)是“87

227.

1

var x=1;

var y=0;

var z=0;

function add(n){n=n+1;return n;}

y=add(x);

function add(n){n=n+3;return n;}

z=add(x);

 

yz的值是多少?

 

参考:JavaScript引擎会先解析所有的命名函数,再去从上向下执行js代码。所以第二个add覆盖了第一个add的定义。因此结果是4.4

参考:var add = function(n){n=n+1;return n;}是把一个变量名add指向匿名函数。执行的时候add指向哪个函数,就执行哪个函数。从上向下执行。结果是2.4。所以写程序的时候最好用匿名函数。

 

命名函数的add就是函数的名字。而var add = function(n){n=n+1;return n;}则是创建一个匿名函数,并且把变量add指向它,这个函数还是匿名函数,并不会因为有一个变量指向它他就不是匿名函数了。

228.传入某个属性的set方法的隐含参数的名称是什么?

value,它的类型和属性所声名的类型相同。

229.用游标实现将书号为‘A001’的书本的价格提高10

declare @bno int

declare @bname nvarchar(50)

declare @author nvarchar(50)

declare @price int

declare @quantity int

declare mycursor cursor for select * from books

open mycursor

fetch next from mycursor into @bno,@bname,@author,@price,@quantity

while(@@fetch_status=0)

  begin

      if(@bno=2)

       begin

     update books set price=@price+10 where current of mycursor

       end

     fetch next from mycursor into @bno,@bname,@author,@price,@quantity

  end

close mycursor

deallocate mycursor

Student(S#,Sname,Sage,Ssex) 学生表

Course(C#,Cname,T#) 课程表

SC(S#,C#,score) 成绩表

Teacher(T#,Tname) 教师表

230.查询“001”课程比“002”课程成绩高的所有学生的学号;

  select a.S# from (select s#,score from SC where C#='001') a,(select s#,score

  from SC where C#='002') b

  where a.score>b.score and a.s#=b.s#;

231.protected修饰的属性/方法在何处可以访问?

在继承或间接继承与这个类的子类中可以访问。

232.私有成员会被继承么?

会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了。

233.C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数?

两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。

234.重载和复写有什么区别?

重载提供了对一个方法签名的不同参数调用的实现。覆写提供了子类中改变父类方法行为的实现。

235.取出name.age相同的id最小的数据

select min(id) from T_Persons group by name,age;--按照nameage分组

236.id等于最小值的取出来

select * from T_Persons where id in (select min(id) from T_Persons group by name,age--nameage分组 )

237.把不等于最小id的删掉

delete from T_Persons where id not in( select min(id) from T_Persons group by name,age--按照nameage分组)

238.能够阻止某一个类被其他类继承么? 

可以,使用关键字sealed

239.能够实现允许某个类被继承,但不允许其中的某个方法被覆写么?

可以,标记这个类为public,并标记这个方法为sealed

240什么是抽象类(abstract class)?

一种不可以被实例化的类。抽象类中一般含有抽象方法,当然也可有具体实现。继承类只有实现过所有抽象类的抽象方法后才能被实例化。

241.何时必须声明一个类为抽象类?

当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。

242.接口(interface)是什么?

只含有共有抽象方法(public abstract method)的类。这些方法必须在子类中被实现。

243.为什么不能指定接口中方法的修饰符?

接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。他们默认为公有方法。

244.可以继承多个接口么?

当然。

245.那么如果这些接口中有重复的方法名称呢? 

这种情况中你可以决定如何实现。当然需要特别得小心。但是在编译环节是没有问题的。

246.接口和抽象类的区别是什么? 

接口中所有方法必须是抽象的,并且不能指定方法的访问修饰符。抽象类中可以有方法的实现,也可以指定方法的访问修饰符。

247.如何区别重载方法? 

不同的参数类型,不同的参数个数,不同的参数顺序。

248.C1onstreadonly有什么区别?

const关键字用来声明编译时常量,readonly用来声明运行时常量。

249.System.String System.StringBuilder有什么区别?

System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法。

250.列出overridenew用法的不同. 什么是shadowing?  (Juxtapose the use of override with new. What is shadowing?)

简单的讲, 子类的override, 将忽略父类用virtual修饰的同名方法. 但子类的new, 将被父类用virtual修饰的同名方法所遮盖. 听起来有点抽象, 用下面代码演示一下, 就明了了.

复制代码

      public class Animal

      {

          public virtual string DoSomething()

         {

             return "I can breathe";

         }

      }

      public class Bird : Animal

      {

         public override string DoSomething()

         {

             return "I can fly";

         }

     }

     public class Cat : Animal

     {

         public new string DoSomething()

         {

             return "I can run";

         }

     }

1 var animal = new Animal();

2 animal.DoSomething()    // I can breathe

3  var bird = new Bird();

4 bird.DoSomething()       //  I can fly

5  var cat = new Cat();

6 cat.DoSomething()   //  I can run

1 var animal = new Animal();

2 animal.DoSomething()    // I can breathe

3  Animal bird = new Bird();

4 bird.DoSomething()       //  I can fly

5  Animal cat = new Cat();

6 cat.DoSomething()   //  I can breathe

251.解释virtual, sealed, override abstract 的用法 (Explain the use of virtual, sealed, override, and abstract.)

virtual: 允许被子类重写.

sealed: 不允许被继承.

override: 在子类使用, 重写在父类中用virtual, abstract override修饰的函数.

abstract: 只能被继承, 不能被实例化. 函数本身不能有实现代码, 但是可以有属性

252.解释Foo.Bar,Version=2.0.205.0,Culture=neutral, PublicKeyToken=593777ae2d274679d 这行里每个部分的重要性跟用法

Foo.Bar: Assembly(程序集)的名字,

Version: 版本号, 就像 ASP.MCV 1.0, 2.0, 3.0

Culture: 这个程序集适用的文化环境

PublicKeyToken: 原作者在发布此程序集的时候生成, 用来鉴别这个程序集是否被别人修改过

253.使用Primary Interop Assembly (PIA)的好处是什么?

254. UNite 是通过什么机制知道要测试哪一个方法的?

255. catch(Exception e){throw e;} catch(Exception e){throw;}的区别

前者不保留原先的stacktrace, 后者保留原先的stacktrace.

256. What is the difference between typeof(foo) and myFoo.GetType()?

typeof(foo), foo 是类, 在编译的时候执行,myFoo.GetType(), myFoo 是类的一个实列,在运行时执行。沿用上面BirdAnimal的例子

 

  var bird = new Bird();

  if (bird.GetType() == typeof(Animal))

  {

      // can not go in here

  }

  

  if (bird is Animal)

  {

      // can go in here

      Console.WriteLine("bird is an Animal");

  }

257. Explain whats happening in the first constructor: public class c{ public c(string a) : this() {;}; public c() {;} } How is this construct useful?

public a(string a) : this() {} 调用base constructor public c(){}. 好处是当base constructor c()有逻辑时(e.g. 初始化域)可以避免重复代码。

258."This" 是什么?可以用在static函数中吗?

this 代指当前实例本身, 不可以用在静态函数中。因为静态函数不需要实例来调用的

259.数据库的范式

第一范式(1NF)无重复的列

第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ]

第三范式(3NF)属性不依赖于其它非主属性 [ 消除传递依赖 ]

 

说个我的记忆方式吧

第一范式,1NF,无重复列,字段不冗余且必不可少。这必须得记住

第二范式,2NF,满足第一范式且表必须有主键

第三范式,3NF,满足第二范式且表引用其他表必须通过主键引用

260.数据库有哪几种索引

A)聚集索引,表数据按照索引的顺序来存储的。

B)非聚集索引,表数据存储顺序与索引顺序无关。

261.C#中,值类型和引用类型的区别

不同的值类型,在栈中分配的空间大小不一样。不同的引用类型,在栈中分配的空间上一样的,在堆中空间不一样

C#的所有值类型均隐式派生自System.ValueType

Sbyte,byte,short,int,long,DateTime,ushort,unit,ulong,char,float,double,decimal,bool,struct,enum,还有可空类型,如int?是值类型

引用类型:数组,类,接口,委托,Object,String

例外情况来了,一定要说:值类型的实例会存储在栈上,但是,当某个类的实例有个字段是值类型,那么实际该字段会和类的实例保持在同一个地方,即堆上。

F12我们发现,string是被sealed修饰的。

sealed :密封,

故名思义,就是由它修饰的类或方法将不能被继承或是重写。

262.Final,finaly,finallize的区别

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

 

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

 

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

263.HTTPPostGet区别

根据HTTP规范,Get用于信息获取,而且应该是安全的和幂等的。 参数在URL后,以?分割,以&相连。

根据HTTP规范,Post表示可能修改服务器的资源请求。数据存在HTTP包中

因为Get是安全的,所以Get返回的内容可以被浏览器,Cache服务器缓存起来,但是,缓存服务器不会缓存Post的请求内容,索引有些时候你提交表单后按下F5的时候,跳出来确认框。

264.UDP,TCP区别

TCPTransmission Control Protocol,传输控制协议)是基于连接的协议。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,这只做简单、形象的介绍,因为我只做到了理解这个过程。

主机A向主机B说:“我想给你发数据,可以吗?”  这是第一次对话;主机A向主机B

主机B回答A说:“可以,你什么时候发?”       这是第二次对话;主机B向主机A

主机A向主机B说:“我现在就发,你接着吧!”     这是第三次对话;主机A向主机B

三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

UDPUser Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。如我们打电话,聊QQ。不用管对方同意,可以直接拨打和发送信息。

265.C#中如何判断两个对象是不是相等?

判断相等有 ==Equal,ReferenceEquals

ReferenceEqualsObject的静态方法,用于比较两个引用类型的变量是否是对于同一个对象的引用。对于值类型它总是返回false

==是一个可以重载的二元操作符,可以用于比较两个对象是否相等。

对于内置值类型,==判断的是两个对象的代数值是否相等。它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false。而对于用户定义的值类型,如果没有重载==操作符,==将是不能够使用的。对于引用类型,== 默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。但是.NET Framework中的类很多对==进行了重载,例如String类的==Equals的行为相同,判断两个字符串的内容是否相等。所以在应用中,对于 系统定义的引用类型建议不要使用==操作符,以免程序出现与预期不同的运行结果。

Equals方法对于值类型和引用类型的定义不同,对于值类型,类型相同,并且数值相同(对于struct的每个成员都必须相同),则Equals返回 true,否则返回false。而对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时 候才返回true

266.怎样实现多态

  1.通过对象直接调用成员函数时,始终默认使用该对象的类的成员函数(除非用::显示指定类名)

 

  2.通过指向对象的指针或引用调用成员函数时,如果该函数是实函数,则调用该指针或引用的类的成员函数;如果该函数是虚函数,则调用该指针或引用指向的对象的类的成员函数。

267.什么是装箱和拆箱?

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

  装箱(boxing)是将值类型转换成引用类型,int i=3;object o=i;这便是装箱过程。

  而拆箱(unboxing)是将引用类型数据转换成值类型,int j=(int)o;

268.什么是Interface?它与Abstract Class有什么区别?

  接口(Interface)是用来定义行为规范的,不会有具体实现,而抽象类除定义行为规范外,可以有部分实现,但一个类能实现多个接口,但只能继承一个父类

269.什么时候使用抽象类,什么时候用接口

  接口用于规范,抽象类用于共性。接口中只能声明方法、属性、事件、索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。抽象了可以提供某些方法的部分实现,接口不可以。抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。在抽象类中假如一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写(这就是为什么说接口是一个类的规范了)。接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的、或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。

 

此外接口不能包含字段、构造函数、析构函数、静态成员或常量。

270.什么是抽象类(Abstract Class)?

  一种不可以被实例化的类。抽象类中一般含有抽象方法,当然也可以有具体实现。继承类只有实现过所有抽象类的抽象方法后才能被实例化。

271.何时必须声明一个类为抽象类?

  当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。

272.为什么不能指定接口中方法的修饰符?

  接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。他们默认为共有方法。

273.如果接口中存在重复的方法名称该如何?

  这种情况中你可以决定如何实现,当然需要特别的小心。但是在编译环节是没有问题的。

274.C#接口和类有什么异同。

  异:

    不能直接实例化接口。

    接口不包含方法的实现。

    接口、类和结构可从多个接口继承。但是C#只支持单继承:类只能从一个基类继承实现。

    类定义可在不同的源文件之间进行拆分。

 

  同:

    接口、类和结构可从多个接口继承。

    接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

    接口可以包含事件、索引器、方法和属性。

    一个类可以实现多个接口。  

275.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性

276.A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程.请附code

277.讲一讲你理解的web service,dot net framework中,怎么很好的结合xml?

278.C#可否对内存进行直接的操作?如果能,如何操作;如果不能,为什么?

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

280.面向对象的思想主要包括什么?

面向对象三大特征:继承,封套,多态.面相对象的主要思想就是减少代码重复,增大代码复用率..

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

问这样的问题,一般是迷惑你.因为新手还是分不清楚用户控件和服务器控件(也称自定义控件)..用户控件一般用在内容多为静态,或者少许会改变的情况下..用的比较大..类似ASP中的include..但是功能要强大的多..

如果现有的 ASP.NET 服务器控件都不符合应用程序的特定要求,则可以创建封装所需功能的 Web 用户控件或 Web 自定义控件。这两种控件之间的主要区别在于设计时的易创建性与易用性。

Web 用户控件易于创建,但它们在高级方案中使用起来可能不太方便。开发 Web 用户控件的方式与开发 Web 窗体页的方式几乎完全相同。与 Web 窗体相似,用户控件可以在可视化设计器中创建,可以使用与 HTML 隔离的代码来编写,并且可以处理执行事件。但是,由于 Web 用户控件在运行时动态地进行编译,所以不能将它们添加到工具箱中,而且它们在添加到页面上时由简单的占位符标志符号来表示。如果您习惯于完全的 Visual Studio .NET 设计时支持(包括“属性”窗口和“设计”视图预览),这将会使 Web 用户控件使用起来更不方便。 此外,在应用程序之间共享用户控件的唯一方式是将一个单独的副本放入每个应用程序,因此如果对该控件作出了更改,将需要进行比较多的维护。

Web 自定义控件是编译的代码,这使得 Web 自定义控件更易于使用但更难于创建;Web 自定义控件必须使用代码来创建。一旦创建该控件,那么,您就可以将其添加到工具箱中,并在具有完全“属性”窗口支持和 ASP.NET 服务器控件的其他所有设计时功能的可视化设计器中显示该控件。此外,还可以在全局程序集缓存中安装 Web 自定义控件的单个副本,并在应用程序之间共享该副本,这将使维护变得更容易。有关更多信息,请参阅全局程序集缓存。

如果您的控件包含大量静态布局,用户控件则可能是较佳的选择。如果您的控件主要是动态生成的(例如数据绑定表的行、树视图的节点或选项卡 (TabControl) 控件的选项卡),自定义控件则可能是较佳的选择。

下表概述了这两种类型之间的主要区别:

Web 用户控件

1.难于创建

2.为使用可视化设计工具的使用者提供有限的支持

3. 每个应用程序中需要控件的一个单独副本

4. 不能添加到 Visual Studio 中的工具箱

5. 适用于静态布局

Web 自定义控件

1.易于创建

2. 为使用者提供完全的可视化设计工具支持

3. 仅在全局程序集缓存中需要控件的单个副本

4. 可以添加到 Visual Studio 中的工具箱

5. 适用于动态布局

282.CTSCLSCLR分别作何解释?

这个需要当前描述了..东西太多..打字要打死了..找个比较简单的说说吧!

CTS:公共类型系统.主要是为了语言之间的进行标准化处理.

CLS:公共语言规范.主要是确保代码可以在任何语言中访问的最小标准集体

CLR:公共语言运行时.主要是管理代码..处理,加载代码,以及所有服务的代码

283.值类型和引用类型的区别?写出C#的样例代码。

值类型是在内存中保存,引用类型是在内存中保存一副本.你在内存中可以有多个某种引用对象..但是值类型始终只有一个.

最常见的值类型就是static,struct;

例如:

static int aa = 1;//值类型

如果多个用户改变aa的值则,aa的值会以最后一个修改的记录为准.其他人的修改则会被冲掉.

引用类型,最能说明问题的就是实例化..new出来的对象单独分配一个独立的内存..所以值不会互相冲突/

284.数据成员可以分静态变量、非静态变量两种.

 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.

 

 非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中..

 

 一个类中也可以包含静态成员和非静态成员,类中也包括静态构造函数和非静态构造函数..

 

 对于winApp来说,静态成员对于程序员本身省了很多事,而且因为静态成员驻留内存,在方法与方法之间传递共享数据的时候,所以静态成员成了我的首选..但是不要因为方便,大量使用,尤其是在内存紧张或者

 用静态方法操作一些共享值的时候.或者要写多用户系统的时候,要慎之又慎.比如:

 static int id = 0;

 sql = "select * from table where id=" + id;l

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

Connection 数据库连接对象

Command 数据库命令

DataReader 数据读取器

DataSet 数据集

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

看第六题..答案差不多

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

window验证:为每个用户开启window帐号,验证其身份.安全性较高.

forms验证:为每个登陆用户写入一个身份验证票据..web使用最广的验证方式..灵活方便.

287.进程和线程分别怎么理解?

进程:Process

288.活动目录的作用。

活动目录是window2000的最重要的功能.可以将用户信息全部集成起来,登陆以后可以访问多个不同的网络服务..没深入研究过.

289..net中读写XML的类都归属于哪些命名空间?

System.XML

290.常用的调用webservice方法有哪些?

我一般用的是WSDL..或者web引用..

291.如何把一个array复制到arrayList

foreach( object o in array )arrayList.Add(o);

292.datagrid.datasouse可以连接什么数据源

dataset,datatable,dataview , IList

293.请简要写出你对C#ASP的认识。

294.怎么获得文件的当前路径(代码)

295.SQL语言中,如果要建立一个工资表包含职工号,姓名,职称。工资等字段。若要保证工资 字段 的取值不低于800元,最合适的实现方法是:

A。在创建工资表时为”工资“字段建立缺省

B。在创建工资表时为”工资“字段建立检查约束

C。在工资表建立一个触发器

D。为工资表数据输入编写一个程序进行控制

296.没有关键码序列(QGMZANBPXHYSLTKE)采用二路归并排序法进行排序,请写出第二趟归并后的结果?

297.创建一个新文本文件并向其写入一个字符串(代码)

298.请使用正则表达式验证电子邮件地址的合法性(代码)

299.如何设定DATAGRID中模板列里 下拉列表默然值,如何在编辑时,让其绑定另一个表的数据并自动讲当前值设为默认值

300.上机测试题目:用户管理中,用户验证,用户添加,用户删除功能,采用ACCESS数据库

(时间30分钟)

 

301.2003年所有没有降雨的日期   

结果集:日期

表名:t_rain     降雨记录

表结构:

fstartTimedatetime  (有时间信息)  降雨开始时间

fendTimedatetime 降雨结束时间  (可能跨日的)

302..一只猴子跌进三十尺深的井里,它每天朝上蹿三尺,但都滑下两尺,依照这个速度,猴子多少天后会蹿出井外?

303.抽屉里有黑白袜子各十只,如果你在黑暗中伸手入抽屉,最少要取出几只才一定会有一双颜色相同?

304.有三个苹果,你拿了两个,你共有多少个?

305.三只猫三分钟内可以捉三只老鼠,一百只猫需要多久才能捉到一百只老鼠?

306.有两枚硬币,共值一元五角,其中一枚不是五角的硬币,请问两枚硬币的面值各是多少?

307.一个人购物共付了六元,零食比笔芯多五元,笔芯价格是多少?

308.有两人在路上走,年轻的是年长的儿子,但年长的不是年轻的父亲,年长的是谁?

309.一立方尺的洞里有多少垃圾?

310.一个男人和他遗孀的妹妹结婚是否合法?

311.有人要赶火车,只有两分钟时间,但要走两里。如果第一里的速度是每小时三十里,第44里的速度应该是多少才能赶上这班火车?

312.5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城。

  他们决定这么分:

  1。抽签决定自己的号码(12345

  2。首先,由1号提出分配方案,然后大家5人进行表决,当且仅当半数和超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。

  3。如果1号死后,再由2号提出分配方案,然后大家4人进行表决,当且仅当半数和超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。

  4。依次类推......

问题:第一个海盗提出怎样的分配方案才能够使自己的收益最大化

条件:每个海盗都是很聪明的人,都能很理智的判断得失,从而做出选择。

313.有一张表,表名:Test

表结构:

     id int

     name varchar(20)

有以下数据:

    [id]    [name]

      1       aaa

      2       bbb

      3       aaa

      4       ccc

314.要求写一个查询语句,只显示[name]有重复的数据,没有重复的不显示出来。

SELECT `vPART_ID` FROM `buybill` group by vPART_ID HAVING COUNT(vPART_ID)>1

315.C#支持多重继承么?

不支持。可以用接口来实现。

316.请描述一下修饰符protected internal

protected internal修饰的属性/方法只能在它的在同一个程序集(Assembly)中的子类被访问。

两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。

317.在方法定义中,virtual有什么含意?

virtual修饰的方法可以被子类覆写。

318.能够将非静态的方法覆写成静态方法么?

不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override

319.可以覆写私有的虚方法么?

不可以,甚至子类中无法访问父类中的私有方法。

320.只含有共有抽象方法(public abstract method)的类。这些方法必须在子类中被实现。

321.什么是强类型系统?

322.什么是SOAP,有哪些应用。

:SOAPSimple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML格式的消息,具体请看:http://playist.blogchina.com/2521621.html

 

 

323.填空: (1)面向对象的语言具有________性、_________性、________性。

        (2)能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。

        (3)列举ADO.net中的五个主要对象___________________________________________________________________________

324. 不定项选择:

(1) 以下叙述正确的是:

      A. 接口中可以有虚方法。     B. 一个类可以实现多个接口。

      C. 接口不能被实例化。       D. 接口中可以包含已实现的方法。

   (2) 从数据库读取记录,你可能用到的方法有:

      A. ExecuteNonQuery            B. ExecuteScalar

      C. Fill                        D. ExecuteReader

325. 写出程序的输出结果

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);

       }  

    }

326.写出程序的输出结果

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();

        }

}

 

327. 写出程序的输出结果:

public class A  

{

        public virtual void Fun1(int i)

       {

            Console.WriteLine(i);

        }

        public void Fun2(A a)   

       {

            a.Fun1(1);

            Fun1(5);

        }

}

 

public class B : A  

{

        public override void Fun1(int i)    

       {

            base.Fun1 (i + 1);

        }

        public static void Main()   

       {

            B b = new B();

            A a = new A();

            a.Fun2(b);

            b.Fun2(a);          

        }

}

328.程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。

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

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

       

 要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象

评分标准: <1>.构造出CatMouseMaster三个类,并能使程序运行(2)

            <2>MouseMaster中提取抽象(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();

        }

    }

 

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

330. 讲一讲你理解的web service,dot net framework中,怎么很好的结合xml?(讲概念就行了)

331. C#, Java c++的特点,有什么相同的地方,不同的地方,C#分别从c++java中吸取了他们那些优点?

332. C#可否对内存进行直接的操作?(这可是个难点哦?要注意!)

333. Visual C++ 6.0编写的代码(unmanaged code),如何在CLR下和其他dot net component结合?

334. 以前作过的一些项目?介绍一下自己的编程经验。(这是蒙混不过去的,基本一问就知道是真是假)

335. 你对公司有什么期望?你的薪水期望值?为什么学计算机?以前的工作经验(这非常重要)?

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

337.ADO.NET相对于ADO等主要有什么改进?

338.ASP.NETASP相比,主要有哪些进步?

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

340.写一个HTML页面,实现以下功能,左键点击页面时显示“您好”,右键点击时显示“禁止右键”.并在2分钟后自动关闭页面.

341.你对XMLHTTP.WEBSERVICE 了解吗?简单描述其特点.作用

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

343.大概描述一下ASP.NET服务器控件的生命周期

344.面向对象的概念,主要特点

345.类划分的依据.类粒度问题

346.事物管理问题

347.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以19.implements(实现)interface(接口)?

348.Static Nested Class Inner Class的不同,说得越多越好(面试题有的很笼统).

349.存储过程和函数的区别

350.Collection Collections的区别.

351.什么时候用assert.

352.String s = new String("xyz");创建了几个String Object?

353.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

354.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

355.sleep() wait() 有什么区别?

356.Java有没有goto?

357.数组有没有length()这个方法? String有没有length()这个方法?

358.OverloadOverride的区别.Overloaded的方法是否可以改变返回值的类型?

359.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

360.给我一个你最常见到的runtime exception.

361.errorexception有什么区别?

362.List, Set, Map是否继承自Collection接口?

363.abstractmethod是否可同时是static,是否可同时是native,是否可同时是synchronized?

364.启动一个线程是用run()还是start()?

365.构造器Constructor是否可被override?

366.是否可以继承String?

367.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

368.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

369.编程题. 用最有效率的方法算出2乘以8等於几?

370.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

371.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String?

372.编程题. 写一个Singleton出来.

数据库方面.

373.事务是什么?

374.游标的作用?如何知道游标已经到了最后?

375.触发器分为事前触发和事后触发,这两种触发有和区别.语句级触发和行级触发有何区别.

376.C#实现以下功能

   a 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复.

   b 对上面生成的数组排序,需要支持升序.降序两种顺序

 

377.请说出强名的含义

378.请列出c#中几种循环的方法,并指出他们的不同

379.请指出GAC的含义

380.SQL SREVER中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值

381..netB/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

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

383.微软推出了一系列的Application Block,请举出您所知道的Application Block并说明其作用?

384.请列举一些您用到过的设计模式以及在什么情况下使用该模式?

385.您对WebService的体会?

386.您对编程的兴趣如何?工作中遇到不懂的问题是怎样去解决的?您一般怎样去提高自己的编程水平?

387.您离职的原因是什么?

388.通过超链接怎样传递中文参数?

389.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性,并请举列来加以说明和分析.

390.如果需记录类的实例个数,该如何实现,请写一个简单的类于以证明.

391.A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程.

392.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.

393.填空题

1.c#中的三元运算符是__?.___?

2.当整数a赋值给一个object对象时,整数a将会被__装箱(封装)___?

3.类成员有_____种可访问形式?  this.;new Class().Method;

4.public static const int A=1;这段代码有错误么?是什么?  const不能用static修饰

5.float f=-123.567F;

  int i=(int)f;

i的值现在是_____?   123

6.利用operator声明且仅声明了“==”,有什么错误么?

394.委托声明的关键字是______?

delagete

395.Asp.net中所有的自定义用户控件都必须继承自________?

Control

396..Net中所有可序列化的类都被标记为_____?

397..Net托管代码中我们不用担心内存漏洞,这是因为有了______?

gc

398.下面的代码中有什么错误吗?_______

     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();

       }

 

399.当类T只声明了私有实例构造函数时,则在T的程序文本外部,___可以___(可以 or 不可以)从T派生出新的类,不可以____(可以 or 不可以)直接创建T的任何实例.

400.下面这段代码有错误么?

    switch (i){

    case().

        CaseZero();

        break;

    case 1.

        CaseOne();

        break;

    case 2.

        dufault;  //wrong

        CaseTwo();

        break;

   }

401..Net中,类System.Web.UI.Page 可以被继承么?可以

402.c#usingnew这两个关键字有什么意义,请写出你所知道的意义?

using 指令和语句

new 创建实例 new 隐藏基类中方法

403.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成.请用c#语言编写主要程序来实现.

404.对于这样的一个枚举类型.

      enum Color.byte{

          Red,

          Green,

          Blue,

          Orange

       }

     string[] ss=Enum.GetNames(typeof(Color));

     byte[]   bb=Enum.GetValues(typeof(Color));

试写一段程序显示出枚举类型中定义的所有符号名称以及它们对应的数值.

405.什么叫做SQL注入,如何防止?请举例说明.

406.下面这段代码输出什么?为什么?

     int i=5;

     int j=5;

     if (Object.ReferenceEquals(i,j))

          Console.WriteLine("Equal");

     else

          Console.WriteLine("Not Equal");

//不相等,因为比较的是对象

 

407.写一个实现对一段字符串翻转的方法,附加一些条件,如其中包括“,”..”,对其设计测试用 例 .

408.对一支纸杯设计测试用例(可以是广义的杯,不一定是某一支特定功能的杯)

开发语言概念题

409.Singleton如何写设计模式

410.什么是Application Pool

411.链表和数组的区别,各有什么优缺点.

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

413.什么是友元函数?

414.用标准C如何实现多态?

415.什么是虚函数?

416.什么是抽象函数?

417.什么是内存泄漏,怎样最简单的方法判断被存泄漏 ?

418.用英文介绍一下使用C#/C++做的项目,主要功能

419.如果要与美国开电话会议,会如何与美国的工程师沟通

420.如果老板认为你的技术落后,你会怎么回答

数据库知识题

421.使用什么工具来调用存储过程

422.SQL Server的两种索引是何形式?索引的作用?索引的优缺点?

其它知识题及问题

423.什么是Web Service

424.什么是XML

425.Socket怎么实现 

426.在对SQL Server 数据库操作时应选用(a.

a)SQL Server .NET Framework 数据提供程序;

b)OLE DB .NET Framework 数据提供程序;

c)ODBC .NET Framework 数据提供程序;

d)Oracle .NET Framework数据提供程序;

427.下列选项中,(c)是引用类型.

a)enum类型

b)struct类型

c)string类型

d)int类型

428.关于ASP.NET中的代码隐藏文件的描述正确的是(a

a)Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互.编程逻辑唯一与用户界面不同的文件中.该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名.

b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件.

c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件.

d)以上都不正确.

429.以下描述错误的是(a

a)C++中支持抽象类而在C#中不支持抽象类.

b)C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员.

c)C#中可使用 new 修饰符显式隐藏从基类继承的成员.

d)C#中要在派生类中重新定义基类的虚函数必须在前面加Override.

430.C#的数据类型有(b

a)值类型和调用类型;

b)值类型和引用类型;

c)引用类型和关系类型;

d)关系类型和调用类型;

431.下列描述错误的是(d

a)类不可以多重继承而接口可以;

b)抽象类自身可以定义成员而接口不可以;

c)抽象类和接口都不能被实例化;

d)一个类可以有多个基类和多个基接口;

432.DOM中,装载一个XML文档的方法(b

a)save方法

b)load方法

c)loadXML方法

d)send方法

433.下列关于构造函数的描述正确的是(c

a)构造函数可以声明返回类型.

b)构造函数不可以用private修饰

c)构造函数必须与类名相同

d)构造函数不能带参数

434.以下是一些C#中的枚举型的定义,其中错误的用法有(a

a)public enum var1{ Mike = 100, Nike = 102, Jike }

b)public enum var1{ Mike = 100, Nike, Jike }

c)public enum var1{ Mike=-1 , Nike, Jike }

d)public enum var1{ Mike , Nike , Jike }

435.int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是(d.

a)9

b)2

c)6

d)越界

436.接口是一种引用类型,在接口中可以声明(a),但不可以声明公有的域或私有的成员变.

a)方法.属性.索引器和事件;

b)方法.属性信息.属性;

c)索引器和字段;

d)事件和字段;

437.ASP.NET框架中,服务器控件是为配合Web表单工作而专门设计的.服务器控件有两种类型,它们是(a)

a)HTML控件和Web控件

b)HTML控件和XML控件

c)XML控件和Web控件

d)HTML控件和IIS控件

438.ASP.NET中,在Web窗体页上注册一个用户控件,指定该控件的名称为”Mike”,正确的注册指令为(b)

a)<%@Register TagPrefix = “Mike” TagName = “Space2” Src = “myX.ascx”%>

b)<%@Register TagPrefix = “Space2” TagName = “Mike” Src = “myX.ascx”%>

c)<%@Register TagPrefix = “SpaceX” TagName = “Space2” Src = “Mike”%>

d)以上皆非

439.ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(c.

a)insert.update.delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行;

b)ExecuteNonQuery()方法返回执行Sql语句所影响的行数.

c)Select操作的Sql语句只能由ExecuteReader()方法来执行;

d)ExecuteReader()方法返回一个DataReder对象;

440.下列ASP.NET语句(b)正确地创建了一个与SQL Server 2000数据库的连接.

a)SqlConnection con1 = new Connection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);

b)SqlConnection con1 = new SqlConnection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);

c)SqlConnection con1 = new SqlConnection(Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB);

d)SqlConnection con1 = new OleDbConnection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);

441.Winform中,关于ToolBar控件的属性和事件的描述不正确的是(d).

a)Buttons属性表示ToolBar控件的所有工具栏按钮

b)ButtonSize属性表示ToolBar控件上的工具栏按钮的大小,如高度和宽度

c)DropDownArrows属性表明工具栏按钮(该按钮有一列值需要以下拉方式显示)旁边是否显示下箭头键

d)ButtonClick事件在用户单击工具栏任何地方时都会触发

442.ADO.NET中执行一个存储过程时,如果要设置输出参数则必须同时设置参数的方向和d ),必要时还要设置参数尺寸.

a)大小;

b)上限;

c)初始值;

d)类型;

443.如果将窗体的FormBoderStyle设置为None,则(B).

a)窗体没有边框并不能调整大小;

b)窗体没有边框但能调整大小;

c)窗体有边框但不能调整大小;

d)窗体是透明的;

444.如果要将窗体设置为透明的,则( b)

a)要将FormBoderStyle属性设置为None

b)要将Opacity属性设置为小于100%得值;

c)要将locked 属性设置为True

d)要将 Enabled属性设置为True

445.下列关于C#中索引器理解正确的是(c )

a)索引器的参数必须是两个或两个以上

b)索引器的参数类型必须是整数型

c)索引器没有名字

d)以上皆非

446.下面描述错误的是(D ).

a)窗体也是控件;

b)窗体也是类;

c)控件是从窗体继承来的;

d)窗体的父类是控件类;

447.要对注册表进行操作则必须包含(D ).

a)System.ComponentModel命名空间;

b)System.Collections命名空间;

c)System.Threading命名空间;

d)Microsoft.Win32命名空间;

448.要创建多文档应用程序,需要将窗体的(d )属性设为true.

a)DrawGrid

b)ShowInTaskbar

c)Enabled

d)IsMdiContainer

449.如果设treeView1=new TreeView(),则treeView1.Nodes.Add("根节点")返回的是一个 (a)类型的值.

a)TreeNode

b)int

c)string

d)TreeView

 

450.下面关于XML的描述错误的是( d.

a)XML提供一种描述结构化数据的方法;

b)XML 是一种简单.与平台无关并被广泛采用的标准;

c)XML文档可承载各种信息;

d)XML只是为了生成结构化文档;

451. 以下的C#代码,试图用来定义一个接口.

public interface IFile

{

int A;

int delFile()

{

A = 3;

}

void disFile();

}

452.关于以上的代码,以下描述错误的是(A,B ).

a)以上的代码中存在的错误包括.不能在接口中定义变量,所以int A代码行将出现错误;

b)以上的代码中存在的错误包括.接口方法delFile是不允许实现的,所以不能编写具体的实现函数;

c)代码void disFile();声明无错误,接口可以没有返回值;

d)代码void disFile();应该编写为void disFile(){}

453.C#中利用Socket进行网络通信编程的一般步骤是.建立Socket侦听.a30.声明一个委托public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是(b .

a)void myCallBack(int x)

b)int receive(int num)

c)string receive(int x)

d)不确定的;

454.判断题,对的打√错的打×(每小题2分,共20分)

1.( T)C#中,装箱操作是将值类型转化成引用类型.

2.( F)接口中的成员不可以有访问域修饰符,但可以有其它修饰符.

3.( F)C#中,索引器是专门用来访问对象中的数组信息的.

4.( T)C#中,接口可以被多重继承而类不能.

5.( F)C#中,int[][]是定义一个int型的二维数组.

6.( T)异常类对象均为SystemException类的对象.

7.(T ) 当窗体最小化后,再次还原成为活动窗体时将自动触发Paint事件.

8.( T) ASP.NET中,使用验证控件来验证用户输入,要求用户不可跳过该项输入,并且用户输入值在01000之间,则适用RequiredFieldValidatorRangeValidator控件.

9.( F) 声明委托实际上是声明了一个方法.

10.(T ) 任何事物都是对象.

1.请简述一下用Socket进行同步通讯编程的详细步骤

1.在应用程序和远程设备中使用协议和网络地址初始化套接字

2.在应用程序中通过指定端口和地址建立监听

3.远程设备发出连接请求

4.应用程序接受连接产生通信scoket

5.应用程序和远程设备开始通讯(在通讯中应用程序将挂起直到通讯结束)

6.通讯结束,关闭应用程序和远程设备的Socket回收资源

2.比较ADO ADO.NET 的不同.

455.在对SQL Server 数据库操作时应选用().

a)SQL Server .NET Framework 数据提供程序;

b)OLE DB .NET Framework 数据提供程序;

c)ODBC .NET Framework 数据提供程序;

d)Oracle .NET Framework数据提供程序;

456.DOM中,装载一个XML文档的方法()

a)save方法

b)load方法

c)loadXML方法

d)send方法

457.下列关于构造函数的描述正确的是()

a)构造函数可以声明返回类型.

b)构造函数不可以用private修饰

c)构造函数必须与类名相同

d)构造函数不能带参数

458.以下是一些C#中的枚举型的定义,其中错误的用法有()

a)public enum var1{ Mike = 100, Nike = 102, Jike }

b)public enum var1{ Mike = 100, Nike, Jike }

c)public enum var1{ Mike=-1 , Nike, Jike }

d)public enum var1{ Mike , Nike , Jike }

459.接口是一种引用类型,在接口中可以声明(),但不可以声明公有的域或私有的成员变量.

a)方法.属性.索引器和事件;

b)方法.属性信息.属性;

c)索引器和字段;

d)事件和字段;

460.Winform中,关于ToolBar控件的属性和事件的描述不正确的是().

a)Buttons属性表示ToolBar控件的所有工具栏按钮

b)ButtonSize属性表示ToolBar控件上的工具栏按钮的大小,如高度和宽度

c)DropDownArrows属性表明工具栏按钮(该按钮有一列值需要以下拉方式显示)旁边是否显示下箭头键

d)ButtonClick事件在用户单击工具栏任何地方时都会触发

461.如果将窗体的FormBoderStyle设置为None,则( ).

a)窗体没有边框并不能调整大小;

b)窗体没有边框但能调整大小;

c)窗体有边框但不能调整大小;

d)窗体是透明的;

547.如果要将窗体设置为透明的,则( )

a)要将FormBoderStyle属性设置为None

b)要将Opacity属性设置为小于100%得值;

c)要将locked 属性设置为True

d)要将 Enabled属性设置为True

462.要对注册表进行操作则必须包含( ).

a)System.ComponentModel命名空间;

b)System.Collections命名空间;

c)System.Threading命名空间;

d)Microsoft.Win32命名空间;

463.要创建多文档应用程序,需要将窗体的( )属性设为true.

a)DrawGrid

b)ShowInTaskbar

c)Enabled

d)IsMdiContainer

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

465. 讲一讲你理解的web service,dot net framework中,怎么很好的结合xml?(讲概念就行了)

456. C#, Java c++的特点,有什么相同的地方,不同的地方,C#分别从c++java中吸取了他们那些优点?

467. C#可否对内存进行直接的操作?(这可是个难点哦?要注意!)

468. Visual C++ 6.0编写的代码(unmanaged code),如何在CLR下和其他dot net component结合?

469. 以前作过的一些项目?介绍一下自己的编程经验.(这是蒙混不过去的,基本一问就知道是真是假)

470.写一个实现对一段字符串翻转的方法,附加一些条件,如其中包括“,”..”,对其设计测试用 例 .

471.Singleton如何写设计模式

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

window验证:为每个用户开启window帐号,验证其身份.安全性较高. forms验证:为每个登陆用户写入一个身份验证票据..web使用最广的验证方式..灵活方便. 

473.进程和线程分别怎么理解?

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

474.如何在C#中实现继承? 在类名后加上一个冒号,再加上基类的名称。 C#支持多重继承么?

不支持。可以用接口来实现。 protected修饰的属性/方法在何处可以访问? 在继承或间接继承与这个类的子类中可以访问。 私有成员会被继承么? 会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了。 请描述一下修饰符protected internal。 被protected internal修饰的属性/方法只能在它的在同一个程序集(Assembly)中的子类被访问。 C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数? 两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。

475.根据委托(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 );

476.SQLSERVER服务器中,给定表 table1 中有两个字段 IDLastUpdateDateID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号

答:Select ID

FROM table1

Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

477.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

public void test(int i)

{

lock(this)

{

if (i>10)

{

i--;

test(i);

}

}

}

答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

 

478.分析以下代码

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();

}

}

请问

以上代码可以正确使用连接池吗?

答:回答:如果传入的connectionString是一模一样的话,可以正确使用连接池。不过一模一样的意思是,连字符的空格数,顺序完全一致。

以上代码所使用的异常处理方法,是否所有在test方法内的异常都可以被捕捉并显示出来?

答:只可以捕捉数据库连接中的异常吧. finally中,catch中,如果有别的可能引发异常的操作,也应该用try,catch。所以理论上并非所有异常都会被捕捉。)

479.简要谈一下您对微软.NET 构架下remotingwebservice两项技术的理解以及实际中的应用。

答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

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

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

 

481.给定以下XML文件,完成算法流程图。(10)

<FileSystem>

< DriverC >

<Dir DirName=MSDOS622>

<File FileName =Command.com></File>

</Dir>

<File FileName =MSDOS.SYS></File>

<File FileName =IO.SYS></File>

</DriverC>

</FileSystem>

482.请画出遍历所有文件名(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 );

}

}

简单的说就是从根节点开始遍历找子节点,在从找到的子节点找它的子节点,一层层下去

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

尽可能的使用约束(主键,唯一键,外键,非空字段)实现,效率高,其次使用触发器,无论何种业务访问数据库都可以维护数据库的完整性,一致性,最后下下之策就是自写业务逻辑,此方法效率低,编程复杂.

484.接口与类的不同

接口是可以多继承,而类只能单继承,接口强调了必须实现但没有具体的方法.类是方法功能的实现和集合,而接口是规范类,约束类

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

类是方法功能的实现和集合,接口是规范类,约束类

485.简述C#c++Java的区别

C++速度快,功能强大,类库需要手动选择,编译型跨平台

java运行速度慢,需要虚拟机环境,完全跨平台,类库丰富,功能中庸无法进行底层的高级操作

c#运行速度中等,需要虚拟机环境,即将跨平台,类库丰富,功能比java略多,主要是可以与操作系统底层交互

c#吸收了java的语法结果,结合了c++的结构,进行了一些改进,C#不像java完全解释执行,采用编译的汇编代码进行执行,故而c#的运行效率比java,但不如c++,C#可以跟操作系统底层交

,java则不能, 例如建一个半透明的窗体,c#C++可以轻易完成,java 则显得比登天还难

486.Propertyattribute各自讨论的主题是什么?

property 讨论的是主题所有物的内容,状态等,比如,人能说话思考,这里的是否能说话思考就是一个属性

attribute讨论的是主题的天性,比如人是人类,这里的人类就是一个特性

vc编写的代码,编译成动态链接库,然后交给.net平台调用

487.使用数据库关系的好处

使用数据库关系,这样可以尽可能的规范编码,对比较大型的开发来说也容易,最后是自己编写逻辑:这样会造成数据的一致性,完整性的维护逻辑相当大,原型如何改变,业务逻辑都不必做任何改动,继承性和多态性似的代码的可重用性

488.Adoado.net的区别是什么

ado是以recordset存储,ado.net则是以Dataset表示

ado采用的COM技术,ado.net基于XML格式

489.c#中索引器的实现过程

c#中索引器的实现过程,可以用任何类型进行索引

一个类型要想支持foreache遍历,必须实现IEnumerable,IEnumerator两个接口

490.final 修饰符的使用方法

final 修饰符用于指定类不能扩展或者方法或属性不能重写,他将防止其他类通过重写重要的函数来更改该类的行为.带有final修饰符的方法协议由派生类总的方法来隐藏或重载  

finally块用于请给出try块中分配的任何资源,控制重视传递给finally,try块的存在方式无关

491.ASP.net的身份验证方式:

whindows验证:为每个用户开启window账号,验证其身份,安全性较高

forms验证:为每个登录用户写入一个身份验证票据,web中使用最广的验证方式,灵活方便

passport验证:为成员站点提供单一登录和核心配置

讲一讲你理解的web service,dot net framework中,怎么很好的结合xml?

   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 找到这些服务。

C#, Java c++的特点,有什么相同的地方,不同的地方,C#分别从c++java中吸取了他们那些优点?

  从时间先后上说,他们之间最早出现的是C,然后是c++,最后是c#c++是为了解决软件危机而引入面向对象,c#为了实现平台统一和java争夺市场下的产物。   从性能上说, c的效率最高,c++次之,c#最低。C面向过程的结构化编程语言,他的特点是语言体积小,效率高, 语言灵活,给程序的限制小,而且可以方便的对低层进行操作,所以它非常适合于开发操作系统,驱动程序,嵌入式等对速度要求较高的程序。 C++使向下完全兼容C, C++C相比最显著的变化就是增加了面向对象的成分,也就是增加了类的概念,因为它的增加使软件开发可以比较容易的描述人类的思维,使得软件的开发和维护变得相对简单,直接降低了软件的成本, 但因为C++是面向对象的语言,这本身就制约他的速度,所以C++适合开发那些大型项目,现代的大部分语言都或多或少的借鉴了C++C的某些特性. C#被包括在.net平台下,是一个面向对象面向网络面向组件的语言, 有很多地方与java非常相似,擅长于开发网络方面的程序. 因此,更确切的说,c#是一个需.net平台支持的开发语言,单纯看c#没有意义,需要了解.net平台的开发知识。   从编译角度看,C/C++编译生成目标文件都是可被CPU直接理解的机器码, 而C#编译后生成的是MSIL(Microsoft Intermediate Language)这种语言不能直接被CPU执行,而是依靠.net framework翻译(Just-in-time compiling)opcode后再送到CPU执行的。因此,这也是上面为什么说c#运行效率最低的缘故。(但是这种效率低,是说平均意义上的,不是绝对的)

C#可否对内存进行直接的操作?(这可是个难点哦?要注意!)

 答:C#是可以对内存进行直接操作的,虽然很少用到指针,但是C#是可以使用指针的,           在用的时候需要在前边加unsafe           .net中使用了垃圾回收机制(GC)功能,它替代了程序员,           不过在C#中不可以直接使用finalize方法,而是在析构函数中调用基类的finalize()方法。

Visual C++ 6.0编写的代码(unmanaged code),如何在CLR下和其他dot net component结合?

答:net Com 互操作 在.net中可以通过添加引用的方式将COM 加载在CLR下,将原有的COM中的类型相应变化为.Net 下可识别的类型

ADO.NET相对于ADO等主要有什么改进?

ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,2:不使用com3:不在支持动态游标和服务器端 4:,可以断开connection而保留当前数据集可用 5:强类型转换 6:xml支持

ASP.NETASP相比,主要有哪些进步?

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

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

答:不是。可以用任意类型

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

1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

2、抽象类要被子类继承,接口要被类实现。

3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果

7、抽象类里可以没有抽象方法

8、如果一个类里有抽象方法,那么这个类只能是抽象类

9、抽象方法要被实现,所以不能是静态的,也不能是私有的。

10、接口可继承接口,并可多继承接口,但类只能单根继承。

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

().用户控件和自定义控件概述          用户控件(UserControl):  扩展名为*.ascx,*.aspx在结构上相似,是指页面中   加载的功能块,只是用户控件不能单独作为页面运行,必须嵌入到*.aspx页面或其它用   户控件中使用.          自定义控件,跟HtmlControlWebControl相似,编译后可以添加引用到工具栏里   面,直接用鼠标拖动使用.  

大概描述一下ASPNET服务器控件的生命周期

(1)初始化:在此阶段中,主要完成两项工作:一、初始化在传入Web请求生命周期内所需的设置;二、跟踪视图状态。首先,页面框架通过默认方式引发Init事件,并调用OnInit()方法,控件开发人员可以重写该方法为控件提供初始化逻辑。此后,页面框架将调用TrackViewState方法来跟踪视图状态。需要注意的是:多数情况下,Control基类提供的TrackViewState方法实现已经足够了。只有在控件定义了复杂属性时,开发人员才可能需要重写TrackViewState方法。 (2)加载视图状态:此阶段的主要任务是检查ASP.NET服务器控件是否存在以及是否需要将其状态恢复到它在处理之前的请求结束的状态。因此该过程发生在页面回传过程中,而不是初始化请求过程。在此阶段,页面框架将自动恢复ViewState字典。如果服务器控件不维持其状态,或者它有能力通过默认方式保存其所有状态而使用ViewState字典,那么开发人员则不必实现任何逻辑。针对那些无法在 ViewState字典中存储的数据类型或者需要自定义状态管理的情况,开发人员可以通过重写LoadViewState方法来自定义状态的恢复和管理。 (3)处理回发数据:若要使控件能够检查客户端发回的窗体数据,那么必须实现System.Web.UI.IPostBackDataHandler接口的 LoadPostData()方法。因此只有处理回发数据的控件参与此阶段。 (4)加载:至此阶段开始,控件树中的ASP.NET服务器控件已创建并初始化、状态已还原并且窗体控件反映了客户端的数据。此时,开发人员可以通过重写OnLoad()方法来实现每个请求共同的逻辑。 (5)发送回发更改通知:在此阶段,ASP.NET服务器控件通过引发事件作为一种信号,表明由于回发而发生的控件状态变化(因此该阶段仅用于回发过程)。为了建立这种信号,开发人员必须再次使用System.Web.UI.IPostBackDataHandler接口,并实现另一方法- RaisePostBackChangedEvent()。其判断过程为:如果控件状态因回发而更改,则LoadPostData()返回true;否则返回false。页面框架跟踪所有返回true的控件并在这些控件上调用RaisePostDataChangedEvent() (6)处理回发事件:该阶段处理引起回发的客户端事件。为了便于将客户端事件映射到服务器端事件上进行处理,开发人员在此阶段可以通过实现 System.Web.UI.IPostBackEventHandler接口的RaisePostBackEvent()方法来实现该逻辑。由此途径,服务器控件将成功捕获回发的客户端事件进行服务器端的相应处理。 (7)预呈现:该阶段完成在生成控件之前所需要的任何工作。通常情况下是通过重写OnPreRender()方法完成该工作。需要注意的是:在该阶段,可以保存在预呈现阶段对控件状态所做的更改,而在呈现阶段进行的更改则会丢失。 (8)保存状态:如果ASP.NET服务器控件不维持状态,或者它有能力通过默认方式保存其所有状态而使用ViewState字典,那么开发人员不必在该阶段实现任何逻辑。因为这个保存状态的过程是自动的。如果ASP.NET服务器控件需要自定义状态保存,或者控件无法在ViewState字典中存储特殊的数据类型,则需要通过重写SaveViewState()方法来实现状态保存。 (9)呈现:表示向HTTP输出流中写入标记文本的过程。开发人员通过重写Render()方法使其在输出流上自定义标记文本。 (10)处置:在此阶段中,通过重写Dispose ()方法完成释放对昂贵资源的引用,如数据库链接等。 (11)卸载:完成的工作与"处置"阶段相同,但是,开发人员通常在Dispose()方法中执行清除,而不处理Unload事件。

面向对象的概念,主要特点

   几个重要概念:

   1,对象。对象不仅能表示具体的事物,还能表示抽象的规则,计划或事件;

   2,对象的状态和行为。对象使用数据值来描述状态,使用改变对象状态的方法来描述行为,并将这两种属性有机结合,统一封装在一起;

   3,类。对象的抽象是类,类的属性石对象状态的抽象,类的方法是对象行为的抽象;

   4,类的结构。is a 关系: 表示子类与父类的关系。has a 关系:表示组合关系。

   5,消息和方法。消息是对象之间进行通信的结构。发送一条消息至少要包括接收消息的对象名,发送给该对象的消息名(即对象名,方法名)。

  三大特点:

   1,封装性。将相关的信息,操作与处理包含在一个对象中,也就是隐藏信息,是面向对象技术的核心,也是面向对象程序设计的基础。

   2,继承。是指子类自动共享父类数据结构和方法的机制,这是类之间的一种特殊的关系。继承性是面向对象技术的最重要的特点,在类层次中,子类只继承一个父类的数据结构和方法,称为"单继承",而子类继承了多个父类的数据结构和方法,称为"多继承"。Java语言中只允许单继承,并且所有类都有且仅有一个最顶层类,及Object类。

   3,多态性。是指相同的操作或方法作用于多种类型的对象上并获得不同的结果。多态性允许每个对象以适合自身的方式去响应共同的消息,采用多态性可以增强计算机程序的灵活性和可重用性。

类划分的依据。类粒度问题

谈谈final, finally, finalize的区别。

1) 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在new一个对象时初始化(即只能在声明变量或构造器或代码块内初始化),而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能覆盖(重写)

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

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

Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

Static Nested Class Inner Class的不同,说得越多越好(面试题有的很笼统)

Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1 注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

&&&的区别

&是位运算符。&&是布尔逻辑运算符。

HashMapHashtable的区别。

都属于Map接口的类,实现了将惟一键映射到特定的值上。 HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。 50Collection Collections的区别。 Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。 Collection是个java.util下的接口,它是各种集合结构的父接口。 51,什么时候用assert断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用于调试目的: assert(a > 0); // throws an Assertionerror if a <= 0 断言可以有两种形式: assert Expression1 ; assert Expression1 : Expression2 ; Expression1 应该总是产生一个布尔值。 Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。 断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记: javac -source 1.4 Test.java 要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。 要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。 要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。 可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。 52GC是什么? 为什么要有GC? (基础)GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc()

53String s = new String("xyz");创建了几个String Object? 两个对象,一个是xyx,一个是指向“xyx”的引用对象s54Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)返回(long12Math.round(-11.5)返回(long-11; 55short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? short s1 = 1; s1 = s1 + 1;有错,s1short型,s1+1int,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) short s1 = 1; s1 += 1正确。 56sleep() wait() 有什么区别? 搞线程的最爱 sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。 wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。 57Java有没有goto? Gotojava中的保留字,现在没有在java中使用。 58,数组有没有length()这个方法? String有没有length()这个方法? 数组没有length()这个方法,有length的属性。 String有有length()这个方法。 59OverloadOverride的区别。Overloaded的方法是否可以改变返回值的类型? 方法的重写Overriding和重载OverloadingJava多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)Overloaded的方法是可以改变返回值的类型。  60Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。 equals()==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

61,给我一个你最常见到的runtime exceptionArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException  62errorexception有什么区别? error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。   63List, Set, Map是否继承自Collection接口? ListSet Map不是  64abstract classinterface有什么区别? 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。  65abstractmethod是否可同时是static,是否可同时是native,是否可同时是synchronized? 都不能

66,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。  67,启动一个线程是用run()还是start()? 启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。    68,构造器Constructor是否可被override? 构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading 69,是否可以继承String? String类是final类故不可以继承。  70,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 不能,一个对象的一个synchronized方法只能由一个线程访问。  71try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 会执行,在return前执行。   72,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 不对,有相同的hash code 73,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

74swtich是否能作用在byte上,是否能作用在long上,是否能作用在String? switchexpr1)中,expr1是一个整数表达式。因此传递给 switch case 语句的参数应该是 intshortchar 或者 bytelong,string 都不能作用于swtich

数据库方面:

 

75.事务是什么?

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQLC++Java)书写的用户程序的执行所引起,并用形如begin transactionend transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

76.游标的作用?如何知道游标已经到了最后?

游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。

77.触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。

简单而言,事前触发主要是验证一些条件或进行一些准备工作,在表保存之前就触发,而事后触发则是进行收尾工作,保证事务的完整性,在表经过修改以后才触发。行级触发器是对DML语句影响的每个行执行一次,如UPDATE语句影响多行,就会对每行都激活一次触发器。而语句级触发器是对每个DML语句执行一次,如INSERT语句在表中即使插入了100多行,表上的INSERT语句级触发器也只会执行一次。

78.C#实现以下功能

a 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

int[] allNum=new int[100];  //存放这100个数

int len=0;   //已经产生了多少个数

System.Random rd=new Random();

while(len<100)

{

 int tempNum=rd.Next(100)+1;

 

 while(true)

 {

  int j=0;

  for(;j<len;j++)

  {

   if(allNum[j]==tempNum)

   {

    break;

    }

  }

if(j==len)

{

break;

}

else

{

tempNum=rd.Next(100)+1;

}

}

allNum[len++]=tempNum;

}

b 对上面生成的数组排序,需要支持升序、降序两种顺序

for(int i=0;i<99;i++)

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

 {

   if(allNum[i]<allNum[j])  //升序是为大于号,降序为小于号

   {

    int t=allNum[i];

    allNum[i]=allNum[j];

    allNum[j]=t;

   }

}

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

QueryString 传递一个或多个安全性要求不高或是结构简单的数值。但是对于传递数组或对象的话,就不能用这个方法了

session(viewstate) 简单,但易丢失 作用于用户个人,过量的存储会导致服务器内存资源的耗尽。

application 对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用LockUnLock

cookie 简单,但可能不支持,可能被伪造 Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用

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

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

Server.Transfer 把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流

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

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

Page-Error事件

Server.GetLastError();

Server.ClearErroe();

设计时错误  运行时错误  异常

错误处理

   良好的编程习惯

   代码测试

   使用错误页(<customErrors  defaultRedirect="error.aspx">

81..netB/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

一般都是三层,表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL),这些东西不用深究,别为了设计而设计就行。

分三层是为了使项目架构体系更加清晰,而且项目参与人员的分工也可以更加明确,也有利于项目后期维护,这些都是分层的优点。

至于关系么,表现层负责与用户交互(数据交互),业务逻辑层就是表现层与数据访问层的中间人了,指派数据访问层进行表现层请求的逻辑性的业务处理,而数据访问层就负责数据的直接操作了(一般只进行直接的数据操作,最好别在这层处理逻辑方面的处理,要不然与业务层交错后后期的维护很头疼的)。

三层其实说明白了挺简单的,不过最先发起3层思想的人倒是挺牛的,这东西你不用考虑太多,考虑太多反而会陷进去误区了,具体的设计还是要结合相应的需求来,总之没有最牛的设计,只有最合适的设计。

82.请列出c#中几种循环的方法,并指出他们的不同

for的功能最强大;所有的while的可以用他代替;

再说说do ....while吧;他就是一开始就执行一次;然而如果说一开始whiledo...while都执行一次;也就是第一次条件都为真的话;那他们没啥区别:一样;最后一个goto语句;这个很少用,因为他的可读性太差了

1for (初值;条件;变化值)

然后是循环部分;

2if ()这里的括号中只写条件;

3while ()些条件,可用break;语句中断循环,也可用continue中断本次循环;

4do while ();是先循环第一次在开始判断,符合条件再回到do语句.

不难看出for语句一次性把初值、条件、变化规律都写在了一起,简单易懂,其他的要在其他地方定义和说明,if语句后面可跟else,中文里是:如果……其他的……这样就可以理解了,他可以同时定义正面和反面;while是最基本的模式——选择、循环模式.

83.请指出.net中所有类型的基类

积累的概念是相对的,A继承自B,那么B就是基类。如果照这个定义说,.NET里的基类多到很难统计。如果说你的意思是所有类的最终基类,那么答案是Object,这个也决定了.NET平台的单根性质

84.请指出GAC的含义

85.SQL SREVER中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值

这个自增量是数据库对象的自增量,当然要从数据库得,然后取到vb程序里,而数据库里表示自增量当前值的@@identity这个全局变量:

86.您在什么情况下会用到虚方法?它与接口有什么不同?

子类重新定义父类的某一个方法时,必须把父类的方法定义为virtual

在定义接口中不能有方法体,虚方法可以。实现时,子类可以不重新定义虚方法,但如果一个类继承接口,那必须实现这个接口

87.Override与重载有什么区别?

override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要

Override 是进行基类中函数的重写。为了适应需要。

88..net的错误处理机制是什么

.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。??

89.C#中接口和类的异同

接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!

而类是负责功能的具体实现!

 

在类中也有抽象类的定义,抽象类与接口的区别在于:

抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。

但接口是一个行为的规范,里面的所有东西都是抽象的!

一个类只可以继承一个基类也就是父类,但可以实现多个接口

90.DataReaderDataSet的异同

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

91.DataReaderDataset有什么区别?

.DataReader

不能离线处理,且是只读的向前的,不过速度明显会很快DataSet可以存储数据库各种对象的,比如表触发器等,而DataReader只能存储游标记录DataSet可以更新回原来的数据库,

DataReader不行;DataSet可以FORWORDPREVIUS

,而DataReader只能FWDataReader类似一个只能向前的游标记录集DataSet叫数据集!是ADO.net相对与ADO实现断开式数据库连接性的主要体现!DateReader是一个客户端的只向前游标,两者的应用领域不同!读取数据后!如果要进行比较频繁的改动,可以使用DataSet

,并且DataSet也支持串行化,可与xslt结合!进行web开发!DataReader则偏向于快速读取数据!针对数据量比较大的数据可能应用的更加频繁点!<[]ADO.NET提供以下两个对象,用于检索关系数据并将其存储在内存中:DataSetDataReader

DataSet提供一个内存中数据的关系表示形式,一整套包括一些表在内的数据(这些表包含数据、对数据进行排序并约束数据),以及表之间的关系。

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

当使用DataSet时,经常会利用

DataAdapter(也可能是CommandBuilder

)与数据源进行交互。当使用DataSet时,也可以利用DataViewDataSet中的数据应用排序和筛选。也可以从DataSet继承,创建强类型DataSet

,用于将表、行和列作为强类型对象属性公开。

92.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用SessionCookieApplication,您有几种方法进行处理?

有三种方法

1.QueryString

:  default.aspx?id=1

2.FormsAuthentication

:配置文件添加结点,利用FormsAuthentication 读取

3.this.Server.Transfer

服务器重定向

93.值类型与引用类型有什么区别?

 //值类型和引用类型的区别,就在于当函数参数传递的时候.

//值类型是把自己的值复制一份传递给别的函数操作.无论复制的值怎么被改变.其自身的值是不会改变的

//而引用类型是把自己的内存地址传递给别的函数操作.操作的就是引用类型值的本身.所以值被函数改变了.

//这就是传值和传址的区别

94.怎样理解静态变量?

静态变量(static)是相对自动变量(auto)等而言的,一旦声明为静态变量,在编译时刻开始永远存在,不受作用域范围约束,但是如果是局部静态变量,则此静态变量只能在局部作用域内使用,超出范围不能使用,但是它确实还占用内存,还存在.自动变量就是一般的变量,C语言中auto关键字可以省略.

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

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

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

软件开发一般分为五个阶段:

1.问题的定义及规划

此阶段是软件开发与需求放共同讨论,主要确定软件的开发目标及其可行性。

2.需求分析在确定软件开发可行性的情况下,对软件需要实现的各个功能进行详细需求分析。需求分析阶段是一个很重要的阶段,这一阶段做的好,将为整个软件项目的开发打下良好的基础。“唯一不变的是变化本身”,同样软件需求也是在软件爱你开发过程中不断变化和深入的,因此,我们必须定制需求变更计划来应付这种变化,以保护整个项目的正常进行。

3.软件设计此阶段中偶要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。软件设计一般分为总体设计和详细设计。还的软件设计将为软件程序编写打下良好的基础。

4.程序编码此阶段是将软件设计的结果转化为计算机可运行的程序代码。在程序编码中必定要制定统一、符合标准的编写规范。以保证程序的可读性、易维护性。提高程序的运行效率。

5.软件测试在软件设计完成之后要进行严密的测试,一发现软件在整个软件设计过程中存在的问题并加以纠正。整个测试阶段分为单元测试、组装测试、系统测试三个阶段进行。测试方法主要有白盒测试和黑盒测试。

以上就是软件开发过程的五个阶段,但是有的时候在软件爱你开发过程中并不是必须按照这个过程进行的。

97.请列举一些您用到过的设计模式以及在什么情况下使用该模式?

1.原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

使用场景:一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用

 

2.组合模式(Composite Pattern)也叫合成模式:将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

使用场景:组合模式在项目中到处都有,比如现在的页面结构一般都是上下结构,上面放系统的Logo,下边分为两部分:左边是导航菜单,右边是展示区,左边的导航菜单一般都是树形的结构,比较清晰,有非常多的JavaScript源码实现了类似的树形菜单,

98.您对WebService的体会?

WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。 WebService实现不同语言间的调用,是依托于一个标准,webservice是需要遵守WSDLweb服务定义语言)/SOAP(简单请求协议)规范的。 WebService=WSDL+SOAP+UDDIwebservice的注册) Soap是由Soappart0个或多个附件组成,一般只有part,在part中有EnvelopeBodyWeb Service是通过提供标准的协议和接口,可以让不同的程序集成的一种SOA架构。 Web Service的优点 (1) 可以让异构的程序相互访问(跨平台)(2) 松耦合 (3) 基于标准协议(通用语言,允许其他程序访问) Web Service的基本原理 (1) Service Provider采用WSDL描述服务 (2) Service Provider 采用UDDI将服务的描述文件发布到UDDI服务器(Register server(3) Service RequestorUDDI服务器上查询并 获取WSDL文件 (4) Service requestor将请求绑定到SOAP,并访问相应的服务。

99.通过超链接怎样传递中文参数?

URL编码,通过QueryString传递,用EnCode编码 用DeCode解码。

下面代码是在服务端构建的url,所以可以使用Server对象:

string urlFmt="...?a={0}";

url = string.Format(urlFmt, Server.UrlEncoding("测试"))

100.请编程遍历页面上所有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 ;

}

}

101.请编程实现一个冒泡排序算法?

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 ;

        }

        }

        }

102.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性,并请举列来加以说明和分析.

为应用程序创建一个 SessionCache 服务实例。 使用 cf create-service SessionCache free <service instance name> 创建服务实例,其中 free 是服务计划名称,<service instance name> 是服务实例的惟一名称。我们使用scsSampleSessionServiceDWDemo001 作为服务实例名称,以与服务器 xml 文件中的配置相匹配。

  部署应用程序且服务实例可用后,使用 cf bind-service <app name in Step c> <service instance name in Step d> 将它们绑定在一起。

  绑定完成后,它会要求您再次推送该应用程序。再次执行步骤 C 中的命令。有关更多信息,请参阅 安装 cf 工具。

  测试示例应用程序。登录到 Bluemix。您应在仪表板上看到已部署的示例应用程序。单击应用程序图标中间的链接访问该应用程序,并检查日志中的错误。尝试使用 Retrieve Session Data 按钮获取会话数据。

  检查服务状态和空间使用情况。获取会话数据后,返回到 Bluemix 仪表板。在导航面板中,单击 Apps 并选择部署的示例应用程序。在 Services 部分中,单击服务中间位置的链接调出 Service Status 页面。查看 Space UsedThroughput 等信息。

  可选:删除示例应用程序和服务。在 Bluemix 中,单击屏幕顶部的 Dashboard。单击应用程序框右上角的设置图标,选择 Stop App。单击应用程序框右上角的设置图标,选择 Delete App。在窗口中,在 SERVICES ROUTES 选项卡中勾选您的应用程序和服务的方框。单击OK 删除示例应用程序和服务。

.简答题

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

 答:1). using指令。using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间。

  2).using别名。using + 别名 = 包括详细命名空间信息的具体的类型。当一个cs引用多个命名空间时,而有相同的类型时可以这样做。比如namespace1 和namespace2下面都有myClass类时,可以using class1 = namespace1.myClass;using class2 = namespace2.myClass。

  3).using语句,定义一个范围,在范围结束时处理对象。

  (1)new 运算符

  用于创建对象和调用构造函数。

  (2)new 修饰符

  用于向基类成员隐藏继承成员。

  (3)new 约束

  用于在泛型声明中约束可能用作类型参数的参数的类型。

104.谈谈类和结构的区别?

类是引用类型、结构是值类型

一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。

using System.Text;

  StringBuilder sb = new StringBuilder(0, 10000);

  string strABC = “a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z”;

  string[] ABC = strABC.Split(‘,’);

  int len = ABC.Length;

  Random rd = new Random();

  for (int i = 0; i < 10000; i++)

  {

  sb.Append(ABC[rd.Next(len)]);

  }

105.对于这样的一个枚举类型:

enum Color:byte{

Red,

Green,

Blue,

Orange

}

string[] ss=Enum.GetNames(typeof(Color));

byte[] bb=Enum.GetValues(typeof(Color));

106试写一段程序显示出枚举类型中定义的所有符号名称以及它们对应的数值。

答:string[] ss=Enum.GetNames(typeof(Color));

  byte[] bb=Enum.GetValues(typeof(Color));

 

107.您了解设计模式么?请列出您所知道的设计模式的名称。 //

答:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可 靠性。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。

108.请在SQL Server中设计表来保存一个树状结构的组织结构图(假设结构图中只有名称这一项内容需要保存),如果我想查询某一职位下的所有职位,用一个存储过程来实现,你有什么思路?

答:parent表(字段:pid,pname),child表(字段:cid,cname,pid)

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

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

110.下面这段代码输出什么?为什么?

int i=5;

int j=5;

if (Object.ReferenceEquals(i,j))

Console.WriteLine("Equal" ;

else

Console.WriteLine("Not Equal" ;

//不相等,因为比较的是对象

 

111.什么是反射?

动态获取程序集信息

112.Singleton如何写设计模式

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

113.C#中的垃圾回收机制是怎样的?

三个generation,当每个generation内存满了的时候检查引用,无引用就回收内存

114.什么是Application Pool

Web应用,类似Thread Pool,提高并发性能

 

链表和数组的区别,各有什么优缺点.

1)数组在内存中是逐个存放的,也就是说倘若数组的第一个元素在地址A,则数组第二个元素就在地址A+1。

而链表则不是,链表每个节点没有相对固定的位置关系。某个节点在地址A其后的节点不一定是A+1,而在内存的其他空闲区域,呈现一种随机的状态。

2)数组一旦显式的被申明后,其大小就固定了,不能动态进行扩充。而链表则可以,可以动态生成节点并且添加到已有的链表后面。

3)链表灵活,但是空间和时间额外耗费较大;数组大小固定,元素位置固定,但是操作不灵活,且容易浪费空间,但是时间耗费较小,尤其是元素变化不大的时候效率很高。双向链表比单向的更灵活,但是空间耗费也更大

。。。。。

链表的特性是在中间任意位置添加删除元素的都非常的快,不需要移动其它的元素。

链表顾名思义,要把各个元素链接起来才算撒。   

  通常链表每一个元素都要保存一个指向下一个元素的指针(单链表)。   

  双链表的化每个元素即要保存到下一个元素的指针,还要保存一个上一个元素的指针。   

  循环链表则把最后一个元素中保存下一个元素指针指向第一个元素。   

数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,

这个编号叫做下标,我们可以通过下标来区别这些元素。数组元素的个数有时也称之为数组的长度。

 

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

服务器断可以部署到IIS上并配置好配置文件

116.什么是友元函数?

friendly声明,可以访问protect级别方法

117.用标准C如何实现多态?

C++中,实现多态有以下方法:虚函数,抽象类,重载,覆盖,模版。   多态(Polymorphism)按字面的意思就是“多种状态”。在面向 对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的。

118.什么是虚函数?

可以被重写

119.什么是抽象函数?

必须被重写

120.什么是内存泄漏,怎样最简单的方法判断被存泄漏 ?

C++,C中忘了释放内存,内存不会再次分配

数据库知识题

121.使用什么工具来调用存储过程

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。

122.SQL Server的两种索引是何形式?索引的作用?索引的优缺点?

一般认为有两种 聚集,非聚集 聚集:相当与电话薄的查询。数据的位置和和其物理位置相同 非:相当与目录。可与物理位置不同。 索引是用来加快查询的,在查询数据的时候可以不用找数据而先找索引,就像你翻书,明显找目录会快很多。

 

123..触发器的作用

就相当于是一个事件的触发装置, 当满足了触发事件的条件后进行相应的处理操作, 例如可以设置当表中增加或删除了记录后,输出来消息进行通知, 这样就可以在这个表上设置一个触发器,触发条件为增加或删除了记录, 发的事件是 进行通知消息的输出,

 

124.什么是Web Service

WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。 WebService实现不同语言间的调用,是依托于一个标准,webservice是需要遵守WSDL(web服务定义语言)/SOAP(简单请求协议)规范的。 WebService=WSDL+SOAP+UDDI(webservice的注册) Soap是由Soap的part和0个或多个附件组成,一般只有part,在part中有Envelope和Body。 Web Service是通过提供标准的协议和接口,可以让不同的程序集成的一种SOA架构。 Web Service的优点 (1) 可以让异构的程序相互访问(跨平台)(2) 松耦合 (3) 基于标准协议(通用语言,允许其他程序访问) Web Service的基本原理 (1) Service Provider采用WSDL描述服务 (2) Service Provider 采用UDDI将服务的描述文件发布到UDDI服务器(Register server) (3) Service Requestor在UDDI服务器上查询并 获取WSDL文件 (4) Service requestor将请求绑定到SOAP,并访问相应的服务。

125.什么是XML

xml是一种语言。这种语言编写的文件一般也是以xml结尾。你可以用记事本打开查看源码,或者用浏览器打开查看。它的内容都是由标签组成的,非常有规律。因为这种规律,才能快速的存取。一般用来存储配置信息,也有当数据库来用的。

 

126..Socket怎么实现?

java编程对于Socket之间的通信过程如下:

服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流 读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的 输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子:

public class Server {      public static void main(String args[]) throws IOException {       //为了简单起见,所有的异常信息都往外抛       int port = 8899;       //定义一个ServerSocket监听在端口8899上       ServerSocket server = new ServerSocket(port);       //server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的       Socket socket = server.accept();       //跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。       Reader reader = new InputStreamReader(socket.getInputStream());       char chars[] = new char[64];       int len;       StringBuilder sb = new StringBuilder();       while ((len=reader.read(chars)) != -1) {          sb.append(new String(chars, 0, len));       }       System.out.println("from client: " + sb);       reader.close();       socket.close();       server.close();    }     }

客户端代码 Java代码  public class Client {          public static void main(String args[]) throws Exception {         //为了简单起见,所有的异常都直接往外抛         String host = "127.0.0.1";  //要连接的服务端IP地址         int port = 8899;   //要连接的服务端对应的监听端口         //与服务端建立连接         Socket client = new Socket(host, port);         //建立连接后就可以往服务端写数据了         Writer writer = new OutputStreamWriter(client.getOutputStream());         writer.write("Hello Server.");         writer.flush();//写完后要记得flush         writer.close();         client.close();      }         }

请大家指出我的错误

 

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

一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质

 

128. 讲一讲你理解的web service,dot net framework中,怎么很好的结合xml?(讲概念就行了)

 

129. C#, Java c++的特点,有什么相同的地方,不同的地方,C#分别从c++java中吸取了他们那些优点?

相同点:都是C系的,都是面向对象

不同点:Java,C#都是建立在虚拟机机制上,而C++不是

 

130. C#可否对内存进行直接的操作?(这可是个难点哦?要注意!)

可以

 

131. Visual C++ 6.0编写的代码(unmanaged code),如何在CLR下和其他dot net component结合?

编译Dll[DLLImport]

 

132. 以前作过的一些项目?介绍一下自己的编程经验。(这是蒙混不过去的,基本一问就知道是真是假)

133. 你对公司有什么期望?你的薪水期望值?为什么学计算机?以前的工作经验(这非常重要)?

 

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

触发器,性能好,事务性

 

135ADONET相对于ADO等主要有什么改进?

新增dataset等,不需要随时保持连接,性能提高

 

136ASPNETASP相比,主要有哪些进步?

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

 

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

委托是一种安全的函数指针,事件是一种消息机制

 

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

不会

 

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

实现一个接口

 

140:写一个HTML页面,实现以下功能,左键点击页面时显示“您好”,右键点击时显示“禁止右键”。并在2分钟后自动关闭页面。

JS代码

 

141:你对XMLHTTPWEBSERVICE 了解吗?简单描述其特点、作用

xmlhttp可以主动获取远端web代码,类似HttpWebRequest

 

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

接口用于规范,抽象类用于共性。

 

143UML

统一建模语言

 

145:面向对象的概念,主要特点

封装,基层,多态

 

 

 

数据库方面:

 

146.存储过程和函数的区别

存储过程是编译好的存储在数据库的操作,函数不用说了。。。

 

147.事务是什么?

具有原子性特点

 

148.游标的作用?如何知道游标已经到了最后?

指示当前记录的位置,检查NULL

 

149.触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。

一个是操作前,一个是操作后

1.C#实现以下功能 

a 产生一个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];

 

b 对上面生成的数组排序,需要支持升序、降序两种顺序

ArrayList本身就能排序

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

session(viewstate) 简单,但易丢失

application 全局

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

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

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

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

3.请说明.net中的错误处理机制,并举例

try catch final

4.请说出强名的含义

具有自己的key,可以在GAC为公用

5.请列出c#中几种循环的方法,并指出他们的不同 

for wile foreach

 

7.请指出GAC的含义

全局程序集缓存

8.SQL SREVER中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值

select @@id... 什么的,忘了

您在什么情况下会用到虚方法?它与接口有什么不同?

前面已说

11.怎样理解静态变量?

所有实例公用一个的变量

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

get post

 

13.DataReaderDataset有什么区别?

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

 

14.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用SessionCookieApplication,您有几种方法进行处理?

input type=""

url

数据库

15..netB/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

三层,表现,逻辑,数据, 安全性,维护性

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

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

17.请列举一些您用到过的设计模式以及在什么情况下使用该模式?

著名的singleton

18.您对编程的兴趣如何?工作中遇到不懂的问题是怎样去解决的?您一般怎样去提高自己的编程水平? 

19.您离职的原因是什么?

20.通过超链接怎样传递中文参数?

URLEncode URLDecode

21.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty

foreach

22.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性,并请举列来加以说明和分析.

同一个名称控件直接,或者反射

23.如果需记录类的实例个数,该如何实现,请写一个简单的类于以证明.

const static int classNum=0;

classNum++;

24.A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程. 

构造先父后子,析够反之

25.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.

string inputStr=" xx xx ";

inputStr=Regex.Replace(inputStr.Trim()," *"," " ;

26c#usingnew这两个关键字有什么意义,请写出你所知道的意义?

using 指令 和语句 new 创建实例 new 隐藏基类中方法

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

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

28.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。

和前面那个差不多,一样

29.对于这样的一个枚举类型: 

enum Color:byte

{

Red,

Green,

Blue,

Orange

}

string[] ss=Enum.GetNames(typeof(Color));

byte[] bb=Enum.GetValues(typeof(Color));

试写一段程序显示出枚举类型中定义的所有符号名称以及它们对应的数值。

foreach

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

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

31.下面这段代码输出什么?为什么?

int i=5;

int j=5;

if (Object.ReferenceEquals(i,j))

Console.WriteLine("Equal" ;

else

Console.WriteLine("Not Equal" ;

//不相等,因为比较的是对象

32.写一个实现对一段字符串翻转的方法,附加一些条件,如其中包括“,”、“.”,对其设计测试用例 。 

inputStr=inputStr.ToCharArray().Reverse().ToString();

34.对一支纸杯设计测试用例(可以是广义的杯,不一定是某一支特定功能的杯)

太宽了。。。

36.Singleton如何写设计模式

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

37.C#中的垃圾回收机制是怎样的?

三个generation,当每个generation内存满了的时候检查引用,无引用就回收内存

38.什么是Application Pool

Web应用,类似Thread Pool,提高并发性能

39.链表和数组的区别,各有什么优缺点.

一个可以动态增长,一个固定(VB中可以Redim),性能数组教好

41.什么是友元函数?

friendly声明,可以访问protect级别方法

42.什么是虚函数?

可以被重写

43.什么是抽象函数?

必须被重写

44.什么是内存泄漏,怎样最简单的方法判断被存泄漏 ?

C++,C中忘了释放内存,内存不会再次分配

45.使用什么工具来调用存储过程

任何一种语言

46.SQL Server的两种索引是何形式?索引的作用?索引的优缺点? 

cluster和非cluster,加速查找,占用额外控件,维护索引耗费时间

47.触发器的作用

保证数据库操作变更能接到通知

48.什么是Web Service

使应用程序在整个网上可以被调用

50.什么是XML

可扩展标记语言,可以做配置文件,可以传输数据,可以存储数据

51.Socket怎么实现?

这个不知道怎么说了。。。

52. 什么是C#

C#(发音”C sharp”)是一种简单、有别于传统的、面向对象、类型安全的编程语言。CC++程序员很快就会熟悉它。C#中结合了高生产率的快速应用开发(RAD)语言。

53. C#的有哪些注释类型?

C#中有三种注释类型。

单行(//)

多行(/* */)

Page/XML 注释(///)

54. C#.NET中使用的命名空间有哪些?

命名空间是类型的逻辑分组。

using System;

using System.Collections.Generic;

using System.Windows.Forms;

55. C#有哪些特点?

C#有以下特点:

简单

类型安全

灵活

面向对象

兼容

持久化

互操作性

有别于传统

56. 继承有哪些不同的类别?

在面向对象编程中继承的四种类型:

单继承:包括一个基类和一个派生类。

多层继承(Hierarchical inheritance) :包括一个基类和继承自同一个基类的派生类。

多级继承(Multilevel inheritance):包括从一个派生类派生出来的类。

多重继承(Multiple inheritance):包括多个基类和一个派生类。

57. 面向对象编程的基本概念是什么?

有必要理解一些在面向对象编程中广泛使用的概念。它们包括:

对象

数据抽象和封装

继承

多态性

动态绑定

信息传递。

60. Define scope?定义作用域?

作用域指的是代码中一个变量可以被访问的区域。

61. publicstaticvoid之间的区别是什么?

public:关键字public是访问修饰符,用来告诉C#编译器主(Main)方法可以被任何人调用。

static:关键字static表明主(Main)方法是一个全局方法,不需要穿件类实例即可访问。编译器储存该方法的地址作为切入点,并利用这个信息在任何对象创建之前开始执行它。

void:关键字void是一个类型修饰符表明主(Main)方法不返回任何值。

62. C#中的修饰符有哪些?

Abstract

Sealed

Virtual

Const

Event

Extern

Override

Readonly

Static

New

63. C#中访问修饰符的种类有哪些?

C#中的访问修饰符是:

public

protect

private

internal

internal protect

65. 对象是什么?

对象是类的实例。对象的创建使用new操作。一个类在内存中创建一个对象,将包含特定对象的值和行为(或者方法)的信息。

66. C#中有哪些类型的数组?

一维数组(Single-Dimensional)

多维数组(Multidimensional)

交错数组(Jagged arrays)

67. 对象和实例之间的区别是什么?

用户定义的类型的实例称为一个对象。我们可以从一个类实例化很多对象。

对象是类的实例。

68. Define destructors?定义析构函数?

当类对象超出作用域或者被明确删除的时候,析构函数被调用。析构函数,顾名思义是用来销毁由构造函数创建的对象的。正如构造函数,析构函数是一个类成员方法,方法名和类名相同,只是由波浪号开头。

69. 枚举数据类型怎么用?

枚举类型是另一种用户定义类型,它提供了一种连接名字为数字的方式,从而提高了代码的可理解性。enum关键字自动地枚举一组词,赋予它们的值为0,1,2并以此类推。

70. 定义构造函数?

构造函数是和它的类同名的成员方法。每当创建其关联的类的对象时构造函数都会被调用。它之所以被称为构造函数是因为它构造了类的数据成员的值。

71. 什么是封装?

包装数据和功能成为一个单元(称为类)就被称为封装。封装包含并且隐藏对象信息,例如内部数据结构和代码。

72. C#支持多重继承吗?

不支持,它不可能。支持多级继承。

73. 什么是ENUM

Enum用于定义常量。

74. 数据集是什么?

数据集(DataSet)是从任何数据源载入数据的内存表示。

75. privatepublic关键字的区别是什么?

Private:关键字private是默认访问级别,并且在所有其他访问级别中是最严格的。它给予一个类型或者类型成员最小的权限。私有成员仅仅在声明其的类体中可以被访问。

Public:关键字public是所有访问级别中最自由地,没有任何访问限制。公共成员的访问不仅可以来自外部,也可以来自内部,并且可以自由访问定义在类体内或者体外的任何成员。

76. 定义多态性?

多态性意味着一个名字,多种形式。它使我们在一个程序中可以定义一个以上相同名字的方法。它让我们重载操作以便这样的操作可以对不同的实例表现不同的行为。

77. 什么是交错数组?

交错数组是元素为数组的数组。

交错数组元素的维度和大小可以不同。

交错数组有时称为“数组的数组”。

78. 什么是抽象基类?

抽象类是被设计为专门用于作为基类的类。抽象类至少还有一个纯虚方法。

81. refout参数之间的区别是什么?

传递给ref参数的参数必须先初始化。与此相比,对out参数来说,在参数传递给out参数之前不需要显示初始化。

82. C#using语句怎么用?

using语句通常是获取资源,执行语句,然后释放该资源。

83. 什么是序列化?

序列化(Serialization)是将对象转换为字节流的过程。

反序列化(De-serialization)是从字节流创建对象这样相反的过程。

序列化/反序列化常用于传递对象。

84. 结构和类之间有什么区别?

结构是值类型,类是引用类型。

结构不能有构造函数和析构函数。

类可以同时有构造函数和析构函数。

结构不支持继承,而类支持继承。

85. 类和接口之间有什么区别?

(Class)是对象的逻辑表示。它是数据集合和相关子过程的定义。

接口(Interface)也是一个类,包含没有任何方法体定义的方法。类不支持多重继承,但是接口支持。

87. 什么是认证与授权?

认证是识别用户的过程。认证是以证书(用户名和密码)来识别/验证用户。

授权在认证之后执行。授权是一个基于这些用户身份授予访问权限的过程。

授权允许用户对特定资源的访问。

88. 什么是基类?

类声明可以通过类名加一个冒号和基类名来指定基类。省略基类说明等同于从object类派生。

89. this”可以在静态方法中用吗?

不,This’不能在静态方法中使用。仅仅只有静态变量/方法可以在静态方法中使用。

90. constantsreadonlystatic之间的区别是什么?

Constants: 值不能变。

Read-only: 值在类的构造函数中仅仅初始化一次。

Static: 值可以被初始化一次。

91. C#中支持哪些语句类型?

C#支持的几种不同的语句类型是

块语句

声明语句

表达式语句

选择语句

迭代语句

跳转语句

异常处理语句

检查和未检查

Lock语句

92. 什么是接口类?

它是一个抽象类,所有公共抽象方法必须要在其继承类中实现。

94. 关键字stringSystem.String类之间有什么区别?

关键字stringSystem.String类的别名。所以,System.String和关键字string是一样的,你可以使用任何你喜欢的命名约定。String类提供了许多方法用于安全创建,操作和比较字符串。

95. C#中提供的两种数据类型是什么?

值类型

引用类型

96. 有哪些缓存的种类?

有三种类型的缓存:

输出缓存(Output Caching):存储asp.net页面的应答信息。

片段缓存(Fragment Caching):仅缓存/存储部分页面内容(用户控制)

数据缓存(Data Caching):为了性能通过编程的方式来缓存对象。

97. 自定义控件和用户控件之间的区别是什么?

自定义控件是编译后的代码(Dlls),容易使用,创建困难,可以放在工具箱。拖拉使用的控件。

属性可以直观地在设计时指定。可以被多个应用程序使用(如果共享Dlls),即使是私有的也能拷贝到web应用程序的bin目录,添加引用和使用。通常是用来为独立的消费应用程序提供公用功能。

用户控件和ASPinclude文件,轻松创建,不能放置在箱中来拖拉放置它。用户控件在单个应用程序文件之间共享。

98. 什么是方法?

方法是由对象或者类执行来实现计算或者操作的成员。静态方法通过类访问。实例方法通过类的实例来访问。

99. 什么是域?

域是类或者类的实例相关的变量。

100. 什么是事件?

事件是使一个类或对象能够提供通知的成员。事件声明像域声明一样,除了声明包含event关键字并且类型必须为委托类型。

101.什么是文本和它们的类型?

文本是程序分配给变量的值常量。C#支持的几种文本类型是

整数(Integer literals)

实数(Real literals)

布尔值(Boolean literals)

单字符(Single character literals)

字符串(String literals)

反斜线(Backslash character literals)

103. C#有什么特性?

C#是一个简单而强大的编程语言,用于编写企业版的应用程序。

它是C++VB的混合体。它保留了许多C++特性,如语句,表达式和运算符并结合了VB的生产力。

C#帮助开发者轻易地构建网络服务,能够通过任何语言,任何平台来访问Internet

C#帮助开发者用更少的代码完成开发,从而在代码中错误更少。

C#引入了相当大的改进和创新,如类型安全,版本控制,事件和垃圾收集这些领域。

104. 错误的类型是什么?

语法错误(Syntax error)

逻辑错误(Logic error)

运行时错误(Runtime error)

105. breakcontinue语句之间有什么区别?

break语句是用来终止当前封闭循环或者它所在的条件语句的。我们已经使用break语句跳出switch语句。

continue语句是用来改变执行顺序的。和break语句那样跳出循环相反,continue语句停止当前迭代并且只将控制返回到循环顶部。

106. 定义命名空间?

命名空间被称为容器,用来组织分层的.NET类。

107. 什么是代码组?

代码组是一组共享安全上下文的套件。

108. C#中什么是密封类?

sealed修饰符用来阻止从一个类派生。如果一个密封类被指定为另一个类的基类时会发生编译时错误。

109. 静态方法和实例方法的区别是什么?

static修饰符声明的方法是静态方法。静态方法不操作具体的实例,并且只能被静态成员访问。

没有以static修饰符声明的方法是实例方法。实例方法操作一个具体的实例并且可以被静态和实例成员访问。在其上调用实例方法的实例可以像这样显示访问。在静态方法中这么调用是错误的。

110. C#中有哪些变量的类型?

C#中不同的变量类型是:

静态变量(static variables)

实例变量(instance variable)

值参数(value parameters)

引用参数(reference parameters)

数组元素(array elements)

输出参数(output parameters)

局部变量(local variables)

111. 方法重载是什么意思?

方法重载允许在同一个类中的多个方法有相同的名字,只要它们具有独特的签名。当编译一个重载方法的调用时,编译器使用重载决策决定具体调用的方法。

112. 什么是参数?

参数是用来传递值或者变量引用给方法的。方法的参数从被调用方法时指定的参数得到它们实际的值。有四种参数:值参数,引用参数,输出参数和参数数组。

113. C#是面向对象的语言吗?

是的,C#和传统的JavaC++一样是面向对象的语言。

114. ArrayArraylist之间的区别是什么?

数组是相同类型的集合。数组大小在它声明的时候就固定了。链表和数组相似,但它没有固定的大小。

115. C#中有什么特殊的运算符?

C#支持一下特殊运算符。

is (关系运算符)

as (关系运算符)

typeof (类型运算符)

sizeof (大小运算符,用于获取非托管类的大小)

new (对象运算符)

.dot (成员访问运算符)

checked (溢出检查)

unchecked?(防止溢出检查)

116. C#中运算符的含义是什么?

运算符是界定了对类实例应用特定的运算表达式内涵的成员。可以定义三种类型的运算符:一元运算符,二元运算符和转换运算符。所有的运算符必须声明为publicstatic的。

117. 什么是类型参数化?

类型参数化是一个类型在另一个值或者类型之上参数化。

119. abstract关键字怎么用?

修饰符abstract是用于类的关键字,以表明这个类本身不能直接有实例或者对象,并且对于其他类来说它只能是一个“基类”。

120. goto语句怎么用?

goto语句仍然包含在C#语言中。这个goto可以用来从一个循环内部跳转到外部。但是从循环外部跳入循环内是不允许的。

121. 控制台应用程序和窗口应用程序有什么区别?

控制台应用程序,设计用来在没有用户界面的命令行中运行。

窗口应用程序,设计用来通过用户界面在用户桌面执行。

122. return语句怎么用?

return语句与程序 (方法或者函数)相关。在执行return语句的时候,系统将控制权从被调用程序交给调用程序。return语句用于两种目的:

立即返回当前执行的代码的调用者

返回给当前执行的代码的调用者一些值。

123. ArrayLinkedList之间的区别是什么?

数组是不关心彼此元素位置的简单数字序列。他们之间的位置彼此独立。增加,删除或者修改任何数组元素都是非常容易的。相对于数组,链表是一个复杂的数字序列。

124. C#throws子句吗?

不,不像JavaC#不需要开发者指定方法可以抛出的异常。

125. C#支持可变数目的参数吗?

是的,使用params关键字。该参数指定为特定类型的参数列表。

126. 可以重写私有虚方法吗?

不可以,私有方法不能在类外访问。

127. 什么是多播委托?

每个委托对象保持对一个单独方法的引用。但是,一个委托对象保持对多个方法的引用并调用它们是可能的。这样的委托对象成为多播委托或者组合委托。

128. 什么是C#独有的特性?

XML文档.

129. C#中使用异常是推荐的吗?

是的,在.NET框架中异常是推荐的错误处理机制。

130. switch语句中break语句是做什么的?

break语句终结它所在的循环。它也改变了程序执行的流程。

switch语句中,break语句用在一个case语句的结尾处。在C#break语句是强制性的,避免了一个case语句流向另一个case语句。

131. Is C# object oriented?C#是面向对象的吗?

是的,C#和传统的JavaC++一样是面向对象的语言。

132. 什么是智能导航?

因为服务端验证和页面被刷新导致页面刷新时,光标位置保持不变。

134. C#throws子句吗?

不,不像JavaC#不需要(甚至不允许)开发者指定方法可以抛出的异常。

135. 方法可以重载的不同方式是什么?

不同的参数类型,不同的参数个数,不同的参数顺序。

136. 事件有返回值吗?

没有,事件没有返回类型。

137. 事件是什么?

事件是一个基于另一个程序方法执行的动作。

事件是被对象或者类使用来通知其他对象发生的事件的委托类型类成员。

事件可以通过event关键字来声明。

138. 什么是标识符?

标识符无他,它是用来在程序中唯一识别各种实体的名称。

139. C#中有哪些不同的文本类型?

布尔值: TrueFalseBoolean类型,分别映射到真和假的状态。

整数:用于编写类型IntuIntlongulong的值。

实数:用于编写类型float, doubledecimal的值。

字符:代表单字符,通常由有引号的字符组成,如‘a’。

字符串: C#支持两种类型的字符串,规则字符串和原义字符串。规则字符串由0个或多个括在双引号中的字符组成,如“116110″。原义字符串由@字符后跟带双引号的字符组成,如@hello”。

Null: 代表null类型。

140. 什么是数据封装?

数据封装,也被称为数据隐藏,它是类的实现细节对保持对用户隐匿的机制。用户只能通过执行称为方法的特殊函数来对隐藏了成员的类执行一组有限的操作。

142. 子程序和函数的主要区别是什么?

子程序没有返回值,而函数有。

143. C#C++的区别是什么?

C#不支持#include语句。它只用using语句。

C#中,类定义在最后不使用分号。

C#不支持多重继承。

数据类型的显示转换在C#中比C++中安全很多。

C#switch也可用于字符串值。

命令行参数数组的行为在C#中和C++中不一样。

144. 什么是嵌套类?

嵌套类是类中的类。

嵌套类是声明发生在另一个类或者接口里面的任何类。

145. 可以给静态构造函数参数吗?

不可以,静态构造函数不可以有参数。

146. C#中,字符串是值类型还是引用类型?

字符串是对象(引用类型)

147. C#提供拷贝构造函数吗?

不,C#不提供拷贝构造函数。

148. 类或者结构可以有多个构造函数吗?

可以,类或者结构可以有多个构造函数。C#中构造函数可以被重载。

149. 可以创建接口的实例吗?

不可以,你不可以创建接口的实例。

150. 接口可以包含字段吗?

不可以,接口不能包含字段。

aspx and cs

概述三层结构体系

web/business/dataaccess

死锁的必要条件?怎么克服?

答:系统的资源不足,进程的推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用完前,不能强行剥夺。

接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?

答:接口是可以继承接口的,抽象类是可以实现接口的,抽象类可以继承实体类,但是有个条件,条件是,实体类必须要有明确的构造函数。

构造器Constructor是否可以被继承?是否可以被Override?

答:Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).

是否可以继承String类?

答:因为String类是final类所以不可以继承string类。

当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?

答:不可以,一个对象的方法只能由一个线程访问。

用最有效的方法算出等已8对于几?

答:2<<3.

C#是否可以对内存直接进行操作?

答:这个问题比较难回答,也是个很大的问题。但是可以这样问答。C#是可以对内存进行直接操作的,虽然很少用到指针,但是C#是可以使用指针的,在用的时候需要在前边加unsafe,,在.net中使用了垃圾回收机制(GC)功能,它替代了程序员,不过在C#中不可以直接使用finalize方法,而是在析构函数中调用基类的finalize()方法。

数组有没有Length()这和方法?string有没有这个方法?

答:数组中没有这个方法,但有这个属性,string中有这个方法。

数据成员可以分静态变量、非静态变量两种.

 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.

非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问

非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中..

一个类中也可以包含静态成员和非静态成员,类中也包括静态构造函数和非静态构造函数.

对于winApp来说,静态成员对于程序员本身省了很多事,而且因为静态成员驻留内存,在方法与方法之间传递共享数据的时候,所以静态成员成了我的首选..但是不要因为方便,大量使用,尤其是在内存紧张或者用静态方法操作一些共享值的时候.或者要写多用户系统的时候,要慎之又慎.比如:

 static int id = 0;

 sql = "select * from table where id=" + id;l

何时必须声明一个类为抽象类?

当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。

接口(interface)是什么?

只含有共有抽象方法(public abstract method)的类。这些方法必须在子类中被实现。

为什么不能指定接口中方法的修饰符?

接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。他们默认为公有方法。

可以继承多个接口么?

当然。

那么如果这些接口中有重复的方法名称呢?

这种情况中你可以决定如何实现。当然需要特别得小心。但是在编译环节是没有问题的。

System.String System.StringBuilder有什么区别?

System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法

is/as

is运算符用于检查对象是否与给定类型兼容,如果兼容返回true,反之返回false

as运算符用于在兼容的引用类型之间转换,如果无法转换,返回null而不是引发异常

静态构造方法

静态构造方法是最先被执行的构造方法,并且在一个类里只允许有一个无参的静态构造方法

Request

Request.QueryString:用于获取Get传递的

Request.Form:用于获取Post传递的

Request.ServerVariables:获取参数集合

一般项目中默认用Request["xx"],这样会先找Request.QueryString,再找Request.Form,以防有时用$.get,有时用$.post。当然有时为了严谨也可以直接用Request.Form来强制要求Post

Response

Response.Charset:字符集

Response.ContentTypeHTTP内容类型

Response.Expires:页面有效缓冲期

Response.StatusHTTP状态值,如200成功或404未找到

Response.Write("str"):最常用到,直接输出

Response.Redirect("url"):跳转url

Response.Clear() / .End() / .Flush() : 分别为清除、结束、发送缓冲

Server

HttpServerUtility的类型实例

Server.MapPath():最常用,将虚拟目录转成实际目录

Server.Transfer():终止当前页,执行新页

Server.HtmlDecode() / .HtmlEncode() :解码编码

ViewState

是个加密、压缩的隐藏字段,不能跨页,自动维护,存在于客户端

Session / Cookie / ViewState区别:

Session不适应长时间保持数据,默认是20分钟,适用于小量数据。

ViewState常用于保存单个用户状态信息,有效期为页面生存周期,不适应大数据

Cookie用于保存浏览器请求信息,明文保存。

页面跳转:

Response.Redirect():地址为变

Server.Transfer():只能同目录或子目录,地址不变

Server.Execute():类似针对新页面进行函数调用,返回结果

a标签的href:有带样式

ASP.NETHyperLink控件:ASP.NET专用

JS脚本:比较灵活,还可以加入其它逻辑

ASP.NET存储会话:

InProc存储在IIS进程(默认):性能高、不能跨服务器、受IIS影响、

StateServer存储在状态服务器:要设置stateConnectionString="tcpip=192.168.0.xx:42424",并在该服务器上装ASP.NET State Server服务

SqlServer存储在数据库:可跨服务器,稳定,但负载大。开启数据库服务和SQL Server代理服务,在C:\winnt\Microsoft.NET\Framework\[version]\找到InstallSqlState.sql(可能每个系统不大一样,要去找找看),会新建ASPState库,有些存储过程,具体表是在tempdbASPStateTempSession表。要配置sqlConnectionString="data source=localhost; Integrated Security=SSPI;"

对一个77列的int 二维数组初始化,要求从1-4949个数字中随机选择一个给数组的每个元素赋值,并且数组的各个元素的值都不相同

  // m :行数   n :列数

         int[,] Test(int m, int n) {

            int[,] Arr = new int[m, n];

            IList<int> tmp = new List<int>();

            int t = m * n;

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

                tmp.Add(i);

            Random r = new Random();

            for (int tm = 0; tm < m; tm++) {

                for (int tn = 0; tn < n; tn++) {

                    int index = r.Next(0, tmp.Count);

                    Arr[tm, tn] = tmp[index];

                    tmp.RemoveAt(index);

                }

            }

            return Arr;

        }

posted @ 2018-08-23 09:40  Luckzy  阅读(342)  评论(0编辑  收藏  举报