摘要:
一、锁分类 MySQL锁主要分为3大类: 表级锁:存储引擎为Myisam。锁住整个表,特点是开销小,加锁快,锁定力度大,发生锁冲突的概率最高,并发度最低。 页级锁:存储引擎为BDB。锁住某一页的数据(16kb左右),特点:开销和枷锁时间介于表级和行级之间;会出现死锁,锁定力度介于表锁和行锁之间,并发 阅读全文
posted @ 2022-04-25 18:47
夏尔_717
阅读(872)
评论(0)
推荐(0)
摘要:
一、自定义函数 自定义函数(user-defined function简称UDF)是一种对MySQL扩展的途径,其用法和内置函数相同。 自定义函数的两个必要条件: 参数 返回值(必须有)。函数可以返回任意类型的值。 1.1 创建 DELIMITER $$ --将语句的结束符号从分号;临时改为两个$$ 阅读全文
posted @ 2022-04-25 18:37
夏尔_717
阅读(843)
评论(0)
推荐(0)
摘要:
什么是Seata AT模式 AT模式是Seata主推的分布式事务解决方案,最早来源于阿里中间件团队发布的TXC服务,后来成功上云改名GTS。Seata官方文档中有关于AT模式的详细介绍——AT Mode[1],它使得应用代码可以像使用本地事务一样使用分布式事务,完全屏蔽了底层细节,它和笔者之前介绍过 阅读全文
posted @ 2022-04-25 18:32
夏尔_717
阅读(580)
评论(0)
推荐(0)
摘要:
一、概述 在学习ConcurrentSkipListMap之前,我们需要来了解一种随机化的数据结构:跳跃表(SkipList)。 ConcurrentSkipListMap是一个基于SkipList实现的线程安全的有序存储的Map,默认情况下根据key的自然顺序进行排序,或者根据在Map进行创建时提 阅读全文
posted @ 2022-04-25 17:50
夏尔_717
阅读(157)
评论(0)
推荐(0)
摘要:
一、简介和性能 G1的目标是在可控的停顿时间内完成垃圾回收,所以进行了分区设计,在回收时采用部分内存回收(在YGC时会回收所有新生代分区,在混合回收时会回收所有的新生代分区和部分老生代分区),支持的内存也可以达到几十个GB或者上百个GB。为了进行部分回收,G1实现了RSet管理对象的引用关系。基于G 阅读全文
posted @ 2022-04-25 17:40
夏尔_717
阅读(680)
评论(0)
推荐(0)
摘要:
虽然目前大部分系统使用的是JDK8,使用的垃圾回收器也大概率为G1或者更古老的垃圾回收器,但是截止到目前为止,JDK已经更新到JDK16了,垃圾回收器也几乎在每一次迭代中被更新,目前最前沿的垃圾回收器为Shenandoah和ZGC,这两款垃圾回收器都是以低延时为主要目的。 一、概述 Shenando 阅读全文
posted @ 2022-04-25 17:38
夏尔_717
阅读(790)
评论(0)
推荐(0)
摘要:
一、概述 G1(Garbage First)垃圾回收器是在Java7 update 4之后引入的一个新的垃圾回收器。HotSpot为解决CMS算法产生空间碎片和其它一系列的问题缺陷,而提供了另外一种垃圾回收策略。G1是一个分代的,增量的,并行与并发的标记-复制垃圾回收器。它的设计目标是为了适应现在不 阅读全文
posted @ 2022-04-25 17:26
夏尔_717
阅读(1261)
评论(0)
推荐(0)
摘要:
一、概述 什么是Redis Redis(Remote Dictionary Server) 是一个使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。 Redis可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串(String)、列 阅读全文
posted @ 2022-04-25 17:13
夏尔_717
阅读(753)
评论(0)
推荐(0)
摘要:
在Spring中进行事务管理非常简单,只需要在方法上加上注解@Transactional,Spring就可以自动帮我们进行事务的开启、提交、回滚操作。甚至很多人心里已经将Spring事务与@Transactional划上了等号,只要有数据库相关操作就直接给方法加上@Transactional注解。 阅读全文
posted @ 2022-04-25 17:11
夏尔_717
阅读(1791)
评论(0)
推荐(0)
摘要:
一、概述 线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top三连,然后依次jstack、jmap伺候,具体问题具体 阅读全文
posted @ 2022-04-25 17:09
夏尔_717
阅读(512)
评论(0)
推荐(0)
摘要:
一、概述 MySQL日志主要包括错误日志、查询日志、慢查询日志、重做日志、归档日志几大类。其中比较重要的归档日志(binlog)和重做日志(redo log)和回滚日志(undo log)。 二、undo log日志 2.1 概念 顾名思义,回滚日志(undo log)的字面意思就是撤销操作的日志, 阅读全文
posted @ 2022-04-25 16:55
夏尔_717
阅读(501)
评论(0)
推荐(0)
摘要:
一、概述 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中,如果数据库中出现一个非法的 阅读全文
posted @ 2022-04-25 16:51
夏尔_717
阅读(457)
评论(0)
推荐(0)
摘要:
一、概述 在项目中,往往需要执行数据库操作后,发送消息或事件来异步调用其他组件执行相应的操作,例如: 用户注册后发送激活码; 配置修改后发送更新事件等。 但是,数据库的操作如果还未完成,此时异步调用的方法查询数据库发现没有数据,这就会出现问题。 为了解决上述问题,Spring为我们提供了以下两种方式 阅读全文
posted @ 2022-04-25 16:50
夏尔_717
阅读(3424)
评论(0)
推荐(0)
摘要:
一、引言 Spring Bean的生命周期流程图 其实要记忆该过程,还是需要我们先去理解,本文将从以下两方面去帮助理解Bean的生命周期: 生命周期的概要流程:对Bean的生命周期进行概括,并且结合代码来理解; 扩展点的作用:详细介绍Bean生命周期中所涉及到的扩展点的作用。 二、生命周期的概要流程 阅读全文
posted @ 2022-04-25 16:49
夏尔_717
阅读(793)
评论(0)
推荐(0)
摘要:
OSI与TCP/IP各层的结构与功能,都有哪些协议? 学习计算机网络时我们一般采用折中的办法,也就是中和OSI和TCP/IP的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 结合互联网的情况,自上而下地,非常简要的介绍一下各层的作用。 应用层 应用层(application-l 阅读全文
posted @ 2022-04-25 16:49
夏尔_717
阅读(511)
评论(0)
推荐(0)
摘要:
一、预加载 Springboot项目启动成功后可通过五种方式实现预加载 实现CommandLineRunner接口 实现ApplicationRunner接口 使用@PostConstruct注解进行初始化 实现ApplicationListener接口 实现InitializingBean接口 二 阅读全文
posted @ 2022-04-25 16:48
夏尔_717
阅读(828)
评论(0)
推荐(0)
摘要:
问题一:死锁 记录一次分布式事务seata遇到的巨坑报错,开发环境没有问题,但是测试环境频繁出现事务报错。 报错提示: org.springframework.orm.jpa.JpaSystemException: Unable to commit JDBC Connection; nested e 阅读全文
posted @ 2022-04-25 16:47
夏尔_717
阅读(7414)
评论(0)
推荐(6)
摘要:
一、前言 假如现在需要实现一个关于交易的功能,这个功能大致用到的参数都一样,但是在交易类型上分为充值、转账、消费、退款和提现等。不同的交易申请流程都属于交易功能的一部分,但是结合业务后,逻辑算法都是基本独立的。 按照往常的写法,可能会出现如下的代码写法: public String createOr 阅读全文
posted @ 2022-04-25 16:47
夏尔_717
阅读(1742)
评论(0)
推荐(0)
摘要:
一、概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。锁保证数据并发访问的一致性、有效性;锁冲突也是影响数据库并发访问性能的一个重要因素。锁是MySQL在服务器层和存储引擎层的的并发控制。 加锁是消耗资源的,锁的各种操作,包括获得锁、检测锁是否是否已解除、释放锁等。 二、锁机制 2.1 粒度 阅读全文
posted @ 2022-04-25 16:45
夏尔_717
阅读(363)
评论(0)
推荐(0)
摘要:
Seata是什么 Seata是阿里近期开源的分布式事务框架。框架包括了集团的TXC(云版本叫GTS)和蚂蚁金服的TCC两种模式,短短数月Github上的star数已经接近一万,算是目前唯一有大厂背书的分布式事务解决方案。 TXC在Seata中又叫AT模式,意为补偿方法是框架自动生成的,对用户完全屏蔽 阅读全文
posted @ 2022-04-25 16:38
夏尔_717
阅读(545)
评论(0)
推荐(0)
摘要:
一、简介 Future实际采用FutureTask实现,该对象相当于是消费者和生产者的桥梁,消费者通过FutureTask存储任务的处理结果,更新任务的状态:未开始、正在处理、已完成等。而生产者拿到的FutureTask被转型为Future接口,可以阻塞式获取任务的处理结果,非阻塞式获取任务处理状态 阅读全文
posted @ 2022-04-25 16:35
夏尔_717
阅读(963)
评论(0)
推荐(0)
摘要:
引言 在深入介绍Seata的实现之前,我们先在一个较高的层面一览Seata的整体设计思想。 一、设计方案 整体架构 首先,很自然的,我们可以把一个分布式事务理解成一个包含了若干分支事务的全局事务。全局事务的职责是协调其下管辖的分支事务达成一致,要么一起成功提交,要么一起失败回滚。此外,通常分支事务本 阅读全文
posted @ 2022-04-25 16:32
夏尔_717
阅读(538)
评论(0)
推荐(0)
摘要:
一、概述 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。 二、使用案例 可以用于做流量控制,特别是公用资源有限的应用场景,比如数据库连接。假如有一个需求,要读取几万个文件的数据,因为都是IO密集型任务,我们可以启动几十个线程并发地读取 阅读全文
posted @ 2022-04-25 16:32
夏尔_717
阅读(308)
评论(0)
推荐(0)
摘要:
一、简介 负载均衡(Load Balance):指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够 阅读全文
posted @ 2022-04-25 16:31
夏尔_717
阅读(1056)
评论(0)
推荐(0)
摘要:
一、概述 ArrayList是一种变长的集合类,基于定长数组实现,所以其可以保证在\(O(1)\)复杂度下完成随机查找操作。 ArrayList允许空值和重复元素,当往ArrayList中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。ArrayList是非线程安全类,并 阅读全文
posted @ 2022-04-25 16:22
夏尔_717
阅读(123)
评论(0)
推荐(1)
摘要:
JUC中的同步器三个主要的成员:CountDownLatch、CyclicBarrier和Semaphore。这三个是JUC中较为常用的同步器,通过它们可以方便地实现很多线程之间协作的功能。 一、概述 CountDownLatch是基于AQS实现,当构建count对象时,传入的值其实就会赋值给AQS 阅读全文
posted @ 2022-04-25 16:22
夏尔_717
阅读(324)
评论(0)
推荐(0)
摘要:
一、简介 并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Collections.synchronizedMap()以及Hashtable,ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求。 Concurre 阅读全文
posted @ 2022-04-25 16:20
夏尔_717
阅读(465)
评论(0)
推荐(0)
摘要:
一、概述 CyclicBarrier基于ReentrantLock和Condition等待唤醒的功能实现的,在构建CyclicBarrier时,会将count-1,操作count值是直接使用ReentrantLock来保证线程安全性,如果count不为0时,则添加condition队列中,如果等于0 阅读全文
posted @ 2022-04-25 16:20
夏尔_717
阅读(296)
评论(0)
推荐(0)
摘要:
一、概述 Exchanger是一个用于线程间协作的工具类,Exchanger用于进行两个线程间(只能两个)的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exch 阅读全文
posted @ 2022-04-25 16:20
夏尔_717
阅读(351)
评论(0)
推荐(0)
摘要:
一、简介 Phaser(阶段)是java 7引入的新的并发API,它适用于这样一种场景,一个大任务可以分为多个阶段完成,且每个阶段的任务可以多个线程并发执行,但是必须上一个阶段的任务都完成了才可以执行下一个阶段的任务。所以Phaser特别适合使用在重复执行或者重用的情况。 这种场景虽然使用Cycli 阅读全文
posted @ 2022-04-25 16:19
夏尔_717
阅读(462)
评论(0)
推荐(0)
摘要:
一、概述 Jdk8新增的Stream,配合Lambda,给操作集合(Collection)提供了极大的便利。 那么什么是Stream? Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。 Stream可以由数组或集合创建, 阅读全文
posted @ 2022-04-25 15:41
夏尔_717
阅读(1307)
评论(0)
推荐(0)
摘要:
在io.netty.example包下,有很多Netty源码案例,可以用来分析。用源码分析的方式走一下Netty(服务器)的启动过程,更好的理解Netty的整体设计和运行机制。源码需要剖析到Netty调用doBind方法,追踪到NioServerSocketChannel的doBind。并且要Deb 阅读全文
posted @ 2022-04-25 15:40
夏尔_717
阅读(640)
评论(0)
推荐(0)
摘要:
一、概述 1.1 原生NIO存在的问题 NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。 需要具备其他的额外技能:要熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,必须对多线 阅读全文
posted @ 2022-04-25 15:39
夏尔_717
阅读(385)
评论(0)
推荐(0)
摘要:
# 一、分布式事务 > 首先奉上一张关于事务的相关概念图,给大家做个总览: 
评论(0)
推荐(1)
摘要:
一、概述 I/O模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。Java共支持3种网络编程模型I/O模式:BIO、NIO、AIO。 Java BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行 阅读全文
posted @ 2022-04-25 15:38
夏尔_717
阅读(2410)
评论(0)
推荐(0)
摘要:
一、概述 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。 官网 Seata概述 下载中心 示例 1.1 简介 在Seata开源之前,Seata对应的内部版本在阿里经济体内部 阅读全文
posted @ 2022-04-25 15:37
夏尔_717
阅读(687)
评论(0)
推荐(0)
摘要:
一、前言 在很多业务情况下,我们都会在系统中加入Redis缓存做查询优化,使用es做全文检索。 如果数据库数据发生更新,这时候就需要在业务代码中写一段同步更新Redis的代码。这种数据同步的代码跟业务代码糅合在一起会不太优雅,能不能把这些数据同步的代码抽出来形成一个独立的模块呢,答案是可以的。 二、 阅读全文
posted @ 2022-04-25 15:36
夏尔_717
阅读(2182)
评论(0)
推荐(1)
摘要:
Redisson是一个用于连接redis的java客户端,相对于jedis,是一个采用异步模型,大量基于netty promise编程实现的客户端框架。是更高性能的第三方库。所以,这里推荐大家使用Redission替代jedis。 一、简介 Redisson是一个在Redis的基础上实现的Java驻 阅读全文
posted @ 2022-04-25 15:35
夏尔_717
阅读(2595)
评论(0)
推荐(1)
摘要:
一、跨JVM的线程安全问题 在单体的应用开发场景中,在多线程的环境下,涉及并发同步的时候,为了保证一个代码块在同一时间只能由一个线程访问,我们一般可以使用synchronized语法和ReetrantLock去保证,这实际上是本地锁的方式。 也就是说,在同一个JVM内部,大家往往采用synchron 阅读全文
posted @ 2022-04-25 15:34
夏尔_717
阅读(2213)
评论(0)
推荐(2)
摘要:
一、JVM简介 JVM是Java Virtual Machine(Java虚拟机)的缩写,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java虚拟机主要由字节码指令集、寄存器、栈、垃圾回收堆和存储方法域等构成。JVM屏蔽了与具体操作系统平台相关的信息,使Java程 阅读全文
posted @ 2022-04-25 15:32
夏尔_717
阅读(2653)
评论(0)
推荐(1)
摘要:
一、简述 1.1 定义 ThreadLocal类顾名思义可以理解为线程本地变量也有叫线程本地存储。作用是提供线程内的局部变量,也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程隔离,互相之间不会影响的。它提供了一种将可变数据通过每个线程有自己的独立副本从而 阅读全文
posted @ 2022-04-25 15:32
夏尔_717
阅读(295)
评论(0)
推荐(1)
摘要:
简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 阅读全文
posted @ 2022-04-25 15:22
夏尔_717
阅读(299)
评论(0)
推荐(0)
摘要:
一、概述 1.1 基本概念 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。简单来说,反射机制指的是程序在运行时能够获取自身的信息。 在Java中, 阅读全文
posted @ 2022-04-25 15:21
夏尔_717
阅读(1860)
评论(0)
推荐(1)
摘要:
一、简介 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处 阅读全文
posted @ 2022-04-25 15:20
夏尔_717
阅读(1233)
评论(0)
推荐(0)
摘要:
一、 K8S架构 除了核心组件,还有一些推荐的Add-ons: 组件名称 说明 kube-dns 负责为整个集群提供DNS服务 Ingress Controller 为服务提供外网入口 Heapster 提供资源监控 Dashboard 提供GUI Federation 提供跨可用区的集群 Flue 阅读全文
posted @ 2022-04-25 15:20
夏尔_717
阅读(371)
评论(0)
推荐(0)
摘要:
一、概述 MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis几乎消除了JDBC代码和参数的手动设置以及结果集的检索。MyBatis使用简单的XML或注解进行配置,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象) 阅读全文
posted @ 2022-04-25 15:19
夏尔_717
阅读(330)
评论(0)
推荐(0)
摘要:
IntelliJ IDEA For Mac 快捷键 快捷键 说明 alt+f7 查找变量方法使用的地方 F3 添加书签 Ctrl + O 快捷覆写方法 Alt + F3 添加书签标识 command + F3 显示书签 command + Shift + A 查找动作 Alt + F1 快捷选择 c 阅读全文
posted @ 2022-04-25 15:18
夏尔_717
阅读(1636)
评论(0)
推荐(0)
摘要:
一、启动类入口 SpringBoot的启动很简单,通用的代码如下: @SpringBootApplication public class SpringBootDemoApplication { public static void main(String[] args) { SpringAppli 阅读全文
posted @ 2022-04-25 15:18
夏尔_717
阅读(730)
评论(0)
推荐(0)
摘要:
一、前言 循环依赖:就是N个类循环(嵌套)引用。通俗的讲就是多个Bean互相引用对方,最终形成闭环。 用一副经典的图示可以表示成这样(A、B、C都代表对象,虚线代表引用关系): 其实可以N=1,也就是极限情况的循环依赖:自己依赖自己 这里指的循环引用不是方法之间的循环调用,而是对象的相互依赖关系。( 阅读全文
posted @ 2022-04-25 15:17
夏尔_717
阅读(390)
评论(0)
推荐(0)
摘要:
一、事务的总体设计 由于jdbc、Hibernate 实现事务功能的方式各不相同,Spring进行了统一的抽象,形成了PlatformTransactionManager事务管理器接口,事务的提交、回滚等操作全部交给它来实现。Spring的事务体系也是在PlatformTransactionMana 阅读全文
posted @ 2022-04-25 15:16
夏尔_717
阅读(1345)
评论(0)
推荐(0)
摘要:
一、概述 一般情况下,出现慢SQL问题,往往会定位到某些具体的SQL语句上,然后通过所谓的“优化三板斧”,如下: 查询执行计划 建立合适的索引 使用合适的连接关系和过滤条件来实现SQL语句的优化 但是,如果执行计划是正确的,SQL语句的性能还是很慢,可通过MySQL中的Profiling工具进一步定 阅读全文
posted @ 2022-04-25 09:57
夏尔_717
阅读(1412)
评论(0)
推荐(0)

浙公网安备 33010602011771号