搜索引擎岗位应聘必备题
导读
在搜索引擎应聘面试过程中,围绕搜索引擎本身技术、应用特点,总结有以下几类问题:1 URL,2分词,3排序,4存储和系统,5开源系统,6数据挖掘。从另外一个角度看就是围绕存储、计算、服务展开。主要考察被面试者的全面基础知识、索引系统理解程度、系统设计分析能力,以及项目经验和动手能力。
共两部分内容,第一部分围绕提出6类问题的一些代表题,第二部分单独从海量数据处理提出问题和解决策略。
第一部分6类问题
1 URL问题
1.1 去重
A,B两个文件,每个有50亿个URL,如何找出两个文件中重复的url,不能用分布式。
1.2 爬虫设计
如何实现一个可以抓取5亿视频数据,提供最短30分钟更新最新视频的分布式爬虫系统,并画出示意图。说明提高爬虫效率优化点,数据实时更新策略。
1.3爬虫维护
设计一个可以方便维护的网页提取的策略,以及后续维护策略方法。
1.4爬虫设计
设计一个在几十台机器爬虫部署,并不断升级维护的最小工作量的策略和方法。
2. 分词问题
2.1 词典设计
设计一个字典。以字符串为索引,存储用户定义的定长结构。要求有增、删、查、改的功能。已经给定一个函数,可以由字符串映射到一个签名,每个签名由两个unsigned int类型组成。假设每一个字符串能够对应唯一的一个签名,完全没有重复(或者重复的概率可以忽略),并且签名分布足够均匀。
请描述你的数据结构?内存如何申请?增、删、查、改的功能如何实现?如果操作很频繁,该如何优化?
2.2. 分词策略
说明一个自己常用的分词策略和业界常用分词和特点。
3 排序问题
3.1 检索评价
说明一个检索系统的关键指标有哪些。
3.2 排序参数
说明影响一个查询返回内容排序的影响因素有哪些。如果需要提高准确度需要优化哪些模块或则参数。说明一个网页的哪些数据对检索排序影响较大。
3.3动态排序
设计一个排序[ 准确度 ] 持续优化策略和方法,保证在仅可能少重建索引的前提下面,持续优化排序, 说明基本思路。
4存储和系统题
4.1 存储和访问
如何实现一个可以承载5亿视频数据 可以提供90%的请求在200ms 内返回,支持高峰1000q/s 的检索系统。说明基本结构和模块策略。
4.2 存储和访问
如何实现一个可以保存5亿条数据的存储系统。使用何种策略,在大量写入,大量读取的情况。
4.3. 系统维护
如何保证一个服务系统不间断运行情况下维护[当机维护]和升级,在升级,切换,索引重建等情况。
4.4. 自动化处理
举出一个可以自学习,自调整的软件系统的基本组成和相关实例。
4.5 存储和访问
200亿条数据,每条数据的大小在1K~1M不等,每条数据有一个唯一的u_int64的id。
请设计一个读取数据系统,能根据id获取数据。要求:
A. 内存有限制,16G
B. 尽可能利用内存资源
C. 尽可能高效的获取数据
D. 可以利用磁盘,磁盘容量不受限制
5开源案例题
5.1说明基本搜索技术学习途径和方法。
5.2说明一种数据流式业务处理的相关方法和技术
5.3 lucene 和 solr 的基本模块和流程和优缺点
5.4 lucene 和 solr 有哪些可扩展可优化点
5.5 nuthc基本模块和优缺点
5.6 hadoop 基本模块和流程和优缺点
5.7 hbase 基本模块和流程和优缺点
5.8 zookeeper 基本模块和流程和优缺点
5.9 Mareduce基本原理和优缺点
5.10 Google三件宝分析
5.11上机题:
实现一个简单 lucene [也可以其他开源组件] 的检索和查询系统。文档支持 title content
5.12上机题:
实现一个简单爬虫 抓取一个规则URL 网页。保存成文件到一个文件夹。 http://www.youku.com/playlist_show/id_[1-10000].html
文件命名按照 title-id.html 方法。
6数据挖掘问题
6.1. 说明在搜索中常用的几种数据分析和挖掘的方法 以及应用场合。
第二部分 海量数据处理
在处理海量数据问题时,首先要仔细分析问题,明白问题需要解决那些关键问题,明白需要达到怎样的存储、性能要求,在这之前,应充分理解业务数据的分布、数据粒度、数据服务的质量要求、数据的动态性、数据的关联性等真实数据、业务熟悉。通常我认为,处理海量数据问题时,心中要有一些基本概念:
1. 现有的开源的优秀工具那些是处理海量数据的;
2. 海量数据就因为数据大吗,可以考虑对海量数据进行分区操作;
3. 加快海量数据的访问,数据索引必不可是;
4. 内存总是有限的,内存的速度是最好的,建立缓存机制是十分必要的;
5. 海量数据来源多样,数据格式也不相同,最好是统一为字符串处理,逻辑处理交给上层应用;
6. 海量数据离不开集群、分布式,分布式的出错处理、负载均衡就必然要有一套可行的机制;
7. 所有底层的问题或者说存储的问题解决了,未来方便上层应用或者夸大底层支持的业务,对外应该有一个明朗的逻辑视图;
8. 系统设计和结构,会因为不同的语言、操作性在实现难以上不同,这也需要考虑;
9. 海量数据的一个应用就是数据挖掘服务,多域数据来源统一管理下,数据仓库和相关计算也应该了解一二;
10. 尽管说存储不是问题,如果能对数据进行压缩处理,又可以接受的性能,这何乐而不为呢。
在参考前人博客、文摘加上个人一点理解,汇总以下一些基础概念已帮助和我一样面临就业的学生,应对未来公司的面试考核。当然,有实际工作经验的大牛门来说,下面的问题早已不是问题,他们都在某个问题上是专家了。欢迎大牛指导!
具有通用性的数据结构和算法思路汇总有:
1. Bloom filter
2. Hashing
3. bit-map
4. 堆
5. 双层桶划分,可以理解为多级索引
6. 数据库索引
7. 倒排索引(Inverted index)
8. 外排序
9.trie树
10.分布式处理
参考:
1大数据量,海量数据 处理方法总结(转) http://g.51cto.com/880824/85208
2数据挖掘中分类算法小结 http://www.hadoopor.com/thread-270-1-1.html