一 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; }