多线程了解过么?项目中哪里使用到了多线程?
了解过。例如消息中心批量发送邮件,数据库中数据导入到ES中等等
线程池中临时(救急)线程工作原理?
线程池中有核心线程数、最大线程数、工作队列这几个概念,最大线程数 = 核心线程数 + 临时线程数。如果说来个几个线程已经占满了核心线程,那么之后来的线程就会进入到工作队列中去。如果说之后来的线程也把工作队列占满了,那么就会启用临时线程来进行处理操作了。
Redis用过么?使用场景是什么?
使用过,分布式锁和缓存
缓存击穿如何如何处理?
击穿就是缓存中没数据,数据库中有数据,导致大量请求打到数据库,造成压力过大
解决方案:设置热点数据永不过期;加互斥锁,让第一个线程进来,后面等待,第一个出来后,其他线程去缓存中读
Redis分布式锁实现原理?
基于setnx命令来实现的。redis实现分布式锁我们通过redisson来实现,redisson做了很多的增强和优化。
redisson也是首先去加锁,如果加锁成功的话,会另开一个线程进行监控持有锁的线程,进行续期,就是看门狗机制。如果释放锁的话,我们手动来释放,通知看门狗无需监听。
如果说获取锁失败了,那么还有重试机制,会不断进行循环获取锁。
消息中间件用了么?介绍一下RabbitMQ的工作原理?
先大概介绍一下结构:RabbitMQ分为生产者、消费者、信道(channel),broker,虚拟机,交换机,队列几个部分。
生产者发送消息通过信道发送到交换机上,交换机在通过一定规则发送给队列,然后消费者去对应队列中去获取消费即可。交换机分为很多种,按照不同规则发送到不同队列
Spring中的IOC和AOP用过么?
使用过,用自己理解介绍
AOP使用场景说一下?
最常用的就是自定义log注解,记录接口日志
接口的性能优化是否遇到过?
其实我们经常用到过,但是脑子短路,我说没有…
- 数据量比较大,批量操作数据入库
- 耗时操作考虑异步处理(比如发送邮件)
- 恰当使用缓存
- 优化程序逻辑、代码(比如提前return、减少不必要校验参数…)
- 优化SQL语句
- 远程调用串行改为并行
- …
MySQL这块性能优化讲一下?
可以借助explain帮助我们参考优化点
表的设计优化
索引优化:索引列不要参与计算、不要违反最左匹配原则、范围查询右边的索引会失效、字符串查询要用单引号、模糊查询%开头索引会失效
语句优化:避免使用select *、要避免索引失效、where子句中不要进行表达式操作、join也可以优化
数据量特别大的时候要考虑分库分表
ES用过么?
没用过,用的很少,停留在会用层面
还有其他问题么?
总结
没准备好,挺突然的。以为只是简单聊聊,结果这是初轮电话面试,估计凉凉,总结继续投简历