1、简述什么是三层架构,及三层架构的利弊。
三层架构包括表示层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
--表示层:为用户提供交互操作界面,只负责对用户提供的数据进行操作(判断用户输入的合法性等),同时向BLL提供用户操作的数据。
--业务逻辑层:是建立在UI和DAL之间的桥梁,当需要对对业务逻辑进行操作时,只需拿到用户在UI层提供的数据即可进行操作,同时向DAL传递数据参数信息。
--向上只接收UI传递的信息,不对信息进行判断,同时知识单纯的业务逻辑操作,向下不需要连接到数据库,不对数据库中信息进行操作。
--数据访问层:是对数据库的操作,通过BLL提供的数据参数信息,对数据库进行的增删改查操作。
优势:
--结构清晰、耦合度低
--可维护度高、可扩展度高
--便于对一个项目,团队分工合作,共同开发。
劣势:
--增加了代码量、工作量
--降低了系统性能
2、简述ADO.NET中五大对象,及其作用.
--Connection:用于程序与数据库之间的连接,当程序需要访问数据库时,ConnectionD的Open()方法打开数据库,在对数据库进行访问及其他操作之后利用Close()方法关闭数据库。
--Command:在程序和数据库建立连接之后,通过SQL语句对数据库发出指令,例如进行增删改查等功能,以及呼叫存在数据库中的预存程序等。
这个对象是架构在Connection之上,也就是Command通过连接到数据源。
--DataAdapter:主要是在数据源与DataSet之间执行数据传输的工作,他可以通过Command对象下达命令后,将取得的数据存放在DataSet中,
这个对象架构在Command对象之上,并提供了配合DataSet使用的功能。
--DataSet:可以将这个对象视为一个暂存区,可以把从数据库中查询出来的数据存放下来,甚至可以显示整个数据库中的数据,是通过DataAdapter下达命令后取得的数据。
DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataSetCommand 对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataSetCommand 对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataSetCommand 对象当做DataSet 对象以及数据源间传输数据的桥梁。
--DataReader:当我们只需要循环的读取数据而不需要其他的操作时使用DataReader对象,只是对数据进行读取,并在此过程中会占用Command对象,不允许进行其他操作,
因为DataReader在读取数据时限制一次读取一行,并且是只读的,所以会节省资源且利用率高。而且利用DataReader对象除了利用率高之外,因为不需要返回全部数据,所以可以降低网络的负载。
3、概述反射和序列化
反射:反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性
序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。
序列化:是将数据结构和对象转换成二进制的过程。
--.NET支持序列化的几种方式
--XML序列化:对象序列化之后的结果是XML形式的XMLSerializer类来是实现的,这个类位于System.Xml.Serialization命名空间下。XML序列化不能序列化私有数据。
--二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下。
--SOAP序列化:对象序列化之后的结果符合SOAP协议的,也就是通过SOAP协议进行传输,是在System.Runtime.Serialization.Formatters.
Soap命名空间下的SoapFormatter类来实现的。
4、什么叫做SQL注入,如何防止?请举例说明。
利用sql关键字对网站进行攻击。过滤关键字
--SQL注入攻击(SQL Injection):是攻击者将SQL命令插入到用户登录请求的查询字符串中,欺骗服务器执行恶意的SQL命令。
主要是通过拼接字符串登录程序时容易被SQL注入攻击,
例如:一条SQL命令为:string sql = "select * from Table where userName='"+userName+"'" "and userPwd='"+userPwd+"'" 当用户输入正确的用户名,并在其后加“ '--”时,SQL语句将会被数据库执行为只根据姓名查询结果(张三'--)
当用户输入“ ’ or 1=1 -- ”时SQL语句将永为真。
5、.net的错误处理机制是什么?
.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
6、描述怎样区分ExcuteNonQuery,ExcuteDataReader和ExcuteScalar方法?
ExcuteQuery:返回受影响的行数 当SQL命令为执行增、删、改语句时使用此方法。
ExcuteDataReader:返回查询到数据的多行多列,当SQL命令为查询语句,查询的结果为表(多行多列)且需要返回该表数据时使用此方法。
ExcuteScalar:返回查询到数据的首行首列,当SQL命令为查询语句时使用此方法。
7、叙述下using的用法?
--引入命名空间:using+命名空间名称,这样可以直接使用命名空间中的类型。不必指定类型的命名空间
--using定义一个范围,在该范围结束时处理对象,释放内存。using () {}
--using别名。using + 别名 = 包括详细命名空间信息的具体的类型。当一个cs引用多个命名空间时,而有相同的类型时可以这样做。比如namespace1 和
namespace2下面都有myClass类时,可以using class1 = namespace1.myClass;using class2 = namespace2.myClass。
8、请叙述const与readonly的区别。
--const:定义常量,在类中和局部变量中使用,在定义声明是必须为其赋值
--readonly:定义只读常量,在类中使用,可以在声明和构造函数中赋值,但不能在static构造函数中赋值,