SQL Server开发人员应聘常见问题妙解

目前在职场中很难找到非常合格的数据库开发人员。我的一个同事曾经说过:“SQL开发是一门语言,它很容易学,但是很难掌握。”

 在面试应聘的SQL Server数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当您问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。

  您能向我简要叙述一下SQL Server 2000中使用的一些数据库对象吗?

  您希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。

  什么是索引?SQL Server 2000里有什么类型的索引?

  任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。

  简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在SQL Server里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。

  NULL是什么意思?

  NULL(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。

  NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQL Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 UNKNOWN值进行比较,并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。

  什么是主键?什么是外键?

  主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

  什么是触发器?SQL Server 2000有什么不同类型的触发器?

  让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。

  触发器是一种专用类型的存储过程,它被捆绑到SQL Server 2000的表格或者视图上。在SQL Server 2000里,有INSTEAD-OF和AFTER两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Language,DML)语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。

  AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。

  您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?

  这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。

  另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。

对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?

  您正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。

  您可以用什么来确保表格里的字段只接受特定范围里的值?

  这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。

  触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。

  返回参数和OUTPUT参数之间的区别是什么?

  如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。

  返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。

  OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。

  什么是相关子查询?如何使用这些查询?

  经验更加丰富的开发人员将能够准确地描述这种类型的查询。

  相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。

  关于面试过程的思考

  这些问题只不过是确定一个SQL Server数据库开发人员是否合格的起点。根据应聘者对上面这些问题的回答情况,我可能会要求他们参加我的TSQL编程考试,这一般是一套根据不同情况进行的10到12个数据库查询。

  您需要自己决定将要雇用的开发人员具有什么样的专业技能。然后,需要通过自己的经验、判断以及在面试时对应聘者的感受(来做最终决定)。

  您在面试数据库开发人员时一般会问哪些问题呢?让我们一起来讨论一下吧。

  Tim Chapman是肯塔基州路易维尔市一家银行的SQL Server数据库管理员,他有超过7年的行业经验。他还通过了微软SQL Server 2000和SQL Server 2005的认证。

posted on 2007-04-10 00:21 Steveson 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Steveson/archive/2007/04/10/706451.html

SQL Server开发人员应聘常见问题妙解相关推荐

  1. SQL Server开发人员应聘常被问的问题妙解汇总

    目前在职场中很难找到非常合格的数据库开发人员.我的一个同事曾经说过:"SQL开发是一门语言,它很容易学,但是很难掌握." 在面试应聘的SQL Server数据库开发人员时,我运用了 ...

  2. IE8“开发人员工具”使用详解上(各级菜单详解)

    http://www.cnblogs.com/JustinYoung/archive/2009/03/24/kaifarenyuangongju.html 你还没有安装IE8? 如果你是前端开发人员, ...

  3. 谈谈SQL Server高可用的常见问题

    谈谈SQL Server高可用的常见问题 每次谈到SQL Server的高可用,很多的DBA,特别是SQL Server DBA心里一痛:因为大家都认为SQL Server无法或者很难实现SQL Se ...

  4. IE6,7,8开发人员工具使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)

    在上一篇文章IE8"开发人员工具"使用详解上(各级菜单详解) 中,我们详细地讲解了IE8开发人员工具中各个菜单中命令的使用方法,相信很多朋友应该已经使用上了.而IE8开发人员工具更 ...

  5. IE8开发人员工具使用详解下(模式,JS调试,探查器)

    在上一篇文章IE8"开发人员工具"使用详解上(各级菜单详解)中,我们详细地讲解了IE8开发人员工具中各个菜单中命令的使用方法,相信很多朋友应该已经使用上了.而IE8开发人员工具更强 ...

  6. [转]SQL Server开发技巧

    经常发现收藏的连接变成空连接,暂时将由于的内容拷贝过来,以免需要的时候找不到. http://www.microsoft.com/china/sql/using/tips/development/de ...

  7. Visual Studio 2019连接自动的Sql Server开发版数据库(C#语言)

    Visual Studio 2019连接自动的Sql Server开发版数据库,C#语言 连接字符串: server=(LocalDB)\MSSQLLocalDB;database=master;in ...

  8. SQL Server 开发指南(经典教程)

    SQL Server 开发指南 http://www.blogjava.net/hoojo/archive/2011/07/21/354788.html

  9. SQL Server 默认跟踪 -- 捕获事件详解

    SQL Server 默认跟踪 -- 捕获事件详解 哪些具体事件默认跟踪文件能够捕获到? --returns full list of events SELECT * FROM sys.trace_e ...

最新文章

  1. 一次编译libmono.so的记录
  2. OSChina 周五乱弹 —— 静静的思考下人生
  3. 我也来说说Dynamic
  4. 开箱即用的微服务框架 Go-zero(进阶篇)
  5. 回归树与基于规则的模型(part4)--基于规则的模型
  6. oracle po:默认申请分组,PR自动创建PO采购订单:强制按照PR行进行分组
  7. VS2010中 C++创建DLL图解
  8. LeetCode 1009. 十进制整数的反码(位运算)
  9. python如何爬虫eps数据_入门Python爬虫 -- 解析数据篇
  10. 无法从“cstring”转换为“lpcstr”_U盘重装系统后,无法使用?
  11. java ui线程_UI线程异常处理方法
  12. css alpha滤镜
  13. 简单php文件编写语法
  14. Visual Assist X 10.8.2001 破解版 支持VC2013及以下版本
  15. 经典论文-SqueezeNet论文及实践
  16. 捷径|皮皮虾去水印教程
  17. 什么是域名系统 (DNS)
  18. 【架构设计】简单设计原则(Kent Beck)
  19. 【软件测试】快速入行软件测试
  20. 绿色商业包装材料在行业中的重要地位

热门文章

  1. Node.js小白开路(一)-- fs篇
  2. gets scanf以及缓冲区域的问题
  3. 【转载】C++创建对象的两种方法
  4. js事件之神奇的onclick
  5. Extjs4 tab添加右键刷新功能
  6. Asp.net的用户管理
  7. 牛逼啊!一个可以随时随地写Python代码的神器
  8. asp.net缓存机制
  9. 开始我的c++学习之路
  10. SDN控制器OpenDaylight简介—VeCloud