Asp.Net部分面试题

HTML、javascript部分

1. jQuery的美元符号$有什么作用?

答:个人理解:$指代jquery对象,拥有jquery对象所有的属性和成员

      网友理解:在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换。

2. body中的onload()函数和jQuery中的document.ready()有什么区别?

答:个人理解:onload()指浏览器在运行致onload()方法时就会立即执行;ready()指提前准备好加载环境,触发事件才执行。

     网友理解:

  • 1).执行时间 
  •         window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。 
  •         $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。 
  • 2).编写个数不同
  •          window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个 
  •          $(document).ready()可以同时编写多个,并且都可以得到执行 
  • 3.简化写法
  •          window.onload没有简化写法 
  •          $(document).ready(function(){})可以简写成$(function(){});

3. jQuery中有哪几种类型的选择器?

答:个人理解:类选择器,ID选择器,标签选择器

      网友理解:

     

(1)基本
#id
element
.class
*
selector1,selector2,selectorN

(2)层次选择器:
ancestor descendant
parent > child
prev + next
prev ~ siblings

(3)基本过滤器选择器
:first
:last
:not
:even
:odd
:eq
:gt
:lt
:header
:animated

(4)内容过滤器选择器
:contains
:empty
:has
:parent

(5)可见性过滤器选择器
:hidden
:visible

(6)属性过滤器选择器
[attribute]
[attribute=value]
[attribute!=value]
[attribute^=value]
[attribute$=value]
[attribute*=value]
[attrSel1][attrSel2][attrSelN]

(7)子元素过滤器选择器
:nth-child
:first-child
:last-child
:only-child

(8)表单选择器
:input
:text
:password
:radio
:checkbox
:submit
:image
:reset
:button
:file
:hidden

(9)表单过滤器选择器
:enabled
:disabled
:checked
:selected

4. 请使用jQuery将页面上的所有元素边框设置为2px宽的虚线?

答:$("body").attr("border","2px dot black")

5. 如何使用jQuery实现点击按钮弹出一个对话框?

$("button").bind("click",function(){

alert("Hello World!");

});

6. Jquery的Ajax方法有option哪些参数?

 答:url、data、type、async、success、error

7. 谈谈innerHTML outerHTML innerText之间的区别?

答:个人理解:innerHTML指返回当前(不包含)标签元素内的所有HTML元素;outerHTML与innerHTML唯一区别是包含当前标签;innerText指返回当前标签内部的所有文本信息。

8. javascript是面向对象的,怎么体现javascript的继承关系?

答:个人理解:javascript通过prototype原型来继承

     网友理解:

s由于是prototype的对象模型,没有严格意义上的类class。全部都是对象Object
要实现继承,可以先
//创建一个父对象
OldObject=function(){
this.a="属性1"
};
//复制出一个新对象,新对象里面已经具有旧对象的内容
NewObject=new OldObject();
//新增些内容,扩展新对象
NewObject.b="属性2";
NewObject.func=function(){
//新方法1
}
//新对象具有旧对象的属性
alert(NewObject.a);

9. form中的input可以设置为readonly和disable,请问2者有什么区别?

答:个人理解:readonly指设置标签为只读,可用;disable指设置标签为不可用。

      网友理解:如果一个输入项的disabled设为true,则该表单输入项不能获取焦点,用户的所有操作(鼠标点击和键盘输入等)对该输入项都无效,最重要的一点是当提交表单时,这个表单输入项将不会被提交。而readonly只是针对文本输入框这类可以输入文本的输入项,如果设为true,用户只是不能编辑对应的文本,但是仍然可以聚焦焦点,并且在提交表单的时候,该输入项会作为form的一项提交。 

 

10. js中的3种弹出式消息提醒(警告窗口,确认窗口,信息输入窗口)的命令式什么?

答:alert、confirm、prompt

11. form中的input有哪些类型?

答:text、button、checkbox、radio、reset

12. javascript的常用对象有哪些?

答:String、window、Date、Array

13. 说说服务器端控件(gridview formview等)与客户端控件(easyui,jqueryui等)的区别?

