自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(160)
  • 资源 (5)
  • 收藏
  • 关注

原创 在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 206

原创 在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...

2021-09-24 22:00:53 146

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

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

2021-04-30 10:01:05 2066 8

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

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

2021-04-03 10:37:04 1692

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

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

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

2020-06-06 11:44:29 8875 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 3732 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 28471 32

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

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

2019-06-02 16:05:49 20501 70

原创 SpringAOP的注解形式

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

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

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

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

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

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

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

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

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

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

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

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

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

2019-05-30 16:21:53 18069 62

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

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

2019-05-29 17:44:01 10679 36

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

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

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

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

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

2019-05-26 22:44:15 95344 170

原创 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 "caoju@126.com"ssh-keygen -t rsa -C "caoju@126.com"注意:把以上的caoju和caoju@1...

2019-05-17 17:41:35 1074

原创 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 926 1

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

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

2019-02-23 00:14:25 770

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

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

2018-01-05 14:00:36 1475

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

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

2017-12-28 22:59:01 2132

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

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

2017-12-27 00:45:40 1903

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

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

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

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

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

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

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

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

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

原创 jenkins配置拉取git远程仓库的代码并进行自动化构建部署

上篇讲了 在linux上搭建jenkins,并进行所需的配置现在继续讲一下,jenkins怎么配置拉取gitlab仓库的代码并进行自动化构建部署按照上一篇的操作,安装好jenkins并配置好对应的jdk,maven,还有通信的私钥后,就可以进行接下来的操作了第一种情况:使用jenkins构建发布项目到安装jenkins服务的本机器上1、新建任务2、对新建的任务进行配置最后点保存把执行的shell命令贴一下#!/bin/bashs...

2021-10-09 11:21:54 100

原创 在linux中设置nexus开机自启动

本篇讲一下在linux中设置nexus开机自启动关于 在linux中安装nexus可以看下我之前写的另外一篇文章:在linux上搭建maven私服nexus和nexus的使用一、把nexus配置成服务1、新建服务脚本vim /etc/init.d/nexus添加以下脚本内容#!/bin/bash#chkconfig:2345 20 90#description:nexus#processname:nexusexport JAVA_HOME=/usr/local/jd

2021-09-30 23:02:30 19

原创 在linux中设置tomcat开机自启动

一、把tomcat配置成服务新建服务脚本vim /etc/init.d/tomcat添加一下脚本内容#!/bin/bash# description: Tomcat7 Start Stop Restart# processname: tomcat7# chkconfig: 234 20 80CATALINA_HOME=/usr/local/apache-tomcat-9.0.8case $1 in start) sh $CAT

2021-09-30 22:39:54 49

原创 用最简单的方式把本地idea里的项目推送到gitlab或github或码云gitee上

1、本地安装git要把本地idea里创建的项目,推送到远端的git上,首先本地需要安装并配置好git关于本地安装配置git,可以看我之前写的文章:git的安装和初始化配置 生成SSH key 并配置github/gitlab的SSH key2、在gitee或者gitlab或者github里创建对应项目的仓库在码云gitee、gitlab、github里创建项目仓库的步骤都差不多,下面以码云gitee为例:首先打开:https://gitee.com/登录进去,点右上角的 + 加号,然后.

2021-09-29 20:39:31 18

原创 Jenkins安装插件一直失败,报错SunCertPathBuilderException的解决方案

Jenkins(2020年及以后版本,2.260以上)安装后,插件下载时失败网上找了各种解决方法,修改jenkins插件的下载源地址:找到菜单Manage Jenkins → Manage Plugins → Advanced → Update Site,把URL改为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json或把默认地址https://updates.jenkins.io/update-cente

2021-09-26 22:24:35 25

原创 在linux上搭建maven私服nexus和nexus的使用

今天来讲一下 在linux上搭建maven私服nexus和nexus的使用一、nexus的安装1、下载nexus2、上传并解压我是上传到了 /root/目录下解压#解压tar -zxvf nexus-3.12.1-01-unix.tar.gz -C /usr/local/3、修改默认端口nexus默认使用的是8081端口,如果不想使用默认的8081端口的话,可以使用以下的命令进行修改vim /usr/local/nexus-3.12.1-01/etc/nex.

2021-09-26 16:16:27 55

原创 配置gitLab的邮件服务,并开启邮箱的验证通知功能

上一篇,讲了在linux上搭建部署gitlab服务器这篇讲一下 配置gitLab的邮件服务为什么需要开启gitLab的邮件服务呢?有以下两个原因1、搭建好gitLab服务器后,当有新的开发人员需要加入开发时,就可以注册账号了但是gitLab注册账号时,默认是没有对注册的账号进行任何验证的,所以注册时,我们需要开启邮箱验证2、开启gitLab的邮件服务后,我们可以很方便的接受很多操作的通知下面我们就来看一下怎么开启gitLab的邮件服务一、开启发送邮箱的SMTP服务经测试16.

