自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zijikanwa

当眼泪流尽的时候,留下的应该是坚强。

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

原创 qt中写入和读取文件

qt中写入和读取文件

2024-02-26 11:35:45 361

原创 加解密和签名验签简述

数字加密算法

2022-05-01 23:09:20 2916

原创 unix命令

一. 查看机器上是否还有java线程$ ps -ef | grep 'java'二. 查看和清理机器文件## 1.查看机器磁盘总空间以及剩余空间大小[root@localhost ~]# df -h## 2.查看当前目录使用的总空间大小[root@localhost /home/admin]# du -h --max-depth=0## 3.查看当前目录下某文件使用空间大小[root@localhost /home/admin]# du -h --max-depth=1 文件名## 4.

2022-04-15 11:18:01 1900

原创 mac常用快捷键

文章目录一. Mac1. 系统2. 截图3. 切换4. 应用程序中(1)最小化窗口(2)隐藏窗口(3)关闭窗口(4)退出程序(5)全屏(6)文件夹5. 浏览器6. 文本处理二. VS Code三. IDEA四. Excel一. Mac1. 系统command+option+Esc:强制退出窗口command+control+Q:睡眠command+option+D:显示程序坞F11:显示桌面command+shift+.:显示Finder的隐藏文件2. 截图command+shi

2022-04-15 10:31:56 2315

原创 高并发下的缓存问题及布隆过滤器

一. 高并发下缓存的三大问题1. 概述背景在高并发场景下,如果系统直连数据库,数据库会出现性能问题,甚至造成数据库宕机,服务不可用。为了降低数据库的压力,我们通常会设计一个缓存系统,在访问数据库之前,拦截一部分流量,保证系统的稳定和数据库的可用。高并发场景下缓存最常见的三大问题缓存雪崩缓存穿透缓存击穿2. 缓存雪崩2.1 缓存雪崩的含义缓存雪崩:当某一个时刻出现大规模的缓存失效的情况,那么就会导致大量的请求直接打在数据库上面,导致数据库压力巨大,如果在高并发的情况下,

2022-02-17 15:13:29 1844 1

原创 通过sql对比两个表的一致性

文章目录一. 背景二. 对比方案1. 对比两表的数据量是否一致2. MINUS对比参考资料一. 背景项目中需要对两张结构一样的表进行对比,看两张表的数据是否一致。二. 对比方案1. 对比两表的数据量是否一致select count(*) from t1;select count(*) from t2;2. MINUS对比说明:用minus 对两张表做减法计算t1表-t2表后的行;计算t2表-t1表后的行;判断1和2的返回内容是否都为空t1-t2select *

2021-12-07 17:26:48 6577

原创 SQL 一行转多行的处理方案

一. 背景和问题背景:处理数据时,需要将一行中的某列数据根据分隔符转换到多行,为了实现该需求,找了一些解决方案,记录如下。问题概述二. MySQL中一行转多行1. 技术点mysql自带表:mysql.help_topicsql的字符串函数:substring_index()1.1 mysql.help_topic概述:mysql.help_topic是数据库mysql的一个表,该表提供查询帮助主题给关键字的详细内容。说明:一行转多行的这条sql语句其实跟help_topic表没

2021-12-07 17:08:57 26867 1

原创 MySQL的聚合函数 GROUP_CONCAT()

文章目录一.背景二. MySQL中聚合函数 GROUP_CONCAT()的使用2.1 多行变一列2.2 扩展:多行变多列三. Oracle中聚合函数 WM_CONCAT()的使用1. 函数概述2. 使用示例参考资料一.背景今天在数据开发项目时,遇到一个需求,需要把多行数据以某几个字段为键,将同列或多列的多行数据拼成一行数据。二. MySQL中聚合函数 GROUP_CONCAT()的使用概述:MySQL中,聚合函数GROUP_CONCAT()用指定分隔符连接字符串。通常使用多行变一列:

2021-12-02 17:38:35 6034

原创 redis启动报错解决

