❶ Redis 面试宝典之 Redis 如何处理已经过期的数据
本文讲的是 Redis 的键值过期之后的 数据处理 ,讲的是正常情况下的 数据清理 ,但面试者常常会把两个概念搞混,以至于和期望的工作失之交臂。我们本文的职责之一就是帮读者朋友搞清楚二者的区别,相信看完本文你就会对二者的概念有一个本质上的认识。
我们本文的面试题是,Redis 如何处理已过期的数据?
在 Redis 中维护了一个过期字典,会将所有已经设置了过期时间的键值全部存储到此字典中,例如我们使用设置过期时间的命令时,命令如下:
此命令表示 5s 之后键值为 mykey:java 的数据将会过期,其中 ex 是 expire 的缩写,也就是过期、到期的意思。
过期时间除了上面的那种字符类型的直接设置之外,还可以使用 expire key seconds 的方式直接设置,示例如下:
获取键值的执行流程是,当有键值的访问请求时 Redis 会先判断此键值是否在过期字典中,如果没有表示键值没有设置过期时间(永不过期),然后就可以正常返回键值数据了;如果此键值在过期字典中则会判断当前时间是否小于过期时间,如果小于则说明此键值没有过期可以正常返回数据,反之则表示数据已过期,会删除此键值并且返回给客户端 nil ,执行流程如下图所示:
这是键值数据的方法流程,同时也是过期键值的判断和删除的流程。
本文的面试题考察的是你对 Redis 的过期删除策略的掌握,在 Redis 中为了平衡空间占用和 Redis 的执行效率,采用了两种删除策略,上面的回答不完全对,因为他只回答出了一种过期键的删除策略,和此知识点相关的面试题还有以下这些:
常见的过期策略,有以下三种:
❷ 银行(数据处理中心面试要点)
回答如下:
银行的数据处理中心是银行的一个部门(属于市分行中的一个部门),主要工作是:
1、对下属各支行、网点的日终(每日营业终了)上传数据进行汇总(电脑汇总);
2、在对数据的汇总过程中,发现差错或疑点,要进行询问并处理;
3、对银行卡方面,监测本行所发各类卡(包括信用卡、储蓄卡)的即时交易情况,发现异常情况(如大额转入、转出或透支)要进行跟踪或电话询问,以确保客户资金安全及银行资金不受损失;
4、月终、季度结息、年终结算后,对各种数据进行筛选、排类,按各科目分别制成表格,并形成对各类数据进行表述的文字报告,以供决策层分析及掌握阶段性本行的经营状况。
对于一名在银行数据处理中心工作的员工,应该了解掌握本行的主要业务流程、会计知识、柜员的电脑操作,打字快是一个很好的基础,但对数字小键盘的操作也要熟练(达到盲打)。
通过以上介绍,你应该可以感觉到面试时会问些什么,但上面讲的主要是业务方面的东西,我想面试时还会问一些大众化的问题,如先叫你做一个自我介绍(介绍时要保持一种谦虚的心态),然后可能会问几个有关银行方面的专业问题(知道的就答,不知道的要面露微笑,说不是很清楚),也有可能会问到你的工资期望(你可以说没有什么要求,因为银行员工的工资都是有规定,不会乱来的,而且不会很低)等等。
总的来说,在面试时,一是不要紧张,二是始终保持一种谦虚又自信的心态,三是要注意着装整洁,头发、胡子、指甲要理、刮、修一下。
祝你面试通过。
❸ 去面试数据处理方面的工作,问我如何利用已有的数据资源,不知道怎么回答,
城市数据资源的开发利用包括政府数据资源的开发利用、企业数据资源的开发利用和公众数据资源的开发利用3个方面。政府数据资源开发利用要以提高办事效率和促进科学决策为原则,促进政务公开和行业监管,为经济发展和社会进步提供丰富、优质的数据产品和服务。要初步建立政府数据资源管理体制和管理机构,理顺政府数据资源采集、交换、共享、分析处理机制:企业数据资源的开发利用主要是建立以企业生产经营管理和产品开发等主要业务数据为主体的企业数据库管理系统,建立主要行业的产品供求数据库及其服务机制;公众数据资源开发利用是围绕普通市民的生活需求,在商业网点、科教文卫、休闲娱乐、医疗卫生、日常出行、前,绝大多数城市的数据资源,尤其是城市公共数据库和专题数据库开发滞后,城市可用数据资源严重不足;另一方面,现有各个城市信息网络和应用网络之间缺乏互联互通,造成了大量有价值的数据资源闲置。因此,深入研究如何进行城市数据资源开发利用具有非常重要的现实意义每天在城市政治、经济、社会等各个领域都产生大量的数据,这些数据资源只有通过不断的开发和利用才能达到增值的目的。由于缺乏有效的激励机制。虽然城市网络基础设施发展速度较快,但城市数据资源的开发利用却始终没有提到应有高度,普遍存在数据质量差、更新周期长、共享程度低等问题。希望采纳采纳!
❹ 数据分析面试注意什么
介绍项目经验:
参考STAR原则:即针对Situation(情景)、Task(任务)、Action(行动)和Result(结果)四个维度的追问项目经验,从而深入了解面试者的能力和特质
重点通过面试者具体在何时,在什么样的项目环境、范围中,以什么样的团队分工,用怎样的知识技能经验,具体完成什么任务?并包括对困难的处理,对结果的反思。
互联网公司的数据分析师使用Excel+SQL+R/Python的比较多,建议先看下JD上的要求,做好相关的准备。Excel至少要会用数据透视表和vlookup,VBA很有用但在面试中问到的不多,具体看JD要求。对于要求使用SQL的公司,一般会安排笔试或上机测试。也有公司不要求使用SQL,比方说一些BI比较成熟、业务发展比较慢的公司,或者一些使用第三方Saas服务的小公司。统计工具一般要求会一种就可以了,建议使用R或者Python,一方面是因为公司会要求尽量使用开源工具,另一方面可以让面试官进行针对性的提问。如果你使用的是面试官不太了解的工具,就丢掉了一个重要的加分项。对于应届生来说,是加分越多越好,而不是犯的错误越少越好。
通过让面试者对自己所处行业的分析,以及跨行业的对比,了解面试者是否具备宽阔的视野和对外部环境敏感的分析意识。
其实相对于数据分析技术来说,企业更注重的是分析师的综合能力。这些能力包括快速的学习能力、良好的沟通能力、清晰的逻辑分析能力、高度的概括归纳能力,当然还有最基本的数据分析能力。
所以你们看到数据分析能力是最基本的,这里包括数据分析的知识、思路、算法、模型、工具。
在考察完基本的数据分析能力后,企业其实最关心的不是这个数据分析师会多少种算法、懂得多少个模型。企业应该关心的是数据分析师到底能不能帮你解决实际问题,也就是数据分析的工作到底能不能落地。
所谓的落地就是,分析师能不能发现问题、问题归因、验证假设、提出解决方案、方案的投入产出与决策建议、方案落实的效果分析以及调优、方案的总结和未来项目的风险规避。
❺ 数据分析师常见的面试问题
关于数据分析师常见的面试问题集锦
1、你处理过的最大的数据量?你是如何处理他们的?处理的结果。
2、告诉我二个分析或者计算机科学相关项目?你是如何对其结果进行衡量的?
3、什么是:提升值、关键绩效指标、强壮性、模型按合度、实验设计、2/8原则?
4、什么是:协同过滤、n-grams, map rece、余弦距离?
5、如何让一个网络爬虫速度更快、抽取更好的信息以及更好总结数据从而得到一干净的数据库?
6、如何设计一个解决抄袭的方案?
7、如何检验一个个人支付账户都多个人使用?
8、点击流数据应该是实时处理?为什么?哪部分应该实时处理?
9、你认为哪个更好:是好的数据还是好模型?同时你是如何定义“好”?存在所有情况下通用的模型吗?有你没有知道一些模型的定义并不是那么好?
10、什么是概率合并(aka模糊融合)?使用sql处理还是其它语言方便?对于处理半结构化的数据你会选择使用哪种语言?
11、你是如何处理缺少数据的?你推荐使用什么样的处理技术?
12、你最喜欢的编程语言是什么?为什么?
13、对于你喜欢的统计软件告诉你喜欢的与不喜欢的3个理由。
14、sas, r, python, perl语言的区别是?
15、什么是大数据的诅咒?
16、你参与过数据库与数据模型的设计吗?
17、你是否参与过仪表盘的设计及指标选择?你对于商业智能和报表工具有什么想法?
18、你喜欢td数据库的什么特征?
19、如何你打算发100万的营销活动邮件。你怎么去优化发送?你怎么优化反应率?能把这二个优化份开吗?
20、如果有几个客户查询oracle数据库的效率很低。为什么?你做什么可以提高速度10倍以上,同时可以更好处理大数量输出?
21、如何把非结构化的数据转换成结构化的数据?这是否真的有必要做这样的转换?把数据存成平面文本文件是否比存成关系数据库更好?
22、什么是哈希表碰撞攻击?怎么避免?发生的频率是多少?
23、如何判别maprece过程有好的负载均衡?什么是负载均衡?
24、请举例说明maprece是如何工作的?在什么应用场景下工作的很好?云的安全问题有哪些?
25、(在内存满足的情况下)你认为是100个小的哈希表好还是一个大的哈希表,对于内在或者运行速度来说?对于数据库分析的评价?
26、为什么朴素贝叶斯差?你如何使用朴素贝叶斯来改进爬虫检验算法?
27、你处理过白名单吗?主要的规则?(在欺诈或者爬行检验的情况下)
28、什么是星型模型?什么是查询表?
29、你可以使用excel建立逻辑回归模型吗?如何可以,说明一下建立过程?
30、在sql, perl, c++, python等编程过程上,待为了提升速度优化过相关代码或者算法吗?如何及提升多少?
31、使用5天完成90%的精度的解决方案还是花10天完成100%的精度的解决方案?取决于什么内容?
32、定义:qa(质量保障)、六西格玛、实验设计。好的与坏的实验设计能否举个案例?
33、普通线性回归模型的缺陷是什么?你知道的其它回归模型吗?
34、你认为叶数小于50的决策树是否比大的好?为什么?
35、保险精算是否是统计学的一个分支?如果不是,为何如何?
36、给出一个不符合高斯分布与不符合对数正态分布的数据案例。给出一个分布非常混乱的数案例。
37、为什么说均方误差不是一个衡量模型的好指标?你建议用哪个指标替代?
38、你如何证明你带来的算法改进是真的有效的与不做任何改变相比?你对a/b测试熟吗?
39、什么是敏感性分析?拥有更低的敏感性(也就是说更好的强壮性)和低的预测能力还是正好相反好?你如何使用交叉验证?你对于在数据集中插入噪声数据从而来检验模型的.敏感性的想法如何看?
40、对于一下逻辑回归、决策树、神经网络。在过去XX年中这些技术做了哪些大的改进?
41、除了主成分分析外你还使用其它数据降维技术吗?你怎么想逐步回归?你熟悉的逐步回归技术有哪些?什么时候完整的数据要比降维的数据或者样本好?
42、你如何建议一个非参数置信区间?
43、你熟悉极值理论、蒙特卡罗逻辑或者其它数理统计方法以正确的评估一个稀疏事件的发生概率?
44、什么是归因分析?如何识别归因与相关系数?举例。
45、如何定义与衡量一个指标的预测能力?
46、如何为欺诈检验得分技术发现最好的规则集?你如何处理规则冗余、规则发现和二者的本质问题?一个规则集的近似解决方案是否可行?如何寻找一个可行的近似方案?你如何决定这个解决方案足够好从而可以停止寻找另一个更好的?
47、如何创建一个关键字分类?
48、什么是僵尸网络?如何进行检测?
49、你有使用过api接口的经验吗?什么样的api?是谷歌还是亚马逊还是软件即时服务?
50、什么时候自己编号代码比使用数据科学者开发好的软件包更好?
51、可视化使用什么工具?在作图方面,你如何评价tableau?r?sas?在一个图中有效展现五个维度?
52、什么是概念验证?
53、你主要与什么样的客户共事:内部、外部、销售部门/财务部门/市场部门/it部门的人?有咨询经验吗?与供应商打过交道,包括供应商选择与测试。
54、你熟悉软件生命周期吗?及it项目的生命周期,从收入需求到项目维护?
55、什么是cron任务?
56、你是一个独身的编码人员?还是一个开发人员?或者是一个设计人员?
57、是假阳性好还是假阴性好?
58、你熟悉价格优化、价格弹性、存货管理、竞争智能吗?分别给案例。
59、zillow’s算法是如何工作的?
60、如何检验为了不好的目的还进行的虚假评论或者虚假的fb帐户?
61、你如何创建一个新的匿名数字帐户?
62、你有没有想过自己创业?是什么样的想法?
63、你认为帐号与密码输入的登录框会消失吗?它将会被什么替代?
64、你用过时间序列模型吗?时滞的相关性?相关图?光谱分析?信号处理与过滤技术?在什么样的场景下?
65、哪位数据科学有你最佩服?从哪开始?
66、你是怎么开始对数据科学感兴趣的?
67、什么是效率曲线?他们的缺陷是什么,你如何克服这些缺陷?
68、什么是推荐引擎?它是如何工作的?
69、什么是精密测试?如何及什么时候模拟可以帮忙我们不使用精密测试?
70、你认为怎么才能成为一个好的数据科学家?
71、你认为数据科学家是一个艺术家还是科学家?
72、什么是一个好的、快速的聚类算法的的计算复杂度?什么好的聚类算法?你怎么决定一个聚类的聚数?
73、给出一些在数据科学中“最佳实践的案例”。
74、什么让一个图形使人产生误解、很难去读懂或者解释?一个有用的图形的特征?
75、你知道使用在统计或者计算科学中的“经验法则”吗?或者在商业分析中。
76、你觉得下一个20年最好的5个预测方法是?
77、你怎么马上就知道在一篇文章中(比如报纸)发表的统计数字是错误,或者是用作支撑作者的论点,而不是仅仅在罗列某个事物的信息?例如,对于每月官方定期在媒体公开发布的失业统计数据,你有什么感想?怎样可以让这些数据更加准确?
;❻ 数据处理有什么流程
数据治理流程是从数据规划、数据采集、数据储存管理到数据应用整个流程的无序到有序的过程,也是标准化流程的构建过程。
根据每一个过程的特点,我们可以将数据治理流程总结为四个字,即“理”、“采”、“存”、“用”。
1.理:梳理业务流程,规划数据资源
对于企业来说,每天的实时数据都会超过TB级别,需要采集用户的哪些数据,这么多的数据放在哪里,如何放,以什么样的方式放?
这些问题都是需要事先进行规划的,需要有一套从无序变为有序的流程,这个过程需要跨部门的协作,包括了前端、后端、数据工程师、数据分析师、项目经理等角色的参与。
2.采:ETL采集、去重、脱敏、转换、关联、去除异常值
前后端将采集到的数据给到数据部门,数据部门通过ETL工具将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程,目的是将散落和零乱的数据集中存储起来。
3.存:大数据高性能存储及管理
这么多的业务数据存在哪里?这需要有一高性能的大数据存储系统,在这套系统里面将数据进行分门别类放到其对应的库里面,为后续的管理及使用提供最大的便利。
4.用:即时查询、报表监控、智能分析、模型预测
数据的最终目的就是辅助业务进行决策,前面的几个流程都是为最终的查询、分析、监控做铺垫。
这个阶段就是数据分析师的主场,分析师们运用这些标准化的数据可以进行即时的查询、指标体系和报表体系的建立、业务问题的分析,甚至是模型的预测。
❼ 数据结构与算法处理面试题
1、时针走一圈,时针分针重合几次
2、N*N的方格纸,里面有多少个正方形
3、2000万个整数,找出第五十大的数字?
4、网络POI中如何试下查找最近的商家功能(提示:坐标镜像+R树)。
5、一个文件中有100万个整数,由空格分开,在程序中判断用户输入的整数是否在此文件中。说出最优的方法
6、两个不重复的数组集合中,这两个集合都是海量数据,内存中放不下,怎么求共同的元素?
7、烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
8、万亿级别的两个URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)
9、怎么在海量数据中找出重复次数最多的一个?
10、海量日志数据,提取出某日访问网络次数最多的那个IP。
11、在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。
12、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。
13、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。
14、有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。
15、给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
16、一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。
17、腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
18、100w个数中找出最大的100个数。
❽ 公务员面试 企业组织几个小组进行行业调查,中途你发现给的数据有错,若更改影响很大,你该怎么处理
首先,整理出来所有出错的数据,以及出错数据的来源。
其次,理清出错数据会造成哪些影响,影响大的话可能是会造成整体平均数或者某个成分占比的变动很大,弄明白到底会怎样影响最后调查结果。
第三,根据分析情况,列举几种解决措施。
最后,将情况尽快汇报领导定夺。
❾ 数据分析师面试经验
数据分析师面试经验
经常被问到一个问题,数据分析师或者数据挖掘工程师面试都问什么问题啊?特别是以下几类人群:
1、想转行做数据分析工作的朋友。
2、之前在比较小的公司做数据分析师,去大公司面试。
3、在校大学生。
在回答这些问题之前,先谈我的一个面试经历,记得之前我在一家小公司做数据分析师的时候,有朋友推荐我去一家大公司去面试数据分析师。当时我也在想,在面试大公司的数据分析师一定会问:
1、你做过哪些模型?
2、用什么工具做的啊?
3、你会或者知道哪些算法啊?
4、数据量有多大?
.......
但是当我去沟通下来的时候,问关于数据挖掘模型算法原理、使用什么工具的东西不多。更多是问一些关于项目背景、怎么思考这些项目、如何使用这些模型结果、怎么推动业务方去使用数据结果。【坦白说当时觉得不可思议,怎么问这些问题呢?】
所以大家在面试数据分析岗位的时候,基础知识是必须的。但是更多要关注数据实现数据价值,特别是从事一段时间数据分析同学,但如果仅仅是刚准备从事数据分析同学,基础的专业知识与技能肯定是面试必问的话题。如果这家公司希望未来培养或者招的真的做数据分析的,那就会像我面试碰到的,一定也会很关注面试之外的问题。
回到具体面试的问题,PS:这里我仅仅谈谈我的几点看法和我面试中会问到的几个问题,以及我为什么会为这些问题。
一、了解你面试岗位的工作性质
1、你对于你面试岗位价值的理解。
2、你觉得这个岗位大概的工作内容。
3、对于公司的理解。
二、沟通表达/逻辑思维
1、说一下你过往做的一些项目/说说你以前的工作经历。
2、你之前做过的一些专业分析。
3、你之前做过的模型。
4、之前是如何与业务方打交道的。
三、对于数据与商业的理解
1、如何理解数据敏感性?
2、你觉得数据怎么体现其商业价值?能否举个例子。
四、专业技能
1、基础的统计学知识。
2、数据挖掘基本的算法。
3、怎么评估模型好坏。
4、使用的工具。
5、数据挖掘流程。
6、怎么清洗变量【例如:指标定义、缺失值处理】。
7、怎么解决建模中会碰到一些技术问题【例如:共线性、不同模型针对的.数据类型】。
五、学习能力
1、是怎么学习专业知识。
2、怎么学习业务知识。
六、职业发展
1、未来3年的职业规划。
2、要实现这些规划计划是怎么样。
我把面试过程可以会问几类问题,不同的面试官可以侧重点不一样。我想和所有面试数据分析师的朋友说的:
1、面试过程中大家是平等的。不要太弱势也不要太强势。
2、把你之前的工作有条理的表达出来。
3、面试一些问题的时候,可以想一想。我个人觉得,并不是所有的问题必须别人一问完,立即回答。
4、把面试当作一种学习与经历。关键是从一些面试中你能发现自己不足。
另外一些小tips:
1、面试之前了解这个岗位。了解一下这个公司。花点时间在面试公司和岗位,了解了解人家公司是干什么,如果你对这家公司特别感兴趣,去网站上看看,去体验体验人家公司的产品和服务。会让面试的人感觉到尊重。当然太贵就算了。
2、如果有认识的人或者通过一些渠道先了解一下你面试的公司,部门情况到底是怎么样的。到底要招什么样的人。
3、很多企业的招聘与实际需要的人之间有很大的出入。
4、投递简历前:花点时间在简历上:要看到一份没有错别字且能把之前工作写清楚在一张纸上真的很少。
5、机会是留给有准备的人。你准备好了吗?每次面试结束看,看看自己的不足,然后一定立即去学起来。
❿ 十五道海量数据处理面试题
给定 a b 两个文件 各存放 亿个 url 每个 url 各占 字节 内存限制是 G 让你找出 a b 文件共同的 url ?
方案 可以估计每个文件安的大小为 G× = G 远远大于内存限制的 G 所以不可能将其完全加载到内存中处理 考虑采取分而治之的方法
方案 如果允许有一定的错误率 可以使用Bloom filter G内存大概可以表示 亿bit 将其中一个文件中的url使用Bloom filter映射为这 亿bit 然后挨个读取另外一个文件的url 检查是否与Bloom filter 如果是 那么该url应该是共同的url(注意会有一定的错误率)
读者反馈 @crowgns
有 个文件 每个文件 G 每个文件的每一行存放的都是用户的 query 每个文件的 query 都可能重复 要求你按照 query 的频度排序
方案
方案
一般query的总量是有限的 只是重复的次数比较多而已 可能对于所有的query 一次性就可以加入到内存了 这样 我们就可以采用trie树/hash_map等直接来统计每个query出现的次数 然后按出现次数做快速/堆/归并排序就可以了
( 读者反馈 @店小二 原文第二个例子中 找一台内存在 G左右的机器 依次对用hash_map(query query_count)来统计每个query出现的次数 由于query会重复 作为key的话 应该使用hash_multimap hash_map不允许key重复 此反馈是否正确 待日后考证)
方案
与方案 类似 但在做完hash 分成多个文件后 可以交给多个文件来处理 采用分布式的架构来处理(比如MapRece) 最后再进行合并
有一个 G 大小的一个文件 里面每一行是一个词 词的大小不超过 字节 内存限制大小是 M 返回频数最高的 个词
方案 顺序读文件中 对于每个词x 取 然后按照该值存到 个小文件(记为)中 这样每个文件大概是 k左右 如果其中的有的文件超过了 M大小 还可以按照类似的方法继续往下分 知道分解得到的小文件的大小都不超过 M 对每个小文件 统计每个文件中出现的词以及相应的频率(可以采用trie树/hash_map等) 并取出出现频率最大的 个词(可以用含 个结点的最小堆) 并把 词及相应的频率存入文件 这样又得到了 个文件 下一步就是把这 个文件进行归并(类似与归并排序)的过程了
海量日志数据 提取出某日访问网络次数最多的那个 IP
方案 首先是这一天 并且是访问网络的日志中的IP取出来 逐个写入到一个大文件中 注意到IP是 位的 最多有 ^ 个IP 同样可以采用映射的方法 比如模 把整个大文件映射为 个小文件 再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计 然后再找出频率最大的几个)及相应的频率 然后再在这 个最大的IP中 找出那个频率最大的IP 即为所求
在 亿个整数中找出不重复的整数 内存不足以容纳这 亿个整数
方案 采用 Bitmap(每个数分配 bit 表示不存在 表示出现一次 表示多次 无意义)进行 共需内存 ^ * bit= GB内存 还可以接受 然后扫描这 亿个整数 查看Bitmap中相对应位 如果是 变 变 保持不变 所描完事后 查看bitmap 把对应位是 的整数输出即可
方案 也可采用上题类似的方法 进行划分小文件的方法 然后在小文件中找出不重复的整数 并排序 然后再进行归并 注意去除重复的元素
海量数据分布在 台电脑中 想个办法高效统计出这批数据的 TOP
方案
(更多可以参考 第三章 寻找最小的 k 个数 以及第三章续 Top K 算法问题 的实现)
读者反馈 @QinLeopard
第 题的方法中 是不是不能保证每个电脑上的前十条 肯定包含最后频率最高的前十条呢? 比如说第一个文件中 A( ) B( ) C( ) D( ) 第二个文件中 A( ) B( ) C( ) D( ) 第三个文件中: A( ) B( ) C( ) D( ) 如果要选Top( ) 选出来的结果是A 但结果应该是B
@July 我想 这位读者可能没有明确提议 本题目中的 TOP 是指最大的 个数 而不是指出现频率最多的 个数 但如果说 现在有另外一提 要你求频率最多的 个 相当于求访问次数最多的 个IP地址那道题 即是本文中上面的第 题 特此说明
怎么在海量数据中找出重复次数最多的一个?
方案 先做hash 然后求模映射为小文件 求出每个小文件中重复次数最多的一个 并记录重复次数 然后找出上一步求出的数据中重复次数最多的一个就是所求(具体参考前面的题)
上千万或上亿数据(有重复) 统计其中出现次数最多的钱 N 个数据
方案 上千万或上亿的数据 现在的机器的内存应该能存下 所以考虑采用hash_map/搜索二叉树/红黑树等来进行统计次数 然后就是取出前N个出现次数最多的数据了 可以用第 题提到的堆机制完成
万字符串 其中有些是重复的 需要把重复的全部去掉 保留没有重复的字符串 请怎么设计和实现?
方案 这题用trie树比较合适 hash_map也应该能行
一个文本文件 大约有一万行 每行一个词 要求统计出其中最频繁出现的前 个词 请给出思想 给出时间复杂度分析
方案 这题是考虑时间效率 用trie树统计每个词出现的次数 时间复杂度是O(n*le)(le表示单词的平准长度) 然后是找出出现最频繁的前 个词 可以用堆来实现 前面的题中已经讲到了 时间复杂度是O(n*lg ) 所以总的时间复杂度 是O(n*le)与O(n*lg )中较大的哪一个
一个文本文件 找出前 个经常出现的词 但这次文件比较长 说是上亿行或十亿行 总之无法一次读入内存 问最优解
方案 首先根据用hash并求模 将文件分解为多个小文件 对于单个文件利用上题的方法求出每个文件件中 个最常出现的词 然后再进行归并处理 找出最终的 个最常出现的词
w 个数中找出最大的 个数
寻找热门查询
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来 每个查询串的长度为 字节 假设目前有一千万个记录 这些查询串的重复读比较高 虽然总数是 千万 但是如果去除重复和 不超过 百万个 一个查询串的重复度越高 说明查询它的用户越多 也就越热门 请你统计最热门的 个查询串 要求使用的内存不能超过 G
( ) 请描述你解决这个问题的思路
( ) 请给出主要的处理流程 算法 以及算法的复杂度
方案 采用trie树 关键字域存该查询串出现的次数 没有出现为 最后用 个元素的最小推来对出现频率进行排序
关于此问题的详细解答 请参考此文的第 节 第三章续 Top K 算法问题的实现
一共有 N 个机器 每个机器上有 N 个数 每个机器最多存 O(N) 个数并对它们操作 如何找到 N^ 个数中的中数?
方案 先大体估计一下这些数的范围 比如这里假设这些数都是 位无符号整数(共有 ^ 个) 我们把 到 ^ 的整数划分为N个范围段 每个段包含( ^ )/N个整数 比如 第一个段位 到 ^ /N 第二段为( ^ )/N到( ^ )/N … 第N个段为( ^ )(N )/N到 ^ 然后 扫描每个机器上的N个数 把属于第一个区段的数放到第一个机器上 属于第二个区段的数放到第二个机器上 … 属于第N个区段的数放到第N个机器上 注意这个过程每个机器上存储的数应该是O(N)的 下面我们依次统计每个机器上数的个数 一次累加 直到找到第k个机器 在该机器上累加的数大于或等于(N^ )/ 而在第k 个机器上的累加数小于(N^ )/ 并把这个数记为x 那么我们要找的中位数在第k个机器中 排在第(N^ )/ x位 然后我们对第k个机器的数排序 并找出第(N^ )/ x个数 即为所求的中位数的复杂度是O(N^ )的
方案 先对每台机器上的数进行排序 排好序后 我们采用归并排序的思想 将这N个机器上的数归并起来得到最终的排序 找到第(N^ )/ 个便是所求 复杂度是O(N^ *lgN^ )的
最大间隙问题
给定n个实数 求着n个实数在实轴上向量 个数之间的最大差值 要求线性的时间算法
方案 最先想到的方法就是先对这n个数据进行排序 然后一遍扫描即可确定相邻的最大间隙 但该方法不能满足线性时间的要求 故采取如下方法
将多个集合合并成没有交集的集合
给定一个字符串的集合 格式如 要求将其中交集不为空的集合合并 要求合并完成的集合之间无交集 例如上例应输出
( ) 请描述你解决这个问题的思路
( ) 给出主要的处理流程 算法 以及算法的复杂度
( ) 请描述可能的改进
方案 采用并查集 首先所有的字符串都在单独的并查集中 然后依扫描每个集合 顺序合并将两个相邻元素合并 例如 对于 首先查看aaa和bbb是否在同一个并查集中 如果不在 那么把它们所在的并查集合并 然后再看bbb和ccc是否在同一个并查集中 如果不在 那么也把它们所在的并查集合并 接下来再扫描其他的集合 当所有的集合都扫描完了 并查集代表的集合便是所求 复杂度应该是O(NlgN)的 改进的话 首先可以记录每个节点的根结点 改进查询 合并的时候 可以把大的和小的进行合 这样也减少复杂度
最大子序列与最大子矩阵问题
数组的最大子序列问题 给定一个数组 其中元素有正 也有负 找出其中一个连续子序列 使和最大
方案 这个问题可以动态规划的思想解决 设b[i]表示以第i个元素a[i]结尾的最大子序列 那么显然 基于这一点可以很快用代码实现
最大子矩阵问题 给定一个矩阵(二维数组) 其中数据有大有小 请找一个子矩阵 使得子矩阵的和最大 并输出这个和
lishixin/Article/program/sjjg/201405/30744