自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

曹举的个人博客

曹举的个人博客

  • 博客(181)
  • 资源 (5)
  • 收藏
  • 关注

原创 用大白话从宏观的角度聊一聊asm技术和class字节码文件和动态代理的关系,绝对通俗易懂

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

2022-10-31 17:41:15 3874 1

原创 用通俗易懂的大白话彻底搞明白mysql的数据类型以及mysql中的int(11),这个11到底是啥?

今天抽时间来讲一下mysql里的知识点,之前有不少人问过我,mysql中的int(11),这个11到底是啥意思?是11位的意思吗?你是否也想过这个问题,是否也有这个疑问?ok,今天就展开来讲一下,用通俗易懂的大白话来给你彻底搞明白。

2022-10-30 18:12:25 10093 6

原创 用绝对通俗易懂的大白话解释清楚sql中的group by

今天,用绝对通俗易懂的大白话,来搞懂sql中的group by

2022-01-24 09:50:54 3043 1

原创 用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式

今天,用通俗易懂的大白话来搞明白Java里的函数式编程和Lambda表达式

2022-01-22 17:22:34 4832 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 -y​systemctl start postfix.servicechkconfig postfix on​lo...

2022-01-22 14:37:36 8096 5

原创 Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知

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

2022-01-15 10:25:40 3765 4

原创 大白话讲清楚JVM里的方法区、永久代以及元空间

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

2022-01-08 14:52:20 4310 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 6124 1

原创 为什么HashMap的长度一定是2的次幂?

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

2021-04-30 10:01:05 7177 15

原创 大白话聊懂Java中的连接池,用包装模式实现标准的DataSource数据源连接池

铁子们,快扫码关注啦!或 wx搜索:“聊5毛钱的java”,关注可领取博主的Java学习视频+资料,保证都是干货一、首先简单谈谈为什么要用连接池?大家知道,我们平常连接数据库的时候,首先需要获取到数据库的连接,在Java中对应的是 Connection,建立获取数据库连接是比较消耗资源的,而且每次建立获取连接也比较浪费时间,可以试想,如果每次请求过来,需要访问数据库时,都去重新建立并获取新的连接,会浪费大量的资源和时间,此时客户端的响应时间肯定会较长,这并不是我们想看到的。因此这时候我们就要想办..

2021-04-03 10:37:04 2022

原创 联合索引最左前缀规则,经典的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 3972 4

原创 用最直接的大白话来聊一聊Java对象的GC垃圾回收以及Java对象在内存中的那些事

前言:今天闲来无事,有空闲的时间,所以想坐下来聊一聊Java的GC以及Java对象在内存中的分配。和标题一样,本篇绝对是用最直接最通俗易懂的大白话来聊文章中基本不会有听起来很高大上专业术语,也不会有太多概念性的描述,本着一看就懂的原则来写。因为之前看很多文章都是概念性的东西太多,让人越看越迷糊,越看越觉得有距离感,不接地气。看完之后甚至会觉得自己完蛋了,自己也就这样了,没救了,好多东西怎么学都学不会,感觉自己就是不如别人;我最不希望的就是这个,所以我写东西尽量都是用最通俗易懂,最接地气的大白

2020-06-06 11:44:29 9483 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 4138 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 32641 33

原创 大白话系列之 —— 一语点破Java中的静态static关键字

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

2019-06-02 16:05:49 21232 78

原创 SpringAOP的注解形式

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

2019-06-01 14:23:08 14727 6

原创 Spring中的AOP以及切入点表达式和各种通知

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

2019-05-31 17:57:50 26431 72

原创 Java中动态代理的两种方式JDK动态代理和cglib动态代理以及区别

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

2019-05-31 13:59:19 26134 53

原创 Java中的代理模式——静态代理以及分析静态代理的缺点

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

2019-05-31 12:29:36 7061 26

原创 Java中的注解以及自定义注解

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

2019-05-30 16:21:53 20214 60

原创 Java反射——内省(Introspector)以及BeanUtils内省框架

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

2019-05-29 17:44:01 12707 37

原创 用最直接的大白话聊一聊,Java中的枚举类你真的理解了吗

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

2019-05-29 12:07:17 2600 11

原创 Java反射:用最直接的大白话来聊一聊Java中的反射机制

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

2019-05-26 22:44:15 114168 183

原创 git的安装和初始化配置 生成SSH key 并配置github/gitlab的SSH key

1、安装好git以后打开Git Bash桌面 右击 “Git Bash Here”打开后输入并运行git config --global user.name "caoju"git config --global user.email "[email protected]"ssh-keygen -t rsa -C "[email protected]"注意:把以上的caoju和caoju@1...

