程序员 jet_qi
白龙马服务平台员工,擅长并发开发(juc,netty),分布式(springboot+MQ,rpc,ES,dubbo),擅长商品域,财务域业务知识,是设计模式实战的狂热者。
博客主要分享内容:职场经验分享、自学教程、面试真题解析、面试经验分享、技术专题深度解析等。
关于我的文章:那些你很容易就能看得懂的文章,是不会让你显得与众不同的,我会保证所写的每一句话,每一行代码都经过了认真的推敲、仔细的斟酌,希望大家能有所收获。
吃不了学习的苦,就得吃生活的苦,别在最应该努力的年纪躺平
展开
-
MySQL第一讲:程序员必须精通的MySQL索引规范
1、类型(三种)主键索引名为 pk_字段名; 唯一索引名为 uk_字段名; 普通索引名则为 idx_字段名 。说明: pk_ 即 primary key; uk_ 即 unique key2、规范(10余条)序号规范说明例子1【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽.........原创 2019-12-15 23:39:08 · 7233 阅读 · 1 评论 -
ShardingSphere第10讲:ShardingJDBC 在网络货运项目中的使用
本文是ShardingSphere第10讲,主要讲解网络货运项目订单表目前遇到的问题,然后对ShardingJDBC简介,以及如何使用ShardingJDBC解决该业务遇到的痛点,最后实战了货运平台订单分库分表,通过该方案,解决了MySQL写操作缓慢问题。在1亿订单量的情况下,基本上也能做到20毫秒之内响应。原创 2024-12-19 21:32:50 · 148 阅读 · 0 评论 -
MySQL第一讲:MySQL知识体系详解(P6精通)
MySQL不论在实践还是面试中,都是频率最高的。本系列主要对MySQL知识体系梳理,将给大家构建JVM核心知识点全局知识体系,本文是MySQL第一讲,MySQL知识体系详解。原创 2024-01-07 12:09:59 · 1286 阅读 · 2 评论 -
MySQL第二讲:MySQL innoDB存储引擎中索引原理
本文是MySQL的第二讲:==MySQL索引原理==。本文从数据结构的角度切入数据库中常见的B+ 树索引和哈希索引的使用,并从内部机制上讨论了使用上述索引的环境和优化方法,以及 innoDB1.2 版本开始支持的全文索引。原创 2019-12-16 00:02:30 · 511 阅读 · 0 评论 -
MySQL第三讲:数据库基础面试题汇总(mysql调优/底层B+ tree机制/sql执行计划详解/索引优化详解/sql语句优化)
数据库基础面试题汇总(关系型数据库mysql/mysql调优/底层B+ tree机制/sql执行计划详解/索引优化详解/sql语句优化)文章目录数据库基础面试题汇总(关系型数据库mysql/mysql调优/底层B+ tree机制/sql执行计划详解/索引优化详解/sql语句优化)1、mysql基础介绍,什么是mysql2、mysql的配置文件详解3、什么样的数据库设计时符合要求的(从范式的角度)?4、sql语句执行过程(一条sql语句在mysql中如何执行的) 20200930 牛逼5、 mysql视图原创 2020-10-06 13:47:08 · 1377 阅读 · 1 评论 -
MySQL第四讲:MySQL的锁机制
我们学习了数据库的事务及其事务的隔离级别,但是数据库是怎样隔离事务的呢?这时候就牵连到了数据库锁。当插入数据时,就锁定表,这叫做”锁表”;当更新数据时,就锁定行,这叫做”锁行”。当多个用户对数据库进行操作时,会带来数据不一致的情况,所以,锁主要是在多用户情况下保证数据库数据完整性和一致性。本文是MySQL第四讲,分析MySQL的锁机制1、mysql的锁机制? ***重难点 20201006 补充1、锁的分类锁模式分类乐观锁、悲观锁范围锁行锁、表锁算法锁临间锁、间隙.原创 2022-05-23 22:39:15 · 223 阅读 · 0 评论 -
MySQL第五讲:工作中常用的sql语句(非常好用)
1.1.2、查询后台类目(3级或4级)1.1.3 查询某一前台类目实例下的前、后台类目1.2、更新语句参考:https://www.jb51.net/article/54345.htmreplace into 跟insert的功能类似,先尝试将数据插入表中,如果发现表中已经有此行数据(如何判断:基于主键?),则先删除此行数据,然后插入新的数据,否则,直接插入新数据。如果是使用insert,会有重复数据的风险,如果带有主键,数据插入失败1.4、查询接口方法级,被其他应用的调用量及平均耗时。原创 2022-06-23 20:00:00 · 235 阅读 · 0 评论 -
MySQL第六讲:MySQL语法基础(库表操作/子查询/事务/权限管理)
2、数据操作3、数据类型(列类型)数值类型– a. 整型 ----------类型字节范围(有符号位)tinyint1字节(2^8)-128 ~ 127 无符号位:0 ~ 255– b. 浮点型 ----------– c. 定点数 ----------decimal – 可变长度decimal(M, D) M也表示总位数,D表示小数位数。保存一个精确的数值,不会发生数据的改变,不同于浮点数的四舍五入。将浮点数转换为字符串来保存,每原创 2022-06-10 20:00:00 · 195 阅读 · 0 评论 -
MySQL第七讲:MySQL分库分表详解
1、海量数据的存储问题2、如果使用关系型数据库解决海量存储的问题呢?3、mysql性能瓶颈分析4、大数据量数据库性能的解决方案?概念:分库,就是把数据拆分到不同的 MySQL 库中去分表:在数据量不变的情况下,把数据拆分到同一个库的多张表里面分库分表:数据库数量和表数量都发生变更使用场景为什么进行分库分表?分库分表的目的分库分表有垂直切分和水平切分如下图所示垂直拆分如图所示:水平拆分如图所示:总体原则:那就是能不拆就不拆,能少拆不多拆,先才用加索引、读写分离解决性能问题,实在不行后,才考虑使用分库分表原创 2022-06-12 17:12:39 · 1331 阅读 · 1 评论 -
MySQL第八讲:数据库事务及MVCC机制/分布式事务实战
举例如下:转账操作。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。1、MySQL事务特性(数据库事务transanction正确执行的四个基本要素)ACID,原子性(Atomicity)、一致性(Correspondence)、隔离性(Isolation)、持久性(Durabili原创 2022-06-16 01:18:00 · 341 阅读 · 1 评论 -
MySQL第十二讲:ShardingJDBC详解
互联网业务兴起之后,海量用户加上海量数据的特点,单个数据库服务器已经难以满足业务需要,必须考虑数据库集群的方式来提升性能。高性能数据库集群的`第一种方式是“读写分离”`,`第二种方式是“数据库分片”`。原创 2022-09-19 11:32:12 · 795 阅读 · 2 评论 -
MySQL第十三讲:关系型数据库是如何工作的
中文版本([这里](http://dblab.xmu.edu.cn/sites/default/files/files/linziyu-Architecture of a Database System(Chinese Version)-ALL.pdf))对数据库有很好的介绍(共110页),而且非计算机专业人士也能读懂。所以,当你不得不在问题多多的 NoSQL数据库和坚如磐石的关系型数据库之间抉择的时候,要三思而行。原创 2023-05-07 19:49:43 · 513 阅读 · 0 评论 -
MySQL第十四讲:一条 SQL 的执行过程详解
本文带你走进 MySQL 的世界,让你彻底了解系统到底是如何和 MySQL 交互的,MySQL 在接受到我们发送的 SQL 语句时又分别做了哪些事情。到此,关于Buffer Pool、Redo Log Buffer 和undo log、redo log、bin log 概念以及关系就基本差不多了。我们再回顾下Buffer Pool 是 MySQL 的一个非常重要的组件,因为针对数据库的增删改操作都是在 Buffer Pool 中完成的Undo log 记录的是数据操作前的样子。原创 2023-05-07 21:42:54 · 694 阅读 · 1 评论 -
MySQL第十七讲:关系型数据库设计流程
需求分析:分析用户的需求,包括数据、功能和性能需求;概念结构设计:主要采用E-R模型进行设计,包括画E-R图;逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换;数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径;数据库的实施:包括编程、测试和试运行;数据库运行与维护:系统的运行与数据库的日常维护原创 2023-06-10 16:18:32 · 682 阅读 · 0 评论 -
MySQL第二十二讲:大厂实践 - 美团: MySQL索引原理及慢查询优化
目前常用的 SQL 优化方式包括但不限于:**业务层优化、SQL逻辑优化、索引优化等**。其中索引优化通常通过调整索引或新增索引从而达到 SQL 优化的目的,索引优化往往可以在短时间内产生非常巨大的效果。本文是MySQL第22讲,旨在以开发工程师的角度来解释数据库索引的原理和如何优化慢查询。原创 2023-08-15 09:00:00 · 296 阅读 · 0 评论 -
MyBatis第一讲:MyBatis基础知识到源码分析(P6精通)
MyBatis基础知识到源码分析MyBatis是支持定制化SQL、存储过程以及高级映射的持久层框架。MyBatis使用XML或注解来配置和映射基本体,将接口和Java的POJO映射成数据库中的记录。作为一款轻量级的持久层框架,占据了很大部分市场,我们公司团队持久层也是使用mybatis,结合MyBatisCodeHelperPro插件提升开发效率,本文介绍了mybatis的一些基本特性及原理...原创 2020-02-23 16:21:24 · 1026 阅读 · 1 评论 -
MyBatis第二讲:MyBatis总体框架设计
本文是MyBatis第二讲,介绍MyBatis总体框架设计,MyBatis整体架构包含哪些层呢?这些层次是如何设计的呢?原创 2023-07-11 20:20:38 · 878 阅读 · 0 评论 -
MyBatis第三讲:MyBatis初始化过程详解
从上文我们知道MyBatis和数据库的交互有两种方式有Java API和Mapper接口两种,所以MyBatis的初始化必然也有两种;那么MyBatis是如何初始化的呢?本文是MyBatis第三讲,详解MyBatis初始化过程。原创 2023-07-14 10:52:10 · 1597 阅读 · 0 评论 -
MyBatis第四讲:MyBatis配置解析过程详解
通过上文我们知道MyBatis初始化过程中会解析配置,那具体是如何解析的呢?本文是MyBatis第四讲,对MyBatis配置解析过程详解原创 2023-07-14 16:32:12 · 294 阅读 · 0 评论 -
MyBatis第六讲:sqlSession执行流程详解
本文是MyBatis第六讲:sqlSession执行流程详解。前面的章节主要讲mybatis如何解析配置文件,这些都是一次性的过程。从本章开始讲解动态的过程,它们跟应用程序对mybatis的调用密切相关。原创 2023-07-28 10:00:00 · 257 阅读 · 0 评论 -
MyBatis第七讲:MyBatis动态SQL优雅实践与原理
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。原创 2023-07-11 14:59:58 · 697 阅读 · 0 评论 -
MyBatis第八讲:MyBatis插件机制详解与实战
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) 拦截执行器的方法ParameterHandler (getParameterObject, setParameters) 拦截参数的处理。原创 2023-07-05 23:05:43 · 934 阅读 · 1 评论 -
MyBatis第九讲:MyBatis分页插件机制
在实现里大量使用了MetaObject这个对象,因此有必要先介绍下它。MetaObject 是 Mybatis 提供的一个的工具类,通过它包装一个对象后可以获取或设置该对象的原本不可访问的属性(比如那些私有属性)。用于包装对象;用于获取属性的值(支持OGNL的方法);用于设置属性的值(支持OGNL的方法);原创 2023-07-06 14:31:55 · 302 阅读 · 0 评论 -
MyBatis第十讲:MyBatis数据源与连接池详解
从上述的代码中可以看到,我们每调用一次getConnection()方法,都会通过DriverManager.getConnection()返回新的java.sql.Connection实例。原创 2023-07-13 21:11:27 · 369 阅读 · 0 评论 -
MyBatis第十一讲:MyBatis事务管理机制详解
创建(create)、提交(commit)、回滚(rollback)、关闭(close)。对应地,MyBatis将事务抽象成了Transaction接口:使用JDBC的事务管理机制:即利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等。使用MANAGED的事务管理机制:这种机制MyBatis自身不会去实现事务管理,而是让程序的容器如(JBOSS,Weblogic)来实现对事务的管理。原创 2023-07-13 21:28:23 · 1247 阅读 · 0 评论 -
MyBatis第十二讲:MyBatis一级缓存实现机制详解
每当我们使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数据库会话。在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据库,而我们在极短的时间内做了完全相同的查询,那么它们的结果极有可能完全相同,由于查询一次数据库的代价很大,这有可能造成很大的资源浪费。原创 2023-07-27 10:00:00 · 236 阅读 · 0 评论 -
MyBatis第十三讲:MyBatis二级缓存实现机制详解
如下类图所示。对于每个Cache而言,都有一个容量限制,MyBatis各供了各种策略来对Cache缓存的容量进行控制,以及对Cache中的数据进行刷新和置换。原创 2023-07-28 09:00:00 · 184 阅读 · 0 评论 -
分布式系统第四讲:分布式锁及实现方案
要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。进程锁:为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synchronized等线程锁实现进程锁。原创 2023-07-04 16:27:15 · 243 阅读 · 0 评论 -
架构设计第六讲:数据巡检系统之Mysql慢查询自动化治理
各表数据量统计目前单表数据量几千条,数据量并不大daily环境数据量为线上环境2~4倍线上:rm-wz936ji5413x9l86j 2核, 4096MB内存, 20GB磁盘daily:rm-wz9d545c689v19pss 1核, 1024MB内存, 20GB磁盘。原创 2023-05-07 19:22:50 · 564 阅读 · 0 评论 -
架构设计第十讲:架构之高并发:缓存
随着互联网的普及,内容信息越来越复杂,用户数和访问量越来越大,我们的应用需要支撑更多的并发量,同时我们的应用服务器和数据库服务器所做的计算也越来越多。但是往往我们的应用服务器资源是有限的,且技术变革是缓慢的,数据库每秒能接受的请求次数也是有限的(或者文件的读写也是有限的),如何能够有效利用有限的资源来提供尽可能大的吞吐量?一个有效的办法就是引入缓存,打破标准流程,每个环节中请求可以从缓存中直接获取目标数据并返回,从而减少计算量,有效提升响应速度,让有限的资源服务更多的用户。原创 2023-07-03 20:51:11 · 989 阅读 · 0 评论 -
Redis第一讲:Redis知识体系详解+原理+应用+面试(P6精通)
本系列主要对Redis知识体系进行详解。本篇文章作为Redis第1讲,开篇会站在知识体系的视角,介绍总体知识点,包括入门、数据结构、监控、性能调优、项目实战、源码解析等。原创 2023-08-17 09:00:00 · 356 阅读 · 0 评论 -
Redis第一讲:相关的基础知识/数据类型/缓存的过期策略/双写一致性/内存存储和持久化
redis详解/redis相关的基础知识摘要:本文是redis详解的第一部分,介绍redis相关的基础知识,参考的书籍有《redis实战 黄建宏译》《redis入门指南 李子骅》《高并发编程网》《尚硅谷的redis资料》1、redis是什么?(远程字典服务器) 是一个开源的、内存中的数据结构存储系统,可以用作数据库、缓存和消息中间件。 Redis是key-value形式的nosql数据..................原创 2019-02-05 22:14:54 · 984 阅读 · 0 评论 -
Redis第二讲:Redis进阶与实战/持久化机制/分布式锁/Redis集群/设计模式/缓存击穿和缓存雪崩/事务机制
redis进阶与实战摘要:本文是redis的进阶与实战部分,主要讲解redis的持久化机制,分布式锁,redis集群(主从模式)以及其设计模式,缓存击穿和缓存雪崩,redis的缓存降级/缓存限流,redis的事务机制,最后是redis的java客户端jedis。1、Redis持久化机制(RDB和AOF)如何做高可用、集群1、什么是redis的持久化技术在指定的时间间隔内将内存中的数.....................原创 2020-11-11 16:05:36 · 614 阅读 · 2 评论 -
Redis第三讲:分布式锁的三种实现方法
应用开发时,如果需要在同进程内的不同线程并发访问某项资源,可以使用各种互斥锁、读写锁等JVM锁;如果一台主机上的多个进程需要并发访问某项资源,则可以使用进程间同步的原语,例如信号量、管道、共享内存等。JVM 锁只能作用于单个 JVM,可以简单理解为就是单台服务器(容器),**而对于多台服务器之间,JVM 锁则没法解决,就需要使用一种在全局可见并具有互斥性的锁了,这时候就需要引入分布式锁**。它可以在分布式场景中对资源加锁,避免竞争资源引起的逻辑错原创 2022-08-25 14:07:48 · 723 阅读 · 0 评论 -
Redis第五讲:详解 Redis 中 BigKey、HotKey 的发现与处理
我们经常能够在公司内部的Redis开发使用规范手册,或网络中大量的Redis最佳实践文章里看到有关大Key、热Key的定义,然而这些资料中的大Key热Key判定标准却不尽相同,但可以明确的是,它们的判定维度是一致的:大Key通常都会以数据大小与成员数量来判定,而热Key则以其接收到的请求频率、数量来判定。一个STRING类型的Key,它的值为5MB(数据过大)一个LIST类型的Key,它的列表数量为20000个(列表数量过多)一个ZSET类型的Key,它的成员数量为10000个(成员数量过多)原创 2022-10-27 23:58:32 · 550 阅读 · 0 评论 -
Redis第六讲:Redis性能排查与调优
内存占用说明链路内存(动态)主要包括Input Buff、Output Buff、JIT Overhead、Fake Lua Link、Lua执行缓存等,例如可执行INFO命令,通过返回结果的Clients中查看客户端缓存信息。说明Input buff与Output buff与每个客户端的连接有关,通常较小。当执行客户端Range类操作或大Key收发较慢时,Input buff与Output buff占用的内存会增大,从而影响数据区,甚至会造成内存溢出OOM(Out Of Memory)。数据内存。原创 2022-10-29 17:27:17 · 1151 阅读 · 0 评论 -
Redis第十二讲:如何保证数据一致性、缓存设计模式、缓存穿透问题解决
布隆过滤器是由一个很长的二进制向量和一系列随机映射函数组成。它可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误判。数据结构采用了hashmap 位图解决缓存击穿的问题,有一个拦截机制,能迅速判断请求是否有效,他的内部维护了一系列合法有效的key,若是请求的元素在这个集合当中,说明请求有效。(误检率) 布隆过滤器有一定的误检率。1、ip地址的布隆过滤器2、redis中的防止缓存穿透。原创 2022-11-16 00:23:44 · 316 阅读 · 0 评论