自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(293)
  • 资源 (12)
  • 收藏
  • 关注

原创 记一次使用GenericObjectPool的体验,避免自己重复造轮子

是 Apache Commons Pool 库中的一个类,它提供了一个通用的对象池的实现,主要用于复用昂贵或稀缺资源,通过维护一组已创建的对象实例来减少创建和销毁对象的开销,从而提高系统性能。GenericObjectPool 允许用户配置和管理一个对象池,包括设置池的最大和最小对象数量、空闲对象过期时间、borrow(获取)和return(归还)对象时的行为策略等。这个类是高度可配置和灵活的,可以适用于多种不同类型的对象和使用场景。对象回收与复用。

2024-07-26 15:01:58 992

原创 一文搞懂IO模型

一个线程处理所有客户端连接,如果线程忙碌,那需要等当前连接完成,才刻意处理下一个连接。

2024-07-19 17:38:48 651 2

原创 数据结构与算法笔记:实战篇 - 如何用学过的数据结构和算法来实现一个短网址系统?

刚刚讲了,短网址服务的一个核心功能,就是把原始的长网址转化成短网址。除了这个功能之外,短网址服务还有另外一个必不可少的功能。那就是,当用户点击短网址的时候,短网址服务就会将浏览器重定向为原始网址。这个过程是如何实现的呢?为了方便你理解,我画了一张图。从图中可以看出,浏览器会先访问短网址服务,通过短网址获取到原始网址,在通过原始网址访问到页面。不过这部分功能并不是本章要将的重点。我们重点来看,如何将长网址转化成短网址?本章,讲了短网址服务的两种实现方法。第一种实现思路是通过哈希算法生成短网址。

2024-07-04 10:48:10 778

原创 数据结构与算法笔记:实战篇 - 剖析微服务接口鉴权限流背后的数据结构和算法

以防你之前可能对微服务不了解,所以我对鉴权的背景做了简化。假设我们有一个微服务叫用户服务(User Service)。它提供很多用户相关的接口,比如获取用户信息、注册、登录等等,给公司内部的其他应用使用。但是,并不是公司内部所有应用,都可以访问这个用户服务,也并不是每个有权限访问的应用,都可以访问用户的所有接口。给你举个例子。下图只有 A、B、C、D 四个应用可以访问用户服务,并且,每个应用只能访问用户服务的部分接口。要求实现鉴权功能,我们需要事先将应用对接口的访问权限规则设置好。

2024-07-03 21:44:03 983

原创 数据结构与算法笔记:实战篇 - 剖析高性能队列 Disruptor 背后的数据结构和算法

本章,讲解了如何实现一个高性能的并发队列。这里的 “并发”,实际上就是多线程安全的意思。场景的内存队列往往采用循环队列来实现。这种实现方法,对于只有一个生产者和一个消费者的场景,已经足够了。但是,当存在多个生产者和多个消费者时,单纯的循环队列的实现方式,就无法正确工作了。主要是因为,多个生产者同时往队列中写入数据时,在某些情况下,会存在数据覆盖的问题。而多个消费者同时消费数据,在某些情况下,会存在消费重复的问题。针对这个问题,最简单、最暴力的解决方法就是,对写入和读取过程加锁。

2024-07-02 23:03:27 681

原创 数据结构与算法笔记:实战篇 - 剖析搜索引擎背后的经典数据结构和算法

像 Google 这样的大型商用搜索引擎,有成千上万的工程师,十年如一日地对它进行优化改进,所以,它所包含的技术细节非常多。很难通过一篇文章讲所有的细节都给讲清楚。所以接下来的讲解,主要给你展示,如何在一台机器上(假设这台机器的内存是 8GB,应用是 100 多 GB),通过少量的代码,实现一个小型搜索引擎。不过,麻雀虽小,五脏俱全。跟大型搜索引擎相比,实现这样一个小的搜索引擎的理论基础是相通的。搜集分析索引查询。其中,搜集,就是我们常说的爬虫爬取网页。

2024-07-02 09:54:48 680

原创 数据结构与算法笔记:实战篇 - 剖析Redis常用数据类型对应的数据结构

