自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 收藏
  • 关注

原创 LeetCode-141环形链表 & LeetCode-142环形链表二

本篇文章在我之前讲完的的基础上进行讲解,本次我们以leetcode为例,讲解链表的其他题型,今天我们先了解一下环形链表,这里我们以leetCode141和leetCode142为例。

2024-01-04 16:52:10 1082 1

原创 数据结构与算法(九)--链表与递归

本质上,递归就是将原来的问题,转化为更小的同一问题,通常是小到不能再小,此时我们可以很容易的解决这道问题。举例:数组求和①定义Sum(arr[0…n-1]) 我们可以将其转化为 arr[0] + Sum(arr[1…n-1])那么大家就能很轻松的看到后一个Sum函数解决的问题比前一个Sum函数解决的问题就要小一些。前一个函数要对n个元素求和,后一个Sum函数只需要对n-1个元素求和。②那么依次类推,我要求索引1到n-1这些元素之和又可以转化为arr[1]+Sum(arr[2…n-2])…

2024-01-04 16:51:55 1380

原创 Elasticsearch(十五)搜索---搜索匹配功能⑥--基于地理位置查询

随着互联网+的热门,越来越多的传统行业将全部或者部分业务转移到互联网上,其中不乏一些和地理位置强相关的行业。基于地理位置的搜索功能,大大提升了人们的生活和工作效率。例如,外出旅行时,只需要用手机打开订酒店的应用软件,查找附近心仪的酒店下单即可;又或者打车行业,人们不用在寒冷的户外拦截出租车,只需要在室内打开打车APP定位到当前位置,然后确定目的地,系统就可以为附近的车辆派发订单。幸运的是,ES为用户提供了基于地理位置的搜索功能。

2023-10-24 17:41:12 1818

原创 数据结构与算法(八)--使用链表实现队列

我们上一章通过链表实现了栈这样一个数据结构,此次我们实现另一个数据结构–队列。我们知道链表的增删查操作只对链表头进行操作才有O(1)的时间复杂度,如果我们对链表的尾部进行操作,它的复杂度都是O(n)级别了。但是对于队列这种数据结构来说,我们需要在一端插入数据,在另一端删除元素,所以我们势必会在这个线性结构的两端同时操作,此时对于链表来说有一端的时间复杂度就会达到O(n)级别。其实这个问题我们当时在用数组的时候也遇到了,当时我们改进了数据实现队列的方式,从而产生了的这种实现方式。

2023-10-24 16:53:56 427

原创 LeetCode-496 下一个更大元素

你会发现,每当进新元素的时候,只要此时栈不为空,说明存在比该元素右边第一个更大的元素,如果栈为空,那么就直接记录-1.那么我们该怎么记录呢,答案很简单,

2023-10-20 09:20:53 283

原创 数据结构与算法(七)--使用链表实现栈

之前我们已经学习了链表的所有操作及其时间复杂度分析,我们可以了解到。。本章我们通过链表去实现栈,当然我们也会讲到用链表实现另一个数据结构–队列。并且比较用数组实现和用链表实现他们之间的差异。

2023-10-07 17:47:05 1094 1

原创 Leetcode901-股票价格跨度

我这边画一个图:如上图,第一次入栈70这个元素时,比栈顶元素60要大,将price=70入辅助栈,然后遍历主栈栈顶,将小于等于70的元素弹出栈然后push进辅助栈,此时记录辅助栈size为2,然后将辅助栈元素全部弹出并且推入主栈,最后返回size即可。且这样不会修改我主栈元素的原本顺序,就是按照next元素的顺序进行排序的,就也顺便解决了。

2023-10-07 17:01:28 483

原创 数据结构与算法(六)--链表的遍历,查询和修改,删除操作

我们了解了链表的概念以及链表底层的搭建以及向链表中添加元素的操作。本次我们继续学习链表剩余的操作:遍历,查询和修改、删除操作。

2023-09-22 11:54:41 998 1

原创 leetcode题目分析(一)leetcode155最小栈

本题基于这道题,说一下通过java解决的一些方法。需要尤其注意的是,此题输入的值的区间范围在-2^31

2023-09-21 17:45:44 360

原创 数据结构与算法(五)--链表概念以及向链表添加元素