2019-05-17 17:41:35 1399

原创 redis的基本数据类型以及常用命令

Redis数据类型:String、Hash、List、Set、Zset1、String类型赋值 set key value127.0.0.1:6379> set test 123OK取值 get key127.0.0.1:6379> get test"123"取值并赋值 getset key value127.0.0.1:6379> gets...

2019-03-02 17:50:27 1258 1

原创 Java内存模型、内存间的交互操作、JVM运行时数据区以及和堆栈之间的关系

1、讲Java内存之间的交互操作之前,首先得说一下Java的内存模型因为Java的内存模型定义了在虚拟机中将变量存储到内存和从内存中取出变量的底层细节,它的主要目标是定义程序中各个变量的访问规则,所以得先聊一聊Java内存模型一提Java的内存大家应该会想到,那不就是平常说的堆、栈、方法区这些吗?其实并不是的,如上图所示,平常说的堆、栈、方法区这些应该称之为JVM运行时数据区,而不...

2019-02-23 00:14:25 951 1

原创 从输入网址到最后浏览器解析HTML呈现出网站的内容中间都发生了什么

今天简单讲一下我们访问网站时, 从输入网址到最后浏览器呈现内容,中间发生了什么。今天的文章主要专注于应用层,拿一个很简单的网络结构来讲,内容也比较简单,更深层次的东西不去深究。假定本机已经获取了IP地址,各种网络基础设施已经准备好了。由于知识点比较多,我肯定会漏掉部分内容,欢迎在留言中补充。1.准备当你在浏览器中输入网址(例如www.baidu.com)并且敲了回车以后,浏览器首先

2018-01-05 14:00:36 1728

原创 总结一下Java中常用容器之Map

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

2017-12-28 22:59:01 2471

原创 利用Java反射模拟一个Struts2框架 Struts2主要核心设计 手动实现Struts2核心代码

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

2017-12-27 00:45:40 2331

原创 Java中用包装模式实现标准的DataSource数据源连接池

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

2017-12-26 00:26:46 3162 2

原创 简单的大白话聊一聊数据库事务的特性ACID,重点介绍隔离级别

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

2017-12-24 20:50:06 1333 2

原创 Java中用动态代理实现标准的DataSource数据源连接池

首先简单谈谈为什么要用连接池?大家知道,我们平常连接数据库的时候,首先需要获取到数据库的连接,在Java中对应的是 Connection,建立获取数据库连接是比较消耗资源的,而且每次建立获取连接也比较浪费时间,可以试想,如果每次请求过来,需要访问数据库时,都去重新建立并获取新的连接,会浪费大量的资源和时间,此时客户端的响应时间肯定会较长,这并不是我们想看到的。因此这时候我们就要想办法避免这种现...

2017-12-24 17:46:58 7811 14

原创 用大白话模拟Redis在面试中必问的问题,一步一步深入

要注意,Redis 对 RDB 的执行频率非常重要,因为这会影响快照数据的完整性以及 Redis 的稳定性,所以在 Redis 4.0 后,增加了 AOF 和 RDB 混合的数据持久化机制:把数据以 RDB 的方式写入文件,再将后续的操作命令以 AOF 的格式存入文件,既保证了 Redis 重启速度,又降低数据丢失风险。Redis 数据是存储在内存中的,为了保证 Redis 数据不丢失,那就要把数据从内存存储到磁盘上,以便在服务器重启后还能够从磁盘中恢复原有数据,这就是 Redis 的数据持久化。

2022-10-31 23:11:11 3143 1

原创 Jenkins配置用户权限

有需要的,可以点开上边的文章进行操作。搭建Jenkins的过程中,它会让你输入创建一个账号(一般都是root),这个账号是拥有所有的操作权限的,但是实际工作中使用Jenkins的时候,不可能让所有人都登录这个超级管理员的账号,肯定是给不同的人分类不同的权限。所以,今天接着来讲一下怎么给Jenkins配置用户权限。

2022-10-15 16:47:40 8036

原创 用通俗易懂的大白话聊明白缓存穿透、缓存雪崩、缓存击穿

但如果出现以下这两种特殊情况1. 用户请求的id在缓存中不存在。2. 恶意用户伪造不存在的id发起请求。比如:你数据库里商品只有10000个,你的商品ID只到10000。然后有个人他就猜,这样的用户请求导致的结果是:每次从缓存中都查不到数据,而需要查询数据库,同时数据库中也没有查到该数据,也没法放入缓存。也就是说,每次这个用户请求过来的时候,都要查询一次数据库。图中标红的箭头表示每次走的路线。很显然,缓存根本没起作用,好像被穿透了一样,每次都会去访问数据库。

