自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 资源 (3)
  • 收藏
  • 关注

原创 Mybatis中使用了哪些设计模式

Mybatis 中使用了10种设计模式,其中创建型模式3种(工厂、单例、建造者),结构型模式4种(适配器、代理、组合、装饰器),行为型模式3种(模板、策略、迭代器)

2022-08-04 16:57:36 4208

原创 静态代理、JDK/CGLIB 动态代理

静态代理、JDK/CGLIB 动态代理1、代理模式2、静态代理2.1 描述2.2 实现步骤2.3 场景实践2.3.1 定义发送短信接口2.3.2 定义发送短信接口实现类2.3.3 创建代理类并实现同样的接口2.3.4 代码测试3、动态代理3.1 JDK 动态代理1、代理模式简单来说就是我们使用代理对象代替对真实对象的访问,在不改变真实对象的前提下,提供额外的功能操作,增强目标对象的功能。代理模式可分为静态代理和动态代理两种方式2、静态代理2.1 描述静态代理需要手写代理实现类去实现接口,并去重写

2022-03-14 23:18:39 611

原创 linux-常用系统工作命令

常用系统工作命令echoecho 命令用于在终端输出字符串或变量提取后的值,格式为“echo [字符串 | $变量]”。echo helloWorld我们使用$变量的方式提取变量 JAVA_HOME 的值,并将其输出到屏幕上echo $JAVA_HOMEdatedate 命令用于显示及设置系统的时间或日期,格式为“date [选项] [+指定的格式]”。只需在强大的 date 命令中输入以“+”号开头的参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与

2022-03-14 11:16:26 2015

原创 lists.newarraylist()

lists.newarraylist()和new arraylist() 区别List<Integer> list = new ArrayList<Integer>();List<Integer> list = Lists.newArrayList();Lists.newArrayList() 其实和 new ArrayList() 几乎一模一样, 唯...

2019-09-30 16:51:19 31323

原创 Java实现阿里云短信发送

要使用Java实现阿里云短信发送,需要先在阿里云上开通短信服务并获取相应的凭证,包括AccessKey ID和AccessKey Secret。接下来,可以使用阿里云提供的短信服务SDK来发送短信。此外,记得定期更新AccessKey,并确保不要在代码中硬编码AccessKey信息,最好是通过环境变量或配置文件来管理这些敏感信息。运行上述Java程序,应该会收到一条来自阿里云短信服务的短信。

2024-02-29 19:17:13 496

原创 Java集合-ArrayBlockingQueue

Java集合-ArrayBlockingQueue

2024-01-08 20:28:17 437

原创 Java集合-SynchronousQueue

Java集合-SynchronousQueue

2024-01-08 20:23:26 452

原创 Java集合-CopyOnWriteArrayList

Java集合-CopyOnWriteArrayList

2024-01-05 17:32:14 387

原创 Java集合-LinkedList

Java集合-LinkedList

2024-01-05 17:25:42 708

原创 Java集合-ArrayList

Java集合-ArrayList

2024-01-04 20:31:54 583

原创 ClickHouse AST is too big 报错问题处理记录

AST is too big;问题处理

2023-08-16 16:39:57 1130

原创 记录clickhouse 数据库连接超时问题处理

测试环境,clickhouse 大概有3个亿的数据。业务场景:综合报表,查询一周内的报表数据统计。需要绘制的图表有接近20个,采用ForkJoin 多线程处理。数据库连接:Hikari,默认最大数据库连接数为10,连接超时时间为10s。其次,采用ForkJoin多线程处理,一旦有多线程同时处理且单个线程处理时间过长时,就有可能会连接数超过10,且连接超时时间超过10s,就会抛出连接超时异常。首先,默认最大数据库连接数为10,数量较小(主要),连接超时时间为10s,时长偏短(次要);

2023-05-11 14:18:15 2180

原创 MybatisPlus 配置多数据源

项目之前用的是 `Postgresql` 数据库,但因为日志相关数据量比较大入库效率很低,而且关于日志相关的数据查询效率也在变慢。所以决定启用 `clickhouse`,因为 `clickhouse` 支持大量数据的批量入库,并且查询效率也极高(战斗民族开发的,可想而知,简单粗暴,极致追求效率)。引入 `clickhouse` 只针对日志相关的数据库,其他业务相关的数据库表依然沿用 `Postgresql`,所以项目要支持多数据源。

2022-11-10 20:06:18 1599

原创 Clickhouse 重启失败问题记录

Clickhouse 重启失败问题记录

