自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不要总是等明天再开始

每天进步一点点就够了

  • 博客(93)
  • 资源 (2)
  • 收藏
  • 关注

原创 并发编程——彻底掌握CountDownLatch,CyclicBarrier和Semaphore

这里写目录标题一级目录二级目录三级目录CountDownLatchCyclicBarrier 作用代码实例演示实现原理解析Semaphore代码示例演示一级目录二级目录三级目录CountDownLatch见前一篇:并发编程——一文看尽CountDownLatch原理CyclicBarrier 作用CountDownLatch是某个线程A执行的过程中,等待其他的一个或多个线程全部执行完毕,线程A再继续执行当前的流程,起到一个同步等待的作用。CyclicBarrier(循环壁垒)同样起到一个同步

2020-08-24 22:56:18 316

原创 并发编程——一文看尽CountDownLatch原理

这里写目录标题一级目录二级目录三级目录CountDownLatch实际例子源码解析一级目录二级目录三级目录CountDownLatchCountDownLatch是一个同步辅助类,允许一个线程等待其他线程执行完毕再继续执行。比如现在有一个线程0在执行任务A,执行任务过程中需要等待其他线程1、线程2等先完成任务B任务C的执行,那么线程0会暂停任务A的执行,线程0阻塞,等到线程1线程2执行完毕时线程0才会继续执行。CountDownLatch使用AQS实现线程同步,初始化时要设置一个count,表示

2020-08-23 00:16:05 330

原创 MySQL——主从模式原理解析到基本配置

1. 什么是MySQL主从模式先看一张图:其实原理和服务的主从模式一致,一个master配多个slave。MySQL主从模式的好处主要有:数据备份,提高数据安全性读写分离,master负责业务的写请求,slaver负责业务中的读请求。提高系统吞吐量架构拓展,单机的I/O能力 网络资源 CPU都是有限的,通过主从可以让从库来分担读请求。2. MySQL主从模式的原理binlog: binary log 它是主库记录所有更新操作(增删改)日志的二进制日志文件,是主从模式的基础。MySQ

2020-08-15 01:08:04 250

原创 MySQL引擎——从B树到InnoDB、MyISAM全面分析

这里写目录标题1. 树1.1B树1.2 B-树1.3 B+树1.4 B*树1.5 小结2. 操作系统相关知识3. MyISAM和InnoDB4. 索引5. 索引优化了解MySQL的存储引擎才能知道MySQL的存储原理、索引原理,知其然需知其所以然。1. 树深入学习之前先了解一下B树 B-树 B+树 B*树。1.1B树B树其实就是二叉搜索树,每个非叶子结点最多只有两个子节点。右子节点比父节点大,左子节点比父节点小。搜索原理:从根节点开始,如果比根节点大则进入右子节点查询,如果比根节点小则进入左

2020-08-15 00:27:29 180

原创 Redis(六)——限流算法:滑动时间窗口限流和漏斗限流

本文主要总结自《redis深度历险》限流的意义限流一般是指在一个时间窗口内对某些操作请求的数量进行限制,比如一个论坛限制用户每秒钟只能发一个帖子,每秒钟只能回复5个帖子。限流可以保证系统的稳定,限制恶意请求,防止因为流量暴增导致系统瘫痪宕机。常用的限流算法有:滑动窗口、漏斗以及令牌桶。滑动窗口算法rolling Window以限制用户行为为例子,比如一秒内进行某个操作50次,这种行为应该进行限制。滑动窗口就是记录一个滑动的时间窗口内的操作次数,操作次数超过阈值则进行限流。网上找的图:在red

2020-08-13 18:27:50 5140

原创 SpringCloud(四)——从什么是服务网关到SpringCloud Gateway

这里写目录标题SpringCloud服务网关——SpringCloud Gateway服务网关简介简介什么是服务网关?网关的作用?Zuul和GatewaySpringCloud Gateway 服务网关服务网关执行步骤SpringCloud Gateway实例演示eureka注册中心producer 服务提供者SpringCloud Gateway 服务网关启动服务测试SpringCloud服务网关——SpringCloud Gateway服务网关简介简介什么是服务网关?简单理解服务网关就是一个网

2020-08-13 14:43:46 2625

原创 SpringCloud(三)——OpenFeign、Ribbon、Hystrix原理分析及实例演示

