自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis的数据过期策略

3.如果业务中有置顶的需求,可以使用volatile-lru策略,同时置顶数据不设置过期时间,这些数据就-一直不被删除,会淘汰其他设置过期时间的数据。如果业务有明显的冷热数据区分,建议使用。2.如果业务中数据访问频率差别不大,没有明显冷热数据区分,建议使用allkeys-random,随机选择淘汰。4.如果业务中有短时高频访问的数据,可以使用allkeys-lfu 或volatile-lfu策略。使用allkeys-lru(挑选最近最少使用的数据淘汰)淘汰策略,留下来的都是经常访问的热点数据。

2023-05-26 23:29:59 541

原创 Redis缓存持久化

RDB因为是二进制文件,在保存的时候体积也是比较小的,它恢复的比较快,但是它有可能会丢数据,我们通常在项目中也会使用AOF来恢复数据,虽然AOF恢复的速度慢-一些,但是它丢数据的。AOF的含义是追加文件,当redis操作写 命令的时候,都会存储这个文件中,当redis实 例宕机恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据。Redis处理的每一个写命令都会记录在AOF文件, 可以看做是命令日志文件。RDB是一个快照文件,它是把redis内存存储的数据写到磁盘上,当redis实 例宕机恢复数据的。

2023-05-26 23:24:41 126

原创 Redis双写一致

②利用canal中间件, 不需 要修改业务代码,伪装为mysq|的一个从节点, canal通过读取binlog数据更新缓存。②排他锁:独占锁writeLock也叫,加锁之后,阻塞其他线程读写操作。①共享锁:读锁readLock,加锁之后,其他线程可以共享读操作。①使用MQ中间中间件, 更新数据之后,通知缓存删除。强一致性的,采用Redisson提供的读写锁。●允许延时一 致的业务,采用异步通知。

2023-05-26 23:19:19 131

原创 Redis缓存雪崩及解决办法

1.缓存雪崩是指在同- -时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到。◆给缓存业务添加降级限流策略 降级可做为系统的保底策略, 适用于穿透、击穿、雪崩。穿透无中生有key,布隆过滤null隔离。◆利用Redis集群提高服务的可用性。缓存击穿过期key,锁与非期解难题。雪崩大量过期key,过期时间要随机。◆给不同的Key的TTL添加随机值。缓存必考三兄弟,可用限流来保底。达数据库,带来巨大压力。◆给业务添加多级缓存。

2023-05-26 22:31:32 1286

原创 Redis缓存击穿及解决问题

第一可以使用互斥锁:当缓存失效时,不立即去load db,先使用如Redis的setnx去设置一个互斥锁, 当操作成功返回时再进行load db的操作并回设缓存,否则重试get缓存的方法。Key有大量的并发请求过来,这些请求发现缓存过期- -般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把DB压垮。①:在设置key的时候,设置一个过期时间字段一 块存 入缓存中,不给当前key设置过期时间。如果选择数据的强一致性,建议使用分布式锁的方案,性能上可能没那么高,锁需要等,也有可能。

2023-05-26 22:26:16 1649

原创 Redis缓存穿透及解决方法

可以使用的是redisson实现的布隆过滤器。它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。在一开始都是0, 当一个key来了之后经过3次hash计算,模于数组长度找到数据的下标然后把数组中原来的0改为1,这样的话,三个数组的位置就能标明一个key的存在。当然是有缺点的,布隆过滤器有可能会产生一定的误判, 我们一-般可以设置这个误判率,大概不会超过5%,其实这个误判是必然存在的,要不就得增加数组的长度,其实已经算是很划分了,5%以内的误判率一般的项目也能接受,不至于高并发下压倒数据库。

2023-05-21 15:34:53 101

原创 MySQL数据库基础及安装与配置

MySQL数据库基础

2022-07-26 11:30:03 496

原创 Linux 基本使用和 web 程序部署

Linux 基本使用和 web 程序部署

2022-07-23 12:16:03 957

原创 lambda表达式

Lambda表达式1. 代码简洁,开发迅速2. 方便函数式编程3. 非常容易进行并行计算4. Java 引入 Lambda,改善了集合操作

2022-07-22 11:26:04 350

原创 枚举-JAVA

枚举enum

2022-07-16 22:07:26 211

原创 反射-JAVA

反射重要的几个类: Class类 、Field类、 Method类、 Constructor类

2022-07-16 21:18:52 176

原创 Map和Set(图和集合)及哈希表 (哈希冲突的解决)

Map/Set 及实际实现类 HashMap/TreeMap/HashSet/TreeSet 的使用TreeMap 和 TreeSet 背后的数据结构搜索树的原理和简单实现HashMap 和 HashSet 背后的数据结构哈希表的原理和简单实现以及如何解决哈希冲突详解......

