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

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

若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出。...布隆过滤器可以用于检索一个元素是否一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 是不是描述的比较抽象?那就直接了解其原理吧!...比如:某个URL(X)的哈希是2,那么落到这个byte数组第二位上就是1,这个byte数组将是:000….00000010,重复的,将这20亿个数全部哈希并落到byte数组中。...Double.MIN_VALUE; } return (long) (-n * Math.log(p) / (Math.log(2) * Math.log(2))); } 真正的byte数组维护类...使用场景 1、黑名单 2、URL去重 3、单词拼写检查 4、Key-Value缓存系统的Key校验 5、ID校验,比如订单系统查询某个订单ID是否存在,如果不存在就直接返回。

1.8K30

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

若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出。...布隆过滤器可以用于检索一个元素是否一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 是不是描述的比较抽象?那就直接了解其原理吧!...比如:某个URL(X)的哈希是2,那么落到这个byte数组第二位上就是1,这个byte数组将是:000….00000010,重复的,将这20亿个数全部哈希并落到byte数组中。...Double.MIN_VALUE; } return (long) (-n * Math.log(p) / (Math.log(2) * Math.log(2))); } 真正的byte数组维护类...使用场景 1、黑名单 2、URL去重 3、单词拼写检查 4、Key-Value缓存系统的Key校验 5、ID校验,比如订单系统查询某个订单ID是否存在,如果不存在就直接返回。

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

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

问题 问题描述:一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?...布隆过滤器可以用于检索一个元素是否一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 是不是描述的比较抽象?那就直接了解其原理吧!...为了存储这个byte数组,系统只需要: 2147483647/8/1024/1024=256M 比如:某个URL(X)的哈希是2,那么落到这个byte数组第二位上就是1,这个byte数组将是:000…...使用场景 布隆过滤器的巨大用处就是,能够迅速判断一个元素是否一个集合中。...它的常用使用场景如下: 1、黑名单 : 反垃圾邮件,从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱(同理,垃圾短信) 2、URL去重 : 网页爬虫对URL的去重,避免爬取相同的URL地址 3、单词拼写检查

79520

手写React-Router源码,深入理解其原理

