①leetcode
最大括号匹配
91-95
dp,栈,正逆向匹配
https://leetcode-cn.com/problems/longest-valid-parentheses/
解码方式
递归转dp,dp再进行优化。
https://leetcode-cn.com/problems/decode-ways/
反转链表
回溯复原ip
https://leetcode-cn.com/problems/restore-ip-addresses/
二叉树中序,morris方法还没看
https://leetcode-cn.com/problems/binary-tree-inorder-traversal/
二叉搜索树
https://leetcode-cn.com/problems/unique-binary-search-trees-ii/
②ssm
mybatis注解开发&&spring基础
③八股文
Q:关于concurrenthashmap?
jdk7中:reentrantlock+segment+HashEntry(链表结构),根据segment锁,hashtable锁整个。 jdk8中:sychronized+CAS+Node+红黑树。查找替换和赋值用CAS锁。
Q:对象的创建过程?
类加载检查,在常量池中检查能不能找到这个类的引用。分配内存,初始化零值,设置对象头例如hashcode、GC分代年龄,调用构造函数。
Q:对象定位的方式?
一是使用句柄。java堆会划分一块内存作为句柄池,引用指向句柄,句柄分为两块,一是指向对象实例的指针,二是指向对象类型数据的指针(方法区)。 二是直接指针,直接指向堆中的对象实例。
Q:判断对象是否死亡?
使用引用计数器,无法避免相互引用的情况,使用可达性分析,如果以GC roots无引用链接,则该对象不被使用。
Q:判断废弃常量?
当没有任何一个变量为其值时,则废弃。
Q:如何判断一个类是无用类?
类的实例被回收、类加载器被回收、java.lang.class无引用,无法通过反射访问这个类。
Q:垃圾回收算法及特点?
标记回收法:先标记,如何统一将这些内存回收,面对大量对象时效率变低,产生内存碎片。 标记复制法:使用一半的内存,复制存活的对象,缺点是内存只使用一半,复制耗时,在老年代效率低。 标记整理法:在标记回收的基础上,回收完对剩下的对象进行整理,消除内部碎片,大量存活数据时开销大,尤其在老年代。
Q:新生代垃圾回收?
将eden及survivor from复制到survivor to 清空eden及survivor from 互换survivor from及survivor to
Q:常见的垃圾回收器?
serial收集器:单线程垃圾收集器,工作时暂停其他线程,对新生代使用复制法,对老年代使用标记整理法,简单高效,内存消耗小。 serial old收集器:标记整理法。 ParNew收集器:serial的多线程版本,优点:仅有Parnew和serial可以和CMS收集器配合使用,以后PaeNew将并入CMS。新生代:标记复制,老生代:标记整理。 Parallel Old收集器:Parallel Scavenge的老年代版本,标记整理算法。 CMS收集器:获取最短回收停顿时间为目的的收集器,工作在老年代,基于标记清除算法。
Q:CMS及G1回收器?
G1计划作为CMS的替代品,CMS基于分代,G1基于分区。G1在GC时都会进行垃圾的碎片整理。G1兼顾吞吐量和GC时间,有更短的GC停顿。CMS时增量更新,G1原始快照。G1可以对重复的String回收,CMS对处理器资源敏感。
Q:选用收集器?
数据分析关注吞吐量,SLA应用(服务)关注延迟和停顿时间。
Q:类的生命周期?
加载、链接、初始化、使用、卸载。