[quote]
最新的.Net面试题及答案
1.a=10,b=15,在不用第三方变题的前提下,把a,b的值互换
a=a+b;b=a-b;a=(a-b)/2;b=b+a
2:已知数组int[] max={6,5,2,9,7,4,0};用快速排序算法按降序对其进行排列,并返回数组

public class TestQuickSort { 


private int[] array = null; 


private void quickSort(int lowest, int highest) { 

if (array == null || lowest < 0 || lowest >= highest 

|| highest >= array.length) { 

return; 

} 

int low = lowest; 

int high = highest; 

int key = low++; 

for (; low <= high;) { 

if (key < high) { 

if (array[key] > array[high]) { 

array[high] = array[key] + (array[key] = array[high]) * 0; 

key = high; 

} 

high--; 

} 


if (key > low) { 

if (array[key] < array[low]) { 

array[low] = array[key] + (array[key] = array[low]) * 0; 

key = low; 

} 

low++; 

} 

} 

quickSort(lowest, key - 1); 

quickSort(key + 1, highest); 

} 


/** 

* @param args 

*/ 

public static void main(String[] args) { 

TestQuickSort test = new TestQuickSort(); 

int[] array = {6,5,2,9,7,4,0}; 

test.array = array; 

test.quickSort(0, array.length - 1); 

int length = test.array.length; 

for (int i = 0; i < length; i++) { 

System.out.println(test.array[i]); 

} 

} 

}


快速排序是综合性能最好的内部排序算法!

算法

private static int Partition(ref int[] dest, int be, int en, ref int swapTimes) 

{ 

int temp = dest[en]; 

int b = be; 

int e = en; 

while(b != e) 

{ 

while(dest[b] < temp && b < e) 

b ++; 

if(b < e) 

{ 

dest[e] = dest[b]; 

e --; 

swapTimes ++; 

} 


while(dest[e] > temp && b < e) 

{ 

e --; 

} 

if(b < e) 

{ 

dest[b] = dest[e]; 

b ++; 

swapTimes ++; 

} 

} 


dest[b] = temp; 

return b; 


}



3:请简述面向对象的多态的特性及意义!
在c#中多态性的定义是:同一操作作用于不同的类的实例、不同的类将进行不同的解释、最后产生不同的执行结果。

c#支持两种类型的多态性:
编译时的多态性(静态联编)
编译时的多态性是通过重载来实现的。方法重载和操作符重载、它们都实现了编译时的多态性。
对于非虚的成员来说系统在编译时根据传递的参数、返回的类型等信息决定实现何种操作。
运行时的多态性(动态联编)
运行时的多态性就是指直到系统运行时才根据实际情况决定实现何种操作c#中运行时的多态性。
通过虚成员实现。
编译时的多态性为我们提供了运行速度快的特点而运行时的多态性则带来了高度灵活和抽象的特点。


4:session喜欢丢值且占内存,Cookis不安全,请问用什么办法代替这两种原始的方法
用VIEWSTATE /Profile/自己在服务器端实现个Cache
5:对数据的并发采用什么办法进行处理较好。
1、使用事务对象:

1SqlConnection conn = new SqlConnection(ConnectionString); 

2 SqlCommand cmd = new SqlCommand("delete from table_a where bh=1",conn); 

3 SqlTransaction Trans ;   //事物对象 

4 

5 conn.Open(); 

6 Trans = conn.BeginTransaction(IsolationLevel.ReadCommitted, "MyTrans"); 

7 cmd.Transaction = Trans; 

8 try{ 

9 cmd.ExecuteNonQuery(); 

10 //如果成功,则提交数据 

11 Trans.Commit(); 

12 } 

13 catch (SqlException Err){ 

14 //产生错误,则回滚事物对象 

15 Trans.Rollback("MyTrans"); 

16 } 

17 finally{ 

18 conn.Close(); 

19 }


2、 使用lock() unlock()
3、使用时间戳,使用timetamp类型。
6:已知Oracle数据库有GD和ZS两个数据库,GD数据库v_s表有数据写入时,从v_s表中提取最新数据到ZS数据库的D_E表中。请问用什么办法解决这一问题?如果又碰到不能互访的问题时,又用什么办法解决?

答案:1:触发器
2:不能互访时,肯定是权限出了问题,可以对v_s表赋予D_E表的操作权限

7:已知Oracle数据库a,b
现在在a用户权限下,访问b数据库sql语句为select a.* From b a,请改正这一句Sql的写法

答案:select * From b.TableName

8:当对数据库进行海量级的数据插入时,数据库出现报错,错误原因可能有哪些,以你的经验谈谈你的解决办法

