自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 缓存雪崩(Redis)

缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是, 缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。

2022-11-22 21:34:21 343 1

原创 缓存击穿(Redis)

缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。

2022-11-22 21:32:02 296

原创 缓存穿透(Redis)

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

2022-11-22 21:30:27 237

原创 AOF持久化

与快照持久化相比,AOF 持久化的实时性更好,因此已成为主流的持久化方案。默认情况下 Redis 没有开启 AOF(append only file)方式的持久化,可以通过 appendonly 参数开启:在开启AOF持久化时,毎执行一条会更改redis的数据的命令,redis就会将该命令写入缓存server.aof_buf中,然后根据参数决定什么时间将其同步到磁盘的aof文件中为了兼顾数据和写入性能,用户可以考虑选项 ,让 Redis 每秒同步一次 AOF 文件,Redis 性能几乎没受到任何影响。

2022-11-21 23:37:02 250

原创 Redis事务(乐观锁和悲观锁)

乐观锁:每次执行操作的时候都会认为数据未被修改,但是在修改数据的时候会判断此期间数据是否被别人修改,一个事务执行原子操作后,对数据version进行修改,另一事务进行原子操作时对数据的version进行判断。悲观锁:每次执行操作的时候都认为数据会被别人更改,所以在每次操作的时候都会上锁,这样别人想要拿到这个数据时就需要等到释放时才能修改。所谓原子操作是指不会被线程调度机制打断的操作(两个线程之间的操作互不影响,每个操作都是独立的线程)在redis中的事务还是和之前学过的关系型数据库的事务有区别的。

2022-11-21 20:08:19 160

原创 顺序存储二叉数(Java)

从存储角度来看,我们之前讲的树在存储结构上不是顺序存储的,都是非线性的存储结构,所以我们可以从数组的角度来分析,数组和树可以相互转换,数组可以转换成树,树也可以转换成数组,数的示意图如下:我们在数组中的存储样式为:1.1、顺序存储二叉树的特点 对于顺序存储的树我们通常只考虑完全二叉树(规律) 第n个元素的左子节点为2*n+1(左子节点不为空的情况下) 第n个元素的右子节点为2*n+2(右子节点不为空的情况下) 第n个元素的父节点为(n-1)/2和之前讲的二叉树的遍历一样,只是遍历的逻

2022-11-16 14:53:27 338

原创 二叉树详解(Java)

也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。先访问左子节点,左子节点不为空就递归中序遍历,再访问根节点,然后再访问右子节点,右子节点不为空就递归中序遍历。先访问左子节点,左子节点不为空就递归后序遍历,再访问右子节点,右子节点不为空就递归后序遍历,然后再访问根节点。先访问根节点,再访问左节点,左节点不为空就递归前序遍历,再访问右节点,右节点不为空就递归前序遍历。若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=Log2(n+1)

2022-11-14 21:26:17 1334

原创 多节点树的层序遍历

对于多节点树,顾名思义就是一个根节点下面有两个及两个以上的节点,对于多节点数的遍历,就无法使用二叉树的前中后序的遍历方式了。

2022-11-13 19:37:10 578

原创 二分查找详解(Java)

在我们了解二分查找之前,我们先来了解线性查找线性查找的思想:我们在对数组遍历的时候,通过每个值每个值的判断去实现我们的待查找的值是否存在当前数组中,如果存在就返回当前的索引。此时我们发现当前数组的顺序是无序的,当我们在有序数组中去查找目标数的时候会出现什么样的情况呢?

2022-11-11 16:12:25 7288 7

原创 插入排序详解(Java)

插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。

2022-11-07 22:46:18 5371

原创 选择排序详解(Java)

选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置知道未排序元素个数为0。

2022-11-07 22:18:29 2082

原创 冒泡排序详解

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。

2022-11-07 21:54:51 179

原创 ArrayList详解(源码分析/扩容机制)

