自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis缓存的雪崩、击穿、穿透,淘汰策略,持久化

缓存不存在,数据库存在,高并发,大量的key原因:大量数据同时过期,Redis宕机解决方案:给缓存数据的过期时间上加上小的随机数,避免造成同时过期;互斥锁;服务降级;服务熔断;请求限流;Redis缓存主从集群:缓存不存在,数据库存在,高并发,少量的key原因:经常访问的热点数据过期解决方案:不给热点数据设置过期时间,一直保留:缓存不存在,数据库不存在,高并发,少量的key原因:要访问的数据既不在缓存也不在数据库解决方案:缓存空值或缺省值;

2022-11-21 17:07:25 923 1

原创 分布式架构下,session共享有什么方案?

实现session共享,可以水平扩展(增加Redis服务器),服务器重启session不丢失(不过也要注意session在Redis中的刷新/失效机制),不仅可以跨服务器session共享,甚至可以跨平台(例如网页端和APP端)进行共享。也就是每一次的接口访问,都不依赖于session、不依赖于每一次的接口访问,用jwt的token;3.session同步:对于服务器之间同步session,这样就可以保证每个服务器上都有全部的session信息,不过当服务器数量较多的时候,同步是会有延迟甚至同步失败的;

2022-11-19 17:30:56 413

原创 JWT和token是什么?如何利用token进行身份验证?

有没有一种不需要自己存放session信息就能实现身份验证的方式?使用token就可以!JWT就是这种方式实现的,通过这种方式服务器端就不需要保存session数据了,只要在客户端保存服务端返回给用户token就可以了,扩展性得到提升。这种方式会带来一些麻烦,比如需要我们保证保存session信息服务器的可用性、不适合移动端等。JWT本质上就是一段签名的JSON格式的数据。由于他是带有签名的,因此接受者便可以验证他的真实性。身份验证服务响应并返回了签名的jwt,上面包含了用户是谁的内容。

2022-11-19 16:25:20 723

原创 双写一致性问题如何解决

先读缓存,如果缓存中没有的情况下,才从数据库中读取1、先更新缓存,再更新数据库(不可取)2、先更新数据库,再更新缓存(不可取)3、先删除缓存,再更新数据库(不可取)4、先更新数据库,再删缓存(可取,有问题)

2022-11-18 17:52:46 453

原创 分布式锁--redis和ZooKeeper

第二步:服务B为了得到多,向Redis发起同样的命令,但是由于Redis中存在同名的key,且并未过去,因此执行命令失败,服务B 未能获得锁,服务B进入循环请求的状态,比如每秒向Redis发起请求,直达成功获取到锁。第四步:服务A执行完毕,为了释放锁,服务A会主动向Redis发起删除key的命令,注意:删除key前,一定要判断服务A持有的value与redis内存存储的value是否一致。指的是当且仅当key在Redis中不存在的时候执行成功,否则失败,情况2:加锁后,程序没有执行释放锁,程序挂了。

2022-11-18 15:25:40 836

原创 分布式ID生成方案

这主要依赖于Redis是单线程的,所以也可以用生成全局唯一的ID。这样虽然时间戳字段的值可能和之前的一样,但是回拨位的值不一样,生成的 ID 是不会重复的。2)在单机上是递增的,但是由于设计到分布式环境,每台机器上的时钟不可能完全同步,有时候会出现不是全局递增的情况(此缺点可以认为无所谓,一般分布式ID只要求趋势递增,并不会严格要求递增~90%的需求都只要求趋势递增)会对每条写命令进行持久化,即使Redis挂掉了也不会出现ID重复的情况,但由于incr命令的特殊性,会导致Redis重启恢复的数据时间过长。

2022-11-17 17:15:37 201

原创 分布式事务

协调者挂了,会通过选举出一个新的协调者如果处于第二阶段,假设参与者都没有挂,新的协调者会向所有的参与者来确认他们自身的情况来判断下一步的操作,但是假说说个别参与者挂了,比如协调者发送回滚命令,此时第一个参与者收到了并执行了,但是该参与者和协调者挂掉了,此时其他的参与者都没有收到命令,选举出来新的协调者询问其他参与者都OK,但是他不知道这个挂了的参与者到底什么情况,如果第二阶段发送的是提交的请求,不断重试,因为有一些参与者的事务已经提交成功,所以进行不断重试,直到所有事务提交成功,直到最后,进行人工介入。

2022-11-13 16:21:25 397

原创 http无状态问题

什么 Http 无状态:服务器不会保留客户端交易的任何状态和数据,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接,这就意味着服务器无法从连接上跟踪会话。也就是指用户每次发起的请求之间是没有相关性的,每次的请求结束就结束了,不会在做任何数据的存储。Http 请求的无状态带来的问题和影响:比如用户登录以后切换到别的界面进行操作,服务器端根本无法判别是哪个用户登录的,每次进行页面跳转的时候都要重新登录。如何解决 Http 请求的无状态的问题:1:Session(服务器端)2