一. redis启动报错[test-mac:~ test$ redis-server 1342:C 18 Oct 2021 17:02:46.555 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo1342:C 18 Oct 2021 17:02:46.555 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1342, just started1342:C 18 Oct 2

2021-10-18 17:14:57 2662

原创 Bean的三种自定义初始化和销毁方法

文章目录一. 三种方法概述二. 方法详述1. 方法1:配置类中指定2. 方法2:实现接口并重写方法2.1 示例代码2.2 概述2.3 方法1 && 方法23. 方法3:利用java的JSR250规范参考资料一. 三种方法概述在配置类中指定 @Bean(initMethod = “init”,destroyMethod = “destory”)注解实现InitializingBean接口并重写其afterPropertiesSet方法,实现DisposableBean接口并重写dest

2021-10-14 17:36:13 365

原创 MySQL的on duplicate key update实现(批量)插入或更新操作

文章目录一. 背景二. `on duplicate key update`概述三. `on duplicate key update`的使用1. 在MySQL中的使用2. 在MyBatis中的使用参考资料一. 背景背景:业务上经常有这样的需求场景,如果之前有这条数据,就做更新;如果没有,就做新增。常用的处理方案:通过主键id或者其他唯一键判断DB中是否有这条数据,再判断调用insert或update语句。这样做逻辑处理起来比较复杂,降低代码效率,而且如果并发量高,可能会存在数据问题。二. on

2021-09-29 15:10:27 24456 7

原创 RSA加解密

一. 背景由于最近项目对接的双方需要加密传输数据,还想做的轻量级一些,因此在网上找了一些成熟安全的加密算法,最后选定非对称加密算法RSA。双方加解密的方案每个公私钥对只使用一次,用于实时加解密每个公私钥对永久存在,用于加解密不同步、以及多次加解密使用相同公私钥对的场景。二. 实践由于项目需要使用第二种方案,公私钥对需要在项目中永久存储,因此提前生成公私钥对,存储在文件中。每次加解密都取出来使用。import org.apache.commons.codec.binary.Base

2021-05-28 11:31:05 202

原创 SQL注入问题

文章目录一. Statement对象二. preparedStatement对象三. MyBatis是否可以防止SQL注入1. MyBatis中SQL注入的问题2. MyBatis中解决SQL注入三. 必须使用`${}`格式的情况四. 总结参考资料一. Statement对象说明:SQL注入只对SQL语句的编译过程有破坏作用代码public static void login(String username,String password){ Statement st = conn.c

2021-05-17 22:56:59 296 3

原创 AOP切面执行顺序

文章目录一. 概述二. 讲述1. 单切面中各通知方法的执行顺序2. 多切面中各通知方法的执行顺序3. 多切面的通知方法中抛出异常参考资料一. 概述本文主要讲述以下几点单AOP切面时,各通知方法的执行顺序。多AOP切面时,多切面的执行顺序和各通知方法的执行顺序。二. 讲述1. 单切面中各通知方法的执行顺序单切面中各通知方法执行顺序·总结spring aop就是一个同心圆,以要执行的方法为圆心。从最外层按照依次执行切面的@Around方法,@Before方法。然后执行method

2021-05-07 20:57:35 7623 1

原创 SQL索引

文章目录一. 建立索引简述二. 如何建立高效的索引三. 不走索引的SQL参考资料一. 建立索引简述索引通常分为聚集索引和非聚集索引。聚集索引速度很快,但只能建一个,所以尽量把经常使用的列建成聚集索引。非聚集索引虽然没聚集索引快,但可以建多个,比全表扫描快。二. 如何建立高效的索引经常作为条件查询(where)的列适合建立索引重复数据较少的可以建立索引不频繁插入和更新的列适合建立索引经常需要排序(order)、分组(group by)的字段适合建立索引连表查询的关联

2021-04-25 16:26:43 141

原创 SQL语句中in和not in条件包含null的注意点

一. 表结构和初始化数据表结构初始化数据insert into test_in(name, hobby, sex, school) values('张一','打球',1,'北京大学');insert into test_in(name, hobby, sex, school) values('张二','看书',null,'清华大学');insert into test_in(name, hobby, sex, school) values('张三','游泳',1,null);insert

2021-04-25 14:42:27 5377 1

原创 函数式接口的使用

文章目录一. 背景二. 正常写法三. 使用函数式接口改良一. 背景最近在降低代码重复度的时候,发现有很多方法的整体流程相同,只是中间某些环节的细节不同。为了降低代码重复度,第一次知道函数式接口可以这样用,写出来看着还是很高级的,下面记录一下。二. 正常写法可以看到,TestApiImpl中三个方法都用了try…catch…的写法,整体流程类似,只是处理方式不同,看起来代码很冗余。public interface TestApi { ResultModel<ATestDTO&

2021-03-23 16:52:56 289

原创 刷数据之旅

一. 背景今天刷数据,需要根据表T中列a的值来更新列b的值。最开始用程序写的,结果刷完的数据一直有问题,后来让胜哥帮忙看问题,刷成功了。后来又找到一种用sql刷数据的方法。在这里记录一下。刷数据的逻辑:如果某条记录的列b=0,则更新列a=食盐;如果某条记录的列b=1,则更新列a=食醋。二. 刷数据之旅1. 程序刷java代码List<DTO> list = attrDao.listAllnfo();list.stream().forEach(dto->{ if

2021-03-17 17:17:26 590

原创 外部sdk的jar包在maven库中的部署

文章目录一. 背景二. 法1:将jar包存储到maven仓库1. 存储到本地仓库2. 存储到XX中央仓库三. 法2:将jar包拷贝到服务器,然后在maven中引入这个jar包一. 背景最近项目里需要引入外部sdk到工程里,本以为是很简单的事情,结果卡在了如何将外部的jar包以maven形式出现在pom文件里。卡了一天,终于解决了。。。将外部jar包在pom文件中使用,通常包含以下三种方式:如果项目可以直接导入jar包,那直接将外部sdk引入到lib中就可以了。如果项目是以maven形式导入p

2021-01-22 21:42:32 871

原创 MySQL和Mybatis中JSON类型的使用

文章目录一. 背景二. MySQL中JSON类型的使用2.1 概述2.2 MySQL中json的使用三. MyBatis中JSON类型的使用3.1 概述3.2 要点讲解(1) concat()函数的使用(2)${...} & #{...}3.3 MyBatis中json 的使用(1)法1:collection="params.keys"(不推荐)(2)法2:collection为自定义map,index为map的key,item为map的value四. 参考资料一. 背景最近在做项目的时候,由

2021-01-22 20:55:50 11916

原创 SQL使用新技巧

一.背景最近在做数据统计方面的项目,需要写SQL来统计数据,过程中发现了之前没有接触过的sql用法,在此记录和分享一下。二. SQL小技巧1. 根据已有列增加新列概述:比如现有一张表a,有一列value_id,值为[1,2,3,4,5,6]。现在想增加一列,用来描述value_id值的含义,这种场景可以使用本技巧。原有表SELECT value_id from a;执行结果技巧SQLSELECT value_id,( case `value_id` whe

2020-12-16 16:32:17 149

原创 HTTPS之TLS证书

文章目录一. TLS概述1. TLS概述2. `HTTPS` 协议栈与 `HTTP` 的唯一区别3. TLS协议版本二. TLS证书格式1. 概述2. 示例:知乎网站证书解析(mac系统)3. 通过openssl获取证书的含义三. 证书链(Certificate Chain)1. 背景2. 概述3. 背景问题的解释参考资料一. TLS概述1. TLS概述TLS 握手的作用之一是身份认证),被验证的一方需要提供一个身份证明。在 HTTPS 的世界里,这个身份证明就是 「TLS 证书」,或者称为

2020-11-16 20:57:13 6703

原创 数据库中INT类型概述

文章目录一. 背景二. INT类型的总结1. 概述2. 详述2.1 bit[M]2.2 TINYINT([M])[unsigned][zerofill]2.3 SMALLINT([M])[unsigned][zerofill]2.4 MEDIUMINT([M])[unsigned][zerofill]2.5 INT([M])[unsigned][zerofill]2.6 BIGINT([M])[unsigned][zerofill]3. 说明参考资料一. 背景在设计数据库表的时候,如果字段是数值型,

2020-10-24 09:47:53 10670

原创 InputStream转为String的两种方式

一. 背景在项目开发过程中,经常会从某种存储介质中读取到InputStream流中,之后我们需要将InputStream流转换为String字符串的形式,然后使用这个String串进行后面的操作。经过查询,整理了如下两种方式。二. InputStream转为String的方式1. 使用 inputStream.read 和 ByteArrayOutputStream优点:速度快public static String getStringByInputStream_1(InputStream

2020-09-28 15:24:57 16506

原创 fastjson包JSON.parseObject()方法的大坑

一. 大炕1:解析对象字符串为空String body = "";Map<String, String> map = JSON.parseObject(body, Map.class);System.out.println(map);System.out.println(map.isEmpty()); // 抛出异常执行结果nullException in thread “main” java.lang.NullPointerExceptionat com.xxx.xxx

2020-08-26 15:34:19 6910

原创 分批获取list集合中的元素

一. 背景项目开发中经常需要将一个list集合分批进行处理,这个处理最近发现比较频繁,因此总结一个小方法,以便后期查看和使用。二. 分批获取list集合代码// 初始化list数据List<String> list = Lists.newArrayList();for(int i=0;i<100;i++){ list.add(""+i);}System.out.println("原始list:"+list);// 分批获取(每5个元素获取一个子集合)for(

2020-08-26 10:54:06 1739

原创 stream的Collectors.groupingBy()方法的大坑

1.前言在开发过程中,java8流行的stream流非常的好用,简化代码,又容易读懂,但是它有一个大炕。2. 大坑重现当list集合里某个元素的属性为空,并且你使用Collectors.groupingBy()方法对这个属性进行分组,这时系统会报错。List<DTO> list = Lists.newArrayList();for(int i=0;i<5;i++){ DTO dto = new DTO(); dto.setCode("code"+i);

2020-08-20 19:40:08 10107 1

原创 list和map是否为空

1. 背景项目开发过程中,经常需要判断list和map是否为空(==null)或者空集合(isEmpty())的问题,有时候不知道需不需无效判断,但又怕不判断变成空指针问题,因此总结一下目前遇到的问题。2. 总结通过MyBatis的Dao层查询出的list:如果DB查询结果为空,则返回的list为[]。通过list转换为map:如果list为[],则返回的map为{}。List<String> list = Lists.newArrayList();Map<String

2020-08-11 15:31:11 886

原创 mysql·update语句报错:Data truncation: Truncated incorrect DOUBLE value: ‘系统开小差啦~请稍后再试‘

背景MySQL的update语句多次遇到这个问题,每次的原因都不同,但每个原因出现的频率都很高,在这里总结并记录一下目前为止出现过的原因。错误原因1. set后面用and连接错误示例update table set a = 'a' and b = 'b' where id = 1 (报错)解决方案:把update语句里set后面的"and"全部换成","正确示例update table set a = 'a', b = 'b' where id = 1 (正确)错误原因2.

2020-08-10 12:47:05 2349

原创 字符串和日期格式转换工具类

public class DateUtil { /** * 预定义的日期格式 */ public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; public static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm"; /** * 字符串转换成日期 * @param str 字符串 * @param dateFormat 字符串的格式

2020-07-08 19:11:34 610

原创 MyBatis动态SQL if条件表达式 大坑

一. 问题背景近期在项目测试过程中,在使用MyBatis进行列表条件查询时,查询条件是状态为1和状态为2的都可以查到正确的结果,但查询条件是状态为0(无效)时,发现查询出来的结果包含了所有状态(0,1, 2),然后在本地跑测试看了一下sql的执行语句,发现sql根本没有拼接and status=#{status}语句。具体如下:DTO/** * 状态 0:无效 1:有效 2:全部 *...

2020-04-30 16:42:48 1919

原创 执行MySQL出现Lock wait timeout exceeded异常

文章目录1.问题背景2. 问题查询和解决3. 涨知识参考文献1.问题背景今天查看服务器异常日志发现有一段时间(18:10~18:13)出现频繁调用一个sql语句(delete from inspection_bill_ex where bill_code=? and process_type=? and business_type=? and property_name in 'haha'...

2020-04-26 17:13:57 745

原创 Java范型类的一种使用

文章目录一. 背景和使用二. 实例1. 产品实体DTO2. 工作流3. 抽象操作4. Manager.java5. 运行结果一. 背景和使用今天在看项目代码的时候,发现一个范型类的使用方式,稍稍研究了一下,写了一个Demo。这种范型类的使用场景:多种产品(Adto,Bdto)具有相似的工作流(AbstractWorkflow),但这些工作流(AWorkflow,BWorkflow)的处理方...

2020-04-22 16:03:50 566

原创 Spring中事务生效问题

结论前提:A方法调用B方法时,B方法有多个修改SQL。结论:同一类里事务不传递。原因如下:spring会扫描 @Transactional的类和方法,并通过动态代理实现启动事务的代理方法。同一个类里,A方法(没开启注解)调用B方法(开启注解)是直接调用的,它不会调用spring生成的开启事务的代理方法。细节结论(1)A方法没加@Transactional,B方法@Transac...

2020-04-13 16:57:13 549

原创 日期·String类型和Date类型的转换

文章目录一. 概述二. 日期时间工具类三.Test参考资料一. 概述在开发过程中,很多时候都需要用到日期,日期类在后端Java类中的工具类是java.util.Date,但前端展示时并不一定是什么格式的日期形式(比如yyyy-MM-dd,又或yyyy-MM-dd HH:mm:ss,又或其他形式),因此在后端代码编写时,需要将前端传入的String类型日期形式转换为Date(并存入数据库),又...

2020-04-13 15:40:21 1982

原创 Java中金额·元和分的转换

一. 概述private final static String VALUE_100 = "100";/** * 1. 分转元 * @param fenAmount 分 * @return */ private String fenConvertToYuan(Long fenAmount){ return new BigDecimal(String.valueO...

2020-04-13 12:00:36 923

原创 MyBatis中增删改操作总结

文章目录一. 总结1. MyBatis插入数据2. MyBatis更新数据3. MyBatis删除数据二. MyBatis与MySQL执行增删改操作的区别参考文献一. 总结1. MyBatis插入数据Mapper文件的SQL语句场景执行结果Dao层返回值主键是否自增浏览器访问示例insert into正常插入程序正常执行1主键自增insert i...

2020-04-02 10:23:32 256

原创 Mysql字段类型和Java类型的对应关系

文章目录一. 问题复现1. mapper.xml2. dao.java3. manager.java二. 问题解答1. 原因概述2. 原因解读参考资料一. 问题复现之前操作表的时候,都自认为Mysql的bigint类型对应Java的Long类型。今天写一个查询语句返回Map,结果出现类转换异常。怀疑了好久,查了好半天,终于搞清楚是为什么了。问题现场是这样子滴…1. mapper.xml...

2020-03-31 16:37:37 1577 1

原创 MyBatis使用@MapKey注解

文章目录一. 背景和含义二. 具体示例1. mapper.xml文件2. dao.java3. manager.java参考资料一. 背景和含义背景:今天使用MyBatis查询一些记录,数据涉及到两个表里的数据,需要连表查询,但我MyBatis的返回结果不想创建新的DO对象,因此使用@MapKey注解返回一个Map集合。含义:@MapKey注解用于mapper.xml文件中,一般用于查...

2020-03-31 15:47:07 5039

原创 Map的keySet()方法得到的顺序问题

文章目录一. 结论二. 代码实现一. 结论Map的常用实现类Hashtable、TreeMap、HashMap、LinkedHashMap的keySet()方法获取key的顺序:LinkedHashMap.keySet()得到的Set是有序的;其他三个得到的Set都是无序的。二. 代码实现public class MapKeySetTest { private H...

2020-01-13 14:16:31 7853 1

空空如也

空空如也

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

TA关注的人

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