公司概况:未融资·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. 可重复读是怎么实现的?
3. MySQL里有哪些锁?
读锁、写锁、更新锁。
更新锁:预定要对资源加写锁,允许其他事务读,但不允许再加更新锁或写锁。当被读取的页要被更新时,升级为写锁。更新锁的作用是避免使用共享锁造成死锁。
4. 怎么对慢SQL进行优化?
5. 假如对a、b两字段做了联合索引,查询条件匹配的是a 、b、c,是怎么进行查询的?
走a、b联合索引,和查询条件只匹配a、b的速度相差不大。
6. 索引的数据结构是怎样的?
主要讲B+树。
6 算法
1. 二分查找。