- 博客(112)
- 收藏
- 关注
原创 实现微信支付(Native支付),使用WebSocket进行推送
实现微信支付(Native支付),使用WebSocket进行推送本实验使用springboot+vue实现分四部分讲解1.简单介绍2.微信支付工具类3.创建支付订单,接收付款结果4.配置SpringBoot支持WebSocket,推送结果...
2022-02-27 17:01:44
1582
原创 实现微信支付(Native支付),使用WebSocket进行推送 ——4.配置SpringBoot支持WebSocket,推送结果
实现微信支付(Native支付),使用WebSocket进行推送——4.配置SpringBoot支持WebSocket,推送结果一、配置WebSocket@Configurationpublic class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); }}二、创建
2022-02-27 17:00:30
2643
原创 实现微信支付(Native支付),使用WebSocket进行推送——3.创建支付订单,接收付款结果
实现微信支付(Native支付),使用WebSocket进行推送——3.创建支付订单注:本实验使用springboot框架一、创建流程二、创建支付订单所需参数2.1 API接口大家可以用浏览器访问微信支付的API手册( https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1), 查阅具体的调用规范。下面是本次项目所使用到的参数参数含义类型例子appid公众号IDStringwxd678efh567h
2022-02-27 17:00:16
2613
1
原创 实现微信支付(Native支付),使用WebSocket进行推送——2.微信支付工具类
实现微信支付(Native支付),使用WebSocket进行推送——2.微信支付工具类官网工具类我们在官网给的工具类的基础上进行修改一、自己添加的1.1 相关配置参数package com.xc.xemos.api.wxpay;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import javax.annotation.
2022-02-27 17:00:03
865
原创 实现微信支付(Native支付),使用WebSocket进行推送——1.简单介绍
实现微信支付(Native支付),使用WebSocket进行推送——1.简单介绍一、实现逻辑1.由于本人的项目是web版本的,因此选用native实现微信支付,在网站生成支付二维码,然后用户在手机上面用微信扫码付款。2.本次实验微信支付的版本选用的是V2版本3.支付订单的创建a.商品订单是由我们本地系统生成的,商品订单必须唯一,当你使用某个商品订单去创建支付订单后,再用重复的商品订单去创建支付订单就会报错b.支付订单是由微信平台生成的,我们只需调用相关的API接口,传入参数即可创建支付订单,每个
2022-02-27 16:59:32
3314
原创 MongoDb + RabbitMQ 搭建系统通知模块
MongoDb + RabbitMQ 搭建系统通知模块使用springboot实现一、选择MongoDB和RabbitMQ理由对于公告消息,本设计是设计为 为每个用户创建一条公告信息(原因是:方便记录用户对于消息的已读和未读状态,这样设计会更符合用户需求),因此设计两个表,message(存储消息及其发送者消息) 和 message_ref(存储接收者,及已读和新接收状态)数据库选择为MongoDB,原因是MongoDB对于海量数据以及高并发情况下的读写数据很有优势,同时他的数据存储是以文档结构存
2022-02-25 22:02:03
2492
原创 rabbitMQ连接失败问题:User can only log in via localhost
无法连接RabbitMQ,出现无权限问题User can only log in via localhost 或者ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
2022-02-25 15:08:05
1803
原创 数据结构和算法
数据结构和算法参考视频:尚硅谷Java数据结构与java算法(Java数据结构与算法)相关笔记了解稀疏数组,链表,队列和栈数据结构与算法:常见数据结构简单了解递归,学习相关的应用:迷宫问题和8皇后问题数据结构与算法:递归八大排序算法数据结构与算法:排序算法(冒泡,快排,选择,插入,shell,归并,基数).数据结构与算法:堆排序相关的查找算法以及哈希表的介绍顺序(线性)查找二分查找/折半查找插值查找斐波那契查找数据结构与算法:查
2022-01-25 10:32:41
427
原创 常用的十种算法:迪杰斯特拉算法,弗洛伊德算法,马踏棋盘算法
常用的十种算法八、迪杰斯特拉算法8.1 迪杰斯特拉(Dijkstra)算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。8.2 迪杰斯特拉(Dijkstra)算法过程设置出发顶点为 v,顶点集合 V{v1,v2,vi…},v 到 V 中各顶点的距离构成距离集合 Dis,Dis{d1,d2,di…},Dis集合记录着 v 到图中各顶点的距离(到自身可以看作 0,v
2022-01-20 17:09:48
1416
原创 常用的十种算法:贪心算法,普利姆算法,克鲁斯算法
常用的十种算法五、贪心算法5.1 贪心算法介绍贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果5.2 贪心算法最佳应用-集合覆盖广播台覆盖地区K1“北京”, “上海”, “天津”K2“广州”, “北京”, “深圳”K3“成都”, “上海”, “杭州”K4“上海”
2022-01-20 12:04:27
1192
原创 常用的十种算法:二分查找,分治,动态规划,KMP
常用的十种算法一、二分查找算法(非递归)1.1 二分查找算法(非递归)介绍前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n 步,假设从[0,99]的队列(100 个数,即 n=100)中寻到目标数 30,则需要查找步数为㏒₂100 , 即最多需要查找 7 次( 2^6 < 100 <
2022-01-19 22:37:17
1911
原创 数据结构和算法:图
图一、图基本介绍1.为什么要有图前面我们学了线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图。2.图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:3.图的常用概念顶点(vertex)边(edge)路径无向图有向图带权图二、图的表示方式图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)
2022-01-19 19:49:50
479
原创 数据结构与算法:多路查找树
一、多路查找树1.二叉树与 B 树1.1 二叉树的问题分析二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题:问题 1:在构建二叉树时,需要**多次进行 i/o 操作(**海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响问题 2:节点海量,也会造成二叉树的高度很大,会降低操作速度.1.2. 多叉树在二叉树中,每个节点有数据项,最多有两个子节点。如果
2022-01-19 12:23:59
227
原创 数据结构与算法:赫夫曼树,赫夫曼编码(压缩/解压),二叉排序树(BST),平衡二叉树(AVL)
树结构实际应用一、赫夫曼树1.基本介绍给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近2.赫夫曼树几个重要概念和举例说明路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为 1,则从根结点到第 L 层结点的路径
2022-01-19 11:29:35
364
原创 数据结构与算法:堆排序
一、堆排序1.堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆举例说明小顶堆举例说明一般升序采用大顶堆,降序采用小顶堆2.堆排序基本思想将待排序序列构造成一个大顶
2022-01-18 23:59:49
661
原创 数据结构与算法:树结构的基础部分
树结构的基础部分一、二叉树1.为什么需要树这种数据结构1.1 数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 [示意图]画出操作示意图:1.2 链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)操作示意图
2022-01-18 22:38:45
172
原创 数据结构与算法:查找算法与哈希表
查找算法一、查找算法介绍在java中,我们常用的查找有四种:顺序(线性)查找二分查找/折半查找插值查找斐波那契查找二、线性查找算法按顺序查找,找到满足条件的值就返回值或下标代码实现public class SeqSearch { public static void main(String[] args) { int arr[] = { 1, 9, 11, -1, 34, 89 };// 没有顺序的数组 int index = seqSearch(arr, -11);
2022-01-18 16:44:00
508
原创 数据结构与算法:排序算法(冒泡,快排,选择,插入,shell,归并,基数)
排序算法1.排序算法的介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。1.1 排序的分类:内部排序:指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。常见的排序算法分类(见右图):[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lolwSJxT-1642476313562)(C:\Users\asus\AppDat
2022-01-18 11:43:57
309
原创 数据结构与算法:递归
递归1.递归应用场景看个实际应用场景,迷宫问题(回溯), 递归(Recursion)2 递归的概念简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。3 递归调用机制我列举两个小案例,来帮助大家理解递归,部分学员已经学习过递归了,这里在给大家回顾一下递归调用机制打印问题阶乘问题使用图解方式说明了递归的调用机制代码演示public class RecursionTest { public static v
2022-01-17 15:30:34
172
原创 数据结构与算法:常见数据结构
常见数据结构一、数据结构简单介绍1.数据结构和算法的关系数据data结构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮,更加有效率的代码。程序 = 数据结构 + 算法数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。2.线性结构和非线性结构数据结构包括:线性结构和非线性结构。2.1 线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系线性结构有两种不同的存储结构,即顺序存储结构
2022-01-16 21:13:53
822
原创 java设计模式
设计模式一、设计模式的概念和分类1.1 设计模式介绍设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案,设计模式(Design pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂度。《设计模式》是经典的书,作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissid
2022-01-15 23:28:27
395
原创 设计模式:职责链模式
职责链模式1.OA系统采购审批需求学校OA系统的采购审批项目:需求是采购员采购教学器材如果金额 小于等于5000, 由教学主任审批 (0<=x<=5000)如果金额 小于等于10000, 由院长审批 (5000<x<=10000)如果金额 小于等于30000, 由副校长审批 (10000<x<=30000)如果金额 超过30000以上,有校长审批 ( 30000<x)请设计程序完成采购审批项目1.1 传统方案解决OA系统审批传统方案解决OA系
2022-01-15 18:38:12
159
原创 设计模式:策略模式
策略模式1.鸭子问题编写鸭子项目,具体要求如下:有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)显示鸭子的信息1.1 传统方案解决鸭子问题的分析和代码实现传统的设计方案(类图)代码实现鸭子接口public abstract class Duck { public Duck() { } public abstract void display();//显示鸭子信息 public void quack() { System.ou
2022-01-15 18:16:47
193
原创 设计模式:状态模式
状态模式1.APP抽奖活动问题请编写程序完成APP抽奖活动 具体要求如下:假如每参加一次这个活动要扣除用户50积分,中奖概率是10%奖品数量固定,抽完就不能抽奖活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完活动的四个状态转换关系图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0hQLzhpZ-1642221263028)()]2.状态模式2.1 基本介绍状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外
2022-01-15 12:49:45
128
原创 设计模式:解释器模式
解释器模式1.四则运算问题通过解释器模式来实现四则运算,如计算a+b-c的值,具体要求先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复在分别输入a ,b, c, d, e 的值最后求出结果:如图1.1 传统方案解决四则运算问题分析编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果问题分析:如果加入新的运算符,比如 * / ( 等等,不利于扩展,另外让一个方法来解析会造成程序结构混乱,不够清晰.解决方案:可以考虑使用解释器模式, 即: 表
2022-01-15 11:59:07
172
原创 设计模式:备忘录模式
备忘录模式1.游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态1.1 传统方案解决游戏角色恢复传统的设计方案(类图)1.1.1 传统的方式的问题分析一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大.传统的方式是简单地做备份,new出另外一个对象出来,再把需要备份的数据放到这个新对象,但这就暴露了对象内部的细节解决方案: =>
2022-01-15 10:15:10
116
原创 设计模式:中介者模式
中介者模式1 智能家庭项目智能家庭项目:智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放1.1 传统方案解决智能家庭管理问题1.1.1 传统的设计方案(类图)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ehD0Vfhm-1642210900859)(C:\Users\asus\AppData\Roa
2022-01-15 09:42:06
107
原创 设计模式:观察者模式
观察者模式1.天气预报项目需求气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)。需要设计开放型API,便于其他第三方也能接入气象站获取数据。提供温度、气压和湿度的接口测量数据更新时,要能实时的通知给第三方1.1 天气预报设计方案1-普通方案WeatherData类通过对气象站项目的分析,我们可以初步设计出一个WeatherData类说明:通过getXxx方法,可以让第三方接入,并得到相关信息.当数据有更新时,气象站通过调用data
2022-01-15 00:20:24
125
原创 设计模式:迭代器模式
迭代器模式1.看一个具体的需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:1.1 传统的设计方案(类图)1.2 传统的方式的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作解决方案:=> 迭代器模式2.迭代器模式2.1 基本介
2022-01-14 23:45:51
141
原创 设计模式:访问者模式
访问者模式1.测评系统的需求完成测评系统需求将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等)传统方案传统方式的问题分析如果系统比较小,还是ok的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了ocp原则, 不利于维护扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做引出我们会使用新的设计模式 – 访问者模式2.访问者模式2.1 访问者模式基本介绍访问者模式(Visi
2022-01-14 23:00:26
159
原创 设计模式:命令模式
命令模式1.智能生活项目需求看一个具体的需求我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作。这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App,分别控制,我们希望只要一个app就可以控制全部智能家电。要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时 就可以考虑使用命令模式。命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来.在我们的例子中,动作的请求者是手机ap
2022-01-14 22:04:45
561
原创 设计模式:模板方法模式
模板方法模式1.豆浆制作问题编写制作豆浆的程序,说明如下:制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料,可以制作出不同口味的豆浆选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的请使用 模板方法模式 完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用,不再使用传统的方案来引出模板方法模式 )2.模板方法模式2.1 基本介绍模板方法模式(Template Method Pattern),又叫
2022-01-14 19:49:19
166
原创 设计模式:代理模式(Proxy)
代理模式(Proxy)1.代理模式的基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK 代理、接口代理)和 Cglib 代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。代理模式示意图2.静态代理2.1
2022-01-14 18:11:49
136
原创 设计模式:享元模式
享元模式1.展示网站项目需求小型的外包项目,给客户 A 做一个产品展示网站,客户 A 的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:有客户要求以新闻的形式发布有客户人要求以博客的形式发布有客户希望以微信公众号的形式发布1.1 传统方案解决网站展现项目直接复制粘贴一份,然后根据客户不同要求,进行定制修改给每个网站租用一个空间方案设计示意图1.2 传统方案解决网站展现项目-问题分析需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理
2022-01-14 00:04:50
132
原创 设计模式:外观模式
外观模式1.影院管理项目组建一个家庭影院:DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为:• 直接用遥控器:统筹各设备开关• 开爆米花机• 放下屏幕• 开投影仪• 开音响• 开DVD,选dvd• 去拿爆米花• 调暗灯光• 播放• 观影结束后,关闭各种设备1.1 传统方式解决影院管理1.2 传统方式解决影院管理问题分析在ClientTest 的main方法中,创建各个子系统的对象,并直接去调用子系统(对象)相关方法,会造成调用过
2022-01-13 23:10:40
137
原创 设计模式:组合模式
组合模式1.学校院系展示需求看一个学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:1.2 传统方案解决学校院系展示(类图)传统方案解决学校院系展示存在的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,
2022-01-13 22:30:20
185
原创 设计模式:装饰者模式
装饰者模式1 星巴克咖啡订单项目(咖啡馆):咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用 OO 的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。1.2 方案 1-解决星巴克咖啡订单项目方案1-解决星巴克咖啡订单问题分析Drink 是一个抽象类,表示饮料de
2022-01-13 21:43:54
144
原创 设计模式:桥接模式
桥接模式1.手机操作问题现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图:2.传统方案解决手机操作问题2.1 传统方案解决手机使用问题(类图):2.2 传统方案解决手机操作问题分析扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本.解决方案-使用桥接模式3.桥接模式(
2022-01-13 18:47:36
161
原创 设计模式:设配器模式
设配器模式1.泰国旅游使用插座问题现实生活中的适配器例子泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以使用了。2.适配器模式基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式3.适配器模式工作原理适配器模式:将一个类的接
2022-01-13 17:44:19
155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人