2022-10-19 23:53:01 1123

原创 redis数据类型(5种)和底层实现

下面我们就学习Redis的数据结构,也是使用Redis要知道的最基础的知识。Redis是一个Key-Value型的内存数据库,它所有的key都是字符串,而value常见的数据类型有五种:string,list,set,zset,hash。Redis的这些数据结构,在底层都是使用redisObject来进行表示。redisObject中有三个重要的属性,分别是。表示保存的value的类型。。常用的命令有常用命令:等。...

2022-08-10 20:59:59 1154

原创 SpringMVC的工作流程

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息数据转换:对请求消息进行数据转换。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回给DispatcherServlet(中央处理器);是通过前端控制器controller中的注解来完成请求处理的。...

2022-08-06 11:58:30 115

原创 IOC理解总结

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。就是将对象的创建与对象之间的调用这一过程交给Sping进行管理。Ioc的目的:降低。而IoC的底层就是通过xml解析、工厂模式、反射结合使用进行操作。...

2022-08-06 10:59:40 708

原创 Log4j2基本使用

log4j2是log4j 1.x 的升级版,2015年5月,Apache宣布log4j1.x 停止更新。最新版为1.2.17。log4j2参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:1、异常处理:在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。2、性能提升:log4j2相较于log4j 1和logback都具有很明显的性能提升。...

2022-08-06 10:20:27 409

原创 CAP介绍

CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。:在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本):保证每个请求不管成功或者失败都有响应。:系统中任意信息的丢失或失败不会影响系统的继续运作。...

2022-08-05 20:25:38 1179

原创 ReentrantLock

ReentrantLock是可重入的互斥锁,虽然具有与相同功能,但是会比更加灵活

2022-07-25 20:57:49 155

原创 比较并交换 (CAS) 原理

synchronized相当于是悲观锁,CAS相当于是乐观锁。我现在要操作一个共享数据,我很悲观,我认为我操作的过程中,一定会被人给修改,会导致数据错误;我在操作这个数据之前,先给这个数据加了一把锁,synchronized,在我操作这个数据的期间,就只能是我来操作,其他任何人都操作不了。**乐观锁**我感觉在我操作这个数据的过程中,应该不会被人给修改。CAS操作包含三个操作数——、)和。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。...

2022-07-25 20:56:09 516

原创 doGet与doPost

doGet调用用于获取服务器信息,并将其做为相应放回给客户端。经由Web浏览器或通过HTML、JSP直接访问Servlet的URL时,一般用Get调用。

2022-07-21 21:01:23 343

原创 MyBaits

持久层框架:完成数据库操作的框架,替代了JDBC的作用

2022-07-21 20:48:59 204

原创 Cookie、cookie与session区别

当然,伪造的时候需要注意,直接copycookie文件到cookie目录,浏览器是不认的,他有一个index.dat文件,存储了cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的cookie文件,并且要从保证时间上骗过浏览器。sessionid是服务器和客户端连接时候随机分配的,如果浏览器使用的是cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。......

2022-07-19 19:56:55 924

原创 vue03

vue03

2022-06-05 11:31:24 76

原创 vue基础02

vue基础

2022-06-03 16:28:20 64

原创 前端框架基础 vue01

前端框架基础 vue01

2022-05-26 14:12:31 73

原创 JDBC调用存储过程、MySQL触发器

加载驱动Class.forName创建数据库连接conn= DriverManager.getConnection创建处理块CallableStatement cs = conn.prepareCall放入参数prepareCall.setString执行存储过程prepareCall.execute()关闭连接无参数的存储过程JDBC编码调用带参数的存储过程定义调用存储过程特殊存储过程参数inoutJDBC调用存储过程包含多个查询结果集JDBC调用MySQL触发器触发器是一种数据库对象,

2022-05-17 18:06:23 800

原创 MySQL存储过程

存储过程就是在数据库中定义的一些sql语句的集合,可以直接调用存储过程执行已经定义好的sql语句,从而避免重复编写相同的sql语句的问题。存储过程是一组为了完成特定功能的sql语句的集合,使用存储过程的目的在于将常用的复杂工作预先使用sql语句定义好,并指定一个名称存储起来,数据库管理系统会将存储过程进行编译和优化后存储在数据库服务器中。以后需要使用对应功能时,只需要通过存储过程名称即可直接调用。一个存储过程是一个可编程的函数,在数据库中创建并保存,可以SQL语句和一些特殊控制结构组成常见的sql语句在执行

