自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 资源 (4)
  • 收藏
  • 关注

原创 jvm学习图片

一.Java代码运行图:二.类从加载到使用.三.四. 内存区域的全部流程在这里插入图片描述

2021-05-13 09:35:29 233

原创 springboot源码分析上传的图片

1.以前的Web系统运行原理

2021-03-25 20:38:17 234

原创 ArrayList,LinkedList源码分析

1.ArrayList底层原理:原理:基于底数组实现的2.ArrayList源码分析:2.1 add方法(在尾部添加元素):public boolean add(E e) {//构造函数时候size已经初始化,size初始化=10,这里这个方法作用:确保elementData的容量可以放入新加的一个元素 ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] =

2021-03-09 16:03:25 277

原创 git解决error: The following untracked working tree files would be overwritten by checkout

解决方式:进入本地版本仓库目录下执行以下命令: git clean -d -fx 意义:删除 一些 没有 git add 的 文件 参数的意义:-n 显示将要删除的文件和目录; -x -----删除忽略文件已经对git来说不识别的文件 -d -----删除未被添加到git的路径中的文件 -f -----强制运行...

2020-12-22 11:23:26 1389

原创 synchronized,voliate-详解

一.synchronized底层原理:synchronized关键字,在底层编译后的jvm指令中,会有monitorenter(枷锁)和monitorexit(释放锁)两个指令.monitorenter指令执行的时候会干什么呢?每个对象都有一个关联的monitor,比如一个对象实例就有一个monitor,一个类的Class对象也有一个monitor,如果要对这个对象加锁,那么必须获取这个对象关联的monitor的lock锁.他里面的原理和思路大概是这样的,monitor里面有一个计数器,从0开始的。

2020-08-05 09:55:49 1383

原创 基于git log查看以及深入图解Git提交历史

一.git log 相关命令:git log 查看提交的日志git reset --hard d324644,指定一个commit的hash值,回退到很老的版本git reflog 可以查看所有分支的所有操作记录(包括提交、回退、已删除的提交操作记录等)...

2020-08-03 19:54:46 472

原创 git add命令和Git commit执行原理

一.git本地仓库结构工作区(working directory / working tree存区(staging area)版本库(git directory / repository)git本地仓库结构图:

2020-08-03 15:25:17 1274

原创 Git .gitignore文件没有起作用

一. git规则.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的二. 解决办法git rm -r --cached .git add .git commit -m ‘update .gitignore’注意前两条命令后面的点(.)我们需要使用rm命令清除一下相关的缓存内容.这样文件将以未追踪的形式出现.然后再重新添加提交一下,.gitignore文件里的规则就可以起作用了....

2020-08-03 15:05:19 613

原创 springboot启动原理分析

List item

2020-07-09 15:07:15 183

原创 springboot自动装备原理分析

List item

2020-07-09 15:06:12 391

原创 spring问题总结

一.Spring中bean的循环依赖怎么解决什么是循环依赖1 其实就是在进行getBean的时候,A对象中去依赖B对象,而B对象又依赖C对象,但是对象C又去依赖A对象,结果就造成A、B、C三个对象都不能完成实例化,出现了循环依赖。就会出现死循环,最终导致内存溢出的错误。如何去解决Spring的循环依赖:二.Spring中bean的加载过程:三.Spring中bean的生命周期四.Spring中的IOC核心思想和DI五.Spring中的几种事务和隔离级别六.spring容器的bean

2020-07-06 14:59:31 187

原创 spring后置处理器-BeanFactoryPostProcessor

package org.springframework.beans.factory.config;import org.springframework.beans.BeansException;/** * spring的扩展点之一 * 实现该接口,可以在spring的bean创建之前修改bean的定义属性。 * spring允许BeanFactoryPostProcessor在容器实例化任何其它bean之前读取配置元数据, * 并可以根据需要进行修改,例如可以把bean的scope从singl

2020-06-23 14:48:41 264

原创 spring源码-后置处理器BeanPostProcessor接口

package org.springframework.beans.factory.config;import org.springframework.beans.BeansException;import org.springframework.lang.Nullable;/** * BeanPostProcessor是Spring框架的提供的一个扩展类点(不止一个) * 通过实现BeanPostProcessor接口,程序员就可插手bean实例化的过程,从而减轻了beanFactory的.

2020-06-22 21:40:40 241

原创 SpringCloud Feign的使用

一. 什么是FeignFeign是一个声明式的Web Service客户端,使用Feign只需要创建一个接口加上对应的注解,比如:@FeignClient注解。SpringCloud Open Feign对Feign进行增强支持Spring MVC注解。二. Feign的特性可插拔的注解支持,包括Feign注解和JAX-RS注解;支持可插拔的HTTP编码器和解码器;支持Hystrix和它的Fallback;支持Ribbon的负载均衡;支持HTTP请求和响应的压缩。三. Feign主要属性

2020-06-05 23:23:30 253

转载 ThreadLocal基本知识点分析

一. ThreadLocal是什么?ThreadLocal是一个将在多线程中为每一个线程创建单独的变量副本的类; 当使用ThreadLocal来维护变量时, ThreadLocal会为每个线程创建单独的变量副本, 避免因多线程操作共享变量而导致的数据不一致的情况。二. ThreadLocal使用方法1、将需要被多线程访问的属性使用ThreadLocal变量来定义;import java.sql.Connection;import java.sql.DriverManager;import jav

2020-06-04 11:03:21 174

原创 AQS--组件

一. 什么是AQS在AQS内部会保存一个状态变量state,通过CAS修改该变量的值,修改成功的线程表示获取到该锁,没有修改成功,或者发现状态state已经是加锁状态,则通过一个Waiter对象封装线程,添加到等待队列中,并挂起等待被唤醒。AQS维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,ReentrantLock)和Share(共享,多个线程可

2020-06-01 18:40:04 809

原创 BIO、NIO、AIO--基础

一.BIO:BIO是最传统的网络通信模型,同步阻塞式IO通信结构图:通信流程简述:服务端创建一个ServerSocket,然后客户端用一个Socket去连接那个ServerSocket,然后ServerSocket接收到一个Socket的连接请求就创建一个Socket和一个线程去跟那个Socket进行通信,然后客户端和服务端的socket,就进行同步阻塞式的通信,客户端socket发送一个请求,服务端socket进行处理后返回响应,响应必须是等处理完后才会返回,在这之前啥事儿也干不了,这可不就是

2020-05-25 09:40:30 174

原创 mysql-事物

一.Mysql事物特性名称定义Atomic:原子性一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚Consistency:一致性数据库总数从一个一致性的状态转换到另一个一致性的状态隔离性(isolation)一个事务所做的修改在最终提交以前,对其他事务是不可见的持久性(durability)一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失二.事物的隔离级别

2020-05-15 17:23:57 131

原创 mysql-索引

一.两种储存引擎:myisam不支持事务,不支持外键约束,索引文件和数据文件分开,这样在内存里可以缓存更多的索引,对查询的性能会更好,适用于那种少量的插入,大量查询的场景innodbmysql 5.5之后的默认存储引擎,主要特点就是支持事务,走聚簇索引,强制要求有主键,支持外键约束,高并发、大数据量、高可用等相关成熟的数据库架构,分库分表、读写分离、主备切换二. B+树和B-树结构图B-树结构图:B+树结构图:三. 什么是索引:mysql的索引说白了就是用一个数据结构组织

2020-05-15 09:55:53 154

原创 mysql储存引擎,索引,事物,锁

一.两种储存引擎:myisam不支持事务,不支持外键约束,索引文件和数据文件分开,这样在内存里可以缓存更多的索引,对查询的性能会更好,适用于那种少量的插入,大量查询的场景innodbmysql 5.5之后的默认存储引擎,主要特点就是支持事务,走聚簇索引,强制要求有主键,支持外键约束,高并发、大数据量、高可用等相关成熟的数据库架构,分库分表、读写分离、主备切换二. B+树和B-树结构图...

2020-05-14 21:01:28 295

转载 JDK1.8 HashMap分析

一.HashMap概述:jdk1.7HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的节点都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低,将会花费O(n)的查找时间.jdk1.8HashMap采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间jdk1.7 HashMap结构图:左边部分即代表哈希表,也称为哈希数组,数组的每个元素都是一个单链表的头节点,链表是用来解决

2020-05-12 09:36:44 217

转载 ConcurrentHashMap详解

一.jdk1.8 和jdk1.7数据结构最对比:

2020-05-11 15:28:16 196

原创 CAS(compare and set)原理

一.CAS原理讲解图

2020-05-11 14:40:32 370

原创 线程安全-有序性

List item 看书在写

2020-05-09 16:19:08 158

原创 线程安全-可见性

一.jvm关于synchronzied的两条规定线程解锁前,必须把共享变量的最新刷到主内存线程枷锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从住内存中重新读取最新的值(枷锁和解锁是同一把锁)二.volatile可见性:通过加入内存屏障和禁止重排序优化来实现可见性的对volatile变量写操作时,会在写操作后加入一条store屏障指令,将本地内存的共享变量刷新到主内存中对volatile变量读操作时,会在读操作前加入一条load屏障指令,从主内存中读取共享变量总结,对vo

2020-05-09 16:04:16 152

原创 JAVA内存模型

一.java内存模型-同步的八种操作:lock(锁定):作用于主内存的变量,把一个变量标记为一条线程独占状态unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定read(读取):作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用load(载入):作用于工作内存的变量,它把read...

2020-04-29 22:19:08 121

原创 zuul-封装灰度发布,动态路由

一.灰度发布准备一个数据库和一个表(也可以用Apollo配置中心、Redis、ZooKeeper,其实都可以),放一个灰度发布启用表id service_id path enable_gray_releaseCREATE TABLE `gray_release_config` ( `id` int(11) NOT NULL AUTO_INCREMENT, `service_...

2020-04-29 15:46:00 421

原创 网关

网关的和新功能动态路由:新开发某个服务,动态把请求路径和服务的映射关系热加载到网关里去;服务增减机器,网关自动热感知灰度发布授权认证性能监控:每个API接口的耗时、成功率、QPS系统日志数据缓存限流熔断二.几种技术选型大厂:BAT、京东、美团、滴滴之类的,自研网关,都是基于Netty等技术自研网关;Nginx + Lua(Tengine)来做,封装网关的功能中小型公司:Sp...

2020-04-29 15:07:36 246

原创 Eureka-服务发现过慢问题

一.优化配置参数在服务注册和客户端配置的参数优化eureka.server.responseCacheUpdateIntervalMs = 3000 eureka.client.registryFetchIntervalSeconds = 30000eureka.client.leaseRenewalIntervalInSeconds = 30eureka.server.evictio...

2020-04-29 14:39:54 1746

原创 Euraka-服务注册和发现原理

Eureka服务注册原理图:服务注册和发现的过程服务b注册到Eureka注册中心,注册成功,定时发送心跳,确保自己是成功连接把注册的服务储存2.1 服务注册中心,同时开启一个线程,检查注册服务是否定时发送心跳过来2.2 把注册到服务中心的服务(b服务)同步到ResdWrite缓存中去消费服务(服务A)定时(每个30s拉取)在服务注册中心拉取服务注册列表3.1 服务A先拉取Read...

2020-04-29 11:04:58 2267

原创 Spring Cloud架构原理

架构原理图一.Spring Cloud主要的中间件Eureka:服务注册中心Feign:服务调用Ribbon:负载均衡Zuul/Spring Cloud Gatway:网关Hystrix、链路追踪、stream二.网关作用:灰度发布、统一熔断、统一降级、统一缓存、统一限流、统一授权认证...

2020-04-29 09:58:22 260

原创 mysql读写分离

一.如何实现 MySQL 的读写分离其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去。二.MySQL 主从复制原理的是啥主库将变更写入 binlog 日志,然后从库连接到主库之后,从库有一个 IO 线程,将主库的 binlog 日志拷贝到自己本地,写入一个 relay 中继日志中。接着从库中有一个 SQL 线...

2020-04-28 09:44:27 166

原创 分库分表之后-全局唯一ID

其实这是分库分表之后你必然要面对的一个问题,需要一个全局唯一的 id 来支持一.全局唯一id–基于数据库的实现方案1.1 数据库自增 id这个就是说你的系统里每次得到一个 id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个 id。拿到这个 id 之后再往对应的分库分表里去写入。这个方案的好处就是方便简单,谁都会用;缺点就是单库生成自增 id,要是高并...

2020-04-28 09:28:18 959

原创 分布式-分库分表

一.分表分表:就是把一个表的数据放到多个表中,然后查询的时候你就查一个表。比如按照用户 id 来分表,将一个用户的数据就放在一个表中。然后操作的时候你对一个用户就操作那个表就好了。这样可以控制每个表的数据量在可控的范围内,比如每个表就固定在 200 万以内。二.分库分库是啥意思?就是你一个库一般我们经验而言,最多支撑到并发 2000,一定要扩容了,而且一个健康的单库并发值你最好保持在每秒 1...

2020-04-28 08:31:09 588

原创 分布式-session

一.介绍session:session 是啥?浏览器有个 cookie,在一段时间内这个 cookie 都存在,然后每次发请求过来都带上一个特殊的 jsessionid cookie,就根据这个东西,在服务端可以维护一个对应的 session 域,里面可以放点数据。一般的话只要你没关掉浏览器,cookie 还在,那么对应的那个 session 就在,但是如果 cookie 没了,session...

2020-04-26 16:42:01 1653

原创 分布式事物几种方案讲解

一.分布式事务的实现主要有以下 5 种方案XA 方案TCC 方案(*)本地消息表可靠消息最终一致性方案(**)最大努力通知方案二.两阶段提交方案/XA方案所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个...

2020-04-26 16:18:14 215

原创 zookeeper常用的场景

一.zookeeper 的使用场景如下分布式协调分布式锁元数据/配置信息管理HA高可用性二.分布式协调这个其实是 zookeeper 很经典的一个用法,简单来说,就好比,你 A 系统发送个请求到 mq,然后 B 系统消息消费之后处理了。那 A 系统如何知道 B 系统的处理结果?用 zookeeper 就可以实现分布式系统之间的协调工作。A 系统发送请求之后可以在 zookeeper...

2020-04-26 14:36:06 373

原创 redis 的并发竞争问题

简介:出现并发竞争的情况就是多客户端同时并发写一个 key,可能本来应该先到的数据后到了,导致数据版本错了;或者是多客户端同时获取一个 key,修改值之后再写回去,只要顺序错了,数据就错了。某个时刻,多个系统实例都去更新某个 key。可以基于 zookeeper 实现分布式锁。每个系统通过 zookeeper 获取分布式锁,确保同一时间,只能有一个系统实例在操作某个 key,别人都不允许读和写...

2020-04-26 10:38:27 601

原创 redis-缓存和数据库写入不一致问题

一.解决不一致两种方法:CAP理论(Cache Aside Pattern):缓存+数据库读写的模式1.读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。2.更新的时候,先更新数据库,然后再删除缓存。读请求和写请求串行化,串到一个内存队列里去 串行化可以保证一定不会出现不一致的情况,但是它也会导致系统的吞吐量大幅度降低,用比正常情况下多几倍的机...

2020-04-26 10:12:56 1207

原创 redis雪崩,穿透

一.缓存雪崩缓存雪崩:对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。此时,如果没有采用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。二.缓存雪崩的事前事中事后的解决...

2020-04-26 08:42:25 133

mysql5.1中文手册

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。这是mysql5的中文参考手册,感觉翻译挺好的,特意分享给想学习入门的mysql,希望能对想学习的人有多帮助.

2017-09-22

maven创建项目

使用maven创建项目

2017-02-23

空空如也

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

TA关注的人

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