自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

逆流而上的龟

终身学习,不断进步,不断提高

原创 Redis的过期策略和内存淘汰机制

大家都知道,redis是基于内存来存储数据的,但是内存资源是有限的,我们需要时刻考虑redis的内存容量。在实际工作过程当中,我们需要清楚redis的过期策略和内存淘汰机制。 一、redis的过期策略 定期删除:定期(100ms)从所有key中随机选择一些进行删除; 惰性删除:在我们获取ke...

2019-06-12 10:16:51

阅读数 168

评论数 0

原创 代码自动生成

在项目中,实体类等生成,我们基本上不用手动去写,全部自动生成。详细内容请参考GitHub项目: https://github.com/williamjava/code_generator

2019-06-06 17:24:46

阅读数 92

评论数 0

原创 Linux服务器上如何正确复制一个现有的Tomcat

在我们实际工作过程当中,有的时候会遇到如下这种情况:需要在服务器(Linux)上部属多个Tomcat,那么在已经存在一个Tomcat的情况下,我们如果快速并且正确地部属另一个呢?下面我们一起来看看具体的步骤。 1.复制一个已经存在的tomcat目录 cp -rf 已存在的tomcat目录名称 ...

2019-06-04 15:29:42

阅读数 959

评论数 0

原创 Spring MVC整合MyBatis和MySQL

前段时间自己发布了一篇关于SpringMVC结合Redis的小实例,今天呢,想和大家分享一下自己最近使用Spring MVC结合MyBatis+MySQL的小实例,在这里先贴出一下自己在GitHub上共享的代码Demo,下面我会贴出一些核心的内容以及相关总结。GitHub上的Demo地址如下:ht...

2019-06-04 15:14:09

阅读数 106

评论数 0

原创 Spring MVC整合Redis

最近空闲时间,自己打算复习复习Spring MVC,于是使用Maven+Spring MVC+Redis搭建了一个项目,全当是做一个知识回顾。在这个过程当中,也遇到了各种各样的问题,在这里和大家一起分享一下,如有遇到类似问题还没有解决的,希望能帮到大家。下面我将一步步贴出源代码以及总结遇到的一个个...

2019-06-04 15:09:03

阅读数 1025

评论数 0

原创 ES的Head插件和集群环境搭建

一、Elastic Search的Head插件 在Elastic Search初探第一篇中我们说到了Kibana,通过它我们可以以UI的方式来操作ES、监控ES等。这里分享ES好用的另外一个插件——Head。具体使用步骤如下: 第一步:下载插件,地址为:https://github.c...

2019-06-04 14:56:41

阅读数 124

评论数 0

原创 ElasticSerach初探 - 认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES

一、认识ElasticSearch 是一个基于Lucene的开源搜索引擎,通过简单的RESTful API来隐藏Lucene的复杂性。全文搜索,分析系统,分布式数据库;elasticsearch的革命性就在于将这些单一的有用的技术整合成一个一体化的”实时的应用”。 二、ElasticSea...

2019-06-04 14:49:55

阅读数 522

评论数 0

原创 从前端到后端的性能优化整体概览

我们以一个实际的场景来整体认识一下从前端到后端的性能优化。 场景: 一个Web前端的请求发出之后,需要等待比较长的时间,才能得到完整的响应。针对这种情况,我们需要怎么考虑呢?三个方面:Web前端层面,应用服务器层面和存储层面。下面我们来简单说说。 一、Web前端性能优化 1.优化浏览器...

2019-06-04 14:42:19

阅读数 133

评论数 0

原创 HashMap的put方法原理

