自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2020-06-06 11:44:29 7532 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 2445 31

原创 SpringAOP的注解形式

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

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

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

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

2019-05-31 17:57:50 16150 65

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

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

2019-05-31 13:59:19 13945 29

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

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

2019-05-31 12:29:36 3946 24

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

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

2019-05-30 16:21:53 11073 22

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

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

2019-05-29 17:44:01 5301 22

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

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

2019-05-29 12:07:17 661 9

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

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

2019-05-26 22:44:15 53218 112

原创 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 760

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

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

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

2019-02-23 00:14:25 599

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

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

2018-01-05 14:00:36 1236

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

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

2017-12-28 22:59:01 1688

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

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

2017-12-27 00:45:40 1384

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

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

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

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

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

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

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

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

2017-12-24 17:46:58 4999 13

原创 使用Docker快速安装部署ES和Kibana并配置IK中文分词器以及自定义分词拓展词库

使用Docker快速安装部署ES和Kibana的前提:首先需要确保已经安装了Docker环境如果没有安装Docker的话,可以参考上一篇的内容:Linux上安装Docker有了Docker环境后,就可以使用Docker安装部署ES和Kibana了一、安装部署ES和Kibana1、下载ealastic search和kibana(es的可视化管理页面)docker pull elasticsearch:7.6.2docker pull kibana:7.6.22、配置mkdi

2020-10-28 23:18:37 429

原创 使用Docker快速安装部署redis

使用Docker快速安装部署nginx的前提:首先需要确保已经安装了Docker环境如果没有安装Docker的话,可以参考上一篇的内容:Linux上安装Docker有了Docker环境后,就可以使用Docker安装部署redis了1、拉取镜像docker pull redis如果遇到pull拉取很慢的情况,可以使用阿里云镜像加速器完美解决[root@localhost ~]# cd /etc/docker[root@localhost ~]# vi /etc/docker/d

2020-10-28 21:56:10 59

原创 使用Docker快速安装部署mysql

使用Docker快速安装部署nginx的前提:首先需要确保已经安装了Docker环境如果没有安装Docker的话,可以参考上一篇的内容:Linux上安装Docker有了Docker环境后,就可以使用Docker安装部署mysql了1、拉取镜像docker pull mysql:5.7如果遇到pull拉取很慢的情况,可以使用阿里云镜像加速器完美解决[root@localhost ~]# cd /etc/docker[root@localhost ~]# vi /etc/docke

2020-10-28 21:37:13 59

原创 大白话讲解RabbitMQ四种交换机以及在管理页面中创建交换机、队列和绑定关系

RabbitMQ是目前应用非常广泛的一种消息队列之一,今天就来简单说一下RabbitMQ的四种交换机以及在管理页面中创建交换机、队列、绑定关系开始讲之前先来简单描述一下RabbitMQ中的几个关键的概念:Broker:可以简单的理解为安装了RabbitMQ服务的这台机器就可以称为一个BrokerExchange:交换机,类似于一个路由器的作用Queue:队列,最终将消息投递到队列中,由消费端监听队列进行消费Routingkey:路由键,交换机绑定队列时需要指定路由键或通配符路由键

2020-10-28 16:46:32 214

原创 使用Docker快速安装部署RabbitMQ

1、拉取镜像,安装运行运行以下命令docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management运行完命令后耐心等待一两分钟,它就会自动开始拉取镜像,并启动一个容器出现下图界面说明rabbitmq容器就启动成功了2、设置rabbitmq随docker自动启动docker up

2020-10-27 20:36:42 38

原创 使用Docker快速安装部署nginx

1、随便启动一个nginx实例,只是为了复制出配置docker run -p80:80 --name nginx -d nginx:1.102、将容器内的配置文件拷贝到/mydata/nginx/conf/ 下#先创建本地所需要的三个文件夹mkdir -p /mydata/nginx/htmlmkdir -p /mydata/nginx/logsmkdir -p /mydata/nginx/conf#执行以下命令把容器内的配置文件拷贝到本地的/mydata/nginx/conf/

