.NET 面试题总结

1. String str=new String(“a”)和String str = "a"有什么区别?
String str = “a”; 这个只是一个引用,内存中如果有“a"的话,str就指向它,如果没有才创建,如果后还用到"a"这个字符串的话并且是这样用: String str1 = “a”; String str2 = “a”; String str3 = “a”; 这4个变量都共享一个字符串"a" 而String str = new String(“a”);是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str
2.判断字符串变量str是否为空的一下三种方法哪个性能更优
a、str= ="";b、str= =String.Empty;c、str.Length= =0;?答案是c;
3.string与String的区别
string、int是C#定义的类型,而String、Int32是.net类型即是CTS类型; string 是 .NET 框架中 System.String 的别名。string在编译的时候会转化为String类
4.虚方法(virtual )和抽象方法(abstract)的区别?
1:抽象方法仅有声明,而没有任何实现,如abstract someMethod();,虚方法却不能如此
virtual用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。
2:子类继承父类,可以对父类中的虚方法进行重写、覆盖、不处理三种处理(见5),对抽象方法却必须实现
5.子类对父类中虚方法的处理有重写(override)和覆盖(new),请说明它们的区别?
有父类ParentClass和子类ChildClass、以及父类的虚方法VirtualMethod。有如下程序段: ParentClass pc = new ChildClass();pc.VirtualMethod(…); 如果子类是重写(override)父类的VirtualMethod,则上面的第二行语句将调用子类的该方法,如果子类是覆盖(new)父类的VirtualMethod,则上面的第二行语句将调用父类的该方法
6.抽象类(abstract)和接口(interface)的区别
抽象类可以有自己的实现,接口却仅有声明,可以有自己的静态数据字段; java和C#中可以实现多个接口,却只能继承一个抽象类(或者非抽象类)(单继承,和c++的多继承不同);
7.填空:
(1)面向对象的语言具有 继承性多态性封装性
(2)能用foreach遍历访问的对象需要实现 IEnumerable接口或声明GetEnumerator方法的类型。
(3)列举ADO.net中的五个主要对象
Connection,Command,DataReader,DataAdapter,DataSet
connection 连接对象 ;command 命令对象,指示要执行的命令和存储过程; datareader是一个向前的只读的数据流; dataadapter是功能强大的适陪器,支持增删改查的功能; dataset是一个数据级对象,相当与内存中的一张表或多张表。
8.不定项选择:
(1) 以下叙述正确的是:BC
A. 接口中可以有虚方法。 B. 一个类可以实现多个接口。
C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。
(2) 从数据库读取记录,你可能用到的方法有: BCD
A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader
9.简述 private、 protected、 public、 internal 修饰符的访问权限。
A.Private:关键字是一个成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结构体中才是可访问的, 同一体中的嵌套类型也可以访问那些私有成员

B.Protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。有关 protected 与其他访问修饰符的比较,请参见可访问性级别,只有在通过派生类类型发生访问时,基类的受保护成员在派生类中才是可访问的
C.Internal关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的

D Protected Internal 它可以看作是Protected与Internal的并集,意思是:如果是继承关系,无论在不在同一程序集里都能访问;如果不是继承关系,那么只能在同一程序集内访问。

E.Public具有最高级别的访问权限,对访问成员没有限制。
10.写出一条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)
11.列举ASP.NET页面之间传递值的几种方式。
1.使用QueryString, 如…id=1; response. Redirect()2.使用Session变量3.使用Server.Transfer
12.写出程序的输出结果

class Class1 {
		private string str = "Class1.str";
		private int i = 0;
	static void StringConvert(string str) {
			str = "string being converted.";
	 }
	static void StringConvert(Class1 c) {
		c.str = "string being converted.";
	 }
	static void Add(int i) {
		i++;
	}
	static void AddWithRef(ref int i) {
		i++;
	}
	static void Main() {
		int i1 = 10;
		 int i2 = 20;
		 string str = "str";
		Class1 c = new Class1();
		Add(i1);
	 	AddWithRef(ref i2);
	 	Add(c.i);
	 	StringConvert(str);
		StringConvert(c);
	 	Console.WriteLine(i1);
	 	Console.WriteLine(i2);
	 	Console.WriteLine(c.i);
	 	Console.WriteLine(str);
	 	Console.WriteLine(c.str);
	 }
}

10;21;0;Str;string being converted.
13.写出程序的输出结果

public abstract class A
{
	public A()
	{
		Console.WriteLine('A');
	 }
	public virtual void Fun()
	{
		Console.WriteLine("A.Fun()");
	}
}
public class B: A
{
	public B()
	{
		Console.WriteLine('B');
	 }
	public new void Fun()
	{
		Console.WriteLine("B.Fun()");
	}
	public static void Main()
	{
		A a = new B();
		a.Fun();
	}
}

A B
A.Fun()
14.写出程序的输出结果:

 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);
	}
}

2 5 1 6
15.一列数的规则如下: 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);
  			 } 
		}
 }

16.程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求: 1.要有联动性,老鼠和主人的行为是被动的。2.考虑可扩展性,猫的叫声可能引起其他联动效应。
要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分) <2>从Mouse和Master中提取抽象(5分) <3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)

 public interface Observer { 
 	void Response(); //观察者的响应,如是老鼠见到猫的反映
  }
 public interface Subject {
  	void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠 
  }
