一面
1、String内容存放在哪儿?
答:运行时常量池,然后把jvm的内存结构讲了一下,堆、栈、程序计数器、方法区等,每
块区域的作用之类的。
2、jvm的回收机制是什么?
问的有点大,只好从分代回收算法说起,从GC ROOTS的引用链机制到新生代的小空间复制
算法再到老生代的标记清除算法,最后就是新生代和老生代之间的关系以及跃迁等。
3、讲讲jvm的类加载机制吧,委托双亲机制吧。
反射机制是如何利用类加载机制的呢?
4、懂哪些设计模式?
答:单例,建造者,观察者,模板方法模式,迭代器模式等。
5、你在项目中用到过观察者模式吗,怎么用的?
答:做统一配置组件的时候使用到了zookeeper的发布订阅,创建了监听链表,完成应用系
统的注册和同步。
6、写个单例模式吧,把你认为效率最高的单例实现写出来。
答:当然是通过jvm的内部类机制实现单例了,又快又安全
7、再写一个双检查的懒汉单例模式吧。
8、为什么要用volatile关键字?
答:在高并发时会出现并发模式异常,volatile可以防止指令重排,创建对象操作并不是一
个原子操作,分为三个步骤
(1)构建对象:根据Person类元信息确定对象的大小,向JVM堆中申请一块内存区域并构
建对象的默认信息(加载Person对象成员变量信息并赋默认值如int类型为0,引用类型为
null)。
(2)初始化对象:然后执行对象内部生成的init方法,初始化成员变量值,同时执行搜集
到的{}代码块逻辑,最后执行对象构造方法。
(3)引用对象:对象实例化完毕后,再把栈中的Person对象引用地址指向Person对象在堆
内存中的地址......
9、能不能讲讲线程的内存模型?
10、谈谈你对cas的理解。
全部评论
(0) 回帖