【Java面试】Kafka如何保证消息消费的顺序性? Kafka如何去保证消息的顺序性这个问题,我需要去保证那个消息应该是在同一个分区里面。因为Kafka的消息的这个分区他是有序的然后我们去拿消息的时候是通过offset来拿嘛,所以我只要去保证这个消息存储到Partition里面的有序性就好了。然后消费的时候我直接去指定那个Partition去消费就好了。好的,这个问题我从两个方面来回答。[这两个直接显示在屏幕,不需要念]kafka为什么会存......
【Java面试】线程状态,BLOCKED和WAITING有什么区别 BLOCKED是线程,是一个阻塞状态嘛。然后WAITING是线程是等待状态。区别就是阻塞是被动的,然后WAITING是一个条件的一个触发就是我们更多的是在就人工为主动的去触发线程的一种头等待的一个状态,所以我认为它们区别一个是在被动和主动的一个区别吧。好的,面试官。BLOCKED和WAITING都是属于线程的阻塞等待状态。BLOCKED状态是指线程在等待监视器锁的时候的阻塞状态。也就是在多...
【Java面试】Cookie和Session的区别 Cookie和Session的区别就是:Cookie它是属于浏览器层面的一个机制吧,就是它可以用来存储一些服务器端的一些信息。Session是属于容器对象,就是像Servlet容器,比如说像Tomcat 它里面的一个对象,它里面是表示一个浏览器会话吧,就是我针对同一个浏览器就同一个客户端请求它会生成一个会话的信息,然后我们可以在这个会话里面去存储一些服务端的数据吧。所以我认为就是Cooki...
【Java面试】Spring 里面的事务和分布式事务的使用如何区分,以及这两个事务之间有什么关联? Spring里面的事务和分布式事务是没有任何关系的,因为Spring里面事务它只是对单个数据库的一个封装嘛,但是分布式事务它是涉及到多个数据库的一个管理嘛。Spring应该是跟这个分布式事务没有什么关系的。好的,面试官。首先, 在Spring里面并没有提供事务,它只是提供了对数据库事务管理的封装。通过声明式的事务配置,使得开发人员可以从一些复杂的事务处理中得到解脱,我们不再需要关心连接的获...
【Java面试】说一下你对CompletableFuture的理解 CompletableFuture它好像是(JDK)1.8里面的一个工具吧。因为我们以前去做那种异步的具有回调的一些任务的时候,我们可以用那个Future和Completable,但是如果我要去通过异步的那个触发那个返回值那个异步任务去执行我的那个代码的时候就是我最终要去获取结果的时候我需要通过future.get去阻塞获取。但这种方式就会对我的整个程序会有一些阻塞和影响,但是好像Comp...
【Java面试】Zookeeper如何实现Leader选举 Zookeeper里面我记得有一个epoch和myid就是它们在投票的时候,就是它们会有一个少数服从多数的一个机制。然后去根据刚刚的什么myid和epoch去做一个比较吧,最终少数服从多数 就是去实现的。好的。首先,Zookeeper集群节点由三种角色组成,分别是Leader,负责所有事务请求的处理,以及过半提交的投票发起和决策。Follower,负责接收客户端的非事务请求,而事务请求会转...
【Java面试】ReentrantLock 是如何实现锁公平和非公平性的 ? 好的。我先解释一下个公平和非公平的概念。公平,指的是竞争锁资源的线程,严格按照请求顺序来分配锁。非公平,表示竞争锁资源的线程,允许插队来抢占锁资源。ReentrantLock默认采用了非公平锁的策略来实现锁的竞争逻辑。其次,ReentrantLock内部使用了AQS来实现锁资源的竞争,没有竞争到锁资源的线程,会加入到AQS的同步队列里面,这个队列是一个FIFO的双向链表。在这样的一个背景下,公平锁的实现方式就是,线程在竞争锁资源的时候判断AQS同步队列里面有没有等待的线程。如果有,就加入到队列的尾部等待。而
【Java面试】HashMap是如何解决hash冲突的? HashMap解决hash冲突的方式 我记得是用那个链表的方式用单向链表就说如果承认hash冲突的话,它会把那个存在冲突这样一个键值对啊会保存到那个链表的尾部。好的,这个问题我需要从几个方面来回答。首先,HashMap底层采用了数组的结构来存储数据元素,数组的默认长度是16,当我们通过......
【Java面试】请描述一下Redis中AOF 重写的过程 好的。AOF是Redis里面的一种数据持久化方式,它采用了指令追加的方式。近乎实时的去实现数据指令的持久化,因为AOF,会把每个数据更改的操作指令,追加存储到aof文件里面。所以很容易导致AOF文件出现过大,造成IO性能问题。Redis为了解决这个问题,设计了AOF重写机制,也就是说把AOF文件里面相同的指令进行压缩,只保留最新的数据指令。简单来说,如果aof文件里面存储了某个key的多次变更记录,但是实际上...
【Java面试】说一说你对Spring Cloud的理解 Spring Cloud是Spring官方推出来的一套微服务解决方案。准确来说,我认为Spring Cloud其实是对微服务架构里面出现各种技术场景,定义了一套标准规范。然后在这套标准里面,Sp
【Java面试】请谈谈AQS是怎么回事儿? AQS它是那个J.U.C这个包里面的一个工具类吧,就是它是个抽象类。然后像那个ReentrantLock里面它就用到了AQS去实现那个线程的同步和阻塞。好的,关于这个问题我需要从几个方面来回答。AQS它是J.U.C这个包里面非常核心的一个抽象类,它为多线程访问共享资源提供了一个队列同步器。在J.U.C这个包里面,很多组件都依赖AQS实现线程的同步和唤醒,比如Lock、Semaphore、CountDownLa...
【Java面试】什么是守护线程,它有什么特点 我记得守护线程就是就这个线程它不会影响到JVM进程的一个结束。就是我们普通线程,就是它 如果这线程没有结束情况下 你去终止这个,就是你是无法直接就是会这个进程是不会退出的。但是如果你的线程类型是守护线程的话 你如果你的指令运行结束以后,你这个进程退出了以后 它是就是你的守护线程即便是还没有结束的情况下,它还是可以继续就他还是可以直接退出的。好的。守护线程,它是一种专门为用户线程提供服务的线程,它的生命周期依赖...
【Java面试】简单说一下你对序列化和反序列化的理解 序列化和反序列化就是说我要去把一个对象传输到网络上的其他的一个应用上一个情况下,就是我需要对这个对象做序列化。然后想Java里面我们可以,我们需要对这个对象的序列化的话,我们需要去实现像Serializable这样一个接口吧。好的,关于这个问题,我需要从几个方面来回答。首先,我认为,之所以需要序列化,核心目的是为了解决网络通信之间的对象传输问题。也就是说,如何把当前JVM进程里面的一个对象,跨网络传输到另外一...
【Java面试】RDB 和 AOF 的实现原理、优缺点 RDB是一种快照的方式然后AOF是一种就是指令追加的方式。它们两个都是Redis里面的一种数据持久化的一个机制。RDB它是快照嘛,快照的话它的那个时间间隔它会有一个配置但是这种配置过程中就是有可能会导致说我的数据丢失的一个问题。但是AOF它是那种就是追加的方式嘛,所以它的一个数据安全性可能会比RDB会好一点。好的,关于这个问题,我从几个点来回答。首先,Redis本身是一个基于Key-Value结构的内存数据库...
【Java面试】什么是 ISR,为什么需要引入 ISR ISR好像是Kafka里面的一个机制吧。为什么要引入,应该是跟数据同步有关系。好的,关于这个问题,我需要从几个方面来回答。首先,发送到Kafka Broker上的消息,最终是以Partition的物理形态来存储到磁盘上的。而Kafka为了保证Parititon的可靠性,提供了Paritition的副本机制,然后在这些Partition副本集里面。存在Leader Partition和Flollower Par...
【Java面试】Kafka 怎么避免重复消费 Kafka怎么避免重复消费就是我们可以通过 我们可以在那个消息消费的这一端就是我们可以用类似于分布式锁的这样一个设计吧。我消费一个消息的时候我可以直接用比如说redis里面的setNx这样一个指令,然后去把那个消息保存到redis里面然后后面再如果重复发送的话那我就直接只要去判断这个Redis里面有没有存在就好了。好的,关于这问题,我从几个方面来回答。首先Kafka Broker上存储的消息,都有一个Offs...
【Java面试】Spring 中,有两个 id 相同的 bean,会报错吗,如果会报错,在哪个阶段报错 两个id相同的bean应该会报错因为在Spring IOC容器里面,它的id一定是唯一的吧。如果说有两个相同的id的话那就会存在找不到,就是说我们去找一个bean的时候,他会根据名字来找,要么根据类型。在哪个阶段的话。。。应该是在spring启动的时候吧。好的,关于这个问题,我从几个点来回答。首先,在同一个XML配置文件里面,不能存在id相同的两个bean,否则spring容器启动的时候会报错。因为id这个属...
【Java面试】@Resource 和 @Autowired 的区别 @Resource和@Autowired的区别我认为是在它们的一个注入的一个方式上@Resource它是根据name来进行注入的,@Autowired是根据类型来注入的。好的,面试官。@Resource和@Autowired这两个注解的作用都是在Spring生态里面去实现Bean的依赖注入。下面我分别说一下@Autowired和@Resource这两个注解。闪现 [@Autowired的作用详解 ] 几个字。首先,@Autowired是Spring里面提供的一个注解,默认是根据类型来实现Bean的依赖注入。