Redis 是一种键值(key-value)数据库。相对于关系型数据库(比如 MySQL),Redis 也被叫作非关系型数据库。关于 Redis 数据库,本人也学习过Redis 核心技术教程,感兴趣的朋友可以去看下专栏。像 MySQL 这样的关系型数据库,表的结构比较复杂,会包含很多字段,可以通过 SQL 语句,来实现非常复杂的查询需求。而 Redis 中只包含 “键” 和 “值” 两部分,只能通过 “键” 来查询值。真实因为这样简单的存储结构,也让 Redis 的读写效率非常高。

2024-06-30 15:06:35 803

原创 数据结构与算法笔记:高级篇 - 并行算法:如何利用并行处理提高算法的执行效率?

上篇文章,我们通过实际软件开发中的 “索引” 这一技术点,回顾了之前学过的一些支持动态数据集合的数据结构。本章,又通过 “并行算法” 这个话题,回顾了之前学过的一些算法。本章的内容比较简单,没有太复杂的知识点。我通过一些例子,比如并行排序、查找、搜索、字符串匹配,给你展示了并行处理的实现思路,也就是对数据进行分片,对没有依赖关系的任务,并行地执行。并行计算是一个工程上的实现思路,尽管跟算法的关系不大,但是,在实际的软件开发中,它确实可以非常巧妙地提高程序的运行效率,是一种非常好的性能优化手段。

2024-06-29 11:49:02 1115

原创 数据结构与算法笔记:高级篇 - 索引:如何在海量数据中快速查找某个数据?

索引的概念不难理解,我想你应该已经搞明白。接下来,我们就分析一下,在设计索引的过程中,需要考虑到的一些因素,换句话说,我们该如何定义清楚需求呢?对于系统设计需求,我们一般可以从功能性需求和非功能性需求两方面来分析。因此,这个问题也不例外。本章是一个总结课。从索引这个非常常用的技术方案,给你展示了散列表、红黑树、跳表、B+ 树、位图、布隆过滤器、有序数组这些数据结构的应用场景。学习完这篇文章后,不知道你对数据结构以及索引,有没有更加清晰的认识呢?

2024-06-28 18:27:46 1106

原创 数据结构与算法笔记:高级篇 - 搜索:如何用 A* 搜索算法实现游戏中的寻路功能?

本章讲的A* 算法属于一种启发式搜索算法实际上,启发式搜索算法并不仅仅只有A* 算法,还有很多其他算法,比如 IDA* 算法、蚁群算法、遗传算法、模拟退火算法等。如果感兴趣,可以自行研究下。启发式搜索算法利用估价函数,避免 “跑偏”,贪心地朝着最有可能到达终点的方向前进。这种算法炸出的路线,并不是最短路线。但是,实际的软件开发中的路线规划问题,我们往往并不需要非得找最短距离。所以,鉴于启发式搜索算法能很好地平衡路线质量和执行效率,它在实际的软件开发中的应用更加广泛。实际上,最短路径章节。

2024-06-28 11:08:03 1797

原创 数据结构与算法笔记:高级篇 - B+树:MySql数据库索引是如何实现的?

如何定义清楚问题呢?除了对问题进行详细的调研,还有一个办法,那就是,通过对一些模糊的需求进行假设,来限定要解决的问题的范围。如果你对数据库的操作非常了解,针对我们现在这个问题,你就能把索引的需求定义得非常清楚。根据某个值查找数据,比如。根据区间来查找某些数据,比如。除了这些功能性需求之外,这种问题往往还会涉及一些非功能性需求,比如安全、性能、用户体验等等。限于本章要讨论的是数据结构和算法,对于非功能性需求,我们着重考虑性能方面的需求。性能方面的需求,我们主要考察时间和空间两方面,也就是。

2024-06-27 22:29:26 1186

原创 数据结构与算法笔记:高级篇 - 向量空间:如何实现一个简单的音乐推荐系统?

实际上,这个问题是推荐系统(Recomendation System)里最典型的一类问题。之所以讲这部分内容,主要还是给你展示,算法的强大之处,利用简单的向量空间的欧几里得距离,就能解决如此复杂的问题。不过,本章只讲解了基础理论,实践中遇到的问题还有很多,比如冷启动问题,产品初期积累的数据不多,不足以做推荐等等。这些更加深奥的内容,你可以之后自己在实践中慢慢探索。

