当前位置:首页 > 数码 > 避免成为技术落伍者-Redis高级进阶-掌握不为人知的秘籍 (避免成为技术人员英语)

避免成为技术落伍者-Redis高级进阶-掌握不为人知的秘籍 (避免成为技术人员英语)

admin5个月前 (05-11)数码26

在社交媒体平台或短视频应用中,如何确保用户每次看到的都是新鲜的内容,避免出现重复的内容呢?这正是曝光去重的核心问题。

方案一:Set

最简单粗暴的方案是使用 Set 数据结构。每个用户对应一个 Set,用于存储用户看过的内容 ID。每次推荐新内容时,只需检查内容 ID 是否存在于 Set 中,如果存在则过滤掉。

这种方案的优点是实现简单,缺点是:

  1. 内存开销大:随着用户数量和内容数量的增加,Set 的大小也会不断增长,需要大量的内存空间。
  2. 查询效率低:由于 Set 是基于哈希表实现的,查询效率随着 Set 大小的增加而下降。

方案二:Bloom 过滤器

Bloom 过滤器是一种概率性数据结构,非常适合海量数据的过滤。它使用一个 bit 数组和一系列哈希函数来判断某个元素是否存在于集合中。

Bloom 过滤器原理

Bloom 过滤器的工作原理如下:

  1. 初始化一个大小为 m 的 bit 数组,所有 bit 均为 0。
  2. 选择 k 个独立的哈希函数 h1、h2、...、hk。
  3. 对于给定的元素 x,计算它的 k 个哈希值 h1(x)、h2(x)、...、hk(x)。
  4. 将 bit 数组中对应位置的值置为 1。

查询元素 x 是否存在于集合中时,计算它的 k 个哈希值,并检查对应位置的 bit 是否均为 1。如果全部为 1,则认为x 极大概率存在于集合中。否则,x 不存在于集合中。

Bloom 过滤器特点

Bloom 过滤器具有以下特点:

  1. 误判率:Bloom 过滤器以一定的概率误判元素是否存在。误判率由 m 和 k 的值决定,可以通过调整这些参数来权衡误判概率和存储空间。
  2. 单向性:一旦元素被添加到 Bloom 过滤器中,就无法将其删除。
  3. 空间效率:对于给定的误判率,Bloom 过滤器比 Set 需要的存储空间更小。
  4. 查询效率:Bloom 过滤器查询效率很高,因为只需要访问几个 bit 数组中的位置。

Bloom 过滤器并不是万能的,当业务场景对误判率要求非常高时,使用 Set 仍是更好的选择。

Bloom 过滤器应用示例

将 Bloom 过滤器应用于曝光去重场景:

  1. 设置 Bloom 过滤器的规格,如容量和哈希函数数量。
  2. 对于每个用户,创建一个 Bloom 过滤器。
  3. 当推荐新的内容时,计算其 ID 的哈希值,并在 Bloom 过滤器中检查是否存在。
  4. 如果存在,则过滤掉该内容,否则将其展示给用户。

通过合理设置 Bloom 过滤器的规格,可以保证在误判率可接受的情况下,有效地避免内容重复。

进一步优化

针对不同业务场景,可以进一步优化 Bloom 过滤器:

  • 多级 Bloom 过滤器:对于海量活跃用户,可采用多级 Bloom 过滤器的结构,将用户分为不同的层级,每层使用不同的 Bloom 过滤器。
  • 时间衰减 Bloom 过滤器:为了避免用户长时间看到重复的内容,可以采用时间衰减 Bloom 过滤器,随着时间的推移逐渐降低 bit 数组中对应位置的权重。

参考资料

避免成为技术落伍者
  1. Bloom 过滤器原理与应用
  2. Redis Bloom 过滤器

学习linux操作系统需要掌握哪些东西?

