- 博客(192)
- 资源 (5)
- 收藏
- 关注

原创 大白话聊一聊,常用的哈希算法
关于作者:一个深耕自己,不内耗的长期主义者。一个对技术充满激情,对工作对生活充满热情的热血青年。坚持用通俗易懂的大白话写技术博文,并会持续更新。,里边提到了这两种方式,都需要用到哈希算法对传递的数据进行哈希,或者哈希后再加密。今天就再来简单聊一聊常用到的哈希算法。看完如果有什么疑问的地方,可以留言讨论,也可以私信。我坚信,真正能让大家看懂的技术文章才是好文章,这也是我最初决定写文章最主要的目标和动力,希望这篇文章对你有所帮助。
2025-08-23 16:19:41
869

原创 大白话聊明白,对接第三方支付常用到的 对称加密和非对称加密
关于作者:一个深耕自己,不内耗的长期主义者。一个对技术充满激情,对工作对生活充满热情的热血青年。坚持用通俗易懂的大白话写技术博文,并会持续更新。和之前一样,今天还是用通俗易懂的大白话来写点我自己的理解和总结,今天来聊一下在对接第三方支付时,常用到的对称加密和非对称加密。看完如果有什么疑问的地方,可以留言讨论,也可以私信。我坚信,真正能让大家看懂的技术文章才是好文章,这也是我最初决定写文章最主要的目标和动力,希望这篇文章对你有所帮助。
2025-08-23 16:12:15
610

原创 大白话聊一聊,数据结构的基石:数组和链表
关于作者:一个深耕自己,不内耗的长期主义者。一个对技术充满激情,对工作对生活充满热情的热血青年。坚持用通俗易懂的大白话写技术博文,并会持续更新。和之前一样,今天还是用通俗易懂的大白话来写点我自己的理解和总结,今天聊一下数据结构中最基础最常用的两种:数组和链表。看完如果有什么疑问的地方,可以留言讨论,也可以私信。我坚信,真正能让大家看懂的技术文章才是好文章,这也是我最初决定写文章最主要的目标和动力,希望这篇文章对你有所帮助。
2025-08-23 16:06:05
587

原创 大白话搞懂Java中Synchronized的底层逻辑
今天继续深入的聊一下Java中Synchronized的逻辑。看完如果有什么疑问的地方,可以留言讨论,也可以私信。我坚信,真正能让大家看懂的技术文章才是好文章,这也是我最初决定写文章最主要的目标和动力,希望这篇文章对你有所帮助。
2025-08-23 15:54:01
1226

原创 Java线程的几种状态 以及synchronized和Lock造成的线程状态差异,一篇让你搞明白
RUNNABLE 包含就绪(Ready)和运行中(Running),Java是把这2个整体称为RUNNABLE状态。synchronized拿不到锁,导致的线程状态是blocked状态。而ReentrantLock这种lock,拿不到锁而导致的线程状态是waiting状态,不是blocked。blocked是当持有锁的线程释放了锁时,JVM会从锁对象监视器的同步队列里唤醒一个blocked状态的线程。注意,这里的唤醒,并不是直接就让这个线程从。
2025-08-23 15:37:22
1086

原创 大白话聊懂什么是IO的零拷贝
本文深入浅出地讲解了IO零拷贝技术。零拷贝是操作系统层面的高效IO技术,通过减少CPU数据拷贝次数(甚至为零)来提升性能。文章首先解释了DMA、内核空间/用户空间等关键概念,对比了传统IO流程(4次数据拷贝+4次状态切换)与零拷贝的两种实现方式:mmap(3次拷贝+4次切换)和sendFile(2次DMA拷贝+2次切换)。重点介绍了Linux2.4引入SG-DMA技术后实现的真正零拷贝(0次CPU拷贝)。最后指出Java通过FileChannel支持零拷贝,但需要注意2G文件大小限制。文章用通俗语言解析了这
2025-03-14 19:35:02
837

原创 Java中如何去自定义一个类加载器
官方给的回答是:为 Java 应用程序提供更加灵活和可定制的类加载机制,并实现类的隔离。1、拓展加载源其实JVM除了能加载咱们本地编译好的class文件外,还可以加载其他来源的class文件,比如可以从网络、数据库等地方加载类。2、实现类隔离具体来说就是,自定义类加载器可以实现类隔离,避免类之间的冲突和干扰,这个在tomcat里就有大量的应用。注意:比较两个类是否相等,只有两个类是由同一个类加载器加载的前提下才有意义,否则即使两。
2025-03-13 18:03:50
1025