本篇内容基于JDK 1.8 一、HashMap的put方法流程如下图 二、具体的源码分析 /** * Associates the specified value with the specified key in this map. * If the map previously...

2019-05-31 10:30:09

阅读数 1062

评论数 0

原创 Spring Cloud Feign相关原理分析

1.认识Spring Cloud Feign 在使用Spring Cloud构建的微服务架构中,Feign用来提供声明式的服务客户端定义方式。 Feign是一个伪客户端(不做任何的请求处理),它通过处理注解生成request,以此来简化HTTP API的开发。 2.定义的服务接口是如何注册到Sp...

2019-05-24 12:31:49

阅读数 511

评论数 0

原创 SpringBoot项目中使用RabbitMQ

一、windows下如何安装RabbitMQ 1.安装RabbitMQ需要先安装Erlang语言开发包,百度网盘地址:http://pan.baidu.com/s/1jH8S2u6。直接下载地址:http://erlang.org/download/otp_win64_18.3.exe。 安装完...

2019-05-21 13:43:55

阅读数 283

评论数 0

原创 浅谈Spring事务

1.事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: a.获取连接 Connection con = DriverManager.getConnection(...

2019-05-05 11:41:49

阅读数 84

评论数 0

原创 浅谈MySQL数据库的事务

1.事务的4大基本要素(ACID) 原子性(Atomicity):事务是一个不可分割的工作单位,其中的操作要么都发生,要么都不发生。 一致性(Consistency):事务前后数据的完整性必须保持一致。 隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何...

2019-05-05 11:39:04

阅读数 38

评论数 0

原创 过滤器和拦截器

整体认识:过滤器和拦截器是我们常说的AOP思想的两个具体实现,接下来我们一起看看它们之间的区别和具体的使用。 1.过滤器和拦截器的区别 使用范围:过滤器是Servlet规范规定的,仅用于Web程序中;拦截器是属于Spring容器内的,既可用于Web程序中,也可用于非Web程序中; 使用资源:由于...

2019-04-28 17:19:50

阅读数 281

评论数 0

原创 JDK、JRE和JVM的关系

JDK: Java Development Kit,java开发工具包。它是我们Java开发的核心,里面主要包含了jre, jvm, jdk源码包,以及bin目录下的一些工具(如:javac.exe等)。 JRE: Java Runtime Environment, java运行时环境。它主要包...

2019-04-26 16:19:04

阅读数 74

评论数 0

原创 线程的start方法和run方法

在我们分析线程的start方法run方法之前,我们先来看看线程的状态变化: 接下来我们来具体看看线程的start方法和run方法的区别。这里我们通过一个Demo来看看。 public class MyThread extends Thread { @Override pu...

2019-04-26 15:38:40

阅读数 279

评论数 0

原创 wait方法和notify方法的区别

1.wait()和sleep()的区别 wait()是Object类的方法,sleep()是Thread类的方法; 调用Object对象的wait方法,线程会放弃对象锁,进入等待此对象的等待锁定池;只有针对对象调用notify()方法后当前线程才进入对象锁定池准备获取对象锁进入运行状态,如果没有n...

2019-04-26 15:16:30

阅读数 329

评论数 0

原创 创建线程的三种方式

1.继承Thread类 public class ThreadWait extends Thread { @Override public void run() { //... } } 2.实现Runnable接口 public class ThreadSleep implemen...

2019-04-26 15:07:36

阅读数 59

评论数 0

原创 Redis的缓存穿透、缓存雪崩和缓存击透

1.缓存穿透 什么是缓存穿透?查询一个数据库中一定不存在的数据。 在一些查询场景中,我们会选择使用缓存来存储查询结果,提高查询的效率。比如电商系统中的商品,第一次从数据库中查询商品信息,然后放入缓存;第二次将会直接从缓存中获取。 如果恶意攻击,进行大量不存在的商品查询,如果我们没有特殊处理,就会给...

2019-04-26 11:03:44

阅读数 249

评论数 0

原创 SpringBoot启动原理分析

1.启动类中的SpringApplication.run方法会创建一个SpringApplication的实例,并做一些初始化工作 @SpringBootApplication @Slf4j public class HuotuUserServiceApplication { public st...

2019-04-25 18:05:20

阅读数 218

评论数 1

原创 初探Java的异常体系

1.Exception和Error的区别 Exception和Error都继承了Throwable,只有throwable类型的异常才能被throw或catch。 Exception是程序在运行过程中可以预料的意外情况,需要进行捕捉并进行相应的处理。 Error是程序在运行过程中不可以预料的错误,...

2019-04-25 09:48:30

阅读数 59

评论数 0

原创 正向代理和反向代理的区别

1.正向代理 作用在客户端,隐藏了客户端的信息。 我们想从服务器获取资源,但是只能通过代理服务器才能获取到。客户端明确知道要访问的资源,发出请求后到代理服务器,代理服务器访问真正的服务器,然后返回资源到客户端。 典型应用场景:翻墙 2.反向代理 作用在服务端,隐藏了服务端的信息。 客户端并不...

2019-04-24 10:53:50

阅读数 173

评论数 0

原创 抽象类和接口的区别

1.整体认识 抽象是Java语言几大特性之一,它的具体体现就是我们接下来要说到的抽象类(abstract class)和接口(interface)。 2.抽象类 抽象方法:只有声明,没有具体的使用,方法使用abstract关键字修饰 用abstract关键字修饰,不能实例化; 可以有一个或多个抽...

2019-04-24 10:26:52

阅读数 43

评论数 0

原创 重载和重写的区别

1.重载(overload)和重写(override) 重载:同一个类中,方法名相同,参数的个数不同、参数的类型不同或参数的顺序不同。 重写:发生在有继承关系的父子类之间,子类可以选择重写父类的方法。 2.重载的demo public class C { public void meth...

2019-04-23 15:55:16

阅读数 206

评论数 0

原创 HashMap原理

关于HashMap底层实现原理,网上有关于其太多的文章,自己在这里找了一篇还不错的,同大家一同分享。跟着作者的分析去阅读HashMap的源代码,自己对HashMap的原理也会有很深入的理解的。 https://www.jianshu.com/p/17177c12f849 ...

2019-04-22 13:46:32

阅读数 272

评论数 0

原创 HashMap和Hashtable的整体认识

1.相同点 都实现了Map接口,都是一种以key-value存储数据的键值对数据结构; 底层数据结构都是数组+链表(解决不hash冲突); 2.不同点 a.HashMap的key和value都允许为空,Hashtable的key和value都不允许为空; b.扩容的规则不同; newThr = ...

2019-04-22 11:40:55

阅读数 43

评论数 0

原创 Nginx配置负载均衡

1.配置文件nginx.conf增加如下内容 upstream keguan-api-servers { ip_hash; server 服务器1IP:端口; server 服务器2IP:端口; } 2.服务1对应的Nginx配置 server{ listen 80; ...

2019-04-18 17:51:46

阅读数 32

评论数 0

原创 Java注解相关

1.什么是注解? a.注解就是代码的元数据,它们包含了代码自身的信息; b.注解可以被用在包,类,方法,变量,参数上。被注解的代码并不会直接被注解影响。 2.什么是元注解? 元注解就是注解的注解,一般放在其它注解头上的那几个注解。 JDK提供了4中元注解: @Target:目标,该注解用来标注什...

2019-04-18 17:28:08

阅读数 32

评论数 0

原创 int和Integer的区别

1.具体的实践Demo package com.gui.practise.base; /** * int和Integer的区别 * * 第一印象:int是基本数据类型,Integer是int的包装类;int的初始值为0,Integer的初始值为null。 */ public clas...

