7 g-Jack

尚未进行身份认证

我要认证

硕士毕业于北京交通大学软件工程专业,拥有5年java工作经验,热爱编程,乐于分享,喜欢研究架构方向的优化,和大数据高并发架构的设计。

等级
TA的排名 480

【面试必备】——快速排序算法

快速排序介绍快速排序使用的是分治策略它的基本思想:选择一个基数,通过一趟排序将要排序的数据分隔成 独立的两部分;其中一部分的所有 数据比另外一部分的所有数据都要小。 然后,按照此方法对这两部分数据分别就行快速排序,整个过程可以递归进行,以此达到整个数据变成有序序列快速排序的流程1)选择一个基准值(一般就采用第一个数)2)将所有比基准值小的数 移动到基准值前面,所有比基准值大的数移动到基准值后面(相同的数据可以放在任何一边);在这个分区退出以后,该基准就处在数列的中间位置3)采用递归方

2020-09-16 14:47:04

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

将mp3格式的音频转换为采样率8k的wav

需求最近系统上需要增加一个功能,就是测试我们系统的ASR识别引擎,这就需要上传一段音频,然后我们返回识别后的文字,但是我们的识别引擎需要采样率16k,格式为wav的音频文件,但是我们又不能限定用户上传的录音格式,所以需要我们在后台转换一下格式,然后再去识别。1、MP3转换wav做这个功能时候, 发现网上的资料真的很少,所以,只能安全上网了,在外面找到了方法。1.1 引入jar:<dependency> <groupId>javazoom&

2020-08-28 16:59:19

如何解决MD5后只有31位的坑

引言在和银行进行数据传输的时候, 签名采用了参数MD5的方式,具体做法参考我的博客《请求参数按照ASCII码从小到大排序后追加秘钥再进行加密得到签名值》由于在和行内进行交互的时候,起作用的一些 接口并没有采用验签的环节,所以签名的问题也一直没有暴露 出来,最近要上一个新接口,需要用到签名,在进行批量测试的时候,有些数据签名验证失败,而大部分数据是可以验签成功的, 这让我一时半会有些不解啊,最后我对比成功和失败的签名发现,失败的签名竟然只有31位,而MD5 一般是16位或者32位,那么问题肯定是出现在

2020-08-24 20:41:13

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

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

客服实时转译辅助系统架构

1、需求最近给银行客服部门做了一个“实时辅助系统”,具体需求就是,当有客户拨打客服电话的来咨询一些问题的时候,我们将用户和客服聊天的内容 实时显示到系统上,并且根据聊天内容,给客服展示出提示话术。2、需求分析首先我们看一下右下角聊天内容这一部分,这部分的要求时,在拨打电话的过程中实时的将聊天语音转换文字并且实时展示,所以我们需要采用websocket接口,FS将语音流通WS接口发给我后端,后端通过WS接口调动ASR识别引擎。3、架构 4、流程...

2020-08-18 16:55:12

【高并发趣事三】——双重检查锁定与延迟初始化

一、引言在JAVA多线程程序中,有时候需要采用延迟初始化来降低初始化类和创建对象的 开销。双重检查锁定就是延迟 初始化技术。二、双重检查锁定的由来在jav进程中,有时候可能 需要推迟一些高开销对象的初始化操作,并且只有在使用这些对象时才进行初始化,此时,程序员可能会采用延迟初始化。还有一个经典的使用场景就是单利模式下的,为了提高性能 ,采用双重检查锁定模式。但是在使用的过程中我们需要一些技巧,否则很容易出现问题。上面代码在多线程环境下,我们很容易出现问题,所以改进代码。由于对ge

2020-07-23 17:53:19

【高并发趣事二】——JMM及程序中的幽灵

