自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Serendipity的博客

渴望进大厂的猿

  • 博客(65)
  • 收藏
  • 关注

原创 索引失效原则与查询优化

索引失效原则与查询优化

2023-04-10 07:34:49 969 1

原创 SQL语句性能分析

sql语句性能分析

2023-03-20 11:37:35 4812 2

原创 InnoDB逻辑存储结构

mysql的存储结构,段,区,页,行,行格式的内容

2023-03-13 10:09:22 527

原创 索引的创建方式与设计原则

索引的创建方式与设计原则

2023-03-13 06:56:17 583

原创 Innodb索引还不清楚?看这一篇就够啦

索引Innodb

2023-02-19 10:54:42 452

原创 synchronized原理

偏向锁,轻量级锁,重量级锁的理解

2022-10-30 19:35:27 257

原创 软件设计原则

前言这段时间拿出自己以前的项目代码来看,不看不知道,一看吓一跳,这简直就是shi山,代码见毫无设计可言,可拓展性差,耦合度快到天上去了,决定因此学习设计模式来了解设计之美。内容学习自 https://www.bilibili.com/video/BV1Np4y1z7BU?spm_id_from=333.337.search-card.all.click1. 开闭原则开闭原则中,开:对扩展开放,闭:对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序

2022-05-10 15:22:24 280

原创 Redis的持久化机制

1. RDBRDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。Redis其实默认是会持久化的,即在你主动关闭Redis服务的时候,Redis会将数据保存为.rdb文件,但是如果Redis不是正常关机而是突然宕机,那么就不会触发RDB那么如何手动来执行RDB呢?savesave命

2022-05-04 19:20:07 2483

原创 Redis实现消息队列

在Redis中提供了三种实现消息队列的方式:List结构:基于List结构来模拟消息队列PubSub:基本的点对点消息模型Stream:较完善的消息队列模型1. List实现消息队列Redis的List数据结构类型是一个双向链表,而队列要求进,出口不能在同一个位置,所以可以利用List的添加取出命令来实现模拟消息队列。LPUSH,RPOPRPUSH,LPOP但是java在消费消息的时候,如果没有消息了,消费者应该是阻塞等待,等到有消息投递了,再继续消费信息,而上述命令不是阻塞式的,如

2022-05-04 16:11:58 18018 2

原创 分布式锁的实现(秒杀为背景)

1. 全局唯一ID在秒杀后生成的订单,订单ID的设计是值得考虑的。是采用数据库的自增?必然是不行的,首先若是一张订单表,其表的容量是有上限的,且订单的数据量巨大,若是采用多库多表进行存储,那么每个表自增ID都是从1开始,会造成订单ID的重复,且自增ID规律性强,容易被猜测,具有安全隐患。1.1 ID生成策略采用UUID雪花算法采用Redis的自增并且根据业务进行拼接采用Redis的自增并且根据业务进行拼接:第一位是符号位,永远为0,表示正数2-31位是时间戳,可以定义一个起始时间,然后

2022-05-03 16:25:43 986

原创 手写Mini版的Spring

这段时间有想法去学习手写Spring源码,在此记录一下自己手写的Spring的迭代版本趴。1. Spring的启动扫描到容器@Component@ComponentScan@Scope // 判断Bean对象是不是单例,值为singleton是单例,上述注解需要手写出来来实现简单实现Spring中的功能@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface Component {

2022-05-03 10:58:37 1325 1

原创 利用Redis进行数据缓存

1. 引言缓存有啥用?降低对数据库的请求,减轻服务器压力提高了读写效率缓存有啥缺点?如何保证数据库与缓存的数据一致性问题?维护缓存代码搭建缓存一般是以集群的形式进行搭建,需要运维的成本2. 将信息添加到缓存的业务流程上图可以清晰的了解Redis在项目中所处的位置,是数据库与客户端之间的一个中间件,也是数据库的保护伞。有了Redis可以帮助数据库进行请求的阻挡,阻止请求直接打入数据库,提高响应速率,极大的提升了系统的稳定性。3. 实现代码下面将根据查询商铺信息来作为背景进行代

2022-04-26 16:26:41 8154 1

原创 Redis实现登录注册

1. 引言在传统的项目中,用户登录成功,将用户信息保存在session中,这种方式在微服务架构中会产生一系列问题。例如在购物车服务具有多台服务器,当一个请求落在购物车1号服务器后,其session保存了用户信息,另一个请求落在了购物车2号服务器,发现没有用户信息,则重新需要进行登录。服务器之间有session不共享的问题。为了解决这一问题,tomcat提出了内存拷贝,即只需要配置一些信息即可实现多台服务器之间的session拷贝,但是这种解决方案也有缺陷,例如:浪费空间拷贝有延时,如果在延时内有请求

2022-04-24 12:20:52 4319 1

原创 java操作redis

