文档库 最新最全的文档下载
当前位置:文档库 › 数据库维护工程师

数据库维护工程师

今天去了TOM笔试数据库维护工程师。出门坐653,到魏公村下车,往北一走,就到韦伯时代中心了。C座3层,很好找。前台MM很漂亮,在那找人重装系统。公司装修风格和网站差不多,淡绿色基调,视觉上很舒服。
比我先来的是为人大的JJ,研究生,聊起来感觉挺好。后来又来了3个人。听说今天下午来笔试的有三组,我们前边已经有两组了。
到时间后,HR把我们带到会议室,开始答题。时间一个小时。共6道大题。我一看,大多数不会,觉得没戏了。不过把题都记了下来,回来补课。写出来,希望以后去笔试的人好运。
1.简述事务的ADIC特性。
2.简述C转换成可执行代码的过程。在risc和cisc平台上有何区别?
3.raid的核心技术是什么?raid0,1,2,3,4,5的特性和区别是什么?
答:RAID技术的两大特点:一是速度、二是安全,由于这两项优点,RAID技术早期被应用于高级服务器中的SCSI接口的硬盘系统中,随着近年计算机技术的发展,PC机的CPU的速度已进入GHz 时代。IDE接口的硬盘也不甘落后,相继推出了ATA66和ATA100硬盘。这就使得RAID技术被应用于中低档甚至个人PC机上成为可能。RAID通常是由在硬盘阵列塔中的RAID控制器或电脑中的RAID卡来实现的。
RAID技术经过不断的发展,现在已拥有了从 RAID 0 到 6 七种基本的RAID 级别。另外,还有一些基本RAID级别的组合形式,如RAID 10(RAID 0与RAID 1的组合),RAID 50(RAID 0与RAID 5的组合)等。不同RAID 级别代表着不同的存储性能、数据安全性和存储成本。但我们最为常用的是下面的几种RAID形式。
(1) RAID 0
(2) RAID 1
(3) RAID 0+1
(4) RAID 3
(5) RAID 5
RAID级别的选择有三个主要因素:可用性(数据冗余)、性能和成本。如果不要求可用性,选择RAID0以获得最佳性能。如果可用性和性能是重要的而成本不是一个主要因素,则根据硬盘数量选择RAID 1。如果可用性、成本和性能都同样重要,则根据一般的数据传输和硬盘的数量选择RAID3、RAID5。
RAID卡是一种磁盘阵列卡,它的核心技术当然就是RAID(Redundant Array of Independent Disks,物理磁盘冗余阵列)。它是一种工业标准,它的主要作用就是为了提高服务器的磁盘读写性能和镜像备份以提高服务器磁盘系统的安全级别。当然要实现冗余,则至少需要两个以上的物理磁盘,所以在RAID卡上则必须提供一个以上的磁盘接口,当然这里的磁盘接口不仅限于SCSI接口,目前还有IDE (ATA)和SATA接口。(如图2所示)的是ADAPTEC SCSI-3210S磁盘阵列卡,它有内2个68针、2个外68针SCSI接口,可实现30个SCSI

