自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 工厂模式

简单工厂模式属于创建型模式,是工厂模式的一种,简单工厂模式是由一个工厂对象决定创建哪一种产品类的实例简单工厂模式定义了一个创建对象的类,有这个类来封装实例化对象的行为在软件开发中,如果会用到大量的创建某种、某类或者某批对象时,就会用到工厂模式基于简单工厂模式,可以发现是根据参数的不同来生成不同的对象实例,在扩展的时候需要修改工厂的代码,工厂方法模式旨在将不同实体的实例由不同的工厂来创建,在扩展的时候,只需要新增新的工厂和实体类,不需要修改代码https。...

2022-07-28 15:28:40 99

原创 单例模式

所谓单例模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法;例如Hibernate的SessionFactory,它充当数据源的代理,并负责创建Session对象,SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory对象单例模式保证了系统内存中该类只存在一个对象,节省了系统资源,对于一些要频繁拆功能键销毁的对象,使用单例模式可以提高系统性能https。...

2022-07-25 16:07:26 90 1

原创 设计模式七大原则

降低代码的复杂度,一个类只负责一项职责提高类的可读性,可维护性降低变更引起的风险通常情况下,应当严格遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则,如果类中方法数量足够少,可以在方法级别保持单一职责原则,而非类级别客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上;比如某个类没有用到某个接口中的方法,应该依赖作用范围最小的不包含该方法的接口高层模块不应该依赖底层模块,二者都应该依赖其抽象抽象不应该依赖细节,细节应该依赖抽象制定规范,;。...

2022-07-22 20:52:47 141

原创 UML模型和类的六大关系

组合关系也是整体和部分的关系,但是整体和部分不可以分开,因为整体是由部分组成的,不可或缺,(类中某个属性,有非空默认值,或者该值在构造器中赋值,表示组合关系)表示0个或多个,“0,1”表示0个或者一个,“n,m”表示n到m个都可以,m…,所以它具有方向性和多重性(类中某个属性,可以为null,也可以通过set方法来设置值,则表示聚合),那么他们之间就存在依赖关系,如果不存在用到的类,无法通过编译。实现关系实际上就是A实现了B中抽象的方法,它是。聚合关系表示的是整体和部分的关系,泛化关系实际上就是继承关系,.

2022-07-19 20:23:25 122

原创 数据结构与算法(二十一)——贪心算法

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

2022-07-03 14:51:29 168

原创 数据结构与算法(二十)——KMP算法

部分匹配值就是前缀和后缀的最长共有元素长度前缀:除了整个字符串以外,从头开始依次增加一个字符,如ABC的前缀表:{A,AB}后缀:除了整个字符串意外,从尾开始依次增加一个字符,如ABC的后缀表:{C,BC}...

2022-06-30 17:37:21 73

原创 数据结构与算法(十九)——动态规划

动态规划算法动态规划(Dynamic Programing)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想也是将待求解的问题分成若干个子问题,然后从这些子问题的解得到源问题的解与分治法不同的是,适合于动态规划算法求解的问题,经过分解得到的子问题往往不是互相独立的(即下一个阶段的求解是建立在上一个阶段上的)动态规划可以通过填表的方式来逐步推进,从而得到最优解背包问题有一个背包,容量为4磅,现有如下物品物品重量价

2022-05-26 22:47:53 176

原创 数据结构与算法(十八)——分治算法

概述分治法字面上解释是"分而治之",就是把一个复杂问题分成两个或者更多个相同或相似的子问题,再把子问题分成更细、更小的子问题;直到最后子问题可以简单的来求解,然后将子问题的解合并,得到原问题的解分治算法可以求解一些经典问题:二分搜索、大整数乘法、棋盘覆盖、归并排序、快速排序、线性时间选择、最接近点对问题、循环赛日程表、汉诺塔等...

2022-05-26 16:45:43 162

原创 数据结构与算法(十七)——图

