刚毕业1年2年3年工作经验都可用的C#面试题及答案(设计模式在后
更新时间:2024-06-26 13:08:01 阅读量: 综合文库 文档下载
- 刚毕业1年也属于应届生吗推荐度:
- 相关推荐
C#面试题(设计模式在后面)
2. const和readonly有什么区别?
答:const可以用于类的成员常量和局部常量,必须在声明时赋值,之后不可以对常量进行赋值。而readonly只能用于类的成员变量不能用于局部变量,在声明时可以不赋值,除了在构造函数中可以再次赋值外,其它的地方和const一样也不能赋值。 5. 接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?答 答:区别如下
(1) 抽象类可以有抽象成员(无具体实现),也可以有非抽象成员(有具体实现);接口只有抽象成员。
(2) 一个类不能同时继承多个抽象类,一个类可以同时实现多个接口。
如果多个子类中有很多代码是重复的,这时采用抽象类,因为可以将这些代码放到抽象类的非抽象方法中,这样可以达到代码复用。当实现多个接口时因为抽象类不支持,只能使用接口。
6. struct和class有什么区别
答:两者都可以有成员变量、属性、索引器、事件、函数、构造函数,主要区别如下: 区别点 结构 类 类型 值类型 引用类型
成员变量 在声明时不能赋值 可以赋值也可以不赋值
构造函数 可以不写,系统提供默认构造函数,默认构造函数中会将所有成员值设为0,如果写了构造函数则构造函数必须有参数,且在构造函数中必须为每一个成员赋值。 可以不写,系统提供默认构造函数,写了也没有结构中的限制。 析构函数 不能有析构函数 可以有析构函数
继承性 自定义的结构不能从类继承,但可以实现接口,结构都是密封(sealed),不能从结构继承 类没有限制
7. try后面一个finally,try中有一个return,那么finally中的代码会不会运行?如果运行,是在return后还是return前。 答:会运行,并且在return 后运行。
8. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。 答:该题解题思路有很多,主要是看运行效率如何,下面提供一种方法。 int[] array = new int[100]; int temp[] = new int[100]; for (int i = 0; i < 100; i++) {
temp[i]=i+1; }
Random rand = new Random(); for (int i = 0; i < 100; i++) {
int index = rand.Next(100-i-1); array[i] = temp[index]; temp[index]=temp[100-i-1]; }
9. C#中要使一个类支持foreach遍历,实现过程怎样? 答:必须实现IEnumerable,IEnumerator这两个接口,如下: public class MyList : IEnumerable,IEnumerator {
private int position = -1; string[] array = new string[4]; public MyList() {
array[0] = \array[1] = \array[2] = \array[3] = \}
#region IEnumerable 成员
//每次使用foreach时都会调用它得到一个枚举器 public IEnumerator GetEnumerator() { Reset();
return (this as IEnumerator); }
#endregion
#region IEnumerator 成员 //遍历时通过这个属性得到值 public object Current {
get { return array[position]; } }
//访问下一个元素时使用MoveNext移动位置
public bool MoveNext() {
if (position < array.Length-1) {
position++; return true; } else return false; }
//遍历前要使位置归位 public void Reset() {
position = -1; }
#endregion }
以下不用foreach遍历集合 MyList list=new MyList(); While(list.MoveNext()) {
Object o=list.Current; }
10. 以下程序有什么错? public class TestClass {
private int count; private static int y;
public static void setvalue () { count=1; y=1; } }
答:在静态函数中只能访问静态成员变量;以上代码访问了实例成员。
11. net中什么类不能被继承?
答:如果在类前加上sealed关键字,则表示该类为密封类,密封类不能被继承。 sealed 除了可以应用于类外,还可以应用于实例方法和属性。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed 修饰符必须始终与override一起使用。如:
//下面这个sealed使用正确,表示该类不能继承 public sealed class Test {
private int myVar;
//下面这个sealed错误,编译不会通过,因为sealed必须和override一起使用 public sealed int MyProperty {
get { return myVar; } set { myVar = value; } }
//下面这个sealed使用正确,表示如果该类不是密封类, //那么在派生类中也不可以重写该方法 public sealed override string ToString() {
return base.ToString(); } }
12. is 和as 有什么区别?
答:is用来判断一个实例是否属于某个类。如: Dog d=new Dog(); If(d is Dog) {
Console.WriteLine(“d是一只狗”); }
以上语句Console.WriteLine(“d是一只狗”);会运行,因为d is Dog返回true,如果Dog从Animal类继承并实现了IPet接口,则d is Animal和d is IPet都会返回true;
as用于在兼容的引用类型之间执行转换,如果转换失败则返回null,它等价于如下语句: expression is type ? (type)expression : (type)null 13. net中函数传递参数有那些方式?有什么区别?
答:传值和传引用,传引用又两种方式,ref和out,ref要求变量在传参前赋值,out可以不赋值。传引用必须是一个地址,传值是指将栈中的值拷贝到函数的参数,传引用表示传入的变量和接收参数是同一个变量 public class Test {
public int myVar; public int MyProperty {
get { return myVar; } set { myVar = value; } } }
以上这个类中有字段和属性 private void F(ref int i) { i = 100; }
有一个方法传递引用,调用方式如下: Test t = new Test(); F(ref t. MyProperty);
以上代码编译不能通过,因为属性不是变量,其实质是函数,如下则可通过 Test t = new Test(); F(ref t. myVar); 因为字段是变量
14. 一列数的规则如下: 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 <= 2) return 1; else
return Foo(i -1) + Foo(i - 2); } }
15. C#中的委托是什么?事件是不是一种委托?
答 :委托封装了函数指针的集合,它可以指向一组函数。 事件也是委托,是一种特殊的委托。 16. 请编程实现一个冒泡排序算法? 答:
int [] array = new int [*] ; int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++) {
for (int j = i + 1 ; j < array.Length ; j++) {
if (array[j] < array[i]) {
temp = array[i] ; array[i] = array[j] ; array[j] = temp ; } } }
17. 在下面的例子里 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(\} }
当使用new B()创建B的实例时,产生什么输出? 答:X=1,Y=0
当使用New创建B的实例时,因为B继承了A类,A的构造函数首先会被运行,但应当注意的是,虽然运行的是A的构造函数,但在A的构造函数中调用的函数首先是在B类中查找,因为PrintFields已被重写,所以最终运行B类中的PrintFields函数。 18. CTS、CLS、CLR分别作何解释? 答:
CTS:Common Type System 通用系统类型。
CLS:Common Language Specification 通用语言规范。 CLR:Common Language Runtime 公共语言运行库。 20. net Remoting 的工作原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。 21. 求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m 答:
int m = Convert.ToInt32(this.TextBox1.Text) ; int sum = 0 ;
for (int i = 0 ; i < m + 1 ; i++) {
if((i%2) == 1) {
sum += i ;
} Else {
sum = Sum - I ; } }
System.Console.WriteLine(sum.ToString()); System.Console.ReadLine() ;
其实还有一个很简单的方式,上面的表达式,把它分成1-2、3-4、5-6……可以看出,如果m是偶数,那么结果就是m/2*(-1),如果m是奇数,结果就是m-m/2 22. 列举ASP.NET 页面之间传递值的几种方式。
答. 1).使用QueryString, 如....?id=1; response. Redirect().... 2).使用Session变量 3).使用Server.Transfer 4).Application
5).
23. 请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? 答:在页面中调用下面的函数,SetTextBox(this); public void SetTextBox(Control ctrl) {
if (ctrl is TextBox) {
(ctrl as TextBox).Text=string.Empty; } else {
foreach (Control child in ctrl.Controls) {
SetTextBox(ctrl); } } }
24. 根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。 Class A {
public void Test(int i) { lock(this) { if (i>10) { i--; Test(i); } } } }
答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
25. 简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
答:WebSevice使用HTTP协议,因此可以穿透防火墙。而Remoting使用TCP/IP,二进制传送提高效率。
remoting是.net中用来跨越machine, process, appdomain进行方法调用的技术,对于三层结构的程序,就可以使用remoting技术来构建.它是分布应用的基础技术.相当于以前的DCOM;Web Service是一种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web Service令基于组件的开发和web的结合达到最佳,基于组件的对象模型
26. 公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路
答:根据点击的列头,包该列的ID取出,按照该ID排序后,在绑定到ListView中。 28. String s = new String(\创建了几个String Object?
答:两个对象,一个是“xyx”字符串常量,一个是值为“xyx”的引用对像s。 29. String s=””;和string s=string.Empty;有什么区别,哪一种方式更好?
String s=””;先分配一块内存存放””文字常量,s引用该内存,string s=string.Empty;s引用string类中的静态变量地址(静态变量开始会被初始化,所以无论引用多少次,只会分配一次内存),两者比较,后者少了一次内存分配,所以效率更高。 30. 构造函数是否可被override? 答:不能。
31. 是否可以继承String类?
答:string 是密封类,所以不能被继承。
32. Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。
33. 进程和线程的区别?
答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。 34. 堆和栈的区别?
答:栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小
35. 成员变量和成员函数前加static的作用?
答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。 ASP。NET与ASP相比,主要有哪些进步?
答:asp解释型,aspx编译型,性能提高,可以跟美工的工作分开进行,更有利于团队开发。
36. 在c#中using和new这两个关键字有什么意义,请写出你所知道的意义? using:
A. 引入名称空间
B. 放入实现了IDisposable接口的对象,在作用域过后会自动调用该对象的Dispose方法。 new : A. 新建实例 B. 覆盖父类方法
C. 对泛型类型进行约束,规定该类型必须具有无参的公共构造函数
37. 需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个. 答:string inputStr=\
正在阅读:
刚毕业1年2年3年工作经验都可用的C#面试题及答案(设计模式在后06-26
湖南省长沙市2012年中考文科综合真题(政治部分)试题12-01
7蟋蟀的住宅12-14
企业工人入党转正申请书09-08
Performance Analysis for Bit Error Rate of DS- CDMA SensorNetwork Systems with Source Coding05-14
qq女图片头像女生02-14
合理用药培训考核试题03-14
2016汕头一模02-08
个人媒体概念及特征11-04
风筝的旅行作文500字06-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- C#
- 设计模式
- 在后
- 试题
- 可用
- 答案
- 经验
- 毕业
- 工作
- 国培第二次作业
- 王山窝小学教育扶贫考评办法
- 主题式党的组织生活的实施方案
- el表达式里面的fn用法
- 1电脑时代
- 语感训练的原则、途径和方法
- 第三初级中学体育课教案 第4周
- 初中化学常见的离子符号
- 历年高考标下初中标下初中语文探究性课外阅读的思考与实践
- 篮球竞赛30秒计时器毕业设计
- 汇总党章题目
- 江苏CDMA09年测试规范
- 2018届山东省济南市高三第一次模拟考试理数试题
- 2005上升势头凶猛 丰田在中国市场重新上路
- 关于事故种类和主要原因分析的分类
- 某某某教师周转宿舍工程-可行性研究报告
- Visual C++附录 - 图文
- 2014高考高中物理实验操作总复习
- 阿迪达斯在中国营销策略及与耐克的比较等
- 第五章 金属冷加工基础 - 图文