c# 笔试面试题01

本文主要探讨了C#编程的基础知识,适合准备笔试和面试的程序员阅读。内容涵盖C#语法、面向对象特性、异常处理、集合与泛型等核心概念。
摘要由CSDN通过智能技术生成
一、抽象与接口的区别: 
1,抽象(abstract): 
(1)抽象类中可以有抽象方法,也可没有; 
(2)抽象方法包含实现,也可以由子类实现; 
(3)抽象类不能被sealed修饰,只能使用abstract关键字 
(4)抽象方法不能在抽象类外部声明; 
(5)抽象类只能单继承; 
(6)可以有虚方法(virtual),在不同的继承中,可以有不同的实现(需要override重写); 
2、接口(interface): 
(1)接口比抽象类更抽象; 
(2)可以多继承; 
(3)不包含方法的实现,只能由子类实现;

二、多态: 
概念上:一个接口多个功能 
静态多态性:方法重写和运算符重写实现,编译期间实现; 
动态多态性:由抽象和虚方法实现,运行期间实现;

三、C#-using用法: 
(1)引入命名空间:using system; 
(2)创建类或命名空间的别名:using Project =system.project; 
(3)using语句中的对象只能实现IDeposeable接口,然后调用接口中的Dispose方法释放此对象;

四、反射(reflection) 
概念:反射程序访问,检查并修改自己的一种能力; 
反射封装了程序集,模块,类的信息。可以在程序运行时动态创建类的实例,并将其绑定到现有对象,由当前对象访问类,然后调用其方法或访问字段和属性; 
优点: 
(1)提高程序的灵活性 
(2)降低程序的耦合度,提高代码的复用性; 
(3)允许程序创建和控制任何类型的对象,不需要提前编码 
缺点: 
(1)程序的逻辑模糊:在调试程序时候,我们需要清晰看到程序运行的内部逻辑,而反射绕过源代码,因此,程序的可维护性降低; 
(2)性能问题:反射是一种解释操作,在访问字段和属性时比直接接入代码要慢,造成程序的性能降低; 
用途: 
(1)允许程序 运行期间查看特性(attribute)信息,审查元数据; 
(2)允许查看类的信息,并创建类的实例;

五、静态构造器与构造器区别: 
1,静态构造器: 
(1)用static修饰,不能出现访问修饰符: 
**public class C{ 
public static b; 
static C ( ){ 
} 
}**2)用来初始化静态变量,在静态变量被调用或者进行实例化的时候调用,有系统调用; 
(3)必须是无参的

2,(普通)构造器: 
(1)用来初始化对象(类的实例); 
(2)可以有修饰符,不能有static; 
*public class C{ 
public int b; 
public C ( ){ 
} 
}*

六、委托(delegate)和事件(Event): 
委托: 
(1)委托类似一个指针变量,在委托声明时就已经规定了变量只能指向特定参数和特定返回值的方法, 
(2)声明委托:delegate void mydelegate(); 使用new关键字实例委托; 
(3)Invoke方法同步调用对应的委托对象方法,BeginInvoke,EndInvoke方法异步调用对应的委托对象方法; 
(4)委托链里两个方法,Method用于获取委托调用的方法,Target用于获取当前调用的类的实例; 
(5)委托分为:有返回值委托,无返回值委托,多路委托(委托链),委托逆变,委托协变,泛型委托; 
事件: 
(1)事件给委托提供了良好封装性,一方面它允许从类的外部添加、删除绑定的方法,另一方面,不允许从类的外部来触发绑定的方法;

七、集合: 
ArrayList(动态数组):有序的集合,根据索引遍历; 
Hashtable(哈希表):可根据键/值来访问集合中元素; 
SortedList(排序列表):ArryList和Hashtable组成,根据索引和键来访问; 
堆栈(Stacks)、队列(Queue)、点阵列(BitaryList):二进制数组,根据索引访问;

八、多线程(Thread) 
(1)线程被定义为程序执行的路径;一个线程执行一个任务,例如计算机操作系统中并行编程的实现。节省CPU周期的浪费,提高程序运行的效率; 
(2)线程死锁:死锁也称假死,是指程序依旧在运行,只是停留在某一环节没有继续执行。原因:当两个线程运行时同时需要对方的资源的时候,就会陷入相互等待之中,此时程序就是假死状态; 
解决办法:进行死锁检测,然后挂起一些线程,释放与回收一些资源,让另外线程先执行; 
(3)阻塞和非阻塞:当一个线程需要的资源被占用时,便陷入阻塞状态,这个线程必须等待,直到资源可用时继续执行。当我们需要运行另外一个线程b时,可以调用Thread.Sleep()将当前线程a阻塞掉,等b线程执行完,在唤醒线程a。 
(4)Lock():保证当前块执行完毕,可解决阻塞问题;注:被lock的对象一定要引用类型的,否则报错!!!;

九、网络编程和通信 
(1)TCP/IP协议:可靠,有效,可连接 
(2)UDP协议:无连接,不可靠 
(3)Socket套接字通信流程:创建Socket——>(Bind)绑定IP/端口——>添加监听(Listen)——>接收(Receive)——>发送(Send)



