10 2021 档案
使用自定义注解实现接口加密的思路
摘要:1 产生需求的原因 如图,假如这个地址暴露了,那么谁拿到地址都可以直接发送请求,但是前端发送请求一定是通过http实现的,也因此这个地址一定会曝光,有心人也一定能拿到这个地址,因此需要加一个sign签名,生成签名的方式别人不知道,这样就能保证别人拿到这个地址也没办法使用 2 加密原理 当客户端向服务
冒泡排序 选择排序 插入排序
摘要:排序 十大经典排序算法总结(Java实现+动画)_meibenxiang的博客-CSDN博客_十大排序算法 说明 简单的说一下几个排序,都是从左往右排序,从小到大,冒泡排序直接双重for循环,选择排序需要声明minIndex,快速排序需要声明num和j 1 冒泡排序 最基本的排序,牢记数组长度为N,
设计模式 静态代理模式
摘要:1 静态代理模式 1.1 定义 简单来说就是创建一个代理对象(Proxy),只有代理对象能调用目标对象(RealSubject),同时Proxy也实现了目标对象RealSubject的接口(Subject),这就能实现多态。 代理模式的核心是,客户端(Client)要想访问目标对象(RealSubj
设计模式 简单工厂 工厂 抽象工厂
摘要:1 简单工厂模式 1.1 定义 简单工厂模式又叫静态工厂模式,但不属于23种设计模式之一。 简单来说就是有一个类,提供一个创建方法createProduct,根据接收到的值决定实例化哪个类,但是这个简单工厂类能实例化的类必须都是同一个抽象类下的子类 1.2 实际应用场景 在JDK的类库中广泛使用了这
在springcloud项目中切换springboot版本
摘要:1 查找springcloud版本 进入spring官网,点击springcloud标签,可以看到对版本的描述 最新版是2020.0.x 如果需要回退版本,比如回退到Hoxton 首先点击Hoxton进入详情页,可以查看更详细的版本分类以及版本详情,如下图,Hoxton.SR10使用了springb
springcloud 及分布式组件 总览
摘要:1 微服务的由来 这是一个普通的Nginx反向代理三个tomcat服务器的项目 现在产生了新的业务需求,增加了新的功能,代码更新了,自然需要重启整个项目,但是随着项目越来越大,每次重启耗费的时间越来越多,而且重启时不仅仅是客户端无法请求,服务端之间也无法进行通讯,这就会造成损失,所以要将项目按照业务
微服务的限流
摘要:1 sentinel 1.1介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性 - 丰富
微服务的网关
摘要:1 Spring Cloud Zuul 1.1 介绍 现在还需要一个网关,也可以叫路由器,上连Nginx,下连各个注册中心,将前端发送到Nginx的请求分发到各个注册中心,这就是Zuul Spring Cloud Zuul 是一套边缘服务,它能实现动态路由、监控、负载和流量管理等功能。 简单来说,Z
微服务的配置中心
摘要:1 spring Cloud Config 1.1 配置中心需求出现的原因 Spring Cloud Config 顾名思义,它是一个与配置有关的框架。 Spring Cloud的每一个组件都有各自的配置,我们在开发阶段会不停的更新配置并启动,那么当我们将所有的服务打包,并发布到线上时,我们还得重新
微服务的远程调用
摘要:1 Spring Cloud OpenFeign 1.1 远程调用需求出现的原因 在使用微服务时,服务器之间要想互相调用,需要通过注册中心,但是注册中心最重要的作用是注册和管理服务器,虽然提供了方法实现服务器互相调用,也自动实现了负载均衡,但是实现过程要写的代码太繁琐了 如图通过注册中心提供的方法实
微服务的注册中心
摘要:1 什么是注册中心 1.1 定义 注册中心是微服务架构中最基础也是最重要的组件 注册中心本质上是为了解耦微服务 注册中心主要用于提供服务的发现与注册 注册中心相当于微服务之间的通讯录,记录着所有微服务的地址 注册中心能实现微服务之间的相互调用 1.2 举例 现在有一组服务器集群 随着各个服务的业务需
消息队列 RocketMQ
摘要:1 什么是消息队列(MQ) 消息队列是一种应用程序对应用程序的通信方法,是分布式系统的重要组件,可以解决一些应用场景的高并发问题,当不需要立即获得结果,但是并发量又需要进行控制的时候,就需要使用MQ来处理。 2 消息队列的应用场景 2.1 异步处理场景 多应用对消息队列中同一消息进行处理,应用间并发
搜索引擎 solr
摘要:1 搜索引擎 1.1 搜索引擎的作用 搜索引擎要解决的就是数据库分库分表后的模糊查询功能 实际应用中,要求搜索框的值能去搜ID、名称、介绍、标签,还能将结果聚合显示,这依赖的就是搜索引擎 1.2 搜索引擎的注意事项 搜索引擎中的数据来自于数据库,若该数据也在redis中保存,则修改了数据库需要同时修
为什么使用JDBC时要调用Class.forName(数据库驱动全类名)并使用DriverManager
摘要:java的JDBC给的是一个规范,给出connection、driver、resultset等接口,要想使用JDBC,就要实现这些接口,而这些接口由mysql等厂商发布的数据库驱动类实现,通过Class.forName(数据库驱动全类名),就把这些接口实现了 java的JDBC提供了规范,然后提供了
mysql数据库的锁
摘要:1 数据库的锁的使用场景 有如图所示场景,在并发情况下,如果不给数据库加锁,可能导致数据库的数据先被改为2000,再被改为1000,因此当用户A操作时,给数据库上锁,等用户A操作完成再给用户B操作 2 数据库有哪些锁 2.1 悲观锁 2.1.1 什么是悲观锁 悲观锁使用了mysql的锁机制,属于物理
mysql实现事务的sql代码和流程
摘要:事务来自于Mysql,与框架无关(无论是jadb还是mybatis还是spring,这些框架只是封装了mysql的事务代码,让程序员能更方便的实现事务操作) sql代码: mysql提供了三个关键字来完成事务的提交 1. begin:事务开始,后续的sql只会在内存中被执行(会返回执行结果,比如查询
数据库分库分表 redis序列生成器
摘要:1 什么是分库 当业务系统越来越大,查询新增的压力在单个数据库集群已经无法满足时,就会将当前的数据库进行业务拆分.如:CRM库,分割为CRM-USER,CRM-ORDER, CRM-GOOD,不同数据库对应不同业务模块,不同的数据库放在不同的硬件(服务器)上,这就是数据库分库 虽然数据库的压力减少了
mysql数据库优化
摘要:1 工作中常见的优化代码任务场景 假设工作中领导告诉我们某个接口要50秒才能返回结果,要求我们优化某个接口返回数据的速度,此时首先通过接口确认server,再确认sql语句,如果sql语句执行速度很快,那么就说明是server的业务代码出现的问题 如果是server出问题,那就要想办法精简代码,能用
数据库中间件 mycat 介绍 实现mysql读写分离 mysql主从同步
摘要:1 引入 数据库作为一个项目最重要的部分,不允许出现任何差错,所以Mysql也要实现主从结构,读写分离,要实现这种结构,通常借助一个开源的数据库中间件Mycat 2 是什么 Mycat是阿里巴巴开源的数据库中间件,实现了 MySQL 协议的Server,其核心功能是分表分库,即将一个大表水平分割为
redi集群主从结构 以及 哨兵模式
摘要:1 redis集群的结构——主从结构 1.1 什么是主从结构 如图是常见的服务器架构,一个Nginx连接多个tomcat,每个tomcat共享一个redis 但是如果业务访问量巨大,一个redis又要写数据又要读数据,无法支撑业务,那么就要组建redis集群 假如现在组建的redis集群有三台red
一主两从的redis集群宕机时哨兵集群操作案例
摘要:ps -ef|grep redis 查看进程 杀掉master进程,即端口号是6379的进程 观察日志 哨兵检测到主库宕机 选举出了6381作为主库 日志中可以看出,从库同步新的主库的数据,并且原来的6379变成了从库,此时的配置文件也被自动改变了。 进入6380客户端 可以看见,此时的主库变成了6
多台tomcat服务器上实现分布式锁解决redis缓存击穿
摘要:1 分布式锁存放的位置 在“单台tomcat上利用锁解决缓存击穿”的代码中,锁只是加在了单台tomcat服务器上,实际开发时,tomcat服务器作为集群,分别搭载在不同的服务器上,为了能实现锁的共享,就需要使用分布式锁——多个tomcat,拿到同一把锁,而这把锁就放在redis中 2 分布式锁的原理
单台tomcat上利用锁解决redis缓存击穿
摘要:1 可重入锁 ReentrantLock类 在解决缓存击穿时,使用了锁,在springboot项目中,直接基于java.util.concurrent.locks(JUC)获取可重入锁——ReentrantLock类 2 单台tomcat上利用锁解决缓存击穿 技术点: 1. try-catch-fi
从wolai到博客园 从markdown到博客园 笔记、博文 全流程
摘要:1 导出 平时我会在wolai记录学习笔记,当我需要把笔记分享到博客园时 首先将页面以markdown格式导出 此时就能得到一个当前笔记页面的压缩包,里面是md文件以及图片,还有笔记页面的所有子页面的md文件以及图片 2 检查导出的md文件 打开md进行检查,从wolai转markdown存在一些问
tomcat集群中的session模拟
摘要:Cookie和Session的区别(面试必备)_chen13333336677的博客-CSDN博客_cookie和session区别面试 1 什么是session 浏览器每次访问,服务器都会为每个用户创建一个独立的HttpSession对象,第一次访问服务器时,请求中没有携带任何标识,所以服务器会创
反向代理服务器 Nginx
摘要:1 什么是Nginx Nginx 是一个高性能的 Web 和反向代理服务器, 它具有很多非常优越的特性,特点是反向代理 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,00
VUE+ElementUI+springboot Base64格式的文件上传
摘要:1 Base64格式效果 前端上传一个文件,一般都是考虑把文件传到服务器的某个位置保存,后端数据库存这个文件在服务器上的绝对路径 但是也可以让前端将文件基于Base64格式转为纯字符串,后端数据库直接存这串字符串 举例: 前端以Base64格式将一张图片转为字符串,前端控制台打印如下 此时后端数据库
封装redis工具类 实现快速存取值
摘要:下面是封装好的redis工具类 保存位置 1 reids工具类 这个类封装的是redis,直接使用这个类的方法向reids中存取值,设置过期时间 import lombok.RequiredArgsConstructor; import org.springframework.beans.facto
VUE+ElementUI+springboot项目中 数据字典表全面解析与使用场景 PO转VO时进行转义 令前端下拉列表动态生成 前端VUE表格列的动态转义
摘要:1 产生数据字典表的原因 现在有这么一张表,其中的大部分字段都是固定值,比如订单分类、类型、动作、状态、业务类型 如果都以字符串的形式存入数据库中,就存在数据冗余的情况,而且如果希望修改某一字段的字符串(比如从“来自网络的订单”改为“网络订单”),那就不是修改一条,而是需要修改许多条 因此通常以数字
VUE+ElementUI+springboot实现文件导出 文件导出时前端不弹出下载提示框
摘要:1 整体思路 网页上的文件导出功能可以分为三个步骤 ①根据业务查询数据库,获得List数组 ②将List数组、文件保存的路径、文件名(可以由UUID生成,也可以由前端用户给定)传给转Excel的工具类,生成Excel文件 ③实现文件下载功能(后端+前端) 2 后端 第一部分 基于mybatis-pl
JAVA读写Excel和word 代码
摘要:1 概述 下面介绍一下JAVA如何读写Excel和word 不用记代码,了解JAVA操作的原理即可,网络上有更好的已经封装好的插件实现导出 写excel时用的是SXSSFWorkbook类+Sheet+Row+Cell+FileOutputStream+File 读excel时用的是 整体代码过于底
自动由接口形成文档 sagger2 使用
摘要:SpingBoot 集成 Swagger2 - 简书 (jianshu.com) sagger2的使用方式看别人的帖子,说的很详细,我就不重复造轮子了 配置好后在浏览器访问指定页面就能看到整个后端提供的接口 这个工具的显示效果很好,能展示整个springboot项目中所有controller类 页面
springboot项目中实现定时任务+异步任务
摘要:1 步骤一 启动类上开启任务调度 在了解了定时任务和异步任务后,常见的使用场景是定时执行发邮件的操作 首先要在springboot项目的启动类上使用注解@EnableScheduling开启任务调度 2 步骤二 定义类 设置要定时+异步实现的任务 注意几点 ①整个类要用@Component交给spr
如何从spring容器中取出注入的对象 SpringContainerUtils
摘要:有时候我们需要在一个类中使用已经被注入spring容器的类(比如被包扫描的mapper接口,或者加了@Component注解的类) 但一个类要想使用spring容器的对象,一般需要声明对象,然后用@AutoWired注解,而这又要求当前类得被spring容器管理(被包扫描或者使用了@Componen
java实现异步任务 AsyncManager AsyncFactory
摘要:1 应用场景 当我们需要多线程执行耗时的任务,比如发送邮件时,就可以设置异步任务 2 创建执行器 直接把下面的代码复制到项目中 import com.javasm.common.util.SpringContainerUtils; import org.springframework.schedul
java实现定时任务 Timer springTask cron表达式
摘要:1 实现方式 1.1 JDK自带 Timer 实现比较简单的定时,无线程池 Executos 带线程池 1.2 第三方 quartz 功能很强大,网上帖子很多,可以完成定时任务功能(自己翻帖子能实现) springTask 2 Timer 2.1 延迟指定时间后执行 直接把下面的代码复制到项目的类中
解决VUE+Springboot项目跨域问题
摘要:通常springboot项目端口为8080 VUE项目端口设置为8088 这样互不干扰,实现了前后端分离,但随之而来的就是跨域问题 网上解决方式很多,这里给一个类,复制后放在springboot项目中即可 位置 代码 import org.springframework.context.annota
mysql数据库设计 表名 注释 逆向生成关系模型 预留字段
摘要:1 表名 首先是数据库表的命名 可以看到都有前缀 命名公式: 前缀(模块)_功能别名_作用 2 字段的注释 每个字段都要写注释,一定要写全 3 表与表之间的关系模型 3.1 使用场景及注意事项 navicat中有一个模型功能,能显示表之间的关系,有的公司要求在设计完表后,把这个模型发群里 但这个功能
IDEA在pull时提示禁止pull
摘要:我遇到的情况如下: 文件A之前在本地仓库为版本1,远程仓库也为版本1 结果本地修改为版本2,而远程仓库上该文件被其他项目协助者改为版本3 此时申请pull代码就会被IDEA阻止 解决办法: 首先把本地文件push到自己的分支,这样IDEA就知道你备份好了 此时再次pull master 就会进入冲突
mysql数据库分表知识
摘要:数据库的范式(建表的原则) - Lucky小黄人^_^ - 博客园 (cnblogs.com) 数据库建表设计六范式_白非马的博客-CSDN博客_表设计范式 拆数据库表时 ① 能进一步细分的要进一步细分 ②会产生传递依赖的 也进行分表处理 变为 总之要消除数据冗余(许多行数据都一样)、更新异常(改一
ElementUI日期时间选择器数据传输后端出现8小时偏差
摘要:LocalDateTime用法(jdk1.8 ) - 双间 - 博客园 (cnblogs.com) ElementUI控件el-date-picker 时间段误差8小时问题的处理_niaonao-CSDN博客_el-date-picker 时间错8个小时 两种解决办法 方法一,在ElementUI的
ElementUI表单验证 图片详解
摘要:效果 VUE代码五要素 ①表单要用 :model关联VUE的对象,这个对象用于储存表单的值 ②用 :rules给表单指定验证规则,json对象格式,内部储存的元素也是json格式,元素的key与表单的组件的prop一一对应,元素的value可以存多条规则,规则也是json格式,由四个属性构成 typ
VUE前后端post传输数据时的格式说明 AXIOS的post失效
摘要:查询用get 增改用post 此时后端用@Postmapper注解 封装到类上用@RequestBody 此时前端数据存在一个json对象上,并且必须用AXIOS的post方法,传输数据时直接传输json,不需要params格式
VUE+springboot项目中 前后端数据传递时的数据格式与命名
摘要:后端 使用一个自定义类AXIOS,将自定义的status、自定义的message以及查询数据库得到的数据封装并传给前端 前端 通过请求后端controller的请求路径获得的值存入自定义的变量中,然后需要进一步从中取值才能使用 图中的salesOrderItemsVO 源于后端封装数据时定义的属性名
!null和!StringUtils.isEmpty的区别
摘要:如果希望判断某个字符串属性是否为空,要用后者,因为空字符串满足!null 但不满足StringUtils.isEmpty
redis存取value时报错 LocalDateTime格式问题
摘要:Java中String、LocalDateTime、LocalDate、Date互转 - 代码猫 - 博客园 (cnblogs.com) 使用redis时 如果希望存的value是str格式,那么需要将obj和str互转 如果时间属性为localDatetime 那么PO转VO时需要将时间转为str
springboot 工程启动报错之Consider defining a bean of type ‘XXX’ in your configuration. 报错Consider defining a bean of type
摘要:报错如图: 解决办法: 其实就是声明的变量没有被springboot注入容器 如图三个变量均进行了声明,均使用了@RequiredArgsConstructor+private final 但VO类其实没能注入容器 查看mapper接口,被springboot启动类上的注解以包扫描的形式注入了容器,
ElemetnUI表格合并列
摘要:element-ui的表格行,列合并问题_szw_18583757301的博客-CSDN博客_elementui表格合并列 实现下图效果,将指定的行指定的列进行合并 后续:ElementUI 2.15.6版本提供了新的表格样式 “描述列表” 实现下图的效果易如反掌 组件 | Element
ElementUI表格如何获取当前行的数据
摘要:ElementUI表格如何获取当前行的数据?_cx7的博客-CSDN博客 将表格单行的数据或者某个指定列的数据传到方法中,比如把订单编号传到按钮“查看”绑定的方法中
基于ElementUI实现竖排表格
摘要:ElementUI提供的基础表格效果如图 elementUI竖向表格、和并列_仙女的博客-CSDN博客 实现下图效果,其实就是四列表格,两列储存固定的标题,两列读取后端传过来的数据 后续:ElementUI 2.15.6版本提供了新的表格样式 “描述列表” 实现下图的效果易如反掌 组件 | Elem
ElementUI的下拉菜单没有值
摘要:在确保前端代码完全无误的情况下,依然没有值,如图 捣鼓了半天解决了,代码没变,重写了一次就好了,可能是写代码的时候没有在webstorm弹出提示时使用提示,导致方法没能连接到VUE的属性上(即便确实同名)
后端传输给前端的数据没有在表格中得到正常显示
摘要:遇到的情况 解决办法: 后端传输的数据是json格式,key是VO类的属性名 value是对应的属性值 前端取后端传输的数据时,要注意大小写必须完全相同,前端区分大小写,我就是consigneeName写成了ConsigneeName 导致取不到数据
多表联查时使用mybatis-plus的LambdaQueryWrapper 多表相连下实现条件查询
摘要:MyBatisPlus分页多表关联查询 - SegmentFault 思否 下面的都是单表,如果要在多表联查的基础上使用mybatis-plus提供的LambdaQueryWrapper等查询条件包裹器对象,参看上面的链接 总而言之,在service使用LambdaQueryWrapper拼接条件查
为什么mybatis-plus反向生成的PO均实现了Serializable
摘要:实体类为什么要实现Serializable接口_God _lin的博客-CSDN博客 serialVersionUID 是干什么的? - 知乎 (zhihu.com) 详细文章见上面两篇,下面是我个人的理解 简而言之 我们实际开发时通常都会用redis这种nosql数据库,所以PO这种存储持久层数据
PO VO DTO等说明
摘要:一篇文章讲清楚VO,BO,PO,DO,DTO的区别 - 知乎 (zhihu.com) PO,BO,VO,DTO和POJO的区别_小猴子的博客-CSDN博客 上述文章给出的建议: 1,PO这个没法省,不管叫PO还是Entity,怎么着都得有 2,一些工具类的系统和一些业务不是很复杂的系统DTO是可以和
IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法
摘要:已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法 - 小小赫下士 - 博客园 (cnblogs.com) 另外,除了上面连接说的方法,还可以直接“停用检查” 将报红去掉,在报红的名字上alt+enter 然后点击Disable inspection
gitee github 远程仓库的免密登录(ssh)
摘要:1 http和ssh方式的区别 常用的克隆项目的方式为http,这种方式允许直接下载项目,当需要push代码到远程仓库时,每次都要输入项目的账号密码以进行身份验证 使用ssh方式连接远程仓库后,无论是下载项目还是push代码到远程仓库,都不需要输入项目的账号密码 如图,远程仓库提供的这个按钮给出的地
IDEA使用git全流程
摘要:一般开发常用命令行操作git,不过IDEA也可以集成git,实现IDEA中写的代码与Github或者gitee联通 1 在IDEA设置中配置git 首先打开设置查看IDEA是否已经配置了git软件,如果没有配置就配置上去,配置方式如图 2 把项目交给git管理 一般创建的项目默认不使用git,需要手
springboot项目下 mybatis开启驼峰命名方式
摘要:mybatis的驼峰命名方式,本来是配置在mybatis核心配置文件的setting属性中,现在springboot项目下,有三种配置方式 1 在mybatis核心配置文件中指定,springboot加载mybatis核心配置文件 springboot项目的一个特点就是0配置,本来就省掉了mybat
springboot项目中 mybatis的xml映射文件位置 mapper接口配置
摘要:1 mybatis-plus提供的方法不需要映射文件的支持 如果controller请求的service使用的是BaseService写的方法,那么最终代码不会走到mapper接口的映射文件——换句话说,resource包下有没有映射文件都不影响查询 2 放置映射文件的两种情况 在把自动生成的文件复
springboot结合mybatis-plus查不出数据 或者 提示找不到某个实体类的主键 Can not find table primary key in Class
摘要:Can not find table primary key in Class 可能原因是在使用Mybatis-plus-generator时由于各种原因导致自动生成的实体类或者部分实体类缺少主键注解@TableId 手动添加一下@TableId即可
Mybatis-plus-generator使用流程
摘要:打开Mybatis-plus-generator工程 如果提示项目的JDK版本过低,就在设置里修改版本为JDK8(默认1.5) idea怎么更改jdk版本-百度经验 (baidu.com) 第一步 在codeGenerator类中修改数据源信息和包配置 包配置根据自己的项目实际路径设置,三层路径只需