高难度的搜索相关笔试题,还没有人解决。

li1gang11 2007-09-20 04:31:56
1、
考虑一个在线好友系统。系统为每个用户维护一个好友列表,列表限制最多可以有500个好友,好友必须是这个系统中的其它用户。好友关系是单向的,用户B是用户A的好友,但A不一定是B的好友。

用户以ID形式表示,现给出好友列表数据的文本形式如下:
1 3,5,7,67,78,3332
2 567,890
31 1,66
14 567
78 10000

每行数据有两列,第一列为用户ID,第二列为其好友ID,不同ID间用”,”分隔,ID升序排列。列之间用”t”分隔。


要求:
请设计合适的索引数据结构,来完成以下查询:
给定用户A和B,查询A和B之间是否有这样的关系:B是A的二维好友(好友的好友)。
如上例中,10000为1的二维好友,因为78为1的好友,10000为78的好友。

详细说明自己的解题思路,说明自己实现的一些关键点。并给出实现的伪代码实现建立索引过程和查询过程,并说明空间和时间复杂度。

限制:
用户数量不超过1000万,平均50个好友。


2、
请设计一个网页存储系统,能存储千万量级的网页。

要求:
1.支持按照URL为键值的随机添加,删除和修改网页
2.支持多个线程同时添加,修改和删除
3.支持多线程按照入库时间批量的获取网页,并尽可能的快
提示:设计应包括如下几方面:
1.网页的存储方式设计,即硬盘数据的组织形式
2.如何支持随机查找
3.如何优化批量检索
4.增删改查之间的同步和互斥,如何达到最大的并发.
系统限制和一些参考参数:
硬盘400G, 内存4G
硬盘的I/O比内存的I/O速度慢1000倍
硬盘的连续I/O比随机I/O快10倍
网页的平均长度为25K
附加:
请说明你的系统在亿到十亿规模的扩展方法.

3、
为某图书馆开发在线浏览系统,使用户可以通过自定义的图书别名浏览相关联的图书
内容。假设该图书馆有1000万注册用户,馆藏图书1000万部。在线浏览系统允许用户自
定义分类名称,每个分类可以包含若干部书籍。用户可以添加、删除分类,修改分类的
名称(同一用户不允许有名称相同的分类),可以在分类下添加、删除书籍,修改书籍
的别名(同一分类下不允许有名称相同的别名)。现在设定每个用户最多可以自定义10
0个分类,每个分类最多可以包含100部书籍。

A、假定用数据库解决存储问题,请设计相关的数据表结构,并给出设计考虑。

B、请给出下列操作的SQL语句

展示用户A的所有分类

展示用户A所设置的分类F下的所有书籍信息

C、请根据题目A的结果,尝试分析一下当用户数目增长到1亿,馆藏图书达到10亿册,每
天访问用户达到500万,平均每人有10次操作时,系统应当做哪些改进或优化。


4、 假设一个mp3搜索引擎收录了2^24首歌曲,并记录了可收听这些歌曲的2^30条URL,但每
首歌的URL不超过2^10个。系统会定期检查这些URL,如果一个URL不可用则不出现在搜索结
果中。现在歌曲名和URL分别通过整型的SONG_ID和URL_ID唯一确定。对该系统有如下需求

1) 通过SONG_ID搜索一首歌的URL_ID,给出URL_ID计数和列表
2) 给定一个SONG_ID,为其添加一个新的URL_ID
3) 添加一个新的SONG_ID
4) 给定一个URL_ID,将其置为不可用

限制条件:内存占用不超过1G,单个文件大小不超过2G,一个目录下的文件数不超过128个


为获得最佳性能,请说明设计的数据结构、搜索算法,以及资源消耗。如果系统数据量扩
大,该如何多机分布处理?
...全文
1073 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuzhenguang 2009-10-10
  • 打赏
  • 举报
回复
mark
lidowx 2009-10-07
  • 打赏
  • 举报
回复
关注 接分
zhang_dongpeng 2009-09-18
  • 打赏
  • 举报
