
Java全栈面经
文章平均质量分 55
真实大厂面试问题汇总以及个人总结刁钻难点,希望助你n臂之力,早日实现大厂梦!
Be explorer
分享日常学习笔记和实战经验,开源NB
展开
-
MySQL面经——如何分析慢SQL?帮你应对Java面试常见的数据库问题!
可以采用EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息。原创 2024-06-05 09:38:00 · 287 阅读 · 0 评论 -
MySQL面经——如何定位慢SQL?
一般出现慢SQL,也就是以下的几种情况1、聚合查询2、多表查询3、表数据量过大4、深度分页查询对于我们使用方来说,表象就是页面数据加载过慢,接口压测时间过长(超过1s)原创 2024-05-31 09:00:00 · 1242 阅读 · 0 评论 -
Kafka篇——Kafka实战线上问题优化之实现顺序消费,实际开发中的解决方案
然而,需要注意的是,在顺序消费中,单线程的速度可能会比较慢,因此在一些需要高性能的场景下,可能会采用多线程并发消费的方案。Kafka中顺序消费的应用场景主要涉及那些需要保证消息产生顺序和消费顺序一致的业务场景。例如,在订单处理系统中,订单的生成、支付、发货等步骤通常需要按照一定的顺序进行,以确保数据的完整性和一致性。Kafka可以通过设置特定的参数来保证顺序消费,例如设置max.in.flight.requests.per.connection参数为1,可以保证消息按照发送的顺序写入服务器。原创 2024-02-02 16:41:58 · 705 阅读 · 0 评论 -
Kafka篇——Kafka实战线上问题优化之防止消息丢失和消息重复消费,提供真实解决方案
由于生产者端设置了发送消息的ack为1,并且生产者把消息发送到集群并且leader已经拿到消息,正好在返回ack的时候产生了网络波动,生产者拿不到broker返回的ack所以触发了重试机制,又一次给broker发送了这条消息。那么此时消费者就会从broker中poll到两条相同的消息。因为我们把ack设置成1或者-1/all,这样生产者生产的消息发送到broker中,会等待leader或者至少leader和一个副本同步到消息才会返回ack,如果生产者同步消息失败,会进行重试。二、防止消息重复消费。原创 2024-02-02 16:40:55 · 938 阅读 · 0 评论 -
Redis面经——Redis的双写一致性,一篇文章带你彻底搞懂什么是Redis的双写一致,如何推演实现的?以及成熟的解决方案!黄金文档!
(2)接下来线程2在线程1未同步到缓存前,先更新数据库,并且删除了缓存(此时缓存中key已经过期,删不删除都是一样的),线程2成功将数据更新成了20,但是线程1开始执行,将一开始读取到的10写入到了缓存中,又总成了数据的不一致!此时线程1查询缓存,发现缓存未命中,直接去查询数据库,此时查询的数据是正确的,然后紧接着将数据库更新后的数据写到缓存中了。(2)此时,线程1开始执行,线程1完成了数据库的数据更新,数据库数据变成了20,但是此时的缓存中数据还是10,这就造成了脏数据的情况!保证写操作强一致性的方法!原创 2024-01-25 16:35:46 · 4299 阅读 · 2 评论 -
Redis面经——哨兵模式的脑裂问题,详细介绍!
1、由于哨兵和集群中的主从节点可能处于不同的网络分区,哨兵只能监测到从节点们,这个时候哨兵会发现监测的节点中没有主节点,那么他会经过选举产生一个新的主节点,但是客户端这个时候还是会持续的向老的主节点发送数据,新的主节点此时时没有新的数据写入的,这样就造成了类似大脑分裂的情况。min-replicas-to-write 1 #表示最少的slave节点为1个,这样就能保证如果出现网络问题,如果主节点没有从节点了,那么服务端拒绝写入数据,这样老的主节点是没有新数据产生的。修改Redis的两个参数来解决问题。原创 2024-01-25 16:28:21 · 1333 阅读 · 2 评论 -
Redis面经——深入剖析Redis缓存穿透、击穿和雪崩,一篇文章彻底拿下经典面试题
一、概念当用户想要查询一个数据,发现Redis内存数据库中没有,也就是缓存没有命中,于是向持久层数据库中查询。但是发现持久层数据库中也没有,于是本次查询失败。当用户非常多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这个现象就叫做缓存穿透二、解决方案1、布隆过滤器(1)定义在用户客户端和服务端增加了一层,这一层就是布隆过滤器。布隆过滤器的作用是查询的key先查询布隆过滤器,如果存在,则查询Redis,如果不存在,则直接返回。原创 2024-01-22 22:27:54 · 1570 阅读 · 0 评论 -
Java面经——JDK1.8新特性之方法引用详细原理介绍,一篇文章拿下!
当我们实现函数式接口,重写它的方法,方法体中调用某类的静态方法,该静态方法和函数式接口中的抽象方法参数和返回值 一样,就可以使用方法引用来进行简化。(2)Comparator接口中有一个抽象方法和上面的compare方法参数和返回值一样,就可以通过方法引用来简化。函数式接口中抽象方法的参数和返回值形式和方法体中的方法的参数和返回值一致,那么就可以使用方法引用。使用这个方法引用的前提,x作为方法的调用者,y作为方法的实际参数。1、对象::实例方法名(非静态方法)1、对象::实例方法名(非静态方法)原创 2024-01-06 14:29:37 · 459 阅读 · 0 评论 -
Java面经——jdk历代版本的新特性
学习JDK的新特性对于Java开发人员来说非常重要。以下是几个原因:提升开发效率:JDK的新特性通常会引入新的API、工具和框架,通过学习和使用这些新特性,开发人员可以更高效地开发Java应用程序。例如,Lambda表达式和Stream API的引入使得编写函数式风格的代码更加简单和直观,减少了冗余的代码和样板代码的编写,提高了开发效率。改进代码质量:JDK的新特性通常会引入更好的编程模型和最佳实践,帮助开发人员编写更健壮、可维护和可扩展的代码。原创 2024-01-06 14:26:45 · 452 阅读 · 0 评论