2022-10-08 11:47:44 372

原创 Jenkins使用脚本快速批量删除历史构建记录

大家知道,我们每次使用jenkins拉取代码,进行自动打包部署的时候,它都会在jenkins的工作目录下产生一些文件(包括自动打包生成的jar包,以及其他的一些工作文件),产生的文件中,其中光那个jar包就至少几十兆。你想想,每次部署都至少产生几十兆的文件,那在使用jenkins比较频繁部署项目的时候,或者随着时间越来越久,肯定会占用比较大的磁盘空间;恰巧jenkins默认的工作目录就是在/root目录下,我们平常用的云服务器硬盘一般就40G或50G,那肯定会出现磁盘不够用的情况。

2022-09-16 13:30:00 3571 1

原创 Java项目里解决request流只能获取一次的问题

我们需要写一个自定义包装类,并继承HttpServletRequestWrapper/*** @描述 包装HttpServletRequest* MyServletRequestWrapper + RequestReplaceFilter 的作用是:* 解决异常处理器中拿post请求的json参数时,报request流只能读一次的错* 原因是 request.getReader() 和 request.getInputStream() 都是只能调用一次。

2022-09-15 11:56:04 3507

原创 怎么修改Jenkins的默认工作路径,最简单高效的方式

今天来讲一下:怎么修改Jenkins的默认工作路径首先讲一下为什么要修改Jenkins的默认工作路径?大家知道,我们每次使用jenkins拉取代码,进行自动打包部署的时候,它都会在jenkins的工作目录下产生一些文件(包括自动打包生成的jar包,以及其他的一些工作文件),产生的文件中,其中光那个jar包就至少几十兆。你想想,每次部署都至少产生几十兆的文件,那在使用jenkins比较频繁部署项目的时候,或者随着时间越来越久,肯定会占用比较大的磁盘空间;........................

2022-08-10 10:01:23 6292

原创 linux怎么看各个目录占用磁盘的大小以及清除没用的文件

有时候使用 df -h 查看一下服务器的硬盘资源占用情况,会发现磁盘已经快被占满了下图就是我的服务器上的情况,可以看到其中的一个磁盘已经快被占满了,占用了86% 那磁盘快被占满了,该怎么找到到底是哪个目录或者哪个文件占用了比较多的空间呢?下面就来简单说一下:首先进入 服务器的根目录输入以下命令:就可以看到,它给你列出来了根目录下的每个目录的占用的大小,如下图 然后,从上边的目录中选择一个占用空间比较大的,cd 进去,进去后,在继续输入刚才的查看占用空间大小的命令:我拿root目录为例,进入ro

2022-07-01 14:10:05 3497

原创 给使用docker安装的ES和Kibana设置账号密码

ES安装后,默认是不开启用户名密码验证的,如果你的ES服务是部署在内网的话,不使用账号密码还不会有太大的安全隐患。但是如果,你的ES服务是暴露在外网环境的话,不设置账号密码肯定是非常不安全的,那如何开启简单的用户名密码验证呢?今天来讲一下怎么给使用docker安装的ES和Kibana设置账号密码如果是Docker安装的ES的话,首先需要进入ES容器1、启用认证保存后,退出容器,重启ES2、设置用户密码上一步重启ES容器后,再次进入容器:再次进入容器后,执行以下命令会出现以下画面

2022-06-23 16:58:52 6840 2

Quartz实现可配置的定时任务项目源码和sql文件.zip

用Quartz实现可配置的定时任务源码, 该代码实现了在不重启项目的情况下就可以通过管理页面去管理定时任务的开启,关闭和修改 压缩包里包含了项目的源码以及数据库建表语句,保证可以跑起来,感兴趣的小可爱可以下载下来运行一下试试

2019-05-30

linux环境安装工具包.zip

linux环境安装包 activemq+tomcat+nginx-1.8.0.tar.gz+redis-3.0.0.tar.gz+solr-4.10.3.tgz+zookeeper-3.4.6.tar

2019-05-29

xshell非常舒服的配色方案

xshell很舒服的配色方案,看起来很舒服,保护眼睛,防止眼疲劳 xshell很舒服的配色方案,看起来很舒服,保护眼睛,防止眼疲劳 xshell很舒服的配色方案,看起来很舒服,保护眼睛,防止眼疲劳

2019-05-29

Java动态代理实现数据源连接池

Java动态代理实现数据源连接池,用代理类实现的连接池代码,绝对完整的案例,下载源码就能跑起来!Java动态代理实现数据源连接池,用代理类实现的连接池代码

2017-12-24

空空如也

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

TA关注的人

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