自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 lsattr命令和chattr命令

阿里云报错提示如下图,进入该目录下使用rm命令无法删除,提示。

2022-08-31 18:59:38 750 1

原创 常用概念-分布式系统

分布式系统

2022-08-08 17:04:01 476 1

原创 常用概念-集群

集群

2022-08-08 17:03:17 213

原创 常用概念-水平扩展和垂直扩展

水平扩展和垂直扩展

2022-08-08 17:01:29 568

原创 msyql事务ACID特性及其实现原理

MySQL 的ACID特性介绍及其原理分析

2022-07-04 17:07:57 290

原创 基于Spring Task的定时任务实现及原理分析

很多情况下任务并非需要立即执行,而是需要在指定时间或指定频率执行,这不可能人工去操作,所以定时任务就出现了。基于Spring Task的定时任务实现及原理分析

2022-06-15 10:04:05 2903

原创 Spring security + Oauth2 + Jwt认证鉴权方案

基础概念用户身份认证用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问。常见的用户身份认证表现形式有:用户名密码登录,指纹打卡等方式用户授权用户认证通过后去访问系统的资源,系统会判断用户是否拥有访问资源的权限,只允许访问有权限的系统资源,没有权限的资源将无法访问http 3xx 重定向状态码重定向状态码用来告诉浏览器客户端,它们访问的资源已被移动, Web服务器发送一个重定向状态码, 告诉客户端新的资源地址在哪。浏览器客户端会根据提供的地址,重新发送新的Reques

2022-05-20 16:29:27 5030

原创 将sublime text添加进鼠标右键

在SublimeText3的安装目录下,创建sublime_addright.txt文件,复制下面代码到该文件中;修改文件的扩展名为inf格式,修改后为sublime_addright.inf;注意该步骤需要先使文件显示其扩展名,以防出现sublime_addright.inf.txt右键该文件,选择 安装 即可;[Version]Signature="$Windows NT$"[DefaultInstall]AddReg=SublimeText3[SublimeText3]hkcr.

2022-04-12 16:37:05 491

原创 java中的Cookie类

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入JSESSIONID用于标记一个会话(session),这样服务器可以知道该用户是否合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。Coo

2021-12-15 14:39:46 895

原创 近期临时笔记

第一章 概述解决秒杀高并发问题的方案,大并发的瓶颈在数据库缓存系统异步化横向扩展技术点Model的作用在控制器中,数据会存放到Model对象中,当需要生成HTML的时候,模板引擎会根据名字来定位数据。热加载主要是在idea的setting的compiler中勾选 build project automatically,且只能在debug模式下可用。也可以使用jrebel泛型的定义和使用?Result的封装秒杀的业务逻辑首先完成分布式session,之后用户浏

2021-12-13 22:36:07 1206

原创 在Chrome浏览器中安装postman扩展程序的两种方式

可使用chrome商店直接进入chrome商店,搜索安装postman应用。这种方式安装的扩张程序只能在浏览器的左上角的“应用”入口中打开。并且可以设置快捷方式。不可使用chrome商店现在postman离线包,在浏览器中的扩展程序中安装。这种方式安装的扩展程序出现在浏览器的右上角。两者对比如下图。...

2021-12-10 10:18:42 2801

原创 jedis报错Could not get a resource from the pool

本地java程序操作虚拟机中的redis服务,报错。解决思路检查本地和vmware虚拟机中的linux是否能互相ping通。出现ping不通的情况,一般都是虚拟机的网络适配器设置问题。参考正确配置:1)右键虚拟机-》设置-》网络适配器-》桥接模式。2)将本地的网络连接中的VMnet1中的ip4设置为自动获取。3)将虚拟机的网卡设置为自动获取。4)关闭本地和虚拟机的防火墙检查redis能否正常启动如果未正常启动,通过日志查看错误原因检查java程序是否正确读取redis相关配置读取配置时,字段

2021-12-09 13:45:56 1532

原创 java程序操作mysql报错“Host ‘windows10.microdone.cn‘ is not allowed to connect to this MySQL server“

mysql客户端可以正常连接mysql服务,但是在程序中操作数据库,报错"Host ‘windows10.microdone.cn’ is not allowed to connect to this MySQL server"。该问题是由于MySQL 没有开放远程登录的权限,执行以下方法即可。解决办法打开客户端,选中mysql数据库。在该库中执行sql语句select * from user where user='root';该语句查询出一条数据。将该条数据的Host列(第一列)有loca

