2015-01-16 .Net 中级软件工程师 笔试题

一 C#方面

1.请简述多线程需要考虑的主要因素

  答:1.线程管理

      同一核上的两个线程不会以两倍的时长完成,可能需要用两倍再加10 %左右的时间来完成。与一个线程相比较的话,三个线程在同一核上想占用100 %的CPU使用率可能会需要3.25——3.5倍的时长来完成。所以,要怎样分配正在运行的线程数量呢?有一个办法是在线程之间建立一个共享的旗语对象。在线程开始运行前,它会尝试调用旗语的WaitOne模式,并在完成后释放旗语。对CPU的核数量设置旗语限制,(使用EnvironmentProcessorCount功能限定);这将防止您的系统在同一时间运行的线程数多于核数量。与此同时,从线程池中拉出线程将确保您不会在同一时间创建过多线程。如果一次创建线程过多,即使他们并没运行,那也是浪费系统资源。

    2.数据完整性

      要担心的问题是竞争条件和死锁。多个线程试图在同一时间更新相同的对象就会造成竞争条件,这将招致麻烦。在.NET架构中,最简单也最常见的解决竞争条件的方法是使用“临界区”。

      死锁的话,对编写的代码加以认真检查

2.抽象类和接口的区别

  答:声明方法的存在而不去实现他的类就叫做抽象类,用于创建一下体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract类的实例,然而可以创建一个变量,类型是抽象类,并让它指向具体子类的实例。不能有抽象构造函数,和抽象静态方法。abstract子类为它们父类所有的抽象方法提供实现,否则它们也是抽象类。接口是抽象类的变体,在接口中,所有的方法都是抽象的。多继承性可通过这样的接口获得。接口没有程序体,只可以定义static final成员变量。接口的实现于子类相似,除了该实现类不能从接口定义中继承行为。

3.为什么不提倡Cath()?必须要用的时候如何使用为好?

  答:只捕捉特定环境,特定条件下的异常,并进行处理。不能捕捉所有异常,因为有些异常是我们所无法预料到的,比如,内存溢出或其他错误,这种情况下,不应该让系统以一种未知状态继续运行。不要使用try...catch进行流程处理。如果可能的话,尽量要把循环写在try...catch内部,而不要把try...catch放到循环内部。

如果是try...catch中套着try...catch,异常处理机制是从内部的try...catch...往外部抛的,最先是在内部进行捕获、处理。

4.说明string str=null与string str=""在内存分配上的去吧

  答:string str=null不分配内存,string str=""分配字符串为空的内存

5.类(class)与结构(struct)的异同·

  答:类是引用类型,可以继承类、接口和被继承,有默认的构造函数,有析构函数,可以使用abstract和sealed,有protected修饰符,必须使用new初始化。

  结构是值类型,只能继承接口,不能被继承,没有默认的构造函数,可以创建,没有析构函数,不可以用abstract和sealed,没有protected修饰符,可以不用new初始化。

6.简述对emoting和webservice两项技术的理解以及实际中的应用

  答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

7.简述private,protected,public,internal修饰符的访问权限

答 . private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。

8.C#中的委托是什么?事件是不是一种委托?

答:委托可以把一个方法作为参数代入另一个方法。

委托可以理解为指向一个函数的指针。

事件是一种特殊的委托

9.override与重载的区别

答:覆写(Override)的两个函数的函数特征相同
重载(Overload)的两个函数的函数名虽然相同,但函数特征不同。

10.用.net的b/s结构的系统,您是用几层开发,每一层之间的关系以及为什么要这样分层?

答:从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层 
数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问 
业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关 
表示层:是系统的UI部分,负责使用者与整个系统的交互。  
优点:  分工明确,条理清晰,易于调试,而且具有可扩展性。 
缺点:  增加成本。

分层式结构究竟其优势何在? 
1、开发人员可以只关注整个结构中的其中某一层; 
2、可以很容易的用新的实现来替换原有层次的实现; 
3、可以降低层与层之间的依赖; 
4、有利于标准化; 
5、利于各层逻辑的复用。

11..net中读写数据库需要用到的那些类?它们的作用?

