杭州2023 - Java开发 - 面试复盘 4

公司概况:未融资·1000-9999人·酒店

 

1 多线程

1. JUC包提供了哪些工具?

    atomic包,包含一些atomic数据类型。

    locks包,包含可重入锁、可重入读写锁。

    并发容器、线程池等等。

 

2. 什么是锁重入?

    已获得锁资源的线程,再次尝试获取锁资源的时候,可以跳过加锁的步骤。

    实现原理是AQS(volatile、阻塞队列、CAS)。

 

3. 乐观锁和悲观锁的使用场景。

    乐观锁适用于读多写少的场景,悲观锁适用于容易发生写冲突的场景。

 

4. 假如有10个线程,每个线程没有依赖其他线程返回值的情况,10个线程依次执行会花很长时间,要怎么做?

    10个线程并发,使用CountDownLatch做收束。

 

2 Spring Boot

1. Spring Boot在使用上与SSM有什么不同?

 

2. Spring Boot是怎么实现自动装配的?

https://www.cnblogs.com/javaguide/p/springboot-auto-config.html

 

3 分布式

1. 什么是CAP定理?

    配合BASE理论。

 

2. Eureka和Nacos分别保证CP还是AP?

    Eureka保证AP,自我修复机制;

    Nacos既可以保证CP也可以保证AP,看具体遵循什么协议。

 

4 Redis

1. Redis有哪些使用场景?

    缓存、session。

 

2. 使用Redis做缓存可能会遇到哪些问题?

    面试官想听的是缓存穿透、缓存雪崩、缓存击穿,我答的是与DB的缓存一致性问题,也没问题。

 

3. 缓存穿透、缓存雪崩、缓存击穿。

 

4. 将一个大对象(可能有50多个属性)存到缓存里有什么问题?怎么解决?

    大对象可能会频繁地序列化与反序列化。

    做冷热分离,把经常需要更新的属性拆出来,单独存储。

 

5 MySQL

1. MySQL事务的隔离级别有哪些?

    读未提交、读已提交、可重复读、串行化。

 

2. 可重复读是怎么实现的?

MySQL 中实现可重复读(RR)的原理

 

3. MySQL里有哪些锁?

    读锁、写锁、更新锁。

    更新锁:预定要对资源加写锁,允许其他事务读,但不允许再加更新锁或写锁。当被读取的页要被更新时,升级为写锁。更新锁的作用是避免使用共享锁造成死锁。

 

4. 怎么对慢SQL进行优化?

 

5. 假如对a、b两字段做了联合索引,查询条件匹配的是a 、b、c,是怎么进行查询的?

    走a、b联合索引,和查询条件只匹配a、b的速度相差不大。

 

6. 索引的数据结构是怎样的?

    主要讲B+树。

 

6 算法

1. 二分查找。

 

你可能感兴趣的:(项目实战,java,求职招聘)