2021-09-24 23:18:59 46

原创 mysql索引在哪些情况下会失效?

索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:1、如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引2、like查询是以%开头,则会导致索引失效。但是以%结束,不会导致索引失效,例如 name like ‘张%’,这种情况索引不会失效。3、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。4、在MYSQL使用不等于(<>..

2021-09-03 10:56:12 112

原创 大白话聊一聊mysql分组中的GROUP_CONCAT使用

上一篇讲完了对 group by的理解,用通俗易懂的大白话解释清楚group by这篇讲一下,GROUP_CONCAT的使用表结构与数据如下select * from student;1、现在的需求就是每个id为一行 在前台每行显示该id所有分数怎么办呢?就可以使用分组中的 group_concatselect id,GROUP_CONCAT(score) from student group by id;可以看到 根据id 分成了三行,并且分数默认用 逗号 分割,.

2021-08-28 16:40:18 61

原创 RabbitMQ消息的可靠性投递

今天来说一下RabbitMQ的消息可靠性投递,先看一下图从图上可以看到从发送消息到消息最后的消费的链路是:生产者把消息发送到Brocker(Brocker把消息给对应的交换机),交换机把消息投递给对应的队列,消费者监听对应的队列进行消费所以消息的可靠投递分为了两大内容:发送端的确认(也就是p到b和e到q)和消费端的确认(也就是q到c)一、发送端确认发送端的确认又分为了消息到达Brocker的确认和消息到达队列的确认1、消息到达Brocker的确认当消息安全抵达Brocker后,.

2021-08-24 17:45:02 145

原创 把本地的java项目传到linux上进行Docker打镜像

很多同学想给自己本地的项目打Docker镜像,但是本地是window的环境,而且很多电脑装window环境的同学都觉得在window环境下安装Docker很麻烦,确实是这样因为Docker本身就是对linux的环境比较友好,在win下配置还是比较麻烦的所以今天就写一下怎么把本地的项目传到linux机器上进行Docker打包想在linux环境给你的项目打Docker镜像,前提是你的linux机器得配置和jdk环境和maven环境如果没配置的可以看一下这两篇文章:linux上配置maven环

2021-08-14 17:09:37 55

原创 linux上配置maven环境

一、下载maven压缩包链接:https://pan.baidu.com/s/1VIe-fgx-q0CTUWJI96_toA提取码:1234二、上传并解压下载完压缩包后,将压缩包上传到linux我是放在了 /usr/local/执行加压命令:tar -zxvf apache-maven-3.6.1三、配置环境变量vim /etc/profile把以下的配置复制粘贴到最下边export MAVEN_HOME=/usr/local/apache-maven-3.6.1..

2021-08-14 16:21:16 54

原创 使用Docker安装nacos,并配置将nacos的信息持久化到mysql

铁子们,快扫码关注啦!或 wx搜索:“聊5毛钱的java”,关注可领取博主的Java学习视频+资料,保证都是干货一、配置数据库的信息首先创建一个数据库:我创建的数据库名字叫 my_nacos然后执行对应的建表sql,建表sql我放在了百度云盘,链接:https://pan.baidu.com/s/1lkteB_JmNCscyolTw6seJQ提取码:1234执行完建表语句后,会有下面这些表然后执行下面的语句添加一个登录nacos管理端的账号,账号:nacos,密码:naco...

2021-08-14 14:31:09 84

原创 Java中各个ArrayList、HashSet、TreeSet等容器的一些理解以及判断元素唯一性的条件

为了满足不同的需求,Java里有好多种容器,就好比现实中有好多容器一样,水杯啊,碗啊,都能装东西,只是使用场景不一样,为了满足不同的使用场景,Java里出现了很多容器。因为是各自为了满足不同场景,所以他们底层的数据结构的实现也不同。因为各种容器底层数据结构不一样,所以它们保证元素唯一性的判断依据也是不同的ArrayList判断元素的唯一性和删除元素依赖于equals方法HashSet判断元素的唯一性和删除元素是依赖hashCode方法和equals方法,它是先调用hashCode方法判断元素的哈希

2021-06-19 17:47:09 79

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

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

2019-05-30

xshell非常舒服的配色方案

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

2019-05-29

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

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

2017-12-24

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

Xshell5+Xftp_4

Xshell5激活破解版,稳定好用,加上Xftp_4,用起来超级方便

2019-05-29

空空如也

空空如也

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

TA关注的人 TA的粉丝

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