DBA电话面试总结

大力水手 2013-05-12 06:31:58
加精
本人工作经验一年,前两年以DBA的职位进去,大多都在帮公司看服务器,就是人们熟知的监控人员,我不怪公司和老大们的安排,只怪自己技不如人,但是我知道我不会一直做监控。入正题吧。

首先电话面试不同于做题,而且电话面试者的语速都非常快,我们一定要调整自己的语速,这不是抢答题,我们不要去迎合他的语速。一定要明白面试管想要考哪一个知识点。不得不说xiechengDBA的老大是个大牛。每次碰到这种人都会有敬畏之心,仿佛跟这些人有说不完的话,因为我深深的明白他们毅力过人,当我们看电影,娱乐,熟睡的时候这些人应该还在勤劳的研究技术。说几个我答错的和不完善的题吧?这里应该不算是泄题吧?因为他面试的时候看着你的简历。你简历上写你什么地方强,他就会在你强的地方问?

1. 唯一索引和唯一约束的区别?
这一问他只想要一句话,索引是物理概念,约束是逻辑概念。实现上没有什么区别唯一约束就是创建一个唯一索引来实现的。

2. checkpoint和惰性写入器的区别?
也只想要你一句话。checkpoint把数据脏页从缓存刷入磁盘,但是脏页并没有消失。而是在缓存中这个页头标记为干净页。

懒惰写应该是把缓冲中的脏数据页刷入磁盘后把这些页面的内存空间标记为空闲空间。(千万不要像我一样,回答什么检查点一分钟一次,切要刷入磁盘的脏数据页大于10M,懒惰写当内存压力比较大,bcp,bulk insert触发。这只是在他想要问题的边缘转一转。不是他想要的答案。10分题有可能会给2分。不高兴一分没有。)

3. 线程占用内存0.5MB,2MB,4MB CPU架构不一样占用内存不一样。我竟然说sqlserver版本不一样,占用内存不一样。

4. 一张表只有一条记录,占用10GB空间(意识就是有很多空数据页)。现在把其中的一列varchar(50)改变为varchar(100)问我要找到这条记录会比修改列宽度之前找到这条记录的时间快还是慢?
这道题当时我就蒙了,为什么蒙,因为我不知道他要考我什么,是考char和varchar 存储的区别,表结构,索引结构,还是要考扫描表有无索引是怎么驱动的,怎么跑的。 我的回答是时间会增长。(什么单次IO得到的行数更多啦,得到自己需要的数据概率更大啦,后续插入会页面产生也拆分啦。会扫描的页数更多啦,等等一堆没有用的废话。我感觉这个题他会给我0分。)

如果是堆结构,alter 过之后页面的数量没有变化,开始时是这么多页,现在还是这么多页为什么时间会变长? 如果此表有聚集索引,并且聚集索引就在这个列上和where后面跟的是这个列的条件。这个扫描时间会不会变长哪?我想也只能说有可能会增长。因为它IO次数有可能会增加,并不是数据页的IO而是索引层次的IO。意识就是本来索引树只有三层,而现在有6层(树更高了)。也就是多了一倍的IO找到了这条数据。当然这只是我自己想的。直到现在这道题考的那个知识点我都还没有弄明白。别人当然可以给你0分。

5. 隔离级别,我说道可序列化的时候他就打住不让我说了,意识就是乐观并发我不考你。然后就问,锁分别持有到什么时候。

前三个就不说了,到可序列化的时候,我说可序列化就是在聚集键上创建一个范围锁,他马上反问,那如果表没有聚集索引聚集键怎么办。我说那只能是表锁或RID上锁了,他马上又反问RID能上范围锁吗。它本来就是数据的物理结构,fileID,pageID,slotNumber 物理文件上能上范围锁吗? 哎,又一个0. 本来就是随机杂乱无序的怎么上范围。

HR说只不会很长时间最多问20分钟,结果整整问了我一个小时。唉。接完电话手机上全是油。

这么长时间了,回答错那么多题,又拒绝了他开的工资。我想一定是没有希望了。但是哦并没有灰心,我一定好好学习,向大牛们致敬,向大牛们看齐。在自己眼里我永远都是IT界的小小鸟。我们能做的只有更勤劳,更勇敢!
...全文
6750 58 打赏 收藏 转发到动态 举报
写回复
用AI写文章
58 条回复
切换为时间正序
请发表友善的回复…
发表回复
hgwyl 2013-05-26
  • 打赏
  • 举报
回复
怎么我觉得第四条是个大坑呢? 4. 一张表只有一条记录,占用10GB空间(意识就是有很多空数据页)。现在把其中的一列varchar(50)改变为varchar(100)问我要找到这条记录会比修改列宽度之前找到这条记录的时间快还是慢? “只有一条记录”,“找到”——数据的列宽跟查找到有什么关系……他不是读取啊…… 或者是楼主的表述错了?
hgwyl 2013-05-26
  • 打赏
  • 举报
回复
留个标记一个个啃~
一入IT深似海 2013-05-14
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
看到上面的面试题,对于一直想做一名专业dba的我来说,还要继续努力才行啊
有新工作否 2013-05-14
  • 打赏
  • 举报
回复
看过楼主的面试题,要学的还真多呀。不过做开发不需要研究这么细吧。
outplanet 2013-05-14
  • 打赏
  • 举报