概述常用概念顶点:图中的每一个结点称为一个顶点边:图中两个相邻顶点的路径称为边路径:两个顶点直接的边的集合无向图:顶点之间的路径没有方向有向图:顶点之间的路径有方向带权图:每个边带有权值表示方式图的表示方式有两种:二维数组(邻接矩阵);链表(邻接表)邻接矩阵表示图中顶点之间相邻关系的矩阵,二维数组的行下标表示边的起点,二维数组的列下标表示边的终点,行下标和列下标都表示顶点,即矩阵的行列数表示顶点个数,arr[row][col]的值表示是否两个之间存在边邻接表邻接矩阵需要为每个

2022-05-03 16:22:56 265

原创 数据结构与算法(十六)——二叉排序树、平衡二叉树、多叉树

二叉排序树(BST)二叉排序树:BST(Binary Sort(Search) Tree),对于BST中任何一个非叶子结点,要求左子节点的值比当前结点的值小,右子节点的值比当前结点的值大。对于相同的值,可以将该结点放在左子节点或者右子节点代码实现添加结点:根据结点的值,将值小的结点放在左边,值大的结点放在右边遍历结点:与一般树的前中后序遍历无异删除结点:删除叶子结点:找到需要删除的结点的父结点,然后将叶子结点置空删除只有一个子结点的结点:找到需要删除的结点的父结点,将父结点的子结点位置

2022-05-01 13:54:20 416

原创 数据结构与算法(十五)——哈夫曼树

哈夫曼树概述给定n个权值作为n个叶子节点构造一棵二叉树,若该树的带权路径长度(wpl)最小,这样的二叉树为最优二叉树,也称赫夫曼树、哈夫曼树、霍夫曼树赫夫曼树是带权路径最短的树,其中权值大的节点离根较近重要概念路径和路径长度:在一棵树中,从一个节点往下可以达到孩子或孙子节点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根节点的层数为1,则从根节点到第L层的路径长度为L-1结点的权与带权路径长度:若将树种的结点赋予一个某种含义的数值,这个数值就成为结点的权。结点的带权路径长度为:

2022-04-27 12:53:39 935

原创 数据结构与算法(十四)——堆排序

基本介绍堆排序是利用堆这种数据结构设计的排序算法,是一种选择排序,最坏、平均、最好时间复杂度都是O(nlogn),是不稳定的排序堆是指具有以下性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆;每个节点的值都小于或等于左右孩子节点的值,称为小顶堆大顶堆满足arr[i]>=arr[2i+1]&&arr[i]>=arr[2i+2]小顶堆满足arr[i]<=arr[2i+1]&&arr[i]<=arr[2i+2]基

2022-04-25 11:47:12 175

原创 数据结构与算法(十三)——二叉树

