自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL锁总结

MySQL锁总结锁分类以操作粒度区分以操作类型区分举例意向锁、共享锁和排它锁之间的兼容关系以操作性能区分InnoDB的行锁行锁的实现原理行锁的不同实现锁的兼容性锁规则MySQL使用间隙锁的目的加锁主键加锁唯一键加锁非唯一键加锁无索引加锁锁模拟锁举例等值查询间隙锁非唯一键等值锁主键索引范围锁非唯一索引范围锁非唯一索引等值锁for Update死锁模拟死锁模拟1站在巨人的肩膀上锁分类当多个事务或进程访问同一个资源时,为了保证数据的一致性就会用到锁机制,在MySQL中锁有多种不同的分类。以操作粒度区分

2021-06-16 21:42:47 140

原创 Zookeeper源码环境搭建

下载源码本文以 Zookeeper 3.5.4 为例,源码下载地址:https://github.com/apache/zookeeper/tree/release-3.5.4源码编译在命令行使用 ant 编译的时候出现了一些问题,在网上没有找到解决方案,所以使用 idea 进行编译,希望有知道原因的大佬指点迷津,下图为执行 ant eclipse 后的报错信息下边是具体操作步骤首先使...

2020-12-31 15:07:00 139

原创 Zookeeper一致性协议——ZAB

ZAB协议简介Zookeeper通过ZAB保证分布式事务的最终一致性。ZAB全称Zookeeper Atomic Broadcast(ZAB,Zookeeper原子消息广播协议)ZAB是一种专门为Zookeeper设计的一种支持 崩溃恢复 的 原子广播协议 ,是Zookeeper保证数据一致性的核心算法。ZAB借鉴了Paxos算法,但它不是通用的一致性算法,是特别为Zookeeper设计的。...

2020-12-30 17:07:00 131

原创 Zookeeper简介

Zookeeper是⼀个开源的分布式协调服务,其设计⽬标是将那些复杂的且容易出错的分布式⼀致性服务封装起来,构成⼀个⾼效可靠的原语集,并以⼀些简单的接⼝提供给⽤户使⽤。zookeeper是⼀个典型的分布式数据⼀致性的解决⽅案,分布式应⽤程序可以基于它实现诸如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能。zookeeper基本概念集群角色 Zookeeper 中引入...

2020-12-29 23:59:00 120

原创 一文详解Spring循环依赖

什么是循环依赖?大家都知道spring的核心是一个实现了AOP的IOC容器,那么IOC容器对于bean的初始化,会遇到以下情况:当BeanA初始化时,它依赖的对象BeanB也需要执行初始化,如果BeanB里也依赖了BeanA,则又会开始执行BeanA的初始化,那么这样会无限循环,导致初始化异常如下所示。Spring已经很好的解决了这个问题,这个解决方法就是三级缓存。什么是三级缓存?我们以...

2020-12-16 23:45:37 173

原创 IOC容器加载流程

Spring容器的AbstractApplicationContext#refresh()【容器刷新】源码解析;本文只记录大体步骤, 细节部分自行阅读源码;AbstractApplicationContext#refresh()是IOC容器加载的主要流程,源代码如下@Override public void refresh() throws BeansException, Illegal...

2020-12-16 23:32:03 204

原创 Spring Bean 生命周期

实例化Bean设置Bean属性值判断是否实现BeanNameAware,如果实现调用其setBeanName方法判断是否实现BeanFactoryAware,如果实现调用其setBeanFactory方法判断是否实现ApplicationContextAware,如果实现调用其setApplicationContext方法调用BeanPostProcessor的预初始化方法判断是否标...

2020-11-19 12:38:47 61

原创 MySQL体系架构

Client Connectors(客户端连接层)负责处理客户端的连接请求。几乎支持所有的连接类型。MySQL Server(服务层)Connection Pool(连接池):负责处理存储数据库与客户端创建的连接,一个线程负责管理一个连接。它包含了用户认证、连接线程池、连接限制、内存与缓存管理。Services&utilities(系统管理和控制工具):管理服务&工具集,...

