自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Jak的博客

成长之路

  • 博客(601)
  • 资源 (5)
  • 收藏
  • 关注

原创 Typora更换主题背景

一、官网下载主题地址:Typora Theme二、typora设置主题我们将下载好的压缩包解压,将压缩包中的.css文件和 css 样式同名的文件夹拷贝到其中打开的文件夹中三、重启 typora 并选择新主题参考博客...

2021-09-20 13:15:07 34

原创 SpringBoot整合阿里云对象存储OSS

一、阿里云OSS购买和配置参考资料阿里云OSS操作官方文档阿里云OSS购买和配置,阿里云oss购买和配置,也可以参考阿里云OSS官方文档。二、SpringBoot整合OSS2.1 pom <dependencies> <!-- commons-io --> <dependency> <groupId>commons-io</groupId> .

2021-09-17 00:08:54 103

原创 Java之IO模型

一、同步&异步和阻塞&非阻塞同步、异步:针对请求。阻塞、非阻塞:针对客户端。在一个网络请求中,客户端会发一个请求到服务端。1、客户端发了请求后,就一直等着服务端响应。客户端:阻塞。请求:同步。2、客户端发了请求后,就去干别的事情了。时不时的过来检查服务端是否给出了响应。客户端:非阻塞。请求:同步。3、换成异步请求。客户端发了请求后,就坐在椅子上,等着服务端返回响应。客户端:阻塞。请求异步。4、客户端发了请求后,就去干别的事情了。等到服务端给出响应后,再过来处理业

2021-09-16 22:33:05 21

原创 Spring如何处理循环依赖问题

循环依赖:多个对象之间存在循环的引用关系,在初始化过程当中,就会出现"先有蛋还是先有鸡"的问题视频教程

2021-09-16 00:11:55 25

原创 浅析微服务的拆分

一、怎么拆分微服务?拆分微服务的时候,为了尽量保证微服务的稳定,会有一些基本的准则:1、微服务之间尽量不要有业务交叉。2、微服务之间只能通过接口进行服务调用,而不能绕过接口直接访问对方的数据。3、高内聚,低耦合。高内聚低耦合,是一种从上而下指导微服务设计的方法。实现高内聚低耦合的工具主要有同步的接口调用(Feign) 和异步的事件驱动(MQ,ApplicationEventPublisher\EvenetListener) 两种方式。...

2021-09-15 09:23:05 28

原创 Tcp、Http与Socket之间的联系

一、概要HTTP 协议:超文本传输协议,对应于应用层,用于如何封装数据。TCP/UDP协议:传输控制协议,对应于传输层,主要解决数据在网络中的传输。IP 协议:对应于网络层,同样解决数据在网络中的传输。TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。Socket(套接字)是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,才能使用TCP/IP协议。传输数据的时候只使用 TC.

2021-09-12 18:41:09 70

原创 Java线程池源码分析

线程,程序执行流的最小执行单位,是行程中的实际运作单位,经常容易和进程这个概念混淆。那么,线程和进程究竟有什么区别呢?首先,进程是一个动态的过程,是一个活动的实体。简单来说,一个应用程序的运行就可以被看做是一个进程,而线程,是运行中的实际的任务执行者。可以说,进程中包含了多个可以同时运行的线程。ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。ThreadPoolExecutor.DiscardPolicy:也是丢.

2021-09-12 01:16:34 30

原创 深入理解BIO/NIO/AIO

一、Java的I/O演进之路1.1I/O 模型基本说明I/O 模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java 共支持 3 种网络编程的/IO 模型:BIO、NIO、AIO实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型1.2 I/O模型1.2.1 Java BIO同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这..

2021-09-11 15:17:44 199 1

原创 计算机网络基础知识

一、网络层次划分为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了"开放系统互联参考模型",即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport La

2021-09-11 12:03:54 18

原创 TCP三次握手与四次挥手