答:个人理解:服务器端控件需要注册,可以直接在后台cs文件调用控件的属性和方法,主要使用C#语言实现,会产生冗余代码,隐藏文件;客户端控件,直接在页面上调用控件的属性和方法,使用javascript语言实现

C#部分

1. 列举Ado.net下的五大数据库对象;

答:Connection(连接数据库)
     Command (执行T-SQL语句)
     DataAdapter (用户填充DataSet,断开模式)
     DataReader(读取数据库,一种只读模式,只向前的)
     DataSet(数据集,好比电脑的内存)

2. 经常使用哪些泛型集合;

泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱。

      很多非泛型集合类都有对应的泛型集合类,我觉得最好还是养成用泛型集合类的好习惯,他不但性能上好而且 功能上要比非泛型类更齐全。下面是常用的非泛型集合类以及对应的泛型集合类:

    

非泛型集合类 泛型集合类
ArrayList List<T>
HashTable DIctionary<T>
Queue Queue<T>
Stack Stack<T>
SortedList SortedList<T>

            我们用的比较多的非泛型集合类主要有  ArrayList类 和 HashTable类,其中当我们经常性的操作 数据信息时往往用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,他给我们的帮助应该是非常大的,如果我们操纵的数据类型相对确定的化  用Dictionary<TKey,TValue>集合类来存储数据就方便多了,例如我们需要在电子商务网站中存储用户的购物车信息( 商品名,对应的商品个数)时,完全可以用Dictionary<string,int > 来存储购物车信息,而不需要任何的类型转化。

3. 说明关键字 Func<T1>, Action<T1>代表什么?

答:表示声明参数类型为T1的两种委托

4. Var 关键字的作用?

答:个人理解:弱类型,起到声明变量的作用;

      网友理解:var关键字是C# 3.0开始新增的特性,称为推断类型 . 可以赋予局部变量推断“类型”,var 不是显式类型。var 关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型、匿名类型、用户定义类型、.NET Framework 类库中定义的类型或任何表达式。

5. 什么是扩展方法?

 答:扩展方法使你能够向现有类型“添加”方法(包括你自定义的类型和对象噢),而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但是可以像扩展类型上的实例方法一样进行调用。对于用C#编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。

6. 说出 List<string> ls.Where, linq Where扩展方法的签名。

 Where(Function<string,bool> param)

7. 说出5个以上Linq扩展方法?

答:Max、Min、OrderBy、Count、Any、Average、Distinct

8. 分别列举C#持久层、IOC、AOP有哪些典型的类库

 答:持久层:llblgen、nhibernate、entity framework

   IOC:Unity、Spring.NET

  Aop:Unity

9. 说明Asp.net 页面Page的生命周期?

10. 说明HttpHandler和HttpModule的区别,以及它们的典型应用场景。

答:个人理解:HttpHandler主要用于指定文件的请求的访问;HttpModule用于所有的请求都会执行到。

数据库部分

(有数据库能力者建议完成题目2,3)

1. 什么是DDL ,DML和DCL?

DML(data manipulation language):
       它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
DDL(data definition language):
       DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
DCL(Data Control Language):
       是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL

2. MS Sql Server有哪些基本数据类型?

(来源于SQL查询分析器)

  view plaincopy to clipboardprint?

  bigint 从 -2^63 到 2^63-1 之间的 integer (整数)数据

  binary 定长的binary数据,最长为8,000字节

  bit integer数据,值为1或0

  char 定长的非unicode character数据,长度为8,000个字符

  cursor 含有对游标的引用的变量或存储过程OUTPUT参数所采用的MS SQL Server 2000系统数据类型

  datetime date和time数据,从1753年1月1日到9999年12月31日

  decimal 定点精度和小数的numeric数据,从-10^38-1到10^38-1之间

  float 浮点精度数字数据,从-1.79E+308到1.79E+308之间

  image 长度可变的binary数据,最长为2^31-1字节

  int 从-2^31到2^31-1之间的integer(整数)数据

  money monetary数据值,从-2^63到2^63-1,准确度为货币单位的千分之一

  nchar 定长的unicode数据,长度为4,000个字符

  ntext 长度可变的unicode数据,最长为2^30-1个字符

  numeric decimal的同义词

  nvarchar 长度可变的unicode数据,最长为4,000字符

  real 浮点精度数字数据,从-3.40E+38到3.40E+38之间

  rowversion 数据库范围内的唯一号

  smalldatetime date和time数据,从1900年1月1日到2079年6月6日

  smallint 从-2^15到2^15-1之间的integer数据

  smallmoney monetary数据值,-214,748.3648到+214,748.3647之间

  sql_variant 可存储多种SQL Server支持的数据类型的值的MS SQL Server 2000系统数据类型,

  但不存储text, ntext, timestamp和sql_variant类型的值

  sysname 系统提供的用户定义的数据类型,为nvarchar(128)的同义词

  table 一种特殊的数据MS SQL Server 2000系统数据类型,可用于为以后进行处理而存储结果集

  text 长度可变的非unicode数据,最长为2^31-1个字符

  timestamp 数据库范围内的唯一号

  tinyint 从0到255之间的integer数据

  uniqueidentifier全局唯一标识符(GUID)

  varbinary 长度可变的binary数据,最长为2^31-1字节

  varchar 长度可变的非unicode数据,最长为8,000个字符