一.为什么要学linux? 当然最重要是爱好和兴趣!如果你这种必要学,或者根本不喜欢,请不要浪费时间,你学也学不好! 二.起步 你应该为自己创造一个学习linux的环境--在电脑上装一个linux或unix 问题1:版本的选择 北美用redhat,欧洲用SuSE,桌面mandrake较多,而debian是技术最先进的linux 开发人员中用debian的最多,其次是redhat,从全球linux各应用领域市场份额来看 无疑redhat是最多的,此外还有很多出名的发行版本,不再列举。 对于初学linux的人来说,我建议是使用redhat,原因如下: 1)现在很多书都是以redhat为例讲的,为了与书本协调一致 2)周围的人都用redhat,交流比较方便 3)redhat应用范围广,有典型性和代表性 4)它易于使用和安装,我们没有必要把时间浪费在“装系统”上 而应集中精力学习最有用的东西。 //注:现在觉得RH很死板,AS,ES等用在服务器上或许不错, Personal desktop用mandrake,debian,suse都不错,笔者现在用Mandrake,因为她长得漂亮 如果你并不打算深入学习linux,而是有诸如适应北京市政府办公平台迁移到 linux上这种需要,那么中软,红旗等中文linux是不错的选择 我强烈建议:自己亲自动手把linux装到你的硬盘上, 你必须学会独立安装linux系统的技能,对于现在的版本来说,其实跟装WinXP一样简单 从此现在开始,请不要以windows的工作方式来考虑问题, 应该尝试挖掘linux身上的“天才unix”的气质。 三.进阶 掌握至少50个以上的常用命令 理解shell管道|,文件流重定向>及追加>>等 熟悉Gnome/KDE等X-windows桌面环境操作 掌握等软件包的常用安装方法 学习添加外设,安装设备驱动程序(比如modem) 熟悉Grub/Lilo引导器及简单的修复操作 熟悉系统固有目录的名称及公用 学会用mount命令访问其他文件系统 了解vi,gcc,gdb等常用编辑器,编译器,调试器 学习linux环境下的简单组网 建议:买一本不需要太厚的linux教材,大致可以满足要求 //现在的书越来越多了,还带很多图,我当时可没这么多书:) 四.高级应用 澄清一些概念: linux的普通操作与真正的系统管理不能相提并论,后者需要很多知识 我个人认为比较重要几种linux语言 1.英语 即使你不学linux,我也强烈建议你学好英文[] 因为实质上计算机语言就是英文和字符,所谓的多国语言只是外部包装 你必须能无障碍的阅读大量的英文技术文档 在搜索引擎找到的英文网站和网页中熟练的检索 最好能有用英文直接交流的能力, 摆脱了这个障碍,你的学习和理解速度就能快很多,你就有机会拉开和别人的差距 [sed/awk] shell是命令解释器,是内核与用户界面交流通道,shell写的小脚本有点类似于win下的 但shell比强大的多,shell不只是解释命令,更是一种编程语言,有时候几百行的c用shell 几十行就能代替完成工作,因为shell的工作方式建立在系统已有的众多应用程序之上 这也是CS中的一个重要思想。 此外,shell可以实现工作自动化,这个概念也比较重要 sed,awk用来处理文本,历来很常用 /PHP 漂亮的脚本, CGI的首选,比ASP好,应用面很广 4.C\C++ C、C++是linux/unix的核心语言,系统代码都是C写的 系统底层及内核,硬件,设备驱动程序,嵌入式开发都需要 //走核心路线的话,才c\c++,asm最重要 ,Python,Tcl,XML *系统管理篇 在熟悉linux的基础上还需要掌握至少一种unix 我首推Solaris,其次是FreeBSD 比如运营级系统一般是Solaris+Oracle/DB2之类的 学习apache,ssh,sendmail/Qmail,proftp/vsftp,Samba,Squid,MySQL/PostgreSQL/Oracle,Bind 等各种应用服务器的构架及电子商务的应用 熟悉TCP/IP协议族,学习诸如apache+php+proftp+mysql+quota的实现以及大型局域网,分布式集群 等各种企业级应用解决方案 熟悉多用户管理,数据库管理,文件系统,逻辑存储管理,日志分析,备份与灾难数据修复 系统补丁,内核升级,以及在此基础上的防火墙构架等以保障系统安全在内的各种系统管理技能 我觉得,如果在此基础上再掌握路由/交换设备便是一个不错的系统管理员 各种基于linux的解决方案可参考相关书籍和文献,必要时用google或各大linux站点站内 搜索引擎寻找最新文档,以避免错误和漏洞 有几本技术大全和技术内幕我认为都是这方面不错的书 *深入学习linux 我个人理解的读linux内核需要的基础: 在此之前,希望先把应用层的东西学一下,那样会比较好理解 1.C 如果学过潭浩强的大学教科书(除了编几个数学模型好像什么也做不了的那种), 建议再看一下 《The C Programming Language》Second Edition这本圣经 /*如果想学缓冲区溢出,这点C的功力可能是不够的*/ 还有,,, 反正经典书看多了是没有坏处的 (AT&T语法,保护模式) 保护模式下的比较复杂,基本上每本讲内核的书都会有介绍 有80x86 Intel语法的基础就行, 有兴趣可以看看Intel的官方**** 3.数据结构(离散数学) 计算机专业的核心课程,重要性我就不说了 4.操作系统原理 看懂这个再去读linux吧 5.微机原理/组成原理(数字电路) 底层直接和硬件打交道,所以这个也要 6.了解linux/unix 我想至少你要会操作吧,了解unix的API

