准备面试了~

举报
叶 秋 发表于 2023/02/24 10:48:36 2023/02/24
【摘要】 金三银四,准备面试了~

1、ArrayList和linkedList的区别

它们都是继承自 Collection。

ArrayList 是基于数组的,在使用查询的时候效率比较高,但删除效率却非常低,因为它需要重新排数组中的所有数据。

LinkList底层是一个双链表,在添加和删除元素时更好的性能,但查询效率却非常低。

2、try catch finally,try里有return,finally还执行么?

首先,不管有没有异常,finally模块肯定会执行的,哪怕 try 里有 return,也是一样。

还有就是,finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

3、能简单的介绍下多路复用 IO 模型吗

多路复用 IO 模型其实就是NIO,在这个模型中,它会有一个线程,不断的去轮询socket的状态,如果socket发生真正的读写事件时,才会真正的调用实际上的读写操作。

它的优势就在于,在该模型下,只需要一个线程,就可以管理多个socket的状态。系统不需要再额外建立,或者去管理多个线程,极度节省了系统线程资源。

成于轮询,败于轮询,它是对到达的事件,进行逐一响应,所以一旦如果事件响应体较大,就会导致后续的事件迟迟得不到响应,会影响功能上的进度。

4、MQ如何避免消息重复投递或重复消费?

首先在消息生产的时候,在MQ的内部,会针对生产者生产的消息生成一个唯一ID,作为去重条件,可以避免消息重复进入队列里。

然后在消费时,必须要求消息体中有一个消费ID,作为消息消费的去重依据,防止同一条消息重复消费。

5、消息队列满了以后该怎么处理?

首先消息队列的延时或者过期失效,会导致消息不断积压。

首先肯定需要临时紧急扩容,然后再恢复consumer的问题,先确保恢复消费者的消费速度,然后再将现有的consumer都停掉。

第二步,新建一个topic,partition,queue数量,大小是原先的10倍。然后再手写一个临时分发数据的consumer消费者程序,部署到项目中去,代替停掉的消费者程序。

接着再征用10倍的机器来部署consuemr消费者程序,这种做法就是临时将消费者扩大了10倍,以之前正常速度的10倍来消耗。

6、如何停止一个正在运行的线程?

大家首先想到的肯定是调用 stop 方法强制终止。但是不推荐这个方法,因为这个方法在API里是过期作废的方法。

那么除了stop还可以使用退出标志,使线程run方法完成后,正常退出。

还可以使用interrupt方法中断线程。

class InterruptThreadDemo3 {
public static void main(String[] args) throws InterruptedException {
		MyThread m1 = new MyThread();
		System.out.println("Starting thread...");
		m1.start();
		Thread.sleep(3000);
		System.out.println("Interrupt thread...: " + m1.getName());
		
	    m1.stop = true; // 设置共享变量为true
		m1.interrupt(); // 阻塞时退出阻塞状态
		Thread.sleep(3000); // 主线程休眠3秒以便观察线程m1的中断情况 
		System.out.println("Stopping application...");
	} 
}

7、sleep()和wait() 有什么区别?

  • sleep()方法属于Thread类中的方法,而wait()方法属于Object类方法。
  • sleep()方法不会释放对象的锁,它只是暂时让出CPU资源,给其他线程,时间到了,会自动恢复运行。
  • wait()方法,会释放对象的锁,会重新进入到对象等待池中,重新竞争锁资源,需要使用notify才能唤醒。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。