今天我们学习另一种非常重要的线性数据结构–链表,之前我们已经学习了三种线性数据结构,分别是动态数组,栈和队列。其中队列我们额外学习了队列的另一种实现方式–循环队列。其实我们自己实现过前三个数据结构就知道,它们底层均依托静态数组,靠resize解决固定容量问题。而链表和前三种均不同,它是真正的动态数据结构。学好链表,有利于:就像火车一样,每一个节点就像一个个车厢,车厢除了人(数据),还要和其他车厢进行连接,以使得数据是整合在一起的,用户可以方便的在所有的数据上进行查询等其他操作。而数据和数据之间的连接就是

2023-09-20 17:54:42 1212

原创 数据结构与算法(四)--队列

前面的文章我们分别学习了线性结构中的数组和栈,这次我们学习另一种线性结构–队列。这也是我们学习的最后一种线性结构。队列同栈,依然是把数据排成一排,且队列对应的操作依旧是数组的子集。但是队列只能从一端(队尾)添加元素,只能从另一端(队首)取出元素。我们前言说过,队列只能从一端(队尾)添加元素,只能从另一端(队首)取出元素。同这个数据结构的名字,它其实和我们日常生活中排队是非常相像的。例如:增加元素就像排队一样,一次从队尾进入。如下图:而从队列取出元素的时候,仍然和排队是一致的,从队首取出元素,如下图:

2023-09-19 16:53:30 540

原创 数据结构与算法(三)--栈

前两篇文章我们学习了第一个数据结构,数组,且从底层通过java实现了数组的构建和增删改查的操作功能,并且通过resize操作使我们的数组可以动态的扩容或者缩容。且我们知道数组最大的优点就是在索引有语义的情况下,查询和修改操作会非常的快,反之我们就得遍历寻找元素。我们还了解了时间复杂度,渐进复杂度,分摊复杂度和复杂度震荡等知识,分析动态数组相关操作的时间复杂度并且优化了resize操作。那么从这一章我们要学习另一种线性数据结构-栈。

2023-09-15 09:29:11 534

原创 数据结构与算法(二)时间复杂度分析

我们自定义了动态数组,尤其是后面扩容,很多朋友会担心每次扩容都要进行for循环,是否会非常影响效率,那么这次我们就通过歇息并分析时间复杂度来分析扩容的效率问题。我们本章也只是对时间复杂度做一个简单的了解和分析。

2023-09-13 15:22:06 272

原创 数据结构与算法(一)数组的相关概念和底层java实现

例如我想通过以人的身份证号作为索引,去找对应的人的一些属性。而由于身份证号作为索引一般都非常的大,对于计算机来说,开辟一个身份证号数字大小的空间是不值当甚至不可能的,且就算可以也会浪费相当多的空间,例如我数组就十个人,我要用身份证号作为索引去开辟,那势必会浪费特别大的空间。

2023-09-12 12:11:00 813

原创 Elasticsearch(十四)搜索---搜索匹配功能⑤--全文搜索

不同于之前的term。terms等结构化查询,全文搜索首先对查询词进行分析,然后根据查询词的分词结果构建查询。这里所说的全文指的是文本类型数据(text类型),默认的数据形式是人类的自然语言,如对话内容、图书名称、商品介绍和酒店名称等。结构化搜索关注的是数据是否匹配,全文搜索关注的是匹配程度;结构化搜索一般用于精确匹配,而全文搜索用于部分匹配。本章将详细介绍使用最多的全文搜索。

2023-08-23 17:44:50 1218

原创 Elasticsearch(十三)搜索---搜索匹配功能④--Constant Score查询、Function Score查询

之前我们学习了布尔查询,知道了filter查询只在乎查询条件和文档的匹配程度,但不会根据匹配程度对文档进行打分,而对于must、should这两个布尔查询会对文档进行打分,那如果我想在查询的时候同时不去在乎文档的打分(对搜索结果的排序),只想过滤文本字段是否包含这个词,除了filter查询,我们还会介绍Constant Score查询。相反,如果想干预这个分数,我们会使用Function Score查询,这些都会在后面介绍到。如果不想让检索词频率TF(Term Frequency)对搜索结果排序有影响,只想

2023-08-22 15:40:05 1580

原创 Elasticsearch(十二)搜索---搜索匹配功能③--布尔查询及filter查询原理

本节主要学习ES匹配查询中的布尔查询以及布尔查询中比较特殊的filter查询及其原理。复合搜索,顾名思义是一种在一个搜索语句中包含一种或多种搜索子句的搜索。布尔查询是常用的复合查询,它把多个子查询组合成一个布尔表达式,这些子查询之间的逻辑关系是"与",即所有子查询的结果都为true时布尔查询结果才为真。布尔查询还可以按照各个子查询的具体匹配程度对文档进行打分计算,除了比较特殊的must not查询和filter查询之外,这个后面会详解。下面将逐一进行讲解。

