22届本科在找工作
项目:
- 项目难点
- 定时任务的技术点
- 单机部署的项目,如果部署两个节点会有什么问题(他就想问多节点执行定时任务用什么框架)
- 网页上两个账号同时登录,怎么做到第二个账号把第一个顶下去?
基础:
多线程
- 线程池参数
- FixedThreadpool有什么问题,用了linkedBlockingQueue,会oom?(问我拒绝策略是什么,我说抛出异常,源码确实是这样,但是他是linked Blocking Queue,根本不能执行拒绝策略)
Mysql
- 查询慢是什么原因
- 怎么知道索引哪里慢,怎么知道哪里索引没用上(explain)
Redis
- redis和MySQL数据一致性
- redis用过吗,我说知道某些场景怎么解决,他直接猜出来我要说缓存雪崩,击穿什么的了,直接跳过
Spring
- 动态代理
- 循环依赖怎么办
Java
ArrayList和LinkedList介绍
Hashmap介绍
Concurrentmap介绍
线程安全用哪个?
cas问题?
CAS的缺点有如ABA问题,自旋锁消耗问题、多变量共享一致性问题.
1.ABA:
问题描述:线程t1将它的值从A变为B,再从B变为A。同时有线程t2要将值从A变为C。但CAS检查的时候会发现没有改变,但是实质上它已经发生了改变 。可能会造成数据的缺失。
解决方法:CAS还是类似于乐观锁,同数据乐观锁的方式给它加一个版本号或者时间戳,如AtomicStampedReference
2.自旋消耗资源:
问题描述:多个线程争夺同一个资源时,如果自旋一直不成功,将会一直占用CPU。
解决方法:破坏掉for死循环,当超过一定时间或者一定次数时,return退出。JDK8新增的LongAddr,和ConcurrentHashMap类似的方法。当多个线程竞争时,将粒度变小,将一个变量拆分为多个变量,达到多个线程访问多个资源的效果,最后再调用sum把它合起来。
虽然base和cells都是volatile修饰的,但感觉这个sum操作没有加锁,可能sum的结果不是那么精确。
2.多变量共享一致性问题:
解决方法: CAS操作是针对一个变量的,如果对多个变量操作,
1)可以加锁来解决。
2)封装成对象类解决。
全部评论
(7) 回帖