.NET面试题

1.private、protected、public、internal修饰符的访问权限

   private 私有成员,只有在类的内部可以访问

   protected 保护成员,在类的内部和继承类中可以访问

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

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

2.ASP.NET页面之间传值得几种方式(Cookie 。Application等)

   1)QueryString

QueryString是一种非常简单的传值方式,可以将传送的值暴露在浏览器地址栏,如果传递对安全性

要求不高或结构简单的数值时,可以使用这个方式,但是传递数组或对象就不能用了

A。使用方法: a、在源页面中构造URL地址

                         b、在源页面使用 Response.Redirect(URL)重定向到上面的URL地址

                         c、才目的页面中使用 Response.QueryString["name"] 取出上面URL地址中传递的值

eg:

 (1)  index.aspx

private void Button1_Click(object sender, System.EventArgs e) 
{ 
  string s_url; 
  s_url = "b.aspx?name=" + Label1.Text; 
  Response.Redirect(s_url); 
}
(2)index2.aspx

   private void Page_Load(object sender, EventArgs e)

   {  

      Label2.Text = Request.QueryString["name"];

   }

2)Session

Session使用简单,不仅能传递简单数据类型,还能传递对象,数据量大小不限制,但是在Session

变量中存储大量的数据会消耗较多的服务器资源。容易丢失。

A。使用方法:a、在源页面中构造Session变量:Session["Name"]=“Value(Or Object)”

                       b、在目的页面使用Session变量取出传递的值。Result=Session["Name"]

B。Session不用时可以销毁,方法是 Session.Remove(“session名”)=====清除一个

                                                        Session.Clear()======清除所有

eg:

index.aspx

private void  Button_Click(object sender,System.EventArgs e)

{

    Session["name"]=Lable.Text;

}

index2.aspx

private void Page_Load(object sender,EventArgs e)

{

    string name;

    name=Session["name"].ToString();

}

3)Servere.Transfer

 这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导

到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的。

ps:比较Server.Transfer和Response.Redirect的区别。

a、Server.Transfer在服务器端完成,所以客户端浏览器中的URL地址是不会改变的;

      Response.Redirect是客户端完成,向服务器端提出新的页面处理请求,所以

      客户端浏览器中的URL地址是会改变的

b、Server.Transfer在服务器端完成,不需要客户端提出请求,减少了客户端对服务器端提出请求。

c、Server.Transfer只能够转跳到本地虚拟目录指定的页面,也就是工程项目中的页面,

     而Response.Redirect则十分灵活,可以跳转到任何URL地址。

d、Server.Transfer可以将前一个页面的各种类型的值传到新的页面;Response.Redirect

      则只能借助URL中带参数或是结合上面四种办法把各种类型的值传到新的页面。

使用方法:

  a、在源页面中使用Page类的Server.Transfer传递页面数据。Server.Transfer("b.aspx","false")

  b.在目的页面中,使用Context.Handler来接收数据:FormerPage formerPage = (FormerPage)Context.Handler; 然后用

formerPage的属性和方法来获取前一个页面的值,或者直接用Context.Items["myParameter "]

eg:

   index.aspx

   public string Name 

{ 
  get{ return Label1.Text;} 
} 
private void Button1_Click(object sender, System.EventArgs e) 
{ 
  Server.Transfer("b.aspx"); 
}

