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查询出每个用户最近一次登录的记录(每个用户只显示一条最近登录的记录)