磁盘或SCSI外设的连接。(如图3所示)的 RocketRAID 404磁盘阵列卡,它提供4条独立的IDE通道,因一个IDE接接口,最能连接2个硬盘,所以它最多可接8个IDE硬盘。目前对RAID级别的定义可以获得业界广泛认同的有4种,RAID 0、RAID 1、RAID 0+1和RAID 5。
RAID 0是无数据冗余的存储空间条带化,具有成本低、读写性能极高、存储空间利用率高等特点,适用于音、视频信号存储、临时文件的转储等对速度要求极其严格的特殊应用。但由于没有数据冗余,其安全性大大降低,构成阵列的任何一块硬盘的损坏都将带来灾难性的数据损失。这种方式其实没有冗余功能,没有安全保护,只是提高了磁盘读写性能和整个服务器的磁盘容量。一般只适用磁盘数较少、磁盘容易比较紧缺的应用环境中,如果在RAID 0中配置4块以上的硬盘,对于一般应用来说是不明智的。
RAID 1是两块硬盘数据完全镜像,安全性好,技术简单,管理方便,读写性能均好。因为它是一一对应的,所以它无法单块硬盘扩展,要扩展,必须同时对镜像的双方进行同容量的扩展。因为这种冗余方式为了安全起见,实际上只利用了一半的磁盘容量,数据空间浪费大。
RAID 0+1综合了RAID 0和RAID 1的特点,独立磁盘配置成RAID 10,两套完整的RAID1 0互相镜像。它的读写性能出色,安全性高,但构建阵列的成本投入大,数据空间利用率低。
RAID 5是目前应用最广泛的RAID技术。各块独立硬盘进行条带化分割,相同的条带区进行奇偶校验(异或运算),校验数据平均分布在每块硬盘上。以n块硬盘构建的RAID 5阵列可以有n-1块硬盘的容量,存储空间利用率非常高。任何一块硬盘上的数据丢失,均可以通过校验数据推算出来。它和RAID 3最大的区别在于校验数据是否平均分布到各块硬盘上。RAID 5具有数据安全、读写速度快,空间利用率高等优点,应用非常广泛,但不足之处是如果1块硬盘出现故障以后,整个系统的性能将大大降低。
RAID 1、RAID 0+1、RAID 5阵列配合热插拔(也称热可替换)技术,可以实现数据的在线恢复,即当RAID阵列中的任何一块硬盘损坏时,不需要用户关机或停止应用服务,就可以更换故障硬盘,修复系统,恢复数据,对实现高可用系统具有重要的意义
4.简述OSI七层模型,并描述TCP连接建立的三次握手。
OSI七层模型介绍
OSI是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。下面我简单的介绍一下这7层及其功能。
OSI的7层从上到下分别是
7 应用层
6 表示层
5

 会话层
4 传输层
3 网络层
2 数据链路层
1 物理层
其中高层,既7、6、5、4层定义了应用程序的功能,下面3层,既3、2、1层主要面向通过网络的端到端的数据流。下面我给大家介绍一下这7层的功能:
(1)应用层:与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:telnet,HTTP,FTP,WWW,NFS,SMTP等。
(2)表示层:这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASII格式,发送方将把文本从发送方的字符集转换成标准的ASII后发送数据。在接收方将标准的ASII转换成接收方计算机的字符集。示例:加密,ASII等。
(3)会话层:他定义了如何开始、控制和结束一个会话,包括对多个双向小时的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。
(4)传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。
(5)网络层:这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。
(6)数据链路层:他定义了在单个链路上如何传输数据。这些协议与被讨论的歌种介质有关。示例:ATM,FDDI等。
(7)物理层:OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。连接头、针、针的使用、电流、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。
OSI分层的优点:
(1)人们可以很容易的讨论和学习协议的规范细节。
(2)层间的标准接口方便了工程模块化。
(3)创建了一个更好的互连环境。
(4)降低了复杂度,使程序更容易修改,产品开发的速度更快。
(5)每层利用紧邻的下层服务,更容易记住个层的功能。

大多数的计算机网络都采用层次式结构,即将一个计算机网络分为若干层次,处在高层次的系统仅是利用较低层次的系统提供的接口和功能,不需了解低层实现该功能所采用的算法和协议;较低层次也仅是使用从高层系统传送来的参数,这就是层次间的无关性。因为有了这种无关性,层次间的每个模块可以用一个新的模块取代,只要新的模块与旧的模块具有相同的功能和接口,即使它们使用的算法和协议都不一样。
网络中的计算机与终端间要想正确的传送信息和数据,必须在数据传输的顺序、数据的格式及内容等方面有一个约定或规则,这种约定或规则称做协议。网络协议主要有三个组成部分:
1、语义:
是对协议元素的含义进行解释,不同类型的协议元素所规定的语义是不同的。例如需要发出何种控制信息、完成何种动作及得到的响应等。
2、语法:
将若干个协议元素和数据组合在一起用来表达一个完整的内容所应遵循的格式,也就是对信息的数据结构做一种规定。例如用户数据与控制信息的结构与格式等。
3、时序:
对事件实现顺序的详细说明。例如在双方进行通信时,发送点发出一个数据报文,如果目标点正确收到,则回答源点接收正确;若接收到错误的信息,则要求源点重发一次。
TCP协议是面向连接的,两端主机需要同步双方的初始序号。同步需要双方都发送自己的初始序号,并且接收双方的确认(ACK)信息;同时接收对方的初始序号,并且发送确认的ACK。这个过程就是三次握手(Three-way handshake)。 A->B SYN:我的初始序号是X,ACK是0,设置SYN位,未设置ACK位。
B->A ACK:你的序号是X+1,我的初始序号是Y,设置SYN位和ACK位。
A->B ACK:你的序号是Y+1,我的序号是X+1,设置ACK位,未设置SYN位。
5.进程和线程有何区别,支持线程的标准是什么?超线程和多核的区别是什么?
答:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角

