- 博客(55)
- 资源 (2)
- 收藏
- 关注
原创 单元测试多线程调用sleep,执行中断
单测调用在使用了 Thread.sleep(3000);后面码中断了,没有执行,尝试了各种写法后,最后用了public static void main(String[] args) main方法来调用,main方法调用后又是正常的,是我又一次陷入了沉思。于是去网上搜索了一下。今天在用单元测试测试多线程,遇到一个诡异的问题,两段一模一样的代码,一个用单测调用,一个用main 方法调用,结果却不一样。...
2022-08-06 15:03:37 534 1
原创 redis 事务
要弄清楚 Redis 有没有事务,其实很简单,上 Rredis 的官网查看文档,发现:MULTI、EXEC、DISCARD和WATCH是 Redis 事务相关的命令。事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。 EXEC命令负责触发并执行事务中的所有命令:如...
2021-03-16 14:22:46 165
原创 java 多个文件合并,多个 MP3 合并,InputStream 合并
在企业微信上上传音视频会有时长限制,对于较长的音视频,只能分成几段进行上传,然后再进行合并。主要功能代码List<InputStream> inputStreamList = new ArrayList<>();Enumeration<InputStream> en = Collections.enumeration(inputStreamList); SequenceInputStream seq1 = new SequenceInputStream(en);.
2020-09-24 10:01:11 1805
原创 org.apache.ibatis.binding.BindingException:Invalid bound statement (not found)
1.查看方法名是否相同2.查看 mapper namespace 是否可以跳转
2020-06-17 09:47:09 208
原创 windows 开机自启动cmd文件
1.首先新建txt文件2.输入@echo offD:CD D:\soft\nacos\binstartup.cmdtaskkill /f /im cmd.exeexit(命令解释,先切换路径到文件夹下,再启动文件。最后关闭 cmd 窗口)3.把.txt文件后缀改为.bat4.把文件放入 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 文件夹中...
2020-06-12 14:53:36 3230
原创 redis 哨兵原理
三个定时监控任务1.每隔十秒,每隔sentinel节点会向主节点和从节点发送info命令,获取最新的拓扑结构2.每隔两秒,每个sentinal节点会向redis数据节点的_sentinel_:hello频道上发送sentinel节点对主节点的判断以及sentinel节点的信息,同时每个sentinel也会订阅该频道(发现新节点,sentinel节点之间交换主节点的状态)3.每隔一秒,每个sentinel节点会向主节点,从节点,其余sentinel节点发送一条ping命令,做一次心跳检测,来确定这
2020-05-26 21:28:13 388
原创 redis 集群的哨兵模式保证 redis 的高可用
1、哨兵的介绍sentinal,中文名是哨兵哨兵是redis集群架构中非常重要的一个组件,主要功能如下(1)集群监控,负责监控redis master和slave进程是否正常工作,Sentinal节点会定期检查redis节点和其余sentinal节点是否可达(2)消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员(3)故障转移,如果master node挂掉了,会自动转移到slave node上(4)配置中心,如果故障转移发生了,通知client客.
2020-05-24 21:03:31 235
转载 IDEA 插件 EasyCode 代码生成器
Easycode是idea的一个插件,可以直接对数据的表生成entity,controller,service,dao,mapper,无需任何编码,简单而强大。1、安装(EasyCode)我这里的话是已经那装好了。建议大家在安装一个插件,叫做Lombok。 Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有gett
2020-05-09 10:18:18 284 1
原创 redis 底层数据结构简介
一、字符串Redis 的字符串叫着「SDS」,也就是 Simple Dynamic String。它的结构是一个带长度信息的字节数组。capacity 表示所分配数组的长度,len 表示字符串的实际长度Redis 的字符串有两种存储方式,在长度特别短时,使用 emb 形式存储 (embeded),当 长度超过 44 时,使用 raw 形式存储。两种形式的存储方式embstr 存...
2020-05-06 22:17:04 466 1
原创 JVM CPU 满了 100% 问题排查
突然收到运维的CPU异常告警。如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?步骤一、找到最耗CPU的进程工具:top方法:执行top -c,显示进程运行信息列表 键入P(大写p),进程按照CPU使用率排序图示:如上图,最耗CPU的进程PID为10765步骤二:找到最耗CPU的线程工具:top方...
2020-05-05 16:33:30 5833
原创 如果service还没执行完,分布式锁在 redis 中已经过期了,怎么解决这种问题
在使用 redis 分布式锁的时候,可能会碰到,服务执行时间比较长,但此时redis锁的过期时间到了,那 redis 会解锁,导致其他服务能同时访问的问题,改如何解决? 只要客户端一旦加锁成功,启动一个watch线程,他是一个后台线程,会每隔10秒检查一下,如果客户端还持有锁key,那么就会不断的延长锁key的生存时间。 假如加锁的时间是30秒,如果加锁的业务没有执...
2020-04-27 21:47:22 2097 1
原创 mysql Base64编码 解码
编码select to_base64('字段') from 表名解码select from_base64('字段') from 表名
2020-04-16 15:43:48 700
原创 redis的线程模型
1)文件事件处理器redis基于reactor模式开发了网络事件处理器,这个处理器叫做文件事件处理器,file event handler。这个文件事件处理器,是单线程的,redis才叫做单线程的模型,采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器来处理这个事件。如果被监听的socket准备好执行accept、read、write、close等...
2020-04-15 19:32:23 204
原创 redis key 过期处理和内存淘汰机制
(1)redis删除过期key1、定时删除设置键的过期时间,创建定时器,一旦过期时间来临,就立即对键进行操作。这种对内存是友好的,但是对 CPU 的时间是最不友好的,特别是在业务繁忙,过期键很多的时候,删除过期键这个操作就会占据很大一部分 CPU 的时间。要知道 Redis 是单线程操作,在内存不紧张而 CPU 紧张的时候,将 CPU 的时间浪费在与业务无关的删除过期键上面,会对 ...
2020-04-13 21:57:07 919
原创 Redis持久化
Redis持久化主要分两种RDB持久化和AOF持久化。一、RDB持久化(不定期)(redis database)原理是将Reids在内存中的数据库记录定时 dump到磁盘上的RDB持久化不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”)RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换...
2020-04-07 21:08:59 159
原创 xml 转 对象 对象转xml
xml 转 对象 对象转xml今天在和外部对接接口时,需要用到 xml 格式的请求参数。刚下手时突然感觉有点手生,这次特地记录一下。直接上互转代码import com.alibaba.fastjson.JSON;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml....
2020-03-24 20:53:28 574
转载 JMM Java 内存模型-参考《深入理解 Java 内存模型》一书
原文:http://www.54tianzhisheng.cn/2018/02/28/Java-Memory-Model/这是一篇讲 Java 内存模型比较系统和比较易懂的文章基础并发编程的模型分类在并发编程需要处理的两个关键问题是:线程之间如何通信和线程之间如何同步。通信通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享...
2019-07-23 22:03:55 140
转载 生动形象的 java 多线程场景
多线程的问题都曾经困扰过每个开发人员,今天将从全新视角来解说,希望读者都能明白。强烈建议去运行下文章中的示例代码,自己体会下。问题究竟出在哪里?一个线程执行,固然是安全的,但是有时太慢了,怎么办?老祖宗告诉我们,“一方有难,八方支援”,那不就是多叫几个线程来帮忙嘛,好办呀,多new几个不就行了,又不要钱。这样能管用吗?继续往下看。俗话说,“在家靠父母,出门靠朋友”。有了朋友的帮...
2019-07-13 10:38:50 243 1
原创 # MyBatis 源码解析(三)
dataSource数据源DataSourceFactory 接口扮演工厂接口的角色,UnpooledDataSourceFactory 和 PooledDataSourceFactory 则扮演具体工厂类的角色在UnrolledDataSourceFactory 的构造函数中会直接创建 UnpooledDataSource 对象,并初始化 UnpolledDataSourceFactory...
2019-07-10 23:03:33 123
原创 MyBatis 源码解析(二)
MyBatis 源码解析(二)在完成 xml 解析 - 通过反射得到对象及关系 ,后 Mybatis 进行类型的转换和资源的加载类型转换因为 JDBC 数据类型和 java 语言中的数据类型存在差异,所以在 PreparedStatement 为 SQL 语句绑定参数时,需要从 java 转成 JDBC 类型,在结果集获取数据时,要从 JDBC 转成 java 类型TypeHandler...
2019-07-09 22:43:35 95
原创 Jackson Stirng 转对象时,String 中的字段比 javaBean 中的多
报错:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field解决方法// 第一种解决方案// ObjectMapper对象添加mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, f...
2019-07-09 15:41:12 309
原创 MyBatis 源码解析(一)
简单概括 MyBatis 加载的第一步:xml 解析 - 通过反射创建对象及关系MyBatis是如何解析的呢解析器xml 解析在初始化中处理 mybatis-config.xml 配置文件,使用的是 DOM 解析的方式,并结合使用 XPath 解析 xml 文件Path 使用路径表达式来选取 xml 中指定的接待你或者节点集合常见的表达式Mybatis 提供了 XPathpa...
2019-07-08 22:04:59 137
原创 github fatal: The remote end hung up unexpectedly fatal: early EOF
第一步 :git config --global core.compression 0 // 关闭compression第二步:git clone --depth 1 https://github.com/mybatis/mybatis-3.git //部分克隆来截断下来的信息量第三步: cdmybatis-3 //进入新目录第四步: git fetch --uns...
2019-07-01 20:36:19 2548
转载 讲 zookeep 比较全面的一篇文章
推荐在自己对 zookeep 有所简单了解后阅读场景一有这样一个场景:系统中有大约100w的用户,每个用户平 均有3个邮箱账号,每隔5分钟,每个邮箱账需要收取100封邮件,最多3亿份邮件需要下载到服务器中(不含附件和正文)。用20台机器划分计算的压力,从 多个不同的网路出口进行访问外网,计算的压力得到缓解,那么每台机器的计算压力也不会很大了。通过我们的讨论和以往的经验判...
2019-06-25 21:59:24 360
转载 jvm 内存泄漏
(Memory Leak,内存泄漏)为什么会产生内存泄漏?当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。内存泄漏对程序的影响?内存泄漏是造成应用程序OOM的主要原因之一。我们知道Android系统为每个应用程序分配的内存是有限的,而当一个应用中产生的内存泄漏比较多...
2019-06-21 15:53:23 160
转载 Java内存泄漏
一、内存溢出和内存泄露一种通俗的说法。1、内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出。2、内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该释放),但是因为一直被某个或某些实例所持有导致 GC 不能回收,也就是该被释放的对象没有释放。下面具体介绍。1.1 内存溢出java.lang.OutOfMemoryError,是...
2019-06-12 19:02:35 386
原创 MySql 查询性能优化
查询性能优化为什么查询速度会慢查询大概有以下过程,从客户端,到服务器,在服务器上解析,生成执行计划,执行,返回给客户端,其中执行包括了检索数据,存储引擎的调用,调用后数据处理(排序,分组)。查询在不同的地方花费的时间,包括网络,CPU计算,生成统计信息,执行计划,锁等待,向底层存储引擎检索数据的调用操作一些不必要的额外操作,被重复多次的操作,执行慢的操作,优化的目的就是减少这些操作如何优...
2019-06-04 21:49:35 222
转载 springboot 多数据源 读写分离实现
最近在做一个把一个数据库的数据,通过转化,定时插入到另一个数据库中的项目。原本打算分拆成两个工程,一个工程进行读库,然后将数据定时推送到另一个进行入库的工程。但数据量大的时候,在传输过程中可能会发生中断和超时情况。于是便想到当工程多数据源。在网上搜寻了一翻后,发现这片文章比较实用,且通俗。便做下记录。下面是实际代码的实现gridle 添加依赖dependencies { ...
2019-05-27 21:24:29 1615 1
原创 使用反射判断成员变量的值是否为空
有时候要把 entity 对象或 pojo 对象的必填项一个个判空,代码实在冗长。如果引入了 Lombok 那也比较方便,但如果还没有,就可以用反射判断成员变量的值是否为空代码如下//判断成员变量中是否有空public static boolean allFieldIsNull(Object object) throws OpenBusinessException { if...
2019-05-22 14:20:42 741
原创 getReader() has already been called for this request
今天接手一个新项目,运行时出现getReader() has already been called for this request ,看了一圈代码,没什么问题。有看了一下,好像有个拦截器,原来拦截器中就使用了 HttpServiletRequest ,而我新写的 Controller 中也用到了 @RequestBody 。问题已经找到,Controller 读取流中的数据已经没了,所以读取...
2019-05-22 14:05:36 7118 1
原创 MySQL 索引
索引是存储引擎用于快速找到记录的一种数据结构一、索引类型索引是在存储引擎层实现的,不同的存储引擎的索引工作方式并不一样。我们先来看看 MySQL 支持的索引类型B-Tree 索引大多数 MySQL 存储引擎都支持该索引,不过,不同的存储引擎可能使用不同的存储结构,如:InnoDB 使用的是 B+TreeB- Tree 通常意味着所有值都是按顺序存储的,并且每一个叶子页到根的距离相...
2019-04-23 21:35:29 103
原创 Redis 基础篇(一)
今天我们来讲一讲缓存目前,memcache 和 redis 是互联网分层架构中,最常用的key/value缓存。那么如何选择呢 ?下面来看一下两种缓存的比较 redis mecache 吞吐量 十万左右 QPS 达到几十万 QPS 数据结构 ...
2019-04-21 14:42:27 234
转载 学习方法
今天先来讲一下,学习方法前几日刚看到一片关于罗斯福、费曼、达芬奇的学习方法归纳,这三位想必大家都听说过。那他们是如何学习的呢?西奥多·罗斯福美国第26届总统,人称老罗斯福,昵称Teddy。这位总统年轻的时候是一个金牌学霸,在哈佛求学期间,不但学业出色,而且涉猎广泛,包括拳击、摔跤、健身、舞蹈、读诗会等。而且他对大自然特别着迷,喜欢解剖动植物制作标本,在大一暑假的时候就出版了一本鸟类研究的...
2019-04-15 19:43:07 210
转载 关于索引的B tree B-tree B+tree B*tree 详解结构图
B树即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,...
2019-04-15 16:09:34 370
原创 MySQL 数据类型
MySQL 数据类型MySQL 支持很多的数据类型,下面来看一下一些常见的数据类型1.整型类型如果存储整数,可使用者几种整数类型TYINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,分别使用8,16,24,32,64位存储空间,存储范围从 -2^(n-1) ~ 2^(n-1)-1,n是位数,当使用 UNSIGNED 时,表示不允许负数,可使正数上线提高一倍。有符号...
2019-04-14 08:58:20 293
原创 MySQL 概况
MySQL 概况目前,MySQL 是大多数公司最常使用的关系型数据库,开发人员基本上也经常使用。平时接触最多的就是,库、表、字段、索引、SQL 语句等。这次我将从逻辑架构、存储引擎、事务、并发控制、数据类型、索引这几方面来讲讲 MySQL 的故事。1. MySQL逻辑架构[image:42E30573-E151-462F-B4BE-6189763847B6-13649-00004FA616...
2019-04-13 13:53:01 282
原创 码云迁到Github
1.首先在GitHub选择New repository2.接着填入项目名称(最好同名),点击create repository3.接着会出现项目的默认提示页,点击Import code4.接着我们在这里填入在码云的项目的git地址,然后选择begin import5.静静等待6.修改remote地址7.修改git用户名和密码8.就可以push了...
2018-12-12 10:25:11 256
原创 org.eclipse.aether.transfer.RepositoryOfflineException: Cannot access nexus in offline mode
org.eclipse.aether.transfer.RepositoryOfflineException: Cannot access nexus in offline modemaven的settings.xml 的 offline 和修改idea -》maven 的offline
2018-10-29 15:14:29 2176
原创 log4j+slf4j
引入jar<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --><dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <...
2018-09-03 15:06:44 126
sqljdbc.jar / sqljdbc4.jar
2017-09-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人