ArrayList的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用操作来增加ArrayList实例的容量。这可以减少递增式再分配的数量。ArrayList继承于 AbstractList,实现了 List这些接口。{是一个标志接口,表明实现这个这个接口的 List 集合是支持快速随机访问的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。ArrayList实现了 Cloneable接口。

2022-11-02 22:54:43 176

原创 Java集合常见面试题

Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是Collection接口,主要用于存放单一元素;另一个是Map接口,主要用于存放键值对。对于CollectionList、Set和Queue。Java 集合框架如下图所示:注:图中只列举了主要的继承派生关系,并没有列举所有关系。比方省略了,等抽象类以及其他的一些辅助类,如想深入了解,可自行查看源码。先来看一下Collection接口下面的集合。ListArrayList:Object[]数组VectorObject[]数组。

2022-11-02 22:40:39 80

原创 BigDecimal 详解

BigDecimal可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过BigDecimal来做的。浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用 equals 来判断。}}falsefalse具体原因我们在上面已经详细介绍了,这里就不多提了。想要解决浮点数运算精度丢失这个问题,可以直接使用BigDecimal来定义浮点数的值,然后再进行浮点数的运算操作即可。

2022-11-02 22:14:14 638

原创 Java 代理模式详解

这篇文章中主要介绍了代理模式的两种实现:静态代理以及动态代理。涵盖了静态代理和动态代理实战、静态代理和动态代理的区别、JDK 动态代理和 Cglib 动态代理区别等内容。

2022-11-02 20:01:36 136

原创 Java 反射机制详解

让我们在运行时有了分析操作类的能力,这同样也增加了安全问题。另外,反射的性能也要稍差点,不过,对于框架来说实际是影响不大的。但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此方式获取 Class 对象不会进行初始化。这些都是因为你可以基于反射分析类,然后获取到类/属性/方法/方法的参数上的注解。反射之所以被称为框架的灵魂,主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。

2022-11-02 19:20:37 522

原创 Mysql索引的创建与设计原则

MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。1. 普通索引2. 唯一性索引3. 主键索引4. 单列索引5. 多列(组合、联合)索引6. 全文索引7. 补充:空间索引:支持 B-tree、Full-text 等索引,不支持 Hash 索引;: 支持 B-tree、Full-text 等索引,不支持 Hash 索引;:支持 B-tree、Hash 等 索引,不支持 Full-text 索引;

2022-11-02 19:00:18 352

原创 Java序列化详解

如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。序列化: 将数据结构或对象转换成二进制字节流的过程反序列化:将在序列化过程中所生成的二进制字节流的过程转换成数据结构或者对象的过程对于 Java 这种面向对象编程语言来说,我们序列化的都是对象(Object)也就是实例化后的类(Class),但是在 C++这种半面向对象的语言中,struct(结构体)定义的是数据结构类型,而 class 对应的是对象类型。序列化。

2022-11-01 22:32:24 137

原创 值传递&引用传递

Java 中将实参传递给方法(或函数)的方式是值传递如果参数是基本类型的话,很简单,传递的就是基本类型的字面量值的拷贝,会创建副本。如果参数是引用类型,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。#

2022-11-01 22:26:15 63

原创 Mysql索引的数据结构

MySQL官方对索引的定义为:。索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。这些数据结构以某种方式指向数据, 这样就可以在这些数据结构的基础上实现高级查找算法。

2022-11-01 22:12:28 134

原创 Mysql存储引擎

MySQL从3.23.34a开始就包含InnoDB存储引擎。大于等于5.5之后,默认采用InnoDB引擎。InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。数据文件结构:(在《第 02 章_MySQL数据目录》章节已讲)

2022-11-01 22:07:55 325

原创 Mysql逻辑架构

这个SELECT查询先根据WHERE语句进行选取,而不是将表全部查询出来以后再进行gender过滤。这个SELECT查询先根据id和name进行属性投影,而不是将属性全部取出以后再进行过滤,将这两个查询条件连接起来生成最终查询结果。Caches & Buffers: 查询缓存组件MySQL内部维持着一些Cache和Buffer,比如Query Cache用来缓存一条SELECT语句的执行结果,如果能够在其中找到对应的查询结果,那么就不必再进行查询解析、优化和执行的整个过。

2022-11-01 22:07:04 80

原创 Mysql用户与权限管理

h参数后面接主机名或者主机IP,hostname为主机,hostIP为主机IP。P参数后面接MySQL服务的端口,通过该参数连接到指定的端口。MySQL服务的默认端口是 3306 ,不使用该参数时自动连接到 3306 端口,port为连接的端口号。u参数后面接用户名,username为用户名。p参数会提示输入密码。DatabaseName参数指明登录到哪一个数据库中。如果没有该参数,就会直接登录到MySQL数据库中,然后可以使用USE命令来选择数据库。

2022-11-01 22:06:03 434

原创 MySQL的数据目录

【代码】MySQL的数据目录。

2022-11-01 22:04:42 7785 1

原创 Linux下MySQL的安装与使用

