自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(92)
  • 收藏
  • 关注

原创 MySQL中的锁机制和MVCC

MySQL中的锁和MVCC概述InnoDB的MVCCMVCC锁相关SQL语句的加锁分析RR隔离级别是如何解决幻读的?死锁模拟死锁在学习MySQL中的锁机制相关时搜集了几篇写得非常不错的博客,这里就不再花时间详细介绍,本篇仅做总结和重点部分摘录(摘自:传送门)。推荐先理解下面篇博客(写得很赞): https://www.cnblogs.com/crazylqy/p/7611069.html概述...

2019-06-09 20:53:39 7107 7

原创 MyBatis原理分析(通俗易懂)

MyBatis原理分析MyBatis工作流程简述原生MyBatis原理分析初始化工作解析配置文件配置类方式执行SQLSqlSession API方式接口方式真正掌握一个框架源码分析是少不了的~在讲解整合Spring的原理之前理解原生的MyBatis执行原理是非常有必要的MyBatis工作流程简述传统工作模式:public static void main(String[] args) ...

2019-06-07 16:10:20 141784 29

原创 Java后端学习总结目录

持续更新中~Java基础集合ArrayList、Vector源码解析LinkedList源码解析HashMap源码解析HashMap线程不安全分析Hashtable源码解析Iterator、Enumeration和fail-fastWeakHashMap源码分析HashSet源码分析TreeMap源码分析(还没写)TreeSet源码分析 (还没写)LinkedHashM...

2019-05-07 21:13:49 2166 2

原创 JAVA基础集合(三)HashMap源码详细解析

HashMapHashMap简介底层实现存储结构核心函数无参构造带参构造hash()函数put()函数resize() 函数分析链表分组原理get()函数remove()函数tableSizeFor()函数概念以及面试题先说说我的见解hash碰撞为什么table的长度是2的幂次方什么HashMap中要对原hashCode再调用hash()进行运算?关于填充因子loadFactorHashMap随J...

2019-04-14 21:48:04 2112

原创 操作系统之内存

文章目录内存分配题外话前言内存分配方式连续内存分配非连续内存分配虚拟内存参考:内存分配所有文章和源码最新更新在我的GitHub,欢迎点个Star~ https://github.com/Coder999z/Java-Notes题外话学习操作系统的念头来源于几次面试中的自闭经历,该好好补基础了前言技术的进步通常都是以需求驱动的,早期计算机运行的是单进程,所以直接操作内存,程...

2019-09-26 16:35:38 496

原创 ELK日志系统Docker搭建与入门

ELK日志系统搭建与入门简介搭建环境安装ElasticSearch安装Kibana安装Logstash安装FileBeat安装测试简介ELK指的是三个组件Elasticsearch(数据存储全文检索)+Logstash(日志接收过滤输出)+Kibana(可视化)。本篇只介绍搭建过程,详细配置入门在下一篇博客,原理嘛…有时间再探索。搭建环境ELK+Filebeats统一7.3.0版本Ce...

2019-08-19 14:50:16 564

原创 MyBatis多数据源配置

MyBatis多数据源配置Mavenapplication.xml主类配置配置类实习中接到了新的需求,考虑到适配性,可能会涉及到不同访问方对应不同的数据源,本篇主要叙述MyBatis多数据源的配置方法和其中遇到的坑。环境:jdk1.8MyBatis2.1.0Maven <dependency> <groupId>org.mybati...

2019-08-06 17:02:53 711

原创 SpringBoot项目打包到Docker

SpringBoot项目打包到Docker前言步骤配置DockerIdea配置SpringBoot项目配置前言docker介绍和安装参考菜鸟教程:https://www.runoob.com/docker/docker-tutorial.html本次安装使用的环境为:CentOS7Docker19.03.1IntelliJ IDEA 2019.1.3 x64Jdk1.8步骤...

2019-07-31 15:15:55 1523

原创 Java类的加载和实例化全过程解析

Java类的加载和实例化全过程解析1.类加载1.1 类加载器选择1.2 类装载1.3 类验证1.4 分配内存1.5初始化零值1.6设置对象头1.7执行init方法特例String类型本篇解析中,默认首次new时类还未加载,并使用的是应用程序类加载器。1.类加载1.1 类加载器选择根据双亲委派模型,选择出该类的类加载器。1.2 类装载类加载器通过全限定名获取类的.class文件。解析...

2019-06-21 13:29:13 1390

原创 Java爬坑系列(一)