如何成为一个数据分析师?需要具备哪些技能

数据分析师的职位要求 :1、计算机、统计学、数学等相关专业本科及以上学历;2、具有深厚的统计学、数据挖掘知识,熟悉数据仓库和数据挖掘的相关技术,能够熟练地使用SQL;3、三年以上具有海量数据挖掘、分析相关项目实施的工作经验,参与过较完整的数据采集、整理、分析和建模工作;4、对商业和业务逻辑敏感,熟悉传统行业数据挖掘背景、了解市场特点及用户需求,有互联网相关行业背景,有网站用户行为研究和文本挖掘经验尤佳;5、具备良好的逻辑分析能力、组织沟通能力和团队精神;6、富有创新精神,充满激情,乐于接受挑战。 1、态度严谨负责严谨负责是数据分析师的必备素质之一,只有本着严谨负责的态度,才能保证数据的客观、准确。 在企业里,数据分析师可以说是企业的医生,他们通过对企业运营数据的分析,为企业寻找症结及问题。 一名合格的数据分析师,应具有严谨、负责的态度,保持中立立场,客观评价企业发展过程中存在的问题,为决策层提供有效的参考依据;不应受其他因素影响而更改数据,隐瞒企业存在的问题,这样做对企业发展是非常不利的,甚至会造成严重的后果。 而且,对数据分析师自身来说,也是前途尽毁,从此以后所做的数据分析结果都将受到质疑,因为你已经不再是可信赖的人,在同事、领导、客户面前已经失去了信任。 所以,作为一名数据分析师就必须持有严谨负责的态度,这也是最基本的职业道德。 2、好奇心强烈好奇心人皆有之,但是作为数据分析师,这份好奇心就应该更强烈,要积极主动地发现和挖掘隐藏在数据内部的真相。 在数据分析师的脑子里,应该充满着无数个“为什么”,为什么是这样的结果,为什么不是那样的结果,导致这个结果的原因是什么,为什么结果不是预期的那样等等。 这一系列问题都要在进行数据分析时提出来,并且通过数据分析,给自己一个满意的答案。 越是优秀的数据分析师,好奇心也越不容易满足,回答了一个问题,又会抛出一个新的问题,继续研究下去。 只有拥有了这样一种刨根问底的精神,才会对数据和结论保持敏感,继而顺藤摸瓜,找出数据背后的真相。 3、逻辑思维清晰除了一颗探索真相的好奇心,数据分析师还需要具备缜密的思维和清晰的逻辑推理能力。 我记得有位大师说过:结构为王。 何谓结构,结构就是我们常说的逻辑,不论说话还是写文章,都要有条理,有目的,不可眉毛胡子一把抓,不分主次。 通常从事数据分析时所面对的商业问题都是较为复杂的,我们要考虑错综复杂的成因,分析所面对的各种复杂的环境因素,并在若干发展可能性中选择一个最优的方向。 这就需要我们对事实有足够的了解,同时也需要我们能真正理清问题的整体以及局部的结构,在深度思考后,理清结构中相互的逻辑关系,只有这样才能真正客观地、科学地找到商业问题的答案。 4、擅长模仿在做数据分析时,有自己的想法固然重要,但是“前车之鉴”也是非常有必要学习的,它能帮助数据分析师迅速地成长,因此,模仿是快速提高学习成果的有效方法。 这里说的模仿主要是参考他人优秀的分析思路和方法,而并不是说直接“照搬”。 成功的模仿需要领会他人方法精髓,理解其分析原理,透过表面达到实质。 万变不离其宗,要善于将这些精华转化为自己的知识,否则,只能是“一直在模仿,从未超越过”。 5、勇于创新通过模仿可以借鉴他人的成功经验,但模仿的时间不宜太长,并且建议每次模仿后都要进行总结,提出可以改进的地方,甚至要有所创新。 创新是一个优秀数据分析师应具备的精神,只有不断的创新,才能提高自己的分析水平,使自己站在更高的角度来分析问题,为整个研究领域乃至社会带来更多的价值。 现在的分析方法和研究课题千变万化,墨守成规是无法很好地解决所面临的新问题的。 技能要求:1、懂业务。 从事数据分析工作的前提就会需要懂业务,即熟悉行业知识、公司业务及流程,最好有自己独到的见解,若脱离行业认知和公司业务背景,分析的结果只会是脱了线的风筝,没有太大的使用价值。 2、懂管理。 一方面是搭建数据分析框架的要求,比如确定分析思路就需要用到营销、管理等理论知识来指导,如果不熟悉管理理论,就很难搭建数据分析的框架,后续的数据分析也很难进行。 另一方面的作用是针对数据分析结论提出有指导意义的分析建议。 3、懂分析。 指掌握数据分析基本原理与一些有效的数据分析方法,并能灵活运用到实践工作中,以便有效的开展数据分析。 基本的分析方法有:对比分析法、分组分析法、交叉分析法、结构分析法、漏斗图分析法、综合评价分析法、因素分析法、矩阵关联分析法等。 高级的分析方法有:相关分析法、回归分析法、聚类分析法、判别分析法、主成分分析法、因子分析法、对应分析法、时间序列等。 4、懂工具。 指掌握数据分析相关的常用工具。 数据分析方法是理论,而数据分析工具就是实现数据分析方法理论的工具,面对越来越庞大的数据,我们不能依靠计算器进行分析,必须依靠强大的数据分析工具帮我们完成数据分析工作。 5、懂设计。 懂设计是指运用图表有效表达数据分析师的分析观点,使分析结果一目了然。 图表的设计是门大学问,如图形的选择、版式的设计、颜色的搭配等等,都需要掌握一定的设计原则。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Redis

