aftyingjiesheng 发表于 2011-5-30 16:15

10.19 – 百度基础平台部 - 耗子

10.19 – 百度基础平台部 - 耗子



一面
一面碰到高手L,高手L就出了一道题,条件:给几十台mysql服务器,和一张访问非常频繁的数据表
1 问如何设计,能够提高表的大规模并发访问性能?
我说要切分表。
2 问怎么切分?
我说hash静态切分ID,把表切到各个服务器上。
3 hash的话假如节点经常悲剧或者经常有新的节点假如怎么办?数据暴增怎么办?某部分数据过度频繁访问怎么办?
我说 经常挂节点就用一致性hash,或者用动态切分的方式,增加索引服务器(MDS)记录映射关系,然后局部数据过热做迁移。
4 迁移怎么迁?迁移过程中怎么保证业务连续性?迁移的话如果源服务器挂掉怎么办,怎么保证可用性?
我说 迁移后不删除源信息,要更改MDS上的元数据信息,元数据设计是(一段ID范围,一组服务器),然后在读某个ID时就在这个ID对应的这组服务器内做round robin方式的负载均衡。
5 如果用这个方法运维怎么办?一致性如何保证?
我说 那就干脆做副本吧,弄一个专门的备份服务器pool,哪台悲剧就顶上哪台,读的话直接做副本,写的话就做迁移。在运维时或者做OLAP时,直接忽略备份服务器pool中的数据。
6 那这种数据切分方式在遇到比如select * order by或者group by之类的查询怎么办?
答 每台服务器内部做order by group by操作,然后再做归并
7 那怎么select top 100呢。
每台top100,做胜者树归并。
8 那要统计去重复之后的结构呢,比如select * count(distinct name),去除重名的数据行,统计系统中有多少个name
答 单个mysql内部做select distinct操作,多个mysql服务器做归并。归并方法我说bloom filter,被否决,认为不精确。字典树,被否决,认为如果字符串中有汉字之类的,分支太多。最后老老实实多路归并,问多路归并怎么归并。答胜者树,不满足。答堆,勉强接受。
最后讨论了下 两个有序数组在归并时,怎样将复杂度降低到O(logn)

二面
一面面完元气大伤。二面碰到熟人,已经说不出来话了。
这个部猛男剧多的。
挂了吧。。。



文章摘自2012阿凡提求职手册——IT行业篇
http://bbs.aftjob.com/thread-607158-1-1.html
——
阿凡提百度(Baidu)求职俱乐部
http://bbs.aftjob.com/group-4-1.html
——
关于Web前端及百度web前端笔试面试题目
http://bbs.aftjob.com/thread-31614-1-1.html
百度质量部测试一面面经
http://bbs.aftjob.com/forum-viewthread-tid-31594-fromuid-35176.html
百度面经篇
http://bbs.aftjob.com/forum-viewthread-tid-469368-fromuid-35176.html
——
阿凡提(aftjob.com)求职社区
阿凡提求职俱乐部-国内第一家网络求职俱乐部,提供企业求职俱乐部和高校求职俱乐部交流平台。
——
页: [1]
查看完整版本: 10.19 – 百度基础平台部 - 耗子