度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
多线程的标准
多线程编程的历史可以回溯到二十世纪60年代。在UNIX操作系统中的发展是从80年代中期开始的。也许是令人吃惊的,关于支持多线程有很好的协议,但是今天我们仍然可以看到不同的多线程开发包,他们拥有不同的接口。
但是,某几年里一个叫做POSIX1003.4a的小组研究多线程编程标准。当标准完成后,大多数支持多线程的系统都支持POSIX接口。很好的改善了多线程编程的可移植性。
solaris多线程支持和POSIX1003.4a没有什么根本性的区别。虽然接口是不同的,但每个系统都可以容易地实现另外一个系统可以实现的任何功能。它们之间没有兼容性问题,至少solaris支持两种接口。即使是在同一个应用程序里,你也可以混合使用它们。
用solaris线程的另一个原因是使用支持它的工具包,例如多线程调试工具(multighreaded debugger)和truss(可以跟踪一个程序的系统调用和信号),可以很好地报告线程的状态。
什么是超线程技术?
超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。因此支持Intel超线程技术的cpu,打开超线程设置,允许超线程运行后,在操作系统中看到的cpu数量是实际物理cpu数量的两倍,就是1个cpu可以看到两个,两个可以看到四个。
有超线程技术的CPU需要芯片组、软件支持,才能比较理想的发挥该项技术的优势。
操作系统如:Microsoft Windows XP、Microsoft Windows 2003,Linux kernel
什么是双核处理器
简而言之,双核处理器即是基于单个半导体的一个处理器上拥有两个一样功能的处理器核心。换句话说,将两个物理处理器核心整合入一个核中。企业IT管理者

们也一直坚持寻求增进性能而不用提高实际硬件覆盖区的方法。多核处理器解决方案针对这些需求,提供更强的性能而不需要增大能量或实际空间。
双核心处理器技术的引入是提高处理器性能的有效方法。因为处理器实际性能是处理器在每个时钟周期内所能处理器指令数的总量,因此增加一个内核,处理器每个时钟周期内可执行的单元数将增加一倍。在这里我们必须强调一点的是,如果你想让系统达到最大性能,你必须充分利用两个内核中的所有可执行单元:即让所有执行单元都有活可干!
为什么IBM、HP等厂商的双核产品无法实现普及呢,因为它们相当昂贵的,从来没得到广泛应用。比如拥有128MB L3缓存的双核心IBM Power4处理器的尺寸为115x115mm,生产成本相当高。因此,我们不能将IBM Power4和HP PA8800之类双核心处理器称为AMD即将发布的双核心处理器的前辈。
目前,x86双核处理器的应用环境已经颇为成熟,大多数操作系统已经支持并行处理,目前大多数新或即将发布的应用软件都对并行技术提供了支持,因此双核处理器一旦上市,系统性能的提升将能得到迅速的提升。因此,目前整个软件市场其实已经为多核心处理器架构提供了充分的准备


这是我做过的几个SQL面试题,我写好了表并添加了测试数据,有兴趣的话试一下

题目1:取得最新数据
分布在各地的各个监测站会不定期地取数据并存入数据库。现在开始统计:如果监测站当天八点有数据,就取当天八点钟时间段的最新数据,否则取该站的最新数据
数据源:
create table stinfo (
stcd varchar(20) primary key(stcd,sdate),
sdate datetime,
data decimal(5,2)
)
insert into stinfo values('0003','061010 9:40',1.5)
insert into stinfo values('0002','061011 8:04',0.8)
insert into stinfo values('0001','061012 7:10',1.8)
insert into stinfo values('0002','061012 7:00',1.7)
insert into stinfo values('0001','061012 8:02',1.4)
insert into stinfo values('0001','061012 8:11',1.5)
insert into stinfo values('0002','061012 8:18',1.6)
insert into stinfo values('0002','061012 8:30',1.8)
insert into stinfo values('0001','061012 9:40',1.3)
insert into stinfo values('0002','061012 9:41',1.5)
insert into stinfo values('0003','061012 9:45',1.4)

要求得到结果:(假设今天是2006-10-12)
stcd sdate data
0001 2006-10-12 08:11:00.000 1.5
0002 2006-10-12 08:30:00.000 1.8
0003 2006-10-12 09:45:00.000 1.4

