面试题-940516

面试

先做下自我介绍

面试官:你说下Java有哪些锁?

按照机制区分的话,Java中包含的锁可以分为公平锁和非公平锁、乐观锁和悲观锁,独占锁和共享锁,还有什么无锁,偏向锁,轻量锁,重量级锁之类的吧

面试官:CAS是什么?怎么保证原子性,底层是否有锁?CAS的弊端是什么?
在这里插入图片描述

面试官:好,那你说下Synchroized的升级过程?
在这里插入图片描述
面试官:Volatile用过吧 ,有什么作用

修饰变量,保证多线程下修改共享变量对其他线程可见;禁止指令重排序

面试官:Volatile是怎么保证可见性的,原理是什么
基于缓存一致协议(MESI):
在这里插入图片描述

面试官:ThreadLocal说一说,咋解决内存泄露
在这里插入图片描述

面试官:聊一聊AQS,为什么 AQS 底层是什么
在这里插入图片描述

面试官:目标是实现两个线程交替打印,实现字母在前数字在后。
LockSupport,semaphore,countDownLatch,reentranlock+condition

面试官:线程池拒绝策略有哪些

CallerRunsPolicy:线程池之外的线程直接调用run方法执行,除非线程池shutdown

AbortPolicy:直接丢弃任务,抛异常,默认策略

DiscardPolicy :丢弃任务,不报错

DiscardOldestPolicy:抛弃阻塞队列最早的那个任务,把最新的任务重新放到队列中

**面试官:线程池如果线程空闲,哪个参数可以设置多久销毁 **

keepAliveTime

面试官:你有没有遇到过线上的一些故障什么的,举个例子,CPU飙升怎么处理?

排除网络断电等抽风的情况,一般线上问题都是业务代码出现问题或者访问量过高导致的,检查的方式也比较通用,就是经典的top命令查看异常的线程,然后再根据是否是VM Thread决定用jstack 还是jstat 命令作进一步的排查

数据库
面试官:说下MySQL吧,你了解它的索引结构吗?

数据库必问到的索引八股文,B+树

面试官:主键索引和非主键索引区别,索引覆盖怎么回事?

在innodb引擎中,非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,如果没有发生索引覆盖的情况,根据非主键索引查到对应的数据还需要到主键索引做一次回表查询。

索引覆盖指的是一个索引包含了所有需要的字段,不需要回表查了

面试官:如果有个联合索引a,b,然后order a asc, b desc,会用到索引吗

8.0之后的版本可以,之前的版本不支持desc排序

面试官:随着业务增长,数据库如何做优化的?

索引,分区,分库分表(业务去分;水平,垂直),读写分离。
一张表:20个字段。高频字段。水平拆。
2个高频,18几乎不用,垂直拆。
1000w,500w。没有标准。慢了就拆。

面试官:你们是怎么做sql优化的?

一般来说,针对sql的优化都是在业务代码开发前就要做好的,除了基本的表字段设计,在开发的过程还要针对业务方法输出对应的sql语句,然后做好对应的sql review以及explain分析,同时还要考虑到业务的访问量,如果过高的情况下是否需要走强制索引之类的优化

分布式锁:
怎么防止库存的超卖?

面试官:你用过Redis做分布式锁吗?,那你说说Redis分布式锁的核心要保证哪些因素?

加锁,解锁,给锁设置超时时间

面试官:分布式锁如果线程拿不到锁,直接就返回吗

不是,可以设置等待时间,比如Redisson就支持

面试官:分布式锁如果master挂了,然后锁没有同步到其他机器,这时别的线程也拿到锁了,怎么办

Redis做分布式并非绝对安全,最保底的方式就是保证业务幂等

面试官:如果锁即将过期,但业务没处理完,该怎么处理

可以参考Redission的看门狗设计,就是定时对即将失效的锁续期

面试官:幂等性和分布式锁是同时要的吗,为什么都有了幂等性还要加锁

分布式锁可以防止用户误操或者流量过高的情况,如果完全由业务幂等保底,可能会让流量都达到db(很好的问题)

面试官:说说缓存穿透是什么样子,怎么处理,跟缓存雪崩有什么区别?

缓存穿透:指缓存和数据库中都没有的数据,这样每次请求都会去查库,不会查缓存,如果同一时间有大量请求进来的话,就会给数据库造成巨大的查询压力,甚至击垮db系统。

一般解决方案有两种:

1、缓存空对象,但设置一个较短的时间,避免占用大量内存

2、布隆过滤器

缓存雪崩:大量的key同一时间失效,导致流量都打到db

解决方案一般是设置给key设置随机过期时间,或者互斥锁的方式抵挡请求

微服务:
面试官:springcloud介绍一下,有什么组件
说一下Eureka的自我保护机制

面试官:Nacos 核心流程
配置中心内容,主要了解:命名空间+DataID+分组这三者关系,Nacos配置中心支持动态配置

面试官:Seata
分布式事务
两阶段提交协议:准备阶段 提交(回滚)阶段

项目

如果让您设计一个秒杀系统,怎么设计才能承受百万级并发?

面试官:项目安全如何保证的?
数据安全。防盗,防丢。(sha256, 敏感信息 对称加密,备份。权限) (加盐 salt。)定期更换。规定。法律。

业务安全。权限管理。?userId=2。 3 4 uuid。雪花算法,接口安全(https,加盐,防攻击)。

代码安全。错误提示。 e.printStack();。接口 做规范化的返回。

审计,安全扫描。

面试官:如何防止别人伪造我们的用户?
1。不让拿。-https

2。不用久用。-有效期

3。人机交互。国民级应用。

jwt token。

ip白名单。

通道安全。

token有效期。

同一账号如何挤掉另一个账号?
主动和被动。

主动:发消息,踢掉。

被动:更新服务端的token

面试官:如何保证系统稳定性
自己坏的,(备份-副本–集群。)

别人让我坏的。-其他服务坏了

隔离。

机器隔离

线程池隔离

信号量隔离。数字。

限流。

固定时间窗口

滑动时间窗口

令牌桶

漏桶。

熔断。

限流和熔断:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值