1. 导论redis官网推荐的java操作redis的客户端官网地址:https://redis.io/docs/clients/#javaJedis:以Redis命令作为方法名称,学习成本低,简单实用。但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用Lettuce:Lettuce是基于Netty实现的,支持同步,异步和响应式编程方式,并且是线程安全的。支持Redis哨兵模式,集群模式,管道模式Redisson:Redisson是一个基于Redis实现的分布式、可伸缩的Jav

2022-04-23 20:19:20 539

原创 redis的基本命令

1 redis的数据类型StringListSetSortedSetHashGEOBitMapHyperLog前五种为基本数据类型,后三种为特殊类型。2 Redis命令在redis命令行界面,输入命令即可获取到对应数据类型的操作命令。help @数据类型进入官网 https://redis.io/commands/ 也可以查询对应的操作命令。2.1 Redis的通用命令...

2022-04-23 16:37:51 8051 1

原创 redis安装

1. 下载依赖因为redis是c语言编写的,所以需要gcc的依赖yum install -y gcc tcl2.上传redis安装包上传redis安装包放到usr/local/src 这个目录默认适用于放安装包3 解压安装包tar -xzf redis-6.2.6.tar.gz4 进入redis目录5 编译,安装redismake是编译命令,make install是安装命令make && make install 6此时/usr/local/bin目录下会有

2022-04-22 17:07:43 537

原创 反射...

问题根据配置文件re.properties指定信息,创建Cat对象并调用其hi方法(通过反射)配置文件classfullpath=com.zjh.reflection.Catmethod=hiCat类public class Cat { private String name = "招财"; public void hi(){ System.out.println("喵喵"); }}实现public void test1() thro

2022-04-22 10:35:54 251

原创 IO流..