3. MS Sql Server有哪些常用日期时间处理函数?

日期和时间函数

函数名称

参数

示例

说明

dateadd

(日期部分,数字,日期)

select dateadd(year,45,'1990-12-11')

返回 2035-12-11 00:00:00.000

select dateadd(month,45,'1990-12-11')

返回1994-09-11 00:00:00.000

select dateadd(mm,45,'1990-12-11')

返回1994-09-11 00:00:00.000

select dateadd(qq,12,'1990-12-11')

返回1993-12-11 00:00:00.000

select dateadd(hh,12,'1990-12-11')

返回1990-12-11 12:00:00.000

select dateadd(yy,-12,'1990-12-11')

返回1978-12-11 00:00:00.000

返回给指定日期加上一个时间间隔后的新的日期值。

数字:用于与指定的日期部分相加的值。如果指定了非整数值,则将舍弃该值的小数部分,舍弃时不遵循四舍五入。

日期:指定的原日期

在此函数中 dw,dy,dd效果一样都表示天

datediff

(日期部分,开始日期,结束日期)

select datediff(yy,'1990-12-11','2008-9-10')

返回 18

select datediff(mm,'2007-12-11','2008-9-10')

返回 9

返回两个指定日期的指定日期部分的差的整数值。

在计算时由结束日期减去开始日期

在此函数中 dw,dy,dd效果一样都表示天

datename

(日期部分,日期)

select datename(mm,'2007-12-11')返回12

select datename(dw,'2007-12-11')返回星期二

select datename(dd, '2007-12-11')返回11

返回表示指定日期的指定日期部分的字符串。

dw表示一星期中星期几,wk表示一年中的第几个星期

dy表示一年中的第几天

datepart

(日期部分,日期)

select datepart(mm,'2007-12-11')返回12

select datepart(dw,'2007-12-11')返回3

select datepart(dd, '2007-12-11')返回11

返回表示指定日期的指定日期部分的整数。

wk表示一年中的第几个星期

dy表示一年中的第几天,

dw表示一星期中星期几,返回整数默认1为星期天

getdate

无参数

select getdate()

返回2009-04-28 18:57:24.153

返回当前系统日期和时间。

day

(日期)

select day('2007-12-11')返回11

返回一个整数,表示指定日期的天的部分。

等价于datepart(dd, 日期)

month

(日期)

select month('2007-12-11')返回12

返回一个整数,表示指定日期的月的部分。

等价于datepart(mm, 日期)

year

(日期)

select year('2007-12-11')返回2007

返回一个整数,表示指定日期的年的部分。

等价于datepart(yy, 日期)

getutcdate

无参数

select getutcdate()

返回2009-04-28 10:57:24.153

返回表示当前的 UTC(世界标准时间)时间。即格林尼治时间(GMT)

4. SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号

5. 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。 如果应用程序变慢,代码已优化,数据库已建索引,还有有哪些优化方案?

答:

1)、select top 10 * from a
where id not in (select top 30 id from a order by id)
order by id
2)、
select * from
(
select productid, ROW_NUMBER() OVER(ORDER BY productid asc) as rowid
from Production.Product
)T
where T.rowid>30 and rowid<=40