一、C# 理论
1.1、简述 privateprotectedpublicinternalprotected internal 访问修饰符和访问权限

private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

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

internal: 当前程序集内可以访问。

protected internal: 访问仅限于当前程序集或从包含类派生的类型。

不带修饰符的类是默认internal。

 

1.2、简述abstract、sealed类修饰符

abstract:可以被指示一个类只能作为其它类的基类。

sealed:指示一个类不能被继承。

 

1.3、简述C#成员修饰符

abstract:指示该方法或属性没有实现。

const:指定域或局部变量的值不能被改动。

event:声明一个事件。

extern:指示方法在外部实现。

override:对由基类继承成员的新实现。

readonly:指示一个域只能在声明时以及相同类的内部被赋值。

static:指示一个成员属于类型本身,而不是属于特定的对象。

virtual:指示一个方法或存取器的实现可以在继承类中被覆盖。

 

1.4、ADO.NET中的五个主要对象

Connection:主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。

Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command: 对象是通过在Connection对象连接到数据源。

DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。

DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet包含若干DataTable、DataTableTable包含若干DataRow。

DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一次向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(通过游标)读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一条,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。

ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。

 

1.5、列举ASP.NET 页面之间传递值的几种方式和优缺点

1)使用QueryString, 如....?id=1; response. Redirect():  传递的参数会显示在url中,不安全并且不能传递数组或对象。

2)使用Session变量:简单,但易丢失 作用于用户个人,过量的存储会导致服务器内存资源的耗尽。

3)使用Server.Transfer:流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,数据库稳定,安全,但性能相对弱。

4)Cookie传值:简单,但可能不支持,可能被伪造 Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用

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

6)PreviosPage:这个一般比较少用。

Server.Transfer和Response.Redirect的区别:Server.Transfer是服务器内部的转接,浏览器不知道;Response.Redirect是有浏览器参与的,所以在地址栏中可以看到地址的变化。

 

1.6、C#中的委托是什么?事件是不是一种委托?事件和委托的关系

委托可以把一个方法作为参数代入另一个方法。

委托可以理解为指向一个函数的指针。

委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove自己,不能赋值。事件只能+=、-=,不能= 。加分的补充回答:事件内部就是一个private的委托和add、remove两个方法。

 

1.7、重写(override)与重载(overload)的区别

override 是进行基类中函数的重写。override是面向对象的概念。override 方法提供从基类继承的成员的新实现。通过 override 声明重写的方法称为重写基方法。重写的基方法必须与 override 方法具有相同的签名

重载是方法的名称相同。参数个数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。

 

1.8、C#中索引器是否只能根据数字进行索引?是否允许多个索引器参数?

参数的个数和类型都是任意的。用reflector反编译可以看出,索引器的内部本质上就是set_item、get_item方法。

 

1.9、属性和public字段的区别是什么?调用set方法为一个属性设值,然后用get方法读取出来的值一定是set进去的值吗?

属性可以对设值、取值的过程进行非法值控制,比如年龄禁止设值负数,而字段则不能进行这样的设置。虽然一般情况下get读取的值就是set设置的值,但是可以让get读取的值不是set设置的值的,极端的例子。Public Age{
     get{
    return 100;}set{}}。用reflector反编译可以看出,属性内部本质上就是set_***、get_***方法。

复制代码
 class Person
        {
            public int Age
            {
                get
                {
                    return 3;
                }
            }
        }
        static void Main(string[] args)
        {
            Person p1 = new Person();
            p1.Age = 30;
            p1.Age++;
            Console.Write(p1.Age);//输出3
       Console.ReadKey();
        }
复制代码
 

 

1.10、三层架构

通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

区分层次的目的即为了“高内聚,低耦合”的思想。

表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候的所见所得。

业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系。

三层结构是N层结构的一种,一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前,上层代码是无法开发的,下层代码接口(契约)的变化将使上层的代码一起变化。

优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。

缺点: 增加成本。

 

1.11、MVC模式

MVC(Model View Controller)模型-视图-控制器

aspx就是View,视图;Model:DataSet、Reader、对象;Controller:cs代码。

MVC是典型的平行关系,没有说谁在上谁在下的关系,模型负责业务领域的事情,视图负责显示的事情,控制器把数据读取出来填充模型后把模型交给视图去处理。而各种验证什么的应该是在模型里处理了。它强制性的使应用程序的输入、处理和输出分开。MVC最大的好处是将逻辑和页面分离。

 

1.12、什么是装箱(boxing)和拆箱(unboxing)?

装箱:从值类型转换到引用类型。

拆箱:从引用类型转换到值类型。

object obj = null;//引用类型

obj = 1;//装箱,boxing。把值类型包装为引用类型。

int i1 = (int)obj;//拆箱。unboxing

 

1.13、什么叫应用程序域(AppDomain) 

一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立(即,从应用程序入口点开始,沿着对象激活的序列的任何位置)。

应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的对象隔离,以使运行时行为可以预知。