2022-11-03 20:26:47 1260

原创 Linxu 查看磁盘空间命令

项目上有个需求,当磁盘空间达到阈值时,就触发磁盘空间不足告警。造模拟数据时,需要在服务器上监测磁盘空间状况,此时就用到了 `查看磁盘空间的命令` 。

2022-11-02 16:52:18 4961

原创 maven 引入外部JAR

在项目开发过程中,需要引入其他工程项目的JAR包,因为是本地JAR,没有上传到maven仓库中,暂时通过外部引入的方式,进行处理。

2022-10-25 17:30:53 1184

原创 Java中的四种引用详解(强引用、软引用、弱引用、虚引用)

1、强引用,不会被垃圾回收;2、软引用,当内存不足时,会被垃圾回收;3、弱引用,当执行垃圾回收时,就会被直接回收掉;4、虚引用,要搭配ReferenceQueue使用,可以用来记录某一对象是否被垃圾回收了。

2022-10-09 14:32:30 474

原创 windows环境下启动redis

windows环境下启动redis

2022-07-07 09:58:01 866

原创 JVM 指令集

前言最近在学习 JVM 的知识,学习类的文件结构和类加载过程中,需要将 .class 文件反编译查看指令执行过程,在此记录 JVM 指令集。指令码 助记符 说明0x00 nop 无操作0x01 aconst_null 将null推送至栈顶0x02 iconst_m1 将int型-1推送至栈顶0x03 iconst_0 将int型0推送至栈顶0x04 iconst_1 将int型1推送至栈顶0x05 iconst_2 将int型2推送至栈顶0x06

2022-03-18 13:58:26 84

原创 linux-系统状态检测命令

系统状态检测命令1、ifconfigifconfig 命令用于获取网卡配置与网络状态等信息,格式为“ifconfig [网络设备] [参数]”使用 ifconfig 命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet 参数后面的 IP 地址、ether 参数后面的网卡物理地址(又称为 MAC 地址),以及 RX、TX 的接收数据包与发送数据包的个数及累计流量[root@hecs-169544 logsaas]# ifconfigeth0: flags=4163&l

2022-03-14 11:15:25 378

原创 System.getProperty() 引发的探索

System.getProperty 引发的探索System.getProperty() 引发的探索1、系统环境变量和用户环境变量2、System.getProperty()3、System.getenv()System.getProperty() 引发的探索1、系统环境变量和用户环境变量系统环境变量:所有用户都生效。切换用户,系统变量都是可以使用的。用户环境变量:计算机可以添加好几个用户,只有选中当前用户时才可以使用相应的程序。每个用户都要弹出设置自己的用户变量,各用户之间相互独立。2、Sy

2021-08-23 22:55:41 278

原创 JVM 类加载机制

JVM 类加载机制1、什么是类的加载类的加载指的是将类的 .class 文件的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区的数据结构。类加载的最终产品是位于堆区中的 Class 对象,Class 对象中封装了类在方法区内的数据结构,并向程序员提供了访问方法区内的数据结构的接口。2、类的生命周期其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的

2021-08-23 22:47:30 70

原创 牛客算法题记录三(判断链表是否有环)

牛客算法题记录三(判断链表是否有环)题目题解1、快慢指针解决2、存放到集合中题目判断给定的链表中是否有环。如果有环则返回true,否则返回false题解1、快慢指针解决最简单的一种方式就是快慢指针,慢指针每次走一步,快指针每次走两步,如果相遇就说明有环,如果有一个为空说明没有环。代码比较简单/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; *

2021-04-23 15:20:09 141 1

原创 牛客算法题记录二(判断二叉树是否对称)