2020-09-20 16:09:10 44

原创 Spring Framework 5.0.x 模块组成、体系结构、整体架构

核心容器(Core Containe)核心容器提供了Spring框架的基本功能,是其它模块建立的基础,有 spring-core、spring-beans、spring-context、spring-context-support和spring-expression(Expression Language、SpEL)组成。spring-beans和spring-core是spring框架的核心模...

2020-09-03 14:21:41 259

原创 什么是 IoC?什么是 DI?它们之间是什么关系?

什么是控制反转(IOC)Ioc—Inversion of Control,即“控制反转”,它是一种设计思想,并不是什么技术;在 Java 中,IOC 意味着将我们设计好的对象交给容器控制,而不是传统的需要时在内部构造直接控制;谁控制谁?控制了什么? 谁控制了谁: IoC 控制了对象; 控制了什么: 主要控制了外部资源的获取,不仅限于对象,包括文件等资源;什么为正转?什么为反转?正转...

2020-05-19 16:43:58 394

原创 为什么StringBuilder是线程不安全的?StringBuffer是线程安全的?

面试中经常问到的一个问题:StringBuilder和StringBuffer的区别是什么?我们非常自信的说出:StringBuilder是线程不安全的,StirngBuffer是线程安全的面试官:StringBuilder不安全的点在哪儿?这时候估计就哑巴了。。。分析StringBuffer和StringBuilder的实现内部是和String内部一样的,都是通过 char[]数组的方式;不...

2019-09-19 18:11:56 237

原创 Java实践-远程调用Shell脚本并获取输出信息

1、添加依赖<dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>262</version></dependency><dependency&g...

2019-09-09 18:10:42 144

原创 浅谈关于SQL优化的思路

零、为什么要优化系统的吞吐量瓶颈往往出现在数据库的访问速度上随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢数据是存放在磁盘上的,读写速度无法和内存相比一、观察MySQL优化≠SQL语句优化,理解这一点非常重要,虽然大部分时候我们都在调优SQL语句。然而,MySQL的优化却是始于观察,而且有时候观察几分钟,几小时就能得出结论的,可能要观察一天以上。这么做的目的很...

2019-09-05 23:53:52 47

原创 Docker搭建Zookeeper&Kafka集群

前排提示:最新的docker-compole.yml请去github获取,README有相应的操作步骤。Github地址:https://github.com/JacianLiu/docker-compose最近在学习Kafka,准备测试集群状态的时候感觉无论是开三台虚拟机或者在一台虚拟机开辟三个不同的端口号都太麻烦了(嗯。。主要是懒)。环境准备一台可以上网且有CentOS7虚拟机的电...

2019-08-27 13:29:04 82

原创 链表

开篇问题问题:如何用链表来实现 LRU 缓存淘汰策略呢?## 链表的作用链表一个经典的应用场景就是LRU缓存淘汰算法;缓存是一种提高数据读取性能的技术,在开发中有着非常广泛的应用,由于缓存的大小有限,当缓存被占满时,哪些数据应该被清理,哪些数据应该被保留?这就需要淘汰策略来决定,常见的淘汰策略有三种:先进先出策略FIFO(First In, First Out)、最少使用策略LFU(Lea...

2019-08-25 13:50:30 97

原创 记录一次由于线程使用不当引发的血案

背景最近给第三方做了一个接口,接口的作用是接收数据对数据进行验证之后通过kafka推送到模型进行数据处理,最终通过kafka接收模型的数据,开始只做了一个异步的接口,由于对方业务原因需要一个同步的接口传输数据,但是每当运行一段时间之后程序就会进入假死状态,接口无法正常调用;同步接口同步接口的实现是使用阻塞Map,当对方发送请求时,对数据进行验证,然后推送到模型,等待结果返回之后将处理好的数据...

2019-08-20 21:53:47 58

原创 数组