2019-04-18 16:13:49

阅读数 370

评论数 0

原创 静态代理和动态代理

1.静态代理 在编译时就已经将接口,被代理类,代理类等确定下来。在程序运行之前,代理类的.class文件就已经生成。 2.静态代理实践demo(上班代打卡) package com.gui.practise.proxy.statical; public interface Person { ...

2019-04-18 14:59:53

阅读数 53

评论数 0

原创 Git常用命令

1. 新建分支dev,此时只存在于本地 git branch dev 2. 切换到dev分支 git checkout dev 3. 查看本地的所有分支 git branch 4. 把本地的分支dev推到远程(此时,远程才会有dev分支) git push origin dev 5. 查看...

2019-04-18 11:02:58

阅读数 32

评论数 0

原创 Git标准流程分支

2019-04-18 10:54:40

阅读数 77

评论数 0

原创 ArrayList和LinkedList

1.总体认识有序的序列;可允许重复的元素。 2.添加元素方法的区别 ArrayList的添加方法: LinkedList的添加方法: 通过分析源代码,我们可以发现: ArrayList的添加方法,影响性能的因素体现在两方面:一方面是扩容(当容量不够的时候,会扩容到原来的1.5...

2019-04-18 09:46:43

阅读数 33

评论数 0

原创 强引用、软引用、弱引用和虚引用

Java引用类型的类结构图如下: 1.强引用 我们经常使用的引用类型。通过new关键字创建对象,便会有一个强引用指向创建的对象。只要还有强引用存在,垃圾回收器便不会回收该对象。如果需要让垃圾回收器回收,我们需要显示将对象设置为null,或者对象超过其生命周期。 JDK中的具体实践,如Arr...

2019-04-18 08:36:53

阅读数 35

评论数 0

原创 SpringCloud与Consul

一、环境准备(Windows平台) 1.https://www.consul.io/downloads.html 下载对应平台的consul 2.启动consul服务端 ./consul.exe agent -server -bind=127.0.0.1 -client=0.0.0.0 -boo...

2019-04-17 16:54:02

阅读数 32

评论数 0

原创 String、StringBuilder和StringBuffer

一、认识String 被final修饰,不可被继承; 底层实现原理是通过char数组来保存字符串的; 对String对象的任何操作(如concat、replace等)都不会改变原对象,而是生成新的String对象(分析源代码可以发现,这些操作最后都是通过new String返回了一个新的对象); ...

2019-04-17 14:00:42

阅读数 53

评论数 0

原创 SpringBoot实践源码

https://github.com/williamjava/spring_boot_practise

2019-04-17 10:08:53

阅读数 66

评论数 0

原创 SpringCloud实践源代码

https://github.com/williamjava/spring_cloud_practise

2019-04-16 11:11:37

阅读数 88

评论数 0

原创 Java集合框架概览

在Java中,集合分为两大类——Collection和Map,它们是最顶层接口,每一个接口下面细分的接口和涉及到的具体实现如下图所示: Collection接口 Map接口 在未来的日子里,会和大家一起,慢慢分享关于集合的更多知识。 ...

2019-04-14 17:56:17

阅读数 37

评论数 0

原创 微服务监控

微服务监控用来监控所有基于Spring Boot实现的应用。涵盖的功能主要包括如下几个方面:每一个应用的状态信息;日志信息;应用环境参数等。另外,在每一个应用状态发生变化的情况下,会邮件通知配置的开发者(需要配置)。 其核心原理是读取Eureka服务注册与发现中心的所有服务信息。 1.完整的ma...

2019-04-12 16:43:39

阅读数 364

评论数 0

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