2024-06-27 10:01:52 988

原创 数据结构与算法笔记:高级篇 - 概率统计:如何利用朴素贝叶斯算法过滤垃圾短信?

本章,讲解了基于黑名单、规则、概率统计三种垃圾短信的过滤方法,实际上,本章讲的这三种方法,还可以应用到很多类似过滤、拦截的领域,比如垃圾邮件的过滤等等。在讲黑名单过滤的时,我讲到 布隆过滤器可能会存在误判,可能会导致用户投诉。实际上,我们可以结合三种不同过滤方式的结果,对同一个短信处理,如果三种都标明这个短信是垃圾短信,我们才把它当做垃圾短信拦截过滤,这样就会更精准。当然,在实际的工程中,我们还需要结合具体的场景,以及大量的实验,不断去调整策略,权衡垃圾短信判定的准确率。

2024-06-26 19:13:10 1101

原创 数据结构与算法笔记:高级篇 - 位图:如何实现网页爬虫中的URL去重功能?

本章,关于搜索引擎爬虫网页去重问题的解决,我们从散列表讲到位图,再讲到布隆过滤器。布隆过滤器非常适合这种不需要 100% 准确、允许存在小概率误判的大规模判重场景。除了爬虫去重这个例子,还有比如统计一个大型网址每条的 UV 数,也就是每天有多少用户访问了网站,我们可以使用布隆过滤器,对重复访问的用户进行去重。前面讲到,布隆过滤器的误判率,主要跟哈希函数的个数、位图的大小有关。当我们往布隆过滤器中不停地加入数据之后,位图中不是 true 的位置就越来越少了,误判率就越来越高了。

2024-06-26 10:02:24 775

原创 数据结构与算法笔记:高级篇 - 最短路径:地图软件是如何计算出最优出行路径的?

本章,我们学习了一种非常重要的图算法,Dijkstra 最短路径算法。实际上,最短路径算法还有很多,比如 Bellford 算法、Floyd 算法等等。如果感兴趣,你可以自己去研究。关于 Dijkstra 算法,只讲了原理和代码实现。对于正确性,并没有去证明。之所以这么做是因为证明过程设计比较复杂度的数学推导。这个并不是我们的重点,你只要掌握这个算法的思路就可以了。这些算法实现思路非常经典,掌握了这些思路,我们可以拿来指导、解决其他问题。

2024-06-24 20:09:58 884

原创 数据结构与算法笔记:高级篇 - 拓扑排序:如何确定代码源文件的编译依赖关系?

在基础篇中,关于 “图”,我们讲了图的定义和存储图的广度和深度优先搜索。本章,我们又讲了一个关于图的算法,拓扑排序。拓扑排序应用非常广泛,解决的问题的模型也非常一直。凡是需要通过局部顺序来推导全局顺序的,一般都能用拓扑排序来解决。此外,拓扑排序还能检测图中环的存在。对于 Kahn 算法来说,如果最后输出出来的顶点个数,少于图中顶点个数,图中还有入度不是 0 的顶点,那就说明,图中存在环。关于图中环的检测,我们在递归。

2024-06-22 11:22:12 833

原创 数据结构与算法笔记:基础篇 - 动态规划实战:如何实现搜索引擎中的拼写纠错功能?

在我们讲过,利用 Trie 树,可以实现搜索引擎的关键词提示功能,这样可以节省用户输入搜索关键词的时间。实际上,搜索引擎在用户体验方面的优化还有很多,比如你可能经常会用的拼写纠错功能。当你在搜索框中,一不小心输错时,搜索引擎会非常智能地检测出你的拼写错误,并且用对应地正确的单词来进行搜索。作为一名软件工程师,你是否想过,这个功能是怎么实现的?

2024-06-21 19:29:44 661

原创 数据结构与算法笔记:基础篇 - 动态规划理论

刚刚讲了,如何鉴别一个问题是否可以用动态规划来解决。现在,我再总结一下,动态规划解题的一般思路,让你面对动态规划问题时,能够有章可循,不至于束手无策。

2024-06-20 22:43:17 588