原创 大白话讲明白 把bean对象纳入Spring容器的几种方式,着重讲@Import注解
今天来说一下,java开发中把一个bean对象放入Spring容器有哪几种方式?第一种是用的方式或者用注解;第二种是使用第三种是使用。下面,分别展开讲一下。
2025-03-10 18:52:07
846

原创 mysql的Innodb最大支持的索引长度是多少,以及索引长度怎么计算
如果你用的是utf8mb4,那长度是4n+2;还有就是,如果建表的时候 字段允许是null,需要1个字节记录是否可以为null,如果允许为null,则需要 +1 个字节存储;mysql中普通索引的长度,非常好计算,普通索引的长度就是创建这个字段时,这个字段类型的长度,下面列出了常见的数据类型的长度。上图,可以看到,name是varchar类型的,为了计算方便,我把它的varchar长度给的是100。并且,如下图,我在建表的时候,这个age用的是int类型的,int类型的长度大小是4字节。
2025-03-09 18:31:05
1207

原创 用绝对通俗易懂的大白话来说明白 雪花算法SnowFlake
现在很多的服务都是分布式、微服务形式的,而且大数据量也可能导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性。对于 MySQL 而言,一个表中的主键 id 一般使用自增的方式,但是如果进行水平分表之后,多个表中会生成重复的 id 值。那么如何保证水平分表后的多张表中的 id 是全局唯一性的呢?
2024-08-13 15:25:56
996

原创 用大白话从宏观的角度聊一聊asm技术和class字节码文件和动态代理的关系,绝对通俗易懂
大家知道方法区(1.7之前的实现是永久代,1.8之后的实现是元空间)里放的基本上都是加载到内存里的各个类的class字节码内容,那有人肯定会问,我项目里用到的java类,生成的class字节码文件,在我写完项目后,不都确定了吗,能有多少个啊,怎么会多到把我的方法区的内存撑爆呢?还有另外一种情况就是,某些场景下你可能会需要自己用动态代理来处理一些业务上的东西,如果你自己使用动态代理不当的时候,也会导致产生大量的字节码,这些大量在运行期间动态生成的class字节码都被放进了方法区,从而导致你的方法区内存溢出。
2022-10-31 17:41:15
4150
1

原创 用通俗易懂的大白话彻底搞明白mysql的数据类型以及mysql中的int(11),这个11到底是啥?
今天抽时间来讲一下mysql里的知识点,之前有不少人问过我,mysql中的int(11),这个11到底是啥意思?是11位的意思吗?你是否也想过这个问题,是否也有这个疑问?ok,今天就展开来讲一下,用通俗易懂的大白话来给你彻底搞明白。
2022-10-30 18:12:25
11572
11

原创 用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式
今天,用通俗易懂的大白话来搞明白Java里的函数式编程和Lambda表达式
2022-01-22 17:22:34
5184
5

原创 在linux上搭建部署gitlab服务器
一、在防火墙里开放http跟ssh端口输入以下命令:yum install lokkit注意:执行yum命令时候,可能会报错, Error: Nothing to do,那就需要更新一下yum源yum -y updateyum install curl openssh-server openssh-clients postfix cronie -ysystemctl start postfix.servicechkconfig postfix onlo...
2022-01-22 14:37:36
8543
5

原创 Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知
今天来讲一下 Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知一、配置钉钉群1、新建一个接收通知的钉钉群如下图,创建一个接收通知的钉钉群选择项目群,点创建输入群名称,右侧选择群成员,最后点击右下角的创建2、对群进行设置点群右上角的设置按钮点击 “智能群助手”点 “添加机器人”点 添加机器人 最右边的 “+” 加号选最后的 自定义 通过Webhook接入自定义服务点 添加输入机...
2022-01-15 10:25:40
4415
4