二叉树的遍历前(根)序遍历:先输出父节点,再遍历左子树和右子树中(根)序遍历:先输出左子树,再输出父节点,在输出右子树后(根)序遍历:先输出左子树,在输出右子树,最后输出父结点三种遍历方式的区别在于根节点的输出时机代码实现/*** * 二叉树 * @author laowa * */class BinaryTree{ /** * 根节点 */ Node root; public BinaryTree(Node root) { this.root = root;

2022-04-22 20:38:41 539

原创 数据结构与算法(十二)——树的基本介绍

数组,链表,树三种结构存储方式对比数组优点:通过下标方式访问元素,速度快,对于有序数组,还可以使用二分查找提高检索速度如果要检索具体的某个值,或者插入值(按一定顺序),数组会整体移动,效率较低;并且如果数组已满需要进行扩容,消耗额外的时间ArrayList数组集合底层操作机制ArrayList中维护了一个Object类型的数组elementData当创建对象时,如果使用的是无参构造器,则初始elementData容量为0(jdk7是10)如果使用的是指定容量capacity的构造器,则

2022-04-19 21:03:36 258

原创 数据结构与算法(十一)——哈希表

概述哈希表,也叫散列表,是**根据关键码值而直接进行访问的数据结构。**也就是说,它通过把关键码值映射到表中的一个位置来访问记录,以此来加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫做散列表应用场景代码实现(数组+链表)哈希表的实现可以使用数组+链表或者使用数组+二叉树两种方式,下面采取第一种/*** * 哈希表 * @author laowa * */class ArrayLinkedListHashTable { /** * 存放链表的数组 */ pr

2022-04-19 16:25:48 122

原创 数据结构与算法(十)——查找算法

线性查找(顺序查找)顺序查找就是最直观的从头开始遍历序列,逐一比对,找到目标元素则返回索引代码实现/*** * 线性查找 * @author laowa * */public class LinearSearch { public static void main(String[] args) { int arr[] = {0,1,2,3,4,5,6,7,8,9}; int num=10; int index = linearSearch(arr,num); if(ind

2022-04-17 16:57:39 287

原创 数据结构与算法(九)——排序算法

冒泡排序基本思想通过对待排序的序列从前往后,依次比较相邻的两个元素的值,如果发现逆序则交换,使的最大(降序则最小)的元素逐渐从前移到后部,像水底的气泡逐渐向上冒;每一轮排序结束,就保证了当前无序的序列中的最大的元素已经到了序列尾部代码实现/** * 冒泡排序 * @author laowa * */public class BubbleSort { public static void main(String args[]) { int arr[]= {3,9,-1,10,-2};

2022-04-15 22:17:30 1092

原创 数据结构与算法(八)——时间复杂度

度量程序效率的方法事后统计:在程序运行之后,根据程序执行的时间对程序的性能进行评测,这种方法需要实际的运行该程序,并且时间的统计量依赖于计算机的硬件、软件等环境因素,使用这种方法需要在同一台计算机的相同状态下运行,才能比较哪个算法速度更快事前估算:通过分析某个算法的时间复杂度来判断按个算法时间频度一个算法花费的时间和算法中语句的执行次数成正比,哪个算法语句执行次数多,花费的时间就多。算法中的语句执行次数成为语句频度和时间频度T(n)随着n值的变大,常数项对函数的影响,即语句执行次数的影响越来

2022-04-15 15:43:16 1187

原创 数据结构与算法(七)——递归,迷宫问题,八皇后问题

递归概念简单的说,递归就是方法自己调用自己,每次调用时经过方法的处理,传入不同的变量,递归有助于分解并解决复杂的问题,使代码编得简洁,递归的心脏在于递归的跳出条件递归调用机制当程序执行到一个方法时,就会开辟一个新的独立空间(栈空间)方法的局部变量时独立的,不会相互影响递归一定要有一个跳出条件,每次递归处理都需要向这个条件逼近,如果跳出条件出错了,由于不断的调用,就会出现StackOverflow(栈溢出异常)当一个方法执行完毕,或者遇到return,就会返回,谁调用就将结果返回给谁应用

2022-04-14 20:48:51 324

原创 数据结构与算法(六)——逆波兰计算器

前缀、中缀、后缀表达式(逆波兰表达式)前缀表达式(波兰表达式)前缀表达式的运算符位于操作数之前,例如:(1+2)x(5+6)对应的前缀表达式为:+ x + 1 2 5 6前缀表达式的计算机求值:从右至左扫描表达式,遇到数字时,将数字入数栈,遇到运算符时,弹出数栈的两个数进行计算(因为是从右至左扫描,所以后入栈的数字在运算符前面,即栈顶的数字在前,次顶的数字灾在后),然后将结果入数栈,重复进行直到遍历完表达式,最后一次计算的结果就是表达式的值中缀表达式中缀表达式就是常见的运算表达式,如(1+2

2022-04-13 20:14:06 196

原创 数据结构与算法(五)——栈

概述栈是一个先入后出的有序列表,和队列正好相反栈是限制线性表中的元素的插入和删除都只能在线性表的同一段进行的一种特殊线性表。允许插入和删除的一端称作栈顶,另一端作为固定的一段,称为栈底根据栈的定义可知,最先放入栈中的元素在栈底,最后入栈的元素在栈顶,而出栈是正好相反,最后放入的元素最先出栈栈的应用子程序的调用:在调用子程序钱,会先将下一个指令的地址存到堆栈中,知道子程序执行完后再将地址取出,从而回到原来的程序中处理递归调用:和子程序调用类似,只是除了下一个指令的地址外,也将参数、局域变量等

2022-04-12 19:54:38 445

原创 数据结构与算法(四)——双向链表,环形链表(约瑟夫环问题)

双向链表构成双向链表的每一个节点都由三部分构成:前置节点指针pre数据data后置节点指针next单向链表和双向链表对比单向链表查找的方向只能是一个方向,而双向链表可以向前和向后查找单向链表不能进行自我删除,需要依靠辅助节点。而双向链表,可以进行自我删除(正是因为单链表不能自我删除,所以删除节点时要找到待删除节点的前一个节点)双向链表逻辑结构示意代码实现/*** * 双向链表 * * @author laowa * */class DoubleLinkedLis

2022-04-11 19:23:25 744

原创 数据结构与算法(三)——单链表

概述链表是以节点的方式来存储每个节点包含data域(存储有效数据),next域(指向下一个节点)链表的各个节点不一定是连续存储的链表分带头节点的链表和没有头节点的链表,根据实际的需求确定逻辑结构代码实现/*** * 单链表 * * @author laowa * */class SingleLinkedList { /** * 链表的头节点,不存放任何数据,作用就是作为链表的头 */ private Node head = new Node(0, "", "")

2022-04-10 18:01:16 419

原创 数据结构与算法(二)——队列

概述队列是一个有序列表,可以用数组和链表来实现队列遵循**先进先出**的原则,根据入队的先后顺序依次出队数组方式实现队列构成maxSize:队列的最大容量front:队列头部rear:队列尾部front指向第一个元素的前一个位置rear指向最后一个元素的后一个位置代码实现class ArrayQueue { /** * 队列的最大容量 */ private int maxSize; /** * 队列头,指向第一个数据的前一个位置 */ private

2022-04-09 18:14:17 481

原创 数据结构与算法(一)——线性结构与非线性结构,稀疏数组

线性结构与非线性结构线性结构是最常用的数据结构,特点是数据元素之间存在一对一的线性关系线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构,顺序存储的线性表成为顺序表,顺序表中的存储元素是连续的链式存储的线性表成为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息线性结构常见的有:数组、队列、链表、栈非线性结构包括二维数组、多维数组、广义表、树、图稀疏数组问题导入在一个五子棋游戏的程序中,需要实现存盘退出和续上盘的功能,可以将棋盘上的黑子、白子、空格

2022-04-07 16:52:47 983

原创 关于实现token无感刷新的解决方案

问题引入在开发中为了安全或满足分布式场景,通常会舍弃原有的session认证手段,而采用jwt(json web token);但是使用token难免遇到token有效期的问题,如果token长期有效,服务端不断发布新的token,导致有效的token越来越多,这必然是存在安全问题的。而token不想session一样,在用户操作时会进行刷新,为了用户体验,这个刷新就需要自己实现。方案一、使用旧token获取新token如果采取单个token的方式要实现token的自动刷新,就必须使用定时器,每隔一

2021-11-27 15:48:20 15547 15

原创 Java总复习(四)——MyBatis、Thymeleaf、Maven

MyBatis的简单实现Maper的构建过程SqlSession基本构建的代码为:String resource = "mybatis-config.xml";//设置mybatis配置文件的资源路径(类路径下)InputStream inputStream = null;try { inputStream = Resources.getResourceAsStream(resource);//获取配置文件的输入流} catch (IOException e) { e.printStackT

2021-10-14 16:49:26 280

原创 Java总复习(三)——Web前端与JavaWeb

CSS选择器id,class,标签,属性,子(空格) 兄弟(+) 后代(>)div的水平和垂直居中div{ margin:0 auto; width:200px; height:200px; background-color: pink;}JavaScript

2021-10-10 21:56:46 140

原创 Java总复习(二)——MySQL

SQL语句连接查询外连接(左外连接、右外连接):解决外键为空的数据查询,当数据表之间没有物理建立主外键时,出现外键为空的情况直接联查查不到,使用外连接就可以解决这一问题(如左外连接会先将左表所有列查出,再从右表中找到符合条件的列,对于没有符合条件的坐标列对应右表字段为NULL)子查询:以一张表查询结果作为第二张表的查询条件的查询数量查询问题select count(*) from tableselect count(1) from tableselect count(row) from

2021-10-07 13:56:35 93

原创 Java总复习(一)——JavaSE基础

Java概述体系结构JRE:Java核心类库JVM:Java虚拟机JDK:包含JRE和JVM,以及其他Java命令与工具(如java、javadoc、javac等)Java最大特点跨平台:Java文件编译后是class文件,class文件符合Java虚拟机规范,每个平台都有一套JVM,class依赖与JVM而不是操作系统Java数据类型8种基本数据类型:byte、short、int、long、float、double、char、boolean引用数据类型:数组、类对象、枚举、注解

2021-10-03 15:42:18 191

原创 Spring Security(Springboot-v2.5.5)

概述SpringSecurity是基于Spring的安全框架,作用和shiro一样,用于认证和授权SpringSecurity和shiro对比SpringSecurity和Spring无缝结合全面的权限控制专门为Web开发而设计(旧版本不能脱离Web环境,新版本对整个框架进行了分层抽取,分成了核心模块和Web模块,单独引入核心模块就可以脱离Web环境)重量级shiro轻量级,shiro主张的理念是把复杂的事情变简单。针对性能又更高要求的互联网应用又更好表现通用性(不局限于W

2021-09-29 15:28:15 679

原创 分布式电影票务系统后端部分功能开发

服务与接口分析用户服务注册登录密码修改头像修改电影服务影院服务订单服务影院服务搜索服务后台管理服务文件服务评论服务秒杀服务基于SpringCloudAlibaba整合其他组件数据库采用MySQL,秒杀系统数据库采取Oracle数据访问层使用Mybatis+Mybatisplus服务调用方面使用OpenFeign声明式调用(同步),使用rabbiyMQ进行异步调用注册中心与配置中心使用nacos网关使用gateway问题总结...

2021-09-25 17:48:55 583 1

原创 redisson实现分布式锁(集群环境)

问题引入面对高并发时,mysql事务无法保证原子性,可以使用synchronized关键字,在调用方法时加锁;但是这个方式在锁住之后其他线程会阻塞,这会又很大的性能问题,于是考虑到分布式锁来解决这一问题分布式锁控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性(synchronized关键字只在当前Java系统中作用);常用的分布式锁解决方案有三种:基于数据库层面实现分布式锁(悲观锁,乐观锁)基于缓存层面(如redis)实现分布式锁基于zookeeper实现分布式锁redis分

2021-09-20 21:40:18 1588

原创 任务调度Quartz、api文档管理Swagger、Websocket协议

QuartZ概述

2021-09-14 17:01:24 726

原创 全文检索与Elasticsearch(二)——DSL查询进阶,分词器,springboot整合ES,DSL分页,MySQL到ES数据同步,集群

DSL查询进阶match查询match类似模糊匹配,match知道分词器的存在,会根据查询条件进行分词操作,然后再查询,GET 索引名/_search{ "query":{ "match":{ "FIELD":"text" } }}match_all查询所有文档GET 索引名/_search{ "query":{ "match_all":{} }}等同于GET 索引名/_searchmulti_match可以指定多个字段进行查询,同一查询文本在多个

2021-09-11 21:28:20 970

原创 全文检索与ElasticSearch(一)——ES概述,正向索引与倒排索引,B+树,简单命令,Mapping

ElasticSearch概述ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful接口。它可以近乎实时的存储、检索数据;本身扩展性非常好,一个ES节点就可以认为是一个集群(默认支持集群),它可以扩展到上百台服务器。ES的生产环境至少在8GB以上Lucene和ES的关系Lucene只是一个库,必须使用Java作为开发语言将他集成到应用中,使用起来十分复杂ElasticSearch也是使用Java开发并使用Lucene作为其核心来

2021-09-09 13:40:43 1215 1

原创 Docker基础

概述docker

2021-09-08 14:01:57 265

原创 简单了解Oracle+JPA+Hibernate

Oracle安装

2021-09-07 15:12:33 323

原创 分布式事务与Seata

分布式事务概述

2021-09-06 18:05:21 485

原创 Git与TortoiseGit的使用

Git概述

2021-09-05 17:55:09 410

空空如也

空空如也

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

TA关注的人

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