1. C#中的垃圾回收机制?
答:在C#中有GC垃圾回收器,一般来说系统会自动检测不使用的对象或者变量对其进行内存释放不需要进行手动调用,Collector就是强制进行垃圾回收使得内存即使得到释放提高效率
2.什么是面向对象?
答:C#中面向对象是一种编程思想
封装:所谓封装也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让 可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象 和类概念的主要特性
继承:继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的 属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必 须提供实现的能力;
多态:所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具 有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操 作不同,但通过一个公共的类,它们可以通过相同的方式予以调用
3.什么是拆箱和装箱?
答:值类型到引用类型是装箱,引用类型到值类型是拆箱
4.简述private、protected、internal、public修饰符的访问权限?
答: private 私有成员, 在类的内部才可以访问。
protected 保护成员,该类内部和继承类中可以访问。
public 公共成员,完全公开,没有访问限制。
internal 在同一命名空间内可以访问。
5. C#中的委托是什么?事件是不是一种委托
答: 1.委托 委托类似于C/C++中的函数指针,它能够引用函数,但在C#中委托是一个对象,且是安全的。一个委托类型的变量可以引用一个或多个方法,委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。
2.事件是一种特殊的委托
6. C#中重写和重载的区别?
答:重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。
重载:一个类中的方法与另一个方法同名,但是参数列表不同,这种方法称之为重载方法
7. .net的错误处理机制是什么?
答:
try{throw new Exception();}catch (Exception){return arr;}finally{arr[1] = "three";}错误的处理顺序:finally先,catch次之,最后退会try代码..取消此次操作.返回catch中的异常信息.当然,你也可以定制自己的错误处理机制...如果你的异常处理中包含finally块.则此finally无论是否发生异常始终会被执行
8.线程和进程的区别?
答:1.进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
2.进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,一个进程包含多个线程
9.什么是wcf?什么是WebServices?
答:1.Web Service:严格来说是行业标准,也就是Web Service 规范,既不是框架,也不是技术。它有一套完成的规范体系标准,而且在持续不断的更新完善中。它使用XML扩展标记语言来表示数据(这个是跨平台跨语言的关键)
2.WCF 是一个分布式应用的开发框架,属于特定的技术,或者平台。既不是标准也不是规范。WCF其实一定程度上就是ASP.NET Web Service,因为它支持Web Service的行业标准和核心协议,因此ASP.NET Web Service和WSE能做的事情,它几乎都能胜任,跨平台和语言更不是问题(数据也支持XML格式化,而且提供了自己的格式化器)
10. Public static const int a=1;这段代码错在哪里?
答:const不能被修饰为static ;因为定义为常量 (const )后就是静态的(static )
11.在.net中不想让一个类被继承用哪个单车修饰?序列化一个类用哪个单词标记?
答:1.只需要在定义类时加上 sealed 关键字
2.在类定义前写上[Serializable()]
12.简述C#中类与接口的区别?
答:接口的方法只能声明不能定义;类可以 接口里面的方法不能为abstrat或者virtual;类可以
类:接口——>实现接口;
类:类——>继承类;
接口:接口——>继承接口。
一个类可以实现多个接口;一个类只能继承一个类
13.在C#中我们定义参数时经常会用到ref和out简述一下区别?
答:ref型传递变量前,变量必须初始化,否则编译器会报错,而out型则不需要初始化 ref型传递变量,数值可以传入方法中,而out型无法将数据传入方法中。换而言之,ref型有进有出,out型只出不进。 out型参数 与ref型类似,仅用于传回结果。
14. C#中有几种循环?分别用在什么场合?
答:
1.do while:不管符不符合条件都会运行一次,在运行一次在之后再进行判断是否符合条件。
2.while:首先判断是否符合条件在进行运行。3.for和while的意思差不多只是表达形式不同;一般需要定义局部性控制循环的的变量使用。
4.foreach:只能对数据进行读;在其作用域内不能对进行遍历的值做修改,其遍历顺序只能递增而且其控制循环变量是默认的只能++
15.随便写出一个json对象数组?
答:[{"age":"18"},{"name":"张三"},{"sex":"男"}]
16. C#实现代码编程题:定义一个int数组,长度为100,并向其中随机插入1-100的数字,保证不重复?
答:
int[] arr = new int[100];
List<int> list = new List<int> ();
for (int i = 0; i < arr.Length; i++) {
list.Add (i + 1);
}
Random rd = new Random ();
int Index = 0;
while (list.Count > 0) {
int num = rd.Next (0, list.Count);
int temp = list [num];
arr [Index] = temp;
Index++;
list.Remove (temp);
}17. C#实现代码编程题:编写一个冒泡排序的方法,参数传入一个int数组?
答:
public static int[] Sort(int[] n1)
{
int temp;
for (int i = 0; i < n1.Length - 1; i++)
{
for (int j = 0; j < n1.Length - 1 - i; j++)
{
if (n1[j] > n1[j + 1])
{
temp = n1[j];
n1[j] = n1[j + 1];
n1[j + 1] = temp;
}
}
}
return n1;
}
18.谈谈你对remoting和webservice两项技术的理解?
答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。remoting是.net 中用来跨越machine, process, appdomain 进行方法调用的技术,对于三成结构的程序,就可以使用remoting技术来构建.它是分布应用的基础技术.相当于以前的DCOM Web Service是一种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web Service令基于组件的开发和web的结合达到最佳,基于组件的对象模型
19. C#代码编程题:1 1 2 3 5 8 13 21 34 55用递归算法编写一个方法,计算第n位上的数值(n>0)
答:
public static int fn(int a)
{
if (a>2)
{
return fit(a - 1) + fit(a - 2);
}
else
{
return 1;
}
}
复制代码20. C#实现代码编程题:1-2+3-4+……+m输出结果?
答:
public static int sum(int shu)
{int sum=0;
for (int i = 1; i <= shu; i++) {
if(i%2==0)
{
sum-=i
}
else{
sum+=i
}
}}
复制代码21.简述区别:string str=null、string str=””、string str=string.empty之间的区别?
答:
string str = null; 定义了一个字符串对象,赋值为null也就是没有分配内存
string str=””分配了内存空间 ,值为空
string.Empty 是系统预定义的一个空字符串对象(长度为0的字符串对象)已经分配内存了
22.C#中能使用指针吗?怎么使用?
答:C#仅是语言层面的,所以C#本身是存在指针类型的,可以引用指针。但在.net开发时,凡是使用指针、开辟内存等不受托管处理的都为非安全开发。也就是说,指针之类的引用在.net中必须加在unsafe关键词之词。而且在编译时也必须选中允许非安全编译才可以通过。
如果不在unsafe中,.net是不允许使用指针类型的。非安全程序的优点,性能较高,可以写较高性能的程序代码;但劣势也是十分明显——不支持移植性,GC甚至无法管理内存等系统资源等等。所以一般情况下不建议非安全编程,在安全编程中是不可以有指针等类型的!23.什么是三层架构?
答:三层架构辑层、数据访问层。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层、视图层
24.C#是否可以对内存直接进行操作?
答:C#可以直接对内存进行操作。但是默认情况下,为了保持类型安全,C#不支持指针运算。不过,通过使用 unsafe 关键字,可以定义可使用指针的不安全上下文。
25.多线程编程中,sleep()和wait()有什么区别?Int DataTime是否可以为null?
答:所以sleep()和wait()方法的最大区别是:sleep()睡眠时,保持对象锁,仍然占有该锁;其他线程无法访问,而wait()睡眠时,释放对象锁。其他线程可以访问。
Int DataTime,在赋值时未给予赋值,此时系统会分配给它一个最小的时间,不会是null值,Int DataTime,不会有null类型,C#提供了“可空类型”这种语法,只要在类型后加?就构成了可空的数据类型,比如int?、bool?,这样int? i=null 就可以了
26.Short s1=1;s1=s1+1;两句代码有错吗?请指出为什么?简述UDP和TCP的区别?
答:s1 + 1,s1是short类型,1是int型,s1会自动转换为int型的1,与1相加后,得到int型的2,要向左侧的short类型的s1看齐,即需要通过强制类型转换。正确写法:s1 = (short) (s1 + 1);
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息。
优点:UDP速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送 缺点:UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数 据是否会正确接收,也不重复发送,不可靠。
TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次握手
优点:TCP在数据传递时,有确认、窗口、重传、阻塞等控制机制,能保证数据正确性,较为可靠。
缺点:TCP相对于UDP速度慢一点,要求系统资源较多
27.String s=new String(“abc”);创建了几个String Object?
答:如果在字符串常量池中不存在其代表的对象,就创建两个,如果存在就创建一个.
28.码编程题:1 1 2 3 5 8 13 21 34……递归算法算出第n位上的数?
public int fn(n)
{
if(n<=2){
return 1
}
else{
return fn(n-1)+fn(n-2)
}
}29.请编写一个冒泡排序?
int[] list= { 5, 9, 15, 22, 30 }
public int[] fn(int[] list)
{
int temp=0;//用于进行交换的临时数
for(int i=0;i<=list.Length;i++){
for(int j=0;j<list.Length-1-i;j++){
if (list[j - 1] > list[j]) {
temp = list[j - 1];
list[j - 1] = list[j];
list[j] = temp;
} }
}
return list;
}30.OOP中字段封装完叫属性,那么在set访问器中有个隐藏的参数名称叫什么?简述什么是Code-Behind技术?
答:
public string Name
{
get{
return name;
}
set
{
name = value;
}
}在set访问器中隐藏的参数名是value他的类型和声明的属性类型相同
Code-Behind技术 就是代码隐藏,在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像以前asp那样都代码和html代码混在一起,难以维护
31.请简述List<T>和Dictionary<K,V>的区别和优势?
答:List<T>就是一个集合,它可以存储某种类型的列表, Dictionary<T1,T2>我们俗称其为字典,他包含一个Key和与之对应的Value,其目的是能够根据Key迅速地找到Value相比之下List<T>的效率要快很多在Dictionary中,除了要存储我们实际需要的Value外,还需要一个辅助变量Key,这就造成了内存空间的双重浪费(摘抄自百度:同样是集合,为什么性能会有这样的差距。我们要从存储结构和操作系统的原理谈起。
而HashTable或者Dictionary,他是根据Key而根据Hash算法分析产生的内存地址,因此在宏观上是不连续的,虽然微软对其算法也进行了很大的优化。
由于这样的不连续,在遍历时,Dictionary必然会产生大量的内存换页操作,而List只需要进行最少的内存换页即可,这就是List和Dictionary在遍历时效率差异的根本原因)
32.简述一下.net MVC设计模式和工作原理?
答:MVC是一种软件开发架构,它包含了很多的设计模式,最为密切是以下三种:观察者模式,组合模式和策略模式
MVC架构把数据处理,程序输入输出控制及数据显示分离开来,并且描述了不同部件的对象间的通信方式,使得软件可维护性,可扩展性,灵活性以及封装性大大提高。
MVC(Model-View-Controller)把系统的组成分解为M(模型)、V(视图)、C(控制器)三种部件。V(视图)表示数据在屏幕上的显示;C(控制器)提供处理过程控制,它在模型和视图之间起连接作用。控制器本身不输出任何信息和做任何处理,它只负责把用户的请求转成针对Model的操作,和调用相应的视图来显示Model处理后的数据。
33.简述asp.net六大内置对象及用法?
Request对象:Request对象是HttpRequest类的对象。当客户发出请求执行,客户端的请求信息会包装在Request对象中。这些请求信息包括请求头、请求方法(post,get)、提交的信息等
Application对象:Application对象在实际网络开发中的用途就是记录整个网络的信息,如上线人数、在线名单、意见调查和网上选举等。在给定的应用程序的多有用户之间共享信息,并在服务器运行期间持久的保存数据
Session对象:内置对象Session负责存储、读取和改变一个特定用户的会话信息,对于每个用户的每次访问Session对象都是唯一的。34.get与post的区别
答:get请求会暴露用户请求的参数在url地址中,并且数据有大小限制,但是处理速度快
post请求不会暴露用户的请求参数,对数据没有大小限制,但是处理速度相对get请求较慢
35.简述WebService技术及在开发过程中的使用?
36.什么是SQL注入式攻击,如何方法?
答:所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令,从而对数据库的数据进行操作的一种攻击手段
1.进行字符替换,替换掉一些敏感字符
2.使用存储过程完成数据的查询
3.限制表单输入的字符长度
4.在后端对用户输入的信息校验合法性
5.检查提取数据的查询所返回的记录数量
6.将用户登录名称、密码等数据加密保存进行消毒处理
37.简述HTML和服务器控件的区别?
答:html 就是我们通常的说的 html 语言标记,这些语言标记在已往的静态页面和其他网页里存在,不能在服务器端控制的,只能在客户端通过 javascript等程序语言来控制
asp.net的服务器控件是运行在服务器上的,直接封装了操作该控件的方法,前后代码不分离
一个运行在客户端一个运行在服务端
38.Asp.net中你知道多少种页面传值的方式,请一一列举
答:
1.Request.QueryString:获取http查询字符串变量集合即Request.QueryString[string name]
2.Request.Form:获取窗体变量集合即Request.Form[string name]
3.Session:即Session["string"]=string
39.什么是SoAP协议?
40.述ADO.NET五大对像?
答:
1、Connection(连接数据库)
2、Command(执行T-SQL语句)
4、DataReader(读取数据库,一种只读模式)