2022-07-16 20:45:16 565

原创 排序-JAVA

数据结构各种排序算法详解

2022-07-03 19:12:19 127

原创 JAVA对象的比较(equal、Comparble、compareTo、Comparator)

JAVA对象比较,equal、Comparble、compareTo、Comparator详解,以及优先级队列加入对象比较的模拟实现

2022-07-02 21:25:03 562

原创 优先级队列(PriorityQueue)-JAVA

优先级队列以及用堆的模拟实现详解

2022-07-02 19:52:21 941

原创 二叉树JAVA

二叉树详解

2022-06-30 20:20:56 254

原创 栈与队列JAVA

栈与队列详解以及模拟实现与面试题

2022-06-30 16:24:33 102

原创 JAVA习题练习20220430

选择题类声明中,声明抽象类的关键字是 ( )A publicB abstractC finalD class正确答案: BJAVA属于( )。A 操作系统B 办公软件C 数据库系统D 计算机语言正确答案: D在使用 interface 声明一个接口时,只可以使用()修饰符修饰该接口A privateB protectedC private protectedD public正确答案: DMath.round(11.5) 等于:()A...

2022-04-30 18:25:19 379

原创 JAVA习题练习20220426

关于抽象类与最终类,下列说法错误的是?A 抽象类能被继承,最终类只能被实例化。B 抽象类和最终类都可以被声明使用C 抽象类中可以没有抽象方法,最终类中可以没有最终方法D 抽象类和最终类被继承时,方法可以被子类覆盖正确答案: D 参考答案: final修饰的类不能被继承已知表达式int m[]={0,1,2,3,4,5,6};下面哪个表达式的值与数组下标量最大值相等?A m. length()B m. length-1C m. length()+1D m. length+1.

2022-04-26 21:50:06 306 1

原创 JAVA习题练习20220425

选择题public class Test {public static void main(String args[]) {int x, y;x = 5 >> 2;y = x >>> 2;System.out.println(y);}}A 0B 2C 5D 80正确答案: A 参考答案: 5 >> 2 相当于 5除于2两次,等于1 ,>>> 表示无符号右移,高位用0 填充,0001右移两位 0000,所以选A..

2022-04-25 20:46:33 844

原创 JAVA习题练习20220424

选择题下列与队列结构有关联的是()A 函数的递归调用B 数组元素的引用C 多重循环的执行D 先到先服务的作业调度正确答案: D类所实现的接口以及修饰不可以是()。A voidB publicC abstractD final正确答案: D下列关于栈叙述正确的是( )。A 算法就是程序B 设计算法时只需要考虑数据结构的设计C 设计算法时只需要考虑结果的可靠性D 以上三种说法都不对正确答案: D参考答案:算法是指解题方案的准确而完整的描

2022-04-24 21:41:17 253

原创 JAVA习题练习20220422

选择题关于下列程序段的输出结果,说法正确的是:( )public class MyClass{static int i;public static void main(String argv[]){System.out.println(i);}}A 有错误,变量i没有初始化。B nullC 1D 0正确答案: D在 Java 中,存放字符串常量的对象属于( )类对象。A CharacterB StringC StringBufferD Vector.

2022-04-22 20:11:10 169

原创 链表面试题

1.求环的入口点/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNo.

2022-04-09 23:37:24 101

原创 习题练习20220406

1、栈的压入、弹出序列给出一个入栈序列pushV和出栈序列popV, 判断出栈序列是否满足条件直接模拟即可。因为弹出之前的值都会先入栈,所以这里用个栈来辅助。初始化:用指针i指向pushV的第一个位置, 指针j指向popV的第一个位置 如果pushV[i] != popV[j], 那么应该将pushV[i]放入栈中, ++i 否则,pushV[i]==popV[j], 说明这个元素是放入栈中立马弹出,所以,++i, ++j,然后应该检查popV[j] 与栈顶元素是否相等,如果相等,++j,

2022-04-06 23:02:23 68

原创 LinkedList与链表

LinkedList的底层是双向链表结构(链表后面介绍),由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。1. LinkedList实现了List接口2. LinkedList的底层使用了双向链表3. LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问4. LinkedList的任意位置插入和删除元素时效率比较高,时间复杂度为O(1)L.

2022-04-05 12:32:54 1127

原创 你知道Arraylist的底层是怎样是实现的吗

ArrayList常见操作ArrayList的遍历ArrayList 可以使用三方方式遍历:for循环+下标、foreach、使用迭代器public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);// 使用下标+for遍历for ..

2022-04-04 20:17:06 209

原创 JAVA习题练习-String