回复
广州达梦网络科技有限公司是一家致力于为提供各行业垂直搜索和元搜索服务的专业化公司。公司坚持以服务客户为中心,以技术创新为手段,为客户提供各个行业、任意搜索源精确搜索的解决方案,以及中个小企业信息服务的解决方案!
主要的搜索引擎案例有:万帮生活搜索,114soso网,万帮知识经验搜索,佛教新闻、网页、图片、视频、经典、词典、mp3等搜索。
能为您快速定制各类搜索引擎,如果您各类搜索引擎需求,请联系我们:020-22174900,QQ:46244150。
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
关注 接分
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
等待牛人来答.
zp1234567 2008-03-03
  • 打赏
  • 举报
回复
如果我没有猜测错的话 这应该是baidu的shit面试题.
看问题就知道出题人是如何的shit了
liutaoxwl 2008-02-22
  • 打赏
  • 举报
回复
对于第二题:
设计开始的考虑:
平均每个网页25k,千万个网页就是25k*1000w=256G个字节,32位操作系统每个文件4G,那么需要(25k*1000w)/4g=62.5个文件来存储所有网页的内容。

给每个网页分配一个从0开始的编号,编号顺序及为入库时间顺序(也可以再做一个时间与编号的对照表),网页内容按编号顺序连续存储在多个内容文件中。
索引信息主要是,一个URL包含多少个网页、包含哪些网页(指向内容文件中网页内容的指针)。

2.如何支持随机查找
有个数组按照网页编号顺序记录每个编号的网页内容在内容文件中的指针。

3.如何优化批量检索
支持多线程检索,将以前检索的结果缓存到内存

4.增删改查之间的同步和互斥,如何达到最大的并发
添加的时候没办法,只能锁住信息,进行添加,不过可以先添加内容,因为内容是向后追加的,这时候不影响检索和更新,最后再修改索引数据的时候加锁。
屏蔽位,即用1000万个位(约1.25M)的数组记录所有网页,网页编号表示这个网页在屏蔽数组中的屏蔽位是第几位。
删除的时候,将这个位数组加锁、置位、解锁。
更新就是先删除,再添加。
最后根据屏蔽位数组定期对内容和索引进行维护,回收浪费的空间。

资料的使用:
硬盘400G > 256G 说明方案可行
内存4G 具体做索引的时候会用到
硬盘的I/O比内存的I/O速度慢1000倍 使用内存缓存优化
硬盘的连续I/O比随机I/O快10倍 内容连续存储,可以一次性连续读取某段时间的网页内容。
网页的平均长度为25K 判断需要分文件存储。


最后数据亿~十亿,就要分多台机器了。可以根据网页URL散列到多台机器。
liutaoxwl 2008-02-22
  • 打赏
  • 举报
回复
对于第一道题:
个人认为主要思想是对每个ID,建立两个指针,一个是指向所有他的好友的ID,一个指向以他为好友的ID。
假设ID是连续的(如果不连续则使用hash表),一个1000万个元素的数组,每个元素有2个指针域,分别指向两个数组,1个数组保存他所有好友的ID(升序排列),另一个数组是保存以他为好友的ID(升序排列)。(这两个数组可以做成固定50个元素的静态数组,大于50个元素则以25为增长量做链表)。

检索的时候,找到A的好友ID数组AID,以及以B为好友的ID数组BID。遍历BID用二分查找在AID中进行查找。(这里可以先找到AID和BID中最小值和最大值,MaxA,MaxB,MinA,MinB,Max=MaxA<MaxB?MaxA:MaxB,Min=MinA>MinB?MinA:MinB,只遍历BID中大于Min且小于Max的ID)
jmulxg 2008-01-24
  • 打赏
  • 举报
回复
之前有看过,好难的题
linyai 2007-12-21
  • 打赏
  • 举报
回复
第二道不错,基础的IR知识

随机查找可以使用trie(<算法分析与设计>)
硬盘使用大文件偏移量来解决,
更新删除可以写入新的字符,更新标记,通过后期的文件优化来回收空间.
优化批量检索如果指的是多个查询请求的话可以基于lexicon的CACHE
如果是检索中有多个key word可使用LUCENE 的skip data来优化

至少多线程,锁应该不是好的解决方案

刚学IR,还不能完整解答.
lxzm1001 2007-12-17
  • 打赏
  • 举报
回复
呵呵
仰望星空WU 2007-12-11
  • 打赏
  • 举报