回复
看来做个DBA还有很长的路要走啊!!!!!!!!
把人熬煎的 2013-05-14
  • 打赏
  • 举报
回复
我是来学习的。
大力水手 2013-05-14
  • 打赏
  • 举报
回复
引用 32 楼 zhengldg 的回复:
唯一索引、唯一约束都只能有唯一空值,唯一筛选索引能有多个空值: MS SqlServer2008
Use Tempdb;
create database test;
Go
Use test;
create table tb1
(
	name varchar(20)
);
Go
Alter table tb1
Add  constraint st_uq  unique(name);
Insert Into tb1 values(null),(null);
/*消息 2627,级别 14,状态 1,第 1 行
违反了 UNIQUE KEY 约束 'st_uq'。不能在对象 'dbo.tb1' 中插入重复键。
语句已终止。
*/
Drop index  idx_uq on [dbo].[tb1];
Delete tb1;

Create unique index inx_uq On tb1(name);
Insert Into tb1 values(null),(null);
/*
消息 2601,级别 14,状态 1,第 1 行
不能在具有唯一索引 'inx_uq' 的对象 'dbo.tb1' 中插入重复键的行。
语句已终止。
*/
IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[tb1]') AND name = N'inx_uq')
DROP INDEX [inx_uq] ON [dbo].[tb1] WITH ( ONLINE = OFF )
GO
Create unique index idx_uq_where On tb1(name)
Where name is not null
Insert Into tb1 values(null),(null);
/*(2 行受影响)*/
谢谢,是我回答错了,上面有人提到这一点。(自己当时怎么测试的) 我得向 莱昂纳多达芬奇 道歉 测试确实和你说的一样。SQLserver 和 DB2不一样, sqlserver唯一索引和唯一约束都只能有一个null。筛选索引可以有N多个null 上面一位大牛说的应该DB2 唯一索引可有一个null, 唯一约束不能为null。
u010686417 2013-05-14
  • 打赏
  • 举报
回复
不错,好好学习一下
中关村网名 2013-05-14
  • 打赏
  • 举报
回复
唯一索引、唯一约束都只能有唯一空值,唯一筛选索引能有多个空值: MS SqlServer2008
Use Tempdb;
create database test;
Go
Use test;
create table tb1
(
	name varchar(20)
);
Go
Alter table tb1
Add  constraint st_uq  unique(name);
Insert Into tb1 values(null),(null);
/*消息 2627,级别 14,状态 1,第 1 行
违反了 UNIQUE KEY 约束 'st_uq'。不能在对象 'dbo.tb1' 中插入重复键。
语句已终止。
*/
Drop index  idx_uq on [dbo].[tb1];
Delete tb1;

Create unique index inx_uq On tb1(name);
Insert Into tb1 values(null),(null);
/*
消息 2601,级别 14,状态 1,第 1 行
不能在具有唯一索引 'inx_uq' 的对象 'dbo.tb1' 中插入重复键的行。
语句已终止。
*/
IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[tb1]') AND name = N'inx_uq')
DROP INDEX [inx_uq] ON [dbo].[tb1] WITH ( ONLINE = OFF )
GO
Create unique index idx_uq_where On tb1(name)
Where name is not null
Insert Into tb1 values(null),(null);
/*(2 行受影响)*/
csdn_风中雪狼 2013-05-14
  • 打赏
  • 举报
回复
专业就是专业啊, 不错啊
如雪残阳 2013-05-14
  • 打赏
  • 举报
回复
靠,我这个业余的,不懂啊
blackkettle 2013-05-14
  • 打赏
  • 举报
回复
专业DBA就是不一样
微尘2013 2013-05-14
  • 打赏
  • 举报
回复
楼主,加油!
Fighting959800 2013-05-14
  • 打赏
  • 举报
回复
真是漫长啊!!!!!
装逼之王 2013-05-14
  • 打赏
  • 举报
回复
楼主说的,一点不懂。。。 会一丁点MySQL的撸过。。。。
linwaterbin 2013-05-14
  • 打赏
  • 举报
回复
第 4 问 时间不会变吧、因为输入不变
  • 打赏
  • 举报
回复
第四条我也觉得那个面试官可能虚幻一枪,比如说他就是考你varchar(50)变为varchar(100)改变的就是元数据,实际的数据不会变。也有可能那个面试官他自己搞错了知识点,呵呵。 反正啥事都要抱着批判的态度去思考不要说MSDN了,就是微软研究院数据库组的论文也会有搞错了,呵呵
大力水手 2013-05-14
  • 打赏
  • 举报
回复
引用 51 楼 SQL_Beginner 的回复:
关于锁升起方面的描述可能会引起那么一点误解。 给人的感觉好像是lock memory 存在bpool之外的内存里,其实lock memory 也是在bpool里的, 另外5000个以上的行锁,这里一定要强调是同一个statement 里超过5000.
看你又一个大牛,说话和思维都比我要严谨! 学习了,谢谢!
  • 打赏
  • 举报
回复
thread stack大小大概是这样 SQL Server x86 x86 (32-bit)OS 512 KB SQL Server x86 x64 (64-bit)OS 768 KB SQL Server x64 x64 (64-bit)OS 2048 KB SQL Server IA64 IA64 (64-bit Itanium)OS 4096 KB 当然64位的OS只能在64为CPU架构上运行。 其实还可以我问的很深,比如说range-key的实现机制等。
加载更多回复(36)

11,848

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