缓存雪崩、击穿与穿透
本文参考自https://blog.csdn.net/qq_34827674/article/details/123463175
用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了
当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃的了,所以为了避免用户直接访问数据库,会用 Redis 作为缓存层。因为 Redis 是内存数据库,我们可以将数据库的数据缓存在 Redis 里,相当于数据缓存在内存,内存的读写速度比硬盘快好几个数量级,这样大大提高了系统性能。
引入了缓存层,就会有缓存异常的三个问题,分别是缓存雪崩、缓存击穿、缓存穿透。其总览如下图:
缓存雪崩发生原因通常我们为了保证缓存中的数据与数据库中的数据一致性,会给 Redis 里的数据设置过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,业务系统需要重新生成缓存,因此就会访问数据库,并将数据更新到 Redis 里,这样后续请求都可以直接命中缓存。
那么,当大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机时,如果此时有大量的用户请求,都无法 ...
Java equalsIgnoreCase()方法
equalsIgnoreCase()方法用于将字符串与指定的对象比较,不考虑大小写。
12345/** * @param anotherString -- 与字符串进行比较的对象。 * @return 如果给定对象与字符串相等,则返回 true,否则返回 false。 */public boolean equalsIgnoreCase(String anotherString)
equals() 会判断大小写区别,equalsIgnoreCase() 不会判断大小写区别:
123456789101112131415161718public class Test { public static void main(String args[]) { String Str1 = new String("runoob"); String Str2 = Str1; String Str3 = new String("runoob"); String Str4 = new ...
Java中的super关键字
本文参考自https://blog.csdn.net/pipizhen_/article/details/107165618
this关键字
能出现在实例方法和构造方法中
语法是this.和this()
this不能出现在静态方法中(比如main()方法中)
this()只能出现在构造方法的第一行,通过当前的构造方法去调用“本类”中的对应的构造方法,目的是:代码复用。
this在大部分情况下是可以省略的
在区分局部变量和实例变量的情况下不能省略,如下
123Public void setName(String name){ this.name = name;}
supper关键字
能出现在实例方法和构造方法中。
语法是super.和super()
super不能出现在静态方法中(比如main()方法中)
super在大部分情况下是可以省略的
那么supper在什么情况下是不可以省略的呢?
对比this,this指向的是对象自己。supper指向的是当前对象自己的父类型特征(也就是继承过来的东西:属性,方法等)
super和this区别是:this可 ...
java基础随笔9.4-9.10
Vector类简介Vecrtor类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:
Vector 是同步访问的。
Vector 包含了许多传统的方法,这些方法不属于集合框架。
Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。
构造方法1234567891011// 第一种构造方法创建一个默认的向量,默认大小为 10:new Vector();// 第二种构造方法创建指定大小的向量。new Vector(int size);// 第三种构造方法创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目。new Vector(int size,int incr);// 第四种构造方法创建一个包含集合 c 元素的向量:new Vector(Collection c);
1234567891011121314151617181920212223242526272829303132333435363738394041424344import java.util.*;public class VectorDem ...
<![CDATA[]]>用法
本文参考https://blog.csdn.net/weixin_45482313/article/details/107683038
被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如文本内容中含有特殊字符,那么就需要使用<![CDATA[<]]>转义。
此标记用于xml文档中,我们在使用mybatis时,很多时候会书写一些特殊字符:”<” , “>” , “>=”, “<=” ,“&”等,这些字符在xml文件中是非法的,如果不进行特殊处理,那么解析器会自动将这些特殊字符转义,就会报错。
所以我们要使用<![CDATA[]]>来包含不被xml解析器解析的内容。但要注意的是:
此部分不能再包含”]]>”
不允许嵌套使用
”]]>”这部分符号间不能包含空格或者换行
那么<![CDATA[]]>和xml转义字符的功能是一致的,只是应用场景与需求有所不同
<![CDATA[]]>不能适用所有情况,转义字符可以
对于短字符串<![CDATA[]]>写起 ...
Java中try...catch使用
本文参考自https://zhuanlan.zhihu.com/p/332320734
概要对于一个合格的Java程序员来说,在自己的代码逻辑中使用try…catch来进行异常处理是非常常见且必要的事情,因为它让你的程序更加健壮稳定。
异常分类首先,我们要清楚为什么要写try…catch,根本原因在于程序会出现可能的问题,而这个问题是指:阻止当前方法或者作用域继续执行的问题,它会阻止你的程序沿着你预先编写的逻辑继续往下运行。所有的这种可能出现的问题在Java中统一叫做Throwable。而Throwable又可以归为2大类: Error 和Exception,
Error其中,Error也叫错误,这部分是程序员无法处理的,很多情况下try…catch了也没有用,程序依然会crash退出,因为这部分属于Java虚拟机异常,跟你代码逻辑无关(其实还是有关的,可能是你代码设计有问题,比如程序中有很深的递归调用导致StackOverFlowError;数据处理时用有限的内存处理了太多的数据导致OutOfMemoryError等),这部分出现的异常最大的特点是:异常出现时,程序员无法用常规的t ...
IDEA使用随笔
idea右边找不到maven窗口不见了右侧边栏没有出现maven, 可能就是pom.xml文件没有识别, idea觉得这个项目就不是个maven项目,导致idea无法加载依赖包。
直接右键pom.xml,然后点击Add as Maven Project即可
idea配置全局mavenidea每次创建新项目都会默认使用C盘的.m2 Maven仓库,如下图
这就使得我们每次创建或打开一个新项目,都要重新配置maven,十分麻烦。
实际上,IDEA为新项目提供了一个全局的配置,如下图
我们可以在这里对新项目进行一个全局的配置,包括maven配置
IDEA无法识别Java文件如下图,无法正常识别.java文件
我们只需要把其上级目录的java文件夹设置为Sources Root即可
IDEA设置Java类注释和方法注释面板类注释模板设置在File –> settings –> Editor –> File and Code Templates –> Files
然后就可以自定义注释,可以参考如下形式:
1234567/** * @author ...
Java中的基本数据类型与包装类及之间的比较(==)
本文参考https://blog.csdn.net/qq_26287435/article/details/107852241
基本数据类型与包装数据类型原始数据类型也就是基本数据类型,八种基本数据类型和其包装类分别如下,其中包装类为引用数据类型
byte,java.lang.Byte(父类Number)
short,java.lang.Short(父类Number)
int,java.lang.Integer(父类Number)
long,java.lang.Long(父类Number)
boolean,java.lang.Boolean(父类Object)
char,java.lang.Character(父类Object)
float,java.lang.Float(父类Number)
double,java.lang.Double(父类Number)
两种数据类型的==比较Java中的基本类型及其包装类的比较(==)一直是一个比较头疼的问题,不仅有自动装箱和拆箱操作,部分的包装类还有对象缓存池,这就导致了这部分知识容易混淆。
这是因为对于==操作符来说,如果比较的数据是基本 ...
linux随笔学习
>:标准重定向符允许我们创建一个 0KB 的空文件。
touch:如果文件不存在的话,touch 命令将会创建一个 0KB 的空文件。
echo:通过一个参数显示文本的某行。
printf:用于显示在终端给定的文本。
cat:它串联并打印文件到标准输出。
vi/vim:Vim 是一个向上兼容 Vi 的文本编辑器。它常用于编辑各种类型的纯文本。
nano:是一个简小且用户友好的编辑器。它复制了 pico 的外观和优点,但它是自由软件。
head:用于打印一个文件开头的一部分。
tail:用于打印一个文件的最后一部分。
truncate:用于缩小或者扩展文件的尺寸到指定大小
Linux一些目录含义
/ : 用户根目录
/bin(binary) : 二进制执行文件目录,系统的一些指令,主要用于具体应用
/sbin(system binary) : 超级用户指令系统管理命令,这里存放的是系统管理员使用的管理程序,主要用于系统管理
/usr/bin : 后期安装的一些软件的安装脚本
/usr/sbin : 超级用户的一些管理程序
/usr/X11R6/bin: ...
nginx部署命令学习
安装依赖1yum -y install wget make cmake gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel
安装wget、cmake、gcc、pcre、zlip、openssl依赖
yum 命令yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
语法1yum [options] [command] [package ...]
options: 可选,选项包括-h(帮助),-y(安装过程中所有选项都选yes),-q(不显示安装的过程)等等
command: 要执行的操作,比如update、install等等
package: ...