回复
第一个只是用个map容器来存储好友对应关系。 multimap A用户(B,C,D..), 其实更复杂的是好友通知的问题。预定义好友只是静态的,还有动态的好友通知。
第二个是spider,
每三个是
huhuan_dlut 2007-11-21
  • 打赏
  • 举报
回复
第一个题目很简单,我用java写啦一个,用一个map
import java.io.*;
import java.util.*;

public class ceshi {

public static void main(String[] args) throws Exception {
int B, A;
Map<Integer, LinkedList> mp = new LinkedHashMap<Integer, LinkedList>();
FileReader fr = new FileReader("F:\\hao.txt");
BufferedReader br = new BufferedReader(fr);
String str;
while ((str = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(str);
while (st.hasMoreElements()) {
int i = Integer.parseInt(st.nextToken());
String s = st.nextToken();
StringTokenizer st1 = new StringTokenizer(s, ",", false);
LinkedList ll = new LinkedList();
while (st1.hasMoreElements()) {
int t = Integer.parseInt(st1.nextToken());
ll.add(t);
}
mp.put(i, ll);
}
}
System.out.println("请输入B");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
B = Integer.parseInt(in.readLine());
System.out.println("请输入A");
BufferedReader in1 = new BufferedReader(
new InputStreamReader(System.in));
A = Integer.parseInt(in1.readLine());
LinkedList ll1 = mp.get(A);
Iterator it = ll1.iterator();
while (it.hasNext()) {
int tt = ((Integer) it.next()).intValue();
LinkedList ll2 = mp.get(tt);
if (ll2 != null) {
Iterator it1 = ll2.iterator();
while (it1.hasNext()) {
int tt1 = ((Integer) it1.next()).intValue();
if (tt1 == B) {
System.out.println(B+"是"+A+"的二维好友");
}
}
}
}
}

}
c语言学习2.0--晨晖C语言学习系统
特点一:按教材每小节讲解,用最通俗的语言阐述语法概念,同时用丰富易懂的代码事例来辅助说明, 让你步步精进,没有似是而非的概念。整个语法阐述部分,其文字已超过十万字符,语言特 点完全针对C语言初学者,特别是等级考试二级C笔试中的很多让人似是而非的题目,在课程 中逐一列出分析,让它们无藏身之处,下载试用便知。
特点二:课后笔试和编程习题全部点评,学习起来不留死角。
特点三:每章配套强化笔试题和编程题,并配有详细分析和答案。
特点四:系统内置Turbo C 2.0编程环境,用户不必配置,在软件中直接调用即可。其中编程环境设置 了支持西文和中文两种模式,用户可任意选择,其中支持中文模式是全国计算机等级考试的必
备环境。
特点五:模拟笔试环境配备数套全真笔试试题,是作者从所有历届笔试真题中筛选而成,并去掉过时 部分溶入新公共基础题,难度和类型与目前全国计算机等级考试完全一致,同时配有评分系统。 可以说在目前等级考试大纲不改的前提下,这些笔试题(难度、类型、知识点)已经对今后所 有可能出的题目做了高强度的覆盖。
特点六:系统内置作者开发的等级考试二级和三级上机环境,界面和操作与真实考试环境完全一致,让你有 亲临现场的感觉。相对来讲,上机考试要比笔试紧张,所以熟练掌握上机环境的操作非常重要。
特点七:二级上机系统配有100多套试题,三级上机系统配有80多套试题,对真正等级考试题库做高强 度覆盖,并配有作者独立开发的评分系统与评析系统,让你一目了然,及时把握掌握的程度。
特点八:以WEB页面和图片的形式对Turbo C 2.0编程环境作详细的说明,让你无师自通,熟练掌握编 程环境的使用。
特点九:可以自己掌控的软件界面。在软件内通过极简单的设置,可以让软件界面随你桌面的壁纸变化, 让软件充满个性。
特点十:软件作者参加计算机等级考试培训多年,对二级C以及三级、四级程序设计做过精心研究,实战经验丰富,本软件是C语言知识和作者经验的结合。

2,760

社区成员

发帖
与我相关
我的任务
社区描述
搜索引擎的服务器通过网络搜索软件或网络登录等方式,将Internet上大量网站的页面信息收集到本地,经过加工处理建立信息数据库和索引数据库。
社区管理员
  • 搜索引擎技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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