面试题
文章平均质量分 67
牛奶味的团子
这个作者很懒,什么都没留下…
展开
-
为什么阿里巴巴不让使用JDK自带的线程池?
允许自定义更多的参数,如线程存活时间、队列类型和大小等,这样可以根据实际应用场景调整线程池行为,使之更符合业务需求,提高性能并防止潜在的问题。提供的预设线程池配置对拒绝策略的处理不够明确,开发者可能不清楚在任务堆积严重时,线程池具体是如何处理新提交的任务的。: 自定义线程池可以更容易地集成到监控系统中,方便开发者随时观察线程池的状态,及时发现问题并进行调整。手动创建线程池,是为了增强系统稳定性,降低资源耗损风险,并提升开发者对线程池行为的控制能力。工厂方法创建的线程池往往具有固定的配置,比如。原创 2024-04-15 22:11:22 · 129 阅读 · 0 评论 -
线程池中核心线程数与最大线程数与缓冲任务队列的关系?
当核心线程数全部处于活动状态且仍有新任务提交时,线程池将创建额外的线程(临时工),直至线程总数达到maximumPoolSize。若队列已满(即有界队列的情况),并且线程数未达到maximumPoolSize,线程池会创建新的非核心线程(临时工)来执行任务。当线程数达到maximumPoolSize时,线程池不会再创建新的线程,除非现有线程中有线程终止。核心线程是线程池中最基础的线程数,即使在没有任务执行时,也会一直存活在线程池中。当队列满且线程数未达最大值时,增加非核心线程执行任务。原创 2024-04-15 22:06:12 · 335 阅读 · 0 评论 -
JDK自带的线程池有哪些?
每种线程池都有其特定的应用场景,选择合适的线程池可以根据任务的特性(如任务的数量、执行时间长短、是否需要周期执行等)来确定。Java JDK 自带的线程池主要包含以下几种类型,这些线程池都是通过。原创 2024-04-15 22:01:54 · 270 阅读 · 0 评论 -
调度器的应用场景
1、RabbitMQ的队列慢日志,定时抓取慢日志,比如早上8点上班前定时扫描,发送到邮箱等进行通知。2、定时监控队列情况,比如监控队列中消息的数量,超过5000个发钉钉群,打电话等进行通知。4、在仓库管理系统中,使用调度器定期扫描有问题的订单。3、定期扫描超过发车时间多久后定期删除。原创 2024-04-15 15:07:12 · 534 阅读 · 2 评论 -
SpringBoot整合RabbitMQ-应答模式
RabbitMQ 中的消息应答模式主要包括两种:自动应答(Automatic Acknowledgement)和手动应答(Manual Acknowledgement)。(一般交换机发送消息,RabbitMQ只有在接收到消费者的确认后才会将消息从队列中删除。)在队列发送消息时,首先会先复制一份给消费者,在收到消费者的确认消息后,队列才会将队列中的消息删除。原创 2024-04-09 20:40:06 · 824 阅读 · 0 评论 -
SpringBoot整合RabbitMQ
答:启动的时候 ,会根据这个队列或者交换机的名称先去查找有没有这个队列或者交换机,如果有什么都不做,如果没有创建一个新的新的队列和交换机。我们在启动时每次注册队列和交换机,启动多次为什么不报错?3、DirectExchange(直连交换机)3.3、发送例ordering对象类型消息。消费者2(DirectConsumer2)消费者3(DirectConsumer3)需要添加配置类,将对象转换成字符串。2、配置RabbitMQ连接。ordering对象。原创 2024-04-08 12:10:47 · 598 阅读 · 0 评论 -
Redis慢日志
客户端从发送命令到获取返回结果经过了以下几个步骤:1. 客户端发送命令2. 该命令进入 Redis 队列排队等待执行3. Redis 开始执行命令 - Redis 命令执行完成4. 命令执行结果返回给客户端Redis 慢查询日志统计的时间,只包含第三步的 Redis 命令从开始执行到执行完成的时间。原创 2024-04-07 10:25:39 · 934 阅读 · 0 评论 -
docker介绍
Docker是一款开源的应用容器引擎,由Docker Inc.公司开发,自推出以来迅速成为云计算领域中的关键技术之一。Docker利用Linux的内核特性如cgroups(Control Groups)和namespaces实现了资源隔离与限制,可以在同一主机系统上轻松地创建和管理多个容器实例,每个容器都像是一个轻量级的、独立运行的虚拟环境。原创 2024-03-31 16:51:36 · 1369 阅读 · 0 评论 -
redis中bitmap的使用及场景,如何操作
在签到统计时,每个用户一天的签到用 1 个 bit 位就能表示,一个月(假设是 31 天)的签到情况用 31 个 bit 位就可以,而一年的签到也只需要用 365 个 bit 位,根本不用太复杂的集合类型。这意味着你可以用一个Bitmap来跟踪多达数百万甚至数十亿的状态,只要状态总数不超过 2^(8 * (512 MB / 1 byte)),即大约 2^32 个状态(考虑到字符串末尾的结束符,实际可用的偏移量上限是 2^32 - 1)。对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。原创 2024-03-26 22:49:50 · 1015 阅读 · 0 评论 -
Redis集群
Redis Cluster是官方正式支持的分布式解决方案,它采用了数据分片(sharding)技术,将数据分散在多个节点上。(2)缺点:需要手动进行故障转移,无法自动处理主节点故障;Sentinel是Redis提供的一个高可用性解决方案,它能监控主从节点状态,并在主节点出现故障时自动完成故障转移。(2)缺点:虽然比主从模式增加了自动化,但仍不支持自动的数据分区,且随着节点数量增加,管理和配置的复杂性也会增大。在此模式下,有一个主节点负责处理写入请求,而从节点则复制主节点的数据并提供读取服务。原创 2024-03-29 18:34:51 · 272 阅读 · 0 评论 -
Redis 和 Mysql 数据库数据如何保持一致性
在发现缓存没有数据后,在执行查询数据库前,对该Key进行加锁,查询数据库并放入缓存后再解锁,这样可以避免缓存击穿问题,当某个redis数据不存在时,大量线程并发查询数据库。线程B查询缓存没有数据,在线程A更新数据库之前,查询到旧数据,此时系统时间片切换到线程A执行删除缓存,之后又轮到线程B放入缓存旧数据。在需要执行双删前,对该Key进行加锁,之后执行删除缓存,更新数据库,放入新数据到缓存,在解锁。线程B和线程C发现缓存没数据,查询数据库。线程C针对于线程A,查询缓存没有数据,查询到旧数据,放入缓存旧数据。原创 2024-03-29 18:13:34 · 448 阅读 · 0 评论 -
Redis主从同步机制
主数据库接收到同步命令后,会执行 bgsave 命令,在后台生成一个 rdb 文件,并使用一个缓冲区记录从现在开始执行的所有。从服务器接收到这个 rdb 文件,然后加载到内存;之后主服务器会把刚刚在缓存区的命令同步过来,从服务器就会执行这些命名。当主服务器执行完 bgsave 命令后,主服务器会将 bgsave 命令生成的 rdb 文件发送给从服务器;以上处理完之后,之后主数据库每执行一个写命令,都会将被执行的写命令发送给从数据库。从服务器向主服务器发送同步命令 sync;原创 2024-03-29 17:05:01 · 244 阅读 · 0 评论 -
如何保证redis里的数据都是热点数据
放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。MySQL 里有 2000w 数据,Redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。全称Least recently used,意思为淘汰掉最久未使用(即。原创 2024-03-29 17:03:40 · 288 阅读 · 0 评论 -
Redis面试题-缓存雪崩、缓存穿透、缓存击穿问题
1两边都不存在(皇帝的新装) (黑名单) (布隆过滤器)2:一个热点的key失效了,这时大量的并发请求直接到达数据库. (3:大量key同时失效 (原创 2024-03-28 15:32:20 · 463 阅读 · 0 评论 -
百万级redis key如何模糊查找-scan、scan和keys的区别
模糊查询导致交互速度慢、阻塞其他 Redis 操作,在Redis中,使用通配符 KEYS 命令进行键的模糊匹配(比如 KEYS key*)可能会导致性能问题,尤其是在数据集较大时。这是因为 KEYS 命令的实现需要遍历所有的键来匹配模式。在大规模的生产环境中,遍历所有键可能会导致阻塞其他 Redis 操作,因为 KEYS 命令会持有数据库的写锁。此外,这也可能对性能产生负面影响,因为它需要消耗大量的计算资源。在 Redis 中,所有命令都是按顺序执行的,一个命令执行完成后,才会执行下一个命令。原创 2024-03-25 21:57:34 · 715 阅读 · 0 评论 -
Redis数据持久化
Redis是一个内存数据库,一旦断电或服务器进程退出,内存数据库中的数据将全部丢失,所以需要Redis持久化Redis持久化就是把数据保存在磁盘上,利用永久性存储介质将数据保存,在特定的时间将保存的数据进行恢复的工作机制Redis提供两种持久化机制:RDB:存储数据结果,关注点在数据(AOF:存储操作过程,关注点在数据的操作过程(原创 2024-03-25 21:32:18 · 295 阅读 · 0 评论 -
Redis 特性,为什么要用Redis,Redis到底是多线程还是单线程
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的,使用C语言编写、支持网络、可基于亦的日志型、Key-Value数据库,并提供多种语言的API。原创 2024-03-25 11:40:52 · 223 阅读 · 0 评论 -
Linux 常用命令
vi / vim 最linux比较流行的编辑器,相当于windows系统notepad.exe 记事本。用户刚刚启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。以下是常用的几个命令:i 切换到输入模式,以输入字符。x 删除当前光标所在处的字符。: 切换到底线命令模式,以在最底一行输入命令。若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。命令模式只有一些最基本的命令,因此仍要依靠底线命原创 2024-03-18 20:05:12 · 980 阅读 · 0 评论 -
反射的应用
更新数据库中最近更新人信息,使用MyBatis 拦截,拦截数据库操作,拿到参数对象,通过反射拿到字段,判断字段信息,把值设置给字段。字段,需要从token 中获取登录信息,在表每次执行更改操作时,把登录用户名设置给。在写一个商城项目的中后台仓储管理系统时,有一个订单的更改人。原创 2024-03-13 22:16:59 · 156 阅读 · 0 评论 -
springboot自动配置原理
文件及配置类。原创 2024-03-12 21:28:37 · 864 阅读 · 0 评论 -
MyBatis 四种类型拦截器、MyBatis拦截器执行流程
用途:拦截MyBatis执行器方法的执行。- 使用:允许拦截和自定义MyBatis执行器的行为。例如,可以添加缓存、日志记录或审计功能到执行器中。这些拦截器可以在MyBatis执行的不同阶段扩展或修改其行为。您可以通过实现MyBatis提供的相应接口并在MyBatis配置文件中进行配置来实现这些拦截器。-- 用途:拦截SQL语句的执行。- 使用:可以在SQL语句执行之前修改或增强它们。例如,可以向WHERE子句添加额外的条件或记录执行的语句。分页等- 用途:拦截SQL语句的参数设置。原创 2024-03-12 18:00:32 · 694 阅读 · 0 评论 -
MyBatis运行原理、MyBatis底层原理
映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法,是一个既可以发送sql执行并返回结果的,也可以获取mapper的接口。原创 2023-12-20 19:59:30 · 392 阅读 · 0 评论 -
JDBC底层原理
(1)int executeUpdate(String sql):执行更新操作,即执行insert、update、delete语句,其实这个方法也可以执行create table、alter table,以及drop table等语句,但我们很少会使用JDBC来执行这些语句;JBDC的底层主要是三个接口对象,Connection、Statement、ResultSet。Connection用于建立与数据库的连接,Statement用于向数据库发送sql语句,ResultSet用于封装sql查询语句的结果。原创 2024-03-12 16:54:09 · 370 阅读 · 0 评论 -
事务的特性,API、隔离级别、传播行为
1、事务的介绍事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元。2、事务的使用场景例如在日常生活中,有时我们需要进行银行转账,这个银行转账操作背后就是需要执行多个SQL语句,假如这些SQL执行到一半突然停电了,那么就会导致这个功能只完成了一半,这种情况是不允许出现的,要想解决这个问题就需要通过事务来完成。原创 2024-03-11 20:21:54 · 928 阅读 · 0 评论 -
乐观锁、悲观锁、库存表、sql优化
(2)优化:使用第一种方法,在数据库中增加 过期日期字段,会产生冗余,但是可以有效防止数据库索引失效(可以针对不同的系统综合考虑)。1、在数据库字段中使用函数,在进行索引时,因为每一条数据都需要进行运算然后进行比对,相当于每天数据都要比对,会导致数据库索引失效。冲突频率:如果冲突频率非常高,建议采用悲观锁,保证成功率,如果冲突频率大,乐观锁会需要多次重试才能成功,代价比较大。响应速度:如果需要非常高的响应速度,建议采用乐观锁方案,成功就执行,不成功就失败,不需要等待其他并发去释放锁。原创 2024-03-11 14:50:46 · 360 阅读 · 0 评论