自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

从改变自己开始

只要开始改变,什么时候都不算晚。

  • 博客(36)
  • 收藏
  • 关注

原创 腾讯广点通广告投放-转化归因API回传接口对接踩坑指南

中教又折腾了一下,把两个回调地址写上去,投放广告,获取回来参数了,因为开始以为用get请求,只需要click_id就行了,所以只关注到点击id,在知道了点击id和url后,调用get请求后,响应:{"code":0,"message":"ok","data":"TrackingCgi Success."}以为终于成功了。以为一下就能搞定了,但是对接下来才发现,各个字段根本不知道什么意思,后面再找其他文档,官网上,还有找他们运营,折腾了足足一个多月才搞清楚他们的回传方式,实在是服了。

2023-01-08 15:39:14 8491 46

原创 银联支付(chinapay)java接入避坑指南

银联无卡支付java接入避坑指南,从代码实现上进行总结说明。

2022-07-23 11:02:09 5276 13

原创 使用Java实现PDF到HTML的转换

由于网上也有大量解析方法,但是适合自己的才是最好的,这里重点讲一个踩坑的,开始我通过com.spire.pdf.PdfDocument/3.9.0方式在本地解析成功了,但是发布到测试环境却解析报错,估计是版本低导致被发现了,后面通过升级版本后不报错了,但是因为包含表格又只能解析前面三页或者除了表格的那两页,其他都能解析出来。但是奈何需求没有那么简单,我的PDF是包含表格,且表格里的内容有残次不齐竖着的文本,而且还要去除首页内容,所以我这次用的方式是现将PDF截取首页后重新生成PDF,然后再转换成HTML。

2024-10-15 21:25:37 1052

原创 MySQL8.0

在正常的日常工作中,对于常用的关系型数据库,基本上会简单的增删改查,添加索引,知道一些锁知识和事务隔离就已经能满足大部分的工作了。但是如果遇到一些更为深入的知识点,那么我们可能就会无能为力了,所以为了预防之后我们会遇到更为深入的知识点,我们需要学会提前准备。比如以下几个问题,你知道多少?1、SQL语句是如何执行的?2、索引的检索原理是什么,如何创建高效的索引?3、如何提高索引的使用效率?4、如何做到索引覆盖,如何避免回表查询,如何使用索引条件下推?5、回滚日志、重做日志、二进制日志的作用是什么?

2023-01-08 14:51:16 218

原创 MySQL常用函数group_concat

但是一般这只是单表操作,而且列表查询不是很满足业务需求,所以我一般列表查询,基本都是自己写SQL进行查询。但是自己写SQL查询会遇到一个问题,一个表的字段太多,不能直接用select * 去查询,十几二十个,一个个去复制过来又比较麻烦,所以为了偷懒,网上搜索了一遍,发现了MySQL中的group_concat函数可以实现我的需求。WHERE TABLE_SCHEMA = '库名' AND TABLE_NAME = '表名';通过这样就能直接将一个表的字段名以逗号隔开返回了。

2023-01-08 14:48:51 276

原创 nacos从入门到上手

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

2023-01-08 14:23:11 499

原创 MyBatis-Plus联表查询亲测

周末闲来无事,看到一篇博客,别人利用MyBatis-Plus实现了连表查询,然后自己平常也一直在用MyBatis-Plus,所以好奇,直接新建springboot-demo来亲自测试一下看看。

2022-07-24 16:25:40 2163

原创 谈谈利用openSSL生成秘钥方法

1、安装Window64OpenSSL_Light-3_0_2.exehttps://slproweb.com/download/Win64OpenSSL_Light-3_0_2.exe2、将安装目的对应bin目录配置到环境变量(如C:\Program Files\OpenSSL-Win64\bin)3、在要生成目的的地方创建文件夹,cmd弹出黑框(因为window生成秘钥是在当前文件夹的,所以创建好文件夹再打开cmd方便找秘钥文件)。4、执行以下命令生成公钥和私钥:#生成私钥ope

2022-03-22 22:22:48 1394

原创 IDEA常用插件总结

