完善了一下一个哥们的面试题

上午去一家公司面试,给了一份题,做了二十分钟答了没几道自感功力不够, 题目不是很多,记得有这么几道:
1. 两个字符串变量 string a,b ;以ascii存储编程连接两个字符串 
    例如:
string a = "abcd " , string b = "defgh" ;  返回结果:abcddefgh
 要求:
     a. 不能使用任何类库函数 
     b. 写几个测试用例测试它
     不知道,呜呜
~。。~
2. 谈谈进程,线程,应用程序域的区别
    进程是并发程序在数据集合上的执行过程
    线程是进程的一部分,是进程的一个或多个指令的执行流,可以降低进程所带来的系统开销,是系统更好的并发性
    。Net中,应用程序域[AppDomain]是程序在一种独立执行的环境,为执行托管代码提供隔离、卸载、安全。
    一个进程可以有多个AppDomain
    AppDomain和线程没有一对一的关系,但是在特定时间,一个Thread必须在一个AppDomain中。
3.谈谈DataSet和DataReader的区别
    DataReader,DataSet都是用来检索、存储数据,但是它们也有一定的区别
      DataSet对象是指一个内存中的数据缓存,它包含一个表和这些表之间关系的集合,每个表包含列集合;可看作是一个离线的数据库,支持断开式连接。
     DataReader提供一个来自数据库的快速、仅向前、只读数据流,从DataReader读数据时,需要将Connection对象打开,与数据库保持连接,即不支持断开式连接。 
  
4.asp.net有几种身份验证方式,在你最近的项目中用过哪种,为什么?
>asp.net分 Forms Authentication,Window Authentication,Passport Authentication三种验证方式
>我们的项目采用Forms验证
>
    Window Authentication是基于 IIs的身份验证,不符合商业模式。
    Passport Authenticaiton是基于Microsoft    的集中身份验证服务器的验证,不灵活、也不好控制。
    Forms Authenctication 是基于Cookies的,用它来保存用户凭证。
    所以我们采用的是Forms验证.


5. 有scores表:   id name score 
1 张三 80 
2 张三 89 
3 张三 89 
4 李四 89 
5 李四 89 
6 王五 89 
要求:
a. 写一个sql语句,每个name只取一条记录出来
   
--创建测试数据库
CREATE DATABASE Interview
GO
USE Interview
GO
--创建表
CREATE TABLE Scores(id 
int,name nvarchar(50),score int)
GO
--插入数据
INSERT Scores SELECT 
1'张三'80 
UNION ALL     SELECT 
2'张三'89 
UNION ALL     SELECT 
3'张三'89 
UNION ALL     SELECT 
4 ,'李四'89 
UNION ALL     SELECT 
5'李四'89 
UNION ALL     SELECT 
6'王五'89
GO
--查看数据
SELECT 
* FROM Scores
--a
    
--method1
SELECT 
* FROM Scores
WHERE id 
in
(SELECT MAX(id)
FROM Scores
GROUP BY name)
    
--method2

SELECT 
* FROM Scores a
WHERE id 
in
(
    SELECT TOP 
1 ID FROM Scores b WHERE a.name=b.name order by id DESC
)
    
--method3
SELECT 
* FROM Scores a
WHERE
1>(
SELECT COUNT(
0) from Scores b
where b.name=a.name and b.id>a.id
)
    
--method4
SELECT 
* FROM Scores a
WHERE
not exists(
SELECT 
* from Scores b
where b.name=a.name and b.id>a.id
)
b. 写一个语句,删除表中记录使每个name只有一条记录
   DELETE FROM Scores
WHERE id not 
in
(
SELECT a.id FROM Scores a
WHERE
not exists(
SELECT 
* from Scores b
where b.name=a.name and b.id>a.id
)

)
SELECT 
* FROM Scores
c. 从数据库设计层面设计数据表,使一个用户在表中只能有一条记录
CREATE TABLE Students
(
    id 
int IDENTITY(1,1) PRIMARY KEY,
    Name nvarchar(
100) NOT NULL
UNIQUE NONCLUSTERED)
GO
INSERT Students
SELECT a.NAME FROM Scores a
WHERE
not exists(
SELECT 
* from Scores b
where b.name=a.name and b.id>a.id
)
GO
SELECT 
* FROM Students
posted @ 2008-05-24 12:33  roboth  阅读(609)  评论(5)    收藏  举报