index2.aspx
private void Page_Load(object sender, EventArgs e) 
{ 
  a newWeb; //实例a窗体 
  newWeb = (source)Context.Handler; 
  string name; 
  name = newWeb.Name; 
}
3.C#中的委托是什么?事件是不是一种委托?
委托是一种特殊的引用类型,它将方法作为特殊的对象封装,从而将方法作为变量或参数进行传递,
事件是一种特殊的委托
using System;
namespase delegate
{
delegate void Function(double x,double y) //定义委托
class Program
{
static void Main()
{
Function fun;
double a=2,b=3;
Console.Write("请选择函数:");
int i= int.Parse(Console.ReadLine());
if(i==1)
{
fun=new Function(Add);
                     }
fun(a,b);
}
static void Add(double x,double y)
{
Console.WriteLine("{0}+{1}={2}",x,y,x+y);
}
}

}
该程序首先定义了一个委托类型 Function,注意delete关键字之后需要说明委托的返回类型
(没有返回类型位void)和参数类型,程序主方法首先创建了该类型的变量fun,之后可以将
指定的方法封装到该委托对象,注意方法的参数列表和返回类型都必须和委托的定义保持一致。
C#还允许将方法名直接写在委托赋值表达式的等号右边。eg: Function fun=Add;
4.override(重写)与overload(重载)的区别

   override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,

   重写(重新实现)父类中的方法。不管重写还是覆盖都不会影响父类自身的功能。

   覆盖使用new关键字,重写会改变父类方法的功能即调用子类的功能,覆盖仍调用父类功能

   虚方法,实方法都可被覆盖,抽象方法和接口不可以。

   重写(覆盖)的规则:

   1、重写方法的参数列表与返回值必须完全与被重写的方法的相同

   2、重写方法的访问修饰符大于被重写方法的访问修饰符(public>protected>default>private)

   3、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;

   4、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。

   5、静态方法不能被重写为非静态的方法(会编译出错)。

   6、父类中被重写的方法必须声明为virtual或abstract类型,子类方法用override关键字修饰,

eg:

    public  class  parent

    {

    public virtual string Function()
{
return "1";
}
}
 public class A : parent
{
public override string Function()
{
return "2";
}
}
public class B : parent
{
public new string Function() //new放在public前面和后面效果一样。且不会编译出错
{
return "3";
}
}
 public class JustForTest
{
public void DoTest()
{
parent p=new parent();
A a = new A();
Parent parent1=new A();
B b = new B();
Parent parent2=new B();

Console.WriteLine(p.Function); //输出1
            Console.WriteLine(a.Function());//输出2
Console.WriteLine(parent1.Function);//输出2
Console.WriteLine(b.Function());//输出3
Console.WriteLine(parent2.Function)//输出1
}
}
注:B b = new parent()编译出错(无法将类型parent隐式转换为B)
overload
重载发生在同一个类中,方法名相同,参数不同,返回类型可以不同的情况。应对不同需求
5.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
C#索引器可以根据任何数据类型进行索引
6.用.NET做B/S的系统,使用几层来开发,为什么这样分层?
一般为三层,数据访问层,业务逻辑层,表示层
数据访问层实现对数据库的增删改查
业务层一般分为两层,业务表现层实现对表示层的沟通,业务规则层实现用户密码的安全等
表示层实现与用户的交互
优点:分工明确,易于调试,具有可扩展性。缺点:增加成本
7.什么叫应用程序域?
8.CTS、CLS、CLR分别作何解释?
CTS:通用语言系统 。CLS:通用语言规范 。CLR:公共语言运行库
9.什么是装箱?
从值类型转换为引用类型是装箱
10..net中读写数据库需要用到哪些类?他们的作用?
DataSet: 数据存储器
DataTable:用于存储一个表的数据
SqlConnection:用于创建一个到数据库的连接
SqlCommand:执行SQL语句命令
DataReader:用于顺序读取数据
DataAdapter:数据的集合,用于将数据填充到DataSet或DataTable
11.ASP.NET的身份验证方式有哪些?分别是什么原理?
windows:使用 IIS 验证方式
Forms:使用基于窗体的验证方式
Passport:采用 Passport cookie验证模式
None:不采用任何验证方式
12.什么是Code-Behind技术?
Code-Behind就是代码分离,在 ASP.NET 中通过 aspx页面指向 cs 文件的方式
实现逻辑和处理逻辑的分离,有助于 web 应用程序的创建,合理分工,易于维护
13.在.net中,配件的意思是?
14.常用的调用 WebService 的方法有哪些?
1)使用WSDL.exe命令行工具
2)使用VS.NET中的Add Web Reference菜单选项
15. .net Remoting的工作原理是什么?
服务器向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
注:
Remoting,简而言之,我们可以将其看着是一种分布式处理方式。.net Remoting
和 webservice都是用来通信的框架,可以像调用本地对象一样调用远程对象,区别是
(1)webservice是使用应用层 http 协议封装的,可以被很多其他的语言调用,只要知道
webserice的地址,就可以使用,简单但效率一般,.net Remoting是用传输层 tcp协议封装的,
可以以二进制传输数据,效率高。.net Remoting是基于.net的反射机制,只方便.net使用
(2)webservice能穿越防火墙,http协议是现在广泛应用的协议,防火墙一般不会做屏蔽,
并不是说webserivece有某种功能可以穿越防火墙
16.C#中,string str1=null 与 string str2=“”的区别
str2是一个空字符串,空字符串是一个特殊的字符串,只不过它的值为空,在内存中是有
明确的指向的,string str1=null没有分配内存,引用指向了一个null,string str2=“”
这个引用指向了一个地址。地址里面存的是空的字符
17.类(class)和结构(struct)的异同
a、类是引用类型,其实例被分配在托管堆上。结构是值类型,实例被分配在栈上。
b、类实例的赋值,赋值的是引用地址。结构实例的赋值,赋值的是值
c、类作为参数类型传递,传递的是引用地址,结构传递的是值
d、类支持继承,结构不支持
e、结构总是有一个默认的无参构造函数,其不允许删除和重新定义,也不会因为
我们定义了其他带参构造函数而自动消失,而类里面如果被重载了一个或多个
带参构造函数,则编译器不再为该类提供默认的构造函数
18. SQL SERVER服务器中,给定表table1中有两个字段ID、LastUpdateDate,ID
表示更新的事物号,LastUpdateDate表示更新时的服务器事件,请获得最后更新的事物号
select id from table1 where lastUpdateDate=(select max lastUpdateDate from table1)
19.写出一条sql语句,取出表A中第31到40的记录(以自动增长的id作为主键,id可能不是连续的)
select top 10 * from A where id not in(select top 30 id from A)
20.GC是什么?
GC是 .NET 的垃圾回收机制
在 .NET 中,托管代码的内存管理是自动的,有GC 进行管理对于非托管堆的代码,.NET无法
进行管理。CLR运行时,内存分为托管堆和栈两部分,其中,栈是用来存储值类型的数据,托管
堆是用来存储引用类型的数据,而托管堆是GC 处理的内存部分。进程中的每个线程都有自己的堆栈
21. String s=new String("xyz");创建了几个String OSbject?

         