public class Mouse : Observer {
	private string name; 
	public Mouse(string name, Subject subj) {
		 this.name = name; subj.AimAt(this);
	  } 
	public void Response() { 
		Console.WriteLine(name + " attempt to escape!"); 
	}
} 
public class Master : Observer { 
	public Master(Subject subj) { 
		subj.AimAt(this); 
	}
	public void Response() { 
		Console.WriteLine("Host waken!");
	} 
} 
public class Cat : Subject { 
	private ArrayList observers; public Cat() { 
		this.observers = new ArrayList(); 
	} 
	public void AimAt(Observer obs) { 
		this.observers.Add(obs); 
	} 
	public void Cry() { 
		Console.WriteLine("Cat cryed!"); 
		foreach (Observer obs in this.observers) { 
			obs.Response(); 
		} 
	} 
} 
class MainClass { 
	static void Main(string[] args) { 
		Cat cat = new Cat(); 
		Mouse mouse1 = new Mouse("mouse1", cat); 
		Mouse mouse2 = new Mouse("mouse2", cat); 
		Master master = new Master(cat); cat.Cry(); 
	} 
}
 //-------------设计方法二: 使用event -- delegate设计..//
public delegate void SubEventHandler(); 
public abstract class Subject { 
	public event SubEventHandler SubEvent;
	protected void FireAway() { 
	 	if (this.SubEvent != null) {
	 		this.SubEvent(); 
	 	}
	} 
} 
public class Cat : Subject { 
	public void Cry() { 
		Console.WriteLine("cat cryed."); 
		this.FireAway(); 
	} 
} 
public abstract class Observer { 
	public Observer(Subject sub) { 
		sub.SubEvent += new SubEventHandler(Response); 
	} 
	public abstract void Response();
} 
public class Mouse : Observer { 
	private string name; 
	public Mouse(string name, Subject sub) : base(sub) { 
		this.name = name; 
	} 
	public override void Response() { 
		Console.WriteLine(name + " attempt to escape!"); 
	} 
} 
public class Master : Observer { 
	public Master(Subject sub) : base(sub){} 
	public override void Response() { 
		Console.WriteLine("host waken"); 
	} 
} 
class Class1 { 
	static void Main(string[] args) { 
		Cat cat = new Cat(); 
		Mouse mouse1 = new Mouse("mouse1", cat); 
		Mouse mouse2 = new Mouse("mouse2", cat); 
		Master master = new Master(cat); cat.Cry(); 
	} 
}

17. A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程.请附code

public class TestB {
        public TestB(){
            Console.Write("begin create B object"r"n");
        }
        TestB() {
            Console.Write("begin destory B object"r"n");
        }
    }
    public class TestA : TestB{
        public TestA(){
            Console.Write("begin create A object"r"n");
        }
        TestA() {
           Console.Write("begin destory A object"r"n");
        }
    }

18…Net中读写数据库需要用到哪些类?他们的作用
sqlconnection 连接数据库;sqlcommand 执行T-SQL语句,或存储过程;SQLdatareader读取数据;dataadapter是dataset与数据源之间的桥梁;dataset把从数据库中所查询的数据保留起来,是一个数据级对象,相当与内存中的一张表或多张表。
19.ASP.net的身份验证方式有哪些?分别是什么原理?
asp.net提供了3种认证方式: windows身份验证, Forms验证和Passport验证.
windows, 身份验证:IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问.
Forms验证:用Cookie来保存用户凭证,并将未经身份验证的用户重定向到自定义的登录页.
Passport验证:通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录和核心配置文件服务.
20.解释一下UDDI、WSDL的意义及其作用。
UDDI(Universal Description, Discovery and Integration)统一描述、发现和集成协议,是为解决Web服务的发布和发现问题而制订的新一代基于Internet的电子商务技术标准。它包含一组基于Web的、分布式的Web服务信息注册中心的实现标准,以及一组使企业能将自己提供的Web服务注册到该中心的实现标准。
UDDI利用SOAP消息来查找和注册Web服务。并为应用程序提供了一系列接口来访问注册中心。
具体是:
1、UDDI 指的是通用描述、发现与集成服务
2、UDDI 是一种用于存储有关 web services 的信息的目录。
3、UDDI 是一种由 WSDL 描述的 web services 界面的目录。
4、UDDI 经由 SOAP 进行通信
5、UDDI 被构建入了微软的 .NET 平台
UDDI 规范帮助我们解决的问题:
1、使得在成百万当前在线的企业中发现正确的企业成为可能
2、定义一旦首选的企业被发现后如何启动商业
3、扩展新客户并增加对目前客户的访问4、扩展销售并延伸市场范围
5、满足用户驱动的需要,为在全球 Internet 经济中快速合作的促进来清除障碍
WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。
WSDL的作用:
Web services 可把您的应用程序转换为 web 应用程序。通过使用 XML,可以在应用程序间传送消息。最大的意义就是不管你使用什么的语言编写的WEB应用,只要有WSDL,便可以自由的调用!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆皮没有豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值