随笔分类 - Java
Java笔记
摘要:文章地址 ServerBootstrap 主要介绍服务端的启动流程以及如何绑定端口号、开启服务端 Socket 并让其进入接收连接状态的 启动模板如下; try { ChannelFuture future = new ServerBootstrap().group(bossGroup, worke
阅读全文
摘要:文章地址 全部的组件实现以 Spring Cloud Tencent 举例说明 actuator 监控 提供了查看组件具体实现的功能,依赖 spring boot actuator。 <dependency> <groupId>org.springframework.boot</groupId> <
阅读全文
摘要:文章地址 问题 WebSocket 的网络链路是 浏览器 <-> Nginx <-> 后端服务,空闲检测时间是 60 s,浏览器心跳发送时间间隔 10 s,出现了有心跳发送但长连接中断的问题。 过程 查看后端服务日志,发现是被动断开,不是空闲检测主动断开的,再抓服务器的网络包,确认后端服务是被断开的
阅读全文
摘要:原文地址 代码地址 问题 长链接场景下通常有一个类似 Map<String, Set<Long>> 的结构,用来查找一个逻辑组内的哪些用户,String 类型的 Entry.key 是逻辑组 key,Set<Long> 类型的 Entry.value 存放逻辑组内的用户 Id,那么这个 Map 显然
阅读全文
摘要:最近需要对用户进行限流,经过一番查找,发现 Bucket4j 官网推荐的第三方文章有一篇详细的分布式限流讲解 如何在 Java 中通过 Bucket4j 提供速率限制 - DZone Java,分布式暂时还用不上,因此参考着写了一个单机的。 依赖 <dependency> <groupId>com.
阅读全文
摘要:介绍 SFTP 是一种通过 SSH 实现的安全文件传输协议,不需要安装任何的软件就能传输文件。 依赖 haibaracp-spring-boot-starter 支持密码、密钥连接以及多主机连接,本文只介绍一些基础 API(上传、下载),更多 API 详见 GitHub - hligaty/haib
阅读全文
摘要:前言 写了一个 Sftp 的 Starter,开始写的时候比较混乱,于是看了看 Spring 官方的 Starter,所以本文是我根据官方 Starter 得出的标准 Starter 的理解,下面出现的 Xxx 你可以用 Redis、Hibernate、Sftp 等等名词替换。 文中只是自己的理解,
阅读全文
摘要:前言 多数据源的核心就是向 IOC 容器注入 AbstractRoutingDataSource 和如何切换数据源。注入的方式可以是注册 BeanDefinition 或者是构建好的 Bean,切换数据源的方式可以是方法参数或者是注解切换(其他的没想象出来),具体由需求决定。 我的需求是统计多个库的
阅读全文
摘要:前言 垃圾回收器的并行并发是和操作系统并行并发不同的两个概,另外只要标记时用户线程没运行未被标记的对象就可以回收。 并行:指多个 GC 进程同时运行,此时用户线程停止运行(STW,Stop The World)。 并发:指用户线程与 GC 线程同时运行。 性能指标 垃圾回收器的性能有三个指标:内存占
阅读全文
摘要:前言 介绍 JVM。基于 JDK8、64 位 HotSpot,所有“接口”都用实现的“类”描述,比如方法区之于元空间和堆、记忆集之于卡表。 JVM 内存结构 JVM 虚拟机数据区:程序计数器、本地方法栈、虚拟机栈、堆(线程共享)。 本地内存:元空间(线程共享)、直接内存(线程共享)。 未说明的是线程
阅读全文
摘要:数据结构 HashMap 是一个存储键值对的数据结构,主体是由一个数组构成,数组的大小有限,因此当 key 的 hash 相等时通过拉链法解决冲突,也就是在之前的 key 后面连接一个节点组成链表,当链表长度过长时该链表可能会变为红黑树提高查询效率。 构造函数 第一个构造函数包含两个参数, init
阅读全文
摘要:前言 SQL 的执行是通过 Statement 执行的,有的驱动 Statement 实现类有打印执行 SQL 的方法,而有的驱动没有,有打印 SQL 的方法直接执行就可以了,没有就只能手动拼接了。 有打印 SQL 方法 Mysql 的 Statement 有打印 SQL 的方法只需要获取 Stat
阅读全文
摘要:简介 ssh 默认的连接数量有限,当大量请求连接 ssh 时会概率性连接失败甚至直接失败,因此需要对连接池化,当然如果不要求实时的话可以用生产者消费者。 SpringBoot 程序也可以直接使用 Github hligaty/haibaracp-spring-boot-starter 或 Gitee
阅读全文
摘要:简介 线程池循环执行一些任务,某个线程执行超时,需要将超时的线程任务抛弃。 示例 修改前 当遇到超时的任务就凉凉,得重启程序。 Task.java: public class Task implements Runnable { private final int sleepTime; privat
阅读全文
摘要:线程池关系 Executors创建线程池 Executors 实现了几种常用的线程池。 newFixedThreadPool 固定线程数的线程池。 例子: ExecutorService executorService = Executors.newFixedThreadPool(2); for (
阅读全文
摘要:问题 JAVA8 String 转 LocalDateTime 报转换异常。 解决 写一个实现 JsonSerializer 和 JsonDeserializer 接口的类。 public class LocalDateTimeAdapter implements JsonSerializer<Lo
阅读全文
摘要:简介 Stream 是一个 Collection 的增强工具,可以对集合进行各种操作,而且可以很方便的写出并发程序,学习之前需要了解一些函数,可以看 JAVA8 Lambda表达式。常见的获取方式就是 Collection.stream()。 操作类型 操作类型分为两种 Intermediate(中
阅读全文
摘要:简介 在函数式编程中函数可以在程序中传来传去,甚至数字也可以用函数表示,而在面向对象中必须将这些函数封装成方法,通过调用方法实现。所以 Java 从邻居那拿来了 Lambda。 Java8 引入了 Lambda 表达式,它使代码变得更简洁和高效,更方便的让我们在计算机上说话,长得就像下面那样。 s
阅读全文