原创 数据结构与算法笔记:基础篇 - 初始动态规划:如何巧妙解决“双十一”购物时的凑单问题?

淘宝的 “双十一” 购物节有各种促销活动,比如 “满 200 元减 50元”。假设你女朋友购物车中有 n 个(n > 100)想买的商品,它希望从里面选几个,在凑够满减条件的前提下,让选出来的商品价格总和最长成都接近满减条件(200 元),这样就可以极大限度地 “薅羊毛”。作为程序员的你,能不能编个代码来帮她搞定?要想高效地解决这个问题,就要用到本章讲的动态规划(Dynamic Programming)。

2024-06-20 09:38:41 1022

原创 数据结构与算法笔记:基础篇 - 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想

我们在利用的是回溯算法思想。这个算法思想非常简单,但是应用却非常广泛。它除了用来指导像深度优先搜索这种经典的算法设计之外,还可以用在很多实际的软件开发场景中,比如正则表达式、编译原理中的语法分析等。此外,很多经典的数学问题都可以用回溯算法解决,比如数独、八皇后、0-1 背包、图的着色、旅行商问题、全排列等等。既然应用如此广泛,本章就来学习一下这个算法思想,看看它是如何指导我们解决问题的。

2024-06-19 21:05:40 552

原创 数据结构与算法笔记:基础篇 - 分治算法:谈一谈大规模计算框架MapReduce中的分治思想

MapReduce 是 Google 大数据处理的三姐马车之一,另外两个事 GFS 和 Bigtable。它在倒排索引、PageRank 计算、网页分析等搜索引擎相关的技术中都有大量的应用。尽管开发一个 MapReduce 看起来很高深。实际上,万变不离其宗,它的本质就是本章要学的这种算法思想,分支算法。

2024-06-19 12:06:19 777

原创 数据结构与算法笔记:基础篇 - 贪心算法:如何用贪心算法实现 Huffman压缩编码

基础的数据结构和算法基本上学完了,接下来几篇文章,会将更加基本的算法。它们分别是贪心算法、分治算法、回溯算法、动态规划。更加确切的说,它们应该是算法思想,并不是具体的算法,常用来指导我们设计具体的算法和编码等。贪心、分治、回溯、动态这 4 个算法思想,原理解释起来都很简单,但是要正确掌握且灵活应用,并不是一件容易得事情。所以,接下来的这 4 个算法思想的讲解,依旧不会长篇大论的去讲理论,而是结合具体的问题,让你自己感受这些算法时怎么工作的,是如何解决问题的,带你在问题中体会这些算法的本质。

2024-06-18 21:43:19 583

原创 数据结构与算法笔记:基础篇 -AC自动机:如何用多模式串匹配实现敏感词过滤功能?

很多支持用户发表文本内容的网站,比如 BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的一些淫秽、反动、谩骂等内容。你有没有想过,这个功能是怎么实现的呢?实际上,这些功能最基本的原理就是字符串匹配算法,也就是通过维护一个敏感词字典,当用户输入一段文字内容之后,通过字符串匹配算法,来查找用户输入的这段文字,是否包含敏感词。如果有,就用 “***” 把它替换掉。我们讲过讲过好几种字符串匹配算法了,它们都可以处理这个问题。但是,对于访问量巨大的网站来说,比如淘宝,用户每天的评论数有几亿、甚至十几亿。

2024-06-18 12:51:06 705

原创 数据结构与算法笔记:基础篇 -Trie树:如何实现搜索引擎的搜索关键词提示功能?

Trie 树也叫 “字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。当然,这样一个问题可以有多种解决方法,比如散列表、红黑树,或者前面几篇文章讲到的一些字符串匹配算法,但是 Trie 树在这个问题的解决上,有它特有的优点。不仅如此,Trie 树能解决的问题也不限于此,一会再慢慢分析。现在,先来看下,Trie 树到底长什么样子。我举个简单的例子来说明下。

2024-06-17 22:22:24 890

原创 数据结构与算法笔记:基础篇 -字符串匹配(下):如何借助BM算法轻松理解KMP算法?