这里写目录标题一级目录二级目录三级目录1. Ribbon负载均衡Ribbon 负载均衡原理分析负载均衡使用小结2. RESTful SpringCloud OpenFeign 声明式RESTful客户端OpenFeign原理小结3. Hystrix 熔断器熔断器的意义Hystrix 原理断路器服务降级和隔离4. 综合实例演示小结一级目录二级目录三级目录1. Ribbon负载均衡当系统访问量剧增时,通常会通过增加服务器数量横向扩展,多个服务器需要均衡,避免某台服务器承担过多的访问请求,而某些服务器处

2020-08-09 17:19:41 841

原创 SpringCloud(二)——Eureka 注册发现原理

Eureka服务发现原理eureka:多个eureka server组成一个高可用的eureka集群,集群内的eureka节点之间通过同步复制的方式更新注册信息,保持服务注册信息的一致性。Application Service: 是一个服务的提供者,为其他服务提供特定的业务服务;它也是一个eureka client,会将自己注册到eureka server中,同时获取注册表缓存在本地。Application Client:服务调用者,会去调用application service提供的服务,通过h

2020-08-04 19:36:54 8934 1

原创 SpringCloud(一)——微服务基础及简单微服务项目搭建

单体应用开发传统的web应用开发是将所有的功能模块都打包到一个包中一起部署运行,单体应用集成简洁部署简单,但是随着项目复杂的的增加,单体应用会变得越来越大越来越臃肿,每次进行小功能的更新都需要更新整个包重新部署。什么是微服务?微服务没有一个标准的定义,它是一种架构思想,核心思想是将一个单体应用切分成多个粒度更小的服务,每个服务单独部署,都运行在自己的进程中,服务之间可以互相调用(dubbo使用RPC调用,SpringCloud使用基于http api)。微服务是一套更为复杂的架构模式,常用的微服务组

2020-08-03 13:25:22 1084

原创 Redis(五)——RedisCluster 真正的redis集群原理解析

无论是主从模式还是sentinel哨兵模式,所有客户端请求最终还是由一台redis服务器负担,虽然redis拥有极高的吞吐量,但是单个服务器的性能还是有限的,当数据量请求量超过单台redis服务器负载时,就需要一个真正的redis集群:RedisClusterRedisCluster 是redis作者自己提供的redis集群化方案,它是一个去中心化的集群。RedisCluster将所有数据划分到16384个slots(槽)中,每个redis节点负责一部分的slots,并且每个redis节点读存储全部的槽

2020-08-02 21:22:37 402

原创 数据库分区分库分表其实就这么简单

背景:随着业务发展,数据量越来越大,MySQL中单表数据量达到1000w时性能就变得非常差。分库分表技术应运而生。这些技术看似很高深,其实不难,其核心就是对数据库数据进行划分,将数据放到不同的表、不同数据库中。具体如何划分则需要根据实际业务操作。讲一讲分区表分区表是由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们也可以直接访问各个分区,存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎),分区表的索引只是在各个底层表上各自加上一个相同的索引,从存储引擎的

2020-08-02 03:08:01 1053

原创 MySQL事务隔离

一. 事务的基本要素原子性。一个事务开始后的所有操作,要么全部做完要么全部不做。如果执行过程出现错误则回滚到最初状态一致性:事务开始前和开始后,数据库的完整性约束没有被破坏。隔离性:同一时间只允许一个事务请求同个事务,不同事务之间彼此没有任何干扰。持久性:事务完成后,事务对数据库的所有更新将被保存到数据库二. 事务的并发问题脏读:事务A读取了事务B更新的数据,然后事务B进行了回滚。此时事务A读取的数据是脏数据不可重复读:事务A多次读取同一条数据,事务B在事务A多次读取的过程中对数据进行了更新

2020-08-02 02:50:29 132

原创 Redis(三)——redis持久化

