@JAVA学习
文章平均质量分 61
g-Jack
硕士毕业于北京交通大学,拥有6年开发工作经验,热爱编程,乐于分享,擅长微服务和中间件。
展开
-
Spring循环依赖流程分析
问题我们都知道在spring中,如果两个bean,相互依赖,那么就会出现循环依赖问题,如果spring对这种问题不进行处理的话,那么就会导致创建bean失败,所以这就是传说中的三级缓存解决循环依赖的问题。问题一:相互依赖从上面的流程图中我们就遇到了循环依赖的问题,也就是在创建BService的时候,依赖了AService,难道我们再次触发创建AService的流程吗,答案是肯定不行,为了解决这个问题,我们就需要知道哪些bean是正在创建中。在上面流程中,...原创 2021-11-09 23:50:32 · 25355 阅读 · 0 评论 -
Linxu搭建maven环境,实现服务器修改代码
背景最近很多saas端的银行客户由于安全要求,将系统从云端部署到行内环境,但是很多银行的部署都需要协调行内的人去拷贝文件,有时候需要等很久才能上传上去,这样对于我们这种没有非常大量测试的项目团队来说非常的耗费时间,并且有时间行内的数据和需求说变就变,这就要求我们随时修改一些代码,但是走变更需要很长的流程,所以我就在想可以直接在linux服务器上修改代码 ,这样对于一些小改动的地方就可以随时支持了,所以我们需要搭建一个maven环境就OK了,将源代码放上去就可以了。1.前言这里,已经提前下载并安装原创 2021-10-24 15:41:36 · 26151 阅读 · 0 评论 -
java从腾讯邮箱获得文件
package com.jack.platformweb.email.service;import com.sun.mail.imap.IMAPStore;import com.jack.common.redis.service.RedisService;import com.jack.common.utils.DateUtils;import com.jack.common.utils.JsonUtils;import com.jack.common.utils.ZipUtils;impo.原创 2021-10-12 22:05:06 · 26891 阅读 · 0 评论 -
SSM集成kafka——注解,xml配置两种方式实现
引言最近在和甲方 对接数据的时候,甲方要求通过kafka将处理完成数据回传,所以我们需要在项目中集成kafka,由于之前项目采用的是SSM框架,并且么有集成过kafka,所以在这里分享一下。一、XML配置文件方式实现1、引入jar 这两有两个地方需要注意 1) kafka-clients 包版本与服务器端kafka-clients版本保持一致(查看服务器kafka版本方法 在kafka安装目录下libs 中查找kafka-clients开头的jar文件) 2)引入的sp...原创 2020-09-11 16:53:13 · 1796 阅读 · 4 评论 -
将mp3格式的音频转换为采样率8k的wav
需求最近系统上需要增加一个功能,就是测试我们系统的ASR识别引擎,这就需要上传一段音频,然后我们返回识别后的文字,但是我们的识别引擎需要采样率16k,格式为wav的音频文件,但是我们又不能限定用户上传的录音格式,所以需要我们在后台转换一下格式,然后再去识别。1、MP3转换wav做这个功能时候, 发现网上的资料真的很少,所以,只能安全上网了,在外面找到了方法。1.1 引入jar:<dependency> <groupId>javazoom&原创 2020-08-28 16:59:19 · 2547 阅读 · 0 评论 -
如何解决MD5后只有31位的坑
引言在和银行进行数据传输的时候, 签名采用了参数MD5的方式,具体做法参考我的博客《请求参数按照ASCII码从小到大排序后追加秘钥再进行加密得到签名值》由于在和行内进行交互的时候,起作用的一些 接口并没有采用验签的环节,所以签名的问题也一直没有暴露 出来,最近要上一个新接口,需要用到签名,在进行批量测试的时候,有些数据签名验证失败,而大部分数据是可以验签成功的, 这让我一时半会有些不解啊,最后我对比成功和失败的签名发现,失败的签名竟然只有31位,而MD5 一般是16位或者32位,那么问题肯定是出现在原创 2020-08-24 20:41:13 · 2510 阅读 · 0 评论 -
JAVA对接阿里语音识别引擎
1、官网SDK地址https://help.aliyun.com/document_detail/84430.html?spm=a2c4g.11186623.6.581.73f65edftbwk9R阿里的SDK比腾讯好一些,可以直接从中央仓库直接下载,并且demo 写的比较详细,在开始对接之前,我们需要仔细的看接口说明下面我们文档,这样可以减少开始对我们对接中的坑,下面开始对接:2、 先搞jar包<dependency> <groupId>co.原创 2020-08-19 16:47:28 · 2435 阅读 · 0 评论 -
JAVA对接腾讯语音实时识别引擎
一、官网地址https://cloud.tencent.com/document/product/1093/35727需要对接的朋友们,需要咨仔细的看一下文档,主要是一些重要参数,但是小编觉得,腾讯的这个SDK 真的不太友好,demo给的也不是很直接,需要我们自己再次封装,并且SDK不能从中央 仓库直接获取,需要我们自己下载源码,自己搞。。。。二、对接流程2.1 先搞jar我们需要从官网地址下载SDK源码,然后将源码导入我们的IDE中,将out文件夹中的real_asr_sdk_1.6.原创 2020-08-19 15:38:16 · 1270 阅读 · 0 评论 -
客服实时转译辅助系统架构
1、需求最近给银行客服部门做了一个“实时辅助系统”,具体需求就是,当有客户拨打客服电话的来咨询一些问题的时候,我们将用户和客服聊天的内容 实时显示到系统上,并且根据聊天内容,给客服展示出提示话术。2、需求分析首先我们看一下右下角聊天内容这一部分,这部分的要求时,在拨打电话的过程中实时的将聊天语音转换文字并且实时展示,所以我们需要采用websocket接口,FS将语音流通WS接口发给我后端,后端通过WS接口调动ASR识别引擎。3、架构 4、流程...原创 2020-08-18 16:55:12 · 271 阅读 · 0 评论 -
【高并发趣事一】——Amdahl(阿姆达尔定律)与Gustafson(古斯塔夫森定律)
在高并发程序设计中有非常重要的两个定律,这个两个定律从不同角度诠释了加速比与系统串行化程度、CPU核心数之间的关系,他们使我们在做高并发程序设计的理论依据:Amdahl(阿姆达尔定律) Gustafson(古斯塔夫森定律)一、Amdahl(阿姆达尔定律)1.1 加速比定义 加速比 = 优化前系统耗时 / 优化后系统耗时所谓加速比就是优化前的耗时和优化后的耗时的比值。加速比越高,表明优化效果越明显。下图是该公式的推导过程:其中n表示处理器个数,T表示时间,T1表示优化前耗时(...原创 2020-07-19 19:49:53 · 2673 阅读 · 0 评论 -
Mybatis Generator 自定义插件——指定查询字段
引言最近在使用Mybatis Generator 自动生成的方法中,发现不能指定查询字段,selectByExample将整个表的字段都 返回了,如果想要查询某个表的指定字段,就需要自己手动写sql,这样觉得不方便,所以小编参考了Mybatis Generator 的源代码,自己写了一个插件满足需求。相关注释在代码中都有,这里就不多说了,直接上代码:package com.zqf.db.plugin;import org.mybatis.generator.api.Introspected原创 2020-07-16 14:38:02 · 2923 阅读 · 1 评论 -
linux 创建SFTP
====================纯记录==================1、创建sftp组groupadd sftp2、创建一个sftp用户,用户名为gzcb,密码jdt1#$d修改用户密码和修改Linux用户密码是一样的。useradd -g sftp -s /bin/falsegzcb //用户名passwdgzcb //密码3、sftp组的用户的home目录统一指定到/data/sftp下,按用户名区分,这里先新建一个gzcb目录,home为/data...原创 2020-07-10 18:49:05 · 445 阅读 · 0 评论 -
多线程环境下HashMap导致CPU100%
引言昨天早上线上系统开始作业了一段时间以后,突然收到服务器报警,服务器CPU持续占用100%,导致线上系统不能正常使用,我登录服务器top了一下,发现java进程占用cpu400%, 由于前天晚上上线了一些新的功能,所以我分析应该是某处代码出现了死循环导致,于是根据前面解决性能问题的经验来搞一下。具体流程参考我前面的博文《快速定位线上CPU100%问题》。排查结果:快速找到具体的代码,那么问题就可以很好的解决了,看一下具体代码public static Map<String,原创 2020-07-09 09:31:54 · 8089 阅读 · 0 评论 -
JAVA线程池总结及自定义线程池
引言在前几年小编写过一篇关于线程池的总结:《线程总结》,现在回过头来看,总结的 还是比较详细的,不过当时并没有在项目中有过真实刺激的 体验,最近项目中偶然遇到了一次任务丢失的问题,我追踪了一下 代码, 发现由于不正当采用java内置线程池导致的, 应该是当时配置线程池的参数没有仔细计算导致的,关于这个问题我们后面博文在介绍,今天我们在看我java 内置 线程池代码以后,我们先动手自己写一个线程池来实现任务的提交和执行。这样我们可以更好的理解线程池的执行流程。如果读者对于java内置的线程的核心参数和执行原创 2020-06-30 16:17:51 · 144983 阅读 · 2 评论 -
利用二分查找获得List中小于并且最接近的数
引言最近在老系统中看到了一大段代码,这个代码的目的是迁移迁移历史,在迁移的过程中需要很多计算,我大概看了一下代码,里面到处都是for 循环,虽然for循环的逻辑比较简单,但是循环的次数太多了, 这就导致这个方法非常的慢,其中有一个地方就是通过循环获得日期。如果list中有5000个日期,恰好这个要查找的日期在最后面一个,那么肯定完蛋。 如果通过二分查找肯定会会少很多循环。目标:找到集合中早于目标日期,并且最接近的一个日期,如果没有早于的则不返回代码:package com.zqf.pl原创 2020-06-22 11:58:14 · 143684 阅读 · 1 评论 -
通过shell的&命令执行“./startup.sh & tail -f ../logs/catalina.out”时造成tomcat的所属的jvm关闭并且对于的服务挂掉了
引言前两天有个显示系统最近升级完成以后,每天晚上tomcat自动shutdown, 非常奇怪的一个问题,因为系统晚上有很多定时任务需要执行,这就导致很多数据统计都错了,并且会影响第二天的使用, 连续两天出现这样的情况,第一次,正好是我们晚上升级系统,所以假定认为使我们升级导致的,但是第二天我们 并没有更新代码,系统仍然down掉了,这就非常严重了,于是,我接入了排查。先看一下日志:刚开始看到这个日志的时候,我们全部注意力都被上面的警告吸引,于是,认为是数据库连接池有问题,在检查了项目中的相关配.原创 2020-06-19 14:50:54 · 144151 阅读 · 0 评论 -
WebSocket在建立连接时通过@PathParam获取页面传值
最近在做的两个系统中都用到了webSocket,一个是实时转译系统,该系统就是通过收集端收音,然后实时将录音转换成文字显示到页面上,第二个是智能客服系统。由于之前用webSocket比较少,一直以为在创建连接的时候,不能传递参数,直到有一天看源码的时候,发现了新大陆,下面分享一下1、在被websocket映射的Java类中的注解如下:@ServerEndpoint("/websocket/{relationId}/{userCode}")2、在该Java类中的方法中:@OnOpenpu原创 2020-06-12 21:03:59 · 133476 阅读 · 0 评论 -
JAVA实现PGP/GPG加解密加验签
一、引言上一篇博客中介绍了GPG的基本使用,在原来的项目中我们对接gpg加密的时候,采用的方式,利用java代码执行shell命令行,但是在新对接的项目中,这种方式对方利用 命令行能解密,但是利用他们的代码不能解密,原因是他们代码生成并不是pgp后缀 的加密文件, 而是pgp格式的加密文件。所以小编也利用java生成一个加密文件,这样双方可以愉快的加解密了。二、代码实现2.1 mave...原创 2020-03-13 11:05:24 · 150312 阅读 · 4 评论 -
GPG密钥的生成与使用
引言最近在对接银行向的时候,行内要求采用PGP方式对数据文件进行加密,首先我们需要生成密钥对,然后导出公钥给对方,导出私钥以供后面程序解密使用。关于GPG基本的介绍,在这里就不介绍了,大家自行百度就行了,本文主要分享项目中用的干货。创建密钥对$ gpg --gen-key 操作实例:[fan 18:58:33]~$ gpg --gen-key gpg (Gn...原创 2020-03-13 10:54:58 · 147796 阅读 · 2 评论 -
java 发送邮件附件 文件名过长的坑
引言今天在发送邮件的时候,发现 excel附件名称乱套了,导致文件失效, 之前发送都是正常的,因为是平台封装的发送邮件的工具类,所以一脸懵逼,别的项目好好的发送,今天突然出现错误。 经过多次尝试发现,发送成功和失败的区别在于文件名称不同,于是我们把文件名称修改的很短后发现竟然发送成功了,是不是很坑,然我回头去看发送邮件的工具类,发现有个设置 没有打开。错误原因:...原创 2019-12-20 22:03:13 · 8125 阅读 · 1 评论 -
zookepeer启动节点报错,unable to run quorum server
引言今天在部署新的项目的时候,直接将原来的机器做了一个镜像,然后 利用该镜像直接安装新机器。该机器上有zk的三个节点,在修改完ip地址以后,启动zk节点时候报错:错误关键信息:Unable to run quorum server解决方法:1. 在配置文件/usr/local/zookeeper-3.4.6/conf/zoo.cfg,找到下面两个配置的值dataD...原创 2019-12-18 12:11:08 · 6923 阅读 · 0 评论 -
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
引言今天在新机器上部署项目的是,安装完ES集群以后, 启动的时候出现下面错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]错误原因错误elas提示的意思就是:ES用户拥有的内存权限太小,至少需要262144;解决:切换到root用户执...原创 2019-12-18 12:03:46 · 6132 阅读 · 0 评论 -
通过反射获得并调用类的方法导致@Autowired注入失效的解决方案
引言最近在优化公司平台项目,由于该平台是to B性质,所以有些需求需要 定制化开发,为了使代码向上兼容并且更加的灵活,所以用到了反射,但是在使用过程中遇到了@Autowired失效问题。问题解析:其实出现这个问题的原因很简单,就是我们通过获得的类没有纳入spring容器管理,下面来看一下错误代码:反射代码如下: //为了测试写死了 ...原创 2019-12-14 12:05:45 · 10430 阅读 · 5 评论 -
Java解析XML(4种方法)
<?xml version="1.0" encoding="utf-8" ?><class> <student> <firstname>cxx1</firstname> <lastname>Bob1</lastname> <...转载 2019-12-05 13:09:49 · 604 阅读 · 0 评论 -
java性能监控利器Arthas
引言性能调优是一个非常复杂,技术含量很高的高作,涉及到的知识面很广,而性能调优的第一步工作就是发现问题和定位问题,确定性能问题出现在那一部分,需要定位到具体的函数,类,SQL,某些参数的配置等等。那么我们在实际工作中怎么定位问题呢?肯定不能靠猜测和想象,尤其是我们线上出现了一些不是很容易复现的性能问题时。比较专业的开发人员肯定是会借助一些工具,以JAVA语言来说,如jdk自带的jvisualv...原创 2019-11-10 17:48:36 · 159649 阅读 · 0 评论 -
常见OOM 原因及解决方案
当 JVM 内存严重不足时,就会抛出 java.lang.OutOfMemoryError 错误。本文总结了常见的 OOM 原因及其解决方法,如下图所示。如有遗漏或错误,欢迎补充指正。1、Java heap space当堆内存(Heap Space)没有足够空间存放新创建的对象时,就会抛出java.lang.OutOfMemoryError:Javaheap space错误(根据实...转载 2019-11-01 23:17:20 · 11111 阅读 · 0 评论 -
【ElasticSearch实战】——java操作ES基本查询在项目中应用
引言最近小编负责的一个语音质检 项目中用到了ES,下面结合实例代码分享一下java操作ES查用的查询写法。关于es的基本操作,例如新建索引、查询封装类,请参考前面博客:【ElasticSearch实战】——封装java操作es基础架构1、ES在项目中的位置 2、项目查询需求从上面查询条件来看,其中包括了精确查询,模糊查询及时间范围查询等,这些...原创 2019-10-24 22:55:58 · 174281 阅读 · 0 评论 -
JAVA判断号码是手机还是固话并查询归属地
引言最近在做呼叫中心项目,其中有一个环节是根据根据FS传入的 被叫号码来确定使用哪个线路呼叫,我们需要判断被叫号码是手机号码还是固话,并且需要判断号码的归属地, 我们需要把这些参数 传递给规则引擎,然后返回需要的线路。基本思路首先 判断被叫号码 是否是手机号,如果是手机号则返回前7位 用来做归属地查询,如果是固话返回区号用来归属地查询。业务代码: //校验被叫号码固话还是手...原创 2019-10-19 09:56:23 · 2882 阅读 · 0 评论 -
解决使用Properties读取中文乱码问题
引言最近在维护一个两年前的系统,需要 调整配置文件中的内容,在编辑的时候, 发现在服务器上中文都是unicode类型显示,所以根本不能维护,当我将unicode 转换为中文显示的时候,发现程序读取出来的是乱码。我的项目使用的编码也是utf-8,但是我用Properties读取中文的时候,打印出来的总是乱码。后来网上查了一下,得到如下结论:Properties 默认是按ISO-8859-1读...原创 2019-10-14 10:02:28 · 3738 阅读 · 1 评论 -
代码神器——Lombok
在我们 Java 项目里面,有很多 Java Bean 需要为每个属性生成 get/ set 方法,增删改属性都需要维护这些 get/ set 方法甚是麻烦。今天给大家介绍一款能帮助我们简化这些代码的神器:Lombok!有了这个神器,你的 Java Bean 类的代码量至少可以省一半。什么是Lombok?官网:https://www.projectlombok.org/翻译过来就是说,...原创 2019-01-30 10:47:11 · 897 阅读 · 1 评论 -
java中list和逗号分隔字符串相互转换
1、将逗号分隔的字符串转换为ListString str = "a,b,c"; List<String> result = Arrays.asList(str.split(","));2、将List转换为逗号分隔的字符串(1) 利用Guava的JoinerList<String> list = new ArrayList<String>()...原创 2019-02-14 17:51:29 · 3726 阅读 · 2 评论 -
Invalid bound statement (not found)错误的可能原因
今天在执行sql的时候遇到这个问题,按说非常简单,但是出现问题的原因却不是唯一的,所以总一下:1.检查xml文件所在package名称是否和Mapper interface所在的包名<mapper namespace="me.tspace.pm.dao.UserDao"> mapper的namespace写的不对!!!注意系修改。2.UserDao的方法在UserDa...原创 2019-02-14 17:48:07 · 94185 阅读 · 28 评论 -
xxl-job Demo搭建流程
引言在上一篇博客中介绍了通过 spring schedule+mysql实现动态修改cron表达式,在文章末尾提出这样的修改不能即时生效,需要在上一次执行周期完成后生效,对于当期的需求是可以满足的,但是如果想即时生效比较麻烦,记得之前看过类似的技术文章,所以在这遍研究了一下xxl-job.,我们首先先搭建起来非常简单:1、下载源码 源码地址:https://github.com/xux...原创 2019-01-28 19:41:32 · 5023 阅读 · 0 评论 -
spring schedule 动态配置执行时间
引言之前saas平台实现动态修改定时任务的时间,都是通过xx-job这样的框架来实现,这样我们可以单独一个服务来管理我们整个saas平台的定时任务,但是最近给银行做的一个小项目,需要本地化部署,所以我不想弄很多的服务,并且他们并没有要求修改以后即时生效,所以我直接采用了 spring schedule结合mysql动态配置执行时间。之前我们用的schedule通过注解的方式,只能用静态的c...原创 2019-01-23 09:46:49 · 16240 阅读 · 7 评论 -
JAVA 内存泄露详解(原因、例子及解决)
Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存。理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同。 JAVA 中的内存管理 要了解Java中的内存泄露,首先就得知道Java中的内存是如何管理的。 在Java程序中...转载 2018-12-31 16:50:05 · 1005 阅读 · 1 评论 -
EJB到底是什么,真的那么神秘吗??
原文地址:http://blog.csdn.net/jojo52013145/article/details/57836771. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么,总得说说什么是所谓的"服务集群"和"企业级开发"吧!这个问题其实挺关键的,因为J2EE 中并没有说明白,也没有具体的指标或者事例告诉转载 2017-01-01 10:17:49 · 1893 阅读 · 12 评论 -
Tomcat异常——ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
今天在测试环境部署项目的时候,tomcat启动报错,错误信息如下:小编觉得非常简单的一个事情,结果掉在坑里面了!再部署的时候我直接复制了一个项目的文件夹,修改了一下配置文件和端口,也就几分钟的时候,结果启动的时候没有起来,这就尴尬了,一直提示端口重复,我尝试修改了server.xml中的几个端口,发现上面的错误还是存在。尝试了几遍不好使,我就仔细的看了看这个错误,发现提示JDWP 远程...原创 2019-03-13 20:56:27 · 12032 阅读 · 1 评论 -
java解压加密的7z格式文件
引言最近在 项目中需要解压带有密码的.7z文件,然后获得里面的数据,之前都是zip 文件没有接触过解压7z类型的 文件,在这分享一下解压工具类,该 工具类可以同时解压带有密码的7z文件和zip文件。 1、pom文件中加入解压需要的三个jar<dependency> <groupId>net.sf.sevenzipjbinding<...原创 2019-03-24 16:04:23 · 5786 阅读 · 2 评论 -
java实现RSA加密、解密、签名
一、RSA简介 RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。二、加密和签名的区别 加密和签名都是为 ...原创 2019-05-05 10:21:34 · 6605 阅读 · 4 评论 -
kafka为什么这么快
Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间,但是实际上,Kafka的特性之一就是高吞吐率。即使是普通的服务器,Kafka也可以轻松支持每秒百万级的写入请求,超过了大部分的消息中间件,这种特性也使得Kafka在日志处理等海量数据场景广泛应用。针对Kafka的基准测试可以参考,Apache Kafka基准测试:每秒写入2百...原创 2019-05-12 22:34:36 · 605 阅读 · 1 评论