JAVA高级工程师面试总结(持续更新)

1.项目介绍数据模型和业务场景,分库分表的实现,缓存是怎么使用的,缓存和表数据的一致性是怎么保证的,缓存穿透怎么解决
项目的介绍根据你实际的业务和数据模型进行描述
分库分表主要是配置多数据源,有一张系统配置表,一个门店对应一个数据源
缓存和数据的一致性我们主要是保证最终一致性,即给缓存设置过期时间,如果要保证强一致性,在修改数据的同时设置让缓存失效
缓存穿透的两种解决办法是1.布隆过滤器 2.给key设置一个value为null且有过期时间

2.hashmap和currenthashmap实现原理介绍
hashmap数组+链表+红黑树,扩容方式,线程不安全
currenthashmap 1.7分段数组+链表 1.8Node数组+链表+红黑树

3.线程的基本状态,线程是怎么执行的,独占锁和共享锁的原理,AQS的实现,线程池怎么使用的,每个参数的解释,线程是怎么回收的,核心线程能不能被回收
新建,就绪,运行,阻塞,死亡并进行详细描述
线程是调用start()方法进行启动让线程进入就绪状态,等待时间片的分配执行
独占锁和共享锁基于AQS实现的,介绍AQS原理并介绍ReentrantLock(独占锁)和CountDownLatch(共享锁)
线程池的使用介绍下线程池的核心参数,核心线程主要调用RunTime方法得到cpu个数,最大线程=核心线程+1,存活时间3秒,队列大小8个,例:
ThreadPoolExecutor multiThreadPoolExecutor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(),
Runtime.getRuntime().availableProcessors() + 1, 3000, TimeUnit.MILLISECONDS,
new LinkedBlockingDeque(8));
再介绍下线程池的回收,核心线程为什么不能被回收

4.数据库表设计,分布式事务一致性
数据表设计主要是从三大范式和5大约束还有索引来考虑
三大范式:1.字段的原子性 2.主键依赖 3.冗余去除
五大约束:1.主键约束 2.唯一性约束 3.非空约束 4.默认值约束 5.外键约束
索引类型:主键索引,唯一索引,普通索引
分布式事务一致性主要采用数据补偿策略或TCC

5.事务的四大特性和隔离级别以及传播级别,可重复读和幻读的区别
四大特性:原子性,一致性,隔离性,持久化
隔离级别:读未提交,读已提交,可重复读,串行化
可重复读和幻读的区别是一个是查询,一个是插入,详细介绍场景

6.介绍一个设计模式,并针对其实现问一些原理
单例模式 饿汉式和懒汉式 单线程和多线程下的一个线程安全问题

7.rpc框架的一个实现原理
在这里插入图片描述

  1. 服务提供方和消费方沟通,确定服务契约。
  2. 服务提供方编码实现服务契约,并将通过标注(annotation)声明实现了服务契约以及必要的服务配置。当服务提供方应用启动时,框架自动进行服务契约和服务配置信息的注册(发生在第一次启动),后续以平台上的服务配置库信息为准。当服务提供方应用集群中有服务器宕机或新增服务器时(服务方节点列表变更),会通知到服务注册和发现中心。并进一步由服务注册和发现中心通知到服务消费方。
  3. 服务消费方基于服务契约消费服务,并订阅服务配置和提供方节点列表的信息变更。
  4. 服务消费方以及服务提供方统计服务调用的响应时间,以及调用明细等,打印到本地日志文件,通过flume定时汇总到日志和统计平台

8.JVM的内存模型,JVM调优参数,JVM垃圾回收器以及回收算法
年轻代,年老代的一个划分情况,调优的一些基本参数如-Xms512M -Xmx1024M -XX:PermSize=512m -XX:MaxPermSize=1024m
JVM垃圾回收器Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1;
GC Root 对象:
(1)虚拟机(JVM)栈中引用对象
(2)方法区中的类静态属性引用对象
(3)方法区中常量引用的对象(final 的常量值)
(4)本地方法栈JNI的引用对象
回收算法有复制算法,标记清除,标记整理,分代收集在这里插入图片描述
9.redis的五大数据类型,为什么具有原子性,redis作为分布式锁的应用,redis崩溃恢复机制,redis过期数据的清理
基本数据类型:String、Hash、List、SortedSet(zSet)、Set
redis是单线程的具备原子性
分布式锁利用他的原子性setnx方法,值为当前时间,对其进行判断做一个锁的释放和重新获取
redis崩溃恢复机制主要是rdb和aof
redis过期数据的清理主要是定期删除和惰性删除,回收策略主要有6种
1、volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰;
2、volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰;
3、volatile-random:从已设置过期时间的数据集中任意挑选数据淘汰;
4、allkeys-lru:从数据集中挑选最近最早使用的数据淘汰;
5、allkeys-random:从数据集中任意选择数据淘汰;
6、no-enviction(驱逐):禁止驱逐数据;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值