java小功能杂谈
虎哥和你一起学编程
路漫漫其修远兮吾将上下而求索
展开
-
java-thread-affinity线程绑核
通过将线程绑定到指定的cpu上,可以提高执行效率。因为每次都是相同的cpu,可以充分利用高速缓存,在java中可以使用以下依赖来使用。具体使用可以自行查阅。原创 2023-09-02 19:51:46 · 333 阅读 · 0 评论 -
本地缓存王者Caffeine
Caffeine借鉴了Guava的设计思想,青出于蓝而更胜于蓝,速度比Guava快6倍。原创 2022-10-27 15:00:24 · 212 阅读 · 0 评论 -
如何用Java代码来做压测
用Java代码来做压测,关键点就在于要让所有的线程都就绪后才开始执行压测逻辑,可以借助countdownlatch来实现。 public class Test { private static final int MAX_CONCURRENCY= 8; private static final CountDownLatch COUNT_DOWN_LATCH = new CountDownLatch(1); public static void ma...原创 2021-11-28 12:30:30 · 2560 阅读 · 0 评论 -
子类重写父类方法时权限修饰符的关系
子类在重写父类方法时,必须拥有不小于父类的权限。例如如下示例:public class TestPriority { protected int method1(int a, int b){ return 0; }}class A extends TestPriority{ private int method1(int a, int b){ return 0; }} 这个时候编译出错,提示'method1(i.原创 2021-11-23 13:44:29 · 1924 阅读 · 0 评论 -
jwt简单介绍
jwt全称为jsonwebtoken,尤其在前后端分离的情形下,由于它自包含,轻量安全的特性常常使用在后端用户权限校验中。 jwt由三部分组成 1.头部(header) 常包含1加密算法 2token类型 2.载荷(payload) 包含颁发者,有效期等和用户自定义属性 3.签名下面演示在Java中如何使用Jwt1.引入依赖 <dependency>...原创 2021-11-09 12:06:23 · 633 阅读 · 0 评论 -
@ApolloJsonValue讲解及使用
平常我们在使用Apollo时,有的时候可能要存储list集合或者对象形式,这个时候可以使用@ApolloJsonValue。先看看源码的描述 /** * Use this annotation to inject json property from Apollo, support the same format as Spring @Value. * * <p>Usage example:</p> * <...原创 2021-09-14 11:02:03 · 5863 阅读 · 8 评论 -
线上数据处理接口请求一次调用了两次的问题
最近写了一个线上数据处理的接口,发布上线后,调用了一下,结果发现居然请求了两次。 原因是数据处理的接口时间比较长,nginx有超时重试的设置,所以导致接口重试了,请求了多次,记录一下。...原创 2021-05-06 11:34:56 · 2502 阅读 · 1 评论 -
Arthas启动
arthas是阿里巴巴开源的java程序诊断工具,可以进行jvm的内存及线程的监控,还可以不重启加日志。 操作也非常的简便 wget https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar 这样就可以启动arthas,然后启动后就会扫描本地的java应用 选择本地的java应用,就可以进行诊断java应用了...原创 2021-04-23 09:55:45 · 602 阅读 · 0 评论 -
Objenesis创建类的实例
我在读spring源码的时候,发现了Objenesis这个东西,网上查阅一番,总结一下。 Objenesis是一个小型的专门为特定的类创建实例的框架。 java中已经有了Class.newInstance()方法来创建对象,但是某些情况下并不合适,例如私有构造方法,带参数的构造方法,还有构造方法抛异常的,但是通过Objenesis框架却能很好的创建出这些对象。下面就来演示一下Objenesis框架的使用。 1.先引入依赖 ...原创 2020-07-27 10:45:37 · 243 阅读 · 0 评论 -
长链接转短链接
平常当我们要发送短信,当短信里面包含链接地址的话,通常需要做一下长链接转短链接的功能,这样做就我理解有两个好处,一个是让传输的信息量更少,二个是安全性要好一些。 大概讲一下长链接转短链接的原理:切记,不是压缩算法。而是重定向,当我们在长链接转成短链接时会有一个短链接指向长链接的一个映射,然后当我们请求一个短链接的时候,服务器会先根据映射关系从短链接找到长链接,然后重定向到对应的长链接。下面我就写一个简单的例子来演示这个过程。 ...原创 2020-07-26 12:34:31 · 3736 阅读 · 0 评论 -
java中下划线分割数字
从java7开始支持下划线分割数字的形式,例如这种: long credite_card = 2938_3848_4474_4847L; 其实这种写法只是为了在数字比较长时可以更好的展现,如果我们平常在开发中真的遇到了特别长的数字, 可以采用这种写法。...原创 2020-05-08 19:10:39 · 991 阅读 · 0 评论 -
webflux入门demo
webflux是异步非阻塞请求,基于reactor模型,默认采用netty异步容器,下面就用springboot整合webflux做一个简单的demo。 先创建一个springboot工程,注意勾选以下模块. 然后新建一个controller来测试一下@RestControllerpublic class HelloController {...原创 2020-05-07 10:48:29 · 697 阅读 · 0 评论 -
free mybatis plugin
当我们使用Mybatis作为我们的orm框架时,如果我们需要从mapper跳到mapper.xml文件时,你是否是和我一样先粘贴方法名,然后在mapper.xml里面ctrl+F进行查找,然后找到对应的sql语句呢,这种方式有点儿low,其实有一个插件free mybatis plugin可以帮我们快速的进行导航。 首先安装free mybatis ...原创 2020-05-05 14:58:45 · 694 阅读 · 0 评论 -
浅谈一致性hash算法
先来探讨一个问题:为什么要有hash一致性算法? 先抛出一个场景:假如我们现在使用的是redis集群,这个时候我们有三个节点,NodeA,NodeB,NodeC,假如我们没有按任何的规则存储数据在这三个节点中,那么当我们需要查找具体的一个key时,则需要将这三个节点全部都去查询一遍,这样效率就会很低了,很明显的不行。这个时候有的同学就会参照分库分表时可以搞...原创 2020-05-04 11:02:06 · 546 阅读 · 0 评论 -
java8四大核心内置函数式接口
我们在使用lambda表达式的时候,通常需要定义一个接口,如果我们每次都去定义一个接口,显然是有点儿麻烦的,所以java8中提供了四个内置的函数式接口,通过直接使用这四个接口,或者使用它们的扩展接口,就可以让我们很方便的使用lambda表达式。 1.Consumer(消费型接口)接收一个参数,无返回值 ...原创 2020-05-03 14:23:37 · 1564 阅读 · 1 评论 -
深入浅出log4j
log4j是一个基于Java开发的日志框架,在实际开发中,使用非常之频繁,在这里有必要来讲解一下这个常用的框架,最主要的是讲一下配置文件。 log4j.rootLogger=DEBUG,Console,Filelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.Target=Sy...原创 2018-03-31 23:53:45 · 159 阅读 · 0 评论 -
log4j补充
今天看到项目中有一个这样的配置,log4j.logger.com.***=INFO这样的配置,颇为好奇,查找了许多资料,才明白这个是什么意思。 log4j.logger.***=LOG PRIVILIGE的意思是将某个包下面的日志级别设置为哪一个等级。也就是说除了rooter里面设置的日志级别以外,我们可以更细粒度的来设置日志级别,精确到包级别。...原创 2018-04-09 23:54:52 · 133 阅读 · 0 评论 -
list之按照中文拼音首字母排序
在实际生活中,我们经常会用到根据中文拼音的首字母进行排序。从而方便进行检索汉字,例如一个公司的人员,按照姓名的拼音的首字母进行排序,这种场景很多。 我自己写了一个简单的实现这种排序的代码,仅供大家参考。 public class TestCompare { private static Comparator comparator=Collator.getInstance(...原创 2018-03-28 22:37:01 · 12955 阅读 · 3 评论 -
Optional讲解
在我们平常的开发中,最常见的异常莫过于NullPointerException,这个臭名昭著的空指针异常突然就会冒出来,号称是一百万美元的损失,为了防止这个异常的产生,我们平常在写程序的时候经常会进行非空的判断,然后才执行我们的逻辑。下面来看一个例子。 假如有下面这样的一段代码。 String result=us...原创 2019-05-07 09:03:19 · 603 阅读 · 0 评论 -
java国际化
国际化的意思就是对多语言的支持,根据不同的国家地区代号,显示对应的语言。 jdk对国际化的支持主要就是提供了Locale和ResourceBundle这两个类. Locale即是代表国际地区的对象,例如zh-CN表示中国大陆,zh-TW代表中国台湾,en-US代表美式英语。 Res...原创 2019-08-02 16:45:30 · 264 阅读 · 0 评论 -
mysql支持表情
在实际开发中,可能有的地方会需要用到表情,例如我们使用mysql作为rds来存储,如果不做任何处理的时候,当你向mysql插入包含有表情的文本时,会报"Incorrect String '\F0\F8'"等错误,其实原因是我们的数据库通常都是utf8编码,支持三个字节的字符串,而表情是四个字节一编码的。这个时候就可以用utf8编码的扩展utf8mb4编码来解决这个问题。 ...原创 2019-08-11 09:54:34 · 305 阅读 · 0 评论 -
两个数字交换的三种方法
今天偶然看到了有一篇文章讲解了交换两个数字的方法,感觉很新颖,拿来说一下。 这种问题通常都是我们在学习java基础的时候可能就会做一些小练习,相信大多数人都能够做出来,但是解决问题的办法多种多样,如何提高效率,最快才是我们追求的目标 。 第一种 :人尽皆知,就是引入一个中间量。 int c=a; a=b; b=c; 第二种:有个问题就是A+B可能会超过...原创 2018-03-30 23:47:47 · 10500 阅读 · 0 评论