2023-08-21 12:04:12 3506

原创 Elasticsearch(十一)搜索---搜索匹配功能②--range查询和exists查询

继上一节学习了ES的搜索的查询全部和term搜索后,此节将把搜索匹配功能剩余的2个学习完,分别是range搜索和exists搜索。

2023-06-21 15:15:28 3240

原创 Elasticsearch(十)搜索---搜索匹配功能①--查询所有文档和term级别查询

之前的学习我们已经了解了搜索的辅助功能,从这一章开始就是ES真正核心的功能,搜索。针对不同的数据类型,ES提供了很多搜索匹配功能:既有进行完全匹配的term搜索,也有按照范围匹配的range搜索;既有进行分词匹配的match搜索,也有按照前缀匹配的suggesr搜索。我们同样也会通过在kibana上进行DSL的搜索示例,也会给出java客户端的使用代码。本节我们将介绍两个场景:查询所有文档和term级别的查询。

2023-06-20 15:02:13 2446

原创 X509证书以及相关java常用接口

例如,如果getNotAfter()返回的值是1649992800000,那么证书的过期日期是2023年4月14日23:59:59 GMT。例如,如果getNotBefore()返回的值是1618476000000,那么证书的生效日期是2021年4月15日00:00:00 GMT。例如,.pem格式的证书是以Base64编码的ASCII文本格式,.crt格式的证书通常是PEM编码的,而.cer格式的证书可以是DER编码或PEM编码。和之前的getIssueDn不同的是,前者是证书持有者,后者是证书颁发者。

2023-04-17 19:22:03 6503 3

原创 数字证书的相关专业名词(下)---OCSP及其java中的应用

该篇文章讲述如何获取OCSP地址以及通过OCSP地址获取OCSP响应结果

2023-04-13 14:40:17 3289 3

原创 数字证书的相关专业名词(中)---根证书和CRL,以及java中CRL的获取和验证方法

该篇文章讲解了根证书和CRL,以及java中如何获取crl url,以及通过CRL url校验证书有效性

2023-04-04 17:47:52 3342

原创 数字证书的相关专业名词(上)---PKI和PKCS

数字证书是公钥基础设施(PKI)中用于验证身份的一种数字凭证。它包含了一个用户或实体的信息,以及该实体与其公钥之间的数字签名。数字证书通常由第三方认证机构(CA)颁发,以确保其真实性和可信度。数字证书中包含的信息通常包括证书持有人的名称、公钥、有效期、证书颁发机构的名称和数字签名等元素。数字证书可以用于加密通讯、数字签名、身份验证等应用。例如,在浏览器中,数字证书被用于建立HTTPS连接,以确保安全的数据传输。数字证书通过公钥加密技术来实现,数字签名可以确保证书信息的完整性和真实性。

2023-04-04 10:38:39 2160 1

原创 Elasticsearch(九)搜索---搜索辅助功能(下)--搜索性能分析

我们学习了ES的搜索辅助功能的一部分–分别是指定搜索返回的字段,搜索结果计数,分页,那么本次我们来学习一下ES的性能分析相关功能。

2023-02-09 19:05:29 1319

原创 Elasticsearch(八)搜索---搜索辅助功能(上)--指定搜索返回字段,结果计数和分页

前面我们已经将ES的基础操作(索引,映射,文档)学习过了,从这一章开始,我们便开始学习ES的最大的功能—搜索ES为用户提供了丰富的搜索功能:既有基本的搜索功能,又有搜索建议功能;既有常用的普通类型的匹配功能,又有基于地理位置的搜索功能;既提供了分页搜索功能,又提供了搜索的调试分析功能等等。这些都会在这一大章中学习到。但是考虑到搜索涉及到的章节确实非常多,于是我仍然像之前基础操作一样,拆解成一些章节供大家更容易吸收学习那么这一节我们主要学习ES的搜索辅助功能。例如,为优化搜索功能,需要指定搜索的一部分字段

2023-02-08 14:04:34 3369

原创 Elasticsearch(七)--ES文档的操作(下)---删除文档

