- 博客(37)
- 收藏
- 关注
原创 Java单元测试
PowerMock作为一个优秀的单元测试框架,是一个扩展了其它如EasyMock等mock框架的、功能更加强大的框架集合。本文从准备环境入手,通过常用的spy、mock、when、verify语句和参数匹配器、私有属性、私有方法、主要注解的介绍,基本对有一个大概的了解,并阐述了单元测试的个人观点。
2023-06-30 12:15:00
1406
原创 mysql 优化
1,当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施。2,查询优化 主要会用到 2 个MySQL 提供的功能,一个是慢查询log,一个是查询计划分析
2023-06-28 17:15:49
348
原创 mysql 基础架构与组件
简单来说 MySQL 主要分为 Server 层和存储引擎层,Server 层:主要包括连接器、查询缓存、分析器、优化器、执行器等,存储引擎: 主要负责数据的存储和读取
2023-06-28 14:00:00
423
原创 mysql 索引
MySQL索引使用的数据结构主要有BTree索引 和 哈希索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。
2023-06-28 12:00:00
383
原创 mysql 常见锁类型
MySQL 将锁分成两类:锁类型(lock_type)和锁模式(lock_mode)。锁类型有表锁和行锁两种类型,当然行锁还可以细分成记录锁和间隙锁等更细的类型,锁类型描述的锁的粒度,也可以说是把锁具体加在什么地方;而锁模式描述的是到底加的是什么锁,譬如读锁或写锁。锁模式通常是和锁类型结合使用的。
2023-06-25 22:15:00
1319
原创 分布式幂等问题解决方案
如果有一个查询接口是查询订单的状态,状态是会随着时间发生变化的,那么在两次不同时间的查询请求中,可能返回不一样的订单状态,这个查询接口还是幂等接口吗?
2023-06-24 12:00:00
874
1
原创 分布式锁 实现
从分布式锁的使用场景出发,通过对 MySQL实现、ZooKeeper实现、Redis实现 多种实现方式比较,对各自的问题进行分析,可以找到最适合你的解决方案。
2023-06-21 12:00:00
140
原创 zip 压缩后解压名称不一致问题
场景:压缩若干文件后得到zip文件,后来根据需求要修改zip文件名称,再解压后发现解压后文件夹名称与zip不一致,对于程序来说,可能造成文件路径查不到的问题。概念:一般来说ZIP压缩分两种:文件夹压缩,文件压缩
2023-03-07 11:36:53
3689
原创 分布式 锁
本文从分布式锁的使用场景和要求着手分析,得到常见的4种实现分布式锁的方案1、基于数据库表 2、基于数据库排他锁 3、基于分布式缓存 4、基于zookeeper
2022-04-28 17:31:49
206
原创 Java 锁
本文在不同场景下对Java中的所进行分类并结合源码进行解析,主要分为 1)乐观锁 VS 悲观锁 、 2)自旋锁 VS 适应性自旋锁 、 3)无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁 、 4)公平锁 VS 非公平锁 、 5)可重入锁 VS 非可重入锁 6) 独享锁 VS 共享锁
2022-04-28 11:24:31
153
原创 Redis 事务和持久化
详细描述redis的事务和 redis持久化方式,包括 RDB持久化时的保存策略、dump.rdb生成的时机、手动保存、 redis.conf配置、rdb的备份、 rdb的恢复和 rdb优缺点,还有 AOF持久化时的文件故障备份、恢复、同步频率设置、Rewrite、AOF实现重写的机制、重写时机和优缺点。
2022-04-25 10:26:17
214
原创 Redis 数据类型和详解
文章详细描述了在redis中string、list、set、hash、zset五种数据类型的基本方法、应用场景、优缺点...
2022-04-24 14:11:23
1148
原创 Mock 实战
内容包括 初始化、 设置测试桩(Stubbing)、 Stubbing连缀调用、 Mock方法的默认值、 参数匹配器(matchers)、 有返回值的方法demo、 void方法demo、 void方法的mock
2022-04-19 17:47:51
1748
原创 Mockito 常见操作
文章包括 验证行为、 做测试桩(Stub)、 参数匹配器(matchers)、 验证函数的调用次数、 通过Stub抛出异常、验证执行顺序、 简化mock对象的创建、doReturn()、doThrow()、doAnswe...
2022-04-19 17:45:50
2749
原创 手机上使用油猴插件 Tampermonkey
可以安装油猴的手机浏览器 火狐浏览器(Firefox) Kiwi 浏览器 Yandex 浏览器优点与缺点 :火狐浏览器 UI 互动效果差一些,Kiwi 浏览器 UI 互动更爽一些, Yandex 浏览器俄式风格,有些难以驾驭,需要习惯一下 kiwi 插件显示最舒服,可以显示出图标 三款浏览器均能够实现所选 3 个不同网站脚本的功能 ...
2022-04-18 11:29:20
95944
原创 Git 进阶(代码暂存)
如果你想要切换到另一个分支,但不想要将当前分支的变更创建一次提交,此时就可以用到代码暂存 git stash命令。git stash将未完成的修改保存到一个栈上,而你可以在任何时候重新应用这些改动。也可以从暂存创建一个分支...
2022-04-11 18:34:25
991
原创 Git 进阶(合并与变基)
在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。整合分支最容易的方法是 merge命令。 rebase合并又叫做 变基, 你可以使用 rebase命令将提交到某一分支上的所有修改都...
2022-04-11 18:21:36
6871
原创 Git 命令
常用命令克隆项目:git clone xxx.git 创建分支:git branch daily/1.0.0切换分支:git checkout daily/1.0.0 也可以定制你的快捷命令,体验别名的便捷
2022-04-11 15:19:09
69
原创 Git 入门与安装
Git是一个分布式的代码版本管理工具。类似的常用工具还有SVN,CVS。Git相比SVN,CVS,最大的特点也是优点在于提供分布式的代码管理。这不是说SVN等不具有该功能,但就目前来看,Git更完善,而且也越来越多地被人们所接受。Git 有一个本地仓库的概念,提交代码首先是提交到本地仓库,然后再执行push命令后,才会真正push到远端的仓库。这点和svn有极大的不同。安装(以Mac为例)这里有详细的安装内容https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD
2022-04-11 14:19:24
342
原创 Java 幂等 实现
基于 redis 实现API操作幂等,为更新类接口添加特定的注解,增加幂等参数ClientToken,在基于ClientToken唯一的情况下先检查redis里是否有响应的结果,否则去请求service层再将结果放入redis,来达到请求幂等的效果。
2021-12-21 11:20:06
1875
原创 Java 时间 工具类
日期转换 Date -> String、获取当前日期的本周一是几号、获取当前日期周的最后一天、根据日期区间获取月份列表、根据日期获取年度中的周索引、获取当前时间所在周的开始日期、时间工具类
2021-06-15 11:28:18
1811
1
原创 Java8 stream流之分组 groupingBy 的使用
使用stream流可以让我们的代码看上去很简洁,本文举例了 按照班级分组、分组再过滤、统计分组后人数、嵌套分组、分组排序...
2021-06-10 10:22:18
43856
6
原创 常用Java8代码汇编(二)
Stream流主要用于对集合的数据进行加工处理,可以将需要处理的元素集合看作一种流,流在管道中传输,并且在管道的节点进行处理,比如 筛选,排序,聚合 对于流的操作,主要为三个步骤,流的创建 中间操作 最终操作
2021-04-19 17:25:20
170
原创 Java 分布式锁之redis代码实现
分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇将介绍第二种方式,基于Redis实现分布式锁。首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:1,互斥性。在任意时刻,只有一个客户端能持有锁。2,不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。3,具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。4,解铃还须系铃人。加锁和解锁必须是同
2021-03-09 16:14:16
149
原创 Java 分布式锁之redis应用解析
在系统中修改已有数据时,需要先读取,然后进行修改保存,此时很容易遇到并发问题。由于修改和保存不是原子操作,在并发场景下,部分对数据的操作可能会丢失。在单服务器系统我们常用本地锁来避免并发带来的问题,然而,当服务采用集群方式部署时,本地锁无法在多个服务器之间生效,这时候保证数据的一致性就需要分布式锁来实现。
2021-03-09 15:57:25
281
原创 (二)Spring aop 使用
AOP为(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
2021-03-05 15:44:17
153
原创 常用Java8代码汇编(一)
常用代码汇编获取某个list属性的值(采用Java8的Optional避免空)List students = Optional.ofNullable(condition.getStudents()).orElse(new ArrayList<>());为某个set属性赋值man.setValues(Stream.of(“123”,“456”,“789”).collect(Collectors.toSet()));为某个List属性赋值Info.setValues(Arrays.asL
2020-09-15 11:36:33
233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人