2020-10-20 15:35:01 58

原创 VirtualBox+Vagrant快速搭建虚拟机

之前我们创建虚拟机更多的可能是用VMware,使用VMware我们也可以利用它的克隆等快捷的方式来创建出我们需要的虚拟机但是感觉过程还是有点繁琐,所以今天用VirtualBox+Vagrant 来更快更方便的搭建虚拟机首先需要安装VirtualBox和Vagrant百度云下载地址:下载地址:https://pan.baidu.com/s/1D245z1ofzfOpKe0wysMdPw提取码:g8ni下载完正常安装就可以了。安装好后,打开VirtualBox,最好配置一下虚拟机文件存储..

2020-10-16 19:36:03 75

原创 初始化vue项目时,出现vue不是内部或外部命令,也不是可运行程序的解决办法

在安装vue的环境时可能会出现以下的错误:1、#首先运行安装webpacknpm install webpack -g2、#然后安装vue/clinpm install -g @vue/cli-init在执行完以上2个命令后,去初始化创建一个vue项目执行以下命令:vue init webpack vue-demo可能会报错:“vue不是内部或外部命令,也不是可运行程序的解决办法”然后执行 vue -V 查看vue版本的命令也会报上边的错这时需要npm config list.

2020-07-22 17:24:25 480

原创 Linux上安装Docker,并解决速度太慢---使用国内阿里云镜像加速安装

https://docs.docker.com/engine/install/centos/这是Docker官方给的安装教程地址看完后,总结出以下几步:1、卸载旧版本sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-lates...

2020-07-19 18:32:01 638

原创 使用Charles修改请求和响应数据

使用Charles可以修改请求和响应的数据最后一步,在下面圈红的那个Value里输入你想返回指定的json值,点击ok就好了配置完后,再去手机app上请求一下,发现手机端看到的数据已经是你更改过的数据了修改请求参数和上边的响应参数步骤差不多,最后勾选的时候选择Request就好了...

2020-07-14 17:44:35 537

原创 使用Charles调试抓包,获取手机端请求和响应的数据

今天来说一个非常使用的小工具:Charles这个工具可以说是和APP端对接联调必备的工具,用起来也非常的爽咱们后端给PC前端提供接口的时候,如果自己想联调看下效果的话,可以在浏览器里按F12来进行调试,看请求和响应的数据。但是如果是给手机APP端提供的接口呢,如果想看下app端请求的参数和后端返回的数据,这时候就可以使用今天要说的Charles简单来说Charles可以拦截APP端的请求进行抓包,然后咱们就可以清楚看到请求参数和响应数据了。下面说下Charles具体怎么配置使用一、下

2020-07-14 17:33:25 788

原创 解决SpringBoot文件上传异常提示The temporary upload location xxx is not valid
原力计划

在用SpringBoot搭建的服务时,如果你用到了文件上传类型的接口的话,可能会遇到今天说的这个坑:之前部署到服务器上的SpringBoot应用一直工作得好好的,而且上传文件的接口之前也一直好好的,都没问题;但是有一天突然发现调用上传文件的接口失败,出现了类似以下的提示The temporary upload location [/tmp/tomcat.4232587034585098924.8083/work/Tomcat/localhost/ROOT] is not valid具体如下:

2020-06-23 18:18:27 3173 13

原创 Java实现传入经纬度计算两点之间距离

在日常的开发中,可能会遇到这种需求:从数据库里查出商家店铺的位置后,需要根据APP端传来用户的位置经纬度来计算每个店铺距离用户当前位置的距离。后台用Java实现起来很简单1、导入依赖的jar<!--计算距离依赖的jar--><dependency> <groupId>org.gavaghan</groupId> <artifactId>geodesy</artifactId> <version>1.1.