我们了解了ES的修改文档的操作,也同样分别通过ES的kibana客户端以及Java高级Rest客户端进行学习,那么本篇末尾要给大家介绍的是对文档的删除操作,同新修改文档,也有删除单条文档和批量删除文档操作,根据条件删除文档,我们本篇均会涉及到。

2023-01-30 15:12:33 7140

原创 Elasticsearch(六)--ES文档的操作(中)---修改文档

我们了解了ES的插入和批量插入文档的操作,分别通过ES的kibana客户端以及Java高级Rest客户端进行学习,那么本篇则进入到对文档的修改操作,同新增文档,也有更新单条文档和批量更新文档操作,但还多出一个根据条件更新文档,我们本篇均会涉及到。

2023-01-29 14:42:31 3898

原创 Elasticsearch(五)--ES文档的操作(上)---写入文档

使用ES构建搜索引擎时需要经常对文档进行操作,除了简单的单条文档操作,有时还需要进行批量操作。我们这章主要学习ES文档的增删改的操作,由于涉及到的代码量会比较多,所以分为3篇文章分别说明文档的这个三个操作。那么我们对文档操作的学习除了在kibana客户端之外,还会涉及到java的highLevelClient相应的操作代码。那么话不多说,我们直接开始下面的学习、

2023-01-28 10:35:12 3463 1

原创 Elasticsearch(四)--一文弄懂ES的映射操作

如商品是否售罄,房屋是否已租,酒店房间是否满房等。

2023-01-18 13:31:47 3732

原创 elasticsearch(三)-- 理解ES的索引操作

上一章我们主要学习了es的几个客户端,那么我们后面也主要通过kibana客户端、HighLevelClient高级客户端这两个来学习es.这一章的学习我们主要是学习一些Elasticsearch的基础操作,主要是深入一些概念,比如索引的具体操作,映射的相关语法,对数据类型,文档的操作。那么主要的DSL代码的实践都将在kibana客户端上实践。本节主要介绍索引的相关操作,涉及创建、删除、关闭和打开索引,以及索引别名的操作。其中,索引别名的操作在生产环境中使用比较广泛,可以和关闭或删除索引配合使用。在生产环境

2023-01-17 09:36:29 2418

原创 Elasticsearch(二)--Elasticsearch客户端讲解

Kibana是ELK家族中一个开源、免费的可视化数据搜索和分析平台。借助KIbana,用户不需要编码就可以将ES中分析的结果进行可视化呈现,如以常用的饼图、柱状图和时序图等方式呈现。除了可视化数据分析功能,Kibana还提供了Dev Tools,它是一款可以与ES进行交互式请求的工具,可以借助它进行DSL调试。ES和客户端的通信通过HTTP进行,用户可以使用任意语言完成搜索。此外,ES提供了多种编程语言的API,从客户端连接到搜索DSL构建,再到搜索结果的解析,使用这些API可以更好地完成搜索。

2023-01-16 09:28:58 2795

原创 Elasticsearch(一)--Elasticsearch概述

当前,很多应用都有搜索功能。Lucene作为“老牌”的搜索技术库,它提供的很多功能都能用于处理文本类型的数据。但是使用Lucene结构搜索引擎需要使用者熟悉搜索引擎的很多知识,对使用者的要求非常高,并且Lucene仅仅提供了基础的搜索引擎支持,而对搜索的分布式,容错性和实时性并不支持。ES是建立在Lucene基础之上的分布式准实时搜索引擎,它所提供的诸多功能 中有一大优点,即实时性好。怎样才算实时性好呢?

2023-01-13 11:03:49 1363

原创 SpringSecurity(二十四)--OAuth2:使用JWT和加密签名(下)非对称密钥加密

由于上文对称密钥涉及到的内容比较多,所以这一节的非对称密钥加密拆开成这一节单独讲解。所以大家尽量先阅读完上一章的内容后再浏览这一章内容会更好。本节将实现OAuth2身份验证的一个示例,其中授权服务器和资源服务器会使用一个非对称密钥对来对令牌签名和验证令牌。有时只让授权服务器和资源服务器共享一个密钥的做法是不可行的。通常,如果授权服务器和资源服务器不是由同一组织开发的,就会发生这种情况。在这种情况下,就可以认为授权服务器不“信任:资源服务器,因此我们不希望授权服务器与资源服务器共享密钥。而且,使用对称密钥,

2022-12-30 15:01:58 2211 5

原创 SpringSecurity(二十三)--OAuth2:使用JWT和加密签名(上)对称密钥加密