讲了 BM 算法,尽管他复杂,也不好理解,但确实工程中非常好用的一种高效字符串匹配算法。有统计说,它是最搞笑、最常用的字符串匹配算法。不过,在所有的字符串匹配算法里,要说最知名的一种的话,那就非 KMP 算法莫属。很多时候,提到字符串匹配,我们首先想到的就是 KMP 算法。尽管在实际的开发中,我们几乎不大可能自己亲手实现一个 KMP 算法。但是,学习这个算法的思想,作为你开拓眼界、锻炼下思维逻辑,也是极好的,所以有必要拿出来讲一讲。不过 KMP 算法是出了名的不好懂。

2024-06-17 19:00:37 802

原创 数据结构与算法笔记:基础篇 -字符串匹配(中):BM算法 - 如何实现文本编辑器中的查找功能?

文本表及其中的查找替换功能,我像你应该不陌生吧?比如,我们在 Word 中把一个单词统一替换为另一个,用的就是这个功能。当然,你用上篇文章的 BF 算法和 RK 算法,也可以实现这个功能,但是在某些极端情况下,BF 算法性能会退化的比较严重,而 RK 算法需要利用到哈希算法,设计一个可以应对各种类型字符串的哈希算法并不简单。对于工业级的软件开发来说,我们希望算法尽可能的高效,并且在极端情况下,性能也不要退化的太严重。那么,本章来学习 BM(Boyer-Moore) 算法。

2024-06-16 22:21:08 874

原创 数据结构与算法笔记:基础篇 -字符串匹配(上):如何借助哈希算法实现高效字符串匹配?

从本章开始,我们开始学习字符串匹配算法。字符串匹配这样一个功能,我想对于任何一个开发人员来说,应该都不陌生。我们用的最多的就是编程语言中提供的字符串查找函数,比如 Java 中的indexOf()函数等,它们底层就是依赖下面要将的字符串匹配算法。字符串匹配算法很多,会分成好几篇篇文章来讲解。本章会将两种比较简单的、好理解的,它们分别是:BF 算法和 RK 算法。这两个算法中, RK 算法是 BF 算法的改进,它巧妙借助了前面讲过的哈希算法,让匹配效率有了很大的提升。那。

2024-06-15 11:47:16 1077

原创 数据结构与算法笔记:基础篇 -深度和广度优先搜索:如何查找出社交网络中的三度好友关系?

我们知道,算法是作用于具体数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于 “图” 这种数据结构的。这是因为,图这种数据结构的表达能力很强,大部分涉及搜索的场景都可以抽象成 “图”。图上的搜索算法,最直接的理解就是,在图中找出一个顶点出发,到另一个顶点的路径。具体方法有很多,比如今天要将的两种最简单、最 “暴力” 的深度优先、广度优先搜索,还有A*IDA*等启发式搜索算法。上篇文章讲过,图有两种主要存储方法,邻接表和邻接矩阵。本章我会用邻接表来存储图。这里先给出图的代码实现。

2024-06-14 23:31:44 1063

原创 数据结构与算法笔记:基础篇 -图的表示:如何存储微博、微信等社交网络中的好友关系?

微博、微信这些社交软件你肯定玩过吧。在微博中,两个人可以互相关注;在微信中,两个人可以互加好友。那你知道,。实际上,设计图的算法有很多,也非常复杂,比如图的搜索、最短路径、最小生成树、二分图等等。本章聚焦在图存储这一方面,后面会分好几个章节一次讲解图相关的算法。

2024-06-14 12:48:39 975

原创 数据结构与算法笔记:基础篇 -堆的应用:如何快速获取到Top 10最热门的搜索关键词

搜索引擎的热门搜索排行榜的功能你用过吗?你知道这个功能是如何实现的吗?实际上,它的实现并不复杂。搜索引擎每天会接收大量的用户搜索请求,它会把这些用户输入的搜索关键词记录下来,然后再离线地统计分析,得到最热门的 Top 10 搜索关键词。那请你思考下,这个问题就可以用堆来解决,这也是堆这种数据结构一个非常典型的应用。我们讲了堆和堆排序的一些理论知识,本章我们就来讲讲,堆这种数据结构几个非常重要的应用:优先级队列、求 Top K和求中位数。

2024-06-13 22:51:40 579

