posts - 32,  comments - 67,  trackbacks - 2
    上午去一家公司面试,给了一份题,做了二十分钟答了没几道自感功力不够, 题目不是很多,记得有这么几道:
1. 两个字符串变量 string a,b ;以ascii存储编程连接两个字符串 
    例如:string a = "abcd " , string b = "defgh" ;  返回结果:abcddefgh
 要求:
     a. 不能使用任何类库函数 
     b. 写几个测试用例测试它
     (偶感觉这道题看似简单,“不使用任何类库”,偶没什么思路。只记得上学时写汇编时做过类似的题,到c#里边还真不知道怎么办了,偶就不在写 string d = a + b ;让人家笑话了,呵呵)
2. 谈谈进程,线程,应用程序域的区别
  (偶知道一些区别,表达能力有限,就不献丑了)
3.谈谈DataSet和DataReader的区别
  答:DataSet对象是指一个内存中的数据缓存,它包含一个表和这些表之间关系的集合,每个表包含列集合;可看作是一个离线的数据库,支持断开式连接。
     DataReader提供一个来自数据库的快速、仅向前、只读数据流,从DataReader读数据时,需要将Connection对象打开,与数据库保持连接,即不支持断开式连接。 
  (DataSet与DataReader的区别不止这些,偶看过这方面的文章,之前的面试也遇到过此题,这会也就记得这些了)
4.asp.net有几种身份验证方式,在你最近的项目中用过哪种,为什么?
答:windows身份验证, Forms验证和Passport验证.
     在最近的项目中使用的是Forms验证,因为我们的系统使用的是自己的用户表,这样做也符合用户的应用场景(用户可以通过任何一台联网的计算机登录系统)。
5. 有scores表:  
id name score
1 张三 80
2 张三 89
3 张三 89
4 李四 89
5 李四 89
6 王五 89
要求:
a. 写一个sql语句,每个name只取一条记录出来
   答:SELECT *  FROM scores a   WHERE id IN
          (SELECT TOP 1 id FROM scores b    WHERE b.name = a.name)

b. 写一个语句,删除表中记录使每个name只有一条记录
   答:DELETE FROM scores  WHERE  id NOT IN
          (SELECT id
         FROM scores a
         WHERE (id IN
                   (SELECT TOP 1 id
                  FROM scores b
                  WHERE b.name = a.name)))

c. 从数据库设计层面设计数据表,使一个用户在表中只能有一条记录
   答:把name字段设为主键
 (说实话偶没理解这问是什么意思,感觉偶的答案不对,应该不是这么简单的,但又想不出其他办法,就写上了,大家别笑话啊,哪位兄弟给个标准答案?)
还有两道题:一道是翻译,另一道是汉译英,
posted on 2008-01-14 15:08 mapk 阅读(461) 评论(17)  编辑 收藏 所属分类: 学习笔记

FeedBack:
2008-01-14 15:25 | 江水滔滔      
这个是昆山网进的笔试题目吗?
  回复  引用  查看    
2008-01-14 15:26 | 清風客      
兄弟, 你的路還很遠啊
  回复  引用  查看    
#3楼 [楼主]
2008-01-14 16:20 | mapk      
@江水滔滔
不是昆山网进,是北京的一家公司。
@清風客
俺也着急啊,混了两年了还这个水平,惭愧啊

  回复  引用  查看    
2008-01-14 17:56 | 石牌村夫      
打算过完年换个工作了,正想多看看这方面的资料,希望有高手能介绍一下好的面试题
  回复  引用  查看    
2008-01-14 18:58 | Autumoon      
我感觉像是中软的笔试题,请务必回复我是否正确。
  回复  引用  查看    
#6楼 [楼主]
2008-01-14 19:59 | mapk      
@Autumoon
不是中软的,那些概念题搜一下就能得到比较标准的答案,我这里只是给出了我当时的回答。那两个sql语句是没问题的,我在数据库中建了个表验证了,我也期待高手给出答案,特别是第一道题,偶还是不明白
  回复  引用  查看    
2008-01-14 21:24 | cloudgamer      
5 用group by不知可不可以
c 可能是给字段添加一个约束
  回复  引用  查看    
2008-01-14 21:40 | bqrm_521(小奎)      
我答一下SQL的吧.
a:
select * from scores where id in(select min(id) from scores group by name)

b:
delete from scores where id not in(select min(id) from scores group by name) 这个应该比你的简单吧.:)

c:
根据name字段创建惟一性索引
  回复  引用  查看    
2008-01-15 16:06 | 忧郁青蛙 [未注册用户]
这篇题没什么难度,我想除了第一题,其他的题连没有开发经验的学生也会。
我觉得笔试题就这么几个方面,从网上下载一些对面试很有帮助。
那位高手能解决一下第一题?谢谢了
  回复  引用    