答案:1:数据库表空间不足,因为Oracle必须指定表空间的大小 更改表空间大小,如果装有双机热备则必须对物理存贮文件进行手工更改
2:表死锁 采用脚本形式对表解锁
3:监听丢失,重启监听解决

9:算法分析
AH 20060625 12 44 01 CAD001
AH 20060625 12 44 01 CAD001
AH 20060625 13 44 02 CAD001
AH 20060625 14 44 03 CAD001
说明:第二列表示日期,第三列表示温度,第四列表示水位,第五列表示流量,第6列表示水位测站编码,每一列表示一个字段
很明显第一条数据和第二条数据重复,然数据表中有主键和外键的约束,是不允许有重复的数据存在的,请构造算法将重复的数据Del掉

select distinct * into #Tmp from tableName 

drop table tableName 

select * into tableName from #Tmp 

drop table #Tmp



10:javascript算法
已知a,b,现在点鼠标a会向b游动,鼠标停,a会停下来
请实现"跑步算法"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1, 请你说说.NET中类和结构的区别?

  答:结构和类具有大体的语法,但是结构受到的限制比类要多。结构不能申明有默认的构造函数,为结构的副本是又编译器创建和销毁的,所以不需要默认的构造函数和析构函数。结构是值类型,所以对结构变量所做的改变不会影响其的原值,而类是应用类型,改变其变量的值会改变其原值。申明结构用Struck关键字,申明类用class关键字,向方法传递结构是时是通过值传递的,而不是通过引用。与类不同,结构的实例化可以不使用New关键字。类可以实现接口。

  2, 死锁的必要条件?怎么克服?

  答:系统的资源不足,进程的推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用完前,不能强行剥夺。

  3, 接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?

  答:接口是可以继承接口的,抽象类是可以实现接口的,抽象类可以继承实体类,但是有个条件,条件是,实体类必须要有明确的构造函数。

  4, 构造器Constructor是否可以被继承?是否可以被Override?

  答:Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).

  5, 当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?

  答:不可以,一个对象的方法只能由一个线程访问。

  6, 用最有效的方法算出等已8对于几?

  答:2<<3.

  7, C#是否可以对内存直接进行操作?

  答:这个问题比较难回答,也是个很大的问题。但是可以这样问答。C#是可以对内存进行直接操作的,虽然很少用到指针,但是C#是可以使用指针的,在用的时候需要在前边加unsafe,,在.net中使用了垃圾回收机制(GC)功能,它替代了程序员,不过在C#中不可以直接使用finalize方法,而是在析构函数中调用基类的finalize()方法。

  8, Error和Exception有是区别?

  答:error表示恢复不是不可能,但是很困难,exception表示一种实际或实现问题,它表示程序运行正常不可以发生的。

  9, 谈谈final,finally,finallize的区别?

  答:final用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。

  Finally是异常处理语句结构中,表示总是执行的部分。

  Finallize表示是object类一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法。

  10, HashMap和Hashtable区别?

  答:HashMap是Hashtable的轻量级实现,非线程安全的实现他们都实现了map接口,主要区别是HashMap键值可以为空null,效率可以高于Hashtable。

  11,Collection和Collections的区别?

  答:Collection是集合类的上级接口,Collections是针对集合类的一个帮助类,它提供一系列静态方法来实现对各种集合的搜索,排序,线程安全化操作。

  12,C#中委托是什么?事件是不是一种委托?

  答:委托是一种安全的类似与函数指针,但是她比指针要安全的多,它可以把方法作为一个参数传递给另一个方法,可以理解为指向函数的引用。事件是一种消息机制,它是一种委托,委托不带方法体。

  13,Override, Overload,的区别?

  答:Override是重写的意思,它表示重写基类的方法,而且方法的名称,返回类型,参数类型,参数个数要与基类相同。

  Overload是重载是意思,它也表示重写基类的方法,但是只要方法名相同,别的可以不同。

  14,在一个BS结构中需要传递变量值时,不能使用session,coolke,application,你有几中方法?

  答:this.server.Transfer,Querystring.

  15, C#种索引器实现过程,是否只能根据数字索引?

  答:不是的,可以是任意类型。

  16,New有种用法?

  答:有3种,第一种是,实例化如:New Class()

  第二种是,public new 隐藏基类的方法

  第三种是,在泛型类申明中的任何类型参数都必须有公共的无参构造函数。

  17,任何把一个Array复制到Arraylist中?

  答:Foreach (object o in Array), ArrayList.Add (0)



[/quote]