在一个单独的进程中可以存在多个应用程序域。应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。

 

1.14、CTS、CLS、CLR分别作何解释

CTS:Common Type System 通用系统类型。Int32、Int16→int、String→string、Boolean→bool

CLS:Common Language Specification 通用语言规范。不同语言语法的不同。

CLR:Common Language Runtime 公共语言运行时,就是.Net提供的那些类

 

1.15、在dotnet中类(class)与结构(struct)的异同?

Class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。

Struct属于值类型,是分配在内存的栈上的。结构体是复制传递的。

 

1.16、堆和栈的区别?

栈是编译期间就分配好的内存空间,因此你的代码中必须栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。

堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。

 

1.17、能用foreach遍历访问的对象的要求

需要实现IEnumerable接口或声明GetEnumerator方法的类型。

 

1.18、GC是什么? 为什么要有GC?

GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection需要程序员调用Dispose进行资
以下是面试中常见的37个问题,给出自己的答案,全面地观察一下自己。 General question: 1. Tell me about yourself a) 简要介绍你自己。 2. why are you interested in this position? a) 你为什么对这份工作感兴趣? 3. What are your strengths? a) 谈谈你的优势。 4. What is your biggest weakness? a) 谈谈你最大的弱点是什么? 5. Why do you feel you are right for this position? a) 为什么你认为自己适合这个职位? 6. Can you give me the highlights of your resume? a) 谈谈你的简历上有些什么值得特别关注的吗? 7. Why did you choose your major? a) 你为什么选择这个专业? 8. What are your interests? a) 你有哪些兴趣爱好呢? 9. What are your short and long-term goals? a) 你对于短期和长期的目标是什么? 10. Tell me how your friends/family would describe you? a) 如果我向你的朋友或者家人询问对你的评价,你认为他们会怎样说? 11. Using single words, tell me your three greatest strengths and one weakness? a) 用简单的词,描述你的三项最突出的优点和一个缺点。 12. What motivates you to succeed? a) 你争取成功的动力是什么? 13. What qualities do you feel are important to be successful in__(i.e. customer service)? a) 哪些品质在你看来对成功是最重要的? 14. What previous experience has helped you develop these qualities? a) 哪些之前的经历帮助你获得了这些品质? 15. Can you give me an example of teamwork and leadership? a) 你能向我列举一个展现了人的团队活动和领导力的例子吗? 16. What was your greatest challenge and how did you overcome it? a) 你经历过最大的挑战是什么?你如何跨越它的? 17. Why should I hire you over the other candidates I am interviewing? a) 我为什么要从这么多应聘者中选择你呢? 18. Do you have any questions? a) 你有一些什么问题吗? 19. What are your compensation expectations? a) 你对于报酬有什么样的期望? Leadership Questions: 20. what was your greatest accomplishment in past time? a) 在过去的日子里,你觉得自己最大的成就是什么? 21. Have you ever been asked to do something unethical? If yes, how did you handle it? a) 曾经有人要求你去做一不道德的事情吗?如果有,你是怎么处理的呢? 22. What do you do if you totally disagree with a request made by your manager? a) 如果你完全不同意你上司的某个要求,你怎么处理? Teamwork Questions: 23. When in a group setting, what is your typical role? a) 你在团队中通常的作用是什么? 24. How do you motivate a team to succeed? a) 你怎么激励团队达到成功? 25. Have you been in team situations where not everyone carried their fair share of the workload? If so, how did you handle the situation? a) 如果你所处的团队中,并不是每个成员都承担着相同的工作量,你怎样处理这种情况? Problem-Solving Questions: Problem-solving question demonstrate your ability to come up with solutions to difficult situations and your ability to think on your feet. 26. How do you prioritize when you are given too many tasks to accomplish? a) 你怎样在一堆根本做不完的工作任务中区分轻重缓急? 27. Why are manholes covers round? a) 为什么下水道的井盖是圆的? Organizational and Planning Questions: Organizational and planning questions demonstrate how you approach your job and how you think. If someone appears disorganized, more likely than not, that candidate will be rejected. 28. Tell me about a goal you set for yourself and how you accomplish it. a) 讲述一件你的经历,你为自己设定了目标,制订了计划,实施计划,达到目标。 29. Do you typically achieve what you set out to do? a) 你总是能实现自己为自己设定的目标吗? Miscellaneous Questions: 30. What de-motivates or discourages you? a) 有哪些因素可能会让你失去动力或信心? 31. Do you work better in teams or by yourself? a) 对于你来说,与团队一起工作和独自干活哪样高效率更高? 32. How important to you is a positive attitude? a) 积极的态度对你有多重要? 33. What is your definition of success? a) 你怎样定义成功? 34. What was your biggest disappointment during your college life? a) 你大学阶段最大的遗憾是什么? 35. Tell me about the most difficult decision you have had to make. a) 你曾经做过的最难的决定是什么? 36. What is your ideal job? a) 你理想的工作是什么? 37. 到现在为止,你还有应聘别的公司吗?进行得怎样?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值