首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何快速判断某 URL 是否 20 亿网址 URL 集合

它实际上是一个很长二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否一个集合。它优点是空间效率和查询时间都比一般算法要好的多,缺点是有一定误识别率和删除困难。...那么可以定义一个2147483647长度byte数组,用来存储集合所有可能值。为了存储这个byte数组,系统只需要:2147483647/8/1024/1024=256M。...比如:某个URL(X)哈希是2,那么落到这个byte数组第二位上就是1,这个byte数组将是:000….00000010,重复,将这20亿个数全部哈希并落到byte数组。...但是如果这个byte数组上第二位是0,那么这个URL(X)就一定不存在集合。...数组维护:BitArray

1.8K30

Jetpack组件之Room

也意识到了这个问题,Jetpack组件推出了Room,RoomSQLite上提供了一层封装,可以流畅访问数据库。...使用@Database注解应满足以下条件: 是扩展RoomDatabase抽象注释添加与数据库关联实体列表。 包含具有0个参数且返回使用@Dao注释抽象方法。... Room 2.1.0 以上版本,基于 Java 可变(使用 @AutoValue 进行注释)用作应用数据库Entity。...将带有@AutoValue 注释用作实体时,可以使用 @PrimaryKey、@ColumnInfo、@Embedded 和 @Relation 为该类抽象方法添加注释。...DAO可以是接口,也可以是抽象,如果是抽象,则该DAO可以选择有一个以RoomDatabase为唯一参数构造函数。Room 会在编译时创建每个 DAO 实现。DAO文件上方添加@DAO注解。

1.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

一道腾讯面试题:如何快速判断某 URL 是否 20 亿网址 URL 集合

它实际上是一个很长二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否一个集合。它优点是空间效率和查询时间都比一般算法要好的多,缺点是有一定误识别率和删除困难。...那么可以定义一个2147483647长度byte数组,用来存储集合所有可能值。为了存储这个byte数组,系统只需要:2147483647/8/1024/1024=256M。...比如:某个URL(X)哈希是2,那么落到这个byte数组第二位上就是1,这个byte数组将是:000….00000010,重复,将这20亿个数全部哈希并落到byte数组。...但是如果这个byte数组上第二位是0,那么这个URL(X)就一定不存在集合。...数组维护:BitArray

1K40

码处高效:覆盖 equals() 时切记要覆盖 hashCode()

每个覆盖了 equals 方法,都必须覆盖 hashCode 方法。如果这样做的话,就会违反 hashCode 通用约定,从而导致该类无法结合所有的给予散列集合一起正常运作。...这类集合包括 HashSet、HashMap,下面是Object 通用规范: 应用程序执行期间,只要对象 equals 方法比较操作所用到信息没有被修改,那么同一个对象多次调用,hashCode...一个应用程序和另一个应用程序执行过程,执行 hashCode 方法返回值可以不相同。...理想情况下,散列函数应该把集合不相等实例均匀地分布到所有可能 int 值上。...你只需要一行代码就可以编写它 hashCode 方法。它们质量也是很高,但是,它运行速度相对慢一些,因为它们会引发数组创建,以便传入数目可变参数,如果参数中有基本类型,还需要装箱和拆箱。

65720

Android AutoValue使用和扩展库

