smiles

导航

网上收集的面试题

1、在C#中,string str = null 与 string str = "    "有何区别?
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间.

===============================================

2、请简述在.net中类(class)与结构(struct)的异同。
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的。

===============================================

3、C#中有没有运算符重载?能否使用指针?
答:C#中也有运算符重载,如对运算符“+”进行重载;C#中也可以使用指针,但要声明为unsafe。

===============================================

4.Internal修饰符有什么含义?
答:很多C++程序员可能不太熟悉internal访问修饰符,因为C++中没有这个关键字。internal数据访问修饰符,表示对所修饰的成员在当前程序集内可以进行没有任何限制的访问;但在当前程序集外部则不能进行访问,其可访问性级别低于public ,高于protected。

===============================================

5.对象能否调用静态方法
答:不能。对于类内部定义的静态变量及静态方法,该类的对象均不能调用。

===============================================

6.CLR与IL分别是什么含义?
答:CLR:公共语言运行时,类似于Java中的JVM,Java虚拟机;在.net环境下,各种编程语言使用一种共同的基础资源环境,可以说,CLR就是操作系统和.net应用程序之间的支撑系统。.net应用程序的所有调用,都直接通过CLR,而不知道操作系统的存在,加强了程序代码的执行安全性。同时,操作系统也针对CLR而优化,提升了操作系统的健壮性和安全性。 还可以这样看:CLR就是具体的编程语言如C#与操作系统之间的翻译转换,同时它为具体的编程语言提供了许多资源:
?   面向对象的编程模型(继承、多态、异常处理和垃圾收集等)
?   安全模型
?   类型系统
?   所有.NET基类
?   许多.NET Framework类
? 开发、调试和评测(profiling)工具
?   执行和代码管理
?   IL到本地代码(IL-to-native)转换器和优化器
IL,中间语言,也称MSIL,微软中间语言,或CIL,通用中间语言;所有.NET源代码(不管用哪种语言编写)在进行编译时都被编译成IL。可以说是真正运行在CLR这个虚拟机上的语言,在应用程序运行时被即时(Just-In-Time,JIT)编译器处理成为机器码,被解释及执行。

===============================================

7、分析以下代码,完成填空。
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代码执行完后,i=               j=        
答:i=13,j=10。这道题,考察你是否知道汉字是由两个字节构成。

===============================================

8、根据delegate的知识,完成以下用户控件中代码片段的填写。
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
private void toolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
   //请在这里补齐代码用来调用OnDBOperate委托签名的OnNew事件。
}
}
}
答: if( OnNew != null ) OnNew( this, e );

===============================================

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

===============================================

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

===============================================

11.构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

===============================================

12.是否可以继承String类?
答:String类是final类故不可以继承。

===============================================

13.两个对像值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,有相同的hash code。

===============================================

14.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一个整型,字符或字符串,因此可以作用在byte和long上,也可以作用在string上。

===============================================
15.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。

===============================================

16. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
答:都不能。

===============================================

17.List, Set, Map是否继承自Collection接口?
答:List,Set是Map不是

===============================================

18.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对像equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

===============================================

19.数组有没有length()这个方法? String有没有length()这个方法?
答:数组和string都没有Length()方法,只有Length属性。

===============================================

20.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正确。

===============================================

21.谈谈final, finally, finalize的区别。
答:
final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此 一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中 不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 final的方法也同样只能使用,不能重载
finally-再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会 执行,然后控制就会进入 finally 块(如果有的话)。finalize-方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对像从内存中清除出去之前做必要的清理 工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对像之前对这个对象调用的。

===============================================

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

===============================================

23.Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。

===============================================

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

===============================================

25.堆和栈的区别?
答:栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小

===============================================

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

===============================================

27.ASP。NET与ASP相比,主要有哪些进步?
答:asp解释形,aspx编译型,性能提高,可以跟美工的工作分开进行,更有利于团队开发。

===============================================

28.产生一个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];

===============================================

29.请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
答:session(viewstate) 简单,但易丢失
application 全局
cookie 简单,但可能不支持,可能被伪造
input ttype="hidden" 简单,可能被伪造
url参数 简单,显示于地址栏,长度有限 数据库 稳定,安全,但性能相对弱

===============================================

30.请指出GAC的含义?
答:全局程序集缓存。

===============================================

31.向服务器发送请求有几种方式?
答:get,post。get一般为链接方式,post一般为按钮方式。

===============================================

32..DataReader与Dataset有什么区别?
答:一个是只能向前的只读游标,一个是内存中的表。
===============================================

33.软件开发过程一般有几个阶段?每个阶段的作用?
答:需求分析,架构设计,代码编写,QA,部署

===============================================

34.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令 和语句 new 创建实例 new 隐藏基类中方法。
答:using 引入名称空间或者使用非托管资源 。new 新建实例或者隐藏父类方法

===============================================

35..需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.
答:string inputStr=" xx xx ";
    inputStr=Regex.Replace(inputStr.Trim()," *"," ");

===============================================

36.下面这段代码输出什么?为什么?
int i=5;
int j=5;
if (Object.ReferenceEquals(i,j))
Console.WriteLine("Equal");
else
Console.WriteLine("Not Equal");
答:不相等,因为比较的是对像

===============================================

37.什么叫做SQL注入,如何防止?请举例说明。
答:利用sql语言漏洞获得合法身份登陆系统。如身份验证的程序设计成:
SqlCommand com=new SqlCommand("Select * from users where username='"+t_name.text+"' and pwd='"+t_pwd.text+"'");
object obj=com.ExcuteScale();
if(obj!=null)
  {
    //通过验证
  }
这段代码容易被sql注入。如用户在t_name中随便输入,在t_pwd中输入1' and 1='1  就可以进入系统了。

===============================================

38.override与重载的区别
Override用来重写父类的方法,重载使用相同名的方法或操作符拥有不同类型的参数

===============================================

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

===============================================

40.C#中接口和类的异同
接口和类都是类,不同的事,接口只包含方法或属性的声明,不包含具体实现方法的代码,接口可以实现多继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法或属性。接口主要定义一种规范,统一调用方法,在大型项目中接口正发挥日益重要的作用。

===============================================

41.重载与覆盖的区别
1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。
2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
3、覆盖要求参数列表相同;重载要求参数列表不同。
4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。

===============================================

42.DataReader和DataSet的异同
DataReader用于读取数据,DataSet用于在内存中保存数据。
DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作...

===============================================

43.<%# %> 和 <%  %> 有什么区别?
答:<%# %>表示绑定的数据源
    <% %>是服务器端代码块

posted on 2009-01-24 19:03  心欣  阅读(144)  评论(0编辑  收藏  举报