• 随笔


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

    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

  • 相关阅读:
    WebGL编程指南案例解析之绘制一个点
    在pixi中使用你的自定义着色器
    一个关于运维人员做事的很好的case,拿出来和大家共勉
    2015小目标
    在工作中修行
    ROW模式的SQL无法正常同步的问题总结
    从周末教儿子学溜冰联想到带人
    group_concat函数导致的主从同步异常
    招聘运维工程师
    一个锁的奇怪问题分析总结
  • 原文地址:https://www.cnblogs.com/shapeOfMyHeart/p/6529177.html
Copyright © 2020-2023  润新知