.NET测试

1.说明值类型与引用类型的区别?

值类型:

①存储在栈中,调用速度快

②派生自System.ValueType 

③直接存储的是数据值

④内存由系统进行自动释放

⑤值类型包含结构体(数值类型、bool型、用户定义的结构体),枚举,可空类型

引用类型

①存储在堆中,调用速度慢

②派生自System.Object

③存储对其值的引用位置

④内存由GC来自动释放

⑤引用类型包含:class、数组、interface 或 delegate、object、string 和 dynamic

2.简述c#访问修饰符的作用?

public(公开的)    
所有类的类成员    
访问权限:不受任何限制
private(私有的)    
所有类或类成员使用    
访问权限:只能在本类中访问
protected(受保护的)    
应用给类和内嵌类的所有成员    
访问权限:当前类及子类
internal    
应用给类和内嵌类的所有成员    
访问权限: 应用于同一程序集中
internal protected/    protected internal
应用给类和内嵌类的所有成员    
访问权限:应用于同一程序集和子类中

3.ADO.NET的五个主要对象?

DataConnection:连接数据库

DataCommand:对数据库执行命令操作

DataReader:只需要循序的读取数据而不需要其他操作

DataAdapter:适配器,在数据源和DataSet之间执行数据传输工作

DataSet:数据存储器,视为一个暂存区,可以把从数据库中所查询到的数据保留起来

4.c#中的委托是什么?事件是不是委托?事件和委托的关系?

委托是一个类,它定义了方法的类型,使得可以将方法作为另一个方法的参数进行传递。

事件是一种引用类型,实际上是一种特殊的委托,事件是对委托的高度封装

5.重写和重载,ref和out的区别是什么?

重载:方法名相同,参数列表不同(参数个数,参数类型)

重写:当一个子类继承一个父类,而子类中的方法与父类中的方法名,参数个数,参数类型都完全一致时,就称子类中的这个方法重写了父类中的这个方法。

区别:重载编译时多态,重写运行时多态,重载不需要继承,重写必须继承

ref(引用传参)和out(输出参数)的区别

相同点:

(1)两者都是用来修饰参数

(2)在定义和调用方法是都必须带上各自的关键字ref或out

不同点:

(1)ref必须在调用前进行初始化,而out必须在方法体内进行初始化

(2)ref有进有出,out只出不进

(3)ref则用在需要被调用的方法修改调用者的引用的时候,而 out适合用在需要retrun多个返回值的地方

6.c#中的索引器是否只能根据数字进行索引?是否允许多个索引器参数?

索引器不只是根据数字进行索引的,参数的个数和类型都是任意的。

索引可以有多个参数,参数类型任意

7.属性和public字段的区别是什么?调用set设置的一个属性值,使用get方法读取到的值一定是set设置进去的吗?

属性可以对设置值、获取值的过程进行非法值控制,比如年龄禁止设值负数,而字段则不能进行这样的设置。

虽然一般情况下get读取的值就是set设置的值,但是可以让get读取的值不是set设置的值的。

8.简述拆箱和装箱?

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

String i="abc";

object obj=(object)i;

拆箱:从引用类型转换到值类型, 前提是装箱

object obj="abc";

string i=(string)obj;

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注入

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.详细描述T-SQL语言包含哪三种常用语言?

①、数据操纵语言(DML):SQL允许用户或应用程序通过添加新数据、删除旧数据和修改以前存储的数据对数据库进行更新,用来操纵数据库数据命令。

②、数据定义语言(DDL):SQL让用户定义存储数据的结构和组织,以及数据项之间的关系。用来建立数据库、数据库对象和定义列命令。

③、数据控制语言(DCL):可以使用SQL来限制用户检索、添加和修改数据的能力,保护存储的数据不被未授权的用户所访问,用来控制数据库组件存取、权限等命令。

24.请描述Socket进行同步通讯编程的详细步骤?

服务器端:

第一步:创建一个用于监听连接的Socket对象;

第二步:用指定的端口号和服务器的ip建立一个EndPoint对象;

第三步:用socket对象的Bind()方法绑定EndPoint;