22.接口和抽象类
1)抽象类
抽象类是包含抽象方法的类,不能被实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用
new关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类
;除此之外,具有类的其他特性;重要的是抽象类可以包括抽象方法,
这是普通类所不能的。抽象方法只能声明于抽象类中,且不能包含任何实现,派生类必须覆盖他们。另外,
抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖他们。
2)接口
接口是引用类型的,类似于类,一个类可以实现多个接口,当一个类继承某个接口时,它不仅要实现该接口
定义的所有方法,还要实现从其他接口继承的所有方法,接口和抽象类的相似之处有三点:
a、不能实例化
b、包含未实现的方法声明
c、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员
另外,接口还有以下特性:
接口除了可以包含方法外,还可以包含属性、事件、索引器;而且这些都被定义为共有的。除此之外,
不包含其他的成员,一个类可以继承多个接口,但只能继承一个类(包括抽象类)
eg:

   

   接口可以继承接口,抽象类可以实现接口

23.是否可以继承String类?

String类是final类,不可被继承

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

List继承自Collection接口,Set,Map不是

25.Set里的元素是不能重复的。用什么方法来区分重复与否?使用 == 还是equals()?

用 iterator()方法来区分重复与否,equals()是判断两个set值是否相等。

equals和 == 决定引用值是否指向同一对象

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

27.sleep()和wait()有什么区别?

sleep()是使线程休眠一段时间,在sleep时间间隔期满后,线程不一定立即恢复执行。

因为在那个时刻,其他线程可能正在运行而且没有被调度为放弃执行除非

a、醒来的线程具有更高的优先级。b、正在运行的线程因为其他原因阻塞

wait()是线程交互时,如果线程对一个同步对象发出一个wait()调用,该线程会暂停执行,

被调对象进入等待状态,知道被唤醒或等待时间到。

28.谈谈final,finally,finalize的区别

 

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

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

IIS中有进程回收机制,系统繁忙的话,Session会丢失,可以用SQL Server数据库来存储Session,

不过,这种方式比较慢,而且无法捕获Session的End事件。

31.进程和线程的区别

比喻:

如果把上课的学生比作进程,那么每个学生就是一个线程,他们共享教室,即线程共享进程的内存空间。

每个时刻,只能有一个学生问老师问题,老实回答完毕,轮到下一个。即线程在一个时间内占有CPU

一个进程至少有一个线程,也可以有多个线程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是操作系统进行资源分配和调度

