12 2020 档案
摘要:cap理论 https://en.wikipedia.org/wiki/CAP_theorem c : consistency 一致性,关于一致性主要是针对数据强一致性,要求每次读取操作都会获取到最新的数据 a : available 可用性,每次请求都能收到一个没有错误的请求,但不能保证得到的数据
阅读全文
摘要:关于synchronized https://wiki.openjdk.java.net/display/HotSpot/Synchronization 其作为java 原语级别的同步工具,其通过字节码提升技术 当其作用在代码块上时通过monitorEnter和monitorExit命令实现锁的操作
阅读全文
摘要:https://redis.io/commands/eval Atomicity of scripts Redis uses the same Lua interpreter to run all the commands. Also Redis guarantees that a script i
阅读全文
摘要:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/submissions/ 关于二叉树的层序遍历,其节点读取顺序为 按层遍历从左到右的顺序进行读取; 但根据二叉树的特征可以了解到对于节点之间只有具体父子关系,并没有层
阅读全文
摘要:https://leetcode-cn.com/problems/reverse-linked-list-ii/submissions/ 对于指定区间的链表反转和完全的链表反转,其区别点在于 首先定位到反转区间,只针对反转区间进行反转操作 将原始链表中不需要反转的区间和最终反转成功的反转链表进行连接
阅读全文
摘要:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/ 对于链表反转其核心是通过将单链表原有的指针方向进行反转; 可以通过双指针,也可以通过递归两种方式实现反转 双指针 因此可以通过双指针迭代来实现,通过双指针每递进一次则执行一次反转操作
阅读全文
摘要:对于快慢指针 可以用来检测链表是否存在环的情况; https://leetcode-cn.com/problems/linked-list-cycle/ 其核心点在于 通过 慢指针是否能等于快指针 的判断 来检测 当前链表是否存在环; /** * Definition for singly-link
阅读全文
摘要:关于reentrantLock 中 fair 和 unfair体现 对于 reentrantLock 其核心实际是利用AbstractQueueSynchronizer (AQS); 对于reentrant就是通过判断当前线程是否相等作为可重入条件 AQS 实际就是一个双向链表组成的队列,对于队列中
阅读全文
摘要:简单理解 策略模式 更主要的是体现在规范定义上,相当于是 接口定义了规范,而根据不同的策略类来具体实现,对于策略模式更多是实现 模板模式 其核心点在于在模板中已经存在一些具体的操作,其提供的是已实现具体操作的规范,对于模板更多的是继承;对于模板一般会使用抽象类,一些模板方法在抽象类中进行实现
阅读全文
摘要:关于跳表 https://time.geekbang.org/column/article/42896 跳表作为一种特殊的有序单链表结构,由于链表本身并不支持二分查找,而在跳表结构中其通过维护多级索引的方式来实现快速查找(类似于二分查找); 对于其索引的结构为存在两个指针,分别是next指针指向同一
阅读全文
摘要:虽然redis提供了rdb(全量备份)和aof(增量备份),但单机节点有可能出现服务器宕机等情况导致数据丢失,无法实现一个高可用的目的; 主从同步(复制): 通过主节点向所有的从节点复制数据,当主节点出现数据变更时将自动将数据同步到从节点; 劣势点: 当主节点宕机情况下,无法自动完成主备切换,需要使
阅读全文
摘要:对于mysql 索引 最左前缀匹配原则 个人理解; 由于mysql 在构建多字段 联合索引时, 其设计原则为 读取创建索引时 指定的字段顺序(从左到右) 在构建B+tree非叶子节点时,其会按照 字段从左到右的顺序进行组合,并依次对字段存储的数据按照从小到大的顺序进行排序;最终保证整体索引数据的有序
阅读全文
摘要:关于使用redis 作为缓存,我们需要考虑以下问题 缓存穿透 缓存穿透的定义为当存在大量请求的情况下,请求会首先查询redis,redis中不存在数据,此时需要查询DB判断数据是否存在,对于DB返回的结果也是数据不存在的情况; 在这种情况下由于数据确实不存在,从而导致 一次请求 会连续请求到 red
阅读全文
摘要:根据springboot 自动装配的特性来分析 为什么 springboot 默认使用 hikaricp 作为数据库连接池? 通过 SpringBootApplication 注解可以看到一个关键的注解 就是 EnableAutoConfiguration; @Target(ElementType.
阅读全文
摘要:3pc (三阶段提交协议) https://en.wikipedia.org/wiki/Three-phase_commit_protocol 关于三阶段提交,对于2pc(two-phase commit)由于其存在一定的缺陷点存在于在 2pc 中 commit phase 阶段 对于 协调者和参与
阅读全文
摘要:关于分布式事务的定义 https://en.wikipedia.org/wiki/Distributed_transaction 分布式事务主要是针对分布式服务调用 为了保证 整体的事务原则 (ACID) 对于分布式事务核心算法思想就是 2PC(two-phase commit) https://e
阅读全文
摘要:根据spring-jdbc 中的定义 所有的数据操作异常都会转换为 DataAccessException 由于不同的数据库平台 存在不同的错误码定义,默认使用org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator进行转
阅读全文
摘要:关于 redis lists 类型 https://redis.io/topics/data-types-intro lists 相关操作命令 : https://redis.io/commands#list 根据文档中的关于 lists 的简介 为 其基于 linked list 数据结构 对于链
阅读全文
摘要:以下分析都是基于 mysql innodb引擎 https://dev.mysql.com/doc/refman/5.7/en/innodb-index-types.html clustered index(聚簇索引) : https://dev.mysql.com/doc/refman/5.7/e
阅读全文
摘要:PS : 以下相关代码分析都是 基于 spring-tx : 5.3.2 版本 spring 事务抽象 关于spring 事务抽象主要体现为 事务管理 以及 事务相关定义; 事务管理 : org.springframework.transaction.PlatformTransactionManag
阅读全文
摘要:SPI : service provider interface, 其实际是java提供的一套用于被第三方实现或扩展的API 其体现了 java 基于接口编程的思想, 可以搭配策略模式以及配置文件实现自定义扩展 例如 :数据库驱动,日志,spring,以及dubbo/druid等 关于SPI 相关配
阅读全文
摘要:通过对于 spring-jdbc jar 中的目录进行分析 config : 配置类以及部分工具类 core : JdbcTemplate 等相关核心接口和类 datasource : 数据源相关辅助类 object : jdbc操作相关object定义 support : 错误码定义以及相关辅助类
阅读全文
摘要:这里说的集群模式为 sentinel 和 cluster 模式 (PS : 本人对于 sentinel 和 cluster 两种集群模式还处于学习阶段) 相关redLock 官方介绍(PS : 里面包含了算法的思想以及相关代码演示) https://redis.io/topics/distlock
阅读全文
摘要:对于所谓序列化操作实际就是将要传输的数据转换为字节流或ByteBuffer https://en.wikipedia.org/wiki/Serialization 维基百科对于序列化的定义 可以参考java 中 ObjectOutputStream/ObjectInputStream 对于 java
阅读全文
摘要:在repeatableread隔离级别下,其使用了相对轻量级的锁机制,采用的行锁(排他性,当存在一个事务获取到的当前行的所有权,其他事务如需要竞争相同行的所有权,需要阻塞等待锁释放(对于当前加锁应该是非公平锁竞争机制(ps 个人猜测未查找官方文档认证))) 两阶段锁协议 在执行数据写入或更新操作时,
阅读全文
摘要:对于 并发事务情况下产生的一种问题称为 幻象(phantom) ,大部分会翻译为 幻读; 幻读在一定程度上会影响问题认知, 在这里我们首先要理解一个 mysql innodb 引擎中 update 操作的规则 : update 的执行规则是先读取要更新的行再执行具体的更新操作; 在mysql 的默认
阅读全文
摘要:mvcc 全称为 multiversion concurrency control 多版本并行控制 mysql官方释义 : https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_mvcc 根据官方解释了解到其操作是 为了满足当前不同隔离
阅读全文
摘要:在 mysql repeatable read 事务隔离级别下 其利用快照读 解决了 non-repeatable-read 的并发事务问题; read view : https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_read_vi
阅读全文
摘要:// redis 锁的优势 对于分布式服务的情况下,当只使用java原生相关锁(ReentrantLock)操作时,只能保证一个jvm进程中的操作受到锁的保护,但对于多个jvm进程就无法进行有效锁保护控制; 因此为了满足分布式场景, 需要使用一个统一管理位置,因此通过redis 来做作为锁控制 sp
阅读全文
摘要:事务的特性 关于 ACID https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_acid 原子性(atomic):原子操作主要体现在 对于一个事务开启后,后续操作中肯定存在事务回滚或提交两种操作,体现了 synchronize-rel
阅读全文
摘要:对比invokevirtual 和 invokestatic 两个 jvm指令的区别 从 hikaricp 数据库连接池 的性能优化点 作为切入点进行分析 invokevirtual 的作用实际是 调用实例化对象中的对象方法,其会按照从当前实际对象类型进行方法查找,按照继承或实现 层级关系 依次往上
阅读全文
摘要:https://time.geekbang.org/column/article/76827 极客时间学习 布隆过滤器实际是基于位图来实现的一种数据存储结构; 关于位图 https://en.wikipedia.org/wiki/Bit_array 对于位图的底层存储结构实际为数组结构,目的是为了存
阅读全文
摘要:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter springboot 2 集成druid 相较于hikaricp 数据源,druid 主要是提供了丰富的监控以及扩展(filter)功能 1:springbo
阅读全文
摘要:对于一些项目中可能存在需要配置多个主数据源,并非HA模式 当存在多主数据源时,就不能使用 spring-boot-jdbc-starter 自动装配,而需要自行管理相关bean; 1:排除spring-boot datasource相关自动配置类 通过SpringBootApplication注解中
阅读全文
摘要:在官方文档中关于springboot相关自动配置学习 https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto
阅读全文
摘要:相关代码示例: 使用springboot 自动配置jdbc单数据源 : https://github.com/mengyan183/spring-family/tree/main/spring-datasource 使用spring-framework 手动实现 jdbc 单数据源管理: https
阅读全文
摘要:代码地址:https://github.com/mengyan183/spring-family/tree/main/spring-hellowold 对于spring使用学习,主要还是基于springboot 脚手架,其提供了快速开发特性,对于我们现在所说的spring并不仅代表spring fr
阅读全文
摘要:对于 简单的 no block io ,实际还是建立的 server <-> client 的连接关系; 一般我们所了解到或听到的模型 一般都会 搭配 "多路复用"的概念; 对于多路复用实际就是 利用了 Selector(选择器)相关实现复用的目的; https://en.wikipedia.org
阅读全文
摘要:根据 java.nio.channels.Channel 的规范定义 中 存在一个定义 称为 network io 对于 network, 在 java 1.7 中增加了一个新的接口 java.nio.channels.NetworkChannel,其定义规范了网络相关api 这里我们重点看一下 其
阅读全文
摘要:对于 从jdk 1.7 开始引入新的 文件系统 称为 nio; 和之前io的不同点在于 存在新的api java.nio.file.Path 以及新的文件系统 java.nio.file.FileSystem 新的工具类: java.nio.file.Files 以及 java.nio.filePa
阅读全文
摘要:对于 try-with-resources 语法结构 since jdk7,其利用 java.lang.AutoCloseable 接口定义, 对于实现当前接口中close方法的 concrete(实现(非抽象)) 类达到自动释放资源的目的 对于try-with-resources 语法使用要求其中
阅读全文
摘要:简单设计思路: 文件变化实际就是 基于 java.io.File#lastModified (最新更新时间); PS:对于不同的操作系统底层对于文件变更可能会有不同的更新策略, 例如 mac下对于子目录下的变更并不会更新所有父级目录更新时间,对于目录的变更时间只针对于直接子级,对于间接子级的变更是不
阅读全文
摘要:对于 java.io.DataInputStream和DataOutputStream 一般利用当前操作可以实现对象深度拷贝; 但这其中利用到了 Serializable 对于 DataInputStream#readObject 和 DataOurputStream#writeObject 在操作
阅读全文
摘要:对于字符流和字节流的区别在于对于字节流是为了程序或机器直接使用的数据, 而字符流是为了满足人来使用的数据; 对于java 语言 是使用 unicode 编码规范,根据不同的字符集来转换为对应的字符 对于字符流实际都是基于 Reader/Writer进行实现 直接实现 文件:java.io.FileR
阅读全文
摘要:对于程序而言,其使用字节流来操作 输出/输入 8位 的字节数据; 对于 java中所有的字节流操作实际都是基于 Input/OutputStream 直接实现 : 文件:java.io.FileInput/OutputStream 数组:java.io.ByteArrayInput/OutputSt
阅读全文
摘要:对于adapter模式一般理解为 将两种不同的接口定义进行转换 例如:java字节流和字符流之间转换 /* * Copyright (c) 2020, guoxing, Co,. Ltd. All Rights Reserved */ package com.xingguo.io.character
阅读全文
摘要:对于装饰器和包装器 和 被修饰类之间的关系 一定是 继承和实现的关系,具有层次关系 对于装饰器和包装器和 代理模式的不同点在于 对于装饰器和包装器是在原有功能的基础上来增加一些新的功能; 其相同点为 : 都是通过外部注入被代理类或被包装或被修饰类数据 对于相关模板的参考可以通过 (decorator
阅读全文
摘要:对于代理模式的模板其实际就是通过外部注入被代理对象,而作为代理对象只会包含部分或全部被代理对象的功能; 可以参考{@link java.util.concurrent.Executors.DelegatedExecutorService} 对于delegate 模式也可以从命名方式上进行识别; 对于
阅读全文

浙公网安备 33010602011771号