原创 大白话讲清楚JVM里的方法区、永久代以及元空间
在JDK1.8和以后版本中JVM的运行时数据区的结构慢慢发生了变化其中最大的变化就是关于方法区的,比如去除了永久代,并把StringTable 串儿池移入了堆内存,等等。今天就用通俗易懂的大白话讲清楚JVM里的方法区1、搞清楚方法区、永久代以及元空间之间的关系首先,我们看一下JVM运行时数据区的结构图从上图可以看出,JVM的规范中,是把整个运行时数据区,分为了:堆、栈、方法区、程序计数器和本地方法栈。接下来,我们先来理解两个概念:规范和实现针对Java虚拟机的实现有专门
2022-01-08 14:52:20
4594
4

原创 在linux上搭建jenkins,并进行所需的配置
今天来讲一下 在linux上搭建jenkins一、前置条件在linux上安装jenkins的前提条件是已经安装了JDK和Tomcat1、jdk的安装配置关于jdk的安装配置,可以看我之前写的一篇博客:linux的基本环境配置JDK2、配置tomcat第一步:下载tomcat的压缩包第二步:将下载的压缩包上传到linux上我是放在了 /root./下第三步:解压缩#将tomcat解压到 /usr/local/ 目录下tar -zxvf apache-tomcat-.
2021-09-26 21:10:53
6576
1

原创 为什么HashMap的长度一定是2的次幂?
HashMap是面试过程中最常问的知识点之一今天用最通俗易懂的大白话来讲一讲:为什么HashMap的长度一定是2的次幂?大家知道HashMap中,如果想存入数据,首先它需要根据key的哈希值去定位落入哪个桶中它的做法是,三步:>>>无符号右移、^异或、&与具体是:拿着key的哈希值,先无符号右移16位,然后异或上key的哈希值,得到一个值,再拿着这个值去与上数组长度减一最后得出一个数,如果数组长度是15的话,这个数是一个0-15之间的一个数,这个数就是得出的数组
2021-04-30 10:01:05
7537
15

原创 联合索引最左前缀规则,经典的c1,c2,c3,c4联合索引题分析
很经典的一个联合索引的题:假设某个表有一个联合索引(c1,c2,c3,c4)以下只能使用该联合索引的c1,c2,c3部分A where c1=x and c2=x and c4>x and c3=xB where c1=x and c2=x and c4=x order by c3C where c1=x and c4= x group by c3,c2D where c1=? and c5=? order by c2,c3E where c1=? and c2=? and c
2021-03-23 10:52:07
4126
4

原创 大白话聊明白:Java对象在内存中的分配、布局、访问、JVM的GC垃圾回收以及堆内存的默认大小
本文用通俗易懂的语言讲解了Java对象在内存中的分配、布局、访问以及JVM垃圾回收机制。首先介绍了GC如何判断和回收垃圾对象,重点分析了引用计数法和可达性分析法的区别,以及标记-清除、标记-整理和复制三种回收算法的优缺点和适用场景。接着详细解释了new对象时JVM内部的处理流程,包括类加载、内存分配方式、对象初始化等关键步骤。然后剖析了对象在内存中的布局结构,包括对象头、实例数据和对齐填充三部分,并举例计算了Object对象占用的内存空间。最后说明了JVM访问对象的两种方式和对象分配的特点。全文采用生动形象
2020-06-06 11:44:29
9697
57

原创 用最简单的大白话聊一聊面试必问的HashMap源码原理和部分源码解析
hashMap面试中经常会被问到,可能还会问到一些源码今天就来看一下hashMap中三个方法的源码第一个是hash()方法 static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)...
2020-03-10 16:24:07
4214
38

原创 用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()
1、this关键字package com.cj.study.thissuper;public class Student{ public String name; public void setName(String name) { this.name = name; } public String getName() { return name; }}...
2019-06-06 17:47:19
32889
33

原创 大白话系列之 —— 一语点破Java中的静态static关键字
思考:大家有没有想过一个问题,静态它为什么叫静态?因为书上或者别的文章里这么写的都这么叫的?所以也跟着这么叫?????1、举例分析理解静态那今天咱们就分析分析,搞定它!为了解决上边的问题,咱们再抛出一个问题:有静肯定就有动啊,那这个“静”是相对于谁来说的?要讲明白这个,首先需要知道Java中 类和对象之间的关系类是对某一类具有共同特征的事物的抽象,对象是根据类产生出的具体实例。...
2019-06-02 16:05:49
21331
79