错误。比方说原先列使用的字符集是utf 8 ,列中存储了一些汉字,现在把列的字符集转换为ascii的话就会出错,因为ascii字符集并不能表示汉字字符。这个列的类型来确定存储数据时每个列的实际数据占用的存储空间大小了。比方说我们向表t中插入一CREATE TABLE 表名 (列的信息)[[DEFAULT] CHARACTER SET 字符集名称][COLLATE 比较规则名称]]ALTER TABLE 表名[[DEFAULT] CHARACTER SET 字符集名称]

2022-11-01 21:59:14 625

原创 对象的创建

对象的创建这期我们主要讲解虚拟机内对象的详细情况,我们通过之前的学习,知道了一些对象的内存布局,但是对于对象的详细情况我们还不是很清楚,所以我们接下来开始深入去了解它。前言对象的实例化创建对象的方式:newa.new关键字创建b.单例模式(实际上还是new关键字创建)2.clone3.class对象的newInstance4.Class.forname(全类名)5.反序列化6.第三方类库的Objenesis创建对象的步骤:1.判断对象对应的类是否加载、链接初始化2

2021-11-19 13:29:47 1146

原创 Vue快速了解并上手-5

系列文章目录上期我们讲解了路由组件等功能,这期我们开始讲解如何使用vue快速有效的开发。目录系列文章目录1、路由嵌套2、过渡动画3、vue-cli3.1、安装3.2、cli创建项目3.3、项目的目录介绍4、使用cli去搭建一个项目总结1、路由嵌套如果存在 组件嵌套 ,就需要提供多个视图容器同时,router-link和router-view 都可以添加类名、设定样式路径:在原有的一级导航的template里面 配置 二级导航的router-link和router-view在相

2021-11-13 12:35:55 243

原创 Vue快速了解并上手-4

系列文章目录上期我们讲解了v-model等等的一些指令,这期我们来讲解组件方面的内容文章目录系列文章目录1、组件1.1、全局组件1.2、局部组件1.3、组件的嵌套1.4、组件间的通信2、路由2.1、基于js路由的实现2.2、vue-router实现2.3、代码实现vue-router2.4、实现动态路由2.5、to属性3、重定向4、编程式导航5、路由激活样式总结1、组件重复的页面结构,数据,逻辑 都可以抽提成一个组件特点 简单 高效 不重复组件和实例相似之处: data/method

2021-11-13 00:06:38 552

原创 Vue快速了解并上手-3

系列文章目录上期我们讲解了系统指令、过滤器、自定义指令等等内容,这期我们继续讲解vue相关知识文章目录系列文章目录1、计算属性1.1、计算属性实现表格内容的搜索2、在Vue中实现请求发送2.1、axios2.1.1、axios表格2.1.3、实现表格获取请求数据2.1.4、实现表格数据删除2.1.5、实现表格数据的添加2.1.6、实现表格数据的搜索2.2、watch-基本使用总结1、计算属性场景:当表达式过于复杂的情况下 可以采用计算属性 对于任何复杂逻辑都可以采用计算属性常用的计算属性的例

2021-11-12 16:51:19 1354 2

原创 Vue快速了解并上手-2

系列文章目录上期我们讲解了一部分vue的基础,表格等等知识,这一期我们继续讲解vue目录系列文章目录1、系统指令1.1、v-bind1.1.1、v-bind绑定class对象1.1.2、绑定class数组1.2、绑定style(对象)1.2.1、绑定单个style1.2.2、绑定style数组1.3、v-model1.3.1、使用v-bind实现v-model1.3.2、v-mode绑定其他元素1.4、v-cloak1.4、v-once2、过滤器2.1、局部过滤器2.2、全局过滤器2.3、过滤器的基本

2021-11-12 10:51:13 541

原创 Vue快速了解并上手-1

系列文章目录Vue现状:开发人员大部分在用Vue开发Vue学习曲线相比其他框架简单很多目录系列文章目录1、什么是Vue?2、Vue能做什么?3、Vue特点4、如何学习?5.2、HelloWorld5.3、实例选项el5.4、实例选项-data5.5、实例选项-methods5.6、插值表达式5.7、指令5.7.1、v-text和v-html的区别5.7.2、系统指令-v-if 和 v-show5.7.3、系统指令-v-on绑定事件5.7.4、-系统指令-v-for(数组)5.8、表格总结

2021-11-11 20:19:40 182

原创 ECMAScript6-Class的基本语法

