logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

run () 和 start () 区别

run () 只是普通 Java 方法,封装线程任务逻辑,如果直接调用 run,不会开启新线程,只会在当前线程执行。start () 用来启动线程,内部会调用 native 本地方法 start0,由 JVM 向操作系统申请创建真正操作系统线程;start 只能调用一次,多次调用抛出异常;为什么不能直接调用 run 实现多线程?直接 run 就是普通方法,没有新操作系统线程,串行执行,达不到多线程

#java
Redis 数据删除策略

按访问频次淘汰,热点数据永远留在内存,冷缓存优先清理,缓存命中率最高;,只动过期缓存,保护永久配置 key;简单临时缓存,统一过期时间:volatile-ttl。只靠过期删除,不配置 maxmemory 淘汰:过期冷 key 堆积,内存溢出 OOM;使用 noeviction:流量高峰新增缓存直接报错,接口大量 500;大量使用 DEL 删除大 list/hash:主线程阻塞,Redis 卡顿;改

#redis#spring#数据库
Redis 数据淘汰策略

(首选);;;禁止线上使用:noeviction、volatile-random、allkeys-random。Redis 内存淘汰一共 6 种策略,分为不淘汰、只删过期键、全量键淘汰三类;纯缓存业务优先 allkeys-lfu,混存永久数据用 volatile-lfu;默认 noeviction 不适合缓存场景。当内存达到 maxmemory 上限时自动触发,核心目的是控制内存占用、保证缓存正常

#java#spring#后端
Redis 单线程为什么速度很快

全部数据内存存储,无磁盘慢速 IO;IO 多路复用,单线程管理海量客户端连接;单线程无锁竞争、无线程切换开销;底层高度优化的高效数据结构;持久化、大键删除等耗时操作异步子线程执行;Redis6 还增加 IO 多线程优化网络吞吐,同时要注意避免慢命令阻塞主线程。

#redis#数据库#缓存
MyBatis 一级缓存、二级缓存

一级缓存是 SqlSession 本地缓存,默认开启,同会话重复查询生效,会话内增删改自动清空,多会话存在脏读;二级缓存是 Mapper 级共享缓存,需要手动开启、实体序列化,多 SqlSession 共享,仅当前命名空间更新才清空缓存,跨 Mapper 更新会出现脏读,复杂业务一般不推荐使用二级缓存。

#mybatis#缓存#spring
SpringCloud 服务注册发现 + Nacos 与 Eureka 对比

Eureka 是 AP 型注册中心,只负责服务发现,停止维护,存在自我保护易读到故障实例;Nacos 支持 AP/CP 切换,Raft 集群,区分临时持久实例,自带主动健康检查,同时集成配置中心,支持灰度权重,功能更强,是当前 SpringCloud 主流选型。

#spring cloud#eureka#spring
SpringCloud 微服务监控 + SkyWalking 完整讲解

Agent 探针(客户端)JavaAgent 无侵入式探针,项目启动时通过-javaagent参数挂载,不需要改一行业务代码。自动拦截 SpringMVC、Feign、Dubbo、MySQL、Redis、MQ 等中间件操作,采集链路、耗时、异常、JVM 指标,异步上报数据。优势:零代码侵入,适配 SpringCloud 全组件。OAP 后端服务(收集处理核心)接收 Agent 上报的链路、指标数据

#spring cloud#微服务#skywalking
Kafka 如何保证消息不丢失

生产者:acks=all、retries=3、开启幂等生产者;捕获发送失败记录日志重试。Broker:副本数 3、min.insync.replicas=2、监控 ISR 状态、延长消息保留时长。消费者:关闭自动提交 offset,业务处理成功后手动同步提交 offset。

#kafka#分布式
Kafka 和 RabbitMQ 区别 + 业务选型标准

RabbitMQ 是通用业务消息队列,路由灵活、原生支持延迟死信重试,适合订单支付等核心交易业务;Kafka 是高吞吐流式日志系统,擅长海量堆积与大数据实时计算,适合埋点、日志采集场景。选型核心判断:业务流程复杂、需要重试隔离选 RabbitMQ;海量数据流、实时流式计算选 Kafka。

#kafka#rabbitmq#分布式
synchronized 与 Lock 的区别

简单同步逻辑、代码量少、低并发场景:优先 synchronized,写法简洁不易出错;需要中断等待、超时放弃、公平锁、多条件精准唤醒、高并发场景:使用 Lock。synchronized 是 JVM 隐式锁,自动释放、使用简单,功能单一;Lock 是 API 显式锁,底层 AQS 实现,支持中断、超时、公平锁、多 Condition,灵活性更强,但需要手动在 finally 解锁。

#java
    共 13 条
  • 1
  • 2
  • 请选择