①leetcode

最大括号匹配

91-95

dp,栈,正逆向匹配

https://leetcode-cn.com/problems/longest-valid-parentheses/

解码方式

递归转dp,dp再进行优化。

https://leetcode-cn.com/problems/decode-ways/

反转链表

https://leetcode-cn.com/problems/reverse-linked-list-ii/solution/fan-zhuan-lian-biao-by-19216801-kux2/

回溯复原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:类的生命周期?

加载、链接、初始化、使用、卸载。