2008-01-16 08:58 | 小鸟nr [未注册用户]
我没用过C#,我只是说说自己的一点想法吧!string是stl中的类型,本身功能比MFC中的CString更强大,CString cs="hello,world",可以用这样的方式遍历每一个字符cs[i],如果你所说的不允许用所有类库函数,那没办法,因为这个用法也不能用了。如果认为这种方法可以用的话,是不是你想要的呢?谢谢
  回复  引用    
2008-01-16 23:09 | Sharp_vs [未注册用户]
10楼的确是高手
  回复  引用    
2008-05-19 23:45 | 缺少笔试经验 [未注册用户]
第一题比较垃圾,我猜可能是想考察字符转换方面的知识吧。注意题目中说的使用ASCII编码存储。说实话,“以ascii存储编程连接两个字符串”意思有点儿模糊。可能加上“方式”二字,就能容易理解一些。但尽管这样,仍然含义不是很清楚。假设把题目更改成这样“两个字符串变量 string a,b ;以ascii方式存储编程连接两个字符串”。问题又来了,以ascii方式存储是修饰谁的。我认为应该不是修饰前半句的,原因有二。1:在.net中字符串对象中的字符都是以unicode编码存储的。若修饰前半句,显然与事实冲突。2:前半句后面的分号把语义明确地分成了两段。所以我认为“以ascii(方式)存储”因该是修饰后半句的。既然字符串对象已经在那里了,而非要编程连接两个字符串,并且要用ascii方式存储。很可能是指在连接算法的进行过程中,使用ascii方式存储。但这样一来,问题又来了,明明字符串类重载了“+”操作符,可以很容易地实现字符串串联,而非不让用,还要以ascii形式存储,不知道是哪味药吃错了。
对题目的分析到此告一段落。我们可以把题目改写成这样“有两个字符串变量string a,b; 不允许使用任何类库函数,编程把他们连接在一起,程序中要使用ascii方式作为中间存储形式。”这道题怎么做,我可以很负责任地说“我不知道!”。原因很简单,如果把“+”操作符也认为是调用了类库函数的话,那么操作字符串对象就没有不用类库函数的。因为String类本身就是.net framework类库提供的类,怎么能不用类库函数呢?如果放宽一点儿限制,那么最简单自然的方式就是用“+”操作符连接两个字符串。但问题这样又与题目要求使用ascii存储相矛盾。若非要用ascii存储,那么这个存储应该是把字符串放在一个字节数组里,数组的每个元素是用ascii编码表示的一个字符。然而,在.net里把一个字符串对象转换成这样的数组必须借助类库函数(可以用System.Text.Encoding.ASCII.GetBytes(string)达到目的)。否则无法完成。哪位高手能完全按照题目的要求给出答案,欢迎分享。
我这只是扔块破砖头,希望后面能有和氏璧被“勾引”出来。

  回复  引用    
2008-05-19 23:58 | 缺少笔试经验 [未注册用户]
第5题的c,我的观点应该这样理解:score里面反复出现相同的人名,比如“张三”,“李四”之类的。这样不符合3NF(就是第三范式)。所以要把它规范化成符合第三范式的。那就是另外建一个表,比如就叫User,每个人在这个表中只出现一次。表可以类似下面这样:
Create Table [User] (
UserId int NOT NULL PRIMARY KEY,
[name] varchar(50) NOT NULL,
SID varchar(50) NULL -- 身份证号码,瞎弄一个,这样显得表不是太单薄了。
)

然后把score表修改成使用UserId来标识某个具体用户。这样就符合第三范式了,也就像题目说的“从数据库设计层面”(嘻嘻)。

  回复  引用    
2008-05-23 11:49 | Robot·H      
关于第五题的第一问。
--创建测试数据库
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
)
  回复  引用  查看    
2008-05-23 11:55 | Robot·H      
第二题可以根据第一题得到id,然后not in就可以了。
  回复  引用  查看    
2008-05-23 12:09 | Robot·H      
@缺少笔试经验
有的时候可以牺牲范式的吧。为了提高性能。
针对这个题目来说。
应该是这样的。



  回复  引用  查看    
2008-05-23 12:15 | Robot·H      
@缺少笔试经验
有的时候可以牺牲范式的吧。为了提高性能。
针对这个题目来说。
应该是这样的。


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

  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-01-14 15:41 编辑过
 
 


<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

http://www.mapbar.com/localsearch/index.html#ac=mm&mapId=412087

与我联系

搜索

 

常用链接

留言簿

我参与的团队

我的标签

随笔分类

随笔档案

收藏夹

牛人

同学

积分与排名

  • 积分 - 11188
  • 排名 - 3005

最新评论

阅读排行榜

评论排行榜