1. 简述 private、 protected、 public、 internal 修饰符的访问权限。
答: private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 程序集内可见。
2. 列举ASP.NET 页面之间传递值的几种方式。
答: 1).使用QueryString, 如....?id=1; response. Redirect()....
2).使用Session变量
3).使用Server.Transfer
4).Application
5).<input type="hidden"></input>
6).数据库
7).ViewStat
8).cookie
3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
答: public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i - 2);
}
}
4. C#中的委托是什么?事件是不是一种委托?
答:委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的引用。
是,是一种特殊的委托
5. override与重载的区别
答:重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要
Override 是进行基类中函数的重写。为了适应需要。
6. 如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
答:this.Server.Transfer
7. 请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
答: foreach (System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;
tb.Text = String.Empty ;
}
}
8. 请编程实现一个冒泡排序算法?
答: void BubbleSort(SeqList R)
{ //R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序
int i,j;
Boolean exchange; //交换标志
for(i=1;i<n;i++) //最多做n-1趟排序
{
exchange=FALSE; //本趟排序开始前,交换标志应为假
for(j=n-1;j>=i;j--) //对当前无序区R[i..n]自下向上扫描
if(R[j+1].key<R[j].key) //交换记录
{
R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE; //发生了交换,故将交换标志置为真
}
if(!exchange) //本趟排序未发生交换,提前终止算法
return;
} //endfor(外循环)
} //BubbleSort
9. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答: C#中的索引器通常用于索引数组。
索引器不单能索引数字(数组下标),还能索引一些HASHMAP的字符串,所以,通常来说,C#中类的索引器通常只有一个,就是THIS,但也可以有无数个,只要你的参数列表不同就可以了
索引器和返回值无关
不是。可以用任意类型。
10. 求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
int Num = Convert.ToInt32(this.TextBox1.Text) ;
int Sum = 0 ;
for (int i = 0 ; i < Num + 1 ; i++)
{
if((i%2) == 1)
{
Sum += i ;
}
else
{
Sum = Sum - I ;
}
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine() ;
11. 用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
答:一般为3层,数据访问层,业务层,表示层。
数据访问层对数据库进行增删查改。
业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。
表示层为了与用户交互例如用户添加表单。
优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点: 增加成本。
12. 在下面的例子里
using System;
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}",x,y);
}
当使用new B()创建B的实例时,产生什么输出?答:X=1,Y=0
13. 什么叫应用程序域?
答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。
14. CTS、CLS、CLR分别作何解释?
答:1、CTS Common Type System的缩写,中文意思是通用类型系统,是定义公共语言运行库在声明、使用和管理类型时所遵 循的规则的模型。通用类型系统建立一个框架,该框架使得跨语言集成、类型安全和高性能代码执行成为可能。它是您可以用来生成类库的原始资料。
2、CLS Common Language Specification的缩写,中文意思是公共语言规范,定义一组可以以编程方式验证的规则,这组规范控制用不同编程语言编写的类型的交互操作。制定 CLS 是一种确保跨语言交互操作的绝佳方式。托管类库设计人员可以使用 CLS 来保证可从多种编程语言调用他们的 API。请注意,尽管 CLS 鼓励好的类库设计,但是它并不会强制这样的设计。
3、CLR Common Language Runtime的缩写,中文意思是公共语言运行时。
15. 什么是装箱和拆箱?
答:装箱:用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。
拆箱:从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。
16. 什么是受管制的代码?
答:unsafe:非托管代码。不经过CLR运行。
17. 什么是强类型系统?
答: RTTI:类型识别系统。
18. .net中读写数据库需要用到那些类?他们的作用?
答: Connection 数据库连接对象
DataSet:数据存储器。
DataCommand:执行语句命令。
DataAdapter:数据的集合,用语填充。
19. ASP.net的身份验证方式有哪些?分别是什么原理?
答:asp.net提供了3种认证方式: windows身份验证, Forms验证和Passport验证.
windows身份验证: IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问.
Forms验证:用Cookie来保存用户凭证,并将未经身份验证的用户重定向到自定义的登录页.
Passport验证:通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录和核心配置文件服务.
20. 什么是Code-Behind技术?
答: ASPX,RESX和CS三个后缀的文件,这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理.
21. 在.net中,配件的意思是?
答:程序集。(中间语言,源数据,资源,装配清单)
22. 常用的调用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。2.使用VS.NET中的Add Web Reference菜单选项
23. .net Remoting 的工作原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
24. 在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。
25. 请详述在dotnet中类(class)与结构(struct)的异同?
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的。Struct属于值类型,是分配在内存的栈上的.
26. 根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。
}
}
}
答:if( OnNew != null )
OnNew( this, e );
27. 分析以下代码,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代码执行完后,i= j=
答:i=13,j=10
28. SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
29. 根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
30. 简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
答: WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。
31. 公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路
答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。
32. 给定以下XML文件,完成算法流程图。
<FileSystem>
< DriverC >
<Dir DirName=”MSDOS622”>
<File FileName =” Command.com” ></File>
</Dir>
<File FileName =”MSDOS.SYS” ></File>
<File FileName =” IO.SYS” ></File>
</DriverC>
</FileSystem>
请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。
答:
void FindFile( Directory d )
{
FileOrFolders = d.GetFileOrFolders();
foreach( FileOrFolder fof in FileOrFolders )
{
if( fof is File )
You Found a file;
else if ( fof is Directory )
FindFile( fof );
}
}
33. 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答: 解1: select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
34. 面向对象的语言具有________性、_________性、________性
答:封装、继承、多态。
35. 能用foreach遍历访问的对象需要实现 ___________接口或声明____________方法的类型。
答:IEnumerable 、 GetEnumerator。
36. GC是什么? 为什么要有GC?
答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc()或者 Runtime.getRuntime().gc()
37. String s = new String("xyz");创建了几个String Object?
答:两个对象,一个是"xyz",一个是指向"xyz"的引用对象s。
38. abstract class和interface有什么区别?
答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。
不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
39. 启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
40.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
41. 构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
42. 是否可以继承String类?
答:String类是final类,故不可以继承。
43. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在return前执行。
44. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,有相同的hash code。
45. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
46. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
答:不能,一个对象的一个synchronized方法只能由一个线程访问。
47. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
答:都不能。
48. List, Set, Map是否继承自Collection接口?
答:List,Set是;Map不是
49.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
50. 数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有length()这个方法,有length的属性。String有有length()这个方法。
51. sleep() 和 wait() 有什么区别?
答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
52. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
53. 谈谈final, finally, finalize的区别。
答:final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
54. 如何处理几十万条并发数据?
答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.
55. Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。
56. 进程和线程的区别?
答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。
57. 堆和栈的区别?
答:栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。
58. 成员变量和成员函数前加static的作用?
答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。
59. ASP.NET与ASP相比,主要有哪些进步?
答:asp解释型,aspx编译型,性能提高,有利于保护源码。
60. 产生一个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];
61. 请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
答: session(viewstate) 简单,但易丢失
application 全局
cookie 简单,但可能不支持,可能被伪造
input ttype="hidden" 简单,可能被伪造
url参数简单,显示于地址栏,长度有限
数据库稳定,安全,但性能相对弱
62. C#中接口和类的异同
答:接口和类都是类,不同的是,接口只包含方法或属性的声明,不包含具体实现方法的代码,接口可以实现多继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法或属性。接口主要定义一种规范,统一调用方法,在大型项目中接口正发挥日益重要的作用。
63. DataReader和DataSet的异同
答:DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作...
64. 在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?
答:Using 引入一个命名空间,或在使用了一个对像后自动调用其IDespose,
New 实例化一个对像,或修饰一个方法,表此方法完全重写此方法
65. 下面的例子中
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
66. 在.net(C# or vb.net)中如何获得当前窗体或控件的句柄,特别是控件本身的句柄(请列举)。
答:this(C#) Me(vb.net).
67. 在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?
答:一个是退出整个应用程序,一个是关闭其中一个form
68. 下面这段代码输出什么?为什么?
int i=5;
int j=5;
if (Object.ReferenceEquals(i,j))
Console.WriteLine("Equal");
else
Console.WriteLine("Not Equal");
答:Not Equal——进行了装箱操作。
69. HashMap和Hashtable的区别。
答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable.
70. 你觉得ASP.NET 2.0(VS2005)和你以前使用的开发工具(.Net 1.0或其他)有什么最大的区别?你在以前的平台上使用的哪些开发思想(pattern / architecture)可以移植到ASP.NET 2.0上 (或者已经内嵌在ASP.NET 2.0中)
答:1 ASP.NET 2.0 把一些代码进行了封装打包,所以相比1.0相同功能减少了很多代码.
2 同时支持代码分离和页面嵌入服务器端代码两种模式,以前1.0版本,.NET提示帮助只有在分离的代码文件,无 法 在页面嵌入服务器端代码获得帮助提示,
3 代码和设计界面切换的时候,2.0支持光标定位.这个我比较喜欢
4 在绑定数据,做表的分页.Update,Delete,等操作都可以可视化操作,方便了初学者
5 在ASP.NET中增加了40多个新的控件,减少了工作量
71. 重载与覆盖的区别?
答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系
2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
3、覆盖要求参数列表相同;重载要求参数列表不同。
4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调 用时的实参表与形参表来选择方法体的
72. 什么是虚函数?什么是抽象函数?
答:虚函数:没有实现的,可由子类继承并重写的函数。抽象函数:规定其非虚子类必须实现的函数,必须被重写。
73. 什么是XML?
答:XML即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,即可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。
74. 什么是Web Service?UDDI?
答:Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。
UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。
75. 委托声明的关键字是______?答:delegate.
76. 用sealed修饰的类有什么特点?答:密封,不能继承。
77. 在Asp.net中所有的自定义用户控件都必须继承自_Control___?
78. 在.Net中所有可序列化的类都被标记为_[serializable]__?
79. 在.Net托管代码中我们不用担心内存漏洞,这是因为有了__GC__?
80. .某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:
(1) 密码单词的最小长度是两个字母,可以相同,也可以不同
(2) K不可能是单词的第一个字母
(3) 如果L出现,则出现次数不止一次
(4) M不能使最后一个也不能是倒数第二个字母
(5) K出现,则N就一定出现
(6) O如果是最后一个字母,则L一定出现
问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?
A) K B)L C) M D) N
答案:B
问题二:如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的总数是多少?
A)1个 B)3个 C)6个 D)9个
答案:A
问题三:下列哪一个是单词密码?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C
81. ADO.NET相对于ADO等主要有什么改进?
答:1:ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,
2:不使用com
3:不在支持动态游标和服务器端游
4:可以断开connection而保留当前数据集可用
5:强类型转换
6:xml支持
82. 大概描述一下ASP.NET服务器控件的生命周期
初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件 预呈现 保存状态 呈现 处置 卸载
83、C#有固定的开发工具吗
没有。小到NotePad,大到VS.NET、c#Builder,都可以做C#开发。
84、C#和C++有什么区别?
区别很多。首先是托管与非托管的区别。托管代码不允许进行对内存的操作,而是由固定的垃圾回收机制来完成,而C++则不然。其次C#和JAVA类似,都是运行在虚拟机上的,而C++不需要这样一个平台。最后C#是完全面向对象的。在C#里,万物皆是类,绝对不存在一个超越类以上的函数或变量。C++也是面向对象的,但其仍然保留面向过程语言的特点(比如说C++存在全局变量)。最后,C#摒弃了C++中的多重继承等不易掌握的特点,代之以接口等,使编程变得更加轻松和简便。
85、C#在哪些方面有优势?
C#兼具VB的快速简练、DELphi的可视化控件编程、JAVA的完全面向对象和C++的语法规则。C#最长于WEB开发。
86.什么是COM?
COM(组件对象模型)是软件组件相互通信额度一种方式。它是一种二进制的网络标准,允许任意两个组件通信,平台独立,语言独立,位置透明。COM对象被很好的封装,无法访问内部的实现细节,通过接口来访问COM内部的方法。
优点:软件重用,降低成本和工作量,提高软件的复用率。
COM对象必须实现Iunknown接口,这个接口是管理COM对象生命周期的。当COM对象不使用的时候,接口定义的对象负责释放内存。
QI(查询接口):从一个接口使用的方法转到另一个接口可以使用的方法的过程称为QI,由Idispatch接口管理。
GUIDs每个组件都有一个独一无二的标识,广泛唯一标识。这个标识符就是组件的身份,是一个128位的数字,有系统自动分配。
COM组件必须被注册后才能被使用。
87.COM的缺陷?
如果两个程序都是使用一个COM对象,而这个COM组件升级了的话,很可能出现无法使用新组件的情况,被称为DLL Hell。
88、.NET是如何预防DLL陷阱的
.NET允许配置版本详细的名称和记录需要在执行时用到的版本号。
1.面向对象的思想主要包括什么?
继承 多态 封装
封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。
继承:子类拥有父类的所有数据和操作。
多态:一个程序中同名的不同方法共存的情况。有两种形式的多态– 重载与重写
2.什么是ASP.net中的用户控件
用户控件:用户控件是能够在其中放置标记和 Web 服务器控件的容器。然后,可以将用户控件作为一个单元对待,为其定义属性和方法。用户控件是一种复合控件,工作原理非常类似于 ASP.NET 网页 - 您可以向用户控件添加现有的 Web 服务器控件和标记,并定义控件的属性和方法。然后可以将控件嵌入 ASP.NET 网页中充当一个单元。
用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整.
3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
装箱和拆箱发生 值类型向引用类型转换,和引用类型向值类型转 重载:同一个函数参数不同
装箱就是把值类型转成引用类型,从MS IL角度看好像是boxing,没记错的话是把值从堆栈转到堆中.拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.CLR是通用语言运行时,其它的不清楚.
4.列举一下你所了解的XML技术及其应用
xml可以用来做网页(xslt) xml可以当作数据库 xml可以用来保存对象的系列化
XML可是好东西,保存配置,站与站之间的交流,WEB SERVICE都要用它
5.值类型和引用类型的区别?写出C#的样例代码。
值类型,没有什么好说的.引用类型用处是返回两个以上参数的时候比较好用 ref out 我常用的是out不要先赋值
结构是值类型,类是引用类型,所以传结构就是值类型的应用啦,传对象或类就是引用类型的,这个不用多写了吧.
6.ADO.net中常用的对象有哪些?分别描述一下。
ado.net 我直接用 sqlhelper了 (有connection command 还有参数)
ADO.NET的对象主要包括:DataSet,DataTable,DataColumn,DataRow,和DataRelation。
DataSet:这个对象是一个集合对象,它可以包含任意数量的数据表,以及所有表的约束、索引和关系。所有这些信息都以XML的形式存在,我们可以处理、遍历、搜索任意或者全部的数据。
DataTable:这个对象代表着可以在DataSet对象内找到的所有表
DataColumn:表包含与列有关的信息,包括列的名称、类型和属性。我们可以按照下面的方式创建DataColumn对象,指定数据类型,然后把列加入到表
DataRow:要填充一个表,我们可以使用命令的自动数据绑定功能,或者也可以手工添加行
DataRelation:这个对象代表着两个表之间的父-子关系。关系建立在具有同样数据类型的列上
DataSet对象:表示内存中数据的缓存,可以把它想像成一个临时的数据库,它里可以存多个表(DataTable),而且是断开式的,不用每进行一次操作就对数据库进行更新,从而提高了效率。
DataReader对象:它与DataSet最大的不同是有连接式的,每次对数据库进行存取都会影响到数据库。
Connection对象:用于连接数据库的对象,表示到数据源的一个唯一的连接。
Command对象:表示要对数据库执行的一个SQL语句或一个存储过程。
DataAdapter对象:该对象是与DataSet配合使用的对象,用于把表填充到DataSet,和更新DataSet等。
Ado.net 是ado的一个后续升级版本,利用它可以操作数据库中的数据!
VB.net 是VB6.0的一个后续升级版本,它可以直接开发Windows应用程序
ASP.net 是用于开发WEB应用程序的
7.如何理解委托?
回调机制比较有用的.在net中采用了委托
使用委托更方便!!
买房的人 中介 卖房的人
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值
8.C#中的接口和类有什么异同。
接口,是可以多继承,类只有单继承.接口强调了你必须实现,而没有具本实现的方法和虚类有点相同
异:
不能直接实例化接口。
接口不包含方法的实现。
接口、类和结构可从多个接口继承。但是C# 只支持单继承:类只能从一个基类继承实现。
类定义可在不同的源文件之间进行拆分。
同:
接口、类和结构可从多个接口继承。
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
接口可以包含事件、索引器、方法和属性。
一个类可以实现多个接口。
9.。net中读写数据库需要用到哪些类?他们的作用
Connection DataAdapter DataSet Command DataReader
10.UDP连接和TCP连接的异同。
前者只管传,不管数据到不到,无须建立连接.后者保证传输的数据准确,须要连结.
TCP协议是面向连接的,每个数据包的传输过程是:先建立链路、数据传输、然后清除链路。数据包不包含目的地址。受端和发端不但顺序一致,而且内容相同。它的可靠性高,
UDP协议是面向无连接的,每个数据包都有完整的源、目的地址及分组编号,各自在网络中独立传输,传输中不管其顺序,数据到达收端后再进行排序组装,遇有丢失、差错和失序等情况,通过请求重发来解决。它的效率比较高
11.ASP.net的身份验证方式有哪些?分别是什么原理?
Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活。Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端。服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了。问题来了,在实际是用中我们往往需要的是基于角色,或者说基于用户组的验证和授权。
以前是自己写,一般是利用Cookie或者Session。
asp.net2.0之后提供了MemberShip类身份验证框架。这两种都用过,自己写的自由度大,但是MemberShip和.net其他组件配合更好
12.进程和线程分别怎么理解?
进程简单理解为单个程序吧(按ctrl+alt+del)可以看到的.它至少有一个主线程
进程是老子,线程是儿子,没有老子就没有儿子,一个老子可以有多个儿子.一个儿子可以成为别人的儿子,一个老子也可以为别的老子生儿子
13.什么是code-Behind技术。
代码分离,这是个明智的东西,像ASP这样混成一堆很不爽.或者可以理解成HTML代码写在前台,C#代码写在后台.当然前台也有脚本,类的调用等,其实写在一起也是可以的
14.活动目录的作用。
15..net中读写XML的类都归属于哪些命名空间?
system.xml (system.io创建目录的时候用)。我自已写的就不一定了
16.解释一下UDDI、WSDL的意义及其作用。
17.什么是SOAP,有哪些应用。
soap简单协议.我只知道.web服务是基于它之上的
SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML格式的消息
18.如何部署一个ASP.net页面。
部置一个页面. 也就是说没有代码是直接写在aspx中的了.只接放在IIS的虚拟目录下就行了.当然要asp.net支持
19.如何理解.net中的垃圾回收机制。
垃圾回收..一般的只要掌握.非托管对象要记得释放资源就行了吧。
GC?对象创建了总要清除啊,不然内存哪够用
20.常用的调用webservice方法有哪些?
直接在vs.net里面引用就OK了.它会自己生成一个代理类
=========================================================================
1..new有几种用法
第一种:new Class();
第二种:覆盖方法 public new XXXX(){}
第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。
2.如何把一个array复制到arrayList里
foreach( object o in array )arrayList.Add(o);
3.datagrid.datasouse可以连接什么数据源
dataset,datatable,dataview,IList
4.概述反射和序列化
反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性
序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。
5.概述o/r mapping 的原理
利用反射,配置 将类于数据库表映射
6.类成员有( )种可访问形式
可访问形式?不懂。
可访问性:public ,protected ,private,internal
7.用sealed修饰的类有什么特点
sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。
8.列举ADO.NET中的五个主要对象,并简单描述
connection,command,dataReader,trans,dataset ...
9.执行下面代码后:
String strTemp ="abcdefg 某某某";
Int i System.Text.Encoding.Default.GetBytes(strTemp).Length;
Int j = strTemp.Length;
问:i=(14 ) ;j=(11 )
i=(14 ) ;j=(11 ) 中文两个字节
10.C#中,string str = null 与 string str ="",请尽量用文字说明区别。(要点:说明详细的内存空间分配)
string str ="" 分配空间
11.详述.NET里class和struct的异同!
class:放在 ? struct放在?
struct值传递
类与结构有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。
12.概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。
远程逻辑调用,remoing接口只能用在.net中
13.什么是code-behind技术
aspx and cs
14.概述三层结构体系
web/business/dataaccess
15.asp.net如何实现MVC模式,举例说明!
web/business/dataaccess
=========================================================================
1. 谈谈类和结构的区别?
1. 值类型与引用类型
结构是值类型:值类型在堆栈上分配地址
类是引用类型:引用类型在堆上分配地址
2.继承性
结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然没有明确sealed声明,可结构是隐式的sealed .
类:完全可扩展的,除非显式声明sealed, 否则类可以继承其他类和接口,自身也能被继承 。
注:虽然结构不能被继承 ,可结构能够继承接口,方法和类继承接口一样 。
3.内部结构的区别:
结构:
没有默认的构造函数,可以添加构造函数
没有析构函数
没有 abstract 和 sealed(因为不能继承)
不能有protected 修饰符
可以不用new 初始化
在结构中初始化实例字段是错误的
类:
有默认的构造函数
有析构函数
可以使用 abstract 和 sealed
有protected 修饰符
必须使用new 初始化
2. C#的优点是什么?至少列出4点
1. C#中指针已经消失. 允许对原始指针的有限制的使用.
2. 基于.NET平台的,继承了自动内存管理和垃圾回收的特点.
3. C#拥有内建的支持来将任何组件转换成一个web service,运行在任何平台上的任何应用程序都可以通过互联网来使用这个服务.
4. 面向对象的
3. C#有哪5种类型的可访问性?
? public:成员可以从任何代码访问。
? protected:成员只能从派生类访问。
? internal:成员只能从同一程序集的内部访问。
? protected internal:成员只能从同一程序集内的派生类访问。
? private:成员只能在当前类的内部访问。
4. C#中引用类型有哪几种?
(类、代表、数组、接口)
5. 对象间可能存在的三种关系?
聚合,一个(较复杂的)对象由其他若干(较简单的)对象作为其构成部分,称作聚合。
关联,对象之间的静态联系(即通过对象属性体现的联系)称作关联。
继承
6. 如何理解.net中的垃圾回收机制。
如果发现内存不够,则垃圾回收器,将全部对象作为无效对象(被回收对象),然后先将全局变量,static,处于活动中的局部变量,以及当前CG指针指向的对象放入一个表中.然后
会搜索新列表中的对象所引用的对象.加入列表中,其他没有被加入列表的对象都会被回收.
非托管对象要记得释放资源就行了吧.
7. .net的错误处理机制是什么
错误的处理顺序:finally先,catch次之,最后退会try代码..取消此次操作.返回catch中的异常信息.当然,你也可以定制自己的错误处理机制...如果你的异常处理中包含finally块.则此finally无论是否发生异常始终会被执行...
8. c#中using和new这两个关键字有什么意义?
using 的用途是为某个namespace建立别名,或者引用存在系统中的其它namespace.
New 用来创建实例,或者覆写方法。
9. 什么是重载?override与重载的区别?
重载是指针对所继承下来到方法,重新设计其处理方式,为将来原本处理方式覆盖过去。
在派生类要覆盖的方法前加override修饰,而基类的同名方法前加virtual修饰。这样就能实现多态。多态指一个程序中同名的不同方法共存的情况。 有两种形式的多态– 重载与重写。
10. 值类型和引用类型的区别?写出C#的样例代码。
值类型的变量本身包含他们的数据,而引用类型的变量包含的是指向包含数据的内存块的引用或叫句柄。
值类型变量存储在堆栈。每个程序在执行时都有自己的堆栈,其他程序不能访问。
引用类型存储在堆。引用类型存贮实际数据的引用值的地址。
C#中的引用类型有4种(类、代表、数组、接口)
11. C#代码在执行前要编译为中间语言 ,中间语言的主要特征有?
● 面向对象和使用接口
● 值类型和引用类型之间的巨大差别
● 强数据类型
● 使用异常来处理错误
● 使用属性(attribute)
12. 什么是装箱和拆箱?举例说明。
装箱(boxing)和拆箱(unboxing)机制使得在C#类型系统中,任何值类型、引用类型和object(对象)类型之间进行转换,这种转换称为绑定连接。简单地说,有了装箱和拆箱的概念,对任何类型的值来说最终都可看作是object类型。 1、装箱转换
含义:将一个值类型隐式地转换成一个object类型,或把这个值类型转换成一个被该值类型应用的接口类型,把一个值类型的值装箱,就是创建一个object实例并将值复制给这个object
如: int I=10; object obj=I; 也可用显式的方法进行装箱操作: object obj=(object)I;
2、拆箱转换
和装箱相反,拆箱转换是指将一个对象类型显式地转换成一个值类型,或将一个接口类型显式地转换成一个执行该接口的值类型。
过程分两步:
首先,检查这个对象实例,看它是否为给定的值类型的装箱值
然后,把这个实例的值拷贝给值类型的变量。如:
int I=10;
object obj=I;
Int j=(int)obj;
=================================================================================
编程题目
1.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。
2.写一个实现对一段字符串翻转的方法 。
class StringReversal
{
public String StrReversal(String oldString)
{
//Convert string to char arry
Char[] oldCharArray = oldString.ToCharArray();
//Reversal from zero
int index = 0;
int cLength = oldCharArray.Length - 1;
while(index<cLength)
{
//use char CTemp to swap
char cTemp = oldCharArray[index];
oldCharArray[index] = oldCharArray[cLength];
oldCharArray[cLength] = cTemp;
index ++;
cLength --;
}
//Convert char array to string only have the constructor method
string newString = new string(oldCharArray);
return newString;
}
}
3.实现一个冒泡排序算法?
public void BubbleSort(int[] R)
{
int i,j,temp; //交换标志
bool exchange;
for(i=0; i<R.Length; i++) //最多做R.Length-1趟排序
{
exchange=false; //本趟排序开始前,交换标志应为假
for(j=R.Length-2; j>=i; j--)
{
if(R[j+1]<R[j]) //交换条件
{
temp=R[j+1];
R[j+1]=R[j];
R[j]=temp;
exchange=true; //发生了交换,故将交换标志置为真
}
}
if(!exchange) //本趟排序未发生交换,提前终止算法
{
break;
}
}
}
4. 用拷贝的方法来创建数组
using System;
class Test
{ public static void Main(String []args)
{ int [] Array1=new int [5]{4,3,2,1,0};
int [] Array2=(int[])Array1.Clone();
//创建新数组但内容为Array1
for(int i=0; i<Array2.Length;i++)
{ //获得Array2[i]数组中的某个元素的值并显示出其值
Console.WriteLine("Array2[{0}]:{1}",i,Array2[i]);
}//显示的结果为 4、3、2、1、0
}
}
5.找最大数游戏:有一批数,请你快速地找出最大数及其位置。
6. 九九乘法表
static void Main(string[] args)
{ for(int i=1; i<10; i++)
{ for(int j=1; j<= i; j++)
{ int s = i * j;
Console.Write(j.ToString() + "×" + i.ToString() + "=" + s.ToString() + " ");
}
Console.WriteLine("");
}
Console.ReadLine();
}
7. 最大公约数
max_gongyue(int m,int n)
{
int i=min(m,n)-1;
for(;i>1;i--)
if((!(m%i))&&(!(n%i)))
break;
return i;
}
8. 求数的阶乘
static void Main(string[] args)
{ while(true)
{Console.Write("请输入一个正整数(输入0退出):");
int x = int.Parse(Console.ReadLine());
if (x == 0)
{break;}
int y = x;
checked
{ for(int i=x-1; i>0; i--)
{y = y * i; }
}
Console.WriteLine("{0}的阶乘是:{1}", x, y);
}
Console.WriteLine("按回车键退出...");
Console.ReadLine();
}
9. 折半查找并显示进度
int BinarySearch(Type a[],const Type& x,int n)
{
int left=0;
int right=n-1;
while(left<=right){
int middle=(left+right)/2;
if (x==a[middle]) return middle;
if (x>a[middle]) left=middle+1;
else right=middle-1;
}
return -1;
}
10. 四则运算题目
static void Main(string[] args)
{
Console.WriteLine("输入运算式");
for(int i=0;i<args.Length;i++)
{
Console.WriteLine("输入的参数{0}:{1}",i,args[i]);
}
double a,b;
double y=0;
a=double.Parse(args[0]);
b=double.Parse(args[2]);
switch(args[1])
{
case"+":
{
y=a+b;
break;
}
case"-":
{
y=a-b;
break;
}
case"*":
{
y=a*b;
break;
}
case"/":
{
if(b==0)
{
Console.WriteLine("除数不能为0");break;
}
else{y=a/b;break;}
}
}
Console.WriteLine("结果为:{0}",y);
11.判断彩票是否中奖
输入一组数字(7位),判断这组数字中几等奖,判断规则如下
一等奖:中7个数;二等奖:中6个数
三等奖:中5个数;四等奖:中4个数;五等奖:中3个数
其它的没有中奖
最终打印出中几等奖,如中一等奖打印“一等奖”,没有中奖打印“没有中奖”
注:中奖号码为已知,可以自定义一组整型数组,如:
int [] luck = new int[7];
luck[0] = 0;luck[1] = 1;luck[2] = 2;luck[3] = 3;luck[4] = 4;luck[5] = 5;luck[6] = 6;
摘自http://blog.csdn.net/qdzx2008/archive/2009/06/09/4256006.aspx