1、说明值类型与引用类型的区别?
值类型:
引用类型:
2、简述C#中基础访问修饰符的作用?
public(公开的)
所有类的类成员
访问权限:不受任何限制
private(私有的)
所有类或类成员使用
访问权限:只能在本类中访问
protected(受保护的)
应用给类和内嵌类的所有成员
访问权限:当前类及子类
internal
应用给类和内嵌类的所有成员
访问权限: 应用于同一程序集中
internal protected
应用给类和内嵌类的所有成员
访问权限:应用于同一程序集和子类中
3、ADO.NET中的五个主要对象?
DataConnection:连接对象
DataCommand:执行命令和存储过程
DataReader:向前只读的数据流
DataAdapter:适配器,支持增删查询
DataSet:数据存储器
4、C#中委托是什么?事件是不是委托?事件和委托的关系?
委托是一个类,它定义了方法的类型,使得可以将方法作为另一个方法的参数进行传递。
事件是一种引用类型,实际上是一种特殊的委托,事件是对委托的高度封装。
5、重写和重载的区别?Ref与Out参数的作用是什么?
重载:方法名相同,参数列表不同(参数个数,参数类型,不同类型的排列顺序不同)
重写:当一个子类继承一个父类,而子类中的方法与父类中的方法名,参数个数,参数类型都完全一致时,就称子类中的这个方法重写了父类中的这个方法。
区别:重载编译时多态,重写运行时多态,重载不需要继承,重写必须继承。
out参数:输出参数
方法体中的out参数在方法体结束前,必须进行赋值。
在调用具有out参数的方法时,需准备一个带有out关键字的相同类型的变量接收out的结果。
out参数可以视为方法的返回值。
ref参数:引用传参
传进方法的参数,一旦在方法中发生改变,那么这个参数变量将永久性的发生改变。
如果遇到得方法中的参数带有out,ref关键字,那么在调用方法的时候,实参也必须带有out,ref关键字。
6、C#中的索引器是否只能根据数字进行索引?是否允许多个索引器参数?
索引器不只是根据数字进行索引的,参数的个数和类型都是任意的。
索引可以有多个参数,参数类型任意。
7、属性和Public字段的区别是什么?调用set设置的一个属性值,使用get方法读取的值一定是set设置进去的吗?
属性可以对设置值、获取值的过程进行非法值控制,比如年龄禁止设值负数,而字段则不能进行这样的设置。
虽然一般情况下get读取的值就是set设置的值,但是可以让get读取的值不是set设置的值的。
8、装箱和拆箱?
装箱:从值类型转换到引用类型。
拆箱:从引用类型转换到值类型, 前提是装箱
9、CTS、CLS、CLR分别代表什么?对应的作用是什么?
CTS:通用类型系统,一种确定公共语言运行库如何定义、使用和管理类型的规范。
CLS:公共语言规范,是CLR定义的语言特性集合,公共语言规范是一组约束和构造,它充当库编写器和编译器的向导。
CLR:公共语言运行时,用于编码MSIL的代码,主要在.NET的后台环境下运行。
10、类和结构的区别?
同:
类与结构都可以实例化
异:
类是引用类型,结构是值类型
类有默认的构造函数和析构函数,结构不能声明默认的构造函数
结构没有析构函数
结构不支持继承
结构的实例化可以不使用new
结构可以声明构造函数,但必须带参数
11、接口和类的区别?抽象和虚拟的区别?
接口和类的区别?
同:
接口和类都可以从多个接口继承
接口和类都可以包含事件,方法,属性…
异:
类中可以有字段,接口中不能有字段
类中有构造函数和析构函数,接口中没有构造函数和析构函数
类中可以定义具体的方法和实现,接口中只能声明方法,不能实现方法
类可以实例化,接口不能实例化
类可以继承多个接口,但只能继承一个类
接口成员一定要是公开的,不能是静态和虚拟的,类不限制
抽象和虚拟的区别?
同:
抽象方法和虚拟方法都用重写
异:
抽象方法,子类必须实现;虚拟方法,子类可以重写,也可以不重写
抽象方法只能声明,不能实现;虚拟方法有声明有实现
抽象类不能实例化;包含虚拟方法的类可以实例化
12、string和StringBuilder的区别
string是String的别名,它是不可变的,每次赋值都会重新分配内存空间,String类来自于System.Object,不能使用new string()来构造一个string对象。
StringBuilder是可变的,当长度超过时,StringBuilder 将自动创建一个更长的数组,把原来的数据复制到新数组中,来自于 System.Text,可以实例化,支持空参。
13、DataReader和DataSet的区别?
DataReader 为在线操作数据, DataReader会一直占用SqlConnection连接,在其获得数据过程中其它操作不可以再使用SqlConnection连接对象。
DataSet 为离线操作数据,DataSet会将数据一次性读入内存,然后断开连接,这时其它操作就可以使用SqlConnection连接对象。
DataReader在获取数据时不能关闭连接。
DataSet可以关闭连接。
DataReader读取速度快于DataSet。
DataReader一次只读取一行数据,所以占用内存较小。DataReader为只进且只读的,也就是只能单方向向前读取,如果你想回头去读取上一条数据是不允许的,并且不允许其修改数据。
DataSet一次性读取所有数据,所以比较消耗资源,但也提高了灵活性,在断开数据库连接情况下你可以对数据进行任何增删改查,按照任意的顺序读取数据,并可以将其写回到数据库。
14、简述单例模式的作用是什么?
封装了唯一性,可严格控制客户怎样访问及何时访问,内存中只有一个对象,可节约系统资源,提高系统性能。
实现:构造函数私有化,使用一个公开静态方法,使用一个静态属性进行判断当前窗口是否被创建,重写方法
15、C#中怎样进行异常捕获?
try…catch…catch…finally
发生错误时,层层上抛,只带找到匹配的catch为止
try:将预计可能引发异常的代码包含在try中
catch:发生异常,转入catch
finally:无论有没有发生异常,它总会在这个异常处理结构的最后运行
16、SQL中的三大范式是什么?
第一范式:字段不能有冗余信息,所有字段都是必不可少的。
第二范式:满足第一范式并且表必须有主键。
第三范式:满足第二范式并且表引用其他的表必须通过主键引用。
17、SQL注入是什么?怎样防止SQL注入?
sql注入是利用现有应用程序,将恶意的sql命令注入到后台数据库执行的一种恶意的操作
使用参数化的SQL就可以避免SQL注入
18、数据的完整性包括哪些方面?
实体完整性:每个表中有一个必须要指定的字段。
区域完整性:针对表中的某个字段进行特殊化限制。
参展完整性:表与表之间的一种特殊化关联限制。
19、SQL中的左联接和右链接是怎样的查询?
左联接:如果左表的某一行在右表中没有匹配行,则在关联的结果集行中,来自右表的所有选择列表列均为空值。
右联接:将返回右表的所有行。如果右表的某一行在左表中没有匹配行,则将为左表返回空值。
20、事务,视图,索引都有什么作用?
事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,即这组命令要么都执行,要么都不执行。
视图是从一张或多张表中导出的一张虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进行增删改查操作。
索引是为了加速对表中的数据行的检索而创建的一种分散存储结构,相当于书的目录。
21、使用SQL语句查询第30到第40条数据(数据可能不连续)
SELECT TOP 5 * FROM A WHERE ID > (SELECT MAX(ID) FROM A WHERE ID IN(SELECT TOP 10 ID FROM A ORDER BY ID ASC))
或
SELECT TOP 5 * FROM A WHERE ID NOT IN (SELECT TOP 10 ID FROM A ORDER BY ID ASC)
22、数据和泛型集合的区别是什么?
数组是一个存储相同类型元素的固定大小的顺序集合。
数组定长,占用内存少,遍历速度快;
集合不定长,占用内存多,遍历速度慢;
数组存放类型只能是一种,集合可以不是一种;
在功能上,数组能实现的所有功能,集合都能实现;反之,集合能实现的某些功能,数组难以实现。
23、假设 int i=21;
①求~i结果是多少?
~i=-22
②求i%5的结果是多少?
i%5=1
③int j=(i/5)++;j结果是多少?
j=4
24、T-SQL语言包含哪三种常用语言?详细描述
①、数据操纵语言(DML):SQL允许用户或应用程序通过添加新数据、删除旧数据和修改以前存储的数据对数据库进行更新,用来操纵数据库数据命令。
②、数据定义语言(DDL):SQL让用户定义存储数据的结构和组织,以及数据项之间的关系。用来建立数据库、数据库对象和定义列命令。
③、数据控制语言(DCL):可以使用SQL来限制用户检索、添加和修改数据的能力,保护存储的数据不被未授权的用户所访问,用来控制数据库组件存取、权限等命令。
25、请描述Socket进行同步通讯编程的详细步骤。
服务器端:
第一步:创建一个用于监听连接的Socket对像;
第二步:用指定的端口号和服务器的ip建立一个EndPoint对像;
第三步:用socket对像的Bind()方法绑定EndPoint;
第四步:用socket对像的Listen()方法开始监听;
第五步:接收到客户端的连接,用socket对像的Accept()方法创建一个新的用于和客户端进行通信的socket对像;
第六步:通信结束后一定记得关闭socket;
客户端:
第一步:建立一个Socket对像;
第二步:用指定的端口号和服务器的ip建立一个EndPoint对像;
第三步:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;
第四步:如果连接成功,就用socket对像的Send()方法向服务器发送信息;
第五步:用socket对像的Receive()方法接受服务器发来的信息 ;
第六步:通信结束后一定记得关闭socket;
26、详细介绍说明三层架构
数据访问层,业务层,表示层。
数据访问层(DAL)主要是存放对数据类的访问,即对数据库的添加、删除、修改、更新等基本操作
业务逻辑层(BLL)对传送数据进行逻辑判断分折,并进行传送正确的值。
表示层(UI)为了与用户交互的界面。
UI–BLL–DAL–BLL–UI
三层架构的优点:
①降低层与层之间的依赖;②有利于标准化;③利于各层逻辑之间的复用;④扩展性强;⑤安全性高;⑥项目结构更清晰,有利于后期的维护与升级。
27、存储过程的作用是什么?
存储过程:一组预编译的SQL语句。
①加快系统的运行速度
②封装复杂操作
③实现代码重用
④增强安全性
⑤减少网络流量
28、JS基本数据类型有哪些?
JS基本数据类型分为两大类:简单数据类型和复杂数据类型
简单数据类型:数字类型(Number),字符串类型(String),布尔类型(bool)
复杂数据类型:空类型(null),未定义类型(undefined),对象类型(Object)
29、介绍“ ”,null,undefind的区别
“ ”:是字符串类型的默认值,占用内存
null:null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。转换为值返回0.
undefined:当声明的变量还未被初始化时,变量的默认值为undefined。转换为值返回NAN。
30、介绍post和get的区别
post和get都是客户端用来提交数据的一种方式。
客户端将数据以报文的形式提交给服务器。
get 方法:【默认值】将数据附加在网址的后面进行传输
①以报文头的方式显示在URL地址栏中。
②所有出现文件名(URL)的地方都可以打开?进行get方式传值
③只能用来传输少量的数据
④在网址后面可以直接看到,不安全
post方法:不会附加在网址后面(隐形的传值)
①以报文体,报文内容的形式隐形的进行提交。
②post方式可以传大量数据(上传文件)
③隐形传输,非常安全
31、介绍一下const和readonly的区别
Readonly表示只读,定义的时候可以不用初始化,可以延迟到构造方法中进行初始化。
Const表示常量,定义的时候就要初始化。
Const默认是静态的,Readonly如果设置为静态就必须进行显示声明。
32、写出冒牌排序从小到大
int[]arr={45,23,1,2,99,34,7,3,56};
for(int i=0;i<arr.Length-1;i++)
{
for(int j=0;j<arr.Length-i-1;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
33、使用递归算法求出斐波那契数列
static int F(int i)
{
int res=0;
if(i==1)
{
res=0;
}
else if(i==2)
{
res=1;
}
else
{
res=F(i-1)+F(i-2);
}
return res;
}
34、使用算法实现从一个数组中求出不重复数字的个数
//计算出重复的数字个数,然后减去获取不重复个数
int[]arr={1,1,3,5,6,7,2,3,3,5,5,6,6};
int count=0;
for(int i=0;i<arr.Length;i++)
{
for(int j=i+1;j<arr.Length;j++)
{
if(arr[j]==arr[i])
{
count++;
break;
}
}
}
Console.Write(arr.Length-count);
//直接计算不重复个数
int count2=arr.Length;
for(int i=0;i<arr.Length-1;i++)
{
for(int j=i+1;j<arr.Length;j++)
{
if(arr[j]==arr[i])
{
count2--;
i++;
}
}
}
Console.Write(count2);
35、说出B/S和C/S的区别
C/S(客户端服务) | B/S(浏览器端服务) |
---|---|
(体积)胖客户端 | 瘦客户端 |
(效率)本地运行 | 服务器端运行 |
(网络)依赖不强 | 必须依赖网络 |
(用户)体验更好 | 其次 |