系列文章目录上一期讲解了对象相关的内容,这一期讲解class的基本语法。目录系列文章目录总结提示:以下是本篇文章正文内容,下面案例可供参考ES6 提供了更接近传统语⾔的写法,引⼊了 Class(类)这个概念,作为对象的模板。通过class关 键字,可以定义类。基本上,ES6 的class可以看作只是⼀个语法糖,它的绝⼤部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像⾯向对象编程的语法⽽已。class Point { constructor(x, y)

2021-11-11 14:28:59 353

原创 ECMAScript6-对象新增方法

系列文章目录上期我们讲解了对象创建相关的知识,这一期我们讲解对象的新增方法相关内容。目录系列文章目录1、Object.is()2、Object.assign()3、Object.getOwnPropertyDescriptors()4、属性5、Object.keys(),Object.values(),Object.entries()总结1、Object.is()ES5 ⽐较两个值是否相等,只有两个运算符:相等运算符()和严格相等运算符(=)。它们都有缺点,前者会⾃动转换数据类型,后者的N

2021-11-10 22:10:21 271

原创 ECMAScript6-对象的扩展

系列文章目录前面我们学习了set和map相关的知识,这一期我们讲解对象相关的知识目录系列文章目录1、属性的简洁表示法总结1、属性的简洁表示法ES6 允许在⼤括号⾥⾯,直接写⼊变量和函数,作为对象的属性和⽅法。这样的书写更加简洁const foo = 'bar';const baz = {foo};baz // {foo: "bar"}// 等同于const baz = {foo: foo};上⾯代码中,变量foo直接写在⼤括号⾥⾯。这时,属性名就是变量名, 属性值就是变量值

2021-11-10 21:57:08 204

原创 ECMAScript6-Set和Map

系列文章目录上期我们讲解了数组方面的内容,这期我们将set和map方面的知识。es6 提供了两种新的数据结构 Set 和 Map文章目录系列文章目录1、Set2、Map总结1、SetSet 是⼀个构造函数,⽤来⽣成 Set 数据结构,它类似于数组,但是成员的值都是唯⼀的,没有重 复的值.初始化 Set 可以接受⼀个数组或类数组对象作为参数,也可以创建⼀个空的 Set<!DOCTYPE html><html lang="en"><head>

2021-11-10 20:56:26 229

原创 ECMAScript6-数组的扩展

数组的扩展上一期我们讲解了函数扩展的相关内容,这一期我们开始讲解数组的相关内容。数组的遍历for…of循环的使⽤实例Array.from()Array.of()数组实例的 find() 和 findIndex()数组实例的 some() 和 every()数组实例的 fill()目录数组的扩展1、数组的遍历2、For...of循环的使用实例3、Array.from()4、 Array.of()5、数组实例的 find() 和 findIndex()6、数组实例的 some() 和 e

2021-11-10 19:15:20 306

原创 ECMAScript6-函数的扩展

系列文章目录上一期我们学习了数值扩展的相关内容,这一期我们讲解函数的扩展相关知识。目录系列文章目录函数的扩展1、函数参数的默认值2、箭头函数3、箭头函数中this的理解4、箭头函数使⽤注意点总结函数的扩展函数参数的默认值箭头函数箭头函数中this的理解箭头函数使⽤注意点提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考1、

2021-11-10 18:23:37 182

原创 ECMAScript6-数值的扩展

数值的扩展上期我们讲解了运算符相关的内容,这期我们讲解数值的相关扩展。目录数值的扩展1、二进制和八进制表示法2、Number.isFinite(), Number.isNaN()3、Number.parseInt(), Number.parseFloat()4、Number.isInteger()5、Math 对象的扩展总结1、二进制和八进制表示法ES6 提供了⼆进制和⼋进制数值的新的写法,分别⽤前缀0b(或0B)和0o(或0O)表示。<!DOCTYPE html><

2021-11-10 17:17:31 64

原创 ECMAScript6-运算符的扩展

运算符的扩展上期我们讲解了字符串的相关内容,这期我们讲解运算符相关的知识。es6之扩展运算符 三个点(…)对象的扩展运算符数组的扩展运算符剩余参数的处理目录运算符的扩展1、对象的扩展运算符2、数组的扩展运算符3、使⽤三个点(...)对剩余参数的处理总结1、对象的扩展运算符<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title&gt

2021-11-10 15:42:19 62

空空如也

空空如也

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

TA关注的人

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