一、TCP报文格式TCP(Transmission Control Protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层协议TCP报文格式二、 三次握手

2021-09-10 09:30:11 23

原创 MySQL之Buffer Pool 与 Change buffer

Mysql中的change Buffer

2021-09-01 09:33:09 28

原创 Java知识体系总结

一、Java基础总结二、Java集合容器总结三、Java异常总结四、Java并发编程总结五、Java虚拟机总结六、Spring总结七、Spring MVC总结八、Spring Boot总结九、Spring Cloud总结十、MyBatis总结十一、MySQL总结十二、Redis总结十三、RabbitMQ总结...

2021-08-30 00:12:18 88

原创 ConcurrentHashMap实现原理及源码分析

一、ConcurrentHashMap跟HashMap,HashTable的对比1. HashMap不是线程安全:在并发环境下,可能会形成环状链表(扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是非常危险的2. HashTable是线程安全的:HashTable和HashMap的实现原理几乎一样,差别:1.HashTable不允许key和value为null;2.HashTable是线程安全的。

2021-08-29 20:30:02 668 3

原创 Redis缓存雪崩与Hash一致性算法

一、Redis的应用二、Redis使用中的问题三、Redis集群中的hash一致性算法原理视频教程、参考博客

2021-08-28 15:30:51 39

原创 布隆过滤器解决Redis缓存穿透

一、Redis缓存穿透缓存穿透:恶意查询一个数据库中不存在的数据,去缓存层中没有命中数据,进而去mysql中查询数据。缓存null值,可能会导致Redis中缓存一堆null值。二、过滤器解决缓存穿透使用过滤器解决,把不存在的key的请求,拦截住。问题,key都缓存到内存中,导致内存紧张。三、布隆过滤器解决缓存穿透3.1 什么情况下需要布隆过滤器先来看几个比较常见的例子字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经.

2021-08-28 11:37:39 33

原创 布隆过滤器原理和实现

一、布隆过滤器介绍巴顿.布隆于一九七零年提出一个很长的二进制向量 (位数组)一系列随机函数 (哈希)空间效率和查询效率高有一定的误判率(哈希表是精确匹配)二、布隆过滤器原理布隆过滤器(Bloom Filter)的核心实现是一个超大的位数组和几个哈希函数。假设位数组的长度为m,哈希函数的个数为k以上图为例,具体的操作流程:假设集合里面有3个元素{x, y, z},哈希函数的个数为3。首先将位数组进行初始化,将里面每个位都设置位0。对于集合里面的每一

2021-08-28 11:24:01 41

原创 Snowflake 算法的思想分析

snowflake 算法,是 twitter 开源的分布式 id ⽣成算法。其核⼼思想就是:使⽤⼀个 64 bit 的 long 型的数字作为全局唯⼀ id,这 64 个 bit 中,其中 1 个bit 是不⽤的,然后⽤其中的 41 bit 作为毫秒数,⽤ 10 bit 作为⼯作机器 id,12 bit 作为序列号。给⼤家举个例⼦吧,⽐如下⾯那个 64 bit 的 long 型数字,⼤家看看上⾯第⼀个部分,是 1 个 bit:0,这个是⽆意义的上⾯第⼆个部分是 41 个 b...

2021-08-26 23:46:44 33

原创 Java定制化线程池

一、ThreadPoolExecutor.executepublic class CustomThreadPool { public static ThreadPoolExecutor getThreadPoolExecutor() { AtomicInteger threadNumber = new AtomicInteger(); return new ThreadPoolExecutor(4, 8,

2021-08-25 18:16:58 33

原创 jstat常用命令

一、垃圾回收统计# 查看11552进程内存统计情况jstat -gc 11552# 每隔1s打印一次,统计情况jstat -gc 11552 1000# 每隔1s打印一次,打印10次jstat -gc 11552 1000 10 S0C:第一个幸存区的大小S1C:第二个幸存区的大小S0U:第一个幸存区的使用大小S1U:第二个幸存区的使用大小EC:伊甸园区的大小EU:伊甸园区的使用大小OC:老年代大小OU:老年代使用大小MC:方法区大小MU

2021-08-24 10:46:40 16

原创 Sharding-Proxy 实现分库分表

一、简介Sharding-Proxy是ShardingSphere的第二个产品。 它定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。目前先提供MySQL/PostgreSQL版本,它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,对DBA更加友好。向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。

2021-08-23 01:16:22 36

原创 Sharding-JDBC 实现读写分离

一、读写分离概念1.1 读写分离原理二、MySQL配置读写分离第一步 创建两个MySQL数据库服务,并且启动两个MySQL服务2.1 复制之前MySQL目录2.2 修改复制之后配置文件1. 修改端口号,文件路径2. 需要把数据文件目录再复制一份2.3把复制修改之后从数据库在windows安装服务使用命令:mysqld install mysqls1 --defaults-file="D:\studySoftware\mysql...

2021-08-22 22:26:14 31

原创 Sharding-JDBC 实现水平切分与垂直切分

一、简介1、是轻量级的java框架,是增强版的JDBC驱动2、Sharding-JDBC(1)主要目的是:简化对分库分表之后数据相关操作Sharding-JDBC是当当网研发的开源分布式数据库中间件,从 3.0 开始Sharding-JDBC被包含在 Sharding-Sphere中,之后该项目进入Apache孵化器,4.0版本之后的版本为Apache版本。Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。 它定位为轻

2021-08-22 17:55:18 51

原创 分库分表解析

一、什么是ShardingSphereShardingSphere1、一套开源的分布式数据库中间件解决方案2、有三个产品:Sharding-JDBC和Sharding-Proxy3、定位为关系型数据库中间件,合理在分布式环境下使用关系型数据库操作二、什么是分库分表数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而

2021-08-22 17:20:41 29

原创 DDD领域设计实战

一、什么是DDD二、系统“老化"是谁的锅三、你和大神的代码差距到底在哪3.1 传统代码的问题3.2 动手改造第一步:抽象数据存储层3.3 动手改造第二步:抽象第三方服务...

2021-08-22 12:07:33 36

原创 领域驱动设计DDD

什么是DDD软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前,通常需要进行大量的业务知识梳理,而后到达软件设计的层面,最后才是开发。而在业务知识梳理的过程中,我们必然会形成某个领域知识,根据领域知识来一步步驱动软件设计,就是领域驱动设计的基本概念。听起来这和传统意义的软件开发没啥区别,只是换了点新鲜的名词而已,其实不然。软件开发 VS DDD一般软件设计或者说软件开发分两种:瀑布式,敏捷式。前者一般是项目经理经过大量的业务分析后,会基于现有需

2021-08-21 00:21:04 53

原创 Mysql三大日志redo log、undolog、binlog

日志系统主要有redo log(重做日志)和binlog(归档日志)。redo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志, 两者都是记录了某些操作的日志(不是所有)自然有些重复(但两者记录的格式不同)。参考博客、参考博客、参考博客...

2021-08-15 19:36:40 31

原创 Mysql binlog日志三种模式

在认识binlog日志三种模式前,先了解一下解析binlog日志的命令工mysqlbinlog。mysqlbinlog工具的作用是解析mysql的二进制binlog日志内容,把二进制日志解析成可以在MySQL数据库里执行的SQL语句。binlog日志原始数据是以二进制形式存在的,需要使用mysqlbinlog工具转换成SQL语句形式。mysql的binlog日志作用是用来记录mysql内部增删改等对mysql数据库有更新内容的记录(对数据库进行改动的操作),对数据库查询的语句如show,s.

2021-08-15 19:11:11 18

原创 IDEA Maven依赖下载不下来

<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> ...

2021-08-04 10:52:32 48

原创 分布式事务解决方案之TCC

一、什么是TCC事务TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的操作即回滚操作。TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所有分支事务的Cancel操作,若try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中Confirm/

2021-08-03 23:27:49 67

原创 分布式事务解决方案之2PC

一、什么是2PC2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。举例:张三和李四好久不见,老友约起聚餐,饭店老板要求先买单,才能出票。这时张三和李四分别抱怨近况不如意,囊中羞涩,都不愿意请客,这时只能AA。只有张三和李四都付款,老板才能出票安排就餐。但由于张三和李四都是铁公鸡,形成了尴尬的一幕:准备阶段:老板要求张三付款,张三付款。老板要求李四付款,李四付款。

2021-08-03 09:13:20 59

原创 分布式事务基础理论

一、CAP理论通过前面的学习,我们了解到了分布式事务的基础概念。与本地事务不同的是,分布式系统之所以叫分布式,是因为提供服务的各个节点分布在不同机器上,相互之间通过网络交互。不能因为有一点网络问题就导致整个系统无法提供服务,网络因素成为了分布式事务的考量标准之一。因此,分布式事务需要更进一步的理论支持,接下来,我们先来学习一下分布式事务的CAP理论。在讲解分布式事务控制解决方案之前需要先学习一些基础理论,通过理论知识指导我们确定分布式事务控制的目标,从而帮助我们理解每个解决方案。

2021-08-02 22:52:20 40

原创 本地事务与分布式事务

一、什么是事务什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是一个事务的例子,交钱和交货必须全部成功,事务才算成功,任一个活动失败,事务将撤销所有已成功的活动。明白上述例子,再来看事务的定义:事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。二、 本地事务在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库通常

2021-08-02 21:33:45 53

原创 深入学习并发编程中的Synchronized

一、并发编程中的三个问题二、Java内存模型三、Synchronized保证三大特性四、Synchronized的特性五、Synchronized原理六、CAS原理七、JDK6 Synchronized优化参考博客、视频教程

2021-08-02 20:47:19 20

原创 Synchronized锁升级过程

一、Synchronized的锁升级过程高效并发是从JDK 5到JDK 6的一个重要改进,HotSpot虛拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,包括偏向锁( Biased Locking )、轻量级锁( Lightweight Locking )和如适应性自旋(Adaptive Spinning)、锁消除( Lock Elimination)、锁粗化( Lock Coarsening )等等,这些技术都是为了在线程之间更高效地共享数据,以及解决竞争问题,从而提高程序的执

2021-08-02 01:43:47 96

原创 CAS原理

一、CAS1.1 CAS概述和作用CAS的全称是: Compare And Swap(比较相同再交换)。是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。CAS的作用:CAS可以将比较和交换转换为原子操作,这个原子操作直接由CPU保证。CAS可以保证共享变量赋值时的原子操作。CAS操作依赖3个值:内存中的值V,旧的预估值X,要修改的新值B,如果旧的预估值X等于内存中的值V,就将新的值B保存到内存中。1.2CAS和volatile实现无锁并发二、CAS..

2021-08-02 00:52:22 15

原创 Synchronized原理

一、Javap反汇编1.1 反汇编通过javap反汇编学习synchronized的原理我们编写一个简单的synchronized代码,如下:public class Demo05_monitor { private static Object obj = new Object(); public static void main(String[] args) { synchronized (obj) { System.out

2021-08-01 18:21:12 86 2

原创 Synchronized的特性

一、可重入特性1.1 什么是可重入一个线程可以多次执行synchronized,重复获取同一把锁。1.2. 可重入原理synchronized的锁对象中有一个计数器(recursions变量)会记录线程获得几次锁.1.3 可重入的好处1. 可以避免死锁2. 可以让我们更好的来封装代码总结:synchronized是可重入锁,内部锁对象中会有一个计数器记录线程获取几次锁啦,在执行完同步代码块时,计数器的数量会-1,直到计数器的数量为0,就释放这个锁。..

2021-08-01 17:22:27 14

原创 Synchronized保证三大特性

synchronized能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。synchronized (锁对象) { // 受保护资源}一、synchronized保证原子性案例演示:5个线程各执行1000次 i++;对number++;增加同步代码块后,保证同一时间只有一个线程操作number++;。就不会出现安全问题。总结:synchronized保证原子性的原理,synchronized保证只有一个线程拿到锁,能够进入同步代码...

2021-08-01 15:48:59 52

原创 Java内存模型

一、计算机结构1.1 计算机结构简介冯诺依曼,提出计算机由五大组成部分,输入设备,输出设备,存储器,控制器,运算器。1.2 CPU中央处理器,是计算机的控制和运算的核心,我们的程序最终都会变成指令让CPU去执行,处理程序中的数据。1.3 内存我们的程序都是在内存中运行的,内存会保存程序运行时的数据,供CPU处理。1.4 缓存CPU的运算速度和内存的访问速度相差比较大。这就导致CPU每次操作内存都要耗费很多等待时间。内存的读写速度成为了计算...

2021-08-01 13:24:17 70 1

原创 并发编程中的三个问题

一、可见性可见性(Visibility):是指一个线程对共享变量进行修改,另一个线程立即得到修改后的最新值。案例演示:一个线程根据boolean类型的标记flag, while循环,另一个线程改变这个flag变量的值,另一个线程并不会停止循环。/** * 目标:演示可见性问题 * 1.创建一个共享变量 * 2.创建一条线程不断读取共享变量 * 3.创建一条线程修改共享变量 */public class Test01Visibility { // 1. 创建一个共享变

2021-08-01 12:24:27 69 1

WGAN-GPppt详解

生成式对抗网络,搜集整理了网上关于GAN ,WGAN,汇总详解了WGAN-GP

2018-07-10

jak_rabbit.zip

rabbitmq,延迟队列,死信队列,保证消息可靠性,不丢失

2021-06-28

spring5学习笔记

spring5学习笔记.

2020-11-23

Redis学习笔记-包括周阳和狂神说

Redis学习笔记-包括周阳和狂神说

2021-03-05

SpringCloud 第二季.mmap

springCloud学习脑图,各个组件配置,讲解步骤,https://blog.csdn.net/qq_38826019/article/details/107135798

2020-07-05

空空如也

空空如也

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

TA关注的人 TA的粉丝

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