Asp.Net面试题汇集

作者:陆金龙    发表时间:2015-02-26 17:36   


以下面是面试中经历的真实面试题(非笔试),现整理出来分享一下。答案是根据本人理解整理,仅供参考。

1.谈谈你对结构体与类的理解

考察点:继承性与数据类型的关系、声明和使用的规则。

可简要从以下3个方面回答:

1) 继承性:类可以被继承或从其他的类继承,结构不能从结构或类继承。

  最好补充说明以体现自己理解的深入:这是他们的数据类型决定的,类是引用类型,而结构是值类型,是不能被继承的。

2)定义:定义结构时不能显示的声明无参构造函数或析构函数。  定义类可以显示的声明无参构造方法或析构方法。(而且在声明了有参构造方法后,应该显示的声明无参构造方法,以免覆盖默认的无参构造方法。)

    不能在定义结构时初始化实例字段。而类定义成员可以直接初始化,其效果相当于在类的每个构造函数的代码前面,都加入一句初始化代码。

3)使用:结构使用前必须对所有字段赋初值;而类的或类的对象,其成员会有默认值。

2. 简单工厂模式和工厂方法模式的区别

考察点:开放封闭原则。

简单工厂模式是只用一个工厂类来负责为所有子类创建对象。工厂方法模式则是每个子类有一个工厂类来创建对象,这些工厂类共同继承一个工厂基类。

前者违反了开放封闭原则,基类每增加一个派生类,工厂方法中创建对象的代码都需要修改。后者则很好的遵循了对扩展开放,对修改封闭的原则,当增加一个子类时,只需要同时一个新的工厂子类即可,不需要修改原有创建对象的逻辑和代码。

3. 如果让您设计数据库,您会从哪些方面考虑

   考察点:主要是了解你在否有这方面的经验和体会,如果没做过或没什么经验,一般是说不上来的。

1)数据库设计三大范式。

   三大范式:列的原子性;主键;所有字段唯一依赖与主键,避免传递依赖。

     一个字段既不要存储不同类型的数据,也不要同时存储多种类型的信息。比如不要用一个联系方式的字段同时存储电话号码和电子邮箱信息,应该分开为手机号码、办公电话、家庭电话、电子邮箱等字段。 

数据表创建时一定要设立主键,用它唯一标识一条记录。无主键的表其插入效率非常低,没有主键会导致无法区分不同的记录,增加编码的复杂度。同时现在很多ORM工具在自动生成基础代码时,是要求有主键的。

传递依赖,会导致同一项信息存储在不同的表中,既是一种不必要数据冗余,也可能在某个表中数据发生变化时,导致数据不一致性。

2)数据表的设计

数据表划分:按业务逻辑划分好实体及它们之间的关系,创建对应数据表。

字段类型:字段定义时,根据实际情况选择合适数据类型,不要随意使用。如字符串类型的vachar nvarchar text ,bool类型的 bit  smallint  int ,数值类型的decimal和float等(decimal 数据类型最多可存储 38 个数字,存储了一个准确(精确)的数字;float 和 real 数据类型存储近似的数值),主键类型选择uniqueidentifyer  int  bigint  varchar。

字段长度:字符串类型字段的长度不要随意使用500、1000,并不是越大越好,还是需要根据实际业务数据定义一个合适的长度。推荐的做法是根据需要按2的幂递增,可以减少存储中的碎片。(SqlServer中数据存储的每页大小为8K)。

4. 数据库优化可以从哪些方面考虑

1)对关键字段创建索引,好的索引能提高查询速度10倍以上。

2)sql查询避免全表扫描:

      where 子句中尽量使用精确条件;

      where 子句尽量避免like语法的模糊查询,特别是前置百分号的模糊查询;

      where 子句尽量避免使用 is null,慎用 in  not in;

      where 子句中尽量避免对字段的计算或函数处理,否则系统可能无法正确使用索引;

      用 exists 代替 in 是一个好的选择:select num from a where exists(select 1 from b where num=a.num) 

3)任何时候不要使用select * from t,使用具体的字段代替*,不要返回任何用不到的字段。

4)  尽量避免使用游标,数据集较大时游标的效率较差。

5)编码中尽量避免循环中反复连接和查询数据库,应通过优化流程和语句减少查询次数。