原创 数据结构与算法笔记:基础篇 -堆和堆排序:为什么说堆排序没有快速排序快?

本章讲另外一种特殊的树,“堆” (Heap)。堆这种数据结构的应用场景非常多,最经典的莫过于堆排序了。堆排序是一种原地、时间复杂度为Onlogn的排序算法。前面学过快速排序,平均情况下,它的时间复杂度为Onlogn。尽管这两种排序算法的时间复杂度都是Onlogn,甚至堆排序比快速排序的时间复杂度还要稳定,但是,

2024-06-13 15:40:34 651

原创 数据结构与算法笔记:基础篇 -递归树:如何借助树来求解递归算法的时间复杂度?

我们都知道,递归代码的时间复杂度分析起来很麻烦。在《》哪里讲过,如何用递推公式,求解归并排序、快速排序的时间复杂度,但是有些情况,比如快排的平均时间复杂度的分析,用递推公式的话,会设计非常复杂的数据推到。除了用递推公式这种比较复杂的分析方法,有没有更简单的方法呢?本章就来学习另外一种方法,

2024-06-12 12:28:46 981

原创 数据结构与算法笔记:基础篇 - 红黑树(下):掌握这些技巧,你也可以实现一个红黑树

其实是为了实现方便。只要满足这一条要求,那在任何时刻,红黑树的平衡操作都可以归结为刚刚讲的几种情况。还是有点不理解,下面通过一个例子来解释下。假设红黑树的定义中不包含刚刚提到的那一条 “叶子节点必须是黑色的空节点”,我们往红黑树中插入一个数据,新插入节点的父节点也是红色,两个红色的节点相邻,这个时候,红黑树的定义就被破坏了。我们应该如何调整呢?你会发现,这个时候,我们前面在讲插入时,三种情况下平衡调整规则,没有一种是适用的。

2024-06-11 20:53:24 798

原创 数据结构与算法笔记:基础篇 - 红黑树(上):为什么工程中都用红黑树这种二叉树?

平衡二叉树的严格定义是这样的:二叉树中任意一个结点的左右子树的高度相差不能大于 1。从这个定义来看,上篇文章讲的完全二叉树、满二叉树其实都是平衡二叉树,但是非并完全二叉树也有可能是平衡二叉树。平衡二叉查找树不仅满足上面平衡二叉树的定义,还满足二叉查找树的特点。最先被发明的平衡二叉查找树是 AVL 树,它严格符合刚刚讲到的平衡二叉查找树的定义,即任何子节点的左右子树的高度相差不超过 1,是一种高度平衡的二叉查找树。但是很多平衡二叉查找树其实并没有严格符合上面的定义,所以,我感觉没必要去死抠定义。

2024-06-10 21:59:06 858

原创 数据结构与算法笔记:基础篇 - 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?

我们学习了树、二叉树及二叉树的遍历,本章来学习一种特殊的二叉树,二叉查找树。二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。之前说过,散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂度是O1。

2024-06-10 15:11:20 1054

原创 数据结构与算法笔记:基础篇 - 二叉树基础(上):什么样的二叉树适合用数组来存储?

前面讲的都是线性表结构,栈、队列等等。本章我们讲一种非线性表结构,树。树这种数据结构比线性表的数据结构要复杂得多,内容也比较多,所以会分四节来讲解。?

2024-06-10 13:33:59 1001

原创 数据结构与算法笔记:基础篇 - 哈希算法(下):哈希算法在分布式系统中有哪些应用?

讲解了哈希算法的四个应用,它们分别是:安全加密、数据校验、唯一标识、散列函数。。

2024-06-08 23:42:38 839

原创 数据结构与算法笔记:基础篇 - 哈希算法(上):如何防止数据库中当用户信息被脱库?

前面几篇文章讲到 “散列表” “散列函数”,这里又讲到 “哈希算法”,你是不是一头雾水?实际上,不管是 “散列” 还是哈希,这都是中文翻译,英文其实都是 “Hash所以,我们常听到有人把 “散列表” 叫做 “哈希表” “哈希表”,把 “哈希算法” 叫做 “Hash 算法” 或者 “散列算法”。那到底什么是哈希算法呢?哈希算法的定义和原来其实都非常简单,基本上一句话就可以概括。将任意长度的二进制值映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。

