Java开发面试题
Java开发面试题
java牛虻
热爱编程与开发.
展开
-
数据库面试题汇总
如何定位慢查询 SQL慢语句执行的很慢,如何分析? 索引概念及索引底层数据结构? 聚簇索引和非聚簇索引、回表查询? 覆盖索引、超大分页优化 索引创建的原则 什么情况下索引会失效 谈一谈你对SQL优化的经验 事务的特性 并发事务问题、隔离级别 undo log 和redo log 的区别 解释一下mvcc MySQL主从同步原理 MySQL分库分表原创 2024-02-01 16:04:02 · 266 阅读 · 0 评论 -
分布式任务调度-xxl-job
执行器集群部署时,任务的路由策略选择分片广播, 一次任务调度将会广播触发对应集群中所有执行器执行一次任务。XxljboHelper.getshardIndex() 获取分片序号。XxljboHelper.getshardTotal() 获取总分片数。一次任务执行多个任务项,任务项模于总分片数,找到对应的机器(分片)。故障转移+失败重试:路由策略改为故障转移,修改失败重试的次数。任务找机器执行,找哪台的策略就是路由策略。路由策略选择分片广播,代码中拿到分片参数。查看日志:任务失败后可以查看。原创 2024-01-13 08:41:22 · 364 阅读 · 0 评论 -
分布式事务的解决方案
只要是微服务项目都有可能发起远程调用,发起远程调用就会存在分布式事务。你们采用的哪种分布式事务解决方案?原创 2024-01-13 08:39:38 · 355 阅读 · 0 评论 -
MQ消息堆积如何解决?
当生产者发送消息的速度超过消费者处理消息的速度,就会导致队列中的消息堆积,只到队列存储消息达到上限。之后发送的消息就会成为死信,可能会被丢弃,这就是消息堆积的问题。RabbitMQ如果有100万消息堆积在MQ,如何解决?消费者要消费消息时才会从磁盘中读取并加载到内存中。接收到消息后直接存入磁盘而非内存。注解的方式.value=lazy。支持数百万条的消息存储。配置的方式 .lazy。原创 2024-01-13 08:35:18 · 843 阅读 · 1 评论 -
消息的重复消费问题如何解决的
消费者在向队列发送确认的时候挂了,或者发生网络抖动。MQ会重新给消费者发送消息,这不重发消费了吗。消息的重复消费问题解决:适用于任何MQ(RabbitMQ Kafka RocketMQ)解决方案:每条消息设置一个唯一的标识ID(业务唯一标识,比如支付ID)幂等方案:分布式锁,数据库锁(悲观锁,乐观锁)。消费者接收到消息的时候校验这个业务ID是否存在。原创 2024-01-13 08:33:32 · 405 阅读 · 0 评论 -
RabbitMQ如何保证消息不丢失?
当消息成功发送到MQ:会返回一个publish-confirm ack(acknowledge)消费者确认机制:消费者处理消息后可以向MQ发送ack回执,MQ收到ack回执后才会删除该消息。none: 关闭ack,MQ假定消费者获取消息后会成功处理,因此消息投递后立即被删除。解决的问题:publisher confirm机制来避免消息发送到MQ过程中消失。MQ默认是内存存储消息,开启持久化功能可以确保缓存在MQ中的消息不丢失。交换机持久化,队列持久化,消息持久化。处理问题:消费者导致的消息丢失问题。原创 2024-01-13 08:32:38 · 1010 阅读 · 0 评论 -
git常用命令
例如:git commit -m "修改了..." hello.txt。git remote add +简称+远程仓库地址。git commit -m "msg" +文件名。git reset --hard +版本号。git push +远程仓库简称+分支名称。git pull +远程仓库简称+分支名称。git clone +远程仓库地址。git clone +远程仓库地址。git reset +文件名。原创 2024-01-07 09:26:28 · 549 阅读 · 0 评论 -
HashMap出现死锁的场景
为了避免这种并发问题,可以使用线程安全的HashMap实现类,比如ConcurrentHashMap。HashMap是Java中的一个线程不安全的集合类,因此并不会出现真正意义上的死锁场景。然而,如果多个线程同时对HashMap进行读写操作,可能会出现一些并发问题,比如数据丢失、数据不一致等。4. 由于HashMap是线程不安全的,线程A和线程B可能同时修改HashMap的内部结构,导致数据覆盖或数据丢失。3. 线程B同时执行put操作,也尝试向HashMap中添加一个元素。原创 2024-01-06 11:22:09 · 520 阅读 · 0 评论 -
Java开发面试的几个问题
第二个对象是通过构造函数new String()在堆内存中创建的新字符串对象。因此,使用String s = new String()创建了两个对象,一个位于常量池中,另一个位于堆内存中。内容一致,地址值不同,是不同的对象。3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;第一个对象是字符串常量池中的空字符串对象,它是在Java虚拟机启动时就被创建并放入常量池中的。1、Integer是int的包装类,int则是java的一种基本数据类型。原创 2024-01-06 11:14:40 · 447 阅读 · 0 评论 -
Java面试题:Spring自动配置原理
它会加载一个文件,把这个文件统一的加载的Spring容器中,在这个文件中有个META-INF包中有个spring.factories文件,这里面有很多以AutoConfiguration结尾(比如AOP的,比如Redis的。这个类里有个redisTemplate方法,这个方法的返回值是RedisTemplate,上面有个@Bean注解,也就是要把这个方法的返回值放入到IOC中,所以我们就可以注入了。当导入Redis相关的起步依赖的时候,这个Class文件就存在了。如果存在呢,就会加载这个类。原创 2023-12-01 19:56:18 · 468 阅读 · 0 评论 -
Java开发面试题:Redis三兄弟穿透、击穿、雪崩
查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库。:缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存。有大量的并发请求过来,这些并发的请求可能会瞬间把。服务宕机,导致大量请求到达数据库,带来巨大压力。Redis这三个问题都可用限流来处理。1.给不同的Key的TTL添加随机值。消耗内存,可能会发生不一致的问题。过期的时候,恰好这时间点对这个。3.给缓存业务添加降级限流策略。是指在同一时段大量的缓存。内存占用较少,没有多余。4.给业务添加多级缓存。缓存击穿:过期key。,过期时间采用随机。原创 2023-12-01 19:42:38 · 375 阅读 · 0 评论 -
面试题:数据库的主从模式是什么意思?
需要注意的是,主从模式中的数据复制是异步的,因此在主数据库发生故障时,从数据库可能会有一段时间的数据延迟。此外,主从模式并不能提供自动故障切换和负载均衡的功能,这些需要额外的配置和管理。在主从模式中,有一个主数据库(Master)和一个或多个从数据库(Slave)。主数据库负责处理写操作(插入、更新、删除),而从数据库负责复制主数据库的数据,并处理读操作(查询)。数据库的主从模式(Master-Slave Replication)是一种常见的数据库复制技术,用于提高数据库的可用性、性能和数据冗余。原创 2023-12-01 12:10:29 · 453 阅读 · 0 评论 -
【Java】abstract,final,static,private,public的区别
抽象类中可以包含非抽象方法,子类可以通过重写抽象方法和继承非抽象方法来实现其功能。class文件里面有静态区,专门用来存static数据,static是归属于类的,你让类去调用,不建议使用对象调用。static 的特点2:static的内容 可以使用对象调用 也可以使用类名调用, 推荐使用类名调用。abstract 关键字可以用来修饰方法和类,对应被修饰的方法和类成为抽象类和抽象方法。抽象类是不能被实例化的,只有被继承才能使用,而抽象方法只有声明,没有具体的实现。非静态方法可以访问静态也可以访问非静态。原创 2023-07-09 11:41:33 · 326 阅读 · 1 评论 -
java中重写和重载的区别
发生在父子类中,方法名、参数名列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private,则子类就不能重写该方法。发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。原创 2023-07-08 20:56:10 · 30 阅读 · 1 评论