首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在推荐系统中,我还有隐私吗?联邦学习:你可以有

    推荐系统在我们的日常生活中无处不在,它们非常有用,既可以节省时间,又可以帮助我们发现与我们的兴趣相关的东西。目前,推荐系统是消费领域最常见的机器学习算法之一[1]。...从另外一个角度分析,在推荐 / 搜索中引入隐私也有一定的好处。我们可以利用用户不共享的更好的元数据进行推荐系统的训练,例如手机上的应用程序信息、位置等。...我们还可以在较新的领域中(如医疗保健、金融服务)更好地采用机器学习模型,用户不再需要犹豫是否将数据共享给其他人。...同时,这种方法是可推广的,可以扩展到各种推荐系统应用场景中。FCF 的完整框架如图 1。在中央服务器上更新主模型 Y(item 因子矩阵),然后将其分发到各个客户端中。...在第四节中,我们进一步分析了一个普适的基于内容的联邦多视图推荐框架 FL-MV-DSSM。该方法可以将用户和 item 映射到共享的语义空间,以便进一步实现基于内容的推荐。

    4.7K41

    手写HashMap,快手面试官直呼内行!

    第一次见到这个面试题,是在某个不方便透露姓名的Offer收割机大佬的文章: 这……我当时就麻了,我们都知道HashMap的数据结构是数组+链表+红黑树,这是要手撕红黑树的节奏吗?...认识哈希表 HashMap其实是数据结构中的哈希表在Java里的实现。 哈希表本质 哈希表也叫散列表,我们先来看看哈希表的定义: 哈希表是根据关键码的值而直接进行访问的数据结构。...这就引入了我们的第二个关键要素——散列函数。 散列函数 我们需要在元素和桶数组对应位置建立一种映射映射关系,这种映射关系就是散列函数,也可以叫哈希函数。...散列函数构造 散列函数也叫哈希函数,假如我们数据元素的key是整数或者可以转换为一个整数,可以通过这些常见方法来获取映射地址。...我就要你手写个红黑树版的…… 当然了,我们也发现,HashMap的O(1)时间复杂度操作是在冲突比较少的情况下,简单的哈希取余肯定不是最优的散列函数;冲突之后,链表拉的太长,同样影响性能;我们的扩容和put

    43430

    一文带你网罗HashMap面试考点!

    8、如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办? 9、重新调整HashMap大小存在什么问题吗?...4、HashMap中hash函数怎么是是实现的? 我们可以看到在hashmap中要找到某个元素,需要根据key的hash值来求得对应数组中的位置。如何计算这个位置就是hash算法。...当冲突发生时,使用某种探查技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定的地址。 按照形成探查序列的方法不同,可将开放定址法区分为线性探查法、二次探查法、双重散列法等。...当插入第7个关键字68时,其散列地址3已被非同义词15先占用,故将其插入到T[4]中。...在调整大小的过程中,存储在链表中的元素的次序会反过来,因为移动到新的bucket位置的时候,HashMap并不会将元素放在链表的尾部,而是放在头部,这是为了避免尾部遍历(tail traversing)

    1K30

    深入理解hashmap理论篇

    更多的例子比如网络协议里面的crc校验,p2p的下载算法,甚至git中的commit id都是利用散列函数来做。 散列函数的碰撞冲突是怎么回事,一定发生吗?...简单来说,散列函数不管设计的有多优秀,散列冲突都一定无法避免。因为我们容量是有限的。大家可以百度下抽屉原理, 举个例子,我们有5个橘子,你只有4个抽屉,那你必定会有一个抽屉里面有2个橘子。...散列函数的碰撞冲突如何解决? 主要有两种方法,一种是开放寻址法(java中的ThreadLocalMap),一种是链表法(hashmap)。其中前者现在用的不多,有兴趣的同学可以学学看。...所谓链表法其实就是 在发生散列冲突的时候,把相同哈希值的数据存放在链表中。...对于数组扩容来说,其实没啥好说的,大家都会,但是哈希表的扩容还涉及到重新计算哈希值,这样数据在扩容 以后的哈希表里的位置 和之前的位置 就有可能不同。这个步骤叫做重新计算哈希值。

    55430

    python抛出异常和捕获异常_在try块中可以抛出异常吗

    PythonLearn Python抛出异常【1】 程序运行过程中 Python解释器遇到一个错误 会停止程序的运行 并且提示一些错误信息 这个 就是异常 程序停止并且提示错误信息的动作叫做抛出异常...抛出异常原因 主动捕获异常 可以增加健壮性 抛出异常的种类 AssertionError ,断言失败抛出异常; AttributeError ,找不到属性抛出异常; ValueError , 参数值不正确...ArithmeticError 算术错误的基类 ZeroDivisionError 算数错误的子类,除法或模运算的第二个参数是零 BufferError 缓冲区错误 注意 如果不确定需要打印异常种类 只是单纯不想让程序暂停 可以使用基类...,会直接进入except中执行下方代码 try中错行下方的代码不会被运行 except…as… 是固定的语法格式 打印traceback信息 finally 后的代码不管是否抛出异常都会执行 except...的原理 调用sys中 exc.info 方法返回基本信息 所以抛出异常的第一步拓展可以在这里开始 注意 每个关键字下方的代码都是独立的(所有的变量都是局部变量) 基本拓展:sys.exc.info

    4.5K60

    HashMap?面试?我是谁?我在哪

    8、如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办? 9、重新调整HashMap大小存在什么问题吗?...4、HashMap中hash函数怎么是是实现的? 我们可以看到在hashmap中要找到某个元素,需要根据key的hash值来求得对应数组中的位置。如何计算这个位置就是hash算法。...当冲突发生时,使用某种探查技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定的地址。 按照形成探查序列的方法不同,可将开放定址法区分为线性探查法、二次探查法、双重散列法等。...当插入第7个关键字68时,其散列地址3已被非同义词15先占用,故将其插入到T[4]中。...在调整大小的过程中,存储在链表中的元素的次序会反过来,因为移动到新的bucket位置的时候,HashMap并不会将元素放在链表的尾部,而是放在头部,这是为了避免尾部遍历(tail traversing)

    58330

    经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!

    6749061190594330891/ 最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下...,这种方式适合于插入的数据字段没有设置主键或唯一索引,当插入一条数据时,首先判断MySQL数据库中是否存在这条数据,如果不存在,则正常插入,如果存在,则忽略: ?...就分享这4种MySQL处理重复数据的方式吧,前3种方式适合字段设置了主键或唯一索引,最后一种方式则没有此限制,只要你熟悉一下使用过程,很快就能掌握的,网上也有相关资料和教程,介绍的非常详细,感兴趣的话,可以搜一下

    4.5K40

    HashMap 实现及原理

    HashMap采取数组加链表的存储方式来实现。亦即数组(散列桶)中的每一个元素都是链表,如下图: ?...4、HashMap中hash函数怎么是是实现的? 我们可以看到在hashmap中要找到某个元素,需要根据key的hash值来求得对应数组中的位置。如何计算这个位置就是hash算法。...当冲突发生时,使用某种探查技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定的地址。 按照形成探查序列的方法不同,可将开放定址法区分为线性探查法、二次探查法、双重散列法等。...这个值只可能在两个地方,一个是原下标的位置,另一种是在下标为的位置 9、重新调整HashMap大小存在什么问题吗?...在调整大小的过程中,存储在链表中的元素的次序会反过来,因为移动到新的bucket位置的时候,HashMap并不会将元素放在链表的尾部,而是放在头部,这是为了避免尾部遍历(tail traversing)

    88120

    HashMap?面试?我是谁?我在哪?

    4、HashMap 中 hash 函数怎么是实现的? 我们可以看到,在 hashmap 中要找到某个元素,需要根据 key 的 hash 值来求得对应数组中的位置。...开放定址法 当冲突发生时,使用某种探查技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定的地址。...故探查 h1=(2+1)%13=3,此地址开放,所以将 15 放入 T[3] 中。 当插入第7个关键字68时,其散列地址3已被非同义词15先占用,故将其插入到T[4]中。...9、重新调整 HashMap 大小存在什么问题吗? 重新调整 HashMap 大小的时候,确实存在条件竞争。 因为如果两个线程都发现 HashMap 需要重新调整大小了,它们会同时试着调整大小。...在调整大小的过程中,存储在链表中的元素的次序会反过来。因为移动到新的 bucket 位置的时候,HashMap 并不会将元素放在链表的尾部,而是放在头部。

    76910

    面渣逆袭:HashMap追魂二十三问

    HashMap作为我们熟悉的一种集合,可以说是面试必考题。简单的使用,再到原理、数据结构,还可以延伸到并发,可以说,就一个HashMap,能聊半个小时。 1.能说一下HashMap的数据结构吗?...第二个方面是在扩容时,利用扩容后的大小也是2的倍数,将已经产生hash碰撞的元素完美的转移到新的table中去 我们可以简单看看HashMap的扩容机制,HashMap中的元素在超过负载因子*HashMap...在HashMap中有这样一段注释: 我们都知道,HashMap的散列构造方式是Hash取余,负载因子决定元素个数达到多少时候扩容。...而扩容中有一个非常重要的点,就是jdk1.8中的优化操作,可以不需要再重新计算每一个元素的哈希值。...整体的设计: 散列函数:hashCode()+除留余数法 冲突解决:链地址法 扩容:节点重新hash获取位置 完整代码: 17.HashMap 是线程安全的吗?多线程下会有什么问题?

    41530

    HashMap、LRU、散列表

    HashMap HashMap的数据结构:HashMap实际上是一个数组和链表(“链表散列”)的数据结构。底层就是一个数组结构,数组中的每一项又是一个链表。 ?...该条目可以被重新用于相同的key,或者被单个垃圾收集器逐步删除完全部的条目后压缩。...这个要求看起来合情合理,但是在真实的情况下,要想找到一个不同的 key 对应的散列值都不一样的散列函数,几乎是不可能的。即便像业界著名的MD5、SHA、CRC等哈希算法,也无法完全避免这种散列冲突。...如何设计一个可以应对各种异常情况的工业级散列表,来避免在散列冲突的情况下,散列表性能的急剧下降,并且能抵抗散列碰撞攻击? 首先,散列函数的设计不能太复杂。...避免低效地扩容 我举一个极端的例子,如果散列表当前大小为 1GB,要想扩容为原来的两倍大小,那就需要对 1GB 的数据重新计算哈希值,并且从原来的散列表搬移到新的散列表,听起来就很耗时,是不是?

    1.1K51

    终结HashMap面试?我是谁?我在哪

    4、HashMap 中 hash 函数怎么是实现的? 我们可以看到,在 hashmap 中要找到某个元素,需要根据 key 的 hash 值来求得对应数组中的位置。...开放定址法 当冲突发生时,使用某种探查技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定的地址。...故探查 h1=(2+1)%13=3,此地址开放,所以将 15 放入 T[3] 中。 当插入第7个关键字68时,其散列地址3已被非同义词15先占用,故将其插入到T[4]中。...9、重新调整 HashMap 大小存在什么问题吗? 重新调整 HashMap 大小的时候,确实存在条件竞争。 因为如果两个线程都发现 HashMap 需要重新调整大小了,它们会同时试着调整大小。...在调整大小的过程中,存储在链表中的元素的次序会反过来。因为移动到新的 bucket 位置的时候,HashMap 并不会将元素放在链表的尾部,而是放在头部。

    52810

    高效编程之hashmap你必须要懂的知识点

    这里解释源码里的 if 中的判断,因为hash(散列值)是会算出重复的(冲突嘛~),如果这个Entry对象的hash(散列值)和你拿进来的key算的散列值(hash=hash(key))是一样的并且key...16是2的4次方,hashmap在put的时候会发生冲突,hashmap发生冲突是不可避免的,也是我们想要的,但是我们不想hashmap傻不拉几的发生冲突,因为最坏的情况,hashmap所有的冲突都发生在同一个数组下标的话...获取对象的值,那么就是get方法咯,两个key的hashcode相同说明 散列码(hash)相同, 如果散列码都相同了,那么就会调用key.equals()去判断在该散列码得到的这个数组下标的链表里的entry...如果你有更好的回答,可以留言给我一起探讨,谢谢啦~ 最好是需要的,因为我们知道hashmap的数组长度超过了他的域值会扩容,扩容的时候会把hashmap中所有的entry对象再计算一次他们在新数组中的下标...7、我们可以用自定义的对象作为hashmap的key吗?如果可以,你会自定义对象当做key吗?如果不行说明原因。

    1.1K71
    领券