原创 SpringAOP的注解形式
上一篇讲了配置文件形式的SpringAOP:Spring中的AOP以及切入点表达式和各种通知本篇继续看一下注解形式怎么去理解和应用AOP前几篇已经讲了不少AOP相关的知识,本篇不再赘述,直接用代码写一下注解形式的AOP举的例子还是前几篇的例子,只不过是用注解的形式去用一下AOPpackage com.cj.study.spring.aop.annotation;public ...
2019-06-01 14:23:08
14861
6

原创 Spring中的AOP以及切入点表达式和各种通知
上篇讲了动态代理:Java中动态代理的两种方式JDK动态代理和cglib动态代理以及区别我们用上篇的做法去实现目标方法的增强,实现代码的解耦,是没有问题的,但是还是需要自己去生成代理对象,自己手写拦截器,在拦截器里自己手动的去把要增强的内容和目标方法结合起来,这用起来还是有点繁琐,有更好的解决方案吗?答案是:有的!那就是Spring的AOP,这才是咱们最终想引出来的重点!有了Sprin...
2019-05-31 17:57:50
26625
72

原创 Java中动态代理的两种方式JDK动态代理和cglib动态代理以及区别
上篇介绍了一下静态代理:Java中的代理模式——静态代理以及分析静态代理的缺点也分析了一下静态代理的缺点:1、由于静态代理中的代理类是针对某一个类去做代理的,那么假设一个系统中有100个Service,则需要创建100个代理类2、如果一个Service中有很多方法需要事务(增强动作),发现代理对象的方法中还是有很多重复的代码3、由第一点和第二点可以得出:静态代理的重用性不强那怎...
2019-05-31 13:59:19
26551
53

原创 Java中的代理模式——静态代理以及分析静态代理的缺点
思考:以常见的增删改查为例,在执行增删改的时候我们需要开启事务,执行完成后需要提交事务假如说你Service里有100个增删改的方法,那这100个方法里除了你自己真正需要处理的业务逻辑外,每个方法都还需要去关注开启事务,提交事务这些动作。那有没有稍微好点的办法解决呢?于是就出现了代理模式的概念,那什么是代理模式呢?1、什么是代理模式简单来说:代理就是对目标方法进行增强。什么意思呢?...
2019-05-31 12:29:36
7285
26

原创 Java中的注解以及自定义注解
1、Annotation(注解) 概述(1)、注解起到标识做用,比如Junit的@Test注解。Junit会在运行时检查方法上是否存在此注解,如果存在,就通过反射来运行你的方法。注意标红的反射两个字,反射在注解里相当重要,写完你的自定义注解类后没啥用,必须要用反射才能让它动起来!所以需要对反射有了解,感兴趣的小可爱可以看下这篇:Java中的反射机制介绍(2)、从 JDK 5.0 开...
2019-05-30 16:21:53
20523
60

原创 Java反射——内省(Introspector)以及BeanUtils内省框架
讨论内省的前提是需要了解Java中的反射,如果需要了解反射的话,可以点击下方的文章Java中的反射机制介绍为什么要学内省?开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以JDK里提供了一套API,专门用于操作java对象的属性。既然内省是专门用于操作java对象属性的,那首先得搞懂什么是对象的属性1、什么是java对象的属性呢...
2019-05-29 17:44:01
13361
37