2022-05-16 20:23:34 132

原创 MySQL事务

MySQL事务机制主要用于处理操作量大、复杂度高的数据在MySQL中只有使用了Innodb数据库引擎的数据表和数据库才支持事务事务处理可以用来维护数据的完整性,保证多条SQL语句要么全部执行,要么全部不执行事务用于管理insert、update和delete之类的DML语句,[select语句],其它类型的SQL语句没有事务的概念事务必须满足ACID4个条件:A原子性、C一致性、I隔离性、D持久性原子性:一个事务中的所有操作要么全部完成、要不一个都不做,不会结束在中间某个环节一致性:事务执行结束后数据库的完

2022-05-13 15:45:32 238

原创 数据库连接池、操作方法补充

数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的应用中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。1、什么是数据库连池连接Connection对象的缓冲区。由连接池的管理

2022-05-09 16:31:53 409

原创 JDBC编程

JDBC即java数据库互连,是java语言和数据库之间独立于数据库的连接标准API,JDBC从根本上来说是一种规范,具体的实现需要依赖于具体数据库生产商提供jar包【驱动】,提供了统一的接口用于访问不同的底层数据库,允许使用java语言编写不同的应用程序以访问数据库。为Java语言定义了一个SQL调用级别的统一界面为访问关系型数据库提供了一个标准的界面所谓的JDBC实际上就是一种用于执行SQL语句的API,可以采用一致的方式连接不同的额数据库系统,从而使用标准的SQL语言来存取数据库中的数据[外链图片转存

2022-05-08 14:20:36 91

原创 MySQL运算符、5类聚集函数

MySQL运算符主要包括3大类:比较运算符、算术运算符、逻辑运算符特殊操作比较运算符运算符语法说明=a=b如果参与计算的两个操作数相等则为true,否则false!=或者a!=b或者ab如果两个操作数不相等则true[1],否则false[0]<aa>b如果a大于b则true=b大于等于in或者not inin用于判断某个列的取值是否为指...

2022-05-02 10:54:33 158

原创 MYSQL基本使用

2022-04-26 18:55:54 528

原创 java知识点总结

Java部分知识点总结

2022-04-23 14:56:51 139

原创 反射机制、优缺点、应用场景

地方哈哈哈哈哈

2022-04-21 17:15:04 858

原创 分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样,那 在成绩排序的基础上按照年龄由小到大排序。

public class Test17 { public static void main(String[] args) { Student2 student = new Student2(); List<Student2> list = new ArrayList<>(); list.add(new Student2("1", 20, 90.0F)); list.add(new Student2("2", 22, 90.0F)); list.add(new..

2022-04-16 10:09:29 1396

原创 集合练习题

集合练习题1、产生10个1-100的随机数,并放到一个数组中,把数组中大于等于10的数字放到一个list集合中,并打印到控制台public static void main(String[] args) { Random r = new Random(); int[] arr = new int[10]; List<Integer> list = new ArrayList<>(); for (int i = 0; i < arr.length; i++)

2022-04-13 20:03:30 273

原创 #要求实现一个发牌程序,完成游戏挖坑的发牌处理

2022-04-12 16:21:59 2621

原创 集合collection、Map

2022-04-08 17:18:47 84

原创 集合框架总结

collectionmapCollection与MapJava定义两种集合,这两种集合的顶层接口分别是Collection和Map,这两个接口不能直接被使用,分别代表着两种不同的容器;Collection是存储对象元素的集合,派生出三个子接口,set,list,queue;Map代表的是键值对集合;List接口(1)List接口是允许重复的,指定索引的有序集合;有两个具体实现的类,分别是ArrayList和LinkedList;(2)ArrayList:是实现list接口的可变大小的数组;

2022-03-20 11:09:41 122

原创 函数式接口

函数式接口

2022-03-16 17:20:38 92

原创 Lambda表达式、

### 1. Lambda表达式**1.1 介绍**> Lambda表达式是一种没有名字的函数,也可称为闭包,是Java 8 发布的最重要新特性。> 本质上是一段匿名内部类,也可以是一段可以传递的代码。 还有叫箭头函数的…闭包> 闭包就是能够读取其他函数内部变量的函数,比如在java中,方法内部的局部变量只能在方法内部使用,所以闭包可以理解为定义在一个函数内部的函数> 闭包的本质就是将函数内部和函数外部链接起来的桥梁> > **1.2 特点**- 允许把函数作为一个方法

2022-02-23 15:58:31 173

原创 网络编程基础

网络编程基础

2022-02-14 16:58:08 71

原创 线程同步、生命周期

2022-02-10 10:26:24 71

原创 锁机制及synchronized和Lock

2022-02-07 18:56:33 327

空空如也

空空如也

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

TA关注的人

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