Java
Java笔记
赵昕彧
这个作者很懒,什么都没留下…
展开
-
GNS3结合JGraphT做最短寻址
从gns3的nodes和links接口可以分别获取到节点和连接状态。原创 2024-01-05 16:26:47 · 429 阅读 · 1 评论 -
行政区划表设计和多级查询
行政区划的表为一个多层级结构,设计大同小异,大致结构如下所示其中,code为区划编号(主键),parent_code为父区划编号,ancestors为祖区划编号,查询也主要围绕前两个展开。原创 2023-08-21 17:34:19 · 275 阅读 · 0 评论 -
Java 压平Json
【代码】Java 压平Json。原创 2023-05-23 18:03:49 · 383 阅读 · 0 评论 -
Spring Quartz项目实现Job的动态控制
Quartz可以对job进行简单控制,但不支持分布式,也没有管理界面和任务分片,但使用起来比较简易。原创 2023-03-22 14:34:26 · 830 阅读 · 0 评论 -
Java定时任务schedule和scheduleAtFixedRate的异同
我们进行一个简单的测试,在下面的代码中,每3秒就会有一个间隔5秒的线程休眠(模拟超时),对比一下二者输出数据的区别。的位置,它的开始时间是上一个线程的结束时间,它有在努力追赶,但后续并没有把之前落下的线程补回来。,说明scheduleAtFixedRate还是在很努力地加油想把之前落下的线程补回来的。的位置,它的开始时间是上一个线程的结束时间,并且在其后还有一个。可以看到,schedule在。原创 2023-02-25 10:39:27 · 298 阅读 · 0 评论 -
使用Autowired为什么会被IDEA警告,应该怎么修改最佳
在使用中,使用构造方法是比较可行的,加上lombok,其实也可以到达非常简便。原创 2023-02-13 13:09:27 · 6023 阅读 · 4 评论 -
Java使用HashedWheelTimer延迟操作
一、简介我们在某些业务场景中会遇到延迟操作,比如延迟通知、订单超过30分钟未支付取消订单等,这些业务需求的实现其实很好办。二、实现方式具体参考(建议看看):https://juejin.cn/post/7068837416714371102在上面的链接中,提供了扫描数据库轮训查询、Java的DelayQueue的方式,但是前者有明显的缺陷,系统负担很大,而后者的代码复杂度相对更高,所以感觉这两者都不太合适。这里推荐使用第三种,也就是Netty的HashedWheelTimer,它很好的帮助我们.原创 2022-03-09 10:10:48 · 2291 阅读 · 2 评论 -
Java对接百度翻译API
一、申请开发者ID这个作为个人用户就可以申请,很方便,可以根据需求购买更高级的服务。地址:http://api.fanyi.baidu.com/api/trans/product/desktop?req=developer二、基本代码1、具体发送查询的代码(HttpUtil为Hutool)// 对接的api为百度翻译private static final String TRANS_API_HOST = "http://api.fanyi.baidu.com/api/trans/vip/tr.原创 2022-02-10 13:52:22 · 2427 阅读 · 1 评论 -
SpringBoot集成JustAuth实现第三方授权登录
一、简介JustAuth脚手架目前已经对接了大多数常用的平台,包括微信、QQ、企业微信、钉钉、飞书、支付宝等。并且注释都是中文,非常便于阅读。本文章以飞书和企业微信为例做一个测试用例。pom依赖引入<dependency> <groupId>com.xkcoding.justauth</groupId> <artifactId>justauth-spring-boot-starter</artifactId> <versi.原创 2022-01-12 12:14:31 · 2176 阅读 · 0 评论 -
SpringBoot开发使用DevTools进行热部署
热部署的好处使用热部署最大的好处就是开发和迭代的流畅,不需要进行项目重启。尤其是在开发中,使用热部署可以提升效率,这是很大的一个作用。一、自动使用热部署1、需要添加maven依赖。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId></dependency>.原创 2021-12-25 22:17:19 · 169 阅读 · 0 评论 -
Java获取两个日期中所有日期
java根据传入的两个日期获取其中的所有日期注:1、代码借助Hutool实现,需要引入hutool的pom。<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.16</version></dependency>2、根据传入两个日期返回其中所有的日.原创 2021-12-03 18:31:54 · 1944 阅读 · 0 评论 -
Java控制台动态输出百分比
public static void main(String[] args) throws InterruptedException { for (int i = 1; i <= 100; i++) { System.out.print(i + "%"); Thread.sleep(200); System.out.print("\r"); } }原创 2021-10-22 14:29:28 · 607 阅读 · 0 评论 -
程序线程数合理配置
简介程序在不同的机器上可以对于数目进行有效配置,发挥其最佳性能。公式配置线程数 = CPU数(可以通过Runtime.getRuntime().availableProcessors()获得)× CPU期望运行效率(介于0~1之间)× (1 + W / C)W:等待时间C:计算时间比如一台电脑CPU数为1,期望运行效率为100%,而该程序等待时间和计算时间比为1,那么线程数为2个。...原创 2021-10-16 21:17:28 · 188 阅读 · 1 评论 -
jeecg-boot模块添加与引用
一、简介首先,在jeecg-boot中,jeecg-boot-module-system作为主要module,它不允许其他module调用,但是它可以通过引入其他module的方式,调用其他module的内容。二、引入方式比如这里需要引入一个module叫做jeecg-boot-module-common。1、首先添加module(手动添加或者使用jeecg-boot界面添加都行),然后在parent的modules中添加该module。2、当system需要调用该module时,可以在sys.原创 2021-09-17 21:53:47 · 3616 阅读 · 0 评论 -
IKAnalyzer代码及注解
一、简介IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。它很容易使用。二、代码1、首先在pom.xml加入依赖<dependency> <groupId>com.janeluo</groupId> <artifactId>ikanalyzer</artifactId> <version>2012_u6</version></dependency>.原创 2021-05-13 23:09:41 · 475 阅读 · 0 评论 -
Protobuf在Java中的简单使用
系列导航(一)Protobuf下载和编译一、编写一个.proto文件option java_package = "com.proto";option java_outer_classname = "PersonProto";message Person { required string name = 1; required int32 age = 2;}注1、这里使用的是protobuf 2版本,也就是默认版本,如果需要用到3版本,需要在头部加上 syntax = "prot.原创 2021-04-28 14:38:51 · 1679 阅读 · 1 评论 -
Java发送文字邮件
一、简介使用Java发送邮件前,需要发送邮箱的账户开启POP3/SMTP服务功能。在开启该功能后,将会获得16位授权码,这是代码中需要用到的。二、Java代码1、maven代码则可以在pom中加入下面的依赖项。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId>.原创 2021-04-22 15:31:36 · 132 阅读 · 0 评论 -
Java操作钉钉机器人
一、添加钉钉机器人1、在群设置 > 智能群助手 > 添加机器人2、我们可以对机器人做出三个限制,包括:自定义关键词、加签、IP限制。而我这里使用自定义关键词,也就是只有包含设定关键词的才能正常发送消息到群中。3、确定添加后,将得到webhook的地址(相当于token吧)。二、s...原创 2021-04-22 15:06:07 · 1501 阅读 · 0 评论 -
Java拦截器的简单使用
一、简介概念: java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。作用域: 动态拦截Action调用的对象。简单来说,我们可以通过配置拦截器,来进行一些操作,比如:提前拦截掉不合规范的请求、在下发请求时提前做一些重复的事情等等。使用方式: 实现方法有两种 实现Interceptor接口或继承HandlerInterceptor.原创 2021-04-16 15:12:07 · 1536 阅读 · 0 评论 -
Java操作Kafka
一、pom.xml<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>1.1.0</version></dependency>二、统一参数PSack的默认值就是1,表示producer只要收到一个leader分区副本成功写入的通知就认.原创 2021-04-10 16:29:27 · 227 阅读 · 0 评论 -
RabbitMQ从0到1入门
一.介绍RabbitMQ是Erlang语言开发,基于AMQP协议实现的消息队列,在中小型企业应用广泛。二.应用场景任务异步处理应用程序解耦流量削峰日志处理…三.优势使用简单,功能强大基于AMQP协议(这是一种二进制协议,提供客户端与消息中间件之间异步、安全、高效地交互)社区活跃,文档完善使用Erlang语言开发,高并发性能好SpringBoot默认已经集成RabbitMQ四.工作流程发送消息生产者(producer)和Broker(MQ)原创 2020-05-10 12:03:16 · 338 阅读 · 0 评论 -
Java操作RabbitMQ
一、pom.xml<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.6.0</version></dependency>二、统一参数可以写死或使用其他方式。package com;public interface MQ_INFO { .原创 2021-04-10 15:34:16 · 133 阅读 · 0 评论 -
布隆过滤器(一)——布隆过滤器的原理和理解
一、背景布隆过滤器(BloomFilter)在1970年由布隆提出,用于检测一个元素是否存在于某个特定的集合中,它有一定的误判几率。实际上,在数据量不大时,我们并没有使用布隆过滤器的必要,只需要创建一个集合,然后扫描集合的内容进行比较即可清楚某数据是否存在。但是在数据量非常大时,每次扫描就会消耗太多的资源,这时,有一种机制能够提前过滤就显得很重要了,即便它有一定的误判概率。之前文章中有简要说过Redis的缓存穿透、缓存击穿等问题(Redis缓存问题),事实上,布隆过滤器也常常和Redis等工具一起使.原创 2021-03-22 16:39:10 · 164 阅读 · 0 评论 -
布隆过滤器(二)——Java布隆过滤器实现
一、自定义布隆过滤器在下面的代码中,我们模拟了一个布隆过滤器的实现,包括大小、Hash的算法、添加数据、判断,最后进行了测试。/* * 自定义的布隆过滤器 * */public class MyBloomFilter { // 定义一个长度为10亿的比特位 private static final int DEFAULT_SIZE = 256 << 22; // 使用加法hash算法,所以定义一个8个元素的质数数组 private static fin.原创 2021-03-22 16:55:15 · 249 阅读 · 0 评论 -
Java左移、右移、逻辑右移
一、使用注意移位操作可以极大地提高性能,因为在计算机底层对位的操作是最快的,但是可能会有些不太好理解。二、左移运算:左移一位相当于乘以2的1次方,左移n位就相当于乘以2的n次方。如:2 << 2 = 2 * 2^2 = 8int a = 20;String str1 = Integer.toBinaryString(a);// 十进制转二进制System.out.println("转为二进制 : " + str1);// 左移:在二进制位的最后5个补零a = a <.原创 2021-03-18 17:34:45 · 788 阅读 · 0 评论 -
Java线程池系列(一):简单介绍及示例
一、使用介绍线程可以通过Thread类一次创建一个线程,同时进行管理。但是这种方式常用于对线程很大程度的介入管理,比如控制优先级、对线程进行标识然后进行维护、创建的线程需要保持很长时间的运行等。而在实际使用中,我们常常可以把线程交给线程池来管理,这样不仅方便管理,而且很多时候能够提升性能,比如:不频繁销毁线程,重复执行任务。二、线程池的类型Java中提供了四种很方便的线程池创建方式,它们都会返回一个已经封装完善的ThreadPoolExecutor。newCachedThreadPool:创建.原创 2021-03-05 17:32:44 · 235 阅读 · 0 评论 -
Java线程池系列(二):获取线程的返回结果
系列导航原创 2021-03-05 17:39:18 · 8806 阅读 · 0 评论 -
Java代码中线程数量的合理配置
得到确定CPU核数Runtime.getRuntime().availableProcessors();IO密集型和CPU密集型IO密集型(阻塞型)简介: 大部分的情况是CPU在等I/O的读/写,比如读写磁盘、操作数据库、网络数据访问等。设定核数: 核心线程数 = CPU核数 / (1 - 阻塞系数),阻塞系数取值范围为0~1之间,可以凭借经验猜测,或者借助工具进行时间计算得到精确数值;例如:核心线程数为8,阻塞系数为0.5,那么核数为16。CPU密集型(计算型)简介: 大部份时间用来.原创 2020-12-11 15:24:15 · 455 阅读 · 0 评论 -
Java反射机制及使用方法
定义反射是框架的灵魂,对于任意一个类,能够动态获取信息以及动态调用对象方法的功能,这被称为反射机制。对象的创建静态比如Person p = new Person(),在编译时就已经确定了具体类型,绑定了对象动态运行时才会确定具体类型,能够有效降低类之间的耦合度,最大限度发挥java的灵活性反射机制的实现在java中,使用一个类,需要把这个类加载到虚拟机(内存)当...原创 2020-05-01 22:11:11 · 350 阅读 · 1 评论 -
通俗理解JVM系列(一)——虚拟机结构
一.JDK整体体系架构在不同的系统中,java代码能够做到一次编写、到处运行,其原因就是因为不同系统的java虚拟机(JVM)能够解析各个地方编写java代码。二.JVM虚拟机堆、方法区是共享区域,调优也是调这一部分。栈、本地方法站、程序计数器是线程私有的,由JVM自动化管理。栈全称为线程栈或者虚拟机栈,其特点是先进后出(FILO),主要存放程序在运行过程中产...原创 2020-04-30 10:45:52 · 291 阅读 · 0 评论 -
通俗理解JVM系列(二)——类加载机制
一.类的生命周期加载将.class文件从磁盘读取到内存中连接验证:验证字节码文件正确性准备:给静态变量分配内存,并赋予默认值(比如int默认为0)解析:类装载器装入类所引用的其他类初始化为类的静态变量赋予正确的初始值,用户设置的值将替换虚拟机默认的初始值二.类加载机制的种类1)加载器启动类加载器Bootstrap ClassLoader:负责加载jre核...原创 2020-04-30 11:02:09 · 191 阅读 · 0 评论 -
通俗理解JVM系列(三)——GC算法理解
一.垃圾对象判断判断对象是否可回收引用计数法概念:这种方式现在用的不多,它给对象添加一个引用计数器,每当有一个地方引用了此对象,计数器就加1,当引用失效则减1。任何时候,计数器为0时,表示对象不再被引用。特点:这个方式效率高,但是无法解决相互引用的问题,当对象两个对象相互引用对方,导致循环引用,这样计数器就无法为0,所以无法进行回收。可达性分析算法通过一系列称为GC Roo...原创 2020-04-30 14:55:44 · 175 阅读 · 0 评论 -
通俗理解JVM系列(四)——垃圾收集器及其选择
垃圾收集器java虚拟机对垃圾收集器没有强硬规定,因为没有所谓最好的垃圾收集器出现,只能根据不同的场景来选择更加合适的垃圾收集器Serial收集器概念:串行收集器是历史非常悠久的收集器,它是一个单线程收集器,**在进行垃圾收集工作时必须暂停其他所有线程STW(Stop The World),**直到它收集结束。现在已经逐渐淘汰。特点新生代采用复制算法,老年代采用标记-整理算法。...原创 2020-04-30 14:57:44 · 203 阅读 · 0 评论 -
通俗理解JVM系列(五)———GC调优
GC调优官网有调优参数的详解https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html主要是对停顿时间和吞吐量进行调优停顿时间:垃圾收集器做回收时,对应用程序执行进行中断服务的时长(-XX:MaxGCPauseMillis)吞吐量:垃圾收集的时间占总时长的比例:业务执行时间 / GC时间 + 业务...原创 2020-04-30 15:04:40 · 309 阅读 · 0 评论