
interview
文章平均质量分 84
面试
959y
奋斗ing
展开
-
[SpringBoot] 解决Redis相关问题
缓存穿透, 缓存击穿, 缓存雪崩原创 2023-03-15 15:21:50 · 1001 阅读 · 0 评论 -
数据脱敏方案
数据脱敏原创 2022-05-30 14:40:31 · 3330 阅读 · 0 评论 -
[SpringBoot] 统一功能处理
统一功能处理原创 2023-03-08 23:24:28 · 318 阅读 · 0 评论 -
Java8中@Contended和伪共享
@Contended方式实现减少伪共享的发生原创 2023-02-22 15:14:17 · 1786 阅读 · 0 评论 -
[业务逻辑] 订单超时怎么处理
订单超时如何处理的方案原创 2023-02-21 23:33:51 · 1312 阅读 · 0 评论 -
订单系统核心功能
文章目录1.订单中所包含的内容信息2.流程引擎2.1 正向流程2.1.1 订单创建2.1.2 订单支付2.1.3 订单生产2.1.4 订单确认2.1.5 订单完成2.2 逆向流程2.3 状态机3.订单系统的发展1.订单中所包含的内容信息为了使订单系统能够对订单进行高效、精准的管理和跟踪,订单会储存关于产品、优惠、用户、支付信息等一系列的订单实时数据,来和下游系统,如:促销、仓储、物流进行交互。以一个通用B2C商城的订单为例,梳理其包含的信息如下:这里要注意的是订单类型,随着平台业务的不断发展,品类原创 2022-04-15 23:17:30 · 2309 阅读 · 0 评论 -
Redis 的大 Key 对持久化的影响
Redis的大key对于持久化 AOF 和 RDB 的影响原创 2022-09-25 22:37:45 · 611 阅读 · 0 评论 -
Redis 大 key 要如何处理
redis缓存中的大key如何处理原创 2022-09-18 20:19:30 · 287 阅读 · 0 评论 -
Mysql 之 幻读
Mysq 幻读的面试题, 如何解决幻读的问题介绍原创 2022-09-15 21:05:15 · 329 阅读 · 2 评论 -
并发编程中的10个坑以及对应的解决方案
1. SimpleDateFormat线程不安全@Servicepublic class SimpleDateFormatService { public Date time(String time) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dateFormat.parse(time);.原创 2022-05-11 14:10:23 · 498 阅读 · 0 评论 -
ZooKeeper 的选举机制
ZooKeeper 集群中的三个服务器角色:Leader、Follower 和 Observer。其中,Leader 选举是 ZooKeeper 中最重要的技术之一,也是保证分布式数据一致性的关键所在。原创 2022-05-09 16:42:26 · 1533 阅读 · 0 评论 -
MySQL 是如何实现 ACID 的
文章目录1.ACID2.隔离性2.1 锁2.2 MVCC3.原子性4.持久性5.一致性1.ACID(Atomicity)原子性: 事务是最小的执行单位,不允许分割。原子性确保动作要么全部完成,要么完全不起作用;(Consistency)一致性: 执行事务前后,数据保持一致;(Isolation)隔离性: 并发访问数据库时,一个事务不被其他事务所干扰。(Durability)持久性: 一个事务被提交之后。对数据库中数据的改变是持久的,即使数据库发生故障。2.隔离性四种隔离级别。读未提交原创 2022-04-20 09:53:40 · 432 阅读 · 0 评论 -
订单系统的设计
文章目录1.订单系统在企业中的角色2.订单系统与各业务系统的关系2.1 对外系统2.2 管理中后台2.3 公共服务系统3.订单系统上下游关系4.订单系统的业务架构4.1 订单服务4.2 订单逻辑4.3 底层服务1.订单系统在企业中的角色在搭建企业订单系统之前,需要先梳理企业整体业务系统之间的关系和订单系统上下游关系,只有划分清业务系统边界,才能确定订单系统的职责与功能,进而保证各系统之间高效简洁的工作。2.订单系统与各业务系统的关系2.1 对外系统所有给企业外部用户使用的系统都在这一层,包括官网原创 2022-04-13 17:43:03 · 757 阅读 · 0 评论 -
高并发高可用高性能的解决方案
文章目录1.难题与方案2.具体措施2.1 页面静态化2.2 图片服务器分离2.3 数据库集群、库表散列1.难题与方案1、亿级流量电商网站的商品详情页系统架构面临难题:对于每天上亿流量,拥有上亿页面的大型电商网站来说,能够支撑高并发访问,同时能够秒级让最新模板生效的商品详情页系统的架构是如何设计的?解决方案:异步多级缓存架构+nginx本地化缓存+动态模板渲染的架构2、redis企业级集群架构面临难题:如何让redis集群支撑几十万QPS高并发+99.99%高可用+TB级海量数据+企业级数据备份与原创 2022-04-11 14:21:07 · 4624 阅读 · 0 评论 -
分库分表_入门
1.数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。1.1 IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表。第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 -> 分库。1.2 CPU瓶颈第一种:SQL问题,如SQL中包含原创 2022-04-10 15:05:42 · 338 阅读 · 0 评论 -
高并发之限流
文章目录1.算法1.1 计数器法1.2 漏桶算法1.3 令牌桶算法1.4 滑动窗口算法2.单机限流器2.1 GUAVA RateLimiter限流器2.2 Java的 AtomicInteger2.3 Semaphore信号量3.分布式限流器3.1 redis作为分布式限流器3.2 Seentinel限流3.3 Hystric 限流4.接入层限流器4.1 nginx限流之限制请求4.2 nginx限流之限制连接数4.3 nginx限流之设置白名单1.算法计数器漏桶算法令牌桶算法滑动窗口算法1原创 2022-04-09 13:36:51 · 2358 阅读 · 0 评论 -
高并发设计的技术方案
文章目录1.负载均衡2.分布式微服务3.缓存机制4.分布式关系型数据库4.1 垂直分表4.2 水平分表4.3 开源框架分类4.4 实现方案5.分布式消息队列5.1 常见的消息队列5.2 消息队列的场景6.CDN 内容分发网络7.其他8.总结1.负载均衡靠优化单台机器的内存、CPU、磁盘、网络带宽,使其发挥极致性能,已经不太现实。负载均衡,它的职责是将网络请求 “均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。原创 2022-04-01 15:26:41 · 4526 阅读 · 0 评论 -
Guava缓存
Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更为高效。<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version&原创 2022-03-11 20:05:20 · 1260 阅读 · 0 评论 -
谈谈ZGC_分区垃圾回收器
文章目录1.ZGC 概述2.内存多重映射3.染色指针3.1 三色标记3.2 染色指针4.内存布局5.读屏障6.GC 过程6.1 初始标记6.2 并发标记6.3 在标记6.4 初始转移6.5 并发转移6.6 重定位7.垃圾收集算法8.总结1.ZGC 概述ZGC(Z Garbage Collector) 是一款性能比 G1 更加优秀的垃圾收集器。ZGC 第一次出现是在 JDK 11 中以实验性的特性引入,这也是 JDK 11 中最大的亮点。在 JDK 15 中 ZGC 不再是实验功能,可以正式投入生产使用原创 2022-03-04 22:04:38 · 683 阅读 · 0 评论 -
消息队列_面试 [32]
文章目录1. 什么是消息队列2. 消息队列有哪些使用场景。2.1 消息通讯3. 消息队列如何解决消息丢失问题?3.1 生产者保证不丢消息3.2 存储端不丢消息3.3 消费阶段不丢消息4. 消息队列如何保证消息的顺序性5. 如何保证数据一致性,事务消息如何实现1. 什么是消息队列你可以把消息队列理解为一个使用队列来通信的组件。它的本质,就是个转发器,包含发消息、存消息、消费消息的过程。最简单的消息队列模型如下:我们通常说的消息队列,简称MQ(Message Queue),它其实就指消息中间件,当前业界原创 2022-03-01 19:15:54 · 1726 阅读 · 0 评论 -
面试问题_面试 [30]
文章目录1.谈谈项目中mq的理解2.mq宕机消息会丢失吗3.消息堆积问题4.mq的集群如何解决消息顺序执行问题5.数据一致性问题6.canal运行原理7.分布式配置中心的原理1.谈谈项目中mq的理解mq一般都是用来异步, 解耦, 消峰用的。异步操作, 接口是http协议的,在同步调用过程中, 如果接口响应比较慢的情况下, 会导致客户端反应超时, 比如有些业务的接口, 确实执行比较耗时, 那响应时间比较慢的情况下, 会导致我们的客户端会同步进行阻塞等待, 这种情况下回引发客户端超时, 会使得客户端触发原创 2022-02-28 00:07:51 · 1415 阅读 · 0 评论 -
AQS_面试 [31]
文章目录1.什么是AQS2.AQS的核心思想是什么?它是怎么实现的?3.AQS原理1.什么是AQSAQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。AQS是一个用来构建锁和同步器的框架,比如ReentrantLock,CountDownLatch, Semaphore,ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。AQS是用来构建锁或者其原创 2022-02-27 17:41:46 · 1193 阅读 · 0 评论 -
Spring Ioc 容器的设计
文章目录1.Spring IOC容器的设计2.BeanFactory和ApplicationContext的区别3.BeanFactory容器的设计原理4.BeanFactory的详细介绍5.ApplicationContext容器的设计原理6.ApplicationContext的详细介绍7.ApplicationContext容器扩展功能详解介绍1.Spring IOC容器的设计实现BeanFactory接口的简单容器实现ApplicationContext接口的高级容器Applicati原创 2022-02-26 00:33:26 · 719 阅读 · 0 评论 -
关于缓存的经典问题
文章目录1.缓存雪崩2.缓存穿透3.缓存击穿4.数据不一致5.数据并发竞争6.热点key问题7.BigKey问题1.缓存雪崩指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决方案:Redis 高可用,主从+哨兵,Redis cluster,避免全盘崩溃本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。逻辑上永不过期给每一个缓存数据增加相原创 2022-02-25 17:49:43 · 681 阅读 · 0 评论 -
Paxos算法详解
文章目录1.Paxos算法简介2.Paxos算法流程3.Multi-Paxos算法1.Paxos算法简介Paxos算法是一种基于消息传递且具有高容错性的一致性算法Paxos解决的问题是如何正确快速在一个分布式系统 中对某个数据达成一致。2.Paxos算法流程在一个Paxos算法系统中, 所有节点分为3类: Propersor提议者, Accepter接受者, Learner学习者Proposer: 提出提案 (Proposal)。Proposal信息包括提案编号 (Proposal ID) 和原创 2022-02-20 14:53:59 · 2890 阅读 · 0 评论 -
Kafka的ISR收缩机制
ISR什么时候收缩ISR什么时候扩展ISR的传播机制Broker宕机之后怎么ISR的收缩?Kafka在启动的时候,会启动一个副本管理器ReplicaManager,这个副本管理器会启动几个定时任务。ISR过期定时任务isr-expiration,每隔replica.lag.time.max.ms/2毫秒就执行一次。ISR变更的传播定时任务isr-change-propagation,每隔2500毫秒就执行一次。replica.lag.time.max.ms : 如果一个follower.原创 2022-02-18 23:58:56 · 2015 阅读 · 0 评论 -
面试_Java集合 [29]
文章目录1.常见的集合有哪些2.List 、Set和Map 的区别3.ArrayList4.ArrayList的扩容机制5.怎么在遍历 ArrayList 时移除一个元素6.Arraylist 和 Vector 的区别7.Arraylist 与 LinkedList 区别8.HashMap9.HashMap扩容过程10.红黑树的特点11.为什么使用红黑树而不使用AVL树12.在解决 hash 冲突的时候,为什么选择先用链表,再转红黑树13.HashMap 的长度为什么是 2 的幂次方14.HashMap为什原创 2022-02-18 18:12:48 · 254 阅读 · 0 评论 -
RocketMQ面试题 [28]
1.RocketMQ由哪些角色组成,每个角色作用和特点是什么2.RocketMQ中的Topic和JMS的queue有什么区别queue 就是来源于数据结构的 FIFO 队列。而 Topic 是个抽象的概念,每个 Topic 底层对应N个 queue,而数据也真实存在 queue 上的。3.RocketMQ Broker中的消息被消费后会立即删除吗「不会」,每条消息都会持久化到CommitLog中,每个Consumer连接到Broker后会维持消费进度信息,当有消息消费后只是当前Consumer的消原创 2022-02-18 00:40:18 · 998 阅读 · 0 评论 -
RocketMQ 不丢失消息的方式
文章目录1.RocketMq架构2.消息不丢失2.1 同步发送2.2 异步消息2.3 刷盘机制2.4 Broker 多副本和高可用2.5 消息确认2.6 Consumer 重试2.7 事务消息2.8 消息索引2.9 极端1.RocketMq架构Producer,Consumer,Brocker,Name Server2.消息不丢失1.Producer发送消息2.Brocker保存消息3.Consumer 消费消息4.Brocker主从切换2.1 同步发送public void send(原创 2022-02-07 20:18:53 · 1840 阅读 · 0 评论 -
对称加密、非对称加密、混合加密
文章目录1.对称加密1.1 对称加密的有优缺点1.2 密钥分配问题2.非对称加密2.1 非对称加密的优缺点3.混合加密4.常见的摘要算法1.对称加密AES,密钥长度有128/256/192。高级加密标准,是下一代的加密算法标准,速度快,安全级别高;DES:密钥为56, 数据加密标准,速度较快,适用于加密大量数据的场合。3DES: 密钥为168.是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。IDES: 密钥为128SM1: 密钥为128SM4: 密钥为128RC4, RC5,原创 2022-02-06 18:38:16 · 4504 阅读 · 2 评论 -
面试_ Spring [27]
1.BeanFactory-框架基础设施BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;ApplicationContext 面向使用Spring 框架的开发者,几乎所有的应用场合我们都直接使用 ApplicationContext 而非底层的 BeanFactory。BeanDefinitionRegistry 注册表:Spring 配置文件中每一个节点元素在 Spring 容器里都通过一个 BeanDefinition 对象表示,它描述了 Bean 的配置原创 2022-02-05 21:23:58 · 524 阅读 · 0 评论 -
MyBatis 二级缓存 关联刷新实现
1.MyBatis缓存介绍Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只开启一级缓存,二级缓存需要手动开启。一级缓存只是相对于同一个SqlSession而言。 也就是针对于同一事务,多次执行同一Mapper的相同查询方法,第一查询后,MyBatis会将查询结果放入缓存,在中间不涉及相应Mapper的数据更新(Insert,Update和Delete)操作的情况下,后续的查询将会从缓存中获取,而不会查询数据库。二级缓存是针对于应用级别的缓存,也就是针对不同的SqlSession做到缓存原创 2022-02-04 22:30:42 · 507 阅读 · 0 评论 -
MyBatis的插件机制及其用法
文章目录1.前言1.1 Mybatis四大对象1.2 Mybatis插件1.3 拦截阶段2.源码分析2.1 过程2.2 小结3.使用方法3.1 注册插件4.总结1.前言1.1 Mybatis四大对象org.apache.ibatis.executor.parameter.ParameterHandler:处理SQL的参数对象org.apache.ibatis.executor.resultset.ResultSetHandler:处理SQL的返回结果集org.apache.ibatis.execu原创 2022-02-03 19:29:49 · 1789 阅读 · 0 评论 -
阿里巴巴为什么禁止MyBatis批量插入几千条数据使用foreach
1.方法 foreach 批量插入由于项目的代码不可以外泄。一下是模拟的代码。<insert id="batchInsert" parameterType="java.util.List"> insert into USER (id, name) values <foreach collection="list" item="model" index="index" separator=","> (#{model.id}, #{model.nam原创 2022-02-01 19:50:56 · 361 阅读 · 0 评论 -
CompletableFuture异步编排
文章目录1.业务问题2.CompletableFuture介绍3.创建异步对象4.计算完成时回调方法5.线程串行化与并行化方法6.多任务组合7.优化商品详情页1.业务问题询商品详情页的逻辑非常复杂,数据的获取都需要远程调用,必然需要花费更多的时间。假如商品详情页的每个查询,需要如下标注的时间才能完成获取sku的基本信息 1.5s获取sku的图片信息 0.5s获取spu的所有销售属性 1ssku价格 1.5s那么,用户需要4.5s后才能看到商品详情页的内容。很显然是不能接受原创 2022-01-30 15:15:15 · 276 阅读 · 0 评论 -
面试_Mysql-2 [26]
文章目录1.一条 Sql 语句查询一直慢会是什么原因2.一条 Sql 语句查询偶尔慢会是什么原因3.为什么 VarChar 建议不要超过2554.删除表数据后表的大小却没有变动,这是为什么5.主从延迟要怎么解决6.buffer pool 是做什么的7.Sql 调优思路1.一条 Sql 语句查询一直慢会是什么原因「1.没有用到索引」比如函数导致的索引失效,或者本身就没有加索引「2.表数据量太大」考虑分库分表吧「3.优化器选错了索引」「考虑使用」 force index 强制走索引2.一条原创 2022-01-29 17:43:27 · 2323 阅读 · 0 评论 -
服务端如何防止重复支付
如图是一个简化的下单流程,首先是提交订单,然后是支付。支付的话,一般是走支付网关(支付中心),然后支付中心与第三方支付渠道(微信、支付宝、银联)交互,支付成功以后,异步通知支付中心,支付中心更新自身支付订单状态,再通知业务应用,各业务再更新各自订单状态。这个过程中经常可能遇到的问题是掉单,无论是超时未收到回调通知也好,还是程序自身报错也好,总之由于各种各样的原因,没有如期收到通知并正确的处理后续逻辑等等,都会造成用户支付成功了,但是服务端这边订单状态没更新,这个时候有可能产生投诉,或者用户重复支付。由.原创 2022-01-27 18:49:50 · 329 阅读 · 0 评论 -
Java的方法引用
文章目录1.方法引用2.方法引用与lambda3.方法引用的使用1.方法引用方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。计算时,方法引用会创建函数式接口的一个实例。方法引用通过方法的名字来指向一个方法。方法引用可以使语言的构造更紧凑简洁,减少冗余代码。方法引用使用一对冒号 ::2.方法引用与lambda3.方法引用的使用@Data@ApiModelclass Dat原创 2022-01-27 14:02:02 · 7379 阅读 · 0 评论 -
SpringBoot 配置文件敏感信息如何加密
MySQL 登录密码,Redis 登录密码以及第三方的密钥等等一览无余。这里介绍一个加解密组件,提高一些属性配置的安全性。文章目录1.引入包2.配置加密、解密的密码3.测试用例中生成加密后的秘钥4.将加密后的字符串替换原明文5.部署时配置 salt(盐)值1.引入包<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot原创 2022-01-26 20:43:50 · 980 阅读 · 0 评论 -
如何Mysql自增Id用完了如何
文章目录1.InnoDB系统自增row_id2.Xid3.Innodb trx_id4.thread_id5.Redis自增主键6.总结1.InnoDB系统自增row_id如果你创建的 InnoDB 表没有指定主键,那么 InnoDB 会给你创建一个不可见的,长度为 6 个字节的 row_id。InnoDB 维护了一个全局的 dict_sys.row_id 值,所有无主键的 InnoDB 表,每插入一行数据,都将当前的 dict_sys.row_id 值作为要插入数据的 row_id,然后把 dict_原创 2022-01-26 20:32:34 · 401 阅读 · 0 评论