2020-06-10 15:31:17 577

原创 Java代码实现按照距离、评分、订单数排序

从数据查询出来数据集合后,可能不是我们想要的排序顺序,所以需要我们在内存中进行排序下面是用 Collections.sort()写的一个例子import java.util.*;public class Test { public static void main(String[] args) { List<Map<String,Object>> list = new ArrayList<>(); Map<St

2020-05-29 18:28:52 470

原创 Java导出Excel完整例子+完整代码,使用easypoi导出Excel+通用工具类

前言:在之前写Excel导入导出功能的时候,使用更多的可能是apache的poi,相信用过poi的应该都会感觉poi使用起来还是有点点麻烦的,所以,如果你是:不太熟悉poi的、不想写太多重复太多的、只是简单的导入导出的。那么相信我,使用easypoi绝对很适合。easypoi,正如同它的名字一样,主打的功能就是容易,让一个没见接触过poi的人员,就可以很方便的写出Excel导出、Excel导入,通过简单的注解就可以完成以前复杂的写法。so,今天就用easypoi来做一个导出Excel的完整案例,

2020-05-13 10:16:14 703

原创 easypoi或者POI导出Excel时 IndexedColors 编码枚举值 与 颜色 对照

<table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="xl28" style="background-color: #333333;" width="45" height="18">color</td><td class="xl29" width="45">org.apache.poi.hssf.util.HSSFColor$GREY_80

2020-05-12 16:27:08 772

原创 idea 注入mapper报错报红的几种解决方案

相信大家在使用idea的时候一定会遇到这样的问题,就是在service里注入mapper的时候,明明代码没有问题,也可以运行,但是idea它就是给你报个错,有个红色的波浪线在下面,这让人感觉很不舒服。怎么办呢?先来大概说一下,产生这种现象的原因。idea其实是非常智能的,它可以理解Spring的上下文,然鹅XxxxMapper 这种接口是Mybatis的,IDEA它理解不了。再加上 @Aut...

2020-05-07 15:39:04 3663 1

原创 mysql修改create_time默认时间为当前时间和update_time更新时间为当前修改更新的时间

mysql数据库里咱们一般都会给表里加上create_time和update_time这两个字段如果每次插入数据或者更新修改数据都需要在代码里或者sql里加上create_time和update_time的话,就有点繁琐可以用下面的ALTER语句来修改create_time默认为当前时间、update_time更新时间为当前修改更新的时间ALTER TABLE `user`MODI...

2020-05-07 11:56:25 2012

原创 Springboot配置mybatis打印sql日志

Springboot配置mybatis打印sql日志,超级简单只需要在application.yml配置文件中加上以下几行内容就OK了# 配置slq打印日志mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl...

2020-04-24 11:38:36 552

原创 Springboot配置捕捉validate校验参数异常统一处理并自定义validate校验返回格式

一、自定义修改validate校验返回格式@Valid,@NotBlank,@NotNull是比较常用的参数校验注解但是validate参数校验失败后,返回的json数据可能并不是咱们最终想要的,下图就是校验失败后它默认返回的数据一般情况下,咱们可能只需要图中标红的那个提示信息就OK了那怎么改它的返回数据呢?只要添加一个配置类就行了/** * validate校验...

2020-04-24 11:32:27 1336 1

原创 idea设置鼠标放到方法上查看参数和注释

点击File-Setting或者ctrl + alt + s打开设置界面,进入对应的设置界面,然后把下图标注的两个地方勾选上,就OK了设置好以后,鼠标放到方法上,看下效果可以看到,鼠标放上去就可以很清晰的看到方法的参数和注释了...

2020-04-24 09:16:04 716

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

Xshell5+Xftp_4

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

2019-05-29

xshell非常舒服的配色方案

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

2019-05-29

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

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

2017-12-24

空空如也

空空如也

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

TA关注的人 TA的粉丝

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