C#常见面试、机试题

一、面试

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]就算是一种中继数据。

对象关系映射成功运用在不同的面向对象持久层产品中,如:TorqueOJBHibernateTopLink,Castor JDO,TJDO,Active RecordNHibernateADO.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;
        }

 

 

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值