1.WHERE子句中的连接顺序
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。

2.SELECT子句中避免使用 ' * '
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 '*' 是一个方便的方法。不幸的是,这是一个非常低效的方法。实际上,ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。

3.减少访问数据库的次数
当执行每条SQL语句时,ORACLE在内部执行了许多工作:解析SQL语句,估算索引的利用率,绑定变量,读数据块等等。由此可见,减少访问数据库的次数,就能实际上减少ORACLE的工作量。

4.使用DECODE函数来减少处理时间
使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。

5.整合简单,无关联的数据库访问
如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)

6.删除重复记录
7.用TRUNCATE替代DELETE
当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息。 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)。
而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息。当命令运行后,数据不能被恢复。因此很少的资源被调用,执行时间也会很短。

8.计算记录条数
和一般的观点相反,count(*) 比count(1)稍快,当然如果可以通过索引检索,对索引列的计数仍旧是最快的。例如 COUNT(EMPNO)

9.用Where子句替换HAVING子句
避免使用HAVING子句,HAVING 只会在检索出所有记录之后才对结果集进行过滤。 这个处理需要排序,总计等操作。如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。

Given Query
Alternative
SELECT d.dname, AVG (e.sal)
FROM emp e, dept d
WHERE e.deptno = d.deptno
GROUP BY d.dname
HAVING dname != 'RESEAECH'
AND dname != 'SALES';
SELECT d.dname, AVG (e.sal)
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND dname != 'RESEAECH'
AND dname != 'SALES' 
GROUP BY d.dname;
 

10.减少对表的查询
在含有子查询的SQL语句中,要特别注意减少对表的查询。

11.通过内部函数提高SQL效率。
12.使用表的别名(Alias)
当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上。这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。

13.用EXISTS替代IN
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS(或NOT EXISTS)通常将提高查询的效率。

14.用NOT EXISTS替代NOT IN
在子查询中,NOT IN子句将执行一个内部的排序和合并。 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。

SELECT ename
FROM emp E
WHERE EXISTS (SELECT 'X'
FROM dept
WHERE deptno = E.deptno
AND dname = 'ACCOUNTING');
SELECT ename
FROM emp E
WHERE deptno IN (SELECT deptno
FROM dept
WHERE deptno = E.deptno
AND dname = 'ACCOUNTING');
SELECT ename
FROM dept D, emp E
WHERE E.deptno = D.deptno
AND D.dname = 'ACCOUNTING';

15.用表连接替换EXISTS
通常来说 , 采用表连接的方式比EXISTS更有效率

16.用EXISTS替换DISTINCT
当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT。 一般可以考虑用EXIST替换


Given Query
Alternative
SELECT DISTINCT d.deptno, d.dname
FROM dept D,
emp E
WHERE D.deptno = E.deptno;

  

题目1为管理岗位业务培训信息,建立3个表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄 C (C#,CN ) C#,CN 分别代表课程编号、课程名称 SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩 1. 使用标准SQL语句查询选修课程名称为 税收基础 的学员学号和姓名 2. 使用标准SQL语句查询选修课程编号为’C2’的学员姓名和所属单位

3. 使用标准SQL语句查询不选修课程编号为’C5’的学员姓名和所属单位

4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位 5. 查询选修了课程的学员人数

6. 查询选修课程超过5门的学员学号和所属单位 题目2,已知关系模式: S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名 C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师 SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩 1. 找出没有选修过“李明”老师讲授课程的所有学生姓名

2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名

4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号

5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩 题目3: ====== 有如下表记录: ID Name EmailAddress LastLogon 100 test4 test4@yahoo.cn 2007-11-25 16:31:26 13 test1 test1@yahoo.cn 2007-3-22 16:27:07 19 test1 test1@yahoo.cn 2007-10-25 14:13:46 42 test1 test1@yahoo.cn 2007-11-20 14:20:10 45 test2 test2@yahoo.cn 2007-4-25 14:17:39 49 test2 test2@yahoo.cn 2007-5-25 14:22:36 用一句sql查询出每个用户最近一次登录的记录(每个用户只显示一条最近登录的记录)