随笔

这里引用了网上的图片,我觉的写的很有道理就记录下来了。

java语言高级特性及框架
1,重要的几个集合的原理,如HashMap,HashTable,ConcurrentHashMap,arrayList,LinkedList,TreeMap
1)hashmap和hashtable,concurrentHashMap实现原理,区别和扩容规则
1:线程安全性和存取速度,HasMap线程不安全,存取速度快;HashTable线程安全,但存取速度很慢,每次存取都加锁;ConcurrentHashMap是锁分段技术,既达到了线程安全,又兼顾存取速度。
2:初始化和扩容,HashMap初始化是16,负载因子为0.75,以原容量2倍的方式扩容;HashTable初始化容量为11,负载因子为0.75,以原容量*2+1的方式扩容;ConcurrentHashMap初始化容量是16,负载因子0.75,
2)vector,arrayList和linkedList实现原理和区别,以及扩容规则
1:arrayList和Vector都是基于数组实现的,LinkedList是基于链表实现的。数组方便于查找,链表方便于插入和删除。
2:Vector线程安全,但操作速度慢。LinkedList和ArrayList线程不安全,操作速度快。
3:ArrayList可以插入重复值且有序,HashSet不能插入重复值且无序,是使用HashMap的keySet来实现的,value用了一个new Object()这种类型。
4:扩容ArrayList以1.5倍的方式进行扩容,Vector以2倍的形式扩容。LinkedList无需扩容,HashSet根据HashMap的扩容规则。
5:
3)TreeMap用什么实现的,用来作为有序的Map和LinkedList孰优孰劣
TreeMap是用红黑树来实现的,用来排序比LinkedList要好,无论是查找还是排序,时间复杂度较低。
2,JVM原理,GC,内存结构,类加载器,多态的实现,调优和监控,反射
1)什么对象会被回收,垃圾回收的算法,Serial,ParNew,Parallel Scavenge,CMS,G1等收集器的特点和用途
1:那些内存需要被回收?
答:通过GC Roots进行可达性分析,如果不可达则证明对象需要被回收。GC Roots包括静态变量(引用)、常量、虚拟机栈、本地方法栈
2:有哪些常用的垃圾回收算法?
标记-清除算法、标记-整理算法、分代收集算法
3:引用的四种类型
强引用(不会被收集)、软引用(内存不够被收集)、弱引用(第一次就被收集)、幽灵引用(仅仅发送通知)
4:安全点和安全区域
安全点:当到达安全点时线程才暂停(进行GC),安全点一般是方法调用、循环跳转、异常跳转等。HotSpot生成一个轮询指令(如test %eax 0x160100),当需要暂停线程时,将地址0x160100设为不可读,这样线程就会陷入异常,在异常处理中等待。
安全区域:是一系列代码,这段代码不会出现引用关系发生变化。线程执行到这段代码时,会标识自己进入安全区域。离开安全区域时会判断GC roots 是否完成。为了解决不在执行状态(非Running)的线程怎么样暂停问题。
4:并发和并行的区别
并发是指多条线程在CPU时间片轮转下交替运行,从外观看起来类似于同时执行。
并行是指多个线程在多个CPU上同时执行,需要多个处理器支持。
5:各垃圾收集器的特点和用途
Serial收集器:单线程回收,对于单CPU不会带来线程上下文切换的开销,只做新生代回收,简单而高效
。对于几十乃至一两百兆的新生代,可以选用。
ParNew收集器:Serial的多线程版本,新生代收集器,CPU越多效率越高。 
Parallel Scavenge收集器:新生代收集器,多线程并行执行,吞吐量优先,可以控制GC停顿时间和吞吐量大小,可以开启自适应调解策略。
CMS收集器:老年代收集器,并发收集低停顿。初始标记、并发标记、重新标记、并发清除。1,3花费时间段,2,4花费时间长但可以与用户
线程一起运行。缺点是:1,对CPU资源敏感;2,并发清理产生很多浮动垃圾;3,基于标记清除算法会产生大量空间碎片。
G1收集器:

2)堆内存区域,Eden区,Survivor1,Survivor2,Old,Permanent(方法区和常量池),本地方法栈,虚拟机栈,程序计数器
1:JVM内存结构可分为堆区、java虚拟机栈、本地方法栈、方法区、程序计数器(PC)。
2:堆区可分为年轻代(Young)和老年代(Tenured),年轻代可分为Eden区、Survivor1、Survivor2三个区。
3:永久代包含方法区和运行时常量池,用来存放类加载的信息,可以被GC进行回收,当常量池内容过多,或者类加载过多时,可能OOM。
4:本地内存,基于通道(channel)和缓冲区(Buffer)的I/O方式,可以使用Native函数库直接分配堆外内存,然后通过一个directByteBuffer对象作为这块内存的引用进行操作,可以避免Java堆和Native堆来回复制数据。
5:程序计数器,执行java方法时当前线程所执行字节码的行号,线程独有。执行Native方法是该区域为空(undefined)。
6: 虚拟机栈,运行java字节码。本地方法栈运行本地方法。
3)虚拟机类加载父委托机制,如何实现,这么实现的好处是什么。类加载过程
1:父委托机制是指,
4)多态的实现,重载和重写的区别,静态分派,动态分派,静态解析,动态解析,方法的调用过程
5)jstatk,jstat,jps,jmap,jconsole,visualVM,
3,多线程相关,线程的实现,volatile,final,threadLocal(原理和举例),AQS,CAS,线程池,CountDownLatch,CyclicBarrier,Semaphore实现原理,阻塞队列
1)线程的两种实现方式,那种更好,为什么?
2)volatile两种作用,内存语义,final的作用。
3)threadLocal实现原理,举例说明(spring中用到过)
4)AQS实现原理(同步队列,获取和释放同步状态),ReentrantLock(公平锁和非公平锁),读写锁(实现原理),与sychronized有什么异同
5)CAS如何实现同步(配合volatile),如何解决ABA问题
6)线程池和阻塞队列的实现原理,为什么使用线程池更好些
7)CountDownLatch,CyclicBarrier,Semaphore实现原理,还有没有别的实现方式
4,IO,BIO,NIO,AIO实现原理,会使用mina
1)BIO作为阻塞式IO如何进行数据传输的(结合OS读写缓冲区的阻塞说明)
2)NIO的实现原理,为什么不阻塞?(结合轮训和上下文切换说明)
3)Mina和Netty的原理
5,字符串相关的问题,存储,使用,要兼顾JDK6和JDK7以后的版本有什么不同之处
1)字符串存储方式,string,StringBuffer和Stringbuilder的区别,频繁使用“+”作为连接符的坏处
2)==,equals,intern()判断相等的时候问题
3)字符串的常量池
6,三大框架,SSI
1)SpringMVC架构和实现原理
2)Spring的IOC和AOP原理(动态代理)
3)mybatis实现原理。
4)spring和mybatis的缓存实现

 网上学习书籍推荐

 http://www.open-open.com/news/view/2b5e92

http://www.cnblogs.com/itfly8/p/5128025.html

原文地址:https://www.cnblogs.com/shapeOfMyHeart/p/6529177.html