一、面试
1.C#中的string和StringBuilder之间的区别
StringBuilder的优越性是在:
第一:他不需要每次都去分配内存空间。所以系统就没有必要去处理垃圾;
第二:当我们需要多次的对一个字符串进行多次操作的时候,他的效率要远远高于string
string修改后位置会变,StringBuilder不会!常用于大量拼接字符串!
2.ado.net
ADO.NET 结构的另一个核心元素是 .NET 数据提供程序(Data Provider)。具体包括:
(1).Connection 对象提供与数据源的连接
(2).Command对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令
(3).DataReader 对象从数据源中提供快速的,只读的数据流
(4).DataAdapter 对象提供连接 DataSet 对象和数据源的桥梁。DataAdapter 使用 Command 对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet 中数据的更改与数据源保持一致
3.C#值类型和引用类型的区别
(1)、分配不同。
值类型分du配在线程堆栈上(管理由操作系统负责),引用类型分配在托管堆上(管理由垃圾回收器GC负责)。
管理指内存空间的分配和释放:
变量本身是存储在堆栈上的(无论是值类型变量还是引用类型变量);
但是对于实际数据:引用类型存在托管堆上,值类型存在堆栈。
(2)、继承不同。
值类型继承自valueType,valueType继承自System.Object;引用类型直接继承自System.Object。
(3)、释放方式不同。
值类型在作用域内结束时,会被操作系统自释放,减少托管堆压力;引用类型则靠GC。因此值类型在性能上由优势。
(4)、属性不同。
值类型是密封的,不能作为基类。引用类型一般具有继承性.
(5)、null上的不同。
值类型不能为null,默认初始化为该类型的默认值;引用类型默认初始化为null。
(6)、参数传递上的不同。
值类型作为参数传递时,不影响本身。引用类型作为参数传递时,会改变最终该变量的值。
(7).引用类型:基类为Objcet . 值类型:均隐式派生自System.ValueType:
C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。 C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
4.什么是ORM
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。如今已有很多免费和付费的ORM产品,而有些程序员更倾向于创建自己的ORM工具。
面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。
简单的说:ORM相当于中继数据。具体到产品上,例如下边的ADO.NET Entity Framework。DLINQ中实体类的属性[Table]就算是一种中继数据。
对象关系映射成功运用在不同的面向对象持久层产品中,如:Torque,OJB,Hibernate,TopLink,Castor JDO,TJDO,Active Record,NHibernate,ADO.NET Entity Framework等。
5.sql server 查询显示第10条到第20条信息
sql中:
select top 20 * from table
except
select top 9 * from table
sqlite和mysql中:
select * from table limit 10,10 --从第10条记录开始,取10条记录
6.sql中查询列name重复数据
select * from table
where name in (select name from table group by name having count
(name) > 1)
二、机试
1.简单实现一个冒泡排序算法
private static string MPSort()
{
int test = 0;
int[] arr = { 8, 6, 4, 7, 3, 1, 9, 10, 5, 2 };
for (int i = 0; i < arr.Length - 1; i++)
{
for (int j = 0; j < arr.Length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
test = arr[j + 1];//拿出小的项
arr[j + 1] = arr[j];//把大的项排后面
arr[j] = test;//再把小的项排在前面
}
}
}
return string.Join(",", arr);
}
2.实现 (1-2)+(3-4)+(5-6)+...+m的几种方法
/// <summary>
/// 计算(1-2)+(3-4)+(5-6)...+m
/// </summary>
/// <param name="m">m值</param>
/// <param name="n">方法</param>
/// <returns></returns>
public static int Test(int m,int n)
{
if (n == 1)
{
int z = 0;
if (m % 2 == 0)
{
z = -(m / 2);
}
else
{
z = -(m - 1) / 2 + m;
}
return z;
}
if (n == 2)
{
int z = 0;
if (m % 2 == 0)
{
z = (m - 2) / 2 + 1 - m;
}
else
{
z = (m - 1) / 2 + 1;
}
return z;
}
return 0;
}