Java爬坑系列(一)Java类初始化顺序参数传递问题值传递引用传递几种特殊的情况基本数据类型与包装类不得不提自动装箱拆箱机制基本数据类型的常量池Java类初始化顺序从阿里的一道笔试题开始:下面代码输出什么?public class Base{ private String baseName = "base"; public Base() { ca...

2019-06-20 17:37:59 449

原创 Java实现单例模式

Java实现单例模式单例模式懒汉式单例饿汉式单例登记式单例单例模式单例是一种常见的设计模式,在各大框架中经常见到,例如Spring中的SpringBean默认就是单例,单例模式需要保证整个系统中单例模式的类只能存在一个实例。Java实现简单的单例模式可以大致有三种实现方式:饿汉式、懒汉式、登记式。懒汉式单例public class SingleTon { private stati...

2019-06-19 18:07:17 392

原创 Java异常处理机制

Java异常处理机制Java异常处理类结构ThrowableErrorException异常的处理finally相关自定义异常常见的问题Throw和Throws的区别Java异常处理类结构(图片来自:https://blog.csdn.net/michaelgo/article/details/82790253)Throwable类中定义了异常类中常用的方法,例如getMessage()...

2019-06-17 16:09:25 377

原创 Redis集群的负载均衡

Redis集群的负载均衡概述常见的集群解决方案读写分离复制集群使用数据分片方案源程序实现Redis-ClusterCodis阅读本文之前建议先了解Redis主从复制和哨兵机制概述前面介绍了Redis的主从复制和保证高可用的哨兵机制,他们都是搭建Redis集群的基础,当单机Redis无法满足需求时就需要考虑进行水平扩展,本篇就来讲讲Redis集群方案(不介绍搭建流程)。常见的集群解决方案读...

2019-06-11 15:55:19 21228

原创 MySQL索引相关原理解析

MySQL索引相关原理解析概述MySQL索引的数据结构B-Tree和B+TreeB-TreeB+Tree总结一下B+Tree和B-Tree哈希索引结构特点InnoDB支持哈希索引吗?聚簇索引和非聚簇索引概念:回表覆盖索引索引树InnoDB引擎下的表是索引组织表索引的最左匹配原则复合索引最左匹配原则总结概述索引的种类有聚簇索引和聚簇索引,MySQL中的索引有主键索引、唯一索引、普通索引、全文所以...

2019-06-10 19:29:26 721

原创 Redis为什么这么快

Redis为什么这么快概述原因概述完全基于内存单线程单线程处理的好处I/O多路复用模型概述据Redis官方的测试,Redis可以达到100000以上的QPS本文主要探究,它为什么能这么快原因概述Redis是完全基于内存的数据库处理网络请求使用的是单线程,避免了不必要的上下文切换和锁的竞争维护。使用了I/O多路复用模型。完全基于内存为什么要用完全呢。因为像mysql这样的成传统...

2019-06-08 16:20:31 3266 1

原创 Redis主从复制与哨兵(原理篇)

Redis主从复制与哨兵(原理篇)概述主从复制特点原理同步完整同步部分同步命令传播概述当单机Redis已经无法支持过多的请求时就该考虑如何进行扩展了,Redis提供了主从复制,哨兵机制。主从复制特点主服务器负责处理写请求从服务器负责处理读请求主从服务器的数据保持一致具体配置方法在这篇博客里:传送门~原理原理这主要介绍的是主从复制的关键——复制复制分为两个部分:同步:...

2019-06-08 10:20:13 2041 2

原创 MyBatis配置文件相关(详细)

MyBatis配置文件相关占位符#{}占位符${}拼接符#{}和${}的区别转义字符的处理动态SQLifchoosewheretrimsetforeach关于主键返回ResultType和ResultMapResultTypeResultMapMyBatis的懒加载别名占位符MyBatis中有两种占位符:#{}和${}。#{}解析传递进来的参数数据${}对传递进来的参数原样拼接在SQL中...

2019-06-06 20:08:52 963

原创 MyBatis入门

MyBatis入门概述MyBatis与Hibernate与Spring整合与SpringBoot整合概述MyBatis的前身是Apache的IBatis,后来更名为了MyBatis。它是一款优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,它是对JDBC的一种封装。Spring对Mybatis也有良好的支持,从最先繁杂的配置文件到后来的SpringBoot全注解支持也是越来越便利。My...

2019-06-05 20:17:49 285

原创 MySQL基于MyCat的负载均衡与高可用

MySQL基于MyCat的负载均衡与高可用MyCat中几种负载均衡的策略介绍测试MyCat的高可用介绍测试MyCat中几种负载均衡的策略介绍<dataHost name="test1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native"><heartbe...

2019-06-05 16:23:47 2512 2

原创 Nginx负载均衡详解

Nginx负载均衡详解Nginx的负载均衡策略轮询权重weightip_hashleast_conn第三方策略接上一篇的入门,本篇主要介绍Nginx的负载均衡策略Nginx的负载均衡策略轮询描述: 所有请求按照时间顺序地轮流分配到应用服务器上,它可以均衡的将负载分散在后端服务器上,但是并不关心后端服务器的连接数和系统负载,它是默认的负载均衡策略。在轮序中如果服务器宕机了会自动移除服务器...

2019-06-05 13:44:46 6889 1

原创 Nginx入门介绍

Nginx入门介绍什么是Nginx?Nginx可以做什么?为什么要用Nginx返回静态文件而不是Tomcat?什么是正向代理和反向代理?什么是Nginx?Nginx是一款开源的高性能反向代理服务器,官方测试nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,可以作为HTTP服务器返回静态资源,也可以作为负载均衡服务器将大量请求均衡地分发给代理的后端服务器。Ngi...

2019-06-04 21:27:23 344

原创 MySQL基于MyCat读写分离搭建

概述在上一篇中介绍了MySQL的主从复制,基于主从复制可以扩展集群负载均衡,高可用主从切换,主从分离等。 高可用本篇暂时不做介绍。负载均衡,主从分离的实施:程序中代码实现(优点:效率高、自由度高)(缺点:高耦合、可维护性差)使用第三方中间件,例如MySQL-Proxy,MyCat等,各种中间件也是各有优劣。本篇使用的是MyCat进行配置。搭建搭建环境:Centos7,MySQL...

2019-06-04 18:04:30 383

原创 MySQL主从复制搭建(使用Docker)

MySQL主从复制搭建概述搭建概述MySQL中提供了主从复制功能,同时主从复制机制也是读写分离实现的基础,还可用于负载均衡,容灾等。搭建我的搭建环境是:docker 18.09.3MySQL5.6两台Centos7虚拟机安装Docker可以参照菜鸟教程。①下拉MySQL 镜像docker pull mysql:5.6②创建目录在master虚拟机中创建//...

2019-06-03 20:53:52 332

原创 Redis内存淘汰机制

Redis内存淘汰机制概述Redis清除过期Key的方式定期删除惰性删除Redis内存淘汰机制概述Redis是基于内存存储,常用于数据的缓存,所以Redis提供了对键的过期时间的设置,实现了几种淘汰机制便于适应各种场景。设置过期时间我们可以在设置键时设置expire time,也可以在运行时给存在的键设置剩余的生存时间,不设置则默认为-1,设置为-1时表示永久存储。Redis清除过期K...

2019-05-25 12:42:25 8447 4

原创 Redis基础入门

Redis基础入门Redis是什么为什么要使用Redis?Redis和MySQL的区别?为什么不用Map做缓存而是RedisRedis是单线程处理请求为什么这么快?Redis value的基本数据类型StringHashListSetSort SetRedis是什么Redis是一个开源的,基于内存的数据结构存储,它可以用作数据库、缓存、消息中间件。为什么要使用Redis?Redis是基于...

2019-05-24 21:10:13 319 1

原创 MySQL事务概念

MySQL事务详解ACID隔离级别并发事务可能导致的问题四个隔离级别ACID原子性(Atomicity): 事务被视为不可分割的最小工作单元,整个事务中的所有操作,要么全部执行,要么全部不执行。一致性(Consistency): 执行事务的前后,数据库总是从一个一致性状态换到另一个一致性状态。事务在执行过程中,如果中途出现了错误,因为事务还没有被提交,事务中间做的修改不会被保存,数据库的...

2019-05-23 13:41:02 788

原创 MySQL数据库引擎对比

MySQL数据库引擎概述MyISAMInnoDBInnoDB和MyISAM的对比总结概述在MySQL5.5以前使用的是MyISAM数据库引擎,在5.6开始引入了InnoDB数据库引擎,大多数情况下使用的是InnoDB,在某些情况下使用MyISAM会更好,MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。MyISAMMyISAM只支持表锁,不支持行锁。 在操作MyISAM表时...

2019-05-23 09:48:04 704

原创 常用SQL语句(MySQL)

SQL语句执行算术运算常用函数数学函数处理字符串聚合函数AVG()MAX()MIN()COUNT()SUM()子查询一些关键字GROUP BYOrder ByLimitInHavingASLike多表查询Join执行算术运算说明: SQL中允许进行加减乘除简单算术运算。示例:select 1+1;select name from persion where id=1+1;常用函数数...

2019-05-22 21:03:27 1106

原创 JDBC与连接池

JDBC与连接池JDBC什么是JDBCJDBC操作数据库步骤常见的JDBC组件JDBC注册驱动为什么是使用反射而不是创建对象直接注册?JDBC事务JDBC什么是JDBCJDBC全程为Java DataBase Connection,它是JDK提供用于操作数据库的接口,换句话说,它是JDK为Java操作数据库提供的API规范。具体的数据库驱动、API的实现类是由数据库厂商实现。例如使用MySQ...

2019-05-21 17:32:49 639

原创 探究SpringMVC中常用注解

探究SpringMVC中常用注解@Controller@RestController@ResponseBody@RequestBody@RequestMappingSpring提供了快捷使用的方式天天在项目中用的注解,今天来研究一下它们。建议先理解SpringMVC原理篇:https://blog.csdn.net/weixin_43184769/article/details/90372793...

2019-05-20 15:28:37 539

原创 SpringMVC原理分析

SpringMVC原理分析组件介绍DispatcherServlet(核心控制器)HandlerMapping(处理映射器)HandlerAdapter(处理适配器)Handler(其实就是我们写的Controller)View resolver(视图解析器)View(视图)SpringMVC工作原理准备工作一个Request来了此博客参照了其他人的源码分析博客总结而成。组件介绍Disp...

2019-05-20 12:59:35 1223

原创 SpringMVC入门篇

SpringMVC入门篇MVC模式SpringMVC概述SpringMVC快速入门MVC模式(摘自菜鸟教程)MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。Model 模型代表一个存取数据的对象或POJO类。模型接受视图数据的请求,并返回最终的处理结果。View 视图就是用户看到的并与之交互的界面信息,比如:h...

2019-05-19 17:09:24 287

原创 Java线程池相关

Java线程池相关什么是线程池?为什么要用线程池?线程池的使用方式ThreadPoolExecutor核心属性几种创建方式创建任务Callable和Runnable的区别execute()方法和submit()方法的区别关闭线程池ThreadPoolExecutor原理简析Worker对象execute()原理线程复用的秘密什么是线程池?线程池可以看做是线程的集合。线程池中提供了对池中的线程与...

2019-05-19 15:30:08 403

原创 Servlet总结

Servlet总结Servlet概述Servlet接口Servlet生命周期GenericServletHttpServletServlet概述Java Servlet是一个遵循Servlet接口开发的java类。它能够处理HTTP Request请求,并返回Response响应,从而实现浏览器和服务器的交互。Servlet接口其中定义了5个方法需要实现。@Override p...

2019-05-17 17:29:03 435

原创 Tomcat入门

Tomcat入门概述为什么要使用TomcatTomcat文件目录webapps配置虚拟目录[转载]参考了其他人的博客,链接在文末。概述Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器。为什么要使用Tomcat举个简单的例子,我们...

2019-05-15 15:25:28 555

原创 Spring AOP详解

Spring AOP详解概述静态代理、动态代理、CGLIB代理概述AOP(Aspect Oriented Programming),即面向切面编程。它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复...

2019-05-15 11:12:09 252

原创 静态代理,动态代理,CGLIB动态代理

静态代理,动态代理,CGLIB动态代理 概述静态代理动态代理CGLIB代理概述代理是一种设计模式,提供了对目标对象的间接访问,即通过代理访问目标对象的方法,那么就可以很方便的在目标方法的基础上添加额外的操作,前拦截,后拦截等。按照代理的创建时期可以分为两种:静态代理:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。动态代理:在程序运...

2019-05-14 13:17:51 480

原创 Java反射机制

Java反射机制什么是反射?反射机制能做什么?获取字节码对象的三种方式简单实用例子创建对象实例获取构造器创建对象实例获得成员变量获取对象中的方法反射的实际使用场景什么是反射?反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制。想要使用反射机制就必...

2019-05-13 14:59:20 385

原创 HTTP协议

HTTP协议是什么?HTTP方法GET和POST的区别常见的状态码URI和URLHTTPSHTTP和HTTPS的区别HTTPS工作原理HTTPS是如何防止中间人攻击的?HTTPS的缺点HTTP和TCP/IP的关系HTTP长连接与短连接HTTP请求报文HTTP响应报文是什么?HTTP(超文本传输协议)是一个基于请求与相应模式的、无状态的、应用层协议。HTTP请求由三部分组成,分别是:请求行、消息...

2019-05-13 10:35:18 472

原创 Spring入门简介

Spring入门简介什么是Spring?Spring的优点Spring模块简介什么是Spring?Spring是一个开源框架。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Sp...

2019-05-12 15:44:12 175

空空如也

空空如也

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

TA关注的人

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