的一个独立单位。同一进程的所有线程共享相同的资源和内存。进程间相互独立。

线程是进程的一个实体,被CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程只有启动后才会起作用。启动后,如果没有终止,不能再次启动。

可以在一个进程中为不同的线程指定不同的优先级。高优先级的线程可以阻止低优先级的线程执行

32.堆和栈的区别

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

堆:一般由程序员分配释放

33. ASP.NET 和 ASP相比,主要有哪些进步?

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

a、QueryString  数据直接在URL中以明文传递,对于用户来说是可见的,但是可以加密,有点是简单方便

缺点是传递的数据量少,且不能传递对象

eg:

Src.aspx

private void Button_Click(Object  sender,EventArgs e)

{

       //将待传送的数据保存到URL中

       strUrl="Dst.aspx?id="+TextBox1.Text;

       //重定向到目标页面

        Response.Redirect(strUrl);

}

Dst.aspx

private void  Page_Load(object  sender,EventArgs  e)

{

      //接收数据并显示到label控件

      Label1.Text=Request.QueryString["id"]

}

b、Session

用户数据存储在服务器端;可以直接存储对象,且无大小限制;有效期与用户的活动时间

有关,具体为用户活动事件+自定义延长时间。缺点是:由于web应用程序对每个用户都会生成

Session变量,因此他会随着用户数量的增多而加重服务器的负担

eg:

Src.aspx

Session["id"] = TextBox1.Text;

Response.Redirect("Dst.aspx");

Dst.aspx

Label1.Text = Session["id"].ToString();

c、通过 URL 传值

获取值:string  name=TextBox1.Text.Trim();

               string  password = TextBox2.Text.Trim();

通过URL传值:

                        Response.Redirect("index.aspx ? name="+name+" & password="+password);

index.cs

取值:

          Request.QueryString["name"];

          Request.QueryString["password"]

d、使用 Application 对象

Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。

与Session对象相比,两者对数据的存储和访问都相似,不同之处在于,每个web应用程序只生成一个

Application实例,并应用于所有的用户和会话,有效期为整个web应用程序的声明周期。