“避免成为技术落伍者-Redis高级进阶-掌握不为人知的秘籍 (避免成为技术人员英语)” 的相关文章

Redis数据删除后-内存占用为何居高不下 (redis数据类型)

Redis数据删除后-内存占用为何居高不下 (redis数据类型)

作为面试经验丰富的开发人员,肯定会遇到过这样的问题:做了数据删除操作,为什么使用 top 命令时,仍然显示 Redis 占用了大量内存? 答案 这是因为当数据删除后,Re...

一站式-满足您的所有-解决方案-需求-Redis-Redis (一站式满足您的资金需求让您用款无忧)

一站式-满足您的所有-解决方案-需求-Redis-Redis (一站式满足您的资金需求让您用款无忧)

Introduction Redis is an efficient in-memory database designed to store data invarious formats, s...

大厂Redis重试战略剖析-深化摸索行业通常 (大厂redis面试题)

大厂Redis重试战略剖析-深化摸索行业通常 (大厂redis面试题)

受网络和运转环境影响,运行程序或许遇到临时性缺点,如刹时网络颤抖、服务临时无法用、服务忙碌造成超时等。 智能重试机制可大幅防止此类缺点,保证操作成功口头。 1引发临时性缺点的要素...

安装并配置-Kubernetes-集群 (安装并配置mysql的实验总结)

安装并配置-Kubernetes-集群 (安装并配置mysql的实验总结)

日常开发中,基于自然支持散布式锁,大家在线上散布式名目中都经常使用过Redis锁。本文重要针对日常开发中加锁环节中某些意外场景启动解说与剖析。本文解说示例代码都在名目目录下 RedisLo...

Redis中分布式锁的防死锁机制 (redis中文网)

Redis中分布式锁的防死锁机制 (redis中文网)

分布式锁在分布式系统中是一种常见的需求。它用于防止对共享资源的并发访问,确保数据一致性和可靠性。在 Redis 中实现分布式锁可以通过使用 SETNX(SET if Not eXists)命令来尝...

排查与处置指南-Redis大Key危害 (排查与处置指的是什么)

排查与处置指南-Redis大Key危害 (排查与处置指的是什么)

这是一位同窗往年秋招参与得物一面遇到的疑问,完整面经如下: 这个疑问在面试中还是比拟容易遇到的,尤其是在调查性能优化相关常识点的时刻。 通常状况下,问了bigkey(大Key)还会继续...

Redis-使用哈希槽而非一致性哈希的原因 (redis淘汰策略有哪些)

Redis-使用哈希槽而非一致性哈希的原因 (redis淘汰策略有哪些)

引言 在分布式系统中,数据分片和负载均衡是至关重要的。哈希槽和一致性哈希两种方法都可以实现这些目标,但它们各有优缺点。本文将讨论为什么在某些情况下使用哈希槽而不是一致性哈希。 哈希槽 哈希...

引发业界震荡-Redis叛逃开源-得罪了 (引发业界震荡的因素)

引发业界震荡-Redis叛逃开源-得罪了 (引发业界震荡的因素)

Redis 许可变更:开源界的巨石 导言 近来,内存数据库供应商 Redis 宣布了一项重大变更,该变更将在开源界掀起轩然大波。Redis 将转向双许可模式,并采用更严格的许可条款。此举引起了社区...