答:DataSet数据存储器。

DataCommand执行语句命令。

DataAdapter数据的集合,用语填充。

12.简单用代码举例说明什么叫多态。

Class Person{

  Public void Eat()
{
Console.WriteLine("Person Eat Foot");
}
} Class Teacher
{
Public void Eat(
{
Console.WriteLine("Teacher Eat Mantou");
}
} Public Class Test{
Public static void Main(string args[]){
Person a=new Teacher():
a.eat(); } }

13.简单用代码举例说明什么叫继承。

Class Person{

 Public string Name;
Public int Age; Public Person(string Name,int Age)
{
this.Name=Name;
this.Age=Age;
Console.WriteLine(Name);
Console.WriteLine(Age); }
} Class Teacher:Person
{
private int _id;
Public Teacher(string Name,int Age,int _id)
:base(Name,Age)
{
this._id=_id;
Console.WriteLine(_id):
}
} Public Class Test{
Public static void Main(string args[]){
Teacher Tom=new Teacher("Tom",22,01) } }

  

二 SQLSERVER方面

1.内容重复性高的字段上建立索引,查询效率会下降还是提高?为什么?

答:下降,索引就是为了从大量数据中提取需要的少量数据,推断到极端条件下,假设字段值都是一样的,索引是没有意义的

2.自定义函数和存储过程的区别是什么,什么情况下只能用自定义函数,什么情况下只能用存储过程?

答:自定义函数:1. 可以返回表变量2. 限制颇多,包括不能使用output参数;不能用临时表;函数内部的操作不能影响到外部环境;不能通过select返回结果集;不能update,delete,数据库表;3. 必须return 一个标量值或表变量,自定义函数一般用在复用度高,功能简单单一,争对性强的地方。

存储过程:1. 不能返回表变量2. 限制少,可以执行对数据库表的操作,可以返回数据集3. 可以return一个标量值,也可以省略return,存储过程一般用在实现复杂的功能,数据操纵方面。

3.简述分区表

答:将大表的数据分成称为分区的许多小的子集。分区表在逻辑上是一个表,而物理上是多个表

4.分别说明什么应用环境下如何使用游标,事务,锁,索引,以及聚簇索引和非聚簇索引的区别

答:

5.举例说明左连接和内连接的区别

答:区别在于左连接比内连接多出左表不符合条件的数据

6.比较说明数据库设计的第一范式,第二范式,第三范式的优缺点

答:

  • 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 通俗的理解是字段还可以再分吗?如过不能,则是符合1NF的设计。
  • 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性; 简单的解释,比如你和一个女生约会建立一张表,不用每条约会记录都记录她的身高、体重,将身高体重单独的存在一张表*查询即可。
  • 第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来

7.写出一条sql语句:取出A表中的第x到第xx记录(sqlserver以自动增长的id作为主键,注意,id可能为不连续的)

三 WEB方面

1.简述HttpModule和HttpHandler?

2.请描述一下ASP.NET页面生命周期?

3.简述列举你知道的Web优化措施?

4.简述Http请求的过程(从用户在浏览器输入网址到看到最终页面所经历的的过程,描述中必须包含IIS及ASP.NET引擎部分)

5.Javascipt中拼接大量字符串,考虑一个高效的办法

6.AJAX问题

1)为什么使用如下三种方式创建对象?并简述对XMLHttpRequest的理解

var Ajax=function(){
return Try.these{
funtion(){return new XMLHttpRequest()};
funtion(){return new ActiveObject('Msxml2.XMLHTTP')};
funtion(){return new XMLHttpRequest('Microsoft.XMLHTTP')};
}||false;
};

2)补充如下代码

ajax=new Ajax;

     var url="/MoreCondition.aspx?category="+type+"";

  ajax.onreadystatechange=(______________);

  ajax.open(___________________);

  _________________________;

3)作为Ajax的回调函数,如下函数有什么问题?

  funtion callback()

{

  document.all('JobInfo').value=ajax.responseText;

}
上一篇:算法题--广度优先算法(素数行李箱密码解法加步骤)


下一篇:Go语言环境配置 Sublime Text + GoSublime+ gocode + MarGo组合