第四步:用socket对象的Listen()方法开始监听;

第五步:接收到客户端的连接,用socket对象的Accept()方法创建一个新的用于和客户端进行通信的socket对象;

第六步:通信结束后一定记得关闭socket;

客户端:

第一步:建立一个Socket对象;

第二步:用指定的端口号和服务器的ip建立一个EndPoint对象;

第三步:用socket对象的Connect()方法以上面建立的EndPoint对象做为参数,向服务器发出连接请求;

第四步:如果连接成功,就用socket对象的Send()方法向服务器发送信息;

第五步:用socket对象的Receive()方法接受服务器发来的信息 ;

第六步:通信结束后一定记得关闭socket;

25.详细说明三层架构?

数据访问层,业务层,表示层。

数据访问层(DAL)主要是存放对数据类的访问,即对数据库的添加、删除、修改、更新等基本操作

业务逻辑层(BLL)对传送数据进行逻辑判断分折,并进行传送正确的值。

表示层(UI)为了与用户交互的界面。

UI–BLL–DAL–BLL–UI

三层架构的优点

①开发人员可以只关注结构中的某一层

②可以轻易用新的实现来替换原有层次的实现

③降低层与层之间的依赖

④有利于标准化

⑤有利于各层逻辑的复用

⑥结构更明确

⑦降低维护成本和维护时间

26.存储过程作用是什么?

①加快系统的运行速度

②封装复杂操作

③实现代码重用

④增强安全性

⑤减少网络流量

27.JS基本数据类型是什么?

JS基本数据类型分为两大类:简单数据类型和复杂数据类型

简单数据类型:数字类型(Number),字符串类型(String),布尔类型(bool)

复杂数据类型:空类型(null),未定义类型(undefined),对象类型(Object)

28.介绍” “,null,undefined的区别?

“ ”:是字符串类型的默认值,占用内存

null:null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。转换为值返回0.

undefined:当声明的变量还未被初始化时,变量的默认值为undefined。转换为值返回NAN

29.介绍post和get的区别?

相同点:都是提交表单的方式,通过客户端一报文的形式提交给服务端

不同点:

post提交以报文头的方式显示到URL地址中,安全性较高

get提交以报文体的方式显示到URL地址中,安全性低

30.简述const和readonly的区别?

Readonly表示只读,定义的时候可以不用初始化,可以延迟到构造方法中进行初始化。

Const表示常量,定义的时候就要初始化。

Const默认是静态的,Readonly如果设置为静态就必须进行显示声明。

31.简述B/S和C/S的区别?

32.使用算法实现冒泡排序?

int[] arr = new int[5] { 10, 6, 96, 25, 38 };
            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])
                    {
                        int temp;
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i] + ",");
            }

33.使用算法求出斐波那契数列?

 static void Main(string[] args)
        {
            //斐波那契数列0,1,1,2,3,5,8,13,21.....
            Console.WriteLine("请输入需要计算的斐波那契数列的位数");
            int i = int.Parse(Console.ReadLine());
            int result = GetRes(i);
            Console.WriteLine("求出斐波那契数列第{0}位是{1}",i,result);
            Console.ReadLine();
        }
        static int GetRes(int i)
        {
            int res = 0;
            if (i==1)
            {
                res = 0;
            }
            else if (i==2)
            {
                res = 1;
            }
            else
            {
                res = GetRes(i - 1) + GetRes(i - 2);
            }
            return res;
        }

34.使用算法实现从一个数组中求出不重复数字的个数?

int[] array1 = new int[] {1,2,3,4,5,2,3,4,5,6,7,8,2,5,9};
            int length = array1.Length;
            for (int i = 0; i < array1.Length-1; i++)
            {
                for (int j = i+1; j < array1.Length; j++)
                {
                    int num = array1[i];
                    if (array1[j]==num)
                    {
                        //如果出现重复,数组长度-1
                        length--;
                        i++;
                    }
                }
            }
            Console.WriteLine("不重复的数字总个数为:" + length);

 