最近阳了所以一直都在休整,大家一定要注意身体,能不阳就不阳,如果阳康后还是一直咳嗽,最好是能去医院看看,这绝对不是专家口中所说的新冠感冒那么简单,也绝对不是什么80%的无症状,大家不要放松警惕,仅以我个人观点发声,身体才是最重要的。好了,接下来步入正题,终于,我们也迎来了Spring Security的尾声,学习完jwtTokenStore之后,Spring Security的主要内容学习就告一段落,之后我可能还会更新一些这方面的拓展,例如全局方法安全性,但这些都是后话了。

2022-12-29 12:08:19 1685

原创 SpringSecurity(二十二)--OAuth2:实现资源服务器(下)通过redis和缓存实现TokenStore

本章将在前面几章基础上进行讲解,所以大家最好尽量先去看一下前几章的内容再来跟进会好很多。那么本章我们将通过redis和本地缓存Caffeine对JdbcTokenStore进行重写,并且讲解资源服务器配置的新方案,使得我们可以不用在资源服务器又配置一个和授权服务器一样的tokenStore.我们上一章实现了JdbcTokenStore,那么大家都知道,redis的速度是肯定的比普通的数据库是要快的,且JdbcTokenStore实在是有点难拓展,尤其涉及到表结构的更改,所以选择使用Redis对TokenS

2022-12-02 18:17:14 3046 2

原创 SpringSecurity(二十一)--OAuth2:实现资源服务器(中)实现带有JdbcTokenStore的黑板模式

本章将实现授权服务器和资源服务器使用共享数据库的应用程序。这一架构方式被称为。这一架构方式被称为黑板模式。为什么叫黑板模式呢?因为可以将其视为使用黑板管理令牌的授权服务器和资源服务器。。但是,这意味着,而这可能会成为瓶颈。与任何架构一样,实际上它适用于各种情况。例如,如果各服务已经共享了一个数据库,那么对访问令牌也使用这种方法可能也是合理的。出于这个原因,了解如何实现这个方法对你来说可能是很重要的。并且学习该章的前提需要把前面的授权,资源服务器的搭建先给整完,否则会很懵,不知道这块儿代码哪来的这种情况。

2022-12-02 15:27:26 1360

原创 SpringSecurity(二十)---OAuth2:实现资源服务器(上)资源服务器搭建以及直接调用授权服务器模式

本章将讨论如何使用Spring Security实现一个资源服务器,资源服务器是管理用户资源的组件。另外,学习本章有个前提,需要先把前面搭建授权服务器的相关文章先给阅读,否则可能后面出现的授权服务器相关代码不知道个所以然。就OAuth2而言,它代表了我们要保护的后端(端点),就像前几章保护的其他应用程序是一样的。为了允许客户端访问资源,资源服务器需要一个有效的访问令牌。客户端会从授权服务器获得访问令牌,并通过将该令牌添加到HTTP请求头信息来使用该令牌调用资源服务器上的资源。

2022-12-01 17:18:10 3333

原创 Spring Security(十九)--OAuth2:实现授权服务器(下)--环境准备以及骨架代码搭建

本章我们将在上一章代码骨架搭建好的前提下对三种授权类型进行测试以及讲解如何配置授权服务器以颁发刷新令牌,所以本章是一个比较轻松的章节,但是唯一的要求就是需要小伙伴们对上一章内容要完成代码的搭建,否则这章学习也不知道个所以然。

2022-11-28 18:12:31 963

原创 Spring Security(十八)--OAuth2:实现授权服务器(上)--环境准备以及骨架代码搭建

本节大家如果一直从一开始看过来的话,就会巧妙发现我们将之前的实践代码全部连接起来,本节将会使用到之前的短信/验证码登录相关的逻辑代码,如果大家没有看的感兴趣可以回到https://editor.csdn.net/md/?articleId=127617691先将这部分逻辑代码看一看,尝试自己完成。然后本节仍然以实践为主,大家要完全吸收前几节关于OAuth2内容再来学习本节会更好点,然后当时再讲解搭建单点应用程序时,我们讲到过ClientRegistrationRepository这个类,讲到可以通过数据库去

2022-11-28 15:35:45 1323 3

原创 SpringSecurity(十七)---OAuth2的运行机制(下)-实现一个简单的单点登录应用程序

与UserDetailsService对象通过其用户名查找UserDetails相同,

2022-11-24 15:09:37 1150 2

空空如也

空空如也

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

TA关注的人

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