潘多拉学习笔记
文章平均质量分 77
通过基础概念、基本原理、实战操作、底层源码,循序渐进的学习Java后端技术,争取把目前流行的技术学好。
styleforme
大学有光,所以值得!
展开
-
ElasticSearch快速入门
Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。原创 2022-06-22 16:25:41 · 387 阅读 · 1 评论 -
Lambda表达式
Lambda表达式是Java SE 8中一个重要的新特性,允许你通过表达式来代替功能接口。原创 2022-06-16 12:08:28 · 307 阅读 · 0 评论 -
volatile可见性、有序性实现原理
volatile写-读的内存语义 当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量。 volatile可见性实现原理 JMM内存交互层面实现 volatile修饰的变量的read、load、use操作和assign、store、write必须是连续的,即修改后必须立即同步回主内存,使用时必须从主内存刷新,由此保证volatile变量操作对多线原创 2022-02-19 15:37:18 · 255 阅读 · 0 评论 -
JMM内存模型
JMM定义 JMM描述的是一种抽象的概念,一组规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式,JMM是围绕原子性、有序性、可见性展开的。JMM与硬件内存架构的关系 Java内存模型与硬件内存架构之间存在差异。硬件内存架构没有区分线程栈和堆。对于硬件,所有的线程栈和堆都分布在主内存中。部分线程栈和堆可能有时候会出现在CPU缓存中和CPU内部的寄存器中。如下图所示,Java内存模型和计算机硬件内存架构是一个交叉关系: 内存交互操作 关于主内存.原创 2022-02-17 20:06:12 · 396 阅读 · 0 评论 -
并发三大特性
可见性 当一个线程修改了共享变量的值,其他线程能够看到修改的值。Java 内存模型是通过在变量 修改后将新值同步回主内存,在变量读取前从主内存刷新变量值这种依赖主内存作为传递媒介 的方法来实现可见性的。 如何保证可见性?通过 volatile 关键字保证可见性。 通过 内存屏障保证可见性。 通过 synchronized 关键字保证可见性。 通过 Lock保证可见性。 通过 final 关键字保证可见性 有序性 即程序执行的顺序按照代码的先后顺序执行。JVM原创 2022-02-15 22:29:30 · 145 阅读 · 0 评论 -
一条SQL的执行过程
MySQL的内部组件结构MySQL逻辑架构可以分为三层: 客户端:最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。 Server层:大多数MySQL的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有的内置函数(日期、时间、数学和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。 存储引擎层:第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。Server层通过API与存储原创 2022-02-14 21:38:36 · 131 阅读 · 0 评论 -
索引优化实践
一、全值匹配EXPLAIN SELECT * FROM employees WHERE name= 'LiLei';EXPLAIN SELECT * FROM employees WHERE name= 'LiLei' AND age = 22;EXPLAIN SELECT * FROM employees WHERE name= 'LiLei' AND age = 22 AND position ='manage r';二、最左前缀法则 如果索引了多列,要遵守..原创 2022-02-13 20:35:08 · 528 阅读 · 0 评论 -
Explain详解
Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 ,在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL。注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。explain 两个变种 1)explain extended:会在 explain 的基础上额外提供一些查询优化的信息。紧随其后通过 show war原创 2022-02-10 21:10:36 · 287 阅读 · 0 评论 -
MySQL索引底层数据结构
索引定义索引是帮助MySQL高效获取数据的排好序的数据结构。索引数据结构二叉树每个节点有两个子节点,数据量的增大必然导致高度的快速增加,对那种逐渐增大的数据查询相当于链表查询,效率低下,显然这个不适合作为大量数据存储的基础结构。红黑树红黑树相对于平衡二叉树,对那种逐渐增大的数据查询会进行平衡,比二叉树快一点,但是树的高度会很高,如果要查询叶子节点,会很慢。Hash对索引的key进行一次hash计算就可以定位出数据存储的位置,很多时候Hash索引要比原创 2022-02-08 19:43:39 · 1688 阅读 · 4 评论 -
秒杀项目详解
一、秒杀应该考虑哪些问题? 超卖问题 分析秒杀的业务场景,最重要的有一点就是超卖问题,假如备货只有100个,但是最终超卖了200,一般来讲秒杀系统的价格都比较低,如果超卖将严重影响公司的财产利益,因此首当其冲的就是解决商品的超卖问题。 高并发 秒杀具有时间短、并发量大的特点,秒杀持续时间只有几分钟,而一般公司都为了制造轰动效应,会以极低的价格来吸引用户,因此参与抢购的用户会非常的多。短时间内会有大量请求涌进来,后端如何防止并发过高造成缓存击穿或者失效,击垮数据库都是需要考虑的问题。原创 2022-01-30 21:06:38 · 5496 阅读 · 0 评论 -
动态代理详解
动态代理 什么是动态代理?动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。代理类在程序运行期间,创建的代理对象称之为动态代理对象。这种情况下,创建的代理对象,并不是事先在Java代码中定义好的。而是在运行期间,根据我们在动态代理对象中的“指示”,动态生成的。也就是说,你想获取哪个对象的代理,动态代原创 2022-01-13 23:00:15 · 4086 阅读 · 0 评论 -
Bean的生命周期详解
第一步:启动ApplicationContext第二步:创建BeanFactory工厂第三步:初始化BeanFactory1、解析配置类,得到BeanDefinition,并注册到BeanFactory中 i. 解析@ComponentScan,此时就会完成扫描 ii. 解析@Import iii. 解析@Bean 2、 因为ApplicationContext还支持国际化,所以还需要初始化MessageSource对象 3、 因为ApplicationContext原创 2022-01-10 02:13:09 · 477 阅读 · 0 评论 -
Spring依赖注入详解
Spring中有两种依赖注入的方式1. 手动注入 2. 自动注入 手动注入 在XML中定义Bean时,就是手动注入,因为是程序员手动给某个属性指定了值。 <bean name="userService" class="com.luban.service.UserService"> <property name="orderService" ref="orderService"/> </bean> 上面这种底层是通过set方法进行注入。原创 2022-01-07 22:27:27 · 244 阅读 · 0 评论 -
Spring源码学习笔记(4)
类型转化 在Spring源码中,有可能需要把String转成其他类型,所以在Spring源码中提供了一些技术来更方便的做对象的类型转化,关于类型转化的应用场景, 后续看源码的过程中会遇到很多。 PropertyEditor 这其实是JDK中提供的类型转化工具类 假设现在有如下Bean: @Component public class UserService { @Value("xxx") private User user; public void..原创 2021-12-16 00:00:53 · 499 阅读 · 0 评论 -
Spring源码学习笔记(3)
一、BeanDefinitionBeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。比如: class,表示Bean类型 scope,表示Bean作用域,单例或原型等 lazyInit:表示Bean是否是懒加载 initMethodName:表示Bean初始化时要执行的方法 destroyMethodName:表示Bean销毁时要执行的方法 BeanDefinitionReader 接下来,我们来原创 2021-12-14 22:46:55 · 130 阅读 · 0 评论 -
Spring源码学习笔记(2)
一、Spring中是如何创建一个对象? 其实不管是AnnotationConfigApplicationContext还是ClassPathXmlApplicationContext,目前,我们都可以简单的将它们理解为就是用来创建Java对象的,比如调用getBean()就会去创建对象(此处不严谨,getBean可能也不会去创建对象,后续课程详解)。在Java语言中,肯定是根据某个类来创建一个对象的。我们在看一下实例代码: AnnotationConfigApplicationContext c原创 2021-12-13 21:11:36 · 194 阅读 · 0 评论 -
Spring源码学习笔记(1)
一、Bean的创建生命周期整体流程:OrderService.class---》无参构造方法(推断构造方法)---》得到一个对象---》通过依赖注入为属性赋值---》初始化前(a())通过@PostConstruct---》初始化(InitializingBean)---》初始化后(AOP)--->代理对象---》Bean底层原理:1. 利用该类的构造方法来实例化得到一个对象(但是如何一个类中有多个构造方法, Spring则会进行选择,这个叫做推断构造方法)。2原创 2021-12-12 21:04:39 · 440 阅读 · 0 评论 -
Zookeeper学习笔记(2)
一、Zookeeper分布式锁非公平锁如上实现方式在并发问题比较严重的情况下,性能会下降的比较厉害,主要原因是,所有的连接 都在对同一个节点进行监听,当服务器检测到删除事件时,要通知所有的连接,所有的连接同时 收到事件,再次并发竞争,这就是羊群效应。公平锁如上借助于临时顺序节点,可以避免同时多个节点的并发竞争锁,缓解了服务端压力。这种实 现方式所有加锁请求都进行排队加锁,是公平锁的具体实现。前面这两种加锁方式有一个共同的...原创 2021-12-11 20:09:48 · 107 阅读 · 0 评论 -
Zookeeper学习笔记(1)
一、Zookeeper基本概念1. 什么是Zookeeper? zookeeper,它是一个分布式协调框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。Zookeeper 核心概念上面的解释有点抽象,暂时可以理解为 Zookeeper 是一个用于存储少量数据的基于内存的数据库,主要有如下两个核心的概念:文件系统数据结构+监听通知机制。 文件系统数据结构 .原创 2021-12-10 21:46:53 · 1295 阅读 · 0 评论 -
Redis学习笔记(5)
一、缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。 造成缓存穿透的基本原因有两个: 第一, 自身业务代码或者数据出现问题。 第二, 一些恶意攻击、 爬虫等造成大量空命中。 缓存穿透问题解决方案: 1、缓存空对象 2、布隆过滤器 对于恶意攻击,向服务器请求大量不原创 2021-12-09 19:17:02 · 114 阅读 · 0 评论 -
Redis学习笔记(4)
一、Redis集群方案比较哨兵模式在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率 集群模式原创 2021-12-08 19:11:44 · 139 阅读 · 0 评论 -
Redis学习笔记(3)
一、Redis主从架构结构图:Redis主从工作原理 如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份rdb文件数据集发送给sl原创 2021-12-07 18:58:42 · 443 阅读 · 0 评论 -
Redis学习笔记(2)
Redis持久化 RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置, 让它在“N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。 比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集: # save 60 1000 //关闭RDB只需要将所有的save保存策略注释掉即可原创 2021-12-06 20:02:33 · 154 阅读 · 0 评论 -
Redis学习笔记(1)
一、什么是Redis Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。 Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-原创 2021-12-05 19:04:41 · 143 阅读 · 0 评论 -
RocketMQ学习笔记(3)
一、使用RocketMQ如何保证消息不丢失?我们考虑一个通用的MQ场景:其中,1,2,4三个场景都是跨网络的,而跨网络就肯定会有丢消息的可能。然后关于3这个环节,通常MQ存盘时都会先写入操作系统的缓存page cache中,然后再由操作系统异步的将消息写入硬盘。这个中间有个时间差,就可能会造成消息丢失。如果服务挂了,缓存中还没有来得及写入硬盘的消息就会丢失。这个是MQ场景都会面对的通用的丢消息问题。那我们看看用Rocket时要如何解决这个问题。1、那些环境会有可能丢消息?.原创 2021-12-04 20:07:55 · 1770 阅读 · 0 评论 -
RocketMQ学习笔记(2)
一、基础概念1、消息模型RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息, Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。 Cons原创 2021-12-03 20:35:05 · 324 阅读 · 0 评论 -
RocketMQ学习笔记(1)
一、MQ介绍定义MQ:MessageQueue,消息队列。 队列,是一种FIFO 先进先出的数据结构。消息由生产者发送到MQ进行排队,然后按原来的顺序交由消息的消费者进行处理。作用异步作用:异步能提高系统的响应速度、吞吐量。 解耦 作用: 1、服务之间进行解耦,才可以减少服务之间的影响。提高系统整体的稳定性以及可扩展性。 2、另外,解耦后可以实现数据分发。生产者发送一个消息后,可以由一个或者多个消费者进行消 费,并且消费者的增加或者减少对生产者.原创 2021-12-02 20:21:39 · 310 阅读 · 0 评论 -
Spring Cloud Gateway学习笔记
Gateway原创 2021-12-01 19:17:57 · 416 阅读 · 0 评论 -
Seata学习笔记
Seata原创 2021-11-30 20:15:25 · 3308 阅读 · 0 评论 -
Sentinel学习笔记
Sentinel原创 2021-11-29 21:52:54 · 461 阅读 · 0 评论 -
Feign学习笔记
Feign原创 2021-11-28 21:57:52 · 304 阅读 · 0 评论 -
Ribbon学习笔记
Ribbon原创 2021-11-27 19:05:30 · 335 阅读 · 0 评论 -
Nocas学习笔记
Nocas原创 2021-11-26 21:00:58 · 1672 阅读 · 0 评论 -
微服务架构详解
微服务架构原创 2021-11-25 20:21:27 · 291 阅读 · 0 评论 -
Netty零拷贝&解决空轮询
Netty零拷贝&解决空轮询原创 2021-11-24 22:32:15 · 500 阅读 · 0 评论 -
Dubbo学习笔记
Dubbo原创 2021-11-23 19:23:07 · 89 阅读 · 0 评论 -
Netty编解码&粘包拆包&心跳机制&断线自动重连
Netty编解码&粘包拆包&心跳机制&断线自动重连原创 2021-11-22 21:19:05 · 118 阅读 · 0 评论 -
Netty线程模型
Netty线程模型原创 2021-11-20 23:22:51 · 557 阅读 · 0 评论 -
IO模型详解
IO模型详解!原创 2021-11-19 20:19:29 · 587 阅读 · 0 评论