原创 用最直接的大白话聊一聊,Java中的枚举类你真的理解了吗
思考一下:为什么需要枚举类?枚举类的产生背景是什么?一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,比如成绩Grade只能为A、B、C、D、E其中的一种。类似的问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。1.如何创建枚举类JDK 5新增的 enum 关键字用于定义一个枚举类一个枚举也有构造函数(但是枚举类的构造函数必...
2019-05-29 12:07:17
2733
11

原创 Java反射:用最直接的大白话来聊一聊Java中的反射机制
思考:在讲反射之前,先思考一个问题,java中如何创建一个对象,有哪几种方式?Java中创建对象大概有这几种方式:1、使用new关键字:这是我们最常见的也是最简单的创建对象的方式2、使用Clone的方法:无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去3、使用反序列化:当我们序列化和反序列化一个对象,JVM会给我们创建一个单独的对...
2019-05-26 22:44:15
115078
183

原创 总结一下Java中常用容器之Map
今天又有点时间了,所以还是抽出点时间写点小东西吧。其实关于Java中常用容器的知识点,我很早之前就有总结过,只不过在自己手写的笔记本上(忽然发现很久没手写笔记了啊)趁着今天的机会,自己再整理一波,顺便给大家贴上来。今天暂时只整理一下Map的东西,其他的容器,像List啊 Set啊 这些等有时间也会整理一下贴出来。好了,首先先给大家贴一张图上来,这图是之前在网上看到的一张挺经典的图,很好
2017-12-28 22:59:01
2592

原创 利用Java反射模拟一个Struts2框架 Struts2主要核心设计 手动实现Struts2核心代码
今天用Java的反射机制模拟写一个Struts框架用到的技术大概有Java反射,XML解析,Filter过滤器。其中Java反射用到的是反射中基本的知识和利用反射内省实现功能的一个apache的工具jarBeanUtilsXML解析用的Dom4j首先还是讲一下大致的思路和流程开头先多说一句啊,今天写的这个平常开发中基本上不会用,但是我觉得这东西对理解框架的底层挺有帮助的...
2017-12-27 00:45:40
2448

原创 Java中用包装模式实现标准的DataSource数据源连接池
本篇续上篇“Java中用动态代理实现标准的DataSource数据源连接池”之后,继续谈谈利用包装设计模式如何实现一个简单的数据源连接池。上篇已经大概讲过了为什么我们需要连接池,而且上篇也说了一下,Java中实现连接池的做法主要有2种,本篇就详细的讲述一下用包装设计模式实现一个连接池。首先大家来考虑一个问题,在上篇也提过说,连接池的核心功能就是在用完conn资源后,需要关闭释放
2017-12-26 00:26:46
3284
2

原创 简单的大白话聊一聊数据库事务的特性ACID,重点介绍隔离级别
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态
2017-12-24 20:50:06
1422
1

原创 Java中用动态代理实现标准的DataSource数据源连接池
首先简单谈谈为什么要用连接池?大家知道,我们平常连接数据库的时候,首先需要获取到数据库的连接,在Java中对应的是 Connection,建立获取数据库连接是比较消耗资源的,而且每次建立获取连接也比较浪费时间,可以试想,如果每次请求过来,需要访问数据库时,都去重新建立并获取新的连接,会浪费大量的资源和时间,此时客户端的响应时间肯定会较长,这并不是我们想看到的。因此这时候我们就要想办法避免这种现...
2017-12-24 17:46:58
8023
12
原创 配置Mysql的慢查询日志
MySQL慢查询日志是MySQL数据库自带的一个功能,用于记录执行时间超过指定阈值的SQL语句,以便于后续的性能优化工作帮助开发和DBA发现哪些SQL语句需要优化,在哪些地方需要修改,以提高数据库的性能默认情况下MySQL数据库是不开启慢查询日志的,long_query_time 的默认值为10(即10秒,通常设置为1秒)
2024-08-08 23:12:32
1264
原创 用大白话模拟Redis在面试中必问的问题,一步一步深入
要注意,Redis 对 RDB 的执行频率非常重要,因为这会影响快照数据的完整性以及 Redis 的稳定性,所以在 Redis 4.0 后,增加了 AOF 和 RDB 混合的数据持久化机制:把数据以 RDB 的方式写入文件,再将后续的操作命令以 AOF 的格式存入文件,既保证了 Redis 重启速度,又降低数据丢失风险。Redis 数据是存储在内存中的,为了保证 Redis 数据不丢失,那就要把数据从内存存储到磁盘上,以便在服务器重启后还能够从磁盘中恢复原有数据,这就是 Redis 的数据持久化。
2022-10-31 23:11:11
3422
原创 Jenkins配置用户权限
有需要的,可以点开上边的文章进行操作。搭建Jenkins的过程中,它会让你输入创建一个账号(一般都是root),这个账号是拥有所有的操作权限的,但是实际工作中使用Jenkins的时候,不可能让所有人都登录这个超级管理员的账号,肯定是给不同的人分类不同的权限。所以,今天接着来讲一下怎么给Jenkins配置用户权限。
2022-10-15 16:47:40
9170
1
xshell非常舒服的配色方案
2019-05-29
Java动态代理实现数据源连接池
2017-12-24
Quartz实现可配置的定时任务项目源码和sql文件.zip
2019-05-30
linux环境安装工具包.zip
2019-05-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人