a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
 {
     Application["name"] = Label1.Text;
     Server.Transfer("b.aspx");
或者
Response.Redirect(“b.aspx”); } b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) { string name; Application.Lock(); //加锁 name = Application["name"].ToString(); Application.UnLock(); //解锁 }
e、使用Cookie对象变量
与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,
而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
eg:
a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
 {
     HttpCookie cookie_name = new HttpCookie("name");
     Response.Cookies["name"].value=TextBox.Text;
     Server.Transfer("b.aspx");
 }
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
 {
     string name;
     name = Request.Cookie["name"].Value.ToString();
 }
35. 向服务器发送请求有几种方式?
 post和get。
a、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内的各个字段一一对应,在URL中
可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML Header内一起传送到action
属性所指的URL地址。用户看不到这个过程
b、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form
获取提交的数据。两种方式的参数都可以使用Request获取
c、get传送的数据量较小,不能大于2KB。post传送额数据量较大,一般默认为不受限制。
d、get安全性较低,post安全性较高
e、<form method="get" action="a.asp?b=b">跟<form method="get" action="a.asp">是一样的,也就是说,
action页面后边带的参数列表会被忽视;而<form method="post" action="a.asp?b=b">跟
<form method="post" action="a.asp">是不一样的。
36、需要实现对一个字符串的处理。首先将该字符串首尾的空格去掉,如果字符中间还有连续的空格的话,仅保留
一个空格,即允许字符串中间有多个空格,但连续的空格数不能超过一个。
例如:string inputStr=” xx xx “;

inputStr=inputStr.Trim();

inputStr=Regex.Replace(inputStr.Trim(),” {2,}”,” “);

注:Replace的第二个参数的”{2,}”前有一个空格,第三个参数是一个空格,表示,出现了2个或多个空格时将其替换成1个空格

37.什么叫sql注入,如何防止?请举例说明

38.什么是反射?

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

40.什么是asp.net中的用户控件?

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

42、C#中的三元运算符是?

43、<%# %> 和 <% %> 有什么区别?

44. &和&&的区别

&是位操作符,&&是与,逻辑操作符。
Expression1&&Expression2: Expression1不成立,则Expression2不执行;
Expression1&Expression2: Expression1不成立,则Expression2照样执行

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

<script language=javascript>

setTimeout('window.close();',3000);

function show(){if (window.event.button == 1)

{

alert("左");

}else if (window.event.button == 2)

{

alert("右");

}}

</script>

46、在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?

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

47、在.net(C# or vb.net)中如何取消一个窗体的关闭。答:

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

{

e.Cancel=true;

}

48、维护数据库的完整性、一致性,你喜欢用触发器还是自写业务逻辑?

尽可能使用约束,包括Check约束、主键约束、非空约束、外键约束、唯一键,这种方式效率最好;其次使用触发器,

这种方式可以保证无论何种业务系统访问数据库都可以保证数据库的完整性和一致性;最后考虑自写业务逻辑,这种

方式效率最低且编程复杂。

49、ADO.NET相对于ADO等主要有什么改进?ASP.NET与ASP相比,主要有哪些进步?

50、new有几种用法?

51、如何把一个Array复制到ArrayList中?

foreach( object o in array )
{
       arrayList.Add(o)
}

52、DataGrid、DataSource可以连接什么数据源

53、概述反射和序列化

54、概述OR/Mapping 的原理

55、用sealed修饰的类有什么特点

56、什么是ASP.NET中的用户控件

57、什么叫应用程序域?
什么是受管制的代码?
什么是强类型系统?
什么是装箱和拆箱?
什么是重载?
CTS、CLS和CLR分别作何解释?

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

59、.NET中读写XML的类都归属于哪些命名空间?

60、解释一下UDDI、WSDL的意义及其作用

61、什么是SOAP,有哪些应用。

62、如何理解.NET中的垃圾回收机制。

63、常用的调用Webservice方法有哪些?

HTTP-get Http-post Http-soap

64、请说明.net中的错误处理机制,并举例

65、请列出c#中几种循环的方法,并指出他们的不同

66、请指出.net中所有类型的基类==object

67、请指出GAC的含义

68、什么是WEB控件?使用WEB控件有那些优势?

69、请解释ASP.NET中以什么方式进行数据验证?

70、请谈谈对正则表达式的看法?

71、ASP.NET中共有几种类型的控件?各有什么区别?

72、WEB控件可以激法服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。

73、WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?

74、请解释ASP.NET中的web页面与其隐藏类之间的关系?

75、什么是viewstate,能否禁用?是否所用控件都可以禁用?

76、当发现不能读取页面上的输入的数据时很有可能是什么原因造成的?怎么解决

77、请解释一个WEB页面中代码执行次序。

78、请解释什么是上下文对象,在什么情况下要使用上下文对象

79、请解释转发与跳转的区别?

80、 请解释ASP.NET中Button、LinkButton、ImageButton 及HyperLink这四个控件之间的功别

81、请解释一下.NET多层应用程序中层与层之间以那几种方式进行数据传递。并解释你自己的项目中采用那种方式进行。

82、如果出现ASP.NET中的事件不能触发可能由于什么原因造成?

83、如果需要在DataGrid控件中的某一列中添加下拉列表框并绑定数据怎么解决?

84、请解释接口的显式实现有什么意义?

85、 什么情况用HTML控件,什么情况用Web控件,并比较两者差别

86、C#中的接口和类有什么异同。

87、重写、重载和隐藏三个概念的区别

88、前端页面由哪三层构成?分别是什么?作用是什么?

89、行内元素有哪些?块级元素有哪些?css的盒模型?

90、css引入的方式有哪些?link和@import的区别

91、css选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先级最高?

92、css的基本语法构成是?

93、描述css reset的作用

94、解释css sprites如何使用

95、你如何对网站的资源和文件进行优化?

96、闭包是什么?有什么特性?对页面有什么影响?

97、ajax请求get和post的区别

98、== 和 === 的区别

99、请写一个方法将字符串倒叙输出

100、利用递归求5!

101、css中margin和padding 的区别

102、请用 js 截取字符串 abcdefg 的 efg

103、请用 JQuery 写出勾选 radiobox (name 为 rad)值为A的框

 

http://blog.csdn.net/u013519551/article/details/51220841

 http://www.jobui.com/mianshiti/it/net/3069/

http://www.cnblogs.com/xrq730/p/5260294.html

这三篇文章很好。

 







原文地址:https://www.cnblogs.com/1955/p/7424095.html