redis是支持数据持久化的,虽然在生产中经常被当做缓存服务器使用。redis持久化机制分为两种:第一种是快照第二种是AOF日志。快照:快照是一次全量的备份,快照是内存数据的二进制序列化形式,在内存上非常紧凑AOF日志:连续增量备份。AOF日志里面记录的是内存数据修改的指令记录文本快照原理前面redis基础篇中提到,redis是单线程的,这个线程需要同时处理客户端的请求和内存数据结构的逻辑读写,显然难以在保持高性能的前提下完成这些工作。所以redis使用操作系统的多进程COW(copy o

2020-08-02 02:41:42 160 1

原创 Redis(二)——redis分布式锁

redis除了用作缓存,还经常被用来作为分布式锁。redis分布式锁:redis是单线程的,所有客户端的请求都会以串行的方式执行,redis的操作是原子性的,能够保证数据的一致性。锁超时问题假如服务A和B均请求某个锁,此时服务A获得获得锁。A还没来得及释放锁就出现突发情况宕机了,如果没有一种超时机制,那么锁无法释放,服务B则永远无法获得该锁。此时可以在加锁的时候加上一个超时时间,当持有锁超过该时间限制,自动释放该锁。像上面的情况,服务A宕机了锁没有得到释放,等到超时时间自动释放该锁。这里有出现一个

2020-08-01 19:53:15 117

原创 Redis(一)——redis基础

简单介绍:用C语言开发的开源的key-value数据库,redis的数据存在内存中,读写速度快,广泛用于缓存,还可以做分布式锁、消息队列。支持数据持久化、事务、多种集群方案(哨兵、集群)。优点:读写很快,每秒钟可以达到10w的读取速度支持丰富的数据类型。字符串 string、列表list、字典hash,集合set、有序列表zset操作具有原子性:redis所有操作都是原子操作,确保数据一致性多实用应用场景工具:可以用于缓存、消息队列、分布式锁等场景五种基本数据结构字符串Stringre

2020-08-01 19:51:25 95

原创 Redis(四)——redis主从复制、哨兵模式sentinel

时代在进步,生产环境中单机部署的情况已经越来越少了,redis同样如此。redis集群技术也越来越成熟,在生产中redis集群部署已经是一个常见的技术。 <br>本文主要总结自《redis深度离线》主从同步所有集群模式都离不开一个基础:同步机制。节点之间的数据同步是集群基础,主从同步则是这一切的基础。redis主从同步的意义:有一些企业虽然没有使用redis集群,但是至少做了主从同步。当一个redis master节点挂了的时候,如果要要重启这个redis节点,需

2020-08-01 19:46:21 205

原创 MySQL引擎——从B树到InnoDB、MyISAM全面分析

深入学习之前先了解一下B树 B-树 B+树 B*树。B树: B树其实就是二叉搜索树,每个非叶子结点最多只有两个子节点。右子节点比父节点大,左子节点比父节点小。搜索原理:从根节点开始,如果比根节点大则进入右子节点查询,如果比根节点小则进入左子节点查询。循环操作直至找到对应数据。二叉搜索树是不平衡的算法:树的高度太高时,相当于线性的,降低树的高度可以B-树: 为了减少树的高度提高查询的效率,B-树是一种多路搜索树,不是二叉树。所有的非叶子结点最多...

2020-08-01 01:51:11 364

原创 Java——线程池ThreadPoolExecutor 其实很简单

线程池 ThreadPoolExecutor线程池概述:利用池化技术提高线程的利用率,减少创建和销毁的开销降低资源的消耗,通过利用已经创建的线程,降低线程创建和销魂造成的消耗提高响应速度,当任务到达时,可以从线程池中获取已有的线程,节省线程创建的时间提高线程的可管理性,线程不能无限创建,使用线程池可以进行统一的分配,调优和监控 使用Executor来启动线程比使用start方法好,除了更方便管理,效率更好(节省开销)外,还有一个关键优点:有助于避免this逃逸问题注:this逃逸是指在构造函数

2020-08-01 01:35:29 209

原创 AQS——从源码窥探AQS到底是什么

AQS 是什么?AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于 AQS 的。当然,我们自己也能利用 AQS 非常轻松容易地构造出符合我们自己需求的同步器。AQS原理核心思想:某个线程尝试获得共享资源,当它获得共享资源时,对共享资源进行加锁,若未获得

2020-08-01 01:32:29 119

原创 Java中涉及到的各种锁——自旋锁、阻塞锁、可重入锁等等

锁的作用锁是作为共享数据保证数据一致性的工具,在并发情况使用。在Java平台中有多种锁的实现比如Synchronize和ReentrantLock。按照锁的类型可以分为以下几种:自旋锁阻塞锁可重入锁 / 不可重入锁独享锁 / 共享锁偏向锁 / 轻量锁 / 重量锁从宏观上分类又可以分为:乐观锁和悲观锁自旋锁自旋锁原理非常简单,如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们只需要等一等(自旋),等持有锁的线程释

2020-08-01 01:20:22 652

原创 JVM垃圾回收算法及垃圾回收器

本文主要总结自JavaGuide哥的文章guide哥文章在线地址。有兴趣可以关注guide哥的公众号上一篇讲了JVM的基础,这一篇主要讲JVM的垃圾回收机制,涵盖垃圾回收算法和垃圾收集器。JVM垃圾回收基础程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而对于 Java 堆和方法区,我们只有在程序运行期间才能知道

2020-08-01 01:18:58 141

原创 JVM基础

本文主要总结自JavaGuide哥的文章guide哥文章在线地址。有兴趣可以关注guide哥的公众号接下来进入正文JVM运行时数据区域划分:JDK1.8和JDK1.7最大的区别就是元空间取代了方法区,元空间本质上和永久代类似,存储的内容和机制相似,都是对JVM规范中方法区的实现,但是元空间不在虚拟机中,而是在本地内存中。线程私有:程序计数器:记录线程执行到哪个位置:记录当前线程正在执行的那条指令的地址。在线程进行上下文切换时用到,程序计数器是唯一一个不会出现OutMemoryError的区

2020-08-01 01:08:02 102

原创 动态规划——跳台阶爬楼梯问题

跳台阶问题是最简单的动态规划题目*来源:leetcode、剑指offer都有一只青蛙跳到一个n层台阶的顶端,每次可以跳1 或 2 个台阶。你有多少种不同的方法可以跳到台阶顶端?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。3. 1 阶 + 1 阶 + 1 阶4. 1 阶 + 2 阶5. 2 阶 + 1 阶根据题意分析可以知道,

2020-08-01 01:01:05 666

原创 centos7 docker-1.13 开启远程访问

刚刚想要开启docker的远程访问权限,发现网上写的那些博客大多数是旧版本的docker的,对于docker-1.13版本不是很适用,在这里记录一下:### 在 ExecStart 中加入 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \### 然后执行 systemctl daemon-reload 重新加载配置### 执行 systemctl restart docker 重启docker...

2020-06-06 21:52:01 328

原创 Redis(六)—— docker redis 主从模式部署

没事自己搞虚拟机在docker里面部署了主从复制模式,直接show code:虚拟机1 作为master# 拉取redis镜像docker pull redis#创建redis-0容器 作为masterdocker run -d -p 6379:6379 --name redis-0 --network host <images-id> redis-server --requirepass <password># --name redis-0 指定redis.

2020-05-25 01:12:30 348

原创 springboot + spring security + swagger 整合

springboot整合 spring security 和swagger-ui :pom.xml文件中添加相关依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> .

2020-05-21 01:21:42 9114 5

原创 Mybatis insert update 批量插入数据,并对已存在的数据进行更新

产品又改需求,没办法只能加下班再改改。需求大意:向表a中插入一批数据,原有的数据只对字段值进行更新,新增的则执行插入作为一个21世纪的热血青年,当然某问题啊。于是着手准备开干,想了一下没想到啥好办法,又想了一会儿,得到一个方案:在插入数据的时候,我先查一下这条数据是否已经存在,如果已经存在我就 update它,如果不存在我就insert它,easy嘛!准备开始做的时候,发现不对...

2019-07-24 22:46:34 5210

原创 用Navicat运行一个比较大的.sql文件时报错:[Err] 2006 - MySQL server has gone away

用Navicat在本地运行一个比较大的 .sql文件时报错:[Err] 2006 - MySQL server has gone away因为navica本身做了限制所以导致报错。解决方法:工具--&gt;服务器监控--&gt;mysql出现下面页面:选择变量 ,找到max_allowed_packect ,修改它的值即可。...

2019-03-10 21:41:28 17791 6

原创 RabbitMQ--windows下安装

windows安装还是有点麻烦,安装rabbitMQ前需要先安装Erlang,因为RabbitMQ是Erlang语言写的。话不多说,先安装Erlang:http://www.erlang.org/downloads还有rabbitMQ:http://www.rabbitmq.com/install-windows.html我选择的是64位的最新版本,右边可以选择其他版本。安装页...

2019-01-21 22:58:46 112

原创 springBoot入门第一篇——搭建简单项目

大家都在用springboot,从入门开始学习咯。一篇一篇记录自己的学习,希望自己能坚持下去。先从简单的项目搭建开始,SpringBoot的项目搭建非常的简单便捷,不像spring那样需要自己手动配置那么多的依赖。一下是pom.xml 文件,配置 parent后则不需要像spring那样再去配置那么多的东西,springboot会帮我们导入。 &lt;!--添加sprin...

2018-08-19 19:21:31 237

原创 Redis 服务器没有启动导致的错误:java.lang.ClassCastException: [B cannot be cast to java.lang.Long

java.lang.ClassCastException: [B cannot be cast to java.lang.Long at redis.clients.jedis.Connection.getIntegerReply(Connection.java:265) ~[jedis-2.9.0.jar:na] at redis.clients.jedis.BinaryJedis.expi...

2018-04-12 17:30:13 5654

原创 设计模式——代理模式

代理 即替代,它是结构型模式的典型示例。代理模式的类包括:抽象角色(Sbject):它是一个由真实角色实现的接口,并能表征其真实角色的功能。代理角色(Proxy):它维护能够允许代理角色访问真实角色的引用。真实角色(RealSubject):代理角色代表的真实对象。应用场景:主要用于当我们需要一个简单对象来表示复杂对象的情况。如果创建对象的开销很大,那么

2017-10-03 19:40:55 220

原创 java读取Excel —— XSSFWorkbook 找不到该类

做一个Excel表格的读取时导入 org.apache.poi 包后居然提示 XSSFWorkbook找不到:原来是还需要下载一个jar包: poi-ooxml 包   ,之后在引入相关类即可:import org.apache.poi.xssf.usermodel.XSSFWorkbook;写到这里就顺便把读取Excel表格的方法也贴上来:

2017-09-26 22:49:49 14089

原创 深入谈一谈String,StringBuilder,StringBuffer

说来惭愧,上次面试某公司被问到 String 、StringBuilder 、StringBuffer 的区别,竟有些忘记了。只是大概记得String 是不可变的,每次进行字符串的修改实际上是创建了 一个新的对象因此String的效率比较低;StringBuffer 功能跟String类似,但是它的字符串是可以进行更改的,而且是线程安全的;StringBuilder 则是StringB

2017-09-26 15:38:24 262

原创 JVM——垃圾收集(Garbage Collection)

人还是不能太懒,该好好学习好好总结的东西还是得花时间做好。Java自带垃圾回收器,动态的检查哪些对象是已经“死了”需要,哪些还“活着”要继续保留着。Java的所有对象实例都放在堆中,垃圾回收器对堆中的对象进行回收时要先检查哪些对象已经没用可以回收,也就是判断一个对象是否“死了”。判断一个对象是否死了:1.引用计数法:给对象增加一个计数器,当对象被引用时计数器

2017-09-18 21:57:08 519

原创 面试记录

记一下自己面试遇到的基础知识,很多都忘了,赶紧写下来。Java有哪些集合框架?List、set、map等,有什么特点,哪些是线程安全的为什么是线程安全的。哪些集合是可以排序的?说了一个TreeSet,追问treeSet的实现原理。集合框架这里问了很多,基本把所有集合特性都问了。常见的排序算法:冒泡、选择、插入、希尔、堆排序、归并、快速排序都说了一遍,包括时间复杂度空

2017-09-18 21:12:49 365

原创 找出数组中第 K 大的数

给定一个数组,找出数组中第 K 大的一个数,解析再代码里 package com.hunter.test;import java.util.Arrays; import java.util.Scanner;/** * 给定一个整形数组,求数组里面第 m 大的数 * 这里假设 m = 3 */ public class findTheNum {private final stat

2017-09-14 00:05:58 649

原创 Java 聊天室的简单实现原理

先贴一个简单的思路,后续有时间再把代码写好贴上来。简单的JAVA聊天室:一般是使用Socket基于 C/S 架构,其设计的过程如下:1)服务器通过某个端口监听是否有客户端发送Socket链接请求。2)客户端向服务器端发送一个Socket链接请求。3)服务器端调用accept()方法接收客户端Scoket 并建立链接。4)通过Socket对象的getInputStream /

2017-09-09 15:57:40 9046

原创 数据库查询优化问题

原先数据库没有好好学习,感觉一直是似懂非懂的状态,很多原理也不懂,今天抽时间查阅一些资料自己也总结了一些。本文数据库索引原理部分主要参考博文:http://www.cnblogs.com/aspwebchh/p/6652855.html ,是一片很优秀的文章,值得一看。不说废话直接开撸:关系数据库管理系统查询处理可分为四个阶段:查询分析、查询检查、查询优化和查询执行。查询分析:对查

2017-09-09 09:38:21 2932 1

原创 java面试基础知识(二)

1.finally 块中的代码:finally块中的代码一定会得到执行。不管是正常的 try 执行还是 发生异常执行 catch,最后都会执行 finally 块内的语句。finally 块的语句一般用于关闭一些链接,比如 I/O 、数据库链接 、HTTP 链接等。如果 try 块内有return 语句,而 finally 块内也有 return 语句,那么 finally 块内的 retur

2017-08-25 00:05:34 183

mybatis最新jar包

mybatis目前最新的jar包,也可以上去GitHub上下载 https://github.com/mybatis/mybatis-3

2017-08-07

空空如也

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

TA关注的人

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