2024-06-08 14:01:20 735

原创 数据结构与算法笔记:基础篇 - 散列表(下):为什么散列表和链表经常会一起使用?

已经学习了这么多章节了,你有没有发现,两种数据结构,散列表和链表,经常会被放在一起使用。你还记得,前面的章节中都有哪些地方讲到散列表和链表的组合使用吗?在,我讲到如何用链表来实现 LRU 缓存淘汰算法,但是链表实现的 LRU 缓存淘汰算法的时间复杂度是On,当时提到了,通过散列表可以将这个时间复杂度降低到O1。在,提到 Redis 的有序集合是使用跳表来实现的,跳表可以看做这一种改进版的链表。当时我们也提到,Redis 有序集合不仅使用了链表,还用到了散列表。

2024-06-07 23:18:52 944

原创 数据结构与算法笔记:基础篇 - 散列表(中):如何打造一个工业级水平的散列表?

通过的学习,我们知道,散列表的查找效率不能笼统地说O1。它跟散列函数、装载因子、散列冲突等都有关系。如果散列函数设计得不好,或者装载因子过高,都可能导致散列冲突发生的概率升高,查询效率下降。在极端情况下,有些恶意攻击者,还可能通过精心构造的数据,使得所有的数据经过散列之后,都散列到同一个槽里。如果我们使用的是基于链表的冲突解决方法,那这个时候,散列表就会退化为链表,查询的时间复杂度就从O1退化为On。如果散列表中有 10 万个数据,退化后的散列表查询的效率就下降了 10 万倍。

2024-06-07 12:32:10 566

WSL(Windows Subsystem for Linux)更新程序

该资源是用于更新WSL的一个windows的更新程序,双击运行即可自动更新wsl。WSL,即Windows Subsystem for Linux,是一种在Windows操作系统上运行Linux二进制文件的兼容层。该层提供了Linux环境和GNU工具,可以在Windows系统上运行Linux应用程序。WSL使得开发人员可以在Windows系统上使用Linux工具和命令行界面,而不必安装虚拟机或双系统。

2024-01-30

RedisTimeSeries 类型的动态库

Redis的扩展模块,支持时间序列操作的 RedisTimeSeries 类型的动态库

2024-01-30

windows 版VirtualBox-6.0.10-132072.zip

windows 版 VirtualBox(6.0.10-132072版本)

2021-09-29

Windows版64位 vagrant_2.2.5_x86_64.zip

vagrant 2.2.5 版本软件包(Windows版64位)

2021-09-29

网页版进销存2.0系统文件.zip

网页版进销存-2.0版本演示版部署所需文件。项目部署博客地址:https://blog.csdn.net/chenjian723122704/article/details/117919762

2021-06-15

小妖拼图APP

小妖拼图APP,益智和放松的休闲游戏。欢迎大家前来下载

2018-02-24

Android使用Bmob简单例子源码

Android使用Bmob简单例子源码,里面包含上传数据到后台,查看后台保存的数据。 本地推送和Web网站推送

2018-01-10

内存分析工具MAT

Android内存分析工具,和AS的.hprof文件配合使用分析应用APP的内存。

2018-01-09

反编译源码工具

dex2jar和jd-gui两个工具结合起来可以实现反编译源代码。请用于学习,而不是破坏和盗取

2018-01-08

apktool_xml反编译工具

主要查看res文件下xml文件、AndroidManifest.xml和图片。(注意:如果直接解压.apk文件,xml文件打开全部是乱码)

2018-01-08

Android天气预报app源码

该app时一款简洁大方的app软件,可以查看全国各省市县地区的名称,并查看当地的天气状况。支持国内地域切换。更具天气情况由相关动画,比如下雨,下雪,云飘动。 可以设置是否自动更新天气,以及更新的频率。 新人,很多的东西做的比较粗糙,大家有兴趣的可以下载源码下来看看

2017-12-08

unix环境高级编程第二版源代码

unix环境高级编程第二版里面的所有例子

2011-12-15

C语言常见问题

里面涵盖了C,linux系统编程,和linux基础的知识点,是c程序员面试的一个大纲吧

2011-11-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除