一、 需求分析 随着人事考核制度的逐渐科学化、规范化、日常化,组织机构越来越多地要求能够对被考核侯选人实行全面的考核,其中,考核候选人周围的同事、领导及其被管理的员工对候选人的评价(所谓360度考核)是一个重要的参考依据。 但是,针对不同的员工组织可能采用不同的考核标准,同时,作为组织中的一员,所有的员工都有可能成为被考核候选人。并且,对员工的360度考核可能会有大量的数据,举例说,如某公司有员工1000人,现希望给10个被考评候选人进行测评打分,每个候选人需要考评10项内容,如此,将会产生10万条数据,这显然是巨大的,并且对数据的处理将是费时费力的,当将考核制度日常化之后,如果不能采用有效的考核手段,这种对时间、人员精力的占用将会是相当巨大的。 另一个方面,考虑到员工集中对侯选测评人进行打分时,可能会因为种种顾虑,而有失公允,故,应能将系统开发成基于Internet网络的在线测评系统。 二、开发工具及数据库管理系统 主要基于Internet技术同时兼顾Window应用来实现软件的创建、部署、使用的.net框架是微软21世纪主推的开发平台,并且,也是微软下一代操作系统策略的核心。 相比于JAVA是一个标准,.Net是一个架构,它包含了在操作系统上开发软件的所有层次,为集成任意平台上的显示技术、组件技术、数据驱动技术提供了丰富的层次。.net实际上封装了操作系统的部分功能,如文件处理和内存分配,这就为软件的移植奠定了良好的基础。 .net总体分为三层体系结构,底层是公共语言运行库(CLR),它是.net的核心,是驱动关键功能的引擎,它包括数据类型的公共系统,这些公共标准和标准接口约定使跨语言继承成为可能,除了内存的分配和管理之外,CLR还负责对象的跟踪、垃圾回收等。中间层包括一些重要的系统服务,如ADO.Net,XML类,组件模型,安全性等,这些服务在总架构的控制之下,可以在各处通用,而且调用方式与语言无关。顶层主要提供给程序开发者开发Window窗体和WEB表单,WEB服务、应用服务。其中,WEB服务为程序使用SOAP在Internet上通信提供了一种机制,这也是未来网络信息处理的一个主要方向。 综观.net体系,它在软件项目开发中具有以下一些值得关注的优点。 1) 语言集成。可以使程序人员真正实现跨语言编程,而且相当多对下层对象的调用方法是统一的,且所有.Net支持的语言都被编译为标准的字节代码,所以语言之间的性能和差异变小了。因而,使用什么语言编程已不是重要问题。 2) 与数据库特别SQL_server数据库良好接口,以及在Internet下编程的突破,使得开发WEB下的管理信息系统更加容易。 3) 提供对WEB服务的支持,且平台自动完成WEB服务的建设,隐藏了SOAP 、WSDL 、XML的复杂性。 4)CLR集成了内存和过程的管理从而实现了系统的可伸缩性,而绝大多数系统的功能都集中在CLR中,因此,不需要再付出任何代价,即可获得应用程序的较大伸缩性。 5)秉承了微软的一贯作风:一个良好的IDE环境,即使开发人员可能需要适当地手工编写代码,但集成的开发环境为项目开发、调试、部署都带来了极大的方便。 数据库管理系统选用SQL_server2000,SQL_server2000是Microsoft推出的高性能关系数据库管理系统,是Microsoft公司在大型数据库领域的最新版本和旗舰产品,也是Microsoft公司争夺电子商务领域最重要的核心部件市场——网络数据库平台的一大利器。 SQL_server2000是建立在SQL_server6.5和7.0坚固而雄厚的技术基础之上,是公论的运行在Window平台的最佳数据库。SQL_server2000已经在性能和可扩展性方面建立了世界领先的地位,是一套完全的数据库和数据分析解决方案。 另一方面,作为Microsoft公司的同一家公司的两个不同领域的产品,.net与SQL_server2000具有及其良好的接口,Ado.net中很多的数据库访问对象是专门针对SQL_server2000进行开发的,对SQL_server2000有极好的操控性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值