实现方法:
select stinfo.* from stinfo right join
(
select stcd,max(sdate) sdate from stinfo group by stcd having stcd not in
(select stcd from stinfo where datediff(day,sdate,getdate())=0 and datepart(hour,sdate)=8)
union
select stcd,max(sdate) sdate from stinfo where datediff(day,sdate,getdate())=0 and da

tepart(hour,sdate)=8
group by stcd
)as tab
on stinfo.stcd=tab.stcd and stinfo.sdate=tab.sdate

题目2:按数据范围统计每个监测站的数据个数
数据源:题目1的stinfo表及数据

要求得到结果:
STCD 0-1.0 1.0-1.4 1.4-1.8 >1.8
0001 NULL 1 2 1
0002 1 NULL 3 1
0003 NULL NULL 2 NULL

实现方法:
select tab.stcd,tab1.[0-1.0],tab2.[1.0-1.4],tab3.[1.4-1.8],tab4.[>=1.8] from
(
(select stcd from stinfo group by stcd) as tab full outer join
(select stcd,count(data) '0-1.0' from stinfo where data<1.0 group by stcd) as tab1
on tab.stcd=tab1.stcd
full outer join
(select stcd,count(data) '1.0-1.4' from stinfo where data>=1.0 and data<1.4 group by stcd) as tab2
on tab.stcd=tab2.stcd
full outer join
(select stcd,count(data) '1.4-1.8' from stinfo where data>=1.4 and data<1.8 group by stcd) as tab3
on tab.stcd=tab3.stcd
full outer join
(select stcd,count(data) '>=1.8' from stinfo where data>=1.8 group by stcd) as tab4
on tab.stcd=tab4.stcd
)

题目3:行列数据交换(提示动态SQL交叉表)
数据源:
create table sitemvalue(
STCD int primary key(stcd,xmmc),
XMMC varchar(20),
SValue decimal(4,2)
)
insert into sitemvalue values ('0001', 'ph', 7.0)
insert into sitemvalue values ('0001', 'cod', 0.2)
insert into sitemvalue values ('0001', 'do', 0.3)
insert into sitemvalue values ('0001', 'wt', 1.1)
insert into sitemvalue values ('0002', 'ph', 7.0)
insert into sitemvalue values ('0002', 'do', 0.2)
insert into sitemvalue values ('0002', 'wt', 0.2)
insert into sitemvalue values ('0002', 'cod', 1.5)
要求得到结果:
STCD PH COD DO WT
0001 7.0 0.2 0.3 1.1
0002 7.0 1.5 0.2 0.2

实现方法:
select stcd,
sum(case xmmc when 'ph' then svalue else 0 end) as ph,
sum(case xmmc when 'cod' then svalue else 0 end) as cod,
sum(case xmmc when 'do' then svalue else 0 end) as do,
sum(case xmmc when 'wt' then svalue else 0 end) as wt
from sitemvalue group by stcd

题目4:拆分一个连续字符串(提示用存储过程循环拆分)
declare @s as varchar(100)
set @str='ph,p,cod,do,cu'
要求得到结果:
ph
p
cod
do

实现方法:
create procedure parse @str varchar(200) as
declare @start as int
declare @end as int
set @start=0
set @end=charindex(',',@str)
while @end!=0
begin
print substring(@str,@start,@end)
set @str=substring(@str,@end+1,len(@str))
set @end=charindex(',',@str)
end
print @str
return
exec parse 'ph,p,cod,do'

题目5:用一个函数计算监测站的所有监测项目(用函数)
数据源:
create table svalue(
STCD varchar(20) primary key(stcd,sdate),
SDate dateTime,
SItem varchar(20))
insert into svalue values ('0001','061010','ph')
insert into svalue values ('0001','061012','cod')
insert into svalue values ('0002','061015','ph')
insert into svalue values ('0002','061016','cu')
insert into svalue values ('0002','061017','p')
insert in

to svalue values ('0003','061019','cu')

要求得到结果:
STCD SItem
0001 ph,cod
0002 ph,cu,p
0003 cu

实现方法:
CREATE function Fun_SUM(
@chvName Varchar(200)
)returns varchar(8000) as
begin
declare @r varchar(4000)
set @r=''
select @r=@r+','+SItem from svalue where STCD = @chvName
return(stuff(@r,1,1,''))
end
SELECT stcd,dbo.Fun_SUM(STCD) as sItem FROM svalue GROUP BY STCD

相关文档