后端面试题2021年一览

2,146 阅读3分钟

写在前面的话

面试的时候才知道缺的点和地方在哪,也可以通过面试来检验自己的薄弱点和不足的地方,

针对性的进行学习和复习,这样的效果会比较明显。

在算法上面,首要考虑的是思维,要把思维转变过来。

题目

1.项目介绍

2.MQ消费如何保持幂等性和消息不丢失?

幂等性:

结合业务来思考,这里给几个思路。

1.如果你拿个数据要写库,你先根据主键id查一下。如这数据都有了,你就别插入了。update一下。

2.如果你拿个数据是要更新表里的字段,直接update就好,幂等的。

3.基于数据库的唯一性索引。因为有唯一性索引了。所以重复数据只会插入报错,不会导致数据库中出现重复的数据。

4.如果你是写redis,那没问题了。每次都是set,天然幂等。

5.如果不是上面的场景,那想的稍微复杂一点,需要生产者在发送消费的时候里面加一个全局性的唯一ID

(UUID或者雪花算法),类似于订单ID之间的东西,先根据这个ID去redis中查一下或者先去数据库查询一下,之

前消费过嘛?如果没有消费过你就处理,然后把这个唯一性ID写Redis。如果消费过了,就不处理了。

消息不丢失

确认机制+补偿重发

给数据一个状态值,消息队列都是有ACK确认机制的,配合事务,只有确认消费成功了,才修改状态标识该条数据消费了。同时在发生异常时还要支持消息重发。

3.MQ的作用?

4.Spring IOC的理解?

5.重写equals方法时为什么还要重写hashCode?

6.JVM的堆存的什么,栈里存的什么?

7.内存溢出和内存泄漏的区别?

8.两个对象相互引用时会被GC掉吗?

9.线程池的原理?线程到达什么时候会被拒绝?

10.索引的优缺点

11.查询数据,走索引快还是走主键查询快,为什么?聚簇索引是什么?

12.HashTable安全吗?它和HashMap的区别是什么?

13.ConcurrentHashMap和HashTable那个快,为什么?

14.一个10G大小的数字文件,内存只用1个G,如何对它进行排序?

解答

二面

一面感觉面试得不怎么好,已经做好pass的准备,联系人问我的时候我都说美国,没想到还过了,就约了今晚的二面。

二面更多的是聊项目上的东西,业务逻辑,使用场景什么的。技术上的反而要少一些,相对而言感觉技术问得基础些。

二面问题

1.java的三个特征是什么?结合项目讲一讲对封装、基础和多态的使用

2.讲一讲方法重载和方法复写的区别

3.讲一讲在项目中涉及高并发的场景,在下载的实现?如果中途断掉的解决方案?

4.在继承时重写equals时还需要注意什么,为什么?

5.介绍下对锁的了解?

6.讲讲对synchronized的理解

7.讲讲对乐观锁和悲观锁的理解

8.数据库中的for update 是什么锁?

9.synchronized是乐观锁吗?

10.从数据库查询一条数据要保证线程安全,使用什么方式查询?在java中还需要注意什么?

11.String、StringBuffer、StringBuilder的区别和使用场景?

12.最近在项目中遇到的难点是什么?

13.如果String s = null,那么StringBuffer sb = new StringBuffer(s); sb.toString输出什么?

14.ArrayList和LinkedList的底层结构和使用场景?

15.Set常用的种类?

16.在Set中保证存入的顺序使用什么Set?

17.HashMap的理解和底层结构?

二面解答