1、Lombok()通过lombok注解减少getter、setter等方法的编写,在更改实体类时只需要修改属性即可,减少了很多重复代码的编写工作。2、JRebel and XRebel for Intellij(热部署插件)安装后通过快捷键(Ctrl+Shift+F9)可以快速刷新修改的文件部署,避免了重启系统,减少等待时间。破解步骤:2.1、File、Settings、Plugins、Marketplace、安装JRebel and XRebel for Intellij。2

2022-03-19 17:32:07 1120

原创 Spring自带工具类计时器StopWatch的简单使用说明

在日常开发中,我们经常需要通过记录开始时间和结束时间,然后通过计算差值,得到时间差,如下面的代码:long start = System.currentTimeMillis();long end = System.currentTimeMillis();System.out.println("执行耗时:" + (end - start));其实spring 这个包org.springframework.util.StopWatch的工具类也可以实现计算时间差,如下代码:StopWatc

2022-02-11 22:40:08 4379

原创 简单记录一下单循环与在内循环内创建多线程方式

一、单循环package com.example.test;import com.google.common.util.concurrent.ThreadFactoryBuilder;import java.util.concurrent.*;public class Test { public static void main(String[] args) { ThreadFactory namedThreadFactory = new ThreadFactoryBu

2022-01-19 22:22:27 542

原创 简单点讲讲手动创建线程池

一、创建线程池时需要指定一个有意义的名字,否则出问题的时候就会难以定位。ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();以上demo-pool-%d即为创建的线程名称,测试代码如下:public class Test { public static void main(String[] args) { ThreadFacto

2022-01-19 21:45:31 2446

原创 MySQL都有什么锁、常见死锁原因

一、MySQL都有什么锁。锁分类 按锁的粒度划分 行锁 开销大,加锁慢,会出现死锁,并发性能高。InnoDB支持,MyISAM不支持。 表锁 开销小,加锁快,不会出现死锁,并发性能低。 页锁 介于行锁和表锁之间的一种锁,会出现死锁,并发性能一般。 按锁的使用方式划分 共享锁 加上共享锁后,只能执行读操作,其他事务也只能对其加共享锁,不能加排它锁。 排他锁 加上排他锁后,其他事务不能读也不能写更不能加任何锁。 按思想上划分 悲观锁.

2022-01-16 16:35:56 945

转载 银行卡号校验规则java

/* 校验过程: 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,将个位十位数字相加,即将其减去9),再求和。 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。 */public class CheckBankCard { /** * 校验银行卡卡号 */ public s...

2021-12-28 22:32:41 1792

原创 简单粗暴的查询优化方法-MySQL

对于开发者来说,随时业务的复杂度越来越高,查询效率是值得深思的问题,特别是在多表关联查询且大数据量(百万级)的情况下,查询设计或者处理不好的话,查询时非常慢的,慢到你自己都嫌弃。 在优化查询效率的时候一般是通过2中方式去优化,一种是加索引一直是通过代码层面去优化。如果通过索引去优化,那么得需要了解MySQL的Explain解释了,不懂Explain可以先去这里Mysql中解释Explain 详解_HealerJean梦想博客-CSDN博客_mysql 解释看看别人的讲解,其...

2021-12-26 12:49:09 381

原创 两个List<String>之间的交、差、并集(去重并集)计算

在日常开发中,两个list集合之间的交、差、并集(去重并集)计算常常会遇到的,今天遇到了,记录一下list自带方法和java8新特性之间的区别。java8特性String[] arrayA = new String[]{"1", "2", "3", "4", "5"};String[] arrayB = new String[]{"3", "4", "5", "6"};// 定义两个listList<String> listA = Arrays.asList(...

2021-12-22 20:24:41 3220

原创 浅谈Redis的缓存击穿、缓存雪崩和缓存穿透

Redis缓存的出现,可以极大的解决了我们项目中遇到的一些查询慢问题,但是用到Redis作为缓存的时候,我们不得不考虑缓存击穿、缓存雪崩和缓存穿透这些问题,那么下面就来浅谈一些这些问题的出现情况和解决方案。一、缓存击穿 缓存击穿出现的情况是,一个请求绕过了缓存,直接请求数据库。比如故意拿一个不存在的key去请求缓存,缓存不存在,则直接请求数据库。如果是这样,那么缓存就失效了。 解决方案: 1、如果缓存不存在,数据库也不存在,则直接设置...

2021-12-15 21:44:42 853

原创 如何保证Redis一致性问题浅谈

Redis缓存在现在的项目中应用越来越广泛,几乎大部分项目中都会用到,从简单的存储登录时的短信验证码到大量数据的缓存,由此可见,Redis已经是广大开发者常用的缓存工具了。那么在特殊的场景下,需要严格保证缓存与数据库的数据一致,那么这时候需要如何做才能保证呢?一、不严格要求一致性的情况下,利用缓存的场景下。先查询缓存,如果缓存有数据,则直接返回;如果缓存没有数据,则先查询数据库,获取到数据后再将数据放入缓存中,以供下次查询。如果数据改变了,则立刻更新缓存。二、在严格要求一致性的情况下...

2021-12-15 21:12:26 2067

原创 Mybatis动态字段排序防注入-简单粗暴上代码的方式

一、Mybatis动态参数说明参数符号 编译 安全 值 #{} 预编译 安全 ?替换,处理后的值,字符类型都带双引号 ${} 未预编译 不安全,存在SQL注入问题 页面传什么值就是什么值 二、order by 动态参数值说明1、order by后面使用#{} 是无效的,只能使用${}。如果使用${}是会引起SQL注入的。三、动态参数校验防止SQL注入1、查询BO对象定义好排序参数@ApiModelProper

2021-12-14 22:18:12 3165

原创 简单记录一下通过url将图片资源上传至阿里云OSS

由于本文只是记录,所以写的比较简单,如需了解如何安装使用阿里云OSS请另行他处。1、登陆阿里云账号选择【对象存储OSS】,进行账号注册和获取到endpoint、accessKey、secretKey、bucketName等参数。2、引入相关依赖<!-- 阿里云OSS --> <dependency> <groupId>com.aliyun.oss</groupId> <a...

2021-11-19 22:59:06 4005

原创 简单记录一下XSSFSheet导出Excel模板

由于是简单记录,所以没有写那么详细,自己先集成好autopoi-web依赖。下面直接贴实现代码:1、controller层代码/** * 下载导入模版 * * @param response * @throws IOException *//* @ApiOperation("下载导入模版") @GetMapping("/downloadTemplate") public void downloadTemplate...

2021-11-19 21:58:35 1900

原创 Spring事务什么情况下会失效?

既然讲到事务,那得明白什么是事务。事务就是一组独立不可分割的工作单元,事务中的操作要么全部执行,要么都不执行。一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前...

2021-11-17 22:49:31 3219

原创 简单粗暴的rabbitMQ入门

注意:因为是写好了业务,后面总结记录的,所以直接贴代码,抹掉业务信息,对新手来说有一定的参考意义,如有错误,请见谅,知错不改哈哈哈哈哈哈哈哈哈哈。一、自行百度,安装好rabbit所需要的环境,官网地址Messaging that just works — RabbitMQ二、安装好环境后,引入依赖进项目。三、创建消息队列配置,主要用于配置交换机、队列的绑定关系。@Configurationpublic class RabbitMqConfig {/** * 消息队列所绑定的交换机

2021-11-06 22:24:12 965

原创 Map转JSON和JSON字符串转Map

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.commons.collections.map.HashedMap;import java.util.Map;public class Test { public static void main(String[] args) { Map<String, Object> map = .

2021-11-05 23:02:12 483

原创 JSON数组字符串取值方法

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;public class Test { public static void main(String[] args) { // 字符串数组 String data = "[{\"name\":\"字段名\",\"data\":{\"id\":.

2021-11-05 22:34:02 6941

原创 腾讯云IM回调接口-单聊发言后回调

单聊发言后回调接口详解(其他回调类似) 背景:因为腾讯云im存储聊天记录有有限时间,过期会找不到聊天记录,如需长期存储,要么加钱,要么自己存储。腾讯云im提供了许多回调接口,供开发者应用。下面介绍通过发言后回回调接口获取到聊天消息,然后存储到自己的服务器数据库。发言后回调接口地址:即时通信 IM 发单聊消息之后回调 - 服务端 API - 文档中心 - 腾讯云一、前期准备1、登录腾讯云进入控制台。2、到自己创建的应用。3、回调配置、编辑第三方回调配置、进行回调URL配置...

2021-10-31 14:36:28 3431 6

原创 浅谈腾讯云IM接入方式(java后端)

小白入门接入腾讯云IM教程 腾讯云IM接口文档相当齐全,可以供开发者快速接入单聊、群聊功能到企业系统中。开发者可以根据自己的业务需求,利用相应的接口实现自己的业务需求。如群聊,自定义发言、自定义禁言、自定义在线状态等功能。一、注册账号1、注册好腾讯云账号,登录进行创建应用,获取到sdkappid、secretkey、userId。二、引入依赖及获取userSign1、引入依赖<dependency> <groupId>com.gi...

2021-10-31 14:10:45 4828 4

原创 浅谈接入云合同方式-E签宝平台(非标板)

java后端接入E签宝方式(非标板)一、准备工作1、到E签宝官网https://www.esign.cn/注册好账号,在开放平台tab登录控制台。2、配置好沙箱环境。3、获取到应用id和应用秘钥。二、集成相应接口(最简单的接入并且生成云合同需要用到的接口)注:相应接口参数请到官网获取相应文档查看1、创建个人签署账号。2、创建机构签署账号。3、创建机构模板印章。4、设置静默签署授权。5、查询模板文件详情。6、填充内容生成PDF。7、一步发起签署。8、

2021-10-31 13:11:42 1974 3

原创 极光推送入门教程-后端

手把手教会你极光推送入门一、开发前准备1、到极光推送官网注册账号,地址为:首页 - 极光2、到概述-创建应用(创建应用名)3、填写应用包名(设置后不可更改)4、获取到AppKey和MasterSecret二、集成极光推送进项目1、在pom.xml引入依赖<!-- 极光pom --><dependency> <groupId>cn.jpush.api</groupId> <artifactId>jpus

2021-10-30 22:19:49 1447

原创 广州图书馆跳转中国知网教程

免费进入中国知网在线查阅公开的毕业论文教程1、进入广州图书馆官网首页,地址为:广州图书馆·首页 (gzlib.org.cn)2、在线注册普通读者证账号。3、登录进去在数字资源导航栏即可看到中国知网入口,如下图:...

2021-10-30 21:46:44 10726

原创 极光推送工具类-指定用户(根据设备别名)极光推送

/** * 指定用户(根据设备别名)极光推送 * 极光官方文档 极光推送 - Push API v3 - 极光文档 * @param message(消息内容体-推送alert的消息) * @param to (通知内容体)* @param type(定义类型,供用户收到推送后点击跳转到指定页面)* @param param(跳转到指定页面需要的参数,可定义为json字符串格式) * @param token (推送接收方设备别名) * @return */public Resul...

2021-10-28 22:56:17 957

原创 java基础工具类-判断字符串是否包含中文/中文符号

/** * 判断字符串是否包含中文 * @param str * @return */public static boolean isContainChinese(String str) { Pattern p = Pattern.compile("[\u4e00-\u9fa5]"); Matcher m = p.matcher(str); if (m.find()) { return true; } return false;}/.

2021-10-28 22:36:23 376

原创 java时间格式工具类-获取当前时间、年、月、日

/** * 获取当前年-2021 * **/public static int getYear() { GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(getDate()); return calendar.get(Calendar.YEAR);}/** * 获取当前月-10 * **/public static int getMonth() { Calend.

2021-10-28 22:33:16 789

原创 java时间格式工具类-获取当天开始/结束时间

/** * 获取当天开始时间(2021-10-28 00:00:00) * **/public static String getDayStartTimeStr() { LocalDateTime todayStart = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); String todayStartTime = todayStart.format(DateTimeFormatter.ofPattern("yyyy-MM-dd.

2021-10-28 22:28:54 851

原创 java时间格式工具类-得到X天后的时间(时间/字符串格式)

/** * 得到X天后的时间(时间格式) * * @param date * @param day * @return */public static Date getXDateAfterDate(Date date, int day) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.DATE, now.get(Calendar.DATE) + day); .

2021-10-28 22:22:28 194

转载 java时间格式工具类-获取当前系统时间

/** * 获得当前日期 yyyy-MM-dd HH:mm:ss * @author huangw * @return 2021-10-27 22:39:38 */public static String getCurrentTime() { // 小写的hh取得12小时,大写的HH取的是24小时 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(.

2021-10-27 22:44:03 279

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除