面试题2
61、Application 、Cookie和 Session 两种会话有什么不同?
1.Application 储存在服务端,没有时间限制,服务器关闭即销毁(前提是自己没写销毁方法)
2.Session 储存在服务端,客户端(浏览器)关闭即销毁(若长时间不使用 且 浏览器未关闭的情况下, 默认自动销毁时间为20分钟)
3.Cookie 储存在客户端,由用户自己销毁
62、ref与out的区别?
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
//ref
public void RefValue(ref int refInt) 参数可以有多个ref
{
refInt += 100;//ref引用不需要初始化
}
//out
public void outValue(out int outInt, int i) 参数可以有多个out
{
outInt = i + 100;//out引用必须初始化
}
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
63、C#中索引器是否只能根据数字进行索引?是否允许多个索引器参数?
参数的个数和类型都是任意的
索引器的内部本质上就是set_item、get_item方法。
64、是否可以继承String类?
String类是sealed类故不可以继承
[Serializable]
public sealed class String : IComparable, ICloneable,IConvertible, IEnumerable
关键字sealed表示该类型是密封的,不能继承此类。
65、int、DateTime、string是否可以为null?
int、DateTime不能,因为其为Struct类型,而结构属于值类型,值类型不能为null, 只有引用类型才能被赋值null。string可以为null。
但现在有 int ? i=null; 并不会报错 ,这是个可空类型 T ?
66、public static const int A = 1;这段代码有错误么?
const不能被修饰为static ;因为定义为常量 (const )后就是静态的(static )。
67、面向对象的语言具有________性、_________性、________性 ?
继承 ,多态,封装
68、在.Net中所有可序列化的类都被标记为_____?
[serializable]
69、接口是一种引用类型,在接口中可以声明( A ),但不可以声明公有的域或私有的成员变量。
a) 方法、属性、索引器和事件; /*接口中不能申明字段*/
b) 索引器和字段;
c) 事件和字段;
70、在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是( C )。
a) insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行;
b) ExecuteNonQuery()方法返回执行Sql语句所影响的行数。
c) Select操作的Sql语句只能由ExecuteReader()方法来执行; /*ExecuteScalar ,Fill 也可以来执行 */
d) ExecuteReader()方法返回一个DataReader对象;
71、下列关于C#中索引器理解正确的是( C )
a) 索引器的参数必须是两个或两个以上 b) 索引器的参数类型必须是整数型
c) 索引器没有名字 d) 以上皆非 /* 索引器参数的类型和个数可以多个,但没有名字*/
72、声明一个委托public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是( B )。
a) void myCallBack(int x) ;
b) int receive(int num) ; 返回类型,参数的类型必须一样 所以选B
c) string receive(int x) ;
d) 不确定的;
73、简述什么是XML?
xml是一种语言。这种语言编写的文件一般也是以xml结尾。你可以用记事本打开查看源码,或者用浏览器打开查看。它的内容都是由标签组成的,非常有规律。因为这种规律,才能快速的存取。一般用来存储配置信息,也有当数据库来用的。
74、简述Jquery如何设置一个a标签点击跳转到指定页面?
添加标签 <a href=”#” id=”gt”>跳转</a>
修改属性 $(“#gt”).attr(“href”,”Default.aspx”); //找到这个a标签设置href属性就行
75、下列哪个名词和WebService不直接相关(自己查询下列缩写的解释,并熟记)?
A、UDDI
B、GUID
C、WSDL
D、SOAP
B
UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。
UDDI,英文为 "Universal Description, Discovery and Integration",可译为“通用描述、发现与集成服务”。
WSDL 网络服务描述语言是Web Service的描述语言,它包含一系列描述某个web service的定义。
Web Services Description Language
SOAP 简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。
Simple Object Access Protocol
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。
GUID主要用于在拥有多个节点、多台计算机的网络或系统中。
76、以下叙述正确的是?(多选) ( B,C )
A. 接口中可以有虚方法。B. 一个类可以实现多个接口。 C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。
77、从数据库读取记录,你可能用到的方法有?(多选) ( B,C,D)
A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader
/* ExecuteNonQuery 增改删 .ExecuteScalar 查删改 ExecuteReade 查 fill 填充数据集 */
78、对于一个实现了IDisposable接口的类,以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务?(多选) (A、B、C )
A.Close B.Dispose C.Finalize D.using E.Quit
79、以下关于ref和out的描述哪些项是正确的?(多选) (A,C,D )
A.使用ref参数,传递到ref参数的参数必须最先初始化。
B.使用out参数,传递到out参数的参数必须最先初始化。
C.使用ref参数,必须将参数作为ref参数显式传递到方法。
D.使用out参数,必须将参数作为out参数显式传递到方法。
80、关于ASP.NET中的代码隐藏文件的描述正确的是(C)
a)Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名。 aspx.cs
b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。
c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件。
d)以上都不正确。
81、下列描述错误的是(D)
a)类不可以多重继承而接口可以;
b)抽象类自身可以定义成员而接口不可以;
c)抽象类和接口都不能被实例化;
d)一个类可以有多个基类和多个基接口; //一个类只能有一个基类
82、写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
1, select top 10* from Products where ProductID not in(select top 30 ProductID from Products)
83、横表、纵表转换(常考!!!)
纵表结构 TableA
Name |
Course |
Grade |
张三 |
语文 |
75 |
张三 |
数学 |
80 |
张三 |
英语 |
90 |
李四 |
语文 |
95 |
李四 |
数学 |
55 |
横表结构 TableB
Name |
语文 |
数学 |
英语 |
张三 |
75 |
80 |
90 |
李四 |
95 |
55 |
0 |
纵表转横表
select Name,sum(case km when '语文' then fen end) as 语文,
sum(case km when '数学' then fen end) as 数学,
sum(case km when '英语' then fen end) as 英语
from Test group by Name
--------------------------------------------------------------------------------------------------
横表转纵表
SELECT 姓名,’语文’ AS 科目,语文 AS 成绩 FROM TEST_H2Z UNION ALL
SELECT 姓名,’数学’ AS 科目,数学 AS 成绩 FROM TEST_H2Z UNION ALL
SELECT 姓名,’英语’ AS 科目,英语 AS 成绩 FROM TEST_H2Z
ORDER BY 姓名,科目 DESC;
模拟数据:
Id name age salary
1 yzk 80 1000
2 yzk 80 2000
3 tom 20 20000
4 tom 20 20000
5 im 20 20000
84、删除姓名、年龄重复的记录(只保留Id最大的一条)
select * from A where id in (select max(id) from A group by name,age)
注意:此处group by name,age的功能和distinct name,age一样.
85、根据姓名、年龄分组,取出每组的Id最大值,然后将Id最大值之外的排除
delete * from A where id not in (select max(id) from A gruop by name,age)
86、一个文本文件含有如下内容:
4580616022644994|3000|赵涛
4580616022645017|6000|张屹
4580616022645090|3200|郑欣夏
上述文件每行为一个转账记录,第一列表示帐号,第二列表示金额,第三列表示开户人姓名。创建一张数据库表(MS SQLServer数据库,表名和字段名自拟),请将上述文件逐条插入此表中。
string[] lines = File.ReadAllLines(@"E:\转账记录.txt", Encoding.Default); //三条记录 for (int i = 0; i < lines.Length; i++) { string[] str = lines[i].Split('|'); //切割每条数据 using (SqlConnection conn = new SqlConnection(@"server=sealee\sealee;uid=sa;pwd=123;database=Temp")) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "insert into TT(CardNum,Money,Name) values(@num,@money,@name)"; cmd.Parameters.AddWithValue("@num", str[0]); cmd.Parameters.AddWithValue("@money", str[1]); cmd.Parameters.AddWithValue("@name", str[2]); cmd.ExecuteNonQuery(); } } } Console.Write("数据导入成功");
87、数据库三范式是什么?(熟练理解,在后期项目数据库设计中会用到)
第一范式: 1NF即属性的原子约束性,属性具有原子性,怎么理解了?我们知道原子是不能再分的,即属性不能往下分了。比如说人作为一个实体,姓名作为人的一个属性,如果系统需要把人的姓和名分开记录。那么就必须把姓作为人的一个属性,名作为人的一个属性。
第二范式:2NF就是记录唯一性约束,要求记录有唯一标示,其实就是数据库表中的记录不能重复,至少得设一个标示字段作为主键
第三范式:3NF就是数据不能冗余,即字段不能是其他任何字段派生出来。其实就是数据不重复保存。
高级冗余一般是字段可以别的字段衍生过来,比如金额,可以是单价和数量相乘得出来的,但是我们知道如果在查询过程中再进行计算效率就会很低,所以系统就可以用空间来换取时间,加一个金额字段,这样查询速度就提高了,这样的冗余是应该的,也是合理的。
低级冗余一般是指在一个表中保存的数据,在别的表也有保存,比如姓名,在人员表中有人员姓名,在订单同样保存了人员姓名,那就是低级冗余了。低级冗余也不是洪水猛兽,在某些特殊的地方这个也是可以有的。
88、一个文本文件含有如下内容,分别表示姓名和成绩:
张三 90
李四 96
王五 78
赵六 82
提供用户一个控制台界面,允许用户输入要查询的姓名,输入姓名并且按回车以后,打印出此人的成绩,如果不输入姓名直接按回车则显示所有人的姓名以及成绩。(注意:不能使用数据库)
Dictionary<string, int> cj = new Dictionary<string, int>(); //声明字典类来保存成绩 string[] lines = File.ReadAllLines(@"E:\成绩.txt", Encoding.Default); for (int i = 0; i < lines.Length; i++) { string[] str = lines[i].Split(' '); cj.Add(str[0], int.Parse(str[1])); } aa: Console.WriteLine("输入你要查询的姓名:"); string name = Console.ReadLine(); if (name == "") //直接回车 { for (int i = 0; i < lines.Length; i++) { string[] st = lines[i].Split(' '); Console.WriteLine(st[0] + " " + st[1]); } } else { if (!cj.ContainsKey(name)) { Console.WriteLine("没有此人的信息,请重新输入:"); goto aa; } else Console.WriteLine(cj[name]); }
89、说一下SQLServer中索引的两种类型(常考!!!)
参考:聚簇(或者叫做聚集,cluster)索引和非聚簇索引。 → 字典的拼音目录就是聚簇(cluster)索引,笔画目录就是非聚簇索引。这样查询“G到M的汉字”就非常快,而查询 :6划到8划的字”则慢。
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果
对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。
非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。
也就是说:聚集是物理排序。而非聚集是不用将表和视图进行物理排序。
90、你觉得如何才能提高代码的效率和性能?(可以列举多种思路,越多越好)
1,用属性代替可访问的字段
2,优先使用foreach循环语句
3,默认字段的初始化优于赋值语句
4,使用静态构造器初始化静态成员
5,利用using和try/finally语句来清理资源
6,尽量减少装箱和拆箱
7,定义并实现接口优于继承类型
8,重写优于事件处理器
91、在程序编码的时候,你会对Sql注入漏洞的防范采取什么样的措施?
尽量不要拼SQL语句!使用参数化查询或存储过程可以防止SQL注入攻击!在必须用SQL拼接的地方对用户输入的
内容进行检查、过滤。
92、有这样一个功能需求,用户新注册的时候需要给他推荐3个好友,说说你的推荐编码思路?
比如说类似豆瓣网我们可以根据用户兴趣来匹配,类似于人人网那些地区性比较比较强的网站我们可以根据用户的地区
来匹配。
93、果给学英语的用户设如计一个在线应用,你会选择什么作为切入点,简述你的想法和理由。(列出你觉得有用需求或功能)
英语学习资料的下载、在线答疑、用户交流作为切入点。
94、在SQLServer中求当前时间与2012-01-01 0:0:0相差的秒数?
select abs(datediff(ss,getdate(), '2012-01-01 00:00:00')) -------------Abs 求绝对值函数
表一:student_info
学号 |
姓名 |
性别 |
出生年月 |
家庭住址 |
备注 |
0001 |
张三 |
男 |
1981-8-9 |
北京 |
NULL |
|
|
|
|
|
|
|
|
|
|
|
|
表二:curriculum
课程编号 |
课程名称 |
学分 |
0001 |
计算机基础 |
2 |
0002 |
C语言 |
2 |
表三:grade
学号 |
课程编号 |
分数 |
0001 |
0001 |
80 |
0001 |
0002 |
90 |
95、题目:
条件查询:
- 在GRADE表中查找80-90份的学生学号和分数
Select 学号,分数 from grade where fen between 80 and 90
2.在GRADE 表中查找课程编号为003学生的平均分
Select AVG(分数) from grade where CID=’003’
3.在GRADE 表中查询学习各门课程的人数
Select 课程编号,Count(学号) from grade group by CID
4.查询所有姓张的学生的学号和姓名
Select 学号,姓名 from student_info where 姓名 like ‘张%’
嵌套查询:
1、 查询和学号’0001’的这位同学性别相同的所有同学的姓名和出生年月
Select 姓名,生日 from student_info where 性别 in(select 性别 from student_info where 学号=’0001’)
2、 查询所有选修课程编号为0002 和0003的学生的学号、姓名和性别
Select 学号,姓名,性别 from student_info where 学号 in (select 学号 from grade where 课程编号 in(0002,0003) )
3、 查询出学号为0001的学生的分数比0002号学生最低分高的课程编号的课程编号和分数
Select CID,Fen from grade where SID=’0001’ and Fen >(Select min(Fen) from grade where SID=’0002’)
多表查询
1、 查询分数在80-90分的学生的学号、姓名、分数
Selec s.学号,s.姓名,g.分数 from grade as g join student_info as s On g.学号=s.学号 where g.分数 between 80 and 90
2、 查询学习了’C语言’课程的学生学号、姓名和分数
Select s.学号,s.姓名,g.分数 from student_info as s join grade as g On s.学号=g.学号 join curriculum as c on c.课程编号=g.课程编号 where c.课程名称=’C语言’
3、 查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选课的学生总成绩为空。
Select g.学号,姓名,SUM(分数) from student_info as s join grade as g on g.学号=S.学号 group by g.学号,姓名