拔高
文章平均质量分 72
程序猿邱先森
古之立大事者,不惟有超世之才,亦必有坚韧不拔之志!
展开
-
基于JAVA实现机器人自动向微信发送消息,并通过SpringBoot整合RabbitMQ实现自动消费,推送消息
Java中Robot类位于java.awt.Robot,该类用于为测试自动化,自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件,Robot类的主要目的是便于Java平台实现自动测试。1,实现给微信好友发送消息的原理就是利用微信的快捷按键,Robot类就可以很好的控制按键。重点提示:使用robot模拟按下像Ctrl,退格键,删除键这样的功能性按键,Robot可以模拟鼠标和键盘的输入,可以把他看作Java版的按键精灵。在按下后一定要释放,一定要释放,一定要释放。已经有该环境的不需要管。原创 2023-12-15 09:49:18 · 3438 阅读 · 1 评论 -
mybatisPlus批量更新multi-statement not allow问题
由控制台可见,其mybatis默认不支持多条语句的更新,需要设置相关属性。从社区里看到的解决方案大致思路为,先检查本地配置文件的url中是否配置了allowMultiQueries=true,如果配置了,但还是不起作用,再写一个配置类来解决。在配置类MyBatisPlusConfig中 (mybatis 的话就在MyBatisConfig中改,没有配置文件的话就加一个)添加如下配置就可以了。这个时候大多数情况下基本是可以解决问题了的,如果还是报错的话 就直接在配置文件中添加配置。原创 2023-05-30 17:35:52 · 996 阅读 · 0 评论 -
领导:谁再用 Redis 实现过期订单关闭,立马滚蛋
使用 redis 过期监听或者 rabbitmq 死信队列做延时任务都是以设计者预想之外的方式使用中间件,这种出其不意必自毙的行为通常会存在某些隐患,比如缺乏一致性和可靠性保证,吞吐量较低、资源泄漏等。在电商、支付等领域,往往会有这样的场景,用户下单后放弃支付了,那这笔订单会在指定的时间段后进行关闭操作,细心的你一定发现了像某宝、某东都有这样的逻辑,而且时间很准确,误差在1s内;那他们是怎么实现的呢?时间轮是一种很优秀的定时任务的数据结构,然而绝大多数时间轮实现是纯内存没有持久化的。原创 2022-12-29 09:02:29 · 328 阅读 · 0 评论 -
为什么不能使用bigdecimal的equals比较大小
通过以上代码示例,我们发现,在使用 BigDecimal 的 equals 方法对 1 和 1.0 进行比较的时候,有的时候是 true(当使用 int、double 定义 BigDecimal 时),有的时候是 false(当使用 String 定义 BigDecimal 时)。而且不得不说这是一个非常好用的类,其内部自带了很多方法,如加,减,乘,除等运算方法都是可以直接调用的。可以明确的告诉大家,以上这种写法,可能得到的结果和你预想的不一样!这种错误,相信聪明的读者一眼就可以看出问题,原创 2022-12-13 10:05:04 · 401 阅读 · 1 评论 -
Spring官方都推荐使用的@Transactional事务,为啥我不建议使用!
在之前的一个项目中,我就发现我们的 Service 层的事务全都失效了,一个 SQL 执行失败后并没有回滚,排查下来才发现,是因为一位同事新增了一个切面,这个切面里面做个异常的统一捕获,导致事务的切面没有捕获到异常,导致事务无法回滚。其实,如果大家有认真看过阿里巴巴出的那份 Java 开发手册的话,其实就能发现,其中的很多规约并不是完完全全容易被人理解,有些也比较生硬,但是其实,这些规范都是从无数个坑里爬出来的开发者们总结出来的。我们能做的就是,尽量可以通过机制或者规范,来避免或者降低这些问题发生的概率。转载 2022-12-13 09:45:50 · 436 阅读 · 0 评论 -
Java 字符串 split 的一个反直觉陷阱
最近生产环境遇到一个奇怪的数组下标越界报错,如下图代码所示,我们可以肯定的是 fieldName 变量不为空(不是空字符串,也不是 null),但是代码执行到读取 names[0] 变量的时候,抛出了一个 数组下标越界 (java.lang.ArrayIndexOutOfBoundsException) 的异常。异常信息如下图所示问题很简单,我们对一个字符串执行 split 方法之后,以过往其它编程语言(Go、PHP、Javascript、Dart 等)的使用经验来看,即使字符串为空,即使没有匹配到分隔符,原创 2022-12-13 09:41:39 · 601 阅读 · 0 评论 -
关于spring coud hystrix超时问题
如果我们先请求B和C,再请求A,这时用默认的hystrix超时配置,不会超时,因为B和C再被A调用时,已经加载到spring的context中了。所以我们要做的就是扩大hystrix的超时时间设置,分析原因:因为spring的懒加载问题,如果我们在第一次请求时,牵扯到多个微服务的实例化问题时,就会出现超时,因为hystrix的默认超时时间是10ms。一般来说,如果只实例化一个服务,10ms的时间是没问题的,但大多数情况下,我们的业务会涉及多个模块,这时10ms的时间就不够用了。转载 2022-12-13 09:20:52 · 555 阅读 · 0 评论 -
简单说明SpringBoot如何定制自己的bean
springboot每次使用都是直接autowire注入进去的,然后注入进去并不能set & get 来修改属性,这高度封装就产生了一个问题。像之前用Spring,在xml文件配置一下即可,但SpringBoot呢?以最常见的DataSource数据库为例。一般注入DataSource直接在application.properties配置一下数据源即可以使用,返回的为SpringBoot默认的数据源,号称史上最快的HikariDataSource。但假设我想修改里面的配置如何?比如为连接池起一个名字?原创 2022-06-16 16:01:36 · 590 阅读 · 0 评论 -
程序员必会自己设计线性表(顺序表、链表)
本文分享自华为云社区程序员必会自己设计线性表(顺序表、链表)前言通过前面数据结构与算法基础知识我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容。当然,我用自己的理解解分享给大家。其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系!线性表:逻辑结构, 就是对外暴露数据之间的关系,不关心底层如何实现,数据结构的逻辑结构大分类就是线性结构和非线性结构而顺序表、链表都是一种线性表。 顺序表、链表:物理结构,他是实现一个结构实际物理地址上的结构。比如顺序.转载 2021-08-02 10:56:43 · 563 阅读 · 0 评论 -
到底是先更新数据库还是先更新缓存?
本文分享自华为云博客:到底是先更新数据库还是先更新缓存?最近小伙伴最近都在问我,在系统中引入缓存后,当向数据库中写入数据时,是先写数据库还是先写缓存呢?先写数据库和先写缓存有什么区别吗?今天,我们就一起来聊聊这个话题。从本质上讲,无论是先写数据库还是先写缓存,都是为了保证数据库和缓存的数据一致,也就是我们常说的数据一致性。随着互联网的高速发展,当今时代已然从IT时代进入到DT时代。互联网系统架构也已经由最初的单体架构转变为分布式、微服务架构模式。从数据体量上来看,各系统存储的数据量越来越大,原创 2021-08-02 10:48:58 · 589 阅读 · 0 评论 -
Unity与Android Studio交互之 ✨ 获取手机权限(存储、录音、相机等)
Unity通过Android Studio 获取手机权限(存储、录音、相机等)本文分享自华为云社区Unity与Android Studio交互之 ✨ 获取手机权限(存储、录音、相机等),作者: jackwangcumt。常用权限<!--连接网络权限,用于执行云端语音能力 --><uses-permission android:name="android.permission.INTERNET"/><!--获取手机录音机使用权限,听写、识别、语义理解需...转载 2021-08-02 09:51:28 · 2055 阅读 · 0 评论 -
vue2.6+ 实现tinymce5富文本编辑器以及图片上传
安装tinymce npm install tinymce -S npm install @tinymce/tinymce-vue -S下载中文语言包地址:https://www.tiny.cloud/get-ti...下载选中的中文包下载完之后在项目里新建public文件夹1)在public目录下新建tinymce文件夹,并将下载的语言包解压到该目录下2)在node_modules里面找到tinymce,将skins目录复制到public/tinymce里面,目录如下:...转载 2021-08-02 09:47:35 · 876 阅读 · 1 评论 -
JDBCJava连接MySql数据库
【摘要】 JDBCJava连接MySql数据库 工具准备:Mysql(数据库)、 MyEclipse(开发工具)、Navicat(数据库管理工具) 对应的mysql驱动jar包(我的mql是8.0,所以用mysql-connector-java-8.0.13.jar) mysql-connector-java-8.0.13.jar包JDBCJava连接MySql数据库工具准备:Mysql(数据库)、 MyEclipse(开发工具)、Navicat(数据库管理工具)对应的mysql驱动jar包(转载 2021-08-02 09:36:25 · 170 阅读 · 0 评论 -
Java 实战:教你如何进行数据库分库分表
【摘要】 当前的应用都离不开数据库,随着数据库中的数据越来越多,单表突破性能上限记录时,如MySQL单表上线估计在近千万条内,当记录数继续增长时,从性能考虑,则需要进行拆分处理。而拆分分为横向拆分和纵向拆分。本文通过实际案例,说明如何按日期来对订单数据进行水平分库和分表,实现数据的分布式查询和操作。本文分享自华为云社区《数据库分库分表Java实战经验总结 丨【绽放吧!数据库】》,作者: jackwangcumt。 我们知道,当前的应用都离不开数据库,随着数据库中的数据越来越多,单表...转载 2021-08-02 09:32:59 · 3815 阅读 · 0 评论 -
Nginx 502 Bad Gateway错误的原因分析与解决方法
一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。以下是从Google搜集整理的一些Nginx 502错误的排查方法,供参考:Nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的。这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在nginx身原创 2021-01-12 09:49:14 · 5029 阅读 · 0 评论 -
SpringBoot2.x 使用多数据源
一、说明项目是SpringBoot项目,主从数据源都是是MySQL数据库配置文件用的是yml,转properties也比较简单。二、POM依赖<!-- mysql jdbc --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46<原创 2020-12-17 09:34:41 · 386 阅读 · 0 评论 -
十大经典排序算法(动图演示)
0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 .原创 2020-12-14 11:20:17 · 160 阅读 · 0 评论 -
uniapp 调用原生(android)安卓的方法并接收返回值
需要实现的功能:点击uniapp页面view,传递参数,调用android原生代码,然后原生代码处理数据,返回到uniapp页面uniapp 代码:<template> <view class="content"> <view @click="androidNative">点击调用android原生方法</view> </view></template>&原创 2020-12-10 13:17:27 · 14407 阅读 · 2 评论 -
uniapp 小程序 aes前后端加密解密交互
小程序端1. 首先引入aes.js/** * [description] CryptoJS v3.1.2 * [description] zhuangzhudada sort out */var CryptoJS = CryptoJS || function(u, p) { var d = {}, l = d.lib = {}, s = function() {}, t = l.Base = { exten转载 2020-11-23 17:32:59 · 5184 阅读 · 3 评论 -
springboot 自定义注解使用AOP实现请求参数解密以及响应数据加密
一、前言本篇文章将依托与SpringBoot平台,自定义注解用来标识接口请求是否实现加密解密。使用AOP切面来具体操作解密加密,实现对源代码的低耦合,不在原基础上做很大的改动。本篇文章的所有示例,都上传到我的github中,欢迎大家拉取测试,欢迎stargithub实现要求:自定义一个注解@Secret,用来标识需要实现加密解密 作用在Controller类上,表示此Controller类的所有接口都实现加密解密 作用来单一方法上,表示此接口方法需要实现加密解密 使用AOP.转载 2020-11-23 17:28:47 · 7020 阅读 · 8 评论 -
Java实现异步调用方法(jdk1.8)
点击上方“秋秋秋影影影”,并“星标置顶” 喜欢我的都关注我了 阅读本文大约需要 30秒 jdk1.8开始的Future很多时候,我们需要调用一个耗时方法,但是我们并不需要等待它执行完,才继续后面的...原创 2020-10-26 16:38:23 · 7348 阅读 · 0 评论 -
数据库快速迁移10亿级数据
问题分析数据库情况如下:数据库采用Sqlserver 2008 R2,单表数据量21亿。无水平或者垂直切分,但是采用了分区表。分区表策略是按时间降序分的区,将近30个分区。正因为分区表的原因,系统才保证了在性能不是太差的情况下坚持至今。 此表除聚集索引之外,无其他索引,无主键(主键其实是利用索引来快速查重的)。所以在频繁插入新数据的情况下,索引调整所耗费的性能比较低。至于聚集索引和非聚集索引等知识,请各位移步google或者百度。至于业务,不是太复杂。经过相关人员咨询,大约40%的转载 2020-08-25 10:02:28 · 494 阅读 · 0 评论 -
Java 常见内存溢出异常与代码实现
Java 堆 OutOfMemoryErrorJava 堆是用来存储对象实例的, 因此如果我们不断地创建对象, 并且保证 GC Root 和创建的对象之间有可达路径以免对象被垃圾回收, 那么当创建的对象过多时, 会导致 heap 内存不足, 进而引发 OutOfMemoryError 异常./** * @author xiongyongshun * VM Args: java -Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError */public转载 2020-07-09 17:14:34 · 290 阅读 · 0 评论 -
还不了解红黑树?红黑树深入剖析及Java实现
红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。BST二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小,右节点的值要比父节点的值大。它的高度决定了它的查找效率。在理想的情况下,二叉查找树增删查改的时间复杂度为O(logN)(其中N为节点数),最坏的情况下为O(N)。当它的高度为logN+1时,我们就说二叉查找树是平衡的。BST的查找操作T key = a search keyNode r原创 2020-07-09 17:06:47 · 262 阅读 · 0 评论 -
Object?从 JDK 源码角度看 Object
Java的Object是所有其他类的父类,从继承的层次来看它就是最顶层根,所以它也是唯一一个没有父类的类。它包含了对象常用的一些方法,比如getClass、hashCode、equals、clone、toString、notify、wait等常用方法。所以其他类继承了Object后就可以不用重复实现这些方法。这些方法大多数是native方法,下面具体分析。主要的代码如下:public class Object { private static native void registerNati原创 2020-07-09 17:03:41 · 187 阅读 · 0 评论 -
客官里面请,Java 多线程之内置锁与显示锁
Java中具有通过Synchronized实现的内置锁,和ReentrantLock实现的显示锁,这两种锁各有各的好处,算是互有补充,今天就来做一个总结。Synchronized内置锁获得锁和释放锁是隐式的,进入synchronized修饰的代码就获得锁,走出相应的代码就释放锁。synchronized(list){ //获得锁 list.append(); list.count();}//释放锁通信与Synchronized配套使用的通信方法通常有wait(),no转载 2020-07-09 16:58:58 · 108 阅读 · 0 评论 -
别走开!带你了解JVM 内存分代、垃圾回收
关于 JVM 内存模型以及垃圾回收的文章网上很多,自己以前也看过很多,但是却从来也没有系统的去了解学习过,这次正巧看到一本讲解 JVM 的好书 – 周志明老师的《深入理解 Java 虚拟机》,然后就花了点时间,认真系统的学习了一遍,尽管还没有看完,但是已经爱耐不住,觉得要写点东西出来,写的过程是一个思考融汇的过程,也是一个知识升华的过程。这篇主要简单分享一下关于 JVM 内存模型、内存溢出、内存分代、以及垃圾回收算法的相关知识。当然在原书中,这几部分作者都花了不少篇幅去讲解。如果这篇文章让你对相关知识产转载 2020-07-09 16:13:12 · 130 阅读 · 0 评论 -
Java 多线程并发编程之互斥锁 Reentrant Lock
Java 中的锁通常分为两种:通过关键字 synchronized 获取的锁,我们称为同步锁,Java 多线程并发编程 Synchronized 关键字。 java.util.concurrent(JUC)包里的锁,如通过继承接口 Lock 而实现的 ReentrantLock(互斥锁),继承 ReadWriteLock 实现的 ReentrantReadWriteLock(读写锁)。本篇主要介绍 ReentrantLock(互斥锁)。ReentrantLock(互斥锁)ReentrantL转载 2020-07-09 16:06:19 · 322 阅读 · 0 评论 -
Java 多线程并发编程之 Synchronized 关键字
synchronized 关键字解析同步锁依赖于对象,每个对象都有一个同步锁。现有一成员变量 Test,当线程 A 调用 Test 的 synchronized 方法,线程 A 获得 Test 的同步锁,同时,线程 B 也去调用 Test 的 synchronized 方法,此时线程 B 无法获得 Test 的同步锁,必须等待线程 A 释放 Test 的同步锁才能获得从而执行对应方法的代码。综上,正确使用 synchronized 关键字可确保原子性。synchronized 关键字的特性应转载 2020-07-09 16:09:33 · 173 阅读 · 0 评论 -
还不了解NIO ?Java NIO 核心组件详解看一下
背景知识同步、异步、阻塞、非阻塞首先,这几个概念非常容易搞混淆,但NIO中又有涉及,所以总结一下[1]。同步:API调用返回时调用者就知道操作的结果如何了(实际读取/写入了多少字节)。 异步:相对于同步,API调用返回时调用者不知道操作的结果,后面才会回调通知结果。 阻塞:当无数据可读,或者不能写入所有数据时,挂起当前线程等待。 非阻塞:读取时,可以读多少数据就读多少然后返回,写入时,可以写入多少数据就写入多少然后返回。对于I/O操作,根据Oracle官网的文档,同步异步的划分标准是“调转载 2020-07-09 15:52:19 · 212 阅读 · 0 评论 -
不知道如何编写高性能Java代码?也许这些能帮到你
摘要:本文首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践。最后研究了JVM特定的调优技巧、数据库端的优化和架构方面的调整。以下是译文。介绍在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法。我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定性能瓶颈。我们还将看到一些常见的Java代码优化方法以及最佳编码实践。最后,我们将看看用于提升Java应用程序性能的JVM调优技巧和架构调整原创 2020-07-09 15:38:26 · 160 阅读 · 0 评论 -
SpringBoot2.x配置Shiro实现权限管理,根据URL鉴权
之前使用 Shiro 鉴权的时候,一直用的是注解,如 @RequiresPermissions() 和 @RequiresRoles(),这种方法不利于维护和动态修改,代码侵入性强。所以,为了解决这个问题,通常都会采用URL鉴权,当写一个拦截器,获取请求的URL,然后查询当前登录用户的权限列表,判断请求的URL是否在权限列表的URL内,如果在则放行,否则拦截。之前介绍了SpringSecuri...转载 2020-01-06 14:30:38 · 1943 阅读 · 2 评论 -
CXF整合spring 客户端
Socket 服务端:提供服务的一段开启服务web Service规范:Jax-ws soap协议,JaxM&SAAJ . jax-rsJSON.parseobject(json返回值,对象名.class):根据对象转出对象对接web Service:作为客户端连接服务器端接口配置接口地址:http://localhost:8080/jk_...原创 2019-12-31 10:45:46 · 202 阅读 · 0 评论 -
solr安装到Linux及其配置(ik分词器的配置)
为避免安装程序之间的互相错乱,新建了一个目录,并在其目录下进行solr的安装,下面的操作都是在该目录下进行命令操作的。创建目录命令:mkdir目录名1.导入solr和tomcat的压缩包到Linux服务器中,并解压解压命令:tar -zxvf要解压的压缩包名2.打开solr文件下的example/webapps 把下面的 solr.war包拷贝一份到tomcat的we...原创 2019-12-31 10:25:31 · 256 阅读 · 0 评论 -
论程序员找女朋友
卡耐基曾经提到过,一个不注意小事情的人,永远不会成就大事业。这似乎解答了我的疑惑。 总结的来说, 每个人都不得不面对这些问题。 在面对这种问题时, 我们都知道,只要有意义,那么就必须慎重考虑。 维龙曾经说过,要成功不需要什么特别的才能,只要把你能做的小事做得好就行了。这似乎解答了我的疑惑。 那么, 罗素·贝克曾经说过,一个人即使已登上顶峰,也仍要自强不息。这启发了我, 贝多芬曾经提到过,卓越的人一...原创 2019-12-30 15:10:30 · 1043 阅读 · 1 评论 -
uniapp / mui 与原生安卓/ios进行数据交互
近日公司要做款app,又不原因招移动端开发人员,让我们一群后端自己进行开发,头疼啊,我做java的好不好,坑啊,最后本着领导之令大于天(滑稽一笑)的原则还是默默的承受了我这个年纪不该承受的痛苦。开始做吧。后台图快捷使用uniapp进行混编开发,这一块没得说,一端开发多端使用,本来开开心心的马上做完了,结果公司说要集成vpn登陆(此处翻桌子),没办法开始把uniapp编译为原生的进行集成。前面都好说...原创 2019-11-04 10:59:45 · 8976 阅读 · 11 评论 -
数据搬家,后台复制表格数据到另一张表里
数据搬家:就是把一个表的数据移到另一张表中案列:把ExtCproducts :合同表的附件表 的数据复制一份到 ExtEproduct :运单表中的附件表里 exportProduct :运单表 //获取合同表的附件表 的数据 Set<ExtCproduct> extCproducts = contractProduct2.getExtCpro...原创 2018-11-22 11:42:30 · 447 阅读 · 0 评论 -
shiro权限认证及授权的执行流程分析及图解(一)
(配置文件请看下一个博客)https://blog.csdn.net/weixin_41716049/article/details/84336696为了颜色标识注释,前面没有使用代码框,多多担待《一,认证》1.先建两个class文件 一个写AuthRealm (授权与认证方法,并继承)extends AuthorizingRealm获取其默认方法doGetAu...原创 2018-11-22 11:45:24 · 33161 阅读 · 25 评论 -
shiro认证配置文件(二)
shiro:的配置1.导包:shiro.All 1.2.32.配置过滤器:在web.xml中 ,注意这段过滤器要写在struts2的过滤器前面。 <filter><filter-name>shiroFilter</filter-name><filter-class&...原创 2018-11-22 11:46:44 · 1311 阅读 · 1 评论 -
数据增删改查细节点,级联
最近想起来了数据增删改查的一些细节点操作,写出来做个记录吧 1.在增加查询或者修改数据时想默认添加一组数据的时候可以写下面的代码:需求:只查询到state=1的数据 Specification<User> spec = new Specification<User>() { ...原创 2018-11-22 11:50:40 · 421 阅读 · 0 评论