问题:为什么数组下标是从0开始,而不是从1开始;### 什么是数组?数组是一种线性表数据结构,它用一组连续的内存空间来存储一组相同类型的数据。线性表结构:数据排成一条线一样的结构,每个线性表上最多只有前和后两个方向,除数组外,链表、队列、栈也是线性结构。非线性结构:比如:二叉树、图、堆等,在非线性结构中,数据之间并不是简单的前后关系。连续的内存空间和相同类型的数据:正式因为这两...

2019-08-20 09:33:49 104

原创 基于Hexo&GitHub从零搭建个人博客

现在越来越多的人喜欢利用Github搭建静态网站,原因不外乎简单省钱。本人也利用hexo+github搭建了本博客,用于分享一些心得。在此过程中,折腾博客的各种配置以及功能占具了我一部分时间,在此详细记录下我是如何利用hexo+github搭建静态博客以及一些配置相关问题,以免过后遗忘,且当备份之用。准备工作下载&安装node.js,默认会安装npm:https://nodej...

2019-08-19 15:57:27 95

原创 基于Netty-SocketIO的主动推送服务

背景前端时间,公司开发了一款主动服务的机器人的程序,讲产生的消息通过服务端主动推送到客户端(H5、IOS、Android),支持用户的个性化开关设置,用户可自由选择接受的消息类型;同时支持用户主动提问;在此记录下整个部署以及实现的大致思路;同时感谢我的Leader给予的帮助。部署Nginx配置为了保持长连接有效,配置HTTP版本1.1;配置Upgrade和Connection响应头...

2019-07-13 22:59:00 500

原创 Joda Time使用小结

一、Joda Time基础操作1、 构造指定时间// 明确给出年月日时分秒,同时还可以指定毫秒DateTime dateTime = new DateTime(2017,9,14,20,30,0); // 使用时间戳构造Datetime dateTime = new DateTime(1505371053358L);// 使用字符串构造,使用字符串构造需要自己定义patternString ...

2019-06-13 17:39:06 131

原创 SpringBoot-Feign使用

SpringBoot:2.1.5.RELEASEFeign:2.0.1.RELEASEfeign-okHttp:9.7.0Feign 简介Spring Cloud的Feign支持的一个中心概念就是命名客户端.Feign客户端使用@FeignClient注册组合成组件,按需调用远程服务器.Spring Cloud使用FeignClientsConfiguration创建一个新的集合作为每个命...

2019-05-24 11:17:20 209

原创 WebSocket主动推送服务

服务器与Web页面交互方式传统的 Web 服务都是客户端发出请求,服务端给出响应。HTTPHTTP短连接:在HTTP1.0中,客户端发送请求,服务器接收请求, 双⽅建⽴连接,服务器响应资源,请求结束。HTTP⻓连接:在HTTP 1.1中,客户端发出请求,服务端接收请 求,双⽅建⽴连接,在服务端没有返回之前保持连接,当客户端再 发送请求时,它会使⽤同⼀个连接。这⼀直继续到客户端或服务器 ...

2019-05-23 11:04:00 251

原创 SpringBoot中使用@Async实现异步调用

什么是“异步调用”?“异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。同步调用下面通过一个简单示例来直观的理解什么是同步调用:定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内)@Componentpub...

2019-05-05 10:52:17 225

原创 SpringBoot中使用@Scheduled创建定时任务

我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。创建定时任务在Spring Boot中编写定时任务是非常简单的事,下面通过实例介绍如何在Spring Boot中创建定时任务,实现每过5秒输出一下当前时间。在Spring Boot的主类中加入@EnableScheduling注解,启用定时任务...

2019-04-02 09:02:00 83

原创 SpringBoot属性配置文件详解

相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷。我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁多的XML配置内容,替代它的是在pom.xml中引入模块化的Starter POMs,其中各个模块都有自己的默认配置,所以如果不是特殊应用场景,就只需要在application.properties中...

2019-03-28 11:07:00 60

