http请求特别慢怎么回事
答:vmstat、nmon、top
检查网络:首先排查网络,ping服务器延迟是否过大
检查服务器内存:看内存是否不够了
检查cpu负载:命令查看cpu
检查I/O:排除系统自身的性能问题
抓取进程堆栈信息:jStack抓取堆栈信息
Redis用过吗?一般用在什么场景下的?然后如何提高redis命中率
答:
排行榜、热点数据、主要是需要频繁调取的数据,为了减轻数据库压力
计数器、分布式锁,
像我之前做过的购物车,就是用redis做的
sleep和wait方法有什么区别?
答:
sleep是thread方法,wait是objet的
sleep可以被自动唤醒,必须抛出异常或者tay/catch,wait必须要被其他方法唤醒
sleep不会释放锁,但是lwait会,而且会加入到等待队列中
jvm为什么要分堆/栈?
答:
对象的属性其实就是数据,存放在堆中;而对象的行为(方法),就是运行逻辑,放在栈中
栈代表了处理逻辑,而堆代表了数据
mysql和oracle的区别?
答:
首先是mysql免费
mysql有主键自增、oracle没有,一般是序列
mysql分页是limit、oracle是rownum
多线程池用多少比较合适?判断依据是什么?
答:《java并发编程实战》作者推荐算法
线程数 = cpu核心 *(1+平均等待时间/平均工作时间)
可以进行压测,监控 JVM 的线程情况以及 CPU 的负载情况,根据实际情况衡量应该创建的线程数,合理并充分利用资源。
哪些情况下索引是没有用的?
答:
where子句后条件判断null、!= 、< >
or\like查询以%开头
synchronized锁和lock有什么区别?
答:
syn是关键字,是jvm的隐式实现,lock是接口
syn可以自动释放锁、lock需要调用unlock方法
lock是可中断锁、syn是不可中断锁,必须等到线程执行完释放
syn和lock都是非公平锁,但是lock可以设置成公平锁
线程池的线程执行完工作队列的任务之后会await还是如何?
答:
程同时进入timed_waiting 状态,到了keepAliveTime 时间,线程池中就没有线程了。
如果有任务来了,在时间限定内复用线程,如果超过时间重新创建线程。任务执行完成,和之前一样!
http与https有什么区别?
答:
https是http+ssl加密协议
http默认端口是80、https默认端口是443
https需要花钱买证书
如果cpu100%如何排查问题?
答:
使用top -c 查看CPU 占用情况
找到占用率高的进程以后,再top -Hp pid 定位到具体线程
jstack分析
oom如何查找问题?
答:
Mysql的行锁和表锁?
答:
行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁
级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持
为什么能保证原子性。那个类是什么类来着?atomic子包
答:
至于AtomicInteger,首先有volatile value保证变量的可见性,再借助了CPU级指令CAS保证了原子性。
qps一万五的服务如何做限流?:Sentinel sen te no
竞争对手恶意调用短信接口耗费你的钱,如何防止?
用redis存手机号,设置一个过期时间,没过期之前不允许继续调用
设置二级缓存,记录手机号调用次数,达到一个阈值后,封禁一天或者永久
如何优化一个系统的性能