一次面试经历hqjr
volatile
volatile:https://www.cnblogs.com/silyvin/p/9106671.html
long与double的原子性:https://www.cnblogs.com/silyvin/p/10424717.html
伪共享:https://www.cnblogs.com/silyvin/p/11180293.html
在此做个总结:
第一:使用volatile关键字会强制将修改的值立即写入主存;
第二:使用volatile关键字的话,当线程2进行修改时,会导致线程1的工作内存中缓存变量stop的缓存行无效(反映到硬件层的话,就是CPU的L1或者L2缓存中对应的缓存行无效);
第三:由于线程1的工作内存中缓存变量stop的缓存行无效,所以线程1再次读取变量stop的值时会去主存读取。
第四:这种机制下,缓存行无效时,64个字节的缓存行变量全部无效,线程会去主内存读取所有(不限于)变量,这就是伪共享。
第五:volatile确保long与double 8字节64位数据的原子性。
第六:指令重排
jdk cas aba
AtomicStampedReference
https://www.cnblogs.com/java20130722/p/3206742.html
某进程占用的端口
netstat -nap | grep 23288 查看某个进程id的端口占用
如何中断一个线程
线程的状态及interrupt
while判断+阻塞响应
weakreference
深入分析 ThreadLocal 内存泄漏问题
- key 使用强引用:引用的
ThreadLocal
的对象被回收了,但是ThreadLocalMap
还持有ThreadLocal
的强引用,如果没有手动删除,ThreadLocal
不会被回收,导致Entry
内存泄漏。 - key 使用弱引用:引用的
ThreadLocal
的对象被回收了,由于ThreadLocalMap
持有ThreadLocal
的弱引用,即使没有手动删除,ThreadLocal
也会被回收。value
在下一次ThreadLocalMap
调用set
,get
的时候会被清除。
spring data jpa如何join
one-to-one、one-to-many、many-to-one和many-to-many
Spring 用到哪些设计模式
工厂、单例、代理(aop)
观察者(
ServletContextListener,HttpSessionListener
)
jdk工具
jps、jinfo、jmap、jhat、jstack、jar、java、javac
可重入体现在哪里
synchronized 和 ReentrantLock 都是可重入锁。
public synchronized methodA1(){
methodA2();
}
而且public synchronized methodA2(){...;
}
当前线程能够再次获取A类对象的锁
两者区别:
1锁等待时间
2可响应中断
3可公平
守护线程de作用
开放式:
说说分布式的缺点
1 网络风险
2 本来可以join的,现在要调用接口实现
3 程序复杂度增高 尤其分布式事务
4 运维复杂度
5 测试排查复杂度
优点:
1 系统吞吐量
2 系统可用
3 模块化 团队协作 分工明确
4 单体应用发布高效
说说spring cloud
其他
g1说说
其他
微服务有哪些组件
用java 设计 一个redis 缓存服务器
4个线程一个一个处理
-=======-append in others
mysql死锁
mysql使用kill命令解决死锁问题,杀死某条正在执行的sql语句
https://blog.csdn.net/tr1912/article/details/81668423
bean循环依赖
深究Spring中Bean的生命周期
判断括号是否有效-Stack
https://blog.csdn.net/fanhuanianjian/article/details/80030367