2021-12-09 10:29:15 1436

原创 设计模式系列之 模板方法模式

定义在模板方法中定义一个算法的骨架,而将部分步骤延迟到子类中,使子类在不改变算法结构的情况下,重新定义算法中的部分步骤。通常情况下,算法指用于处理某类任务的确切的指令序列,是对处理逻辑的封装。模板方法模式定义中的骨架同样是对处理逻辑的封装,只是它的封装粒度比算法定义的粒度要稍大。模式结构该模式只包含了模板定义者和模板使用者两类。在java实现中,两者存在继承关系,模板定义者为基类,模板使用者为子类。模板基类该类被定义为抽象类,包括模板方法、公共方法、钩子方法、抽象方法。其中不变的共有方法

2021-12-07 15:32:54 2196

原创 java访问修饰符

private 和 public 两极分化,前者只能在类内部访问,后者在所有位置可访问default 包访问权限,只要在一个包下【不管是否存在父子关系】都可以访问,也是默认访问修饰符protected 包和子类可以访问。对于子类的访问权限,有说存在特殊情况,此处略去。...

2021-11-24 21:25:53 167

原创 java抽象类

定义如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。抽象方法是无法执行的,因此其所在类也无法实例化,必须要定义为抽象类,抽象类同样使用abstract修饰。即抽象方法是抽象类无法实例化的根本原因。抽象方法实质是多态思想的体现,即只定义了框架,其具体实现由子类完成。类似设计模式中对变化部分的处理。特点抽象类不能用来实例化对象,可以避免被new,声明抽象类的唯一目的是为了将来对该类进行扩充。如果一个类继承于一个抽象类,则子类必须实现父类的抽象方

2021-11-24 21:24:30 224

原创 java构造方法的三种调用场景

java的构造方法是一种特殊类型的方法,其作用用于初始化实例的内部字段。有三种调用场景在业务处理语句块中调用构造方法这是构造方法最常出现的调用场景,用于创建实例。定义了一个业务类,在业务处理语句块中,调用该类的构造方法创建该类实例。编译器会根据形参列表自动调用对应的构造方法,将实参传递给类字段,完成实例的初始化。在构造方法中调用另一个构造方法当类中有多个构造方法时,可在一个构造方法中使用this(形参列表)调用其对应的构造方法,此时this表示当前对象引用。需要注意的时,这种调用方式只能出现在主调

2021-11-24 21:08:23 1600

原创 java集合框架(2)Iterable接口

该接口是集合类的最顶层接口,其字面意义是可以迭代的意思,可以理解为实现这个接口的集合类获得了迭代遍历的能力。Iterable接口出现在 JDK1.5,只有iterator()一个方法,该方法返回一个迭代器实例引用,用于遍历当前集合实现类。此时Iterable接口此时定义了一种遍历集合的规范,即可使用迭代器遍历集合。同时,该接口的集合实现类也可以使用for-each遍历集合,但这只是一种语法糖,在经过编译之后产生的class文件中,for-each语句会转化为基于迭代器的遍历方式。在JDk1.8中,Ite

2021-11-15 22:14:32 440

原创 java集合框架系列(1)集合框架概述

持有一批引用在编程实践过程中,很多业务场景需要处理一批不确定数量的对象,而又没有必要为每一个对象创建引用(通俗讲,为对象起一个名字),使用对象引用来逐个持有这些对象。很自然地,容器可以解决这一问题。在逻辑层面,容器在内存中(不是持久化存储)为多项数据提供存储空间。此时,可以创建容器对象,并将这一批对象存储在容器对象中,即使用一个容器对象引用持有一批对象。对象封装一堆数据,集合存储一堆对象在java的实现层面,数组和集合类都可称为容器,都可以持有一批引用。集合扩充了数组其中,静态数组被java

2021-11-15 22:13:03 235

原创 java的两种比较器

