09年10月13日百度运维笔试题分析
转载请注明出处:http://narmy.cn/linux/read.php/100.htm
我参加的是18号的笔试,18号的笔试题我忘了,看到网上有记忆力好的同学记得13号的笔试题,试着做一做:
总共三部分7道题
第一部分·简答
1·简述树的深度优先算法、广度优先算法,及非递归实现的特点。
深度优先搜索法是优先扩展尚未扩展的且具有最大深度的结点;广度优先搜索法是在扩展完第K层的结点以后才扩展K+1层的结点。主要不同点在于深度优先需要使用栈,广度优先使用队列FIFO。
非递归实现要求程序自己设置栈来保存要用到的数据,与递归不同的是递归需要系统来完成数据和程序执行状态在栈中的保存。非递归可以减少数据的冗余以及系统设置栈带来的巨大开销。
2·在文件系统中,元数据(比如ext2中的inode)的基本作用是什么?ext2跟ext3的根本区别是什么?
记录数据的Modify,Access,Create times.以及记录数据的存放块区。并且通过元数据的加锁机制等可以保证数据的一致性。
ext3是ext2的扩展,主要区别是ext3加入了日志系统。它允许以回写(writeback)预定(ordered),数据(data)三种方式记录日志,默认为预定。并默认在日志添满1/4,或某一个日志记时器超时时提交日志。
3·在web服务中,负载均衡的基本作用是什么?请举例你熟悉的一款负载均衡软件或者实现方案,简述它们的实现原理。(这题后半部分为开放性,我也没记多深,大概就这样)
由于系统服务访问量和带宽的暴增,服务器的TCP/IP协议栈,服务器系统的低效和处理器的低效便成为了瓶颈。因此负载均衡集群的出现将服务均匀地分配给提供同一种服务的各个服务器,从而降低单个服务器的负担。
LVS(Linux Vitual Server):LVS采用GPL协议,可以自由开发。大致分为三层:
1.负载调度器:对外的前端机使用IPVS(IP负载均衡)软件,采用3种IP负载均衡技术和8种负载调度算法。其中负载均衡技术如直接路由法VS/DR,可以通过改写请求的MAC地址,将请求发送到真实的服务器,这样有效地提高了集群系统的伸缩性和吞吐量。8种调度算法如加权最少链接法,动态地将请求发送到目前链接最少的真实服务器上,并通过加权来优化算法,很好地提高性能。
2.服务器池:通过增加服务器池的结点数目,往往性能会成线性的增长。有效地解决了服务的伸缩性。
3.共享存储:数据库或是网络文件系统,也有可能是分布式文件系统。数据库保证并发访问的一致性,静态数据可存在网络文件系统如NFS/CIFS中,如系统规模大,可以使用分布式文件系统存储。而且共享存储对于大多数情况下的读密集服务来讲可以提供大容量的cache,因此访问速度接近本地磁盘。
另外还有基于HTTPS的安全系统管理WEB界面,便 于系统管理员进行集群的管理和操作。
4·数据库事务的四大特性是什么?请你简单举例对一个完全不懂数据库的人解释这四个特性。投数据库管理员(DBA)必答。
事务的:原子性、一致性、分离性、持久性
(1) 原子性
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
事务的原子性要求,如果妑一个事务可看作是一个程序,它要么完整的被执行,要么完全不执垳。就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库。这种特性称为原子性。
假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤销(或流产)。DBMS必须确保由成功提交的事务完成的所洧操纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响。
(2) 一致性
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
一致性处理数据库中对所有语义约束的保护。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。例如,当数据库处于一致性状态S1时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态S2。
(3) 分离性
分离性栺并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。
分离性是DBMS针对并发事务间的冲突提供的安全保证。DBMS可以通过加锁在并发执行的事务间提供不同级别的分离。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常凊况。
DBMS可以在并发秇行的事务间提供不同级别的分离。分离的级别和并发事务的吞吐量之间存在反比关系。较多事务的可分离性可能会带来较高的冲突和较多的事务流产。流产的事务要消耗资源,这些资源必须要重新被访问。因此,确保高分离级别的DBMS需要更多的开销。
(4)持久性
持久性意味着当系统或介质发生故障时,确保巳提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障。持久性通过数据库备份和恢复来保证。
持久性意味着当系统戓介质发生故障时,确保已提交事务的更新芣能丢失。即对已提交事务的更新能恢复。一旦一个事务被提交,DBMS必须保证提供适当的冗余,使其耐得住系统的故障。所以,持久性主要在于DBMS的恢复性能。
5·一个微型处理器,1KB内存和1MHz(每MHz运算次数为10^6),在这样的计算机上面运行程序(程序到该终止时会自动终止,不会出现死循环)最长能运行多长时间?你可以进行任何需要的假定。
这个题我想不明白,呵呵。有待高手指点。
第二部分·算法和程序设计
1·int maxContinuNum(const char *inputstr,char * outputstr)
编写一段程序实现该函数,实现返回一个以“\0”结束的字符串中最长的数字串的长度,并把该数字子串的首地址赋给outputstr。不能使用任何库函数或已经存在的函数,如strlen。
例如:在字符串“abc123abcdef12345abcdefgh123456789”中,把该字符串的首地址赋给inputstr,返回9,outputstr指向字符串“123456789”的首地址。
int maxContinuNum(const char * inputstr,char * outputstr)
{
int maxlen=0,tmplen=0,i;
const char* in=inputstr;
char * out=outputstr,*temp,*final;
while (*in!='\0')
{
if (*in>='0'&&*in {
tmplen=0;
for (temp=in;*in>='0'&&*in {
tmplen++;
}
}
if (maxlen {
maxlen=tmplen;
final=temp;
}
in++;
}
for (i=0;i *out++=*final++;
*out='\0';
return maxlen;
}
#include
#include
#include
int main(void)
{
const char *a="abc123abcdef174395abcdefgh123456789";
char b[sizeof(a)];
int max=maxContinuNum(a,b);
printf ("%d\n",max);
printf ("%s\n",b);
exit (0);
}
第三部分·备份系统设计
发题的人这个也记不清了,而且开放性题全靠自己平时积累的发挥了。呵呵。
我参加的是18号的笔试,18号的笔试题我忘了,看到网上有记忆力好的同学记得13号的笔试题,试着做一做:
总共三部分7道题
第一部分·简答
1·简述树的深度优先算法、广度优先算法,及非递归实现的特点。
深度优先搜索法是优先扩展尚未扩展的且具有最大深度的结点;广度优先搜索法是在扩展完第K层的结点以后才扩展K+1层的结点。主要不同点在于深度优先需要使用栈,广度优先使用队列FIFO。
非递归实现要求程序自己设置栈来保存要用到的数据,与递归不同的是递归需要系统来完成数据和程序执行状态在栈中的保存。非递归可以减少数据的冗余以及系统设置栈带来的巨大开销。
2·在文件系统中,元数据(比如ext2中的inode)的基本作用是什么?ext2跟ext3的根本区别是什么?
记录数据的Modify,Access,Create times.以及记录数据的存放块区。并且通过元数据的加锁机制等可以保证数据的一致性。
ext3是ext2的扩展,主要区别是ext3加入了日志系统。它允许以回写(writeback)预定(ordered),数据(data)三种方式记录日志,默认为预定。并默认在日志添满1/4,或某一个日志记时器超时时提交日志。
3·在web服务中,负载均衡的基本作用是什么?请举例你熟悉的一款负载均衡软件或者实现方案,简述它们的实现原理。(这题后半部分为开放性,我也没记多深,大概就这样)
由于系统服务访问量和带宽的暴增,服务器的TCP/IP协议栈,服务器系统的低效和处理器的低效便成为了瓶颈。因此负载均衡集群的出现将服务均匀地分配给提供同一种服务的各个服务器,从而降低单个服务器的负担。
LVS(Linux Vitual Server):LVS采用GPL协议,可以自由开发。大致分为三层:
1.负载调度器:对外的前端机使用IPVS(IP负载均衡)软件,采用3种IP负载均衡技术和8种负载调度算法。其中负载均衡技术如直接路由法VS/DR,可以通过改写请求的MAC地址,将请求发送到真实的服务器,这样有效地提高了集群系统的伸缩性和吞吐量。8种调度算法如加权最少链接法,动态地将请求发送到目前链接最少的真实服务器上,并通过加权来优化算法,很好地提高性能。
2.服务器池:通过增加服务器池的结点数目,往往性能会成线性的增长。有效地解决了服务的伸缩性。
3.共享存储:数据库或是网络文件系统,也有可能是分布式文件系统。数据库保证并发访问的一致性,静态数据可存在网络文件系统如NFS/CIFS中,如系统规模大,可以使用分布式文件系统存储。而且共享存储对于大多数情况下的读密集服务来讲可以提供大容量的cache,因此访问速度接近本地磁盘。
另外还有基于HTTPS的安全系统管理WEB界面,便 于系统管理员进行集群的管理和操作。
4·数据库事务的四大特性是什么?请你简单举例对一个完全不懂数据库的人解释这四个特性。投数据库管理员(DBA)必答。
事务的:原子性、一致性、分离性、持久性
(1) 原子性
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
事务的原子性要求,如果妑一个事务可看作是一个程序,它要么完整的被执行,要么完全不执垳。就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库。这种特性称为原子性。
假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤销(或流产)。DBMS必须确保由成功提交的事务完成的所洧操纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响。
(2) 一致性
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
一致性处理数据库中对所有语义约束的保护。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。例如,当数据库处于一致性状态S1时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态S2。
(3) 分离性
分离性栺并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。
分离性是DBMS针对并发事务间的冲突提供的安全保证。DBMS可以通过加锁在并发执行的事务间提供不同级别的分离。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常凊况。
DBMS可以在并发秇行的事务间提供不同级别的分离。分离的级别和并发事务的吞吐量之间存在反比关系。较多事务的可分离性可能会带来较高的冲突和较多的事务流产。流产的事务要消耗资源,这些资源必须要重新被访问。因此,确保高分离级别的DBMS需要更多的开销。
(4)持久性
持久性意味着当系统或介质发生故障时,确保巳提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障。持久性通过数据库备份和恢复来保证。
持久性意味着当系统戓介质发生故障时,确保已提交事务的更新芣能丢失。即对已提交事务的更新能恢复。一旦一个事务被提交,DBMS必须保证提供适当的冗余,使其耐得住系统的故障。所以,持久性主要在于DBMS的恢复性能。
5·一个微型处理器,1KB内存和1MHz(每MHz运算次数为10^6),在这样的计算机上面运行程序(程序到该终止时会自动终止,不会出现死循环)最长能运行多长时间?你可以进行任何需要的假定。
这个题我想不明白,呵呵。有待高手指点。
第二部分·算法和程序设计
1·int maxContinuNum(const char *inputstr,char * outputstr)
编写一段程序实现该函数,实现返回一个以“\0”结束的字符串中最长的数字串的长度,并把该数字子串的首地址赋给outputstr。不能使用任何库函数或已经存在的函数,如strlen。
例如:在字符串“abc123abcdef12345abcdefgh123456789”中,把该字符串的首地址赋给inputstr,返回9,outputstr指向字符串“123456789”的首地址。
int maxContinuNum(const char * inputstr,char * outputstr)
{
int maxlen=0,tmplen=0,i;
const char* in=inputstr;
char * out=outputstr,*temp,*final;
while (*in!='\0')
{
if (*in>='0'&&*in {
tmplen=0;
for (temp=in;*in>='0'&&*in {
tmplen++;
}
}
if (maxlen
maxlen=tmplen;
final=temp;
}
in++;
}
for (i=0;i
*out='\0';
return maxlen;
}
#include
#include
#include
int main(void)
{
const char *a="abc123abcdef174395abcdefgh123456789";
char b[sizeof(a)];
int max=maxContinuNum(a,b);
printf ("%d\n",max);
printf ("%s\n",b);
exit (0);
}
第三部分·备份系统设计
发题的人这个也记不清了,而且开放性题全靠自己平时积累的发挥了。呵呵。