<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_42400763的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/qq_42400763</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; qq_42400763]]></copyright><item><title><![CDATA[怎么在springboot实现简单的登录操作关于拦截器中cookie,token,redis的使用,以及使用全局变量ThreadLocal]]></title><link>https://blog.csdn.net/qq_42400763/article/details/112060951</link><guid>https://blog.csdn.net/qq_42400763/article/details/112060951</guid><author>qq_42400763</author><pubDate>Fri, 01 Jan 2021 17:14:34 +0800</pubDate><description><![CDATA[1.什么情况下需要登录操作?
  首先抛出一个问题,什么情况下才需要登录操作,其实登录操作在很多的管理系统,后台系统中都会涉及到的一个看似简单,但是又特别重要的操作
2.登录是简单的验证数据库账号密码,这么简单吗?
  在之前我总觉得登录应该是一个很简单的操作,验证数据库?然后通过.但是这样做的一个简单的判断,能完成登录操作,但是?我能不能绕过你的登录呢?答案是可以的.我最开始可以不调用你的登录接口,我直接调用你的后台其他接口,就能实现绕过验证,进行操作你的管理系统.这样你的登录操作对我来说,形同虚设.
3]]></description><category></category></item><item><title><![CDATA[关于xmind2020超级详细的安装教程]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109847778</link><guid>https://blog.csdn.net/qq_42400763/article/details/109847778</guid><author>qq_42400763</author><pubDate>Sun, 29 Nov 2020 20:19:34 +0800</pubDate><description><![CDATA[鉴于网上很多关于xmind的安装方式,版本等等,都不规范,所以我自己写一篇关于xmind安装破解的文章
第一步:
首先我得拿到xmind的安装包以及破解包,下面附上链接:
链接:https://pan.baidu.com/s/1AnJMg33KIbCFgCWau0S0NA
提取码:j7sb
拿到这个的小伙伴后打开自己的百度网盘保存文件,进行下载.
第二步:下载完毕之后,我们要确认一下是不是下载到了这个文件:

接着我们双击XMind-2020-for-Windows-64bit-10.1.0-2020032]]></description><category></category></item><item><title><![CDATA[记录一篇关于条件查询语句的用法:1.通过QueryWrapper进行条件构造2.通过Example进行条件构造]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109572310</link><guid>https://blog.csdn.net/qq_42400763/article/details/109572310</guid><author>qq_42400763</author><pubDate>Mon, 09 Nov 2020 14:31:06 +0800</pubDate><description><![CDATA[一. 前言
  在很多的业务场景中,除了简单的增删查改语句,我们还会有用到一些特殊的查询,比如说条件查询,模糊查询等等,在java中构建条件语句的封装类也有很多,其底层就是帮我们把sql语句给封装好,方便我们进行调用.这里我浅显的记录两种构造条件语句的类,

第一种:QueryWrapper
举个例子:查询课程信息,带分页显示
它的使用方式如下:

 //创建一个page对象
        Page&lt;EduCourse&gt; pageCourse = new Page&lt;&gt;(curren]]></description><category></category></item><item><title><![CDATA[23种设计模式(第三部分): 1.适配器模式(包含简介相关代码示例) 2. 桥接模式(相关代码,思想学习)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109235969</link><guid>https://blog.csdn.net/qq_42400763/article/details/109235969</guid><author>qq_42400763</author><pubDate>Fri, 23 Oct 2020 10:47:58 +0800</pubDate><description><![CDATA[接下来我们学习结构型设计模式
一. 结构型模式


作用
从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题


分类
适配器模式
代理模式
桥接模式
装饰模式
组合模式
外观模式
享元模式


二. 适配器模式

将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原来由于接口不兼容而不能一起工作的那些类可以在一起工作
角色分析


目标接口: 客户所期待的接口,目标可以是具体的或者抽象的类,也可以是接口
需要适配的类: 需要适配的类,或适配者类
适配器: 通过包装一个需要]]></description><category></category></item><item><title><![CDATA[23种设计模式(第二部分): 1.建造者模式(包含简介相关代码示例) 2. 原型模式(相关代码,思想学习)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109221169</link><guid>https://blog.csdn.net/qq_42400763/article/details/109221169</guid><author>qq_42400763</author><pubDate>Thu, 22 Oct 2020 16:02:07 +0800</pubDate><description><![CDATA[一. 建造者模式

建造者模式也属于创建型模式,他提供了一种创建对象的最佳方式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象
用户只要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)
例子


工厂(建造者模式): 负责制作汽车(组装过程和细节在工厂里面)
汽车购买者(用户): 你只需要说出你需要的型号(对象的类型和内容),然后直接购买就可以使用了,(]]></description><category></category></item><item><title><![CDATA[23种设计模式(第一部分): 1.工厂模式(包含简单工厂模式,方法工厂模式简介相关代码示例) 2. 抽象工厂模式(相关代码,思想学习)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109216963</link><guid>https://blog.csdn.net/qq_42400763/article/details/109216963</guid><author>qq_42400763</author><pubDate>Thu, 22 Oct 2020 14:14:41 +0800</pubDate><description><![CDATA[一. 工厂模式

作用


实现了创建者和调用者分离
详细分类
简单工厂模式
工厂方法模式
抽象工厂模式



OOP七大原则
开闭原则: 对扩展开放,对修改关闭
依赖倒置原则: 面向接口编程,不要面向实现编程
迪米特法则: 只与你的直接朋友交谈,不跟陌生人说话


核心本质


实例化对象不使用new,用工厂方法代替
将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦


三种模式


简单工厂模式
用来生产同一等级结构中的任意产品(对于增加新的产品,需要求该已有代码)
工厂方法模式
用]]></description><category></category></item><item><title><![CDATA[什么是java中的设计模式,设计模式有多少种,OOP七大原则]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109215164</link><guid>https://blog.csdn.net/qq_42400763/article/details/109215164</guid><author>qq_42400763</author><pubDate>Thu, 22 Oct 2020 09:59:14 +0800</pubDate><description><![CDATA[什么是设计模式?


设计模式是前辈对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性,可维护性,可读性,稳健性以及安全性的解决方案
1995年GOF(Gang of Four 四人组/四人帮) 合作出版了&lt;设计模式:可复用面向对象软件的基础&gt;一书,共收录了23中设计模式,从此树立了软件设计模式领域的里程碑,人称GoF设计模式




学习设计模式的意义


设计模式的本质是面向对象设计原则的实际运用,是对类的封装性,继承性,多态性,以及类的关联关系.]]></description><category></category></item><item><title><![CDATA[数据结构与算法(35):骑士周游问题(马踏棋盘算法相关实现代码)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109204563</link><guid>https://blog.csdn.net/qq_42400763/article/details/109204563</guid><author>qq_42400763</author><pubDate>Wed, 21 Oct 2020 18:06:42 +0800</pubDate><description><![CDATA[马踏棋盘算法介绍和游戏演示


马踏棋盘算法也被称为骑士周游问题
将马随机放在国际象棋的8×8棋盘Board[0～7][0～7]的某个方格中，马按走棋规则(马走日字)进行移动。要求每个方格只进入一次，走遍棋盘上全部64个方格


骑士周游问题的解决思路


创建棋盘chessBoard,是一个二维数组


将当前位置设置为已经访问,然后根据当前位置,计算马儿还能走哪些位置,并放入到一个集合中(arrayList),最多有8个位置,每走一步,就是用step+1


遍历arrayList中存放的所有位置看看.]]></description><category></category></item><item><title><![CDATA[数据结构与算法(34): 弗洛伊德算法(介绍,最短路径相关实例)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109203061</link><guid>https://blog.csdn.net/qq_42400763/article/details/109203061</guid><author>qq_42400763</author><pubDate>Wed, 21 Oct 2020 16:36:35 +0800</pubDate><description><![CDATA[弗洛伊德(Floyd)算法介绍


和Dijkstra算法一样，弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名
弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径
迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。
弗洛伊德算法 VS 迪杰斯特拉算法：迪杰斯特拉算法通过选定的被访问顶点，求出从出发访问顶点到其他顶点的最短路径；弗洛伊德算法中每一个顶点都是出发访问点，所.]]></description><category></category></item><item><title><![CDATA[数据结构与算法(33):迪杰斯特拉算法(迪杰斯特拉介绍及其最短路径问题相关实例代码)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109184412</link><guid>https://blog.csdn.net/qq_42400763/article/details/109184412</guid><author>qq_42400763</author><pubDate>Wed, 21 Oct 2020 15:46:09 +0800</pubDate><description><![CDATA[应用场景-最短路径问题

看一个应用场景和问题：

战争时期，胜利乡有7个村庄(A, B, C, D, E, F, G) ，现在有六个邮差，从G点出发，需要分别把邮件分别送到 A, B, C , D, E, F 六个村庄
各个村庄的距离用边线表示(权) ，比如 A – B 距离 5公里
问：如何计算出G村庄到 其它各个村庄的最短距离?
如果从其它点出发到各个点的最短距离又是多少?

...]]></description><category></category></item><item><title><![CDATA[数据结构与算法(32):克鲁斯卡尔算法(介绍,最小生成树相关实例及其代码实现)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109181863</link><guid>https://blog.csdn.net/qq_42400763/article/details/109181863</guid><author>qq_42400763</author><pubDate>Tue, 20 Oct 2020 16:47:08 +0800</pubDate><description><![CDATA[看一个应用场景和问题：


某城市新增7个站点(A, B, C, D, E, F, G) ，现在需要修路把7个站点连通
各个站点的距离用边线表示(权) ，比如 A – B 距离 12公里
问：如何修路保证各个站点都能连通，并且总的修建公路总里程最短?

克鲁斯卡尔算法介绍


克鲁斯卡尔(Kruskal)算法，是用来求加权连通图的最小生成树的算法。
基本思想：按照权值从小到大的顺序选择n-1条边，并保证这n-1条边不构成回路
具体做法：首先构造一个只含n个顶点的森林，然后依权值从小到大从连通网中选择边加入.]]></description><category></category></item><item><title><![CDATA[数据结构与算法(31):普里姆算法(介绍,相关应用场景的实例修路问题代码实现)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109177329</link><guid>https://blog.csdn.net/qq_42400763/article/details/109177329</guid><author>qq_42400763</author><pubDate>Tue, 20 Oct 2020 15:20:15 +0800</pubDate><description><![CDATA[应用场景-修路问题

看一个应用场景和问题：
(1)

有胜利乡有7个村庄(A, B, C, D, E, F, G) ，现在需要修路把7个村庄连通
各个村庄的距离用边线表示(权) ，比如 A – B 距离 5公里
问：如何修路保证各个村庄都能连通，并且总的修建公路总里程最短?

思路分析: 将10条边，连接即可，但是总的里程数不是最小.
正确的思路，就是尽可能的选择少的路线，并且每条路线最小，保证总里程数最少.
进而引出一个概念

最小生成树

修路问题本质就是就是最小生成树问题， 先介绍一下最小生成树(.]]></description><category></category></item><item><title><![CDATA[数据结构与算法(30): 贪心算法简介(相关实例集合覆盖问题及其代码实现)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109164543</link><guid>https://blog.csdn.net/qq_42400763/article/details/109164543</guid><author>qq_42400763</author><pubDate>Tue, 20 Oct 2020 11:07:13 +0800</pubDate><description><![CDATA[贪心算法介绍



贪婪算法(贪心算法)是指在对问题进行求解时，在每一步选择中都采取最好或者最优(即最有利)的选择，从而希望能够导致结果是最好或者最优的算法


贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解)，但是都是相对近似(接近)最优解的结果


抛出实际案例



应用场景-集合覆盖问题

假设存在下面需要付费的广播台，以及广播台信号可以覆盖的地区。 如何选择最少的广播台，让所有的地区都可以接收到信号




广播台
覆盖地区




k1
“北京”, “上海”, “天津”






.]]></description><category></category></item><item><title><![CDATA[数据结构与算法(29):KMP算法(核心思想分析)及其相关应用实例(与暴力字符串匹配代码实现)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109161938</link><guid>https://blog.csdn.net/qq_42400763/article/details/109161938</guid><author>qq_42400763</author><pubDate>Mon, 19 Oct 2020 17:01:51 +0800</pubDate><description><![CDATA[应用场景-字符串匹配问题

字符串匹配问题：：
有一个字符串 str1= ““陈骁聪 陈骁聪你陈骁 陈骁聪你陈骁聪你陈骁你好””，和一个子串 str2=“陈骁聪你陈骁你”
现在要判断 str1 是否含有 str2, 如果存在，就返回第一次出现的位置, 如果没有，则返回-1

KMP算法
暴力匹配算法



如果用暴力匹配的思路，并假设现在str1匹配到 i 位置，子串str2匹配到 j 位置，则有:


如果当前字符匹配成功（即str1[i] == str2[j]），则i++，j++，继续匹配下一个字符
.]]></description><category></category></item><item><title><![CDATA[数据结构与算法(28):分治算法,动态规划算法(0-1背包问题代码实现,思路分析)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109114964</link><guid>https://blog.csdn.net/qq_42400763/article/details/109114964</guid><author>qq_42400763</author><pubDate>Mon, 19 Oct 2020 15:33:35 +0800</pubDate><description><![CDATA[分治算法介绍

分治法是一种很重要的算法。字面上的解释是“分而治之”，就是把一个复杂的问题分成两个或更多的相同或相似的子问题，再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解，原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础，如排序算法(快速排序，归并排序)，傅立叶变换(快速傅立叶变换)……
分治算法可以求解的一些经典问题

二分搜索
大整数乘法
棋盘覆盖
合并排序
快速排序
线性时间选择
最接近点对问题
循环赛日程表
汉诺塔


分治算法的基本步骤

分治法在每层的递归上都有三个.]]></description><category></category></item><item><title><![CDATA[数据结构与算法(27):图的基本介绍(图的深度优先遍历,图的广度优先遍历)以及相关的案例代码]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109099787</link><guid>https://blog.csdn.net/qq_42400763/article/details/109099787</guid><author>qq_42400763</author><pubDate>Thu, 15 Oct 2020 17:35:34 +0800</pubDate><description><![CDATA[一. 图的基本介绍
为什么要有图?
回顾一下线性表和树

线性表局限于一个直接前驱和一个直接后继的关系
树也只能有一个直接前驱也就是父节点
当我们需要表示多对多的关系时， 这里我们就用到了图


图的举例说明

图是一种数据结构，其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图：

无向图


2. 有向图
3. 带权图


图的表示方式

图的表示方式有两种：二维数组表示（邻接矩阵）；链表表示（邻接表）。

邻接矩阵
邻接矩阵是表示图形中顶点之间相邻关系的矩阵，对于]]></description><category></category></item><item><title><![CDATA[数据结构与算法(26):多路查找路(二叉树 和B树,B+ ,B* 问题分析)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109077056</link><guid>https://blog.csdn.net/qq_42400763/article/details/109077056</guid><author>qq_42400763</author><pubDate>Thu, 15 Oct 2020 16:15:34 +0800</pubDate><description><![CDATA[一 . 二叉树和B树的问题分析
二叉树的操作效率较高，但是也存在问题


二叉树需要加载到内存的，如果二叉树的节点少，没有什么问题，但是如果二叉树的节点很多(比如1亿)， 就存在如下问题:
问题1：在构建二叉树时，需要多次进行i/o操作(海量数据存在数据库或文件中)，节点海量，构建二叉树时，速度有影响
问题2：节点海量，也会造成二叉树的高度很大，会降低操作速度.

引出了一个多叉树的概念

在二叉树中，每个节点有数据项，最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点，就是多叉树（mult]]></description><category></category></item><item><title><![CDATA[数据结构与算法(25):平衡二叉树(AVL树 左旋转,右旋转 双旋转)介绍及其相关案例]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109072324</link><guid>https://blog.csdn.net/qq_42400763/article/details/109072324</guid><author>qq_42400763</author><pubDate>Wed, 14 Oct 2020 16:13:25 +0800</pubDate><description><![CDATA[一个数列{1,2,3,4,5,6}，要求创建一颗二叉排序树(BST), 并分析问题所在

BST 存在的问题分析:

左子树全部为空，从形式上看，更像一个单链表.
插入速度没有影响
查询速度明显降低(因为需要依次比较), 不能发挥BST的优势，因为每次还需要比较左子树，其查询速度比单链表还慢
解决方案-平衡二叉树(AVL)


平衡二叉树基本介绍


平衡二叉树也叫平衡二叉搜索树（Self-balancing binary search tree）又被称为AVL树， 可以保证查询效率较高。
具有以下特点]]></description><category></category></item><item><title><![CDATA[数据结构与算法(24):二叉排序树(增删查改)及其相关案例]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109065750</link><guid>https://blog.csdn.net/qq_42400763/article/details/109065750</guid><author>qq_42400763</author><pubDate>Wed, 14 Oct 2020 11:29:47 +0800</pubDate><description><![CDATA[先看一个小例子
给你一个数列 (7, 3, 10, 12, 5, 1, 9)，要求能够高效的完成对数据的查询和添加。
你会怎么做呢?
解决方案分析

使用数组



数组未排序， 优点：直接在数组尾添加，速度快。 缺点：查找速度慢.


数组排序，优点：可以使用二分查找，查找速度快，缺点：为了保证数组有序，在添加新数据时，找到插入位置后，后面的数据需整体移动，速度慢。



使用链式存储-链表


不管链表是否有序，查找速度都慢，添加数据速度比数组快，不需要数据整体移动。


使用二叉排序树

二叉排序树介]]></description><category></category></item><item><title><![CDATA[数据结构与算法(23):树结构实际应用之赫夫曼树(赫夫曼树,数据压缩和解压代码演示)]]></title><link>https://blog.csdn.net/qq_42400763/article/details/109023943</link><guid>https://blog.csdn.net/qq_42400763/article/details/109023943</guid><author>qq_42400763</author><pubDate>Tue, 13 Oct 2020 17:15:17 +0800</pubDate><description><![CDATA[一 . 赫夫曼树的基本介绍


给定n个权值作为n个叶子节点,构造一颗二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为赫夫曼树


赫夫曼树是带权路径长度最短的树,权值较大的结点离根比较近


赫夫曼树几个重要概念和举例说明


路径和路径长度：在一棵树中，从一个结点往下可以达到的孩子或孙子结点之间的通路，称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1，则从根结点到第L层结点的路径长度为L-1


结点的权及带权路径长度：若将树中结点赋给一个有着某种含义的数值，则这个]]></description><category></category></item></channel></rss>