1、public class Example{ String str = new String("good"); char[ ] ch = { 'a' , 'b' , 'c' }; public static void main(String args[]){ Example ex = new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str + " and ").

2022-04-04 19:52:58 603

原创 Iterable、Collection、List 的常见方法签名以及含义

1.Iterable集合框架最顶端的接口,实现接口的遍历。迭代器接口public interface Iterable<T> { Iterator<T> iterator(); default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { ...

2022-03-30 21:58:12 327

原创 异常-JAVA

在Java中,将程序执行过程中发生的不正常行为称为异常System.out.println(10 / 0);// 执行结果Exception in thread "main" java.lang.ArithmeticException: / by zeroint[] arr = {1, 2, 3};System.out.println(arr[100]);// 执行结果Exception in thread "main" java.lang.ArrayIndexOutOfBound.

2022-03-30 21:12:09 138

原创 String类

在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符、串应用又非常广泛,因此Java语言专门提供了String类ublic static void main(String[] args) {// 使用常量串构造String s1 = "hello bit";System.out.println(s1);// 直接newString对象Stri

2022-03-29 22:49:12 365

原创 抽象类与接口-JAVA

1. 抽象类1.1 抽象类概念在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类1.2 抽象类语法在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体// 抽象类:被abstract修饰的类public abstract class Shape {// 抽象方法:被abstract.

2022-03-04 21:20:01 1334

原创 继承与多态-java

继承:继承就是保持已有类的特性而构造新类的过程。继承后,子类能够利用父类中定义的变量和方法,就像它们属于子类本身一样。单继承:在类层次中,子类只继承一个父类的数据结构和方法,一个类只有一个父类多继承:在类层次中,子类继承了多个父类的数据结构和方法,一个类允许有多个继承public class Animal{ String name; int age; public void eat(){ System.out.println(name + "正在吃饭

2022-03-01 23:02:23 112

原创 static关键字-JAVA

一、static关键字的特点:static是一个修饰符,用于修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。1. static修饰成员方法static修饰的方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都必须依赖具体的对象才能够被调用。 ...

2022-02-28 21:42:39 73

原创 类与对象JAVA详解

一、面向对象简述面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言。但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在

2022-02-22 21:40:17 162

原创 JAVA习题练习20220220

实现一个方法 toString, 把一个整型数组转换成字符串. 例如数组 {1, 2, 3} , 返回的字符串为 "[1, 2, 3]", 注意 逗号 的位置和数量.实现一个方法 copyOf, 对一个整型数组进行拷贝, 得到一个新的数组.给定一个有序整型数组, 实现二分查找import java.util.Arrays;public class Testdemo { public static void main(String[] args){ int[] ..

2022-02-20 21:05:01 47

原创 JAVA习题练习20220219

实现一个方法 avg, 以数组为参数, 求数组中所有元素的平均值(注意方法的返回值类型).实现一个方法 sum, 以数组为参数, 求数组所有元素之和.实现一个方法 printArray, 以数组为参数, 循环访问数组中的每个元素, 打印每个元素的值.有一组数据,只有一个数字是出现一次,其他是两次,请找出这个数字。求斐波那契数列的第n项。(迭代实现)求1!+2!+3!+4!+........+n!的和求 N 的阶乘 。...

2022-02-19 19:16:46 111

原创 JAVA-方法的重载

方法重载2.1 为什么需要方法重载由于参数类型不匹配, 所以不能直接使用现有的 add 方法.一种比较简单粗暴的解决方法如下:class Test {public static void main(String[] args) {int a = 10;int b = 20;print(a, b);} public static void print(int x, int y) {System.out.println("x = " + x + " y = " + y);}} public cla

2022-02-18 21:02:52 254

原创 JAVA习题练习

1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)2. 判定一个数字是否是素数3. 打印 1 - 100 之间所有的素数4. 输出 1000 - 2000 之间所有的闰年5. 输出乘法口诀表6. 求两个正整数的最大公约数7. 求出0~999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。)8. 写一个函数返回参数二进制中

2022-02-17 22:06:29 155

原创 C语言初阶-一维数组

一维数组的创建和初始化。数组的创建数组是一组相同类型元素的集合。 数组的创建方式:type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小素组创建的实例://代码1int arr1[10];//代码2int count = 10;int arr2[count];//数组时候可以正常创建?//代码3char arr3[10];float arr4[1];double arr5[20];注:数组创建, []

2022-02-16 20:23:32 74

原创 C语言初阶-函数

函数是什么?数学中我们常见到函数的概念。但是你了解C语言中的函数吗? 维基百科中对函数的定义:子程序在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。C语言中函

2022-02-15 19:29:44 283

空空如也

空空如也

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

TA关注的人

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