1、单选题 一、咱们有不少瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了之后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。如今有5只小白鼠,请问一下,咱们用这五只小白鼠,5分钟的时间,可以检测多少瓶液体的成分(C) A、5瓶 B、6瓶 C、31瓶 D、32瓶前端
二、若某链表最经常使用的操做是在最后一个结点以后插入一个结点和删除最后一个结点,则采用(C)存储方式最节省时间? A、单链表 B、带头结点的非循环双链表 C、带头节点的双循环链表 D、循环链表web
3、若是须要对磁盘上的1000W条记录构建索引,你认为下面哪一种数据结构来存储索引最合适?(B) A、Hash Table B、AVL-Tree C、B-Tree D、List数据库
四、可用来检测一个web服务器是否正常工做的命令是(C) A、ping B、tracert C、telnet D、ftp缓存
只有C能够测试Web主机的网页服务器是否工做正常,假设该服务器的网页服务器使用的是默认端口,则可使用命令telnet hostname 80 来测试其是否工做。 5、下面哪一个操做是Windows独有的I/O技术(C) A、Select B、Poll C、IOCP D、Epoll安全
六、IPV6地址包含了(D)位 A、16 B、32 C、64 D、128服务器
七、数据库里建索引经常使用的数据结构是(C) A、链表 B、队列 C、树 D、哈希表网络
八、在公司局域网上ping www.taobao.com没有涉及到的网络协议是(C) A、ARP B、DNS C、TCP D、ICMP数据结构
DNS是将域名www.taobao.com映射成主机的IP地址,ARP是将IP地址映射成物理地址,ICMP是报文控制协议,由路由器发送给执行ping命令的主机,而一个ping命令并不会创建一条TCP链接,故没有涉及TCP协议。 2、填空题 一、http属于(应用层)协议,ICMP属于(网络层)协议。 二、深度为k的彻底二叉树至少有(2^(k-1))个结点,至多有(2^k-1)个结点。 三、字节为6位的二进制有符号整数,其最小值是(-32)。 四、设有28盏灯,拟公用一个电源,则至少需有4插头的接线板数(9)个。分布式
第一个板4个口,此后每增长1个板会消耗1个原来的口,总的只增长3个口,故N个接线板能提供 1+3*N个电源口。 3、综合题 一、有一颗结构以下的树,对其作镜像反转后以下,请写出能实现该功能的代码。注意:请勿对该树作任何假设,它不必定是平衡树,也不必定有序。 1 1 / | \ / |
2 3 4 4 3 2 /|\ /\ | | / \ / |
6 5 7 8 9 10 10 9 8 7 5 6 答:以孩子、兄弟的存储结构来存储这棵树,使之成为一颗二叉树,而后对二叉树进行链表的转换。性能
typedef struct TreeNode { int data; struct TreeNode *firstchild; struct TreeNode *nextsibling; }TreeNode,*Tree;
void MirrorTree(Tree root) { if(!root) return ; if(root->firstchild) { Tree p=root->firstchild; Tree cur=p->nextsibling; p->nextsibling=NULL; while(cur) { Tree curnext=cur->nextsibling; cur->nextsibling=p; if(p->firstchild) MirrorTree(p); p=cur; cur=curnext; } root->firstchild=p; } }
int main(void) { TreeNode *root=(TreeNode *)malloc(sizeof(TreeNode)); Init(); MirrorTree(root); OutPut(); } 2、假设某个网站天天有超过10亿次的页面访问量,出于安全考虑,网站会记录访问客户端访问的ip地址和对应的时间,若是如今已经记录了1000亿条数据,想统计一个指定时间段内的区域ip地址访问量,那么这些数据应该按照何种方式来组织,才能尽快知足上面的统计需求呢,设计完方案后,并指出该方案的优缺点,好比在什么状况下,可能会很是慢? 答:用B+树来组织,非叶子节点存储(某个时间点,页面访问量),叶子节点是访问的IP地址。这个方案的优势是查询某个时间段内的IP访问量很快,可是要统计某个IP的访问次数或是上次访问时间就不得不遍历整个树的叶子节点。答: 或者能够创建二级索引,分别是时间和地点来创建索引。
4、附加题 一、写出C语言的地址对齐宏ALIGN(PALGNBYTES),其中P是要对齐的地址,ALIGNBYTES是要对齐的字节数(2的N次方),好比说:ALIGN(13,16)=16 ALIGN(P,ALIGNBYTES) ( (void*)( ((unsigned long)P+ALIGNBYTES-1)&~(ALIGNBYTES-1) ) )
二、在高性能服务器的代码中常常会看到相似这样的代码: typedef union { erts_smp_rwmtx_t rwmtx; byte cache_line_align_[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(sizeof(erts_smp_rwmtx_t))]; }erts_meta_main_tab_lock_t;
erts_meta_main_tab_lock_t main_tab_lock[16];
请问其中用来填充的cache_line_align的做用是?
三、在现代web服务系统的设计中,为了减轻源站的压力,一般采用分布式缓存技术,其原理以下图所示,前端的分配器将针对不一样内容的用户请求分配给不一样的缓存服务器向用户提供服务。 分配器 / |
缓存 缓存 ...缓存 服务器1 服务器2 ...服务器n
1)请问如何设置分配策略,能够保证充分利用每一个缓存服务器的存储空间(每一个内容只在一个缓存服务器有副本)
2)当部分缓存服务器故障,或是由于系统扩容,致使缓存服务器的数量动态减小或增长时,你的分配策略是否能够保证较小的缓存文件重分配的开销,若是不能,如何改进?
3)当各个缓存服务器的存储空间存在差别时(若有4个缓存服务器,存储空间比为4:9:15:7),如何改进你的策略,按照如上的比例将内容调度到缓存服务器?