判断二叉树是否对称题目题解题目给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称)例如:下面这棵二叉树是对称的 1 / \ 2 2 / \ / \3 4 4 3下面这棵二叉树不对称。 1 / \ 2 2 \ \ 3 3备注:希望你可以用递归和迭代两种方法解决这个问题题解1、递归 import java.util.*; /** * TreeNode 数据结构 *

2021-04-23 15:14:56 87

原创 牛客算法题记录一(青蛙跳台阶)

青蛙跳台阶题目题解:题目一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题解:1、最简单的迭代,类似斐波那契数列,时间复杂度:O(2^n) 空间复杂度:递归栈的空间 /** * 最简单的递归,类似斐波那契数列 * * @param target * @return */ public static int JumpFloor(int target) { if (target <= 1)

2021-04-23 15:01:29 159

原创 Java 线程安全的集合

Java 线程安全的集合一、早期线程安全的集合1、Vector2、HashTable二、Collections 包装方法三、java.util.concurrent 包中的集合1、ConcurrentHashMap2、CopyOnWriteArrayList 和 CopyOnWriteArraySet3、其他并发集合一、早期线程安全的集合1、VectorVector 与 ArrayList 类似,是长度可变的数组,与 ArrayList 不同的是,Vector 是线程安全的,它给几乎所有的 publi

2021-04-23 14:50:45 1216

原创 常见设计模式之模板模式

常见设计模式之模板模式1、什么是模板模式一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按照需要重写方法实现,但调用将以抽象类中定义的方式进行,这种类型的设计模式属于行为模式2、介绍应用场景:做一件事情的方法有很多,但做这件事的步骤都可以归纳为几步,这个时候就可以用模板模式。作用:在模板类中定义做事的步骤,将多种实现做事的细节在子类中实现。即:定义一个操作中的算法的骨架(模板函数),而将一些步骤延迟到子类中(基本函数)。模板模式使得子类可以不改变一个算法的结构(模板函数),即可重定义该

2021-04-21 22:39:57 98 1

原创 并发编程之ThreadLocal

并发编程之ThreadLocal当多线程访问共享可变数据时,涉及到线程间同步的问题,并不是所有时候,都要用到共享数据,所以就需要线程封闭出场了。数据都被封闭在各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使用同步的技术称为线程封闭。本文主要介绍线程封闭中的其中一种体现:ThreadLocal,将会介绍什么是 ThreadLocal;从 ThreadLocal 源码角度分析,最后介绍 ThreadLocal 的应用场景。

2021-03-22 17:59:18 657

原创 常见设计模式之单例模式

1、单例模式单例模式是属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。介绍意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决: 一个全局使用的类频繁地创建与销毁。何时使用: 当你想控制实例数目,节省系

2021-03-17 16:52:37 80 1

转载 Jvm垃圾回收器(终结篇)

Jvm垃圾回收器(终结篇) Jvm垃圾回收目前就准备了这三篇博文进行整理,在写博文的过程中我也是边看边记载的,我觉得这种学习方式更容易让人记住,不会轻易忘记。以前的学习模式都是看PDF文档、看书等,但是有个缺点就是当时记住了过段时间就会忘记,因此想把学习过程中重要的部分做个笔记总结,以便于后期复习回顾(学习技巧仅个人观点)同时也希望lz的博客能帮助到广大园友一丢丢。在此立个Flag!以后我会坚持写博客的。哈哈--好了 接下来言归正传。知识回顾:第一篇《Jv...

2021-02-26 15:07:12 242 1

转载 Jvm垃圾回收器(基础篇)

Jvm垃圾回收器(基础篇) 一:概述  在这篇文章中《Jvm运行时数据区》介绍了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈,3个区域随着线程的生存而生存的。内存分配和回收都是确定的。随着线程的结束内存自然就被回收了,因此不需要考虑垃圾回收的问题。而Java堆和方法区则不一样,各线程共享,内存的分配和回收都是动态的。因此垃圾收集器所关注的都是这部分内存。  接下来我们就讨论Jvm是怎么回收这部分内存的。在进行回收前垃圾收集器第一件事情就是确...

2021-02-26 14:26:01 153 1

转载 Jvm运行时数据区

Jvm运行时数据区 一:运行时数据区  Java虚拟机在执行Java程序的过程中会把它管理的内存分为若干个不同的数据区域。这些区域有着各自的用途,一级创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》中规定,jvm所管理的内存大致包括以下几个运行时数据区域,如图所示:图解:其中置灰部分是跟随虚拟机启动而存在的,线程共享白色区域则是跟随线程启动而存在,线程私有下面进行单独讲解这几块区域:1.程序...

2021-02-26 13:49:42 186 1

原创 美团--并发编程面试题

并发编程面试题并发编程1、线程池参数,大概流程,拒绝策略是什么?参数:大概流程:工厂方法:1、newFixedThreadPool2、newCachedThreadPool3、newSingleThreadExecutor提交任务:终止任务拒绝策略:并发编程1、线程池参数,大概流程,拒绝策略是什么?public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,

2021-02-20 16:54:35 279 1

转载 String的HashCode为什么使用 31 作为乘数?

String的HashCode为什么使用 31 作为乘数?String的HashCode为什么使用 31 作为乘数?1、HashCode 源码2、来自 stackoverflow 的回答3、Hash 碰撞概率计算3.1 读取单词字典表3.2 Hash 计算函数3.3 Hash 碰撞概率计算3.4 单元测试4、Hash 值散列分布4.1 哈希值分段存放4.2 单元测试4.2.1 乘数 2 的散列4.2.2 乘数 7 的散列4.2.2 乘数 31 的散列4.2.2 乘数 199 的散列5、总结String的H

2021-02-19 17:07:14 528

原创 简述Map的遍历方式

简述Map的遍历方式前言1、使用for循环遍历map2、使用迭代遍历map3、使用keySet迭代遍历map4、使用entrySet迭代遍历map前言map遍历的方式有4种,分别是:1、使用for循环遍历map;2、使用迭代遍历map;3、使用keySet迭代遍历map;4、使用entrySet遍历map。下面几种遍历方式统一使用的map集合代码:Map<String, String> map = new HashMap<>(5);map.put("niuEr", "21"

2021-01-21 16:15:49 118

原创 HashMap 底层实现原理

HashMap 底层实现原理1、HashMap的底层数据结构2、Java7和Java8的区别3、HashMap的主要参数都有哪些4、默认初始化大小是多少?为啥是这么多?为啥大小都是2的幂?5、hash的计算规则6、HashMap的存取原理1、HashMap的底层数据结构HashMap 的底层实现原理,1.7 和 1.8 是有区别的1.7 及之前的版本,底层是 数组 + 链表 Entry1.8 及之后的版本,底层是 数组 + 链表 + 红黑树 NOde,引入红黑树主要是因为当 Hash 冲突较多时,链

2021-01-19 10:11:49 68

原创 事务的使用位置和回滚规则

事务的使用位置和回滚规则事务使用的前提@Transactional 注解一般应用在什么位置?@Transactional 事务回滚规则总结使用位置回滚规则事务使用的前提默认情况下,数据库处于自动提交模式。每条SQL处于一个单独的事务中,成功则提交,失败则回滚。事务管理,就是将一组相关的SQL放于一个事务中,管理这一组SQL的提交或回滚,因此必须关闭数据库的自动提交方式。@Transactional 注解一般应用在什么位置?spring 官方文档强烈建议不能使用在接口(interface)上,虽然

2020-11-02 19:57:18 771

原创 nginx 配置文件详细解释

最近在项目中又用到 nginx,于是对 nginx.conf 的配置文件了解一下,在conf文件中加了一些注释,在此记录,方便以后使用,如果有读者觉得有用的话,可以直接复制/粘贴~~#nginx 用户及组:用户/组#user nobody;#工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU数量worker_processes 1;#错误日志:存放路径#error_log logs/error.log;#error_log logs/error.log notice;

2020-10-28 13:22:36 276

原创 线程基础以及线程之间的共享与协作<二>

线程基础以及线程之间的共享与协作<二>前言线程的基本方法yield 方法join 方法线程的优先级守护线程前言本文接着学习线程之间的共享与协作,线程基础以及线程之间的共享与协作<一> 主要介绍了线程的基础概念和线程的启动与终止,本文接着讲述线程的一些常用方法与 synchronized 加锁的方法。关于线程的一些基本方法,下面这张图可以很清晰地表述各个方法得作用与联系。线程的基本方法yield 方法介绍一些方法的使用,我一般都会去看源码,因为源码是最真实可靠的,也是自己

2020-09-13 23:06:43 113

原创 线程基础以及线程之间的共享与协作<一>

线程基础以及线程之间的共享与协作基础概念什么是进程和线程CPU核心数和线程数的关系CPU时间片轮转机制理解并行和并发高并发编程的意义和好处多线程程序注意事项认识Java里的线程Java程序天生就是多线程的线程的启动和终止启动终止基础概念什么是进程和线程进程是操作系统进行资源分配的最小单位。进程是操作系统进行资源分配的最小单位。其中资源包括:CPU、内存空间、磁盘I/O等,同一进程中的多条线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。进程是具有一定独立功能的程序关于某个数据集合的一次运

2020-09-08 23:29:50 168

深入理解Java代码执行过程--JVM 指令集

深入理解Java代码执行过程--JVM 指令集

2022-03-18

SSM框架Maven资源文件

该资源包括写SSM框架时用到的所有Jar包,内附有Maven中pom.xml的代码内容,解压该文件,可以直接拿来用

2018-09-29

Java获取视频时间JAR包

用于获取视频时间长度,专属JAR包,解压rar文件,即可获得资源

2018-09-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除