首页 > 技术文章 > 一次面试经历hqjr

silyvin 2019-08-17 12:44 原文

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的生命周期

spring 循环依赖

 

 

判断括号是否有效-Stack

https://blog.csdn.net/fanhuanianjian/article/details/80030367

 

推荐阅读