- 博客(39)
- 收藏
- 关注
原创 redis 计数器 防止表单重复提交
redis 计数器用途社交产品业务里有很多统计计数的功能,比如:用户: 总点赞数,关注数,粉丝数帖子: 点赞数,评论数,热度消息: 已读,未读,红点消息数话题: 阅读数,帖子数,收藏数统计计数的特点实时性要求高写的频率很高写的性能对MySQL是一个挑战可以采用redis来优化高频率写入的性能要求。实现防止表单重复提交
2020-07-08 14:09:30
1783
1
原创 git index file corrupt
问题出现原因:在idea里面使用git合并分支时,电源开关被同事关了,电脑瞬间关机,导致索引文件损坏。解决方案1、找到项目路径2、右键 Git Hash Here删除index文件rm -f .git/index 重建index文件git reset...
2020-07-02 15:59:51
2640
1
原创 @JsonSerialize 与 @JsonDeserialize 使用
1、使用```java @JsonDeserialize(using = AmountDeserializer.class) @JsonSerialize(using = AmountSerializer.class) private Long amount;```2、自定义实现类```javaimport com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.data
2020-06-29 17:23:41
3759
1
转载 java 执行Shell命令
JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。本文只介绍如何使用JSch实现的SFTP功能。SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式。SFTP是使用加密传输认证信息和传输的数据,所以
2020-06-28 17:58:56
1438
原创 java 图片转64base 编码
图片使用base64位存储的利弊优势:减少http请求模块封装弊端base64编码的长度有些长(base64一般会比原图要大一些)获取修改比较麻烦使用场景图片很少或不会更新图片实际尺寸很小图片在网站多次使用
2020-06-10 15:18:57
1181
原创 VUE 显示 base64格式图片
<img src="'data:image/png;base64,'+userInfo.imgStr" alt="图片未上传" />var vm = new Vue({ el:'#rrapp', data:{ title: null, userInfo: { imgStr:base64码 } }});PS:注意src里面的单引号和双引号data:, 文本数据data:text/plain, 文本数据data:text/html,HTML 代码data:t
2020-06-04 11:05:14
18299
2
原创 Redis系列(二)SpringBoot 集成 Redis
StringRedisTemplate对redis操作进行了很好的封装,为键、字符串、哈希、列表、集合、有序集合、HyperLogLog的操作提供了良好的支持。基本使用形式就是redisTemplate.opsForXXX,XXX是类型,opsForValue是操作字符串;opsForSet是操作集合,opsForList是操作列表,opsForZSet是操作有序集合,opsForHyperLogLog是操作HyperLogLog,基本上其方法和redis命令是对应的,可以根据名字和方法注释快速确定方法对应
2020-05-26 10:06:45
945
原创 MySQL 生成千万级测试数据
在进行查询操作的性能测试或者sql优化时,我们经常需要在线下环境构建大量的基础数据供我们测试,模拟线上的真实环境。创建测试数据的方式1、编写代码,通过代码批量插库(步骤太繁琐,性能不高,不推荐)2、一行一行手动插入(比较低级)3、编写存储过程和函数执行(强烈推荐该方式,非常简单,数据插入快速,100W,只需几分钟)
2020-05-25 17:08:08
1633
原创 redis 学习思路
redis入门及学习思路,redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。但是,它也是不能替代关系型数据库,只能作为特定环境下的扩充。
2020-05-11 11:18:05
996
转载 Linux 安装中文字体
在做给图片添加文字水印时,本地测试没问题,但在部署后,发现文字水印变成了方框,后面找了下原因,发现linux没有安装中文字体,所以有bug,当然得解决一下啦。查看系统字体,在开始安装之前,我们先查看系统中已经安装的字体。要查看系统中已经安装的字体,我们可以使用fc-list命令进行查看。如果系统中没有该命令的话,我们需要先安装相关的软件包。在centos上,使用如下命令进行安装:yum install -y fontconfig mkfontscale
2020-04-29 15:30:27
1692
原创 RabbitMQ系列(六)如何保证消息的顺序性、消息不丢失、不被重复消费
整合MQ时,怎么保证消息没有重复消费?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?头大头大,问题一大堆,痛苦不已一致性问题:A系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是BCD三个系统那里,BD两个系统写库成功了,结果C系统写库失败了,咋整?你这数据就不一致了。所以消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种额外的技术方案和架构来规避掉,最好之后,你会发现,妈呀,系统复杂度提升了一个数量级,也许是复杂了10倍
2020-04-27 14:50:11
22466
7
原创 视频播放插件
video基于jsmodern.js网页视频播放插件,这是一款简单的mp4视频播放器,带时间进度条,音量、全屏、暂停/播放按钮等功能。支持点击视频暂停/播放效果。
2020-04-26 17:31:28
2000
原创 RabbitMQ系列(五)主题模式
主题模式相对于之前几种算是比较复杂了,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一个“标题”(RouteKey),exchange 会将消息转发到所有关注主题能与 routeKey 模糊匹配的队列。在进行绑定时,要提供一个该队列关心的主题,如“#.sscai.#”表示该队列关心所有涉及 sscai 的消息(一个 routeKey 为 "club.sscai.tmax”的消息会被转发到该队列)。 "#”表示0个或若干个关键字,“”表示一个关键字。如“club.”能
2020-04-23 14:26:38
1275
原创 RabbitMQ系列(四)路由模式
两个队列消费者设置的路由不一样,接收到的消息就不一样。路由模式下,决定消息向队列推送的主要取决于路由,而不是交换机了。 该模式必须设置交换机,且声明路由模式 channel.exchangeDeclare(EXCHANGE_NAME, "direct");
2020-04-23 14:26:10
1065
原创 RabbitMQ系列(三)发布订阅模式
什么是发布订阅模式简单解释就是,可以将消息发送给不同类型的消费者。做到发布一次,消费多个。下面代码部分会展示邮件、短信的例子,通过绑定到一个交换机。例子门户网站,用户在注册完后一般都会发送消息通知用户注册成功(失败)。如果在一个系统中,用户注册信息有邮箱、手机号,那么在注册完后会向邮箱和手机号都发送注册完成信息(假设都发送)。
2020-04-23 14:25:05
1214
原创 RabbitMQ系列(二)确认模式
RabbitMQ的消息确认有两种。第一种是消费接收确认。这种是确认消费者是否成功消费了队列中的消息。第二种是消息发送确认。这种是用来确认生产者将消息发送给交换器,交换器传递给队列的过程中,消息是否成功投递。发送确认分为两步,一是确认是否到达交换器,二是确认是否到达队列。一:消费者确认消费者确认或者说消费者应答指的是RabbitMQ需要确认消息到底有没有被收到自动应答boolean autoAck = true;channel.basicConsume(QUEUE_NAME, au
2020-04-22 13:36:47
1435
原创 RabbitMQ系列(一)工作队列模式
简单队列有个缺点,简单队列是一一对应的关系,即点对点,一个生产者对应一个消费者,按照这个逻辑,如果我们有一些比较耗时的任务,也就意味着需要大量的时间才能处理完毕,显然简单队列模式并不能满足我们的工作需求,我们今天再来看看工作队列。工作队列模式一个消息生产者,一个消息队列,多个消费者。同样也称为点对点模式...
2020-04-21 16:00:06
1396
原创 RabbitMQ 入门及学习思路
适用的应用场景异步处理:例如短信通知、终端状态推送、App推送、用户注册等数据同步:业务数据推送同步重试补偿:记账失败重试系统解耦:通讯上下行、终端异常监控、分布式事件中心流量消峰:秒杀场景下的下单处理发布订阅:HSF的服务状态变化通知、分布式事件中心高并发缓冲:日志服务、监控上报Rabbit优势:解耦、异步、广播、削峰Rabbit劣势:系统可用性低、系统复杂度提高、一致性问题
2020-04-17 13:59:02
1681
1
原创 异步请求处理DeferredResult,提高系统吞吐量
1-介绍Servlet 3中的异步支持为在另一个线程中处理HTTP请求提供了可能性。当有一个长时间运行的任务时,这是特别有趣的,因为当另一个线程处理这个请求时,容器线程被释放,并且可以继续为其他请求服务。这个主题已经解释了很多次,Spring框架提供的关于这个功能的类似乎有一点混乱——在一个Controller中返回Callable 和 DeferredResult。在这篇文章中,我将实施这...
2020-04-15 15:10:48
1694
原创 解析数据文件
因公司需要同步银联交易流水文件数据,Java后端需要定时解析文件,并将记录更新到mysql数据库。为方便存取数据,所以编写以下代码供大家参考。
2020-04-15 14:55:25
1071
原创 解决vue 打包出错问题
找到webpack.prod.conf.js文件,注释以下代码//const OptimizeCSSPlugin = require(‘optimize-css-assets-webpack-plugin’)//new OptimizeCSSPlugin({// cssProcessorOptions: config.build.productionSourceMap//? { safe...
2019-10-14 10:39:54
3311
原创 解决Linux启动tomcat后,无法访问问题
原因:端口号未开放解决方案,修改配置文件,添加要开放的端口号-A IN_public_allow -p tcp -m tcp --dport 8080 -m conntrack --ctstate NEW -j ACCEPT
2019-10-08 17:39:49
1905
原创 Nginx 安装(Windows、Linux)
windows 安装官方网站下载地址:https://nginx.org/en/download.html如下图所示,下载稳定版的nginx压缩包,解压到自己电脑上存放软件的文件夹中即可解压完成后,文件目录结构如下:启动nginx1、 直接双击该目录下的nginx.exe,即可启动nginx服务器2、 命令行计入该文件夹,执行start nginx.exe命令,也会直接启动nginx...
2019-09-27 16:28:51
961
转载 除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等
除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等 Nginx应该是现在最火的web和反向代理服务器,没有之一。她是一款诞生于俄罗斯的高性能web服务器,尤其在高并发情况下,相较Apache,有优异的表现。那除了负载均衡,她还有什么其他的用途呢,下面我们来看下。一、静态代理Nginx擅长处理静态文件,是非常好的图片、文件服务器。把所有的静态资源的放到nginx上,可以使应用动静分离,...
2019-09-26 19:10:24
873
转载 Cookie、LocalStorage 与 SessionStorage的用法和区别
基本概念CookieCookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右。它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码”,这通常就是通过在 Cookie 中存入一段辨别用户身份的数据来实现的。localStoragelocalStorage 是 HTML5 标准中新加入的技术,它并不是什么划时代的新东西。早在 I...
2019-09-24 10:47:30
901
原创 $.ajax请求,请求头添加Token认证
关于JQ ajax的作用我就不多叙述了,网上有许多的demo,但是对于如何使用token验证访问者身份的demo却寥寥无几,接下来我就献上我现在项目中所使用的案例。
2019-09-06 17:02:38
5839
原创 HttpServletRequest获取参数转Map和实体对象
当前端提交大量数据至后台,且后台无法直接将前端提交的数据映射到具体的实体类时,就该考虑如何获取才能使我们更方便的操作数据。一个一个取是不可能的,这辈子是不可能一个个取的。所以要么转Map,要么转实体。好了话不多说,直接给大伙们上代码。
2019-09-06 16:22:08
5324
转载 Java开发中的23种设计模式详解
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。本章系Ja
2019-08-23 18:52:10
931
转载 序列化和反序列化的简单理解
对象的序列化主要有两种用途:1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;2) 在网络上传送对象的字节序列。在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。当两个进程在进行远程通信时,彼此可以发送各种类型
2019-08-23 18:38:38
980
1
原创 Java 反射机制
Java反射机制指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。
2019-08-23 18:31:13
876
转载 Lombok 介绍
介绍在项目中使用Lombok可以减少很多重复代码的书写。比如说getter/setter/toString等方法的编写。IDEA中的安装打开IDEA的Setting –> 选择Plugins选项 –> 选择Browse repositories –> 搜索lombok –> 点击安装 –> 安装完成重启IDEA –> 安装成功
2019-08-16 10:52:28
1018
原创 IDEA新建项目时,没有Spring Initializr选项
最近创建一个新项目(Create New Project)选择 Spring Initializr。然而我发现我的IDEA上面没有Spring Initializr这个选项。我在网上找了两种解决方案如下:
2019-08-15 11:24:35
1350
转载 Java 枚举(enum) 详解7种常见的用法
在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
2019-08-15 09:48:44
1102
转载 Vue中的几个重要的钩子函数
生命周期 钩子函数 一个组件从创建到销毁的过程就是生命周期。 beforeCreate:创建前 1、当前vue实例化的时候会做一个初始化的操作,在这个生命周期函数里面我们可以做初始化的loading 2、在当前函数里面是访问不到data中的属性,但是可以通过vue的实例对象进行访问
2019-08-15 09:44:31
1384
转载 Springboot 学习系列文章
Springboot 入门https://www.javazhiyin.com/735.htmlSpringBoot启动流程解析https://www.javazhiyin.com/712.htmlSpringBoot自动配置原理https://www.javazhiyin.com/606.htmlSpringboot 整合JdbcTemplatehttps://www.javazh...
2019-08-14 11:04:03
998
原创 java8 新特性 Stream流 分组 排序 过滤 多条件去重 (最小、最大、平均、求和)
java8 新特性 Stream流 分组 排序 过滤 多条件去重 (最小、最大、平均、求和),Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等。取出List某一字段所有值。
2019-08-12 16:52:25
18932
原创 Java执行JavaScript代码:传参、获取变量、返回值、JSON对象
Java 脚本功能是在 javax.script 包中。这是一个比较小的,简单的API。脚本的出发点是 ScriptEngineManager 类,ScriptEngineManager是一个工厂集合,可以通过name或tag的方式获取某个脚本的工厂并生成一个此脚本的ScriptEngine,目前只有javascript的工厂。通过工厂函数得到了ScriptEngine之后,就可以用这个对象来解析脚本字符串了,直接调用Object obj = ScriptEngine.eval(String script)
2019-08-12 15:42:57
6848
原创 String常用方法和常量池总结
String类底层由char[]实现,且被final修饰,所以当对象创建后不能被修改。由于String在Java世界中使用过于频繁,Java为 了避免在一个系统中产生大量的String对象,引入了字符串常量池。其运行机制是:创建一个字符串时,首先检查池中是否有值相同的字符串对象,如果如果有则不需要创建直接从池中刚查找到的对象引用;如果没有则新建字符串对象,返回对象引用,并且将新创建的对象放入池中。但是,通过new方法创建的String对象是不检查字符串池的,而是直接在堆区或栈区创建一个新的对象, 也不会把对
2019-08-09 11:47:07
1173
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人