原创 SpringBoot中Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容。选择一个之前实现过的Web应用(Chapter3-1-2)为基础,启动该应用,访问一个不存在的URL,或是修改处理内容,直接抛出异常,如:@RequestMapping("/hell...

2019-03-27 12:48:00 64

原创 CentOS7安装MySQL

下载 repo 源进入 https://repo.mysql.com/ ,里面包含了所有可用的 MySQL 源。选择一个合适的版本,进行下载:# wget https://repo.mysql.com/mysql57-community-release-el7.rpm 如果提示-bash: wget: 未找到命令 执行以下命令, 安装wget:># yum -y instal...

2019-03-25 09:49:06 58

原创 SpringBoot中使用MongoDB数据库

前段时间分享了关于Spring Boot中使用Redis的文章,除了Redis之后,我们在互联网产品中还经常会用到另外一款著名的NoSQL数据库MongoDB。下面就来简单介绍一下MongoDB,并且通过一个例子来介绍Spring Boot中对MongoDB访问的配置和使用。MongoDB简介MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要...

2019-03-24 20:36:00 83

原创 SpringBoot多数据源配置与使用

之前在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源。在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文件中配置连接参数即可。但是往往随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源,下面基于之前的JdbcTemplate和Spring-data-jpa例子分别...

2019-03-02 15:00:00 51

原创 SpringBoot中使用Redis数据库

Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, Solr和Cassandra。使用RedisRedis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。Redis官网Redis中文社区引...

2019-02-28 15:00:00 86

原创 SpringBoot日志管理

Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger都可以通过配置使用控制台或者文件输出日志内容。格式化日志默认的日志输出如下:2016-04-13 08:23:50.120 INFO 37397 --- [ m...

2019-02-27 15:00:00 46

原创 SpringBoot中使用Spring-data-jpa让数据访问更简单、更优雅

在上一篇 Spring中使用JdbcTemplate访问数据库 中介绍了一种基本的数据访问方式,结合 构建RESTful API 和 使用Thymeleaf模板引擎渲染Web视图 的内容就已经可以完成App服务端和Web站点的开发任务了。 然而,在实际开发过程中,对数据库的操作无非就“增删改查”。就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写大量类似而枯燥的语句...

2019-02-26 15:00:00 51

原创 SpringBoot中使用JdbcTemplate访问数据库

之前介绍了很多Web层的例子,包括构建RESTful API、使用Thymeleaf模板引擎渲染Web视图,但是这些内容还不足以构建一个动态的应用。通常我们做App也好,做Web应用也好,都需要内容,而内容通常存储于各种类型的数据库,服务端在接收到访问请求之后需要访问数据库获取并处理成展现给用户使用的数据形式。本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据...

2019-02-25 15:00:00 80

原创 SpringBoot中使用Swagger2构建强大的RESTful API文档

由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Androi...

2019-02-24 15:00:00 108

原创 SpringBoot构建RESTful API与单元测试

@Controller:修饰class,用来创建处理http请求的对象@RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。@RequestMapping:配置url映射下...

2019-02-23 15:00:00 58

原创 SpringBoot开发Web应用

静态资源访问在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。默认配置Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:/static/public/resources/META-INF/resources举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程...

2019-02-22 15:00:00 63

原创 SpringBoot快速入门

SpringBoot主要优点为所有Spring开发者更快的入门开箱即用,提供各种默认配置来简化项目配置内嵌式容器简化Web项目没有冗余代码生成和XML配置的要求本文所用工具版本Maven3.6.0JDK 1.8SpringBoot 1.5.19使用Maven构建项目通过 SPRING INITIALIZR 构建项目访问: https://start.spring.io/...

2019-02-21 15:00:00 67

原创 Spring加载多个properties文件报错

1. 问题描述启动web项目时保存 , 该问题出现的原因为 spring 加载 properties 文件时无法找到对应的属性值 ; Caused by : java.lang.IllegalArgumentException: Could not resolve placeholder ‘xxx’ in string value “${xxx}”2. 问题分析提示我无法解析占位符 ...

2019-02-20 22:09:41 136

空空如也

空空如也

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

TA关注的人

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