自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么是前后端分离?有哪些优点?

内容,前后端分离架构可能会导致搜索引擎难以获取动态生成的内容,影响。1.前后端解耦,接口复用(前端和客户端公用接口),减少开发量。2.各司其职,前后端同步开发,提升工作效率。后端只负责提供数据接口,不再渲染模板,前端获取数据并呈现。搜索引擎优化)由于搜索引擎通常只能抓取和索引静态。3.更有利于调度(mock)、测试和运维部署。4.缺点是对于单页面不好做。

2023-09-15 08:28:41 63

原创 MySQL和Redis如何保证数据一致性

如果需要在极端情况下仍然保证Redis和MySQL的数据一致性,就只能采用最终一致性的方案,比如基于RabbitMQ的可靠性消息通信来实现数据的最终一致性,还可以通过Canal组件监控MySQL里面的Binary log日志,把更新后的数据同步到Redis里面。2. 如果先写了库,后删除缓存,不幸的写库的线程挂了,导致了缓存没有删除,这个时候就会直接读取旧缓存,最终也导致了数据不一致情况。2.2、利用Canal + MQ异步重试机制,保证最终一致性,适合高并发场景,缺点时增加了系统的复杂性。

2023-08-14 10:01:59 112

原创 redis持久化机制

当一个进程调用 fork 时,操作系统会复制父进程的所有内存、文件描述符和其他资源到子进程中,使得子进程可以从父进程的状态开始执行。子进程是父进程的副本,它在独立的内存空间中运行,并拥有自己的唯一的进程 ID(PID)。以日志形式记录每一次的写入和删除操作,策略有每秒同步、每次操作同步、不同步,优点是数据完整性高,可以实时持久化,灾难恢复,缺点是性能低,开销大,恢复时间长。3.当持久化操作完成后,Redis 使用原子操作将临时文件替换为持久化文件,这个过程是非常快速的。空间效率高,占用空间小,能快速恢复。

2023-08-09 21:00:50 46 1

原创 Redis如何实现key的过期删除?

它放任 key 过期不管,但是每次获取 key 时,都会检查取得的 key 是否过期,如果过期,则删除该 key;:在设置 key 的过期时间的同时,会创建一个定时器(timer)。定时器在 key 的过期时间来临时,立即执行对 key 的删除操作。:Redis 每隔一段时间从设置过期时间的 key 集合中,随机抽取一些 key ,检查是否过期,如果已经过期做删除处理。只会在非做不可的情况下删除当前key,缺点是如果过期key不被访问那将永远占用在内存中。优点是保证过期key尽可能快的被删除,缺点是如果。

2023-08-01 14:20:07 250 1

原创 TCP四次挥手

服务器端数据发送完毕后,当服务器真正调用close关闭连接时,会向客户端发送结束报文段FIN包,此时服务器进入LAST_ACK状态,等待最后一个ACK的到来;服务器收到FIN结束报文段后,返回确认报文段ACK并进入CLOSE_WAIT状态,此时如果服务端有数据要发送的话,客户端依然需要接收。客户端主动调用close时,向服务端发送结束报文段FIN报,表示客户端不再发送数据,同时进入FIN_WAIT1状态;客户端收到服务器对结束报文段的确认,就会进入到FIN_WAIT2状态,开始等待服务器的结束报文段;

2023-07-18 11:35:17 36 1

原创 AOP是什么

是原理是利用反射来实现的,需要调用反射包下的Proxy类的newProxyInstance方法来返回代理对象,这个方法中有三个参数,分别是用于加载代理类的类加载器,被代理类实现的接口的class数组和一个用于增强方法的InvocaHandler实现类。jdk动态代理要求被代理类必须有实现的接口,生成的动态代理类会和代理类实现同样的接口,cglib则生成的动态代理类会继承被代理类。是利用asm开源包来实现的,是把被代理类的class文件加载进来,通过修改它的字节码生成子类来处理。● 第一:代码复用性增强。

2023-07-16 11:02:16 48 1

原创 Redis缓存穿透如何解决?

接口校验方法与 Guava 版的布隆过滤器方法都是在客户侧进行处理。布隆过滤器也可以在缓存层进行处理。缓存穿透是指客户端请求一个缓存和数据库中都不存在的 key。由于缓存中不存在,所以请求会透过缓存查询数据库;由于数据库中也不存在,所以也没办法更新缓存。利用布隆过滤器,我们可以拦截绝大多数不存在的 key,因此很适合解决 Redis 缓存穿透问题。(2)缓存空对象:找不到的数据也缓存起来,并设置过期时间,可能会造成短期不一致。(3)布隆过滤器:在客户端和缓存之间添加一个过滤器,拦截掉一定不存在的数据请求。

2023-07-15 10:02:23 41 1

原创 redis IO多路复用

调用后select函数会阻塞,直到有描述符就绪(有数据可读、可写、或者有except),或者超时(timeout指定等待时间,如果立即返回设为null即可),函数返回。poll改变了文件描述符集合的描述方式,使用了pollfd结构而不是select的fd_set结构,使得poll支持的文件描述符集合限制远大于select的1024。第一:epoll将文件描述符维护在内核态,不需要每次将想要监听的FD拷贝到内核态,直接通过epoll control将FD添加到内核态,后续一直维护epoll对象即可。

2023-07-15 10:00:29 188 1

原创 mysql哪些情况索引会失效

(2)在字符串 like 时左边是通配符。类似于’%aaa’。(1)where条件中有or,除非所有查询条件都有索引,否则失效。(6)mysql觉得全表扫描更快时(数据少),索引失效。(3)索引列参与数学运算或者函数,索引失效。(5)索引字段发生类型转换,索引失效。(4)违背最左匹配原则,索引失效。

2023-07-12 00:00:00 96 1

原创 聚簇索引和非聚簇索引的区别

覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。举个简单的例子,假设我们在员工表的年龄上建立了索引,那么当进行select age from employee where age < 20的查询时,在索引的叶子节点上,已经包含了age信息,不会再次进行回表查询。非聚簇索引(辅助索引):数据与索引分开存储,叶子节点存放的是数据行地址,先根据索引找到数据地址,再根据地址去找数据。

2023-07-11 18:27:44 604

2024秋招java开发、测试开发最全八股文

2024秋招java开发、测试开发最全八股文。纯手打总结,35000个字

2023-06-30

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

TA关注的人

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