引言在我们开始写正文之前,我们先看几行代码,各位读者是否能看出问题呢?第一段: public static void main(String[] args) { int v1 = 1073741827; int v2 = 1431655768; System.out.println(v1 + v2); }在各位读者看来,应该输出什么呢?第二段public class ThreadTestService { int

2020-07-23 11:35:25

【高并发趣事一】——Amdahl(阿姆达尔定律)与Gustafson(古斯塔夫森定律)

在高并发程序设计中有非常重要的两个定律,这个两个定律从不同角度诠释了加速比与系统串行化程度、CPU核心数之间的关系,他们使我们在做高并发程序设计的理论依据:Amdahl(阿姆达尔定律) Gustafson(古斯塔夫森定律)一、Amdahl(阿姆达尔定律)1.1 加速比定义 加速比 = 优化前系统耗时 / 优化后系统耗时所谓加速比就是优化前的耗时和优化后的耗时的比值。加速比越高,表明优化效果越明显。下图是该公式的推导过程:其中n表示处理器个数,T表示时间,T1表示优化前耗时(...

2020-07-19 19:49:53

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

Mybatis generator mapper文件重新生成不会覆盖原文件

引言最近在做新项目的时候, 由于需求不太确定,时间又非常紧张,需求总是在变动, 这就导致我数据库也需要变动,而我们DB采用了mybais generator 自动生成插件,但是我发现每次重新生成的时候需要先删除老的几个文件, 否则系统就会报错,这是因为,在重新生成的时候,该插件默认不是覆盖原文件而是采用追加的方式,将新的内容追加到原文件中。于是将该插件源代码下载下来看了下,找到问题的原因: 在IntrospectedTableMyBatis3Impl.getGeneratedXmlFil

2020-07-16 11:33:58

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

多线程环境下HashMap导致CPU100%

引言昨天早上线上系统开始作业了一段时间以后,突然收到服务器报警,服务器CPU持续占用100%,导致线上系统不能正常使用,我登录服务器top了一下,发现java进程占用cpu400%, 由于前天晚上上线了一些新的功能,所以我分析应该是某处代码出现了死循环导致,于是根据前面解决性能问题的经验来搞一下。具体流程参考我前面的博文《快速定位线上CPU100%问题》。排查结果:快速找到具体的代码,那么问题就可以很好的解决了,看一下具体代码public static Map<String,

2020-07-09 09:31:54

JAVA线程池总结及自定义线程池

引言在前几年小编写过一篇关于线程池的总结:《线程总结》,现在回过头来看,总结的 还是比较详细的,不过当时并没有在项目中有过真实刺激的 体验,最近项目中偶然遇到了一次任务丢失的问题,我追踪了一下 代码, 发现由于不正当采用java内置线程池导致的, 应该是当时配置线程池的参数没有仔细计算导致的,关于这个问题我们后面博文在介绍,今天我们在看我java 内置 线程池代码以后,我们先动手自己写一个线程池来实现任务的提交和执行。这样我们可以更好的理解线程池的执行流程。如果读者对于java内置的线程的核心参数和执行

2020-06-30 16:17:51

利用二分查找获得List中小于并且最接近的数

引言最近在老系统中看到了一大段代码,这个代码的目的是迁移迁移历史,在迁移的过程中需要很多计算,我大概看了一下代码,里面到处都是for 循环,虽然for循环的逻辑比较简单,但是循环的次数太多了, 这就导致这个方法非常的慢,其中有一个地方就是通过循环获得日期。如果list中有5000个日期,恰好这个要查找的日期在最后面一个,那么肯定完蛋。 如果通过二分查找肯定会会少很多循环。目标:找到集合中早于目标日期,并且最接近的一个日期,如果没有早于的则不返回代码:package com.zqf.pl

2020-06-22 11:58:14

通过shell的&命令执行“./startup.sh & tail -f ../logs/catalina.out”时造成tomcat的所属的jvm关闭并且对于的服务挂掉了

引言前两天有个显示系统最近升级完成以后,每天晚上tomcat自动shutdown, 非常奇怪的一个问题,因为系统晚上有很多定时任务需要执行,这就导致很多数据统计都错了,并且会影响第二天的使用, 连续两天出现这样的情况,第一次,正好是我们晚上升级系统,所以假定认为使我们升级导致的,但是第二天我们 并没有更新代码,系统仍然down掉了,这就非常严重了,于是,我接入了排查。先看一下日志:刚开始看到这个日志的时候,我们全部注意力都被上面的警告吸引,于是,认为是数据库连接池有问题,在检查了项目中的相关配.

2020-06-19 14:50:54

WebSocket在建立连接时通过@PathParam获取页面传值

最近在做的两个系统中都用到了webSocket,一个是实时转译系统,该系统就是通过收集端收音,然后实时将录音转换成文字显示到页面上,第二个是智能客服系统。由于之前用webSocket比较少,一直以为在创建连接的时候,不能传递参数,直到有一天看源码的时候,发现了新大陆,下面分享一下1、在被websocket映射的Java类中的注解如下:@ServerEndpoint("/websocket/{relationId}/{userCode}")2、在该Java类中的方法中:@OnOpenpu

2020-06-12 21:03:59

从零学SpringCloud系列(九):利用kafka实现消息总线Spring Cloud Bus

一、什么是消息总线相信大多数读者之前都使用过各种各样的消息队列,例如RabbitMQ、kafka等等,消息总线和他的概念差不多,在微服务系统的架构中,我们通常会使用轻量级的消息代理来 构建一个共用的消息主题让系统中所有的微服务都连接上来,由于该主题中产生的消息会被所有实例监听和消费,所以 我们称他们为消息总线。在总线上的各个实例都可以方便的广播一些需要让其他连接到该主题上的实例都知道的消息,例如配置的变更或者其他一些管理操作等。二、...

2020-05-14 10:39:20

从零学SpringCloud系列(八):分布式配置中心Spring Cloud Config

一、快速入门1.1 项目版本spring boot:2.2.5.RELEASEspring cloud:Hoxton.SR31.2 项目地址https://github.com/zhenghaoxiao/spring-cloud-in-action/tree/dev在搭建配置中心的时候,我们需要注意的一个地方就是,在配置客户端的时候,我们需要使用bootstrap.properties,这样config-server中的配置信息才能被正确的加载。具体搭建过程可以参考下面文章:ht

2020-05-12 12:06:35

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 脉脉勋章
    脉脉勋章
    绑定脉脉第三方账户获得
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证(专家版)
    技术圈认证(专家版)
    博客专家完成年度认证,即可获得
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 分享精英
    分享精英
    成功上传11个资源即可获取