1. File类1.1 File类的创建new File(String pathName) 根据路径构建一个File对象new File(File parent,String child) 根据父目录文件+子路径构建new File(String parent,String child) 根据父目录+子路径构建public class FileTest { @Test public void fileCreat() throws IOException { //

2022-04-21 19:43:27 432

原创 多线程基础

1. 线程相关的概念程序:是为了完成特定的任务,用某种语言编写的一组指令的集合,简单的来说就是我们的代码。进程:进程时指运行中的程序,比如QQ,启动QQ就启动了一个进程,操作系统就会为该进程分配内存空间。进程时程序的一次执行过程,或是正在运行的一个程序。是动态的过程,它有自身的产生、存在、消亡的过程。线程:线程由进程创建,是进程的一个实体,一个进程可以拥有多个线程。单线程:同一时刻,只允许执行一个线程。多线程:同一时刻,可以执行多个线程,例如QQ可以打开多个窗口。一个迅雷可以下载多个文件/软件

2022-03-02 15:21:09 714

原创 Collections工具类

1.Collections工具类Collections工具类是一个操作list,set,map的工具类Collections工具类中提供了一系列静态的方法对集合元素进行排序,查询,修改等操作2. 方法2.1 排序方法reverse(List) :反转list元素shuffle(list):对list集合元素进行随机排序sort(list) :根据元素的自然顺序对指定的list集合元素按升序排序sort(list,Comparator):根据指定的Comparator产生的顺序对list

2022-02-28 21:36:52 88

原创 Map集合及源码分析

1. Map接口的基本介绍(jdk8为例)Map与Collection并列存在,用于保存具有映射关系的数据:key-valueMap中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中Map中的key不允许重复,原因和HashSet一样(如果出现一样的情况,后者会将前者覆盖)Map中的value可以重复Map中的key可以为null,value也可以为null,但是key为null只能有一个,value为null可以有多个常用String类作为Map的key

2022-02-28 21:28:00 474

原创 Mysql事务知识点

Mysql事务事务:一个或者一组sql语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行案例:转账张三丰:1000元,郭襄:1000元张三丰给郭襄转账,那么sql语句有update 表 set 张三丰余额 = 500 where name = 张三丰update 表 set 郭襄余额 = 1500 where name = 郭襄这时如果在第一条语句执行成功后,在执行第二条语句执行失败,那么就会导致数据的错误,所以我们将两条语句组成一个执行单元,这个执行单元要么全部成功,要么全

2022-02-28 16:02:30 379

原创 Set集合及源码分析

1. Set接口基本介绍无序(添加和取出的顺序不一致),没有索引不允许重复元素,所以最多包含一个nullpublic static void main(String[] args) { HashSet<Object> set = new HashSet<>(); set.add(1); set.add(1); set.add("zjh"); set.add("zjh"); set

2022-01-26 22:16:31 918

原创 List集合及源码分析

1. 集合体系图Collection接口,Collection接口有两个重要的子接口 1.List 2. Set 。这俩的实现子类都是单列集合,即存放的都是单个单个的数据Map接口的实现子类是双列集合,即存放数据的形式是以key-value的形式进行存放2. Collectioncollection实现子类可以存放多个元素,每个元素可以是Object有些Collection的实现类,可以存放重复的元素,有些不可以有些Collection的实现类,有些是有序的(List),有些不是有序的(S

2022-01-24 18:27:57 356

原创 克鲁斯卡尔算法

1. 应用场景-公交站问题某城市新增7个站点(A, B, C, D, E, F, G) ,现在需要修路把7个站点连通各个站点的距离用边线表示(权) ,比如 A – B 距离 12公里问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短?2. 克鲁斯卡尔算法介绍克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路具体做法:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择

2022-01-24 13:12:19 94

原创 普利姆算法(Prim)

1. 应用场景-修路问题有胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?2. 最小生成树修路问题本质就是就是最小生成树问题, 先介绍一下最小生成树(Minimum Cost Spanning Tree),简称MST。给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树N个顶点,一定有

2022-01-21 16:37:28 762

原创 贪心算法.

1. 应用场景-集合覆盖问题假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号2. 贪心算法介绍贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果2.1 思路分析2.1.1 穷举法列出每个可能的广播台的集合,这被称为幂集。假设总的有n个广播

2022-01-21 14:54:01 270

原创 KMP算法

1. 应用场景-字符串匹配问题字符串匹配问题::有一个字符串 str1= ““硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好””,和一个子串 str2=“尚硅谷你尚硅你”现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-12. 暴力匹配算法如果用暴力匹配的思路,并假设现在str1匹配到 i 位置,子串str2匹配到 j 位置,则有:如果当前字符匹配成功(即str1[i] == str2[j]),则i++,j++,继续匹配下一个字符如果失配(

2022-01-19 14:03:31 54

原创 动态规划算法

1. 应用场景-背包问题背包问题:有一个背包,容量为4磅 , 现有如下物品要求如下:要求达到的目标为装入的背包的总价值最大,并且重量不超出要求装入的物品不能重复2. 动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题

2022-01-19 12:37:13 1759

原创 分治算法.

1. 分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……2. 分治算法的基本步骤分治法在每一层递归上都有三个步骤:分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题解决:若子问题规模较小而容易被解决则直接解,否则递

2022-01-17 11:51:39 120

原创 二分查找算法(非递归)

1. 二分查找算法(非递归)介绍二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法的运行时间为对数时间O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n步,假设从[0,99]的队列(100个数,即n=100)中寻到目标数30,则需要查找步数为㏒₂100 , 即最多需要查找7次( 2^6 < 100 < 2^7)2. 思路从中间查找,如果中间的这个数比我要找的数大,则向左查找,反之则向右查找。直到找到需要查找的数3. 代码实现/*

2022-01-17 11:18:20 1187

原创 数据库概述与Mysql安装篇

1. 为什么要使用数据库持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。2. 数据库与数据库管理系统2.1 数据库的相关概念2.2 数据库与数据库管理系统的关系数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针

2022-01-16 16:25:51 81

原创 图....

1. 为什么要有图线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图2. 图基本介绍图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:2.1 图的常用概念顶点(vertex)边(edge)路径无向图(下图)无向图: 顶点之间的连接没有方向,比如A-B,即可以是 A-> B 也可以 B->A .路径: 比如从

2022-01-16 14:16:15 86

原创 树....

1. 二叉树1.1 为什么需要树这种数据结构1.1.1 数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低1.1.2 链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)1.1.3 树存储方式的分析能提高数

2022-01-14 14:47:34 195

原创 堆排序..

1. 堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆举例说明我们对堆中的结点按层进行编号,映射到数组中就是下面这个样子:大顶堆特点:arr[i] >= arr[2i+1]

2022-01-11 13:54:39 44

原创 垃圾回收相关概念

1. System.gc()的理解在默认情况下,通过system.gc()或者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System.gc() 调用附带一个免责声明,无法保证对垃圾收集器的调用。(不能确保立即生效,即相当于提醒垃圾回收器进行垃圾回收。能不能马上执行呢是不一定的)JVM实现者可以通过System.gc() 调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动

2022-01-05 14:07:32 80

原创 垃圾回收相关算法

0. 对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活一般有两种方式:引用计数算法***和***可达性分析算法。1. 标记阶段:引用计数法2. 标记阶段:可达性分析

2022-01-04 17:28:48 67

原创 垃圾回收概述

1. 什么是垃圾垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。1.1 大厂面试题1.2 什么是垃圾?垃

2022-01-03 16:32:56 55

原创 String Table

1. String的基本特性1.1 String的特征String:字符串,使用一对" "引起来表示 或者 new String()String: 声明为final的,不可被继承String: 实现了Serializable接口:表示字符串是支持序列化的。String: 实现了Comparable接口:表示string可以比较大小String: 在jdk8及以前内部定义了final char[] value用于存储字符串数据。JDK9时改为byte[]1.2 String在jdk9中存储

2022-01-03 15:31:37 115

原创 执行引擎.

+# 1.执行引擎概述执行引擎属于JVM的下层,里面包括解释器及时编译器垃圾回收器执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是***物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的***,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操

2022-01-02 14:20:14 71

空空如也

空空如也

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

TA关注的人

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