二、基本使用 一步一脚印 2.1 导包 初次使用需要注意,官方只说了module依赖,这样会build失败,对于新手来说会一脸懵逼,因为需要apt。...2.3 构造方法 这时候构造方法利用自己写一个方法来实现newAutoValue_User,User里面添加create方法进行调用生成AutoValue_User,这时候bean方法这样...需要实现方法放在了AutoValue_User: final class AutoValue_User extends $AutoValue_User { public static final...:0.4.6' compile 'com.google.code.gson:gson:2.8.0' 3.2.1 Bean添加TypeAdapter Gson解析AutoValue修饰对象, 这时候...里面有泛型,这时候你TypeAdapter也需要泛型,还要添加参数TypeToken,例如: @AutoValue public abstract class Foo<A, B, C { abstract

1.3K10

一道有难度经典大厂面试题:如何快速判断某 URL 是否 20 亿网址 URL 集合

布隆过滤器可以用于检索一个元素是否一个集合。它优点是空间效率和查询时间都比一般算法要好的多,缺点是有一定误识别率和删除困难。 是不是描述比较抽象?那就直接了解其原理吧!...为了存储这个byte数组,系统只需要: 2147483647/8/1024/1024=256M 比如:某个URL(X)哈希是2,那么落到这个byte数组第二位上就是1,这个byte数组将是:000…...但是如果这个byte数组上第二位是0,那么这个URL(X)就一定不存在集合。 多次哈希 ?...数组维护:BitArray。...使用场景 布隆过滤器巨大用处就是,能够迅速判断一个元素是否一个集合

79020

Effective Java(二)

假如违背了这一条,然后把该类实例添加到集合,该集合 contains 方法将果断地告诉你,该集合包含你刚刚添加实例。...换句话说,可变对象不同时候可以与不同对象相等,而不可变对象则不会这样。...因为许多情况下,从 Object 处继承实现正是你想要。如果覆盖 equals,一定要比较这个所有关键域,并且查看它们是否遵守 equals 合约所有五个条款。...如果这样做的话,就会违反 hashCode 通用约定,从而导致该类无法结合所有基于散列集合一起正常运作,这类集合包括 HashMap 和 HashSet。...实际应用,toString 方法应该返回对象包含额所有值得关注信息 总结 总而言之,要在你编写每一个可实例化覆盖 Object toString 实现,除非已经这么做了。

44320

学 Guava 发现:不可变特性与防御性编程

阅读文本大概需要 7 分钟。 一、面试常谈:String 与不可变特性 问:String 可变吗? 答:emm……由于String底层是 final 关键字修饰,因此它是不可变。...(即数据不会发生变化)。...防御性编程是一种比较泛化概念,是一种细致、谨慎编程习惯。 我们写代码时候,需要时刻考虑到:代码是否正确? 代码是否正确? 代码是否正确?...例如: 你可以利用不可变特性、构造时拷贝对象等方法来确保一个可变 很多时候,考虑使用防御性拷贝,避免直接在原始实例上进行操作 接收参数时考虑参数是否非空等 是否引发性能问题、死锁问题 …… 三、...返回一个继承了List接口轻量级“视图”不失为一个好设计方式。而直接返回数组则是不安全选择。 3、不可变集合各种实现 为什么需要可变集合

51240

Immutable和final

最极端是一个万能,包含了N多个属性和N多个方法,导致这个对象成为了”God Object“,无所不能上帝对象,降低了维护性。 除了拆解为独立对象外,在想是否需要可变对象?...另外在并发编程时有优势,因为不可变,多线程都是读同一份数据,不用担心某个人不小心修改了它。 不可变对象坏处。麻烦。会损耗点性能,因为必要时候需要copy对象,难免会牺牲点性能。...为了看清楚不可变可变目前很成熟代码寻找一些影子。...但是大多数都是可变对象,比较灵活。 Scala集合默认都是不可变,Scala 集合系统地区分了可变和不可变集合可变集合可以适当地方被更新或扩展。...这意味着你可以修改,添加,移除一个集合元素。而不可变集合,相比之下,永远不会改变。不过,你仍然可以模拟添加,移除或更新操作。

50910

【Java】已解决java.lang.UnsupportedOperationException异常

Java编程,java.lang.UnsupportedOperationException是一个运行时异常,通常表示尝试执行一个不支持操作。...可能出错原因 集合类型错误:你可能错误地使用了只读集合视图,并试图对其进行修改。 集合实例设置不当:你集合可能已被设置为不可变,或者你正在使用某个集合只读视图。...方法重写错误:自定义,你可能重写了父方法但没有提供正确实现。...正确代码示例 为了解决这个问题,你应该确保尝试修改不可变集合。如果你需要修改集合,你应该使用可变集合类型,如ArrayList。...注意事项 了解集合类型:使用Java集合框架时,请确保你了解你正在使用集合类型是否支持修改操作。 检查方法签名:重写方法时,请确保你了解方法预期行为,并提供正确实现。

15210

java学习与应用(3.2)--数据结构相关

取出集合元素,直到集合没有元素。...泛型可以集合数据存储和取出保存相同类型。在编译期检查代码规范。 创建含有泛型,能够让有通用数据类型广泛使用。...super E 代表使用泛型只能是E类型/本身,限定其中使用范围 Collections集合工具,shuffle方法可以打乱集合顺序。...同样可变长数组。 Set接口 Set接口,包含重复元素,没有索引,不能使用for遍历。 HashSet集合,哈希表结构(查询快),无序,不同步,使用迭代器或增强for遍历。...使用EntrygetKey方法获取key,使用getValue创建vaule。 HashMap存储自定义类型,key需要重写hashCode和equals方法,保障key唯一性。

1.1K10

Python 元组和集合

# Python 元组和集合 # 什么是元组 元组 Python内置数据结构之一,是一个不可变序列 不可变序列与可变序列 不可变序列:字符串、元组 不变可变序列:没有增、删、改操作 可变序列...为什么要将元组设置成不可变序列 多任务环境下,同时操作对象时不需要加锁 因此,程序尽量使用不可变序列 注意事项:元组存储是对象引用 如果元组对象本身不可变对象,则不能在引用其他对象...'''由于[20,30]是列表,而表是可变序列,所以可以向列表添加元素,而列表内存地址不变''' t[1].append(100) #向添加元素 print(t,id(t[1]))...KeyError 调用**discard()**方法,一次删除一个指定元素,如果指定元素不存在抛异常 调用**pop()**方法,一次只删除一个任意元素 调用**clear()**方法,清空集合 "...=**进行判断 一个集合是否是另一个集合子集 可以调用方法issubset进行判断 B是A子集 两个集合是否没有交集 可以调用方法isdisjoint进行判断 """ @Author :frx

48620

python高级编程第三讲:set、dict深入和垃圾回收

我们要验证是否是属于mapping,我们可以用 Isinstince进行验证 dict 常用一些方法 get clear 清空字典 pop copy 浅拷贝,深层字典修改会对原字典深层字典产生影响...key,将我们自己写集合数据,当成是value,当我们传入值时候,其相应key对应值为 None setdefault 设置默认值,设置了就取设置,没有就取默认,并且只读取最后值...方法: differnce 相当于集合差集 4.set 和dict实现原理 结论,dict查找效率要大于list 因为 dict只查找一次,原因是使用了 hash表,级别为 O(1), 也就是不管有多少数据...is是判断两个对象id值是否相等 == 是判断值是否相等 但是以上中有一个int类型是特殊,因为有小整数对象池和大整数对象池,程序自动创建相应对象池 2 del语句和垃圾回收(GC) 其实垃圾回收就是统计对象引用计数...Python每个对象都分为可变和不可变,主要核心类型,数字、字符串、元组是不可变 ,列表、字典是可变可变类型 以int类型为例:实际上 i += 1 并不是真的原有的int对象上

50510

Scala最基础入门教程

可变参数:本质是1个数组 参数位置:如果参数列表存在多个参数,那么可变参数一般放置最后,(不能和默认值一起用,和带名参数用时,不能改变带名参数顺序) 参数默认值:一般将有默认值参数放置参数列表后面...函数和方法区别 方法定义可以实现重载,函数不可以重载。 方法是保存在方法区,函数是保存在堆。 定义方法方法可以称之为函数,不可以重载。 方法可以转成函数, 转换语法: 方法名 _。...若单例对象名与名一致,则称该单例对象这个伴生对象,这个所有“静态”内容都可以放置伴生对象声明。...建议:操作集合时候,不可变用符号,可变用方法。 不可变集合 Set、Map是Java也有的集合。...默认情况下,Scala使用是不可变集合,如果你想使用可变集合需要引用 scala.collection.mutable.Set包。

55270

Java集合总结,详细且易懂

1、前言 1.1由来 Java是面向对象语言,我们在编程时候自然需要存储对象容器,数组可以满足这个需求,但是数组初始化时长度是固定,但是我们往往需要一个长度可变容器,因此,集合出现了。...1.2集合与数组区别 (1)长度区别:集合长度可变,数组长度不可变 (2)内容区别:集合可存储不同类型元素,数组存储只可单一型元素 (3)元素区别:集合只能存储引用类型元素,数组可存储引用类型,也可存储基本类型...; 底层分析:数组结构是有序元素序列,在内存开辟一段连续空间,空间中存放元素,每个空间都有编号,通过编号可以快速找到相应元素,因此查询快;数组初始化时长度是固定,要想增删元素,必须创建一个新数组...ps:VectorJDK1.0就出现了,JDK1.2集合出现时候,Vector就归为List实现之一,这时候ArrayList才出现。...Vector是一个古老集合,《Java编程思想》中提到了它有一些遗留缺点,因此建议使用。

66111

一文掌握Python集合语法与应用

6.1 基本概念 Python语言中集合是无序可变容器对象,所有元素放在一对大括号,元素之间使用逗号分隔,同一个集合每个元素都是唯一,不允许重复。...集合只能包含数字、字符串、元组等不可变类型或可哈希数据,不能包含列表、字典、集合可变类型或不可哈希数据,包含列表等可变类型数据元组也不能作为集合元素。...6.2 集合创建与删除 除了把若干可哈希对象放在一对大括号内创建集合,也可以使用set()函数将列表、元组、字符串、range对象等其他可迭代对象转换为集合,如果原来数据存在重复元素,转换为集合时候只保留一个...接收一个集合(或其他可迭代对象),测试当前集合是否为参数对象超集,是则返回True,否则返回False,等价于关系运算符>= pop() 接收参数,删除并返回当前集合任意一个元素,如果当前集合为空则抛出...6.3.3 集合测试 集合方法issubset()、issuperset()、isdisjoint()分别用来测试当前集合是否为另一个集合子集、是否为另一个集合超集、是否与另一个集合不相邻(或交集是否为空

91110

【吐血整理】想学Google Guava看这篇就够了「建议收藏」

它在谷歌大多数Java项目中被广泛使用,也被许多其他公司广泛使用,熟练掌握这些工具能帮助我们快速处理日常开发一些问题,比如,不可变集合集合转换、字符串处理、本地缓存等 最近一段时间,我把...,只能读 支持多个线程调用,不存在竞争问题,天然支持多线程 不可变集合节省内存空间,因为不可变集合空间创建时就已经确定好了,不用考虑扩容等问题,内存利用率高 不可变集合可用于常量 Guava针对常用集合类型...List、Set、Map等都提供了不可变类型集合 详细使用方法,可查看另一篇博客《Guava系列之不可变集合》 2、Guava新集合类型 Guava提供了几种新集合类型,补充了JDK集合类型...JDK中集合操作已经提供了很多工具,比如基本集合交集、并集、差集这些常用操作,Guava中提供工具是对JDK补充,Guava中提供了静态创建集合方法,还有集合很多操作,比如笛卡尔集...ow3453535345irjew jwfel ” 字符串字母,直接可以调用现成方法 再比如,你需要将上述字符串数字全部移除或替换成其他字符,都有现成方法,使用起来非常方便,只要你使用好了这些工具

1.5K10

-1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器

集合又称之为容器存储对象一种方式 •数组虽然也可以存储对象,但长度是固定;显然需要可变长度容器 集合和数组区别?                ...接口中是通用,它替代了VectorEnumeration(枚举)。...泛型 早期Object类型可以接收任意对象类型,但是实际使用,会有类型转换问题。...super E 向上限定,E及其父 Map Map与Collection集合框架属并列存在 Map存储是键值对 Map存储元素使用put方法,Collection使用add方法 Map集合没有直接取出所有元素方法...,并且有多个参数,那么,可变参数肯定是最后一个 Arrays工具一个方法 •public static List asList(T... a) 集合选择 Collection

1.2K20

java基础(九):容器

,操作繁琐 2.集合架构 Java集合框架提供了一套性能优良、使用方便接口和,它们位于java.util包 ?...() :获取容器中元素个数 LinkedList:LinkedList底层是一双向链表形式进行实现,LinkedList执行数据维护过程效率较高。...从集合取出时往往需要转型,效率低,容易产生错误。...泛型:定义集合时候同时定义集合对象类型 好处: 增强程序可读性和安全性 6.术语辨析 集合和数组比较 Collection和Collections区别 ArrayList和LinkedList...Java还有一个Collections,专门用来操作集合 ,它提供一系列静态方法实现对各种集合搜索、排序、线程安全化等操作。

81720
领券