2020面试总结

1.并发编程部分:
volatile的作用,底层:lock指令+MESI协议保障可见性,内存屏障保障有序性

synchronized与lock的区别:共性:可重入锁,区别:jvm层面,jdk层面,是否可响应中断,释放锁是手动还是自动,公平锁与非公平锁等,引出实现类ReentrantLock再到AQS原理,
synchronized jdk1.6以后锁升级也要谈下,如果lock锁里面实现精准唤醒如何做:condition

Jdk各种锁:可重入锁,乐观锁,悲观锁,读写锁,公平锁,非公平锁都要能列举些

乐观锁:CAS(juc下面atomic包下的类,比如AtomicInteger:底层自旋锁+unsafe类,缺点:ABA问题等)

Threadlocal原理(项目中用过可以说下使用场景),threadlocalmap中存放的key是弱引用,gc会回收,而value不会回收,可能产生内存泄露,使用完要及时remove。线程池中使用Threadlocal要注意什么?(核心线程数不会释放,也会产生内存泄露,要remove)

线程池:首先介绍下线程池的工作流程,以及底层源码(ThreadPoolExecutor
,七种参数具体什么含义,四种拒绝策略是什么),jdk自带的Executors几种线程池以及缺点,再到项目中使用自定义线程池,自定义如何确定核心线程数(经验值分CPU密集型,IO密集型),实际项目中可能既有CPU密集型也有IO密集型,那怎么确定合适的?(通过压测,考虑方面:机器配置差别,代码问题,压测预期值)

CountDownLatch,CyclicBarrier,Semaphore也要了解下

2.集合常见问题

ArrayList与Linkedlist区别,并发安全替代(vector,Collections.synchronizedList,CopyOnWriteArrayList)

HashMap 1.7 与 1.8区别
主要三方面数据结构方面、1.7 hash冲突头插法,1.8尾插法 、1.7hash值计算扰动次数过多,1.8次数较少(可以看下源码)
细节:为什么容量必须是2的n次方,为什么负载因子选择0.75,过低过高会怎么样,为什么链表长度大于8(数组长度也要大于64)转换成红黑树,为什么红黑树节点数量小于6会退化成链表,为什么不选择7等

ConcurrentHashMap 1.7与1.8区别
主要三方面: 数据结构、1.7分段锁粒度大,1.8基于cas+synchronized(hash冲突后syn)锁粒度更小、size计算方式区别

3 jvm
JVM内存结构(有哪些区域),类加载过程,类加载器有哪些,双亲委派机制,如何确定为垃圾,四种垃圾回收算法,七种垃圾回收器(CMS与G1重点),常见参数,堆中划分,如何调优jvm,线上出现OOM如何定位
https://www.processon.com/view/link/5e69db12e4b055496ae4a673#map

4 Redis
redis常见数据类型与对应数据结构,内存淘汰策略,持久化:RDB与AOF对比,线上选择的哪个,主线程为单线程为什么这么快,集群模式:主从+redis cluster,常见缓存穿透雪崩击穿解决方案,如果存放key过大怎么办等
以下链接为redis知识点整理:
https://www.processon.com/view/link/5e931e30e0b34d6feaa58cfb

5 Spring与SpringBoot

Spring核心IOC与AOP,Bean的作用域,bean的生命周期,循环依赖如何解决,aop两种模式区别,Spring用的设计模式,Spring事务传播行为,SpringBoot自动装配原理,注解驱动原理
Spring知识点参考:https://www.processon.com/view/link/5eb768f75653bb6f2afcfbec

6 SpringCloud

一次客户端请求,到底经过了哪些组件,最好能画出图,注册中心选型(eureka与zk的对比),各种组件知道如何用,API网关的作用,注册中心使用eureka生产上做了哪些优化,为什么eureka要使用二级缓存,熔断限流Hystrix原理,限流方式:线程池+信号量等

7 Dubbo
Dubbo十层模型,负载均衡策略,序列化协议,网络通信协议,集群容错策略等

dubbo(RPC)框架与SpringCloud的对比,SOA与微服务的区别

8 消息中间件
如何保障消息不丢,如何保障消息顺序性,重复消费怎么办,消息堆积如何解决
如果对kafka熟悉:topic,broker,partition,replica(leader,follower),ISR与AR
HW与LEO,副本选举机制,kafka如何保障消息可靠性,事务与幂等,kafka为什么不支持读写分离,如何避免消费组重平衡,kafka为什么这么快,kafka的时间轮了解吗

9 netty与nio
BIO,NIO AIO的区别,为什么选用netty,Reactor模式,netty如何解决TCP拆包与粘包等

10 mysql
索引数据结构,为什么选用B+树,聚簇索引,覆盖索引,行锁,表锁,间隙锁事务隔离级别,mysql解决幻读方案,mvcc模式,redo log 与binlog区别,Sql优化,索引使用注意事项,explain常见的参数等

11其它
分布式锁:redis 与 zookeeper的实现对比
分布式事务:CAP,BASE,两阶段提交协议,TCC,XA,Seata,基于消息中间件补偿(例如RocketMq半消息机制)
分布式ID生成器:雪花算法,时钟回拨如何解决
常见设计模式:单例,工厂,策略,模板,代理等
TCP三次握手报文信息,网络7层模型
零拷贝
HTTPS原理等

注:以上问题没有总结全面,仅供参考,全会至少技术广度有了

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值