- 博客(139)
- 资源 (12)
- 收藏
- 关注
原创 Redis中SDS简单动态字符串
Redis的底层是使用c语言写的。但是Redis没有直接使用C语言传统的字符串表示(以空字符串结尾的数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的类型,并将SDS用作Redis默认字符串表示。...
2022-08-07 20:34:09
934
原创 Redis持久化
因为Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将存储在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。Redis为了解决这个问题,提供了两种持久化方式。一种是RDB,另一种是AOF方式。前者会根据规则“定时”将内存中的数据保存储在磁盘上,而后者在每次执行命令后将命令的本身记录下来。RDB持久化是通过快照(snapshoting)完成的,当符合一定的条件时,Redis会自动将内存中的数据保存到磁盘上。Redis会在以下几种情况下对
2022-08-06 16:53:27
512
原创 Java中如何实现文件预览的功能
日常开发中常见的文件格式有pdf,word,Excel,PPT,Html,txt,图片等。pdf,Html,txt,图片这种实现在线预览非常简单,有一些前端的插件可以满足要求。word,Excel,PPT如果要实现在线预览,就非常的困难。word,Excel,PPT实现在线预览常用的方式就是先转换成pdf,然后在进行预览。下面我就介绍常用的几种方案。...
2022-07-06 18:23:55
18444
4
原创 vue中如何使用keep-alive动态删除已缓存组件
在做后台管理系统的时候,有这样一个需求。点击左边的菜单,会在右边的顶部生成一个个tag导航标签。当打开多个tag页时,用户可以在多个tag之间进行切换。需要在新增,修改页面切换tag时候,保留之前的信息,不进行页面的刷新。经过查询vue文档,可以使用keep-alive实现标签路由缓存,实现方式如下:在路由配置的meta中添加keepAlive,如下:然后在页面中使用v-if做判断,并且加上key使用上面这种方式解决了修改不同记录的缓存问题,因为不同记录的fullPath 不一样,...
2022-06-12 20:27:46
5450
7
原创 mybatis-plus 更新方法设置字段为空不起效果
项目场景:最近在做一个需求的时候需要把数据库中的某个字段设置为空问题描述在代码中通过set方法对一个字段设置成null,发现并没有起作用原因分析:经过查询是因为mybatis-plus 默认的更新策略设置的问题,mybatis-plus中FieldStrategy 有三种策略:• IGNORED:忽略。不管有没有有设置属性,所有的字段都会设置到insert语句中,如果没设置值会更新为null• NOT_NULL:非 NULL,默认策略。也就是忽略null的字段,不忽略""• NOT_EMP
2022-05-21 15:08:21
5087
2
原创 vue页面存在两个相同元素设置失效问题
项目场景:在项目中有这样一个需求,在一个页面中会展示审核通过数据和待审核的数据。通过Tabs标签页进行数据切换,列表中都有复选框,需要在待审核的数据中禁用某些复选框。问题描述在代码中复选框通过设置列的 type=“selection”,在通过selectable方法把数据为2016-05-02的复选框设置为不可勾选,具体代码如下:<template> <el-tabs v-model="activeName"> <el-tab-pane label="审核
2022-05-21 14:47:05
788
原创 Volatile关键字的作用
Volatile关键字的作用主要有如下两个:1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。2. 顺序一致性:禁止指令重排序。一、线程可见性我们先通过一个例子来看看线程的可见性:public class VolatileTest { boolean flag = true; public void updateFlag() { this.flag = false; System.out.println("修改flag
2022-04-24 11:55:29
72090
19
原创 synchronized底层实现原理
文章目录一、synchronized锁表现三种形势二、为什么说Synchronized是一个重量级锁三、Synchronized底层实现原理四、Synchronized锁存储位置五、Synchronized锁的升级过程一、synchronized锁表现三种形势Java中每个对象都可以作为锁。具体表现为以下3种方式:对于普通方法,锁的是当前实例对象。public class SynchronizedTest { public synchronized void test(String na
2022-04-22 09:32:03
18436
1
原创 jdk1.8中HashMap扰动函数及数组长度为什么是2的n次方介绍
文章目录前言一、什么是二进制?二、计算机采用二进制的原因三.十进制与二进制相互转换十进制转成二进制二进制转换为十进制与、或、异或运算按位异或按位与运算按位或运算Jdk1.8中HashMap扰动函数Jdk1.8中HashMap数组的长度为什么是2的n次方前言在阅读jdk1.8中HashMap源码的过程中发现代码中使用了相关二进制位操作的运算,本文先讲解了什么是二进制,及为什么计算机要使用二进制。然后讲解十进制与二进制如何进行转换,及与、或、异或运算 方式。最后介绍了了HashMap的扰动函数及数组的长度
2022-01-21 10:51:24
1062
原创 Vue开发环境搭建
文章目录前言一、安装nodejs二、安装Vue-CLI二、安装VSCode前言在开发Vue项目的时候,我们通常使用vue-cli进行打包,编译项目。而vue-cli是基于nodejs+webpack封装的命令行工具,所以我们需要先安装nodejs然后在安装Vue-CLI。一、安装nodejs我们去官网下载nodejs,输入下载地址:https://nodejs.org/en/,选择相应的版本进行下载安装完成后,检查一下nodejs有没有安装成功。在cmd窗口命令中输入 node -v ,
2021-11-29 15:59:49
536
原创 Linux下nginx安装
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、下载软件二、配置nginx安装所需的环境1.安装gcc2.安装PCRE pcre-devel3.安装zlib三、解压nginx压缩包并安装总结一、下载软件下载nginx压缩包,Nginx官方网站地址:http://nginx.org/en/download.html注意:这一步最好在自己的目标目录进行操作,一般是把压缩包下载到/usr/local目录下二、配置nginx安装所需的环境1.安装gcc安装 ng
2021-11-25 16:27:28
2538
原创 Springboot参数校验@Validated和@Valid区别
@Validated和@Valid区别Springboot中参数的校验我们可以使用@Validated和@Valid两个注解,这两个注解有什么区别?那种情况下使用@Validated注解?那种情况下使用@Valid注解?我们先看看这两个注解的源码:Validated源码如下:@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@D
2021-11-22 11:20:01
2046
原创 项目管理的过程中如何做好沟通管理
沟通在日常工作和生活中非常重要,它不仅是人和人之间连接心的桥梁,也是人与外界交流的纽带。项目管理的过程中,项目经理80%的时间都在沟通。如果沟通管理不到位,将会对项目产生严重的影响。本文讲解了沟通的模型及如何进行高效的沟通,在最后列出了相应的沟通技巧。
2021-11-18 15:27:44
3625
原创 互联网API对接如何保证系统安全
目录前言网络方面的安全策略系统部署专线数据传输方面安全策略文件传输实时接口使用https协议添加白名单接口进行验签接口数据进行加密防止重放攻击其它注意事项幂等性重复提交前言互联网金融系统经常需要提供一些对外的接口供第三方调用,这些接口暴露在互联网中。如何才能保证API系统对接的安全性?本文主要从网络及数据传输两个方面进行讲解。网络方面的安全策略系统部署在互联网区域部署一个前置机,提供接口的服务部署在内网。外网不能直接调用内网..
2021-11-11 10:04:44
3271
原创 springboot中如何优雅的对接口数据进行加密解密
在系统开发的过程中我们经常需要对外提供相应的API接口,为了保证系统数据的安全性,我们常常需要对传输的数据进行对称的加密。防止数据在传输的过程中被抓包,造成信息的泄露。通常的做法是我们在每个接口方法的前面先对请求的数据进行解密,解密完成后处理相应的业务逻辑,然后在对返回数据进行加密。这样做的坏处是代码太过于冗余,每写一个接口都要处理加密和解密方法。有没有什么办法可以把加密和解密的逻辑提取出来,在接口的方法中我们只关注处理业务逻辑。答案肯定是有的,springboot中的RequestBodyAdvice 和
2021-11-08 15:37:47
4966
2
原创 SpringBoot集成Ldap
什么是Ldap轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。为什么需要Ldap这里举个例子,一个公司内部有很多系统,每个系统都有独立的用户名和密码。密码太多,有时候想不起来哪个密码对应的是哪个系统。后续如果又新增一个项目,还要在开发和维护一套用户和密码。如何才能系统整合,以此做到账号的打通,使多套系统共用一个用户名和
2021-11-01 11:50:50
8246
3
原创 一文读懂什么是VUE
VUE是什么Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。Vue使用了双向数据绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。这就是Vue的精髓所在,如下图所示Vue..
2021-10-29 14:40:17
3997
2
原创 redisTemplate.opsForValue()中方法讲解
查看源码可以看到redisTemplate.opsForValue()中的方法都定义在ValueOperations<K, V> 中,该接口中一共有17个方法:public interface ValueOperations<K, V> { void set(K key, V value); void set(K key, V value, long timeout, TimeUnit unit); Boolean setIfAbsent(K key, V value);
2021-10-27 14:58:39
33567
原创 Springboot中如何使用Redis
Redis是什么 Redis是一个开源的,高性能的,基于键值对的缓存与存储系统,通过提供多种建值数据类型来适应不同场景下的缓存与存储需求。Redis特性存储结构Redis支持的健值数据类型如下:字符串类型,散列类型,列表类型,集合类型,有序集合类型内存存储与持久化Redis数据库中所有的数据都存储在内存中。Redis提供了对持久化的支持,即可以将内存中的数据异步写入到磁盘中,同时不影响继续提供服务功能丰富Redis可以作为缓存,消息队列等简单稳定Redi...
2021-10-26 17:04:31
626
原创 把web程序打包成exe安装文件
先安装Nativefier——可以把网页打包成exe的工具Nativefier需要 nodejs 环境支持,先安装nodejs。下载地址:https://nodejs.org/en/,安装完成后先看看node安装成功了没有,输入 node -v ,回车,会输出node的版本号。安装nativefier输入如下命令:npm install nativefier -g使用nativefier生成exe在 nativefier 后加上需要转换的网站地址, 比如:nati..
2021-08-12 15:57:12
4446
原创 springboot自定义参数校验规则
上一篇讲了Springboot中参数校验优雅实践,本篇讲解如果自定义参数校验规则。在日常开发中Bean Validation 中内置的注解已经可以满足我们大部分需求,但是在处理一些特殊的校验规则时需要我们自定义注解实现。下面以日期格式校验规则为例,如何在springboot 中自定义注解实现参数的校验:首先定义一个注解类:package com.validator.demo.api.valid;import java.lang.annotation.Documented;import jav
2021-05-26 11:26:03
1430
1
原创 Springboot中参数校验优雅实践
在提供对外的API接口的时候,我们经常需要对参数进行校验。通常的做法是在程序中通过if 进行判断,例如:package com.validator.demo.api.controller;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.a
2021-05-26 09:07:05
739
1
原创 解决spring 处理request.getInputStream()输入流只能读取一次问题
如果接口是用@RequestBody来接受数据,如果在拦截器中使用request.getInputStream() ,那么controller就无法拿到数据,会抛出错误:java.lang.IllegalStateException: getInputStream() has already been called for this request因为spring中request.getInputStream() 和request.getReader()只能被获取一次,而@RequestBody注解
2021-05-14 15:36:44
1078
1
原创 Spring框架中如何优雅统计程序的执行时间
在工作中经常有统计某个方法的执行时间,比如项目中我们写了一个AOP,在AOP中定义了环绕通知用于向日志中打印相应的参数及方法执行的时间 public Object around(ProceedingJoinPoint pjd) throws Throwable { log.info("环绕通知开始"); // 获取方法名 String className = pjd.getSignature().getClass().getName();
2021-05-14 14:37:42
6416
1
原创 一文读懂RabbitMQ是什么及RabbitMQ中相关的术语
RabbitMQ是什么?RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用Erlang语言。为什么要使用 rabbitmq(1)在分布式系统下具备异步,削峰,负载均衡等一系列高级功能;(2)拥有持久化的机制,进程消息,队列中的信息也可以保存下来。(3)实现消费者和生产者之间的解耦。(4)对于高并发场景下,利用消息队列可以使得同步访问变为串行访问达到一定量的限流,利于数据库的操作。Rabbit
2020-09-16 22:59:49
1083
原创 springboot集成rabbitmq,开启手工确认保证消息100%投递
首先在pom.xml中添加如下依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframew
2020-09-16 16:15:35
1200
原创 springboot集成RabbitMQ
首先我们需要在配置文件中添加相应的依赖 在配置文件中加入rabbitmq 相关连接参数 创建队列,交换机,并且进行绑定 创建生产者,用于发送信息 创建消费者,用于接收信息 建立测试类运行 运行结果 ...
2020-09-16 09:20:09
143
原创 springboot定义全局异常
本篇文章接着上一篇文章编写,上一篇参考springboot 定义统一返回结果如何在springboot中定义全局异常:首先在枚举类中添加全局异常代码package com.example.demo.base;/** * 响应码枚举 */public enum ResultCode { SUCCESS("200"), //成功 FAIL("400"), //失败 UNAUTHORIZED("401"), //未认证(签名错误) NOT_FOUND("
2020-09-04 09:51:58
629
原创 springboot 定义统一返回结果
前后端分离项目中后端开发需要写相应的接口,定义统一的返回格式有利于提高开发效率和沟通的成本。通常返回的格式主要如下两种:##### 1. 只返回相应的状态,格式如下:```{ "code": "200", "msg": "SUCCESS"}```##### 2. 返回相应的状态及数据,格式如下:```{ "code": "200", "msg": "查询成功", "result": { "id": 10, ...
2020-09-03 16:32:15
6483
1
原创 客户端调用WebService方式总结
1.Axis方式import java.net.URL;import javax.xml.namespace.QName;import org.apache.axis.client.Call;import org.apache.axis.client.Service;public class Test2 { /** * * @param serviceUrl 服务
2017-10-19 16:11:15
1084
转载 sql中使用转义符
1、oracle 特殊字符 转义 关键词:oracle 转义 环境:oracle9i plsql 在plsql里边执行: update userinfo set pageurl='myjsp?page=1&pagesize=10' where id='test' 这条sql语句往数据库的pa
2014-07-01 09:52:02
3833
转载 String和StringBuffer的区别
string与stringbuffer的区别########################简单说来########################String对象内容是不可改变的,StringBuffer是可以改变的,别且高效。1.StringString a = "123"; a = a + "456"; 上面两句,虽然a的值最终改变了,但是实际上在编译的时候,第一句a
2014-04-17 09:48:33
615
原创 在ipad,iphon上使用FireBug调试
用ipad或者iphone打开一个网页,加入到收藏夹。收藏夹的名字改为firebug,地址输入:javascript:(function(F,i,r,e,b,u,g,L,I,T,E){if(F.getElementById(b))return;E=F[i+'NS']&&F.documentElement.namespaceURI;E=E?F[i+'NS'](E,'script'):F[i]('
2014-03-26 09:40:21
842
原创 if(!+[1,])判断是否为ie的原理
alert([1,2]);//相当于alert([1,2].toString()); --这在IE与非IE上都相同,都会弹出"1,2" alert([1,]);//相当于alert([1,].toString());--在非IE的标准浏览器上,js引擎会自动删除最后的",",所以在IE上会弹出"1,",而在非IE上会弹出"1" alert(+[1,]);//根据上面的解释,这一句在IE上相
2014-03-24 15:04:56
1222
转载 ORA-12170 TNS 连接超时
1.开始----程序-----oracle------配置和移植工具-----Net Manager----本地----服务命名---ora11(这个是我的专用服务器) 把右边下面的主机名改成192.168.1.1022.开始----程序-----oracle------配置和移植工具-----Net Manager----本地----监听程序---同样把右边下面的主机名改成192.168.1
2014-02-13 10:35:54
640
转载 JQuery DOM 事件冒泡
什么是冒泡在页面上可以有多个事件,也可以多个元素响应同一个事件。假设网页上有两个元素,其中一个元素嵌套在另一个元素里,并且都被绑定了click事件,同时body元素上也绑定了click事件。view sourceprint?01"content">02 外层div元素
2014-02-12 10:19:37
658
原创 工作流几种常用的模式
1、 没有任何分支和条件的(如下图)该流程会按照A—B—C的顺序依次往下走。2.带有分支的(如下图)这种情况又可以分为如下几种情况: (1):节点A的后驱并行,D的前驱异或聚合。当节点A提交后,流程同时到达B,C,只要B或者C有一个人提交流程就流转到D(如下图)。(2):节点A的后驱并行,D的前驱同步聚合。当节点A提交后,流程同时到达B,c
2013-12-26 16:42:07
3361
转载 根据XML生成XML schema(*.xsd)
.下载工具trang将trang加入path2.生成xsd文件Dos代码java -jar trang.jar XXX1.xml XXX2.xsdOK ,enjoy!说明:XXX1.xml是输入参数,此处支持的文件格式为: rng rnc dtd xmlXXX2.xsd是输出参数,此处支持的文件格式为: rng
2013-12-20 13:59:09
2255
springboot整合rabbitmq,开启手工确认。保证消息100%投递
2020-09-16
springboot整合rabbitmq
2020-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人