比较算法日常生活中,如果想比较两个数的大小,可采用做差的方式,做差结果的正负可用来判断两个数的大小。假设A - B = C若整数C > 0,说明 A > B ;若整数C = 0,说明 A = B;若整数C < 0,说明 A < B;java的两种比较器均基于以上判断逻辑,将两个待比较的Object经过某种处理,返回一个整数值,然后根据整个整数值的正负判断大小。类似地,自定义实现比较器时,也是同样道理,经过逻辑处理之后,返回一个整数。内部比较器(基于Comparable

2021-10-22 11:27:36 1541

原创 设计模式系列之 策略模式

定义定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户。策略模式强调的是多个策略之间可以互换,这些策略是同一个接口的不同实现类。模式结构策略模式涉及三种角色抽象策略角色(Strategy)使用接口或抽象类实现,包含所有策略的公共行为规范。特别地,若公共行为以包含方法体的方式出现,而不是接口方法的方式,此时只能使用抽象类作为该角色的实现方式;环境角色(Context)持有一个Strategy引用,供客户端调用;具体策略类(ConcreteStr

2021-10-20 19:46:41 245

原创 三种方法返回值为空的处理方式

在学习策略模式时,给某方法传入参数key,返回对应的策略。此时存在key没有对应的策略,即该方法的返回值未空(null),对这种情况有不同的处理方式。1、直接返回null这种方式是最差劲的一种。由于返回值定义为StrategyInterface类型,后续可能有其他操作,直接返回null会造成空指针异常。 public static StrategyInterface getStrategy(String promotionKey){ StrategyInterface si = PR

2021-10-20 14:58:42 7663

原创 三种java常量封装方式(枚举、类、接口)

在工程代码里面不应该出现常量字符串和常量数字之类的硬编码内容,java常量可以放在类中,也可以放在接口中。既然使常量,需要保证其值不发生变化,这两种方式各有自己的实现方式。1、常量放在类中类通过一下两个约束,保证常量不被修改。1)私有化构造器,保证类不被创建和继承2)使用 private static final 关键字修饰常量public class Constants { /** * 构造器私有 * 私有化构造函数即可防止创建对象,表明该类只

2021-10-20 14:40:51 1004 1

原创 java的泛型

泛型是一个使用<>(尖括号的位置在使用泛型类的类名后面,ClassName)引起来的参数类型,既然是参数,一方面起到占位作用,另一方面只在具体使用时才会确定具体的类型。需要注意,泛型的类型只能时引用数据类型,不能是基本数据类型。并且,只有这个引用类型不确定,而其他操作时确定的。Jdk1.5前使用Object占位(代表所有要接收或返回的数据类型),之后使用泛型,即泛型替代Object的作用。默认情况,集合可以存储任意类型的数据元素(底层Object类型数组),但这种方式方便存储,但不利于后续处

2021-10-18 11:08:58 383

原创 详解java集合框架中的迭代器模式(Iterator接口 Iterable接口)

在设计模式系列之 迭代器模式中介绍了迭代器模式的基本知识,该模式主要包含了抽象迭代器、具体迭代器、抽象聚合类、具体聚合类。前两个类规范了对聚合类的遍历方式,后两个类主要用于存储数据和提供对应的迭代器。java集合框架涉及的众多类,譬如ArrayList、HashMap等,都可称为用于存储数据的聚合类,并且java的作者也为其提供了对应迭代器。随着java语言的版本更迭,其集合框架使用迭代器模式的方式同样发生了变化。本文基于不同版本JDK,分别介绍迭代器模式在java集合框架(除去Map相关接口)中应用。

2021-10-16 18:50:21 548

原创 设计模式系列之 迭代器模式

定义迭代器模式为遍历不同的容器结构提供统一的接口,提供一种方法顺序访问聚合对象中的各个元素,而又不暴露聚合对象内部的表示。迭代器模式的核心思想是数据的存储和遍历分离,同其他设计模式类似,迭代器的分离操作的优缺点共存。需要注意的是,因为每一个聚合对象的底层存储结构不同,因为需要为每一个聚合对象提供对应的迭代器。优点聚合对象只负责存储,遍历由迭代器完成,这就将聚合对象保护起来,外部用户使用只需调用迭代器即可。缺点遍历操作从聚合对象中剥离出去,由单独的迭代器类完成。这就增加了类的数量,进而增加系统的

2021-10-15 16:53:20 172

原创 详解堆(heap)

定义满二叉树最后一层全部都是叶子节点,其他各层的所有节点都有两个子节点的二叉树。其特点是第k层有 2k-1个节点,整棵二叉树有2k-1个节点。完全二叉树若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边。观察满二叉树可以发现,从根节点开始,对满二叉树排序(1-based),可以发现对于序号为 i 的节点,其左孩子的序号为 2 * i ,其右孩子的序号为 2 * i + 1。从定义可知,完全二叉树存在节点的位置和

2021-09-18 16:09:47 302

原创 详解二叉搜索树(Binary Search Tree,BST)

同线性结构的类似,树型结构也是一种组织数据元素的数据结构。这种结构中的数据元素存在一对多的关系,在逻辑上像一颗倒立(一对多)的树。若树中节点的分支个数的最大值为m,则该树被称为m叉树,因此二叉树指树中所有节点的的分叉最多只能有2个。特别指出的是,树型结构没有一叉树,最小的就是二叉树,即分支个数的最大值为1时,该树也可称为二叉树,甚至只有一个节点也是二叉树,null也是二叉树。二分搜索树又称为二分查找树、二分排序树,是一种添加了限定条件的二叉树。其定义为若树的左子树不为空,则左子树上的所有节点的值都小于

2021-09-08 11:25:35 463

原创 详解链表LinkedList

线性表是n个数据元素的有限序列,在存储线性表时,需要存储数据元素和元素之间的关系。根据存储关系的不同,在计算机的物理层面对线性表的表示分为两种形式顺序存储。线性表的元素可存储在地址连续的内存单元中。此时内存单元中存储的是元素的值,而元素的前后关系通过内存单元地址的前后关系隐式体现。链式存储。线性表的元素可存储在任意地址的内存单元中。其中,内存单元中存储元素值和用于指向直接后继的信息,元素的关系显式存储在节点中。顺序存储和链式存储都是线性表的底层基础实现。其中,使用链式存储的线性表可称为链表。链表

2021-08-31 13:37:40 169

原创 数字字符转为对应数字

问题描述在leetcode的第415-字符串相加时,需要把数字字符转为数字,例如把 char c = '1'转换为 int i = 1。由于char是基本数据类型,可以通过隐式类型转换为int值,且该值为字符对应的ASCll码,因此直接不能直接使用强制类型转换。 char cc = '1'; int i = (int)cc; System.out.println(i);//49.不是数字1.解决方式将基本数据类型char装箱为对应类Character,再将类转

2021-08-30 21:58:03 2587

原创 详解队列Queue

同栈类似,队列也是一种受限的线性表。其中受限指队列的操作是线性表的子集,它要求所有元素必须从一端插入新元素,从另外一端删除元素。添加元素的一端叫队尾 ,删除元素的一端叫队首。图1 队列逻辑模型根据底层使用的数据容器的不同,队列可分为以下两大类顺序队列:使用数组作为数据容器链式队列:使用链表作为数据容器队列的逻辑定义是其具备先进先出(first in first out,FIFO)的特点,这种特点决定了队列的应用场景。队列接口根据队列的描述,可知队列的操作包括出队、入队、查看队首、获取队

2021-08-26 17:14:55 423

原创 详解栈Stack

栈是限定仅在表尾进行插入或删除操作得线性表。从数据结构来看,栈也是一种线性结构。但由于其操作只能在表尾完成,因此是操作受限的线性表,也可称为限定性的数据结构。栈的逻辑定义决定了栈具备了后进先出(last in first out,FILO)的明显特征,基于该特征,栈在计算机世界中有很多应用场景。符号匹配中缀表达式转换为后缀表达式计算后缀表达式实现函数的嵌套调用HTML 和 XML 文件中的标签匹配网页浏览器中已访问页面的历史记录Java 中的程序计数栈、堆栈word的撤销操作栈的操作

2021-08-26 14:38:27 190

原创 实现java动态数组

java自身的数组属于静态数组,即无法自动伸缩容量。动态数组则是在静态数据的基础上,使用代码逻辑实现数组容量的自动伸缩,如下代码。java.util.ArrayList的实现原理与下面代码类似。import java.util.Arrays;/** * 数组有一个前置条件,一个挨着一个存储。 */public class Array<E> { /** * 步骤一 定义类变量 */ private E[] data; //size具有实际计

2021-08-26 14:24:40 255

原创 typora使用记录

参考文章简单语法说明详细语法说明插入代码typora插入代码分为行内和块间代码两种。行内代码指代码作为一行文字中的一部分,该行中即有一般文字也有代码,如下例子。用一个 ` 或者两个波浪线 `` 括起代码,代码会以主题中设置的样式出现在行内,但不会实现代码高亮。适用于代码少于一行。这个定义一个java的基本元素int a = 1; ,这一行也有文字也有代码。块间代码指代码单独占若干行,代码和文字不掺杂在一起。输入 ```后并输入语言名,换行,开始写代码,Typora 就会自动实现代码高

2021-08-26 11:22:40 942

原创 Idea常用快捷键

多看导航菜单和动作显示的快捷键切换选项卡alt + 左箭头 或者 alt + 右箭头ctrl + tab ,同chrome类似,可选。优先使用这种方式。光标回到编辑区esc键 : 回到编辑区,不关闭小面板shfit + esc 关闭小面板,并回到编辑区光标移动到项目目录alt + 1新建类选中左侧项目目录中的文件夹。若光标在编辑区,则先按下 alt +1 ,再使用上下键选择文件件。选中文件夹后,按下alt + insert。此时出现的就是右键–》new的

2021-08-26 11:14:16 1364

原创 String实例创建及池化分析

​在设计层面,java的字符串要求其值一旦定义,不可再发生变化。在实现层面,通过使用final修改String类的成员变量value实现其不可变性。在代码实践中,字符串极高的使用频率,那么同样存在大量使用重复字符串的场景。出于节省jvm内存空间和提升读取效率的考虑,结合java字符串的不可变性,很自然的考虑在内存中设计一个共享区,存放一份可能重复使用的字符串,使所用使用该字符串的程序指令直接从共享区读取,而不是每次使用时重新创建。​在java体系中,这个共享区被称为字符串常量池,把字符串放入字符串常量池的

2021-08-24 13:42:10 347

原创 详解java静态数组

数组是一种线性表顾名思义,数组就是数据组合在一起,是一个存储数据容器。其一般定义: 数组是具有相同数据类型元素的有序集合。从定义可知所有元素必须是相同数据类型。那么可以推导数组也是一种数据类型,且它的类型由其元素的数据类型决定。其中,数据类型刻画操作对象的特性,是一个值的集合和该值集上的一组操作的总称,即 数据类型 = 值域 + 操作。数组中元素是有序的。有序指数据元素之间的关系,即除首尾元素,其他元素都有且只有一个前驱元素、后继元素。​元素有序说明数组是一种线性表,在逻辑内存上,数组不管

2021-08-13 14:01:54 4100

原创 Mysql基础(14)mysql变量

mysql的变量分为系统变量和自定义变量系统变量系统变量由系统提供,用户不能定义,属于服务器层面,分为全局变量、会话变量,两者主要是作用域的不同。服务器每次启动会根据配置文件为所有的全局变量赋初始值,且针对所有会话连接有效。但要注意,某次启动之后修改了某个全局变量的初始值,重启服务之后,该全局变量仍会恢复到初始值,即全局变量不能跨重启有效。会话变量的作用域只在当前会话上下文。基本操作在执行系统变量相关操作时,会使用global和session两个关键字。一般全局变量使用global关键字,会话

2021-07-20 21:22:13 171

原创 一台主机配置多个git远程仓库

功能描述在一台主机上配置A、B两个远程仓库,将项目a提交到远程仓库A中,项目b提交到远程仓库B中。同样地,多个仓库的操作类似。操作步骤1、移除用户全局配置移除全局配置后,我们可以在各个A、B两个仓库中配置不同的用户名和邮箱信息,即以不同身份提交代码。# 移除全局配置账户git config --global --unset user.name#查看全局用户名git config --global user.name# 移除全局配置邮箱git config --global --unse

2021-07-19 10:35:39 410

原创 Mysql基础(13)mysql数据类型

数据类型在mysql中数据大致可以分为数值型。包括整型、小数(定点数、浮点数)字符型。较短的字符(char、vchar)、较长的文本(text、blob)日期整数(5种)mysql中整型分为以下五种类型tinyintsmallintmediumintint/integerbigint所占字节数(一个字节八位)12348无符号和有符号以上五种整型都可分为无符号和有符号,无符号整型的所有位数都用于表示数值,其数值范围>=0。有符号整型符

2021-06-15 16:22:05 206

空空如也

空空如也

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

TA关注的人

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