
学习
文章平均质量分 71
hero.fei
这个作者很懒,什么都没留下…
展开
-
redis知识点汇总
redis知识点汇总原创 2022-12-08 14:45:33 · 722 阅读 · 0 评论 -
重试Spring Retry 的使用
Spring Retry提供了自动重新调用失败的操作的功能。这在错误可能是暂时性的(例如瞬时网络故障)的情况下很有用。Spring Retry提供对流程和基于策略的行为的声明式控制,易于扩展和自定义。接下来,本文将带大家了解 Spring Retry 的使用方法和部分源码解析引入spring-retry 相关包使用spring-retry ,我们只需引入spring-retry 和 aop 的包即可,以 maven 为例: org.springframe...翻译 2022-06-15 13:56:06 · 623 阅读 · 0 评论 -
读取写入本地文件
public static void main(String[] args) throws IOException { String dataStr =""; File file = new File("/Users/zhangpengfei/Desktop/zpf/email.json"); List<String> datas = FileUtils.readLines(file); File file1 = new Fil..原创 2022-03-23 18:02:12 · 440 阅读 · 1 评论 -
代码耗时统计Google之Stopwatch 计时器使用
在代码调试中为了统计耗时需要输出时间时利用StopWatch可方便的进行统计,然后对时间长的进行优化。常用方法返回值 方法 Desc Stopwatch static createStarted() 使用System.nanoTime()其时间源创建(并启动)新的Stopwatch Stopwatch static createStarted(Ticker ticker) 使用指定的时间源创建(并启动)新的Stopwatch Stopwatch转载 2022-01-14 14:32:45 · 1025 阅读 · 0 评论 -
springboot中redisTemplate的使用
springboot中整合redisspringboot中redisTemplate的使用一:springboot中整合redis (1)pom.xml文件中引入依赖<!--加入redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId...原创 2022-01-14 12:47:12 · 3551 阅读 · 0 评论 -
redis中HyperLogLog使用(统计数据)
HyperLogLog是Redis中的高级数据结构,它主要用于对海量数据(可以统计2^64个数据)做基数统计(去重统计数量)。它的特点是速度快,占用空间小(12KB)。但是计算存会在误差,标准误差为0.81%。HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以他并不能判断给定的元素是否已经存在了。适合用来对海量数据进行unique统计,对内存占用有要求,而且还能够接受一定的错误率的场景。对于union操作由于是O(N),在海量数据层面需要注意慢查询问题基本指令pfadd原创 2021-12-14 20:06:42 · 2152 阅读 · 0 评论 -
java中对表达式{index}的替换
/** * @Author: ZhangPengfei * @Date: 2021/11/17 10:36 上午 */public class TemplateUtils { public static final String DEF_REGEX = "\\{(\\d+)\\}"; public static String render(String template, Object[] args) { return render(template, args,.原创 2021-11-22 14:33:23 · 543 阅读 · 0 评论 -
zkCli操作zookeeper的命令
zookeeper cli使用 brew 安装,已经把 zookeeper bin 目录下的命令添加的系统中,因此在终端直接执行 zkCli,就创建了一个 zk 客户端,连接 zk 服务。输入 help 命令(其实输入任何 zkCli 不能识别的命令,都会列出所有的命令),查看可用的命令:对 znode 进行增删改查创建节点 create语法create [-s] [-e] path data acl-s 创建有序节点如果在创建znode时,我们使用排序标志的话,Zo..翻译 2021-11-11 11:47:35 · 1477 阅读 · 0 评论 -
使用grpcurl访问gRPC服务
go或者python等调用java服务时需要通过grpc去调用,如何在jav项目中开启grpc服务可参考我的另一篇文档Spring项目实现grpc协议_zpflwy1314的博客-优快云博客grpcurl是一个命令行工具,使用它可以在命令行中访问gRPC服务,就像使用curl访问http服务一样。准备: 在gRPC服务中注册reflection服务gRPC服务是使用Protobuf(PB)协议的,而PB提供了在运行时获取Proto定义信息的反射功能。grpc-go中的"goog...翻译 2021-11-11 10:53:58 · 1281 阅读 · 0 评论 -
如何将一个外部bean加入spring容器中以及spring.factories使用
原因为什么要使用,因为在程序开发中,可能包名不一样,pom依赖的很多的jar 他们是如何把这些类进行注入到spring容器中的呢。所以springboot就提出了spring.factories,一般写一个框架但是如何保证框架中的bean引入到主服务的容器中的,这个时候需要在框架中引入spring.factories,在主服务初始化时会调用所有的spring.factories文件将里面声明的bean进行扫描到spring容器中。一、第一种框架项目是Test类package com.test原创 2021-11-09 11:49:44 · 962 阅读 · 0 评论 -
spring容器中如何注入多个相同bean及@Primary注解使用
@Primary注解使用当一个方法有多个实现类时,在方法中注入了多个,@primary可以指定注入哪一个。@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用@Autowired @Qualifier(“personDaoBean”) 存在多个实例配合使用@Primary能够与@Component组合用在组件扫描的bean上,也原创 2021-11-09 11:37:43 · 5235 阅读 · 0 评论 -
使用spring cache缓存学习
spring boot cache 提供了一些注解方便做cache应用。(1)@CacheConfig:主要用于配置该类中会用到的一些共用的缓存配置(2)@Cacheable:主要方法返回值加入缓存。同时在查询时,会先从缓存中取,若不存在才再发起对数据库的访问。(3)@CachePut:配置于函数上,能够根据参数定义条件进行缓存,与@Cacheable不同的是,每次回真实调用函数,所以主要用于数据新增和修改操作上。(4)@CacheEvict:配置于函数上,通常用在删除方法上,用来从缓存..原创 2021-10-07 18:31:45 · 173 阅读 · 0 评论 -
UUID生成器
/** * UUID 生成器 */public class RandomGenerator { /** * 生成UUID */ public static String getUUID() { UUID uuid = UUID.randomUUID(); return uuid.toString().replace("-", ""); } public static String getRand.原创 2021-10-07 14:38:49 · 701 阅读 · 0 评论 -
springboot集成分布式任务执行框架elastic job
Elastic-Job并不直接提供数据处理的功能,框架只会将分片项分配至各个运行中的作业服务器,开发者需要自行处理分片项与真实数据的对应关系elasticjob使用了 Quartz,任务执行是实现了 Quartz 的 Job 接口下面是一个工作中案例:首先引入springboot中pom依赖:<!-- elastic job --> <dependency> <groupId>org.apache.shardingsp...原创 2021-09-07 21:31:20 · 721 阅读 · 0 评论 -
Guava异步框架Event-bus在spring中的使用总结
Event-bus使用总结1. 概述guava中EventBus是一个消息处理总线,基于观察者模式设计和实现。主要介绍下在spring框架中如何使用和配置EventBus。EventBus主要分为两种,一种是同步消息总线(EventBus);另一种是异步消息总线(AsyncEventBus)。下面主要以同步消息总线为例来介绍下EventBus和Spring的结合使用。一个消息总线可以支持多种消息的订阅和发送,不同的消息通过类名来区分。消息体使用一个简单的Java DO,本身不需要继...原创 2021-09-04 18:22:21 · 1055 阅读 · 0 评论 -
springboot中pageHelp的使用
打个需要以下几步:引入pom依赖:<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.11</version></dependency>添加配置:下面有两种配置方式,选择其中一种就行(...原创 2021-06-24 15:45:52 · 1451 阅读 · 0 评论 -
static修饰方法的使用
static 修饰方法1、static修饰的方法被称之为静态方法也叫作类方法,加static的方法,可以通过类名直接访问,也可以通过对象名访问,而不加static只能通过对象名访问,加了static的方法,不能再内部写this,因为直接用类名点方法的时候,没有当前对象2、加了static的方法,不能再方法内部访问非static的属性和行为;原因:1、在静态方法的内部无法确认非static的内容属于哪个对象,它是通过类名调用,这时没有对象----这就相当于工具类2、static修饰的方法,在类翻译 2021-06-17 10:53:24 · 3725 阅读 · 0 评论 -
redis常见面试题
## **<center>redis</center>>**### 数据类型#### string Redis 的字符串是动态字符串,是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,内部为当前字 符串实际分配的空间 capacity 一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,为了避免加倍后的冗余空间过大而导致浪费,所以扩容时一次...翻译 2021-06-15 17:09:05 · 199 阅读 · 0 评论 -
JVM面试总结
### 一、 JVM概念模型 我们整天都在使用JVM,但是你知道JVM的内存布局是怎么样的么? 它可以被分为两种情况 1. 线程共享:所有的线程都可以去访问的区域 1). 堆 2). 方法区 2. 线程私有:每个线程都有的区域 1). 虚拟机栈 2). 本地方法栈 3). 程序...原创 2021-06-11 15:11:10 · 1096 阅读 · 0 评论 -
数据库事物隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。下面通过事例一一阐述它们的概念与联系。Read uncommitted:读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。Read committed:读提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据。Repeatable read:重复读,原创 2021-05-29 12:59:55 · 220 阅读 · 0 评论 -
MessageFormat.format以及字符串常用操作
MessageFormat.format是根据顺序和占位符来对应插入的MessageFormat.format("update_pre_intercept_{0}_{1}_{2}", "aaa", "bbb", "ccc");StringUtils.defaultIfBlank(d,"结果")如果d为null就输出后面的"结果"参数注意:1.如果最后结果想加上一个单引号,就需要在相应占位符上加上两个单引号,才能准确转换。 2.如果传入的参数为null,会自动替换为null。如果想替...原创 2021-05-24 21:23:11 · 443 阅读 · 0 评论 -
MySQL中on duplicate key update的使用
MySQL使用on duplicate key updateon duplicate key update进行自动判断是更新还是新增(MySQL判断记录是否存在的依据是主键或者唯一索引,insert在主键或者唯一索引已经存在的情况下会插入失败,而InsertOrUpdate在主键或者唯一索引已经存在的情况下就变成了根据主键或唯一索引update的操作)。一段时间后发现该表的主键id(已设置为连续自增),不是连续的自增,总是跳跃的增加,这样就造成id自增过快,已经快超过最大值了,通过查找资料发现on原创 2021-04-25 18:06:58 · 1247 阅读 · 0 评论 -
分库分表
分库分表主要有两种方式:水平拆分和垂直拆分分库的意思就是把数据表按照业务不同分成不同的库,可以减少单个库的压力例如按照业务将不同模块的数据放在不同的库中。分表的意思就是将一个表中的数据分成多个表按照一定的逻辑拆分成多个表从而减少单库的压力。水平拆分简单理解起来就是将一个表中数据分成多个结构相同的表,垂直拆分就是将一个表分成多个关联的小表,组合在一起就是整个表。水平拆分的意思,就是把一个表的数据给弄到多个库的多个表里去,但是每个库的表结构都一样,只不过每个库表放的数据是不同的,所有库表的.原创 2021-04-15 22:38:35 · 199 阅读 · 0 评论 -
mybatis中case when用法以及@Param用法
https://libusi.blog.youkuaiyun.com/article/details/108044060select d.tools_name, null as sum,null as num,dtp.specs,dtp.type,count()count( case when state =0 then 'state' end ) as 在库 ,count(case when state =1 then 'state' end) 借出 ,count(case when state =2 .原创 2021-04-15 22:30:54 · 8025 阅读 · 0 评论 -
es学习总结
https://endymecy.gitbooks.io/elasticsearch-guide-chinese/content/java-api/index-api.htmles概念:索引:类似与数据库的表 类型:文档:一行在一个index/type里面,你可以存储任意多的文档。注意,一个文档物理上存在于一个索引之中,但文档必须被索引/赋予一个索引的type。分片:分库分表//准备查询对象 SearchRequestBuilder searchRequestBui...原创 2021-04-10 19:18:57 · 1420 阅读 · 0 评论 -
spring中利用xml 声明配置bean 和添加property属性
xml 配置bean 和property属性在class对象中用到的属性map,list,string等都可以放在xml配置文件中按照property属性注入其实是使用了setter方法配置bean,配置的属性必须要用set方法才可以,使用时直接使用即可,避免了在代码中初始化。问题:首先由一个FileUpLoadController,在该类中用Autowired注解注入FileUpUtils。而类FileUpUtils需要一些配置参数,比如文件服务器接口的路径和方法名,而这些参数,我们想要配置在p原创 2021-01-21 21:09:30 · 3408 阅读 · 0 评论 -
mysql分区与执行计划EXPLAIN使用
EXPLAIN简介EXPLAIN 命令是查看查询优化器如何决定执行查询的主要方法,使用EXPLAIN,只需要在查询中的SELECT关键字之前增加EXPLAIN这个词即可,MYSQL会在查询上设置一个标记,当执行查询时,这个标记会使其返回关于在执行计划中每一步的信息,而不是执行它,它会返回一行或多行信息,显示出执行计划中的每一部分和执行的次序,从而可以从分析结果中找到查询语句或是表结构的性能瓶颈。EXPLAIN能干嘛 分析出表的读取顺序 数据读取操作的操作类型 哪些索引...原创 2021-01-20 15:34:24 · 623 阅读 · 0 评论 -
接口参数校验javax.validation.constraints的使用
javax.validation.constraints的使用后台开发需要对对象的传进来的参数进行校验,有专门的校验工具,validation bean 是基于JSR-303标准开发出来的,使用注解方式实现,及其方便,但是这只是一个接口,没有具体实现.Hibernate Validator是一个hibernate独立的包,可以直接引用,他实现了validation bean同时有做了扩展,比较强大。要使用在pom.xml里添加依赖常用注解:代码 说明@Null 被注解的元素...原创 2021-01-18 10:28:10 · 17698 阅读 · 0 评论 -
java中集合的分割
一、获取集合中指定下标的分集合public class TestDemo { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); list.add("d");//取序号为1...原创 2021-01-09 11:37:16 · 4443 阅读 · 1 评论 -
BigDecimal与DecimalFormat对数字的处理
BigDecimal由任意精度的整数非标度值和32位的整数标度(scale)组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以10的负scale次幂。因此,BigDecimal表示的数值是(unscaledValue×10-scale)。一、BigDecimal的创建: // 第一种用new一个对象的方式 BigDecimal b1 = new BigDecimal("0.48"); // 第二种用内部方法获取 BigDecimal b...原创 2021-01-09 10:56:48 · 641 阅读 · 0 评论 -
单元测试junit的使用
@RunWith(SpringJUnit4ClassRunner.class)@SpringJUnitConfig(Application.class)@TestPropertySource(locations = "classpath:application.properties")@Slf4jpublic class CalculatorTest {private MockMvc mvc; @Before public void setUp() throws Excep...原创 2021-01-09 10:19:51 · 1390 阅读 · 0 评论 -
SpringBoot中建立WebSocket连接(STOMP)主动推送消息
STOMP协议介绍STOMP,Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互,类似于OpenWire(一种二进制协议)。由于其设计简单,很容易开发客户端,因此在多种语言和多种平台上得到广泛应用。其中最流行的STOMP消息代理是A转载 2020-10-20 17:58:34 · 5214 阅读 · 2 评论 -
mybatisPlus配置使用
具体的可参考官方文档https://baomidou.com/guide/quick-start.html先创建启动生成xml、mapper以及数据库对象import com.baomidou.mybatisplus.core.toolkit.StringPool;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.InjectionConfig;原创 2020-10-12 21:48:54 · 332 阅读 · 0 评论 -
反射类以及ReflectionUtils类的使用
JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。JAVA反射的方法主要有三种:Class,Method,Field。Field获取对象的属性获取Field的常用方法:getFields():获取public类型的属性(也可以获取到父类的public修饰的属性)并返回一个Field数组;getDeclaredFields(): 获取所有..原创 2020-09-05 17:29:34 · 1385 阅读 · 0 评论 -
SpringBoot利用ApplicationRunner 接口自定义单元测试
在开发中可能会有这样的情景。需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。这两个接口分别为CommandLineRunner和ApplicationRunner。他们的执行时机为容器启动完成的时候。这两个接口中有一个run方法,我们只需要实现这个方法即可。这两个接口的不同之处在于:ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接..原创 2020-09-04 16:04:39 · 707 阅读 · 0 评论 -
SpringBoot中条件注解@condition的使用
SpringBoot基础注入@Condition使用I.@Conditional注解这个注解在Spring4中引入,其主要作用就是判断条件是否满足,从而决定是否初始化并向容器注册Bean,自定义实现一个bean时只需要实现Condition接口中的matches方法即可。publicclassRandBooleanConditionimplementsCondition{@Overridepublicbooleanmatches(ConditionContextc...原创 2020-08-30 23:46:45 · 744 阅读 · 0 评论 -
工作中常用git命令
1.commit push 代码已经更新到远程仓库对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令git revert <commit_id>revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新。git checkout -b branchname <commitId>将本地代码改为对应的commitid对应的版本分支名称为bra原创 2020-08-10 15:33:42 · 132 阅读 · 0 评论 -
postman进行批量测试(压测)
postman下载安装地址为:https://www.getpostman.com/apps可以根据自己的电脑使用下载不同的版本。一:创建一个collect并保存二:保存request至collect中Params为url中调用的参数,Authonzation为认证信息,Headers为请求头中的参数,Body为post请求的请求体,json数据三:点击Runner运行四:上传文件,修改conllect为需要运行的,Data为需要上传的文件,...原创 2020-08-01 19:02:02 · 1409 阅读 · 0 评论 -
java中实现一些版本大小对比
实现一个compare接口,因为版本往往是1.23.60.2之类的,所以只能用.分割之后进行依次对比。下面是一个Comparator接口只需要在TreeSet或者TreeMap中加一个参数TreeMap treemap= newTreeMap<getComparator>private static Comparator<String> getComparator() {Comparator<String> comparator = (one, two) ->.原创 2020-07-10 10:54:23 · 469 阅读 · 2 评论 -
linux常用命令
系统信息arch 显示机器的处理器架构(1)uname -m 显示机器的处理器架构(2)uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作cat /proc/cpuinfo 显示CPU info的信息cat /proc/interrupts 显示中断cat /proc/meminfo 校验内存使...原创 2020-07-02 15:32:58 · 163 阅读 · 0 评论