本文会继续深入React-Router讲讲他的源码,套路还是一样的,我们先用官方的API实现一个简单的例子,然后自己手写这些API来替换官方的并且保持功能不变。...current变量React里面是用Context API实现的,而且放到了核心库react-router里面,一些跟平台相关的组件则放到了对应的平台库react-router-dom或者react-router-native...的Router组件 上面的BrowserRouter用到了react-router的Router组件,这个组件浏览器和React-Native端都有使用,主要获取当前路由并通过Context API将它传递下去...{ // 静态方法,检测当前路由是否匹配 static computeRootMatch(pathname) { return { path: "/", url: "/", params...关于React的Context API另外一篇文章详细讲过,这里不再赘述了。

1.5K51

从零手写react-router

null * isExact: 是否精确匹配 * } * */function pathMatch(path = "", url = "", options = {}) { // 所以在这个函数内部...中, Router组件是用来提供上下文的, 而BrowserRouter创建了一个控制浏览器history api的history对象以后然后传递给Router我们react-router中新建一个文件...官方的逻辑也可以想到大概是这么回事: 因为你使用了官方Switch以后匹配不上的组件都不会在React组件树里存在我们react-router目录下新建一个Switch.js// react-router...null * isExact: 是否精确匹配 * } * */function pathMatch(path = "", url = "", options = {}) { // 所以在这个函数内部...中, Router组件是用来提供上下文的, 而BrowserRouter创建了一个控制浏览器history api的history对象以后然后传递给Router我们react-router中新建一个文件

3.1K30

第二十一篇:从 React-Router 切入,系统学习前端路由解决方案

请看下面代码(解析注释里): import React from "react"; // 引入 React-Router 中的相关组件 import { BrowserRouter as Router...createBrowserHistory:它将在浏览器中使用 HTML5 history API 来处理 URL(见下图标红处的说明),它能够处理形如这样的 URL,example.com/some/path...= 'index'; (2). hash 的感知:通过监听 “hashchange”事件,可以用 JS 来捕捉 hash 值的变化,进而决定我们页面内容是否需要更新: // 监听hash变化,点击浏览器的前进后退会触发...这样的行为,其实是可以通过 API 来实现的。...浏览器的 history API 赋予了我们这样的能力, HTML 4 时,就可以通过下面的接口来操作浏览历史、实现跳转动作: window.history.forward() // 前进到下一页

36410

从零手写react-router

;/** * * @param {String} path 传递进来的path规则 * @param {String} url 需要校验path规则的url * @param {Object} options...: { 路径匹配成功以后的参数值, 匹配不上就是null * key: value * }, * path: path规则 * url: 跟path规则匹配的那一段url, 如果匹配不上就是...null * isExact: 是否精确匹配 * } * */function pathMatch(path = "", url = "", options = {}) { // 所以在这个函数内部...中, Router组件是用来提供上下文的, 而BrowserRouter创建了一个控制浏览器history api的history对象以后然后传递给Router我们react-router中新建一个文件...官方的逻辑也可以想到大概是这么回事: 因为你使用了官方Switch以后匹配不上的组件都不会在React组件树里存在我们react-router目录下新建一个Switch.js// react-router

1.4K40

从零手写react-router

;/** * * @param {String} path 传递进来的path规则 * @param {String} url 需要校验path规则的url * @param {Object} options...: { 路径匹配成功以后的参数值, 匹配不上就是null * key: value * }, * path: path规则 * url: 跟path规则匹配的那一段url, 如果匹配不上就是...null * isExact: 是否精确匹配 * } * */function pathMatch(path = "", url = "", options = {}) { // 所以在这个函数内部...中, Router组件是用来提供上下文的, 而BrowserRouter创建了一个控制浏览器history api的history对象以后然后传递给Router我们react-router中新建一个文件...官方的逻辑也可以想到大概是这么回事: 因为你使用了官方Switch以后匹配不上的组件都不会在React组件树里存在我们react-router目录下新建一个Switch.js// react-router

1.5K50

「源码解析 」这一次彻底弄懂react-router路由原理

笔者个人感觉学习react-router,有助于我们学习单页面应用(spa)路由跳转原理,让我们理解从history.push,到组件页面切换的全套流程,使我们面试的时候不再为路由相关的问题发怵,废话不说...react-router可以理解为是react-router-dom的核心,里面封装了Router,Route,Switch等核心组件,实现了从路由的改变到组件的更新的核心功能,我们的项目中只要一次性引入...react-router-dom,react-router的核心基础上,添加了用于跳转的Link组件,和histoy模式下的BrowserRouter和hash模式下的HashRouter组件等。...这里我们参考的history-4.7.2版本,最新版本中api可能有些出入,但是原理都是一样的,解析history过程中,我们重点关注setState ,push ,handlePopState,listen...什么时候绑定litener, 我们接下来的React-Router代码中会介绍。

3.8K40

从零手写react-router_2023-03-01

path-to-regexp"; /** * * @param {String} path 传递进来的path规则 * @param {String} url 需要校验path规则的url * @...param {Object} options 一些配置: 如是否精确匹配, 是否大小写敏感等 * * 这个函数要做的事情非常简单, 当我调用这个函数并且传递了相应 * 参数以后, 这个函数需要返回给我一个对象...规则匹配的那一段url, 如果匹配不上就是null * isExact: 是否精确匹配 * } * */ function pathMatch(path = "", url = "", options...中, Router组件是用来提供上下文的, 而BrowserRouter创建了一个控制浏览器history api的history对象以后然后传递给Router 我们react-router中新建一个文件...官方的逻辑也可以想到大概是这么回事: 因为你使用了官方Switch以后匹配不上的组件都不会在React组件树里存在 我们react-router目录下新建一个Switch.js // react-router

1.3K30

手写react-router

;/** * * @param {String} path 传递进来的path规则 * @param {String} url 需要校验path规则的url * @param {Object} options...: { 路径匹配成功以后的参数值, 匹配不上就是null * key: value * }, * path: path规则 * url: 跟path规则匹配的那一段url, 如果匹配不上就是...null * isExact: 是否精确匹配 * } * */function pathMatch(path = "", url = "", options = {}) { // 所以在这个函数内部...中, Router组件是用来提供上下文的, 而BrowserRouter创建了一个控制浏览器history api的history对象以后然后传递给Router我们react-router中新建一个文件...官方的逻辑也可以想到大概是这么回事: 因为你使用了官方Switch以后匹配不上的组件都不会在React组件树里存在我们react-router目录下新建一个Switch.js// react-router

1.3K40

面试官又叫我手写 React-router,我决定好好理解路由本质

先用最简单的话来概括一下 React-router 到底做了什么? 本质上, React-Router 就是页面 URL 发生变化的时候,通过我们写的 path 去匹配,然后渲染对应的组件。...核心库是 react-router. react-router-dom 是浏览器中使用的,react-router-native是 rn 中使用的。 如果不理解,直接看一下源码就懂了。...了解完多包的组织关系之后,我们回到前面如何实现 react-router 的 3个关键步骤,如下: 如何监听 url 的变化 ? 如何匹配 path ?...一、监听 URL 的变化 正常情况下,当 URL 发生变化时,浏览器会像服务端发送请求,但使用以下2种办法不会向服务端发送请求: 基于 hash 基于 history react-router 使用了...这代码可以分两部分理解: 是否匹配 渲染组件 1.

80630

React Router 使用教程

本文介绍 React 体系的一个重要部分:路由库React-Router。它是官方维护的,事实上也是唯一可选的路由库。它通过管理 URL,实现组件的切换和状态的变化,开发复杂的应用几乎肯定会用到。...我强烈建议你先跟着做一遍,然后再看下面的API讲解。 ([说明] 本文写作时,React-router 是 2.x 版,本文的内容只适合这个版本,与最新的 4.x 版不兼容。...这个属性是可以省略的,这样的话,不管路径是否匹配,总是会加载指定组件。 请看下面的例子。...Router组件之外,导航到路由页面,可以使用浏览器的History API,像下面这样写。...--history-api-fallback createMemoryHistory主要用于服务器渲染。它创建一个内存中的history对象,不与浏览器URL互动。

2.2K40
领券