Java核心技术卷I知识点

    Java內建了对网络编程、数据库连接、多线程等高级程序设计的支持。
基础:
    Java基本数据类型有8种,包括byte1,short2,int4,long8,float4,double8,boolean,char
        boolean类型不能和整型互相交换。
    变量初始化:必须使用赋值语句对变量进行显式初始化。
    常量:使用final声明变量,修饰后的变量只能被赋值一次,一旦赋值就不能再更改。常量名使用大写。
    自增自减:在表达式中,,前缀先加1再运算,后缀则先使用原来的值。
    位运算符:可以直接对组成整型数值的各个位操作。可以应用于布尔值,则没有短路效果。<<和>>是将二进制位左右移位。>>>使用0来填充高位,而>>是使用符号位来填充。没有<<<操作符。例如:取n的第三位int flag=n&(1<<3)>>3
    字符串:Java无内置字符串类,而是提供了一个预定义类String,即不可变字符串、共享字符串。
        当需要由较短字符串构建字符串时,可使用StringBuilder。
        StringBuffer是StringBuilder的前身,StringBuffer效率低,但可以在多线程中使用,即线程安全。而通常在单线程中,使用效率高的StringBuilder。
        块:嵌套块中不能定义同名变量。
    Switch:将从与选项值匹配的case处开始执行直到遇见break或者结束。case标签必须是整数或者枚举。不能测试字符串。
    数组:
        数组排序可使用Arrays的sort方法,这个排序使用了优化的快速排序算法。
面向对象OOP:
    识别类的规则:在分析问题的过程中找到名词、动词。
    类关系:依赖(uses a - - ->)、聚合(has a <>------实线)、继承(is a --------|> 实线为类继承,虚线为接口继承) P103
    对象和对象变量:一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。new操作符的返回值也是一个引用。对象变量不会自动初始化为null,必须显示或者new来初始化。
    final实例域:必须确保在每一个构造器执行之后,这个域的值被设置。final大都修饰基本类型或者不可变类如String
    构造器:可以重载,如果在构造器没有显式给域赋初值,则会被自动赋予初值,数值为0,布尔为false,对象引用为null(这也是和局部变量的区别)
    代码块:先执行代码块再执行构造器主体。即顺序为:静态数据初始化->静态语句和静态代码块->普通数据初始化一个默认值->以此执行所有域初始化语句和代码块->构造器。静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
继承:
    不允许扩展的类用final修饰,final类只有其中的方法自动成为final,而不包括域。
    抽象类可以包含具体数据、具体方法、抽象方法。而抽象方法充当占位的角色。
    在Java中,只有基本类型不是对象。
Object:
    Equals方法:在Object中是判断是否具有相同的引用,而对于普通对象则没有意义,所以要重载。
    HashCode方法:字符串的散列码是由内容导出的,是由对象导出的一个整型值,无规律,默认为对象的存储地址。
    ToString方法:表示对象值的字符串
    Clone方法:创建一个对象的副本,且系统将为新实例分配空间。
对象包装器:是final的,一旦构造了包装器,就不允许更改其中的值。
反射:三大常用类,分别描述方法、构造器、域变量
接口与内部类:
    接口中的所有方法自动的属于public,不必提供关键字public,在接口中还可以定义常量但接口绝不能含有实例域。也不能在接口中实现方法。可将接口看成没有实例域的抽象类。接口不是类,所以不能使用new实例化一个接口,却可以声明一个接口的变量,此时接口变量必须引用实现了接口的类对象。接口中不能包含实例域或者静态方法,但可以包含常量,自动设为public static final。
    对象克隆:当拷贝一个变量时,原始变量与拷贝变量引用同一个对象。改变一个变量所引用的对象会对另一个产生影响。而如果使用clone,则只是初始状态一样,各自改变互不影响,但只是基本类型或者数据域不影响,引用域还是同一个,即浅拷贝,它并没有克隆包含在对象中的内部对象。由于Object对象的clone方法是protected,且为浅复制,因此需继承Cloneable接口并重写。
    接口与回调:如定时器定时回调一个函数,相比回调函数,给回调的类传一个类要更灵活,同时需要指定回调类中的什么方法。
    内部类:可以访问该类定义所在的作用域中的所有数据。内部类的对象总有一个隐式引用指向了创建它的外部类对象,即outer。这个外围类的引用在构造器中设置。编译器修改了所有内部类的构造器并增加了外围类的引用。
    局部内部类:不能用public或private访问说明符声明,它的作用域限定在声明这个局部类的块中。局部类的方法还可以访问外部类的局部变量,只不过这些局部变量必须为final
    静态内部类:在内部类不需要使用外围类对象的关联,即外围类的数据域时,应使用静态内部类。如通过排序后最大最小值一起返回,将它们一起包含在一个静态内部类中。
    代理proxy:代理类是在程序运行过程中创建的,一旦被创建,就编程了常规类,与虚拟机中的任何其他类没有区别。创建代理对象,使用Proxy类的newProxyInstance,有三个参数。所有代理类都扩展于Proxy类。一个代理类只有一个实例域,即调用处理器。为了履行代理对象的职责,所需要的任何附加数据都必须存储在调用处理器中。对于特定的类加载器和预设一样的接口,只能有一个代理类,即一个类加载器和接口数组两次newProxyInstance得到同一个类的两个对象。代理类一定是public、final的。如http://www.cnblogs.com/machine/archive/2013/02/21/2921345.html
异常:
    异常对象都是派生于Throwable类的实例,包括Error(描述了Java运行时系统的内部错误和资源耗尽错误)和Exception(包含RuntimeException,即由程序错误导致的异常,如错误类型转换、数组访问越界、访问空指针和IOException,即程序没错,由于I/O错误这类的异常)。方法是声明在其首部声明所以可能抛出的异常。
    不需要声明Java的内部错误,即Error错误(我们没有控制能力),也不应该声明从RuntimeException继承的未检查异常。P484
    总之,一个方法必须声明所有可能抛出的已检查异常,而未检查异常要么不可控制,要么应该避免发生。(子类方法不能覆盖父类方法的异常声明范围,若父类不声明,则子类也不能声明)
    自定义异常:继承一个类,添加默认无参构造函数和包含错误信息的有参构造函数。
    通常将异常传递给调用者,如果父类没有定义,则必须在方法内捕获方法代码出现的每一个已检查异常。
    建议使用try/catch和try/finally语句块。
    分析堆栈跟踪元素:堆栈跟踪stack trace是一个方法调用过程的列表
    异常机制建议:只在异常情况下使用异常机制,否则频繁捕获将花费很多时间。、不要过分地细化异常否则将增大代码量。、利用异常层次结构,应寻找更加适当的子类或者自己的异常类。、不要压制异常,有时候异常很难抛出,则需要将异常关闭,即忽略这个异常,否则编译器会对这个异常进行考虑。、检测错误时要苛刻,在出错的地方抛出异常要比后面抛出空指针好。、不要羞于传递异常,即早抛出,晚捕获。
泛型Generic Programming:
    泛型比杂乱的使用Object,再强制转换安全性,可读性高的多。泛型相当于C++中的模板。
    泛型类定义:使用<T>,类型变量使用大写字母,且比较短。E表示集合的元素类型,KV表示KeyValue,T表示任意类型。
    方法泛型:public <T> T getPair(T t),有时需要限制T,则public <T extends Pair> T getPair(T t)
    泛型的原理:JVM会在定义一个泛型类型时自动提供一个相应的原始类型,擦除类型变量,并替换为限定类型,如果没有限定类型就使用Object。当程序调用泛型方法时,如果擦除返回类型,编译器将自动插入强制类型转换,这个过程包含两条虚拟机指令:1用原始方法返回调用2强制转换。
集合:
    在Java类库中,集合类的基本接口是Collection接口。这个接口有两个基本方法:add、iterator。迭代器通过反复调用next方法,可以逐个访问集合中的元素。但是到达了集合的末尾会抛出一个NoSuchElementException,因此需要在next前调用hasNext方法。迭代器相当于foreach。应将Java迭代器认为是位于两个元素之间。当调用next时,迭代器就越过下一个元素,并返回刚越过的那个元素的引用。删除元素使用Iterator接口的remove方法会删除上一次调用next返回的元素。因此必须将next和remove一起使用。
    Map实现了Map接口,其他都实现了Collection接口。如ArrayList可动态增长和缩减的索引序列、LinkedList在任何位置插入删除的高效有序序列、HashSet无重复的无序集合、TreeSet有序集、HashMap键值关联的结构、TreeMap键值有序映射表等。
    LinkedList实现了List接口。在Java中,所有链表实际上都是双向链接的。即每个结点还存放着指向前驱结点的引用。
    ArrayList是数组和动态的,实现了List接口。它还封装了一个动态再分配的对象数组。ArrayList不是同步的,即非线程安全。
    快速查找所需对象--散列表(hash table):散列表为每个对象根据对象的实例域计算一个整数即散列码,是由String类的hashCode方法产生的。583,179。散列冲突P583 在Java中,散列表用链表数组实现。每个列表被称为桶,桶的大小默认为16。装填因子决定何时对散列表进行再散列,默认为0.75,即百分之75时就用双倍桶数再散列。
    Set是基于散列表的,它的add方法首先会在集中查找要添加的对象,如果不存在就添加。如Java集合中的HashSet。
    TreeSet和散列集很相似,不过树集是一个有序集合,可以以任意顺序将元素插入到集合中,在对集合遍历时,每个值将自动地按照排序后的顺序呈现。排序是使用的红黑树。每次添加都将被安排到正确的位置上。比添加到散列表中慢,但是比添加到数组或链表的正确位置要快很多,如树中又n个元素,平均新插入要查找log(2为底)n次。TreeSet如何比较元素:树集假定元素实现了Comparable接口。
    队列与双端队列:Deque接口和ArrayDeque(初始容量为16)、LinkedList实现。这两个实现都提供双端队列并可以增加队列长度。
    优先级队列:元素以任意顺序插入,总以排序顺序检索、删除。因为内部使用了最小堆。它可以保存实现了Comparable接口的类对象或者在构造器中提供比较器的对象。
    映射表Map:Java类库提供了两个实现:HashMap装填因子默认0.75和TreeMap,都实现了Map接口。散列映射表对键进行散列,树映射表用键的整体顺序对元素排序并组织成搜索树。散列表要快一点,树可以排序。键必须是唯一的,不能再同一个键上放两个值。可以获得映射表的视图,有三个键集Set、值集合Collection(不是集)和键/值对集Set。这里的Set不是HashSet,也不是TreeSet,而是实现了Set接口的其他类对象。不能再视图中添加元素。
    算法:
        Collections.sort()对列表使用了归并的变体排序(先把列表所有元素放入数组中排序,再把排序好的复制回列表)
        Collections.binarySearch()二分查找
        Collections.min
        Collections.max
        Collections.reverse
多线程:
    多进程与多线程的区别在于每个进程拥有自己的一套变量,而线程则共享数据。
    Thread.sleep是Thread类的静态方法,将暂停给定的毫秒数,暂停当前线程的活动。
    实现Runnable接口 r,并使用Thread t=new Thread(r);t.start()来启动。
    实现Thread类,目前已不推荐使用,如果需要大量使用多线程,要使用线程池。Thread的start方法:将启动这个线程,并引发调用run方法,然后这个方法将立即返回,并且新线程将并行运行。
    P637中断线程:当线程的run方法执行方法体最后一条语句后,并经由执行return语句返回时或者出现在方法中未捕获的异常时,线程将终止。interrupt方法可以用来请求终止线程,调用后,线程的中断状态将被置位。但是如果线程被阻塞,就无法检测中断状态。当在一个被阻塞线程(sleep,wait)调用interrupt时,阻塞调用将被InterruptedException异常中断。线程中断不过是引起它的注意,线程将简单地将中断作为一个终止的请求。有两个类似的方法:interrupted和isInterrupted。Interupted方法是一个静态方法,它检测当前线程是否被中断,调用后会清除该线程的中断状态。isInterrupted方法是一个实例方法,可用来检验是否有线程被中断,调用不会改变中断状态。interrupt方法会向线程发送中断请求,线程的中断状态将被设置为true,如果当前该线程被一个sleep调用阻塞,那么将抛出InterruptedException异常。
    线程状态:有6种,new新生、runnable可运行、blocked被阻塞、waiting等待、timed waiting计时等待、terminated被终止。线程的属性包括:线程优先级、守护线程、线程组、以及处理未捕获异常的处理器。
    stop和suspend可以终止线程,现已弃用。
    同步:通常两个或者以上的线程共享对同一数据的存取,于是可能彼此踩了对方的脚。这种情况称为竞争条件。竞争条件出现原因为操作不是原子操作,JVM的字节码在任一条指令点上都可能被中断。
    锁对象:有两种机制防止代码块受并发访问干扰。1synchronized关键字,自动提供一个锁和相关的条件(显式锁)2ReentrantLock类,即构建一个可以被用来保护临界区的可重入锁,当然可以创建一个带有公平策略的锁。在类中定义一个Lock = new ReentrantLock; 然后lock和unlock,unlock最好在finally之中,否则出异常将永远不解锁。每个对象有自己的ReentrantLock对象。线程直接互不影响。锁是可重入的,因为线程可以重复地获得已经持有的锁,所以被锁保护的代码可以调用另一个使用相同锁的方法,因为锁保持一个持有计数来跟踪对lock的嵌套使用。
    条件对象或者条件变量:进入临界区却发现在某一个条件满足后才执行,但已经获得了锁。如已经获得锁,然后检查条件,发现条件不满足,于是等待,但其他线程没法获得锁。一个锁对象可以有一个或多个相关的条件对象。可以使用new Condition方法获得一个条件对象。然后发现条件不足,则await阻塞当前线程并放弃锁。等待获得锁的线程和await方法的线程本质不同,一旦await之后,它进入该条件的等待集,不能自己激活自己,如一直不被激活就导致死锁。当锁可用时,该线程不能马上解除阻塞,而是一直阻塞直到另一个线程调用同一个条件上的signalAll,重新激活因这个条件而等待的所有线程而变成可运行状态。应该在对象的状态有利于等待线程的方向改变时调用signalAll。调用signal方法则只会随机选择解除等待集中的某个线程阻塞状态。但如果发现自己仍不能运行就会再次被阻塞,如果没有其他线程再次调用signal,整个系统就死锁了。
    synchronized:Java中的每一个对象都有一个内部锁,如果方法用synchronized声明,那么对象的锁将保护整个方法,即要调用该方法,线程必须获得内部的对象锁。这样就可以在声明方法时将方法添加修饰符synchronized,而不是用一个显式锁。而内部对象锁只有一个相关条件。wait方法添加线程到等待集,notifyAll/notify方法解除等待线程的阻塞状态。等价于上面的await和signalAll等。
    同步阻塞:每一个对象都有一个锁,线程可以通过调用同步方法获得锁,还有一种机制可以获得锁,通过进入一个同步阻塞,形如synchronized(obj){},于是它获得obj的锁。有时使用一个对象的锁来实现原子操作,称为客户端锁定。客户端锁很脆弱,通常不推荐。
    监视器:监视器是只包含私有域的类、每个监视器类的对象有一个相关的锁、使用该锁的所有的方法进行加锁即方法开始时自动获得,结束时自动释放。
    Volatile:这个关键字为实例域的同步访问提供了一种免锁机制,如果声明一个域为它,那么编译器和虚拟机将知道这个域可能被另一个线程并发更新。如一个对象的域被一个线程设置而被另一个线程查询,则锁后不能同时进行,而如果分别使用独立锁则比较麻烦,所以可以使用volatile。volatile不提供原子性,而只提供可见性,即每次取到的都是最新的,所以仍有安全性问题。
    读/写锁:java.util.concurrent.locks包定义了两个锁类,一个是上面的ReentrantLock,还有一个是ReentrantReadWriteLock类。如果很多线程从一个数据结构读取数据而很少线程修改其中的数据,则比较有用。使用时1构造ReentrantReadWriteLock对象 2抽取读锁和写锁Lock readLock = rwl.readLock();Lock writeLock=rwl.writeLock(); 3对所有访问者加读锁(读者共享访问)而对所有的修改者加写锁(互斥访问)。
    并发访问安全的三种情况:1final、2由公有锁保护、3域是volatile的
    阻塞队列:上面的都是Java并发程序设计基础的底层构建快,而自己使用时应使用更加专业的结构。对于许多线程问题,可以使用一个或者多个队列以优雅安全的方式将其形式化。如生产者插入队列,消费者则取出。如LinkedBlockQueue、ArrayBlockQueue。
    线程安全的集合:如synchronizedCollection、synchronizedList、synchronizedSet、synchronizedSortedSet、synchronizedMap、synchronizedSortedMap
    Callable与Future:Runnable封装一个异步运行的任务,可当成没有参数和返回值的异步方法。Callable与之类似,但是有返回值。Callable接口是一个参数化的类型,只有一个方法call。Future保存异步计算的结果,将Future对象交给某个线程,Future对象的所有者在结果计算好之后就可以获得它。FutureTask包装器是一种非常便利的机制,可将Callable转成Future和Runnable,它同时实现了二者的接口。
    执行器:如果程序中创建了大量的生命期很短的线程,应该使用线程池(thread pool)。将Runnable对象交给线程池,就会有一个线程调用run方法。当run方法退出时,线程不会死亡,而是在池中准备为下一个请求提供服务。执行器(Executor)类有许多静态工厂方法来构建线程池,如newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor。这3个方法返回实现了ExecutorService接口的ThreadPoolExecutor类的对象。可用如Future<?> submit(Runnable task)等将Runnable或Callable对象交给ExecutorService,该池会在方便的时候尽早执行提交的任务。调用submit时,会得到Future对象,可用来查询该任务的状态。当用完一个线程池的时候,调用shutdown。
        总结步骤:1调用Executors类静态方法newCachedThreadPool或者newFixedThreadPool 2调用submit提交Runnable或者Callable对象 3保存好返回的Future对象 4不再提交任务时,调用shutdown。
    
    
    
    
    
    
    
    
    
    
    
    
    
    
   
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ....................................................................................................................................................... 19 2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 ..................................................................................................................................... 21 2.2.1. 程序计数器(线程私有) ................................................................................................................ 22 2.2.2. 虚拟机栈(线程私有) .................................................................................................................... 22 2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 ...................................................................................... 23 2.2.5. 方法区/永久代(线程共享) ..................................................................................................... 23 2.3. JVM 运行时内存 ................................................................................................................................. 24 2.3.1. 新生代 .......................................................................................................................................... 24 2.3.1.1. 2.3.1.2. 2.3.1.3. 2.3.1.4. Eden 区 .................................................................................................................................................... 24 ServivorFrom........................................................................................................................................... 24 ServivorTo .............................................................................................................................................. 24 MinorGC 的过程(复制->清空->互换) ....................................................................................... 24 1:eden、servicorFrom 复制到 ServicorTo,年龄+1................................................................................... 25 2:清空 eden、servicorFrom............................................................................................................................. 25 3:ServicorTo 和 ServicorFrom 互换................................................................................................................25 2.3.3.1. 2.4.1. 如何确定垃圾 .............................................................................................................................. 26 2.4.1.1. 引用计数法............................................................................................................................................... 26 2.4.1.2. 可达性分析............................................................................................................................................... 26 2.3.2. 2.3.3. 老年代 .......................................................................................................................................... 25 永久代 .......................................................................................................................................... 25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................................................................................................................. 26 2.4.2. 2.4.3. 2.4.4. 2.4.5. 2.4.5.1. 2.4.5.2. 2.6.1. 2.6.1.1. 2.6.1.2. 2.7.1. 2.7.2. 2.7.3. 2.7.4. 2.7.5. 2.7.6. 2.7.6.1. 标记清除算法(Mark-Sweep) .............................................................................................. 27 复制算法(copying)................................................................................................................. 27 标记整理算法(Mark-Compact).................................................................................................. 28 分代收集算法 .............................................................................................................................. 29 新生代与复制算法 .............................................................................................................................. 29 老年代与标记复制算法 ......................................................................................................................29 2.5. JAVA 四中引用类型 ........................................................................................................................... 30 2.5.1. 强引用 .......................................................................................................................................... 30 2.5.2. 软引用 .......................................................................................................................................... 30 2.5.3. 弱引用 .......................................................................................................................................... 30 2.5.4. 虚引用 .......................................................................................................................................... 30 2.6. GC 分代收集算法 VS 分区收集算法................................................................................................ 30 分代收集算法 .............................................................................................................................. 30 在新生代-复制算法............................................................................................................................. 30 在老年代-标记整理算法.....................................................................................................................30 分区收集算法 .............................................................................................................................. 31 2.7. GC 垃圾收集器 ................................................................................................................................... 31 2.6.2. Serial 垃圾收集器(单线程、复制算法)................................................................................ 31 ParNew 垃圾收集器(Serial+多线程) ................................................................................... 31 .......................................................... 32 ........................................................................... 32 ......................................................................... 33 ..................................................................................... 33 初始标记 .............................................................................................................................................. 33 Parallel Scavenge 收集器(多线程复制算法、高效) Serial Old 收集器(单线程标记整理算法 ) Parallel Old 收集器(多线程标记整理算法) CMS 收集器(多线程标记清除算法) 2.7.6.2. 2.7.6.3. 2.7.6.4. 2.8.1. 2.8.2. 2.8.3. 2.8.4. 2.8.5. 2.8.1. 2.8.2. 2.8.2.1. 2.8.2.2. 2.8.3. 2.8.4. 2.8.5. 并发标记 .............................................................................................................................................. 34 重新标记 .............................................................................................................................................. 34 并发清除 .............................................................................................................................................. 34 G1 收集器 .................................................................................................................................... 34 2.8. JAVA IO/NIO ....................................................................................................................................... 34 2.7.7. 2.9. 2.9.2. 2.9.2.1. 2.9.2.2. 2.9.2.3. 2.9.3. 2.9.4. 2.9.4.1. 2.9.4.2. 阻塞IO模型 ................................................................................................................................ 34 ............................................................................................................................ 35 ........................................................................................................................ 35 ........................................................................................................................ 36 ................................................................................................................................ 36 .................................................................................................................................. 36 .................................................................................................................................... 37 NIO 的缓冲区 .....................................................................................................................................38 NIO 的非阻塞 .....................................................................................................................................38 ....................................................................................................................................... 40 非阻塞 IO 模型 多路复用 IO 模型 信号驱动 IO 模型 ............................................................................................................................................ 40 ........................................................................................................................................ 40 JVM 类加载机制 ................................................................................................................................. 41 2.9.1.1. 2.9.1.2. 2.9.1.3. 2.9.1.4. 2.9.1.5. 2.9.1.6. 2.9.1.7. 2.9.1.8. 加载 .......................................................................................................................................................... 41 验证 .......................................................................................................................................................... 41 准备 .......................................................................................................................................................... 41 解析 .......................................................................................................................................................... 41 符号引用 .............................................................................................................................................. 42 直接引用 .............................................................................................................................................. 42 初始化 ...................................................................................................................................................... 42 类构造器 .............................................................................................................................. 42 类加载器 ...................................................................................................................................... 42 启动类加载器(Bootstrap ClassLoader) ......................................................................................... 43 扩展类加载器(Extension ClassLoader)..........................................................................................43 应用程序类加载器(Application ClassLoader): ..........................................................................43 双亲委派 ...................................................................................................................................... 43 OSGI(动态模型系统) ............................................................................................................ 44 动态改变构造 ...................................................................................................................................... 44 模块化编程与热插拔 .......................................................................................................................... 44 3. JAVA集合............................................................................................................................................45 3.1. 接口继承关系和实现 .......................................................................................................................... 45 3.2. LIST ....................................................................................................................................................... 47 3.2.1. ArrayList(数组)....................................................................................................................... 47 3.2.2. Vector(数组实现、线程同步) ............................................................................................... 47 3.2.3. LinkList(链表) ......................................................................................................................... 47 3.3. SET ....................................................................................................................................................... 48 3.3.1.1. 3.3.1.2. HashSet(Hash 表) ............................................................................................................................. 48 TreeSet(二叉树) ................................................................................................................................ 49 LinkHashSet(HashSet+LinkedHashMap) ................................................................................... 49 3.3.1.3. 3.4. MAP....................................................................................................................................................... 50 3.4.1. HashMap(数组+链表+红黑树)............................................................................................. 50 3.4.1.1. JAVA7 实现 ............................................................................................................................................. 50 3.4.1.2. JAVA8 实现 ............................................................................................................................................. 51 3.4.2. ConcurrentHashMap.................................................................................................................. 51 3.4.2.1. 3.4.2.2. 3.4.2.3. 3.4.2.4. Segment 段.............................................................................................................................................. 51 线程安全(Segment 继承 ReentrantLock 加锁) .............................................................................. 51 并行度(默认 16) ................................................................................................................................. 52 Java8 实现 (引入了红黑树) .............................................................................................................. 52 13/04/2018 Page 2 of 283 异步IO模型 JAVA IO 包 JAVA NIO Channel Buffer Selector 3.4.3. HashTable(线程安全) ........................................................................................................... 53 3.4.4. TreeMap(可排序) .................................................................................................................. 53 3.4.5. LinkHashMap(记录插入顺序) .............................................................................................. 53 4. JAVA 多线程并发.................................................................................................................................54 4.1.1. JAVA 并发知识库 ....................................................................................................................... 54 4.1.2. JAVA 线程实现/创建方式 .......................................................................................................... 54 4.1.2.1. 4.1.2.2. 4.1.2.3. 4.1.2.4. 继承 Thread 类 ........................................................................................................................................ 54 实现 Runnable 接口。............................................................................................................................ 54 ExecutorService、Callable、Future 有返回值线程.............................................................55 基于线程池的方式................................................................................................................................... 56 4.1.3. 4 种线程池 ................................................................................................................................... 56 4.1.3.1. 4.1.3.2. 4.1.3.3. newSingleThreadExecutor ................................................................................................................. 58 4.1.4. 线程生命周期(状态) .................................................................................................................... 58 4.1.3.4. 4.1.4.1. 4.1.4.2. 4.1.4.3. 4.1.4.4. 新建状态(NEW) ................................................................................................................................. 58 就绪状态(RUNNABLE): ................................................................................................................. 59 运行状态(RUNNING): .................................................................................................................... 59 阻塞状态(BLOCKED):....................................................................................................................59 4.1.9.5. 4.1.9.6. 4.1.9.7. 13/04/2018 Semaphore 信号量 ................................................................................................................................. 68 ................................................................................................................................. 68 ................................................................................................................................................................ 68 ........................................................................................................................... 69 AtomicInteger .......................................................................................................................................... 69 Page 3 of 283 newCachedThreadPool ......................................................................................................................... 57 ............................................................................................................................. 57 newScheduledThreadPool .................................................................................................................... 58 newFixedThreadPool 等待阻塞(o.wait->等待对列): ...................................................................................................................... 59 .......................................................................................................................................... 59 ............................................................................................................................................ 59 线程死亡(DEAD)................................................................................................................................ 59 ............................................................................................................................................................... 59 ............................................................................................................................................................... 59 ............................................................................................................................................................... 59 4.1.5. 终止线程 4 种方式 ...................................................................................................................... 60 同步阻塞(lock->锁池) 其他阻塞(sleep/join) 4.1.4.5. 4.1.5.1. 4.1.5.2. 4.1.5.3. 4.1.5.4. 正常运行结束........................................................................................................................................... 60 使用退出标志退出线程...........................................................................................................................60 Interrupt 方法结束线程 ........................................................................................................................... 60 stop 方法终止线程(线程不安全)....................................................................................................... 61 正常结束. 异常结束. 调用 stop 4.1.6. sleep 与 wait 区别....................................................................................................................... 61 4.1.7. start 与 run 区别 .......................................................................................................................... 62 4.1.8. JAVA 后台线程 ........................................................................................................................... 62 4.1.9. JAVA 锁 ....................................................................................................................................... 63 4.1.9.1. 4.1.9.2. 4.1.9.3. 乐观锁 ...................................................................................................................................................... 63 悲观锁 ...................................................................................................................................................... 63 自旋锁 ...................................................................................................................................................... 63 自旋锁的优缺点....................................................................................................................................................63 自旋锁时间阈值(1.6 引入了适应性自旋锁) .................................................................................................. 63 自旋锁的开启........................................................................................................................................................ 64 4.1.9.4. Synchronized 同步锁.............................................................................................................................. 64 ....................................................................................................................................... 64 ....................................................................................................................................... 64 Synchronized 作用范围 Synchronized 核心组件 Synchronized 实现 ............................................................................................................................................... 64 ReentrantLock......................................................................................................................................... 66 ........................................................................................................................................... 66 ................................................................................................................................................................ 66 .................................................................................................................................................................... 67 ........................................................................................................................ 67 ............................................................................................................................................. 67 ......................................................................................................... 68 tryLock 和 lock 和 lockInterruptibly 的区别........................................................................................................ 68 Lock 接口的主要方法 非公平锁 公平锁 ReentrantLock 与 synchronized ReentrantLock 实现 Condition 类和 Object 类锁方法区别区别 实现互斥锁(计数器为 1) 代码实现 Semaphore 与 ReentrantLock 4.1.9.8. 4.1.9.9. 4.1.9.10. 4.1.9.11. 4.1.9.12. 4.1.9.14. 4.1.9.15. 4.1.9.16. 可重入锁(递归锁)............................................................................................................................... 69 公平锁与非公平锁................................................................................................................................... 70 ..................................................................................................................................................... 70 ........................................................................................................................................... 70 ReadWriteLock 读写锁......................................................................................................................70 ........................................................................................................................................................................ 70 ........................................................................................................................................................................ 70 公平锁(Fair) 非公平锁(Nonfair) 读锁 写锁 共享锁和独占锁 .................................................................................................................................. 70 .................................................................................................................................................................... 70 .................................................................................................................................................................... 70 重量级锁(Mutex Lock)................................................................................................................71 轻量级锁 .............................................................................................................................................. 71 锁升级.................................................................................................................................................................... 71 独占锁 共享锁 4.1.9.13. 偏向锁 .................................................................................................................................................. 71 分段锁 .................................................................................................................................................. 71 锁优化 .................................................................................................................................................. 71 减少锁持有时间 .................................................................................................................................................... 72 ............................................................................................................................................................ 72 .................................................................................................................................................................... 72 .................................................................................................................................................................... 72 .................................................................................................................................................................... 72 4.1.10. 线程基本方法..............................................................................................................................72 减小锁粒度 锁分离 锁粗化 锁消除 4.1.10.1. 4.1.10.2. 4.1.10.3. 4.1.10.4. 4.1.10.5. 4.1.10.6. 4.1.10.7. 4.1.10.8. 线程等待(wait) ............................................................................................................................... 73 线程睡眠(sleep)............................................................................................................................. 73 线程让步(yield) .............................................................................................................................. 73 线程中断(interrupt)........................................................................................................................ 73 Join 等待其他线程终止 ...................................................................................................................... 74 为什么要用 join()方法? .................................................................................................................... 74 线程唤醒(notify)............................................................................................................................. 74 其他方法: .......................................................................................................................................... 74 4.1.11. 线程上下文切换..........................................................................................................................75 4.1.11.1. 4.1.11.2. 4.1.11.3. 4.1.11.4. 4.1.11.5. 4.1.11.6. 4.1.11.7. 进程......................................................................................................................................................75 上下文..................................................................................................................................................75 寄存器..................................................................................................................................................75 程序计数器 .......................................................................................................................................... 75 PCB-“切换桢”................................................................................................................................. 75 上下文切换的活动: .......................................................................................................................... 76 引起线程上下文切换的原因 .............................................................................................................. 76 4.1.12. 同步锁与死锁..............................................................................................................................76 4.1.12.1. 同步锁 .................................................................................................................................................. 76 4.1.12.2. 死锁 ...................................................................................................................................................... 76 4.1.13. 线程池原理..................................................................................................................................76 4.1.14.1. 4.1.14.2. 4.1.14.3. 4.1.14.4. 4.1.14.5. 4.1.14.6. 4.1.14.7. 4.1.14.8. 4.1.13.1. 4.1.13.2. 4.1.13.3. 4.1.13.4. 线程复用 .............................................................................................................................................. 76 ...................................................................................................................................... 76 .............................................................................................................................................. 78 ......................................................................................................................... 78 4.1.14. JAVA 阻塞队列原理.................................................................................................................... 79 线程池的组成 拒绝策略 Java 线程池工作过程 阻塞队列的主要方法 .......................................................................................................................... 80 ............................................................................................................................................................ 80 .................................................................................................................................................... 81 ............................................................................................................................. 81 ....................................................................................... 82 ......................................................................... 82 .............................................................. 82 .......................................................................................... 82 .............................................................. 83 ...................................................................................................................... 83 插入操作: 获取数据操作: Java 中的阻塞队列 ArrayBlockingQueue(公平、非公平) LinkedBlockingQueue(两个独立锁提高并发) PriorityBlockingQueue(compareTo 排序实现优先) DelayQueue(缓存失效、定时任务 ) SynchronousQueue(不存储数据、可用于传递数据) LinkedTransferQueue 13/04/2018 Page 4 of 283 4.1.14.9. LinkedBlockingDeque ..................................................................................................................... 83 4.1.15. CyclicBarrier、CountDownLatch、Semaphore 的用法 ........................................................ 84 4.1.15.1. 4.1.15.2. 4.1.15.3. ................................................................................................ 84 ............................................... 84 ....................................................................... 85 CountDownLatch(线程计数器 ) CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行) Semaphore(信号量-控制同时访问的线程个数) 4.1.16. volatile 关键字的作用(变量可见性、禁止重排序) ............................................................. 87 变量可见性............................................................................................................................................................ 87 禁止重排序............................................................................................................................................................ 87 ..................................................................................................................... 87 ................................................................................................................................................................ 87 4.1.17. 如何在两个线程之间共享数据...................................................................................................88 将数据抽象成一个类,并将数据的操作作为这个类的方法.............................................................................88 .................................................................................................................. 89 4.1.18. ThreadLocal 作用( )........................................................................................ 90 .............................................................................................................. 90 ................................................................................................................................................................ 91 4.1.19. synchronized 和 ReentrantLock 的区别 .................................................................................. 91 4.1.19.1. .................................................................................................................................. 91 4.1.19.2. .................................................................................................................................. 92 4.1.20. ConcurrentHashMap 并发......................................................................................................... 92 4.1.20.1. .......................................................................................................................................... 92 4.1.20.2. .......................................................................................................... 92 ................................................. 93 4.1.21. Java 中用到的线程调度 ............................................................................................................. 93 比 sychronized 更轻量级的同步锁 适用场景 Runnable 对象作为一个类的内部类 ThreadLocalMap(线程的一个属性) 线程本地存储 使用场景 两者的共同点: 两者的不同点: 4.1.21.1. 4.1.21.2. 4.1.21.3. 4.1.21.4. 减小锁粒度 ...................................................................................................................................... 93 ...................................................................................................................................... 93 ............................................................................................. 94 ..................................................................................................................... 94 4.1.22. 进程调度算法..............................................................................................................................94 4.1.22.1. 4.1.22.2. 4.1.22.3. ...................................................................................................................................... 94 ...................................................................................................................... 95 .............................................................................................................. 96 )..................................................................96 .......................................................................................................................................... 96 ........................................................................... 97 ............................................................................................................................................. 98 4.1.24. 什么是AQS(抽象的队列同步器).........................................................................................98 Exclusive 独占资源-ReentrantLock ................................................................................................................... 99 Share 共享资源-Semaphore/CountDownLatch ............................................................................................... 99 同步器的实现是 ABS 核心(state 资源状态计数) ....................................................................................... 100 ReentrantReadWriteLock 实现独占和共享两种方式.....................................................................................100 5. JAVA基础..........................................................................................................................................101 4.1.23. 什么是CAS( 4.1.23.1. 4.1.23.2. 4.1.23.3. 5.1.1. 5.1.1.1. 5.1.1.2. 5.1.1.3. 5.1.1.4. JAVA 异常分类及处理.............................................................................................................. 101 .................................................................................................................................................... 101 ............................................................................................................................................ 101 ..................................................................................................................................................................... 101 ........................................................................... 101 ................................................................................................................................ 102 ......................................................... 102 .................................................................................................................. 102 ............................................................................................................ 102 13/04/2018 Page 5 of 283 ConcurrentHashMap 分段锁 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成 抢占式调度: 协同式调度: JVM 的线程调度实现(抢占式调度) 线程让出 cpu 的情况: 优先调度算法 高优先权优先调度算法 基于时间片的轮转调度算法 比较并交换-乐观锁机制-锁自旋 概念及特性 原子包 java.util.concurrent.atomic(锁自旋) ABA 问题 概念 异常分类 Error Exception(RuntimeException、CheckedException) 异常的处理方式 遇到问题不进行具体处理,而是继续抛给调用者 (throw,throws) try catch 捕获异常针对性处理方式 Throw 和 throws 的区别: 位置不同 功能不同: 5.1.2. 5.1.2.1. 5.1.2.2. 5.1.2.3. 5.1.2.4. 5.1.2.5. 5.1.2.6. 5.1.2.7. 5.1.3. 5.1.4.1. 5.1.4.2. 5.1.4.3. 5.1.4.4. @Documented 描述-javadoc @Inherited 阐述了某个被标注的类型是被继承的 5.1.5.1. 5.1.5.2. 5.1.5.3. 5.1.5.4. 泛型方法() ............................................................................................................................. 112 泛型类 ............................................................................................................................................. 112 类型通配符? .......................................................................................................................................... 113 类型擦除 ................................................................................................................................................ 113 .............................................................................................................................................................. 102 .......................................................................................................................................................... 102 JAVA 反射 ................................................................................................................................. 103 ............................................................................................................................................ 103 ............................................................ 103 ................................................................................................................................ 103 .................................................................................................................................. 103 ...................................................................................................................... 104 .................................................................................................................................... 104 ............................................................................ 104 ..................................................................... 104 ............................................................................................................ 104 ....................................................................................................................... 104 ................................................................................ 104 ............................................................................ 104 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) 反射的应用场合 编译时类型和运行时类型 的编译时类型无法获取具体方法 Java 反射 API 反射 API 用来生成 JVM 中的类、接口或则对象的信息。 反射使用步骤(获取 Class 对象、调用对象方法) 获取 Class 对象的 3 种方法 调用某个对象的 getClass()方法 调用某个类的 class 属性来获取该类对应的 Class 对象 使用 Class 类中的 forName()静态方法(最安全/性能最好) 创建对象的两种方法 Class 对象的 newInstance() 调用 Constructor 对象的 newInstance() ........................................................................................................................ 105 ............................................................................................................................. 105 .......................................................................................................... 105 JAVA 注解 ................................................................................................................................. 106 5.1.3.1. 概念 ........................................................................................................................................................ 106 5.1.3.2. 4 种标准元注解...................................................................................................................................... 106 @Target 修饰的对象范围 ................................................................................................................................. 106 @Retention 定义 被保留的时间长短 ............................................................................................................... 106 ................................................................................................................................ 106 .............................................................................................. 106 5.1.3.3. 注解处理器............................................................................................................................................. 107 5.1.4. JAVA 内部类 ............................................................................................................................. 109 静态内部类............................................................................................................................................. 109 成员内部类............................................................................................................................................. 110 局部内部类(定义在方法中的类) ..................................................................................................... 110 匿名内部类(要继承一个父类或者实现一个接口、直接使用 new 来生成一个对象的引用) ..... 111 5.1.5. JAVA 泛型 ................................................................................................................................. 112 5.1.6. JAVA 序列化(创建可复用的 Java 对象) ................................................................................. 113 .................................................................................................... 113 ................................................................................................. 113 .................................................................................................................................. 113 Serializable 实现序列化 .................................................................................................................................... 113 ............................................... 113 ................................................................................................ 113 ............................................................................................................................................................. 113 .................................................................................................................................. 114 .............................................................................................................................................. 114 ............................................................................................ 114 5.1.7. JAVA 复制 ................................................................................................................................. 114 5.1.7.1. ......................................................................................................................................... 114 5.1.7.2. ..................................................................................... 114 5.1.7.3. ................................................................................................. 115 5.1.7.4. ........................................................................................................ 115 6. SPRING 原理 ..................................................................................................................................... 116 6.1.1. Spring 特点................................................................................................................................ 116 6.1.1.1. 轻量级 ................................................................................................................................................ 116 13/04/2018 Page 6 of 283 保存(持久化)对象及其状态到内存或者磁盘 序列化对象以字节数组保持-静态成员不保存 序列化用户远程对象传输 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化 writeObject 和 readObject 自定义序列化策略 序列化 ID 序列化并不保存静态变量 序列化子父类说明 Transient 关键字阻止该变量被序列化到文件中 直接赋值复制 浅复制(复制引用但不复制引用的对象) 深复制(复制对象和其应用对象) 序列化(深 clone 一中实现) 6.1.1.2. 6.1.1.3. 6.1.1.4. 6.1.1.5. 6.1.2. 6.1.3. 6.1.4. 6.1.5. 6.1.6. 6.1.7. ............................................................................................................................................ 116 ............................................................................................................................................ 116 .................................................................................................................................................... 116 ............................................................................................................................................ 116 Spring 核心组件........................................................................................................................ 117 Spring 常用模块........................................................................................................................ 117 Spring 主要包............................................................................................................................ 118 Spring 常用注解........................................................................................................................ 118 Spring 第三方结合.................................................................................................................... 119 Spring IOC 原理........................................................................................................................ 120 6.1.7.1. 6.1.7.2. 6.1.7.3. 概念 ........................................................................................................................................................ 120 Spring 容器高层视图 ............................................................................................................................ 120 IOC 容器实现......................................................................................................................................... 120 控制反转 面向切面 容器 框架集合 BeanFactory-框架基础设施 .............................................................................................................................. 120 1.1..1.1.1 1.1..1.1.2 1.1..1.1.3 1.1..1.1.4 1.1..1.1.5 1.1..1.1.6 1.1..1.1.7 1.1..1.1.8 BeanDefinitionRegistry 注册表................................................................................................. 121 BeanFactory 顶层接口 .............................................................................................................. 121 ListableBeanFactory ................................................................................................................. 121 HierarchicalBeanFactory 父子级联.......................................................................................... 121 ConfigurableBeanFactory......................................................................................................... 121 AutowireCapableBeanFactory 自动装配 ................................................................................ 122 SingletonBeanRegistry 运行期间注册单例 Bean................................................................... 122 依赖日志框框.............................................................................................................................122 ApplicationContext 面向开发应用 .................................................................................................................... 122 WebApplication 体系架构 ................................................................................................................................. 123 6.1.7.4. Spring Bean 作用域.............................................................................................................................. 123 singleton:单例模式(多线程下不安全) ...................................................................................................... 123 prototype:原型模式每次使用时创建 ................................................................................................................ 124 Request:一次 request 一个实例 .................................................................................................................... 124 session ................................................................................................................................................................ 124 global Session....................................................................................................................................................124 6.1.7.5. Spring Bean 生命周期.......................................................................................................................... 124 实例化.................................................................................................................................................................. 124 IOC依赖注入......................................................................................................................................................124 setBeanName 实现............................................................................................................................................ 124 BeanFactoryAware 实现 ................................................................................................................................... 124 ApplicationContextAware 实现......................................................................................................................... 125 postProcessBeforeInitialization 接口实现-初始化预处理.......................................................................... 125 init-method .......................................................................................................................................................... 125 postProcessAfterInitialization ........................................................................................................................... 125 Destroy 过期自动清理阶段 ............................................................................................................................... 125 destroy-method 自配置清理 ............................................................................................................................. 125 6.1.7.6. Spring 依赖注入四种方式 .................................................................................................................... 126 构造器注入.......................................................................................................................................................... 126 setter方法注入...................................................................................................................................................127 静态工厂注入...................................................................................................................................................... 127 实例工厂.............................................................................................................................................................. 127 6.1.7.7. 5 种不同方式的自动装配...................................................................................................................... 128 6.1.8. Spring APO 原理 ...................................................................................................................... 129 6.1.8.1. 6.1.8.2. 6.1.8.1. 概念 ........................................................................................................................................................ 129 AOP 核心概念 ....................................................................................................................................... 129 AOP 两种代理方式 ............................................................................................................................... 130 JDK 动态接口代理 ............................................................................................................................................. 130 CGLib 动态代理.................................................................................................................................................. 131 6.1.8.2. 实现原理 ................................................................................................................................................ 131 6.1.9. Spring MVC原理......................................................................................................................132 6.1.9.1. MVC 流程............................................................................................................................................... 132 Http 请求到 DispatcherServlet ....................................................................................................................... 133 HandlerMapping 寻找处理器............................................................................................................................133 调用处理器 Controller........................................................................................................................................ 133 13/04/2018 Page 7 of 283 Controller 调用业务逻辑处理后,返回 ModelAndView.................................................................................133 DispatcherServlet 查询 ModelAndView .......................................................................................................... 133 ModelAndView 反馈浏览器 HTTP ................................................................................................................... 133 6.1.9.1. MVC 常用注解 ....................................................................................................................................... 133 6.1.10. Spring Boot 原理....................................................................................................................... 134 1. 创建独立的 Spring 应用程序............................................................................................................................. 134 2.嵌入的Tomcat,无需部署WAR文件.............................................................................................................134 3. 简化 Maven 配置 ................................................................................................................................................ 134 4. 自动配置 Spring ................................................................................................................................................. 134 5. 提供生产就绪型功能,如指标,健康检查和外部配置................................................................................... 134 6. 绝对没有代码生成和对 XML 没有要求配置 [1] ............................................................................................... 134 6.1.11. JPA 原理 .................................................................................................................................... 134 6.1.11.1. 事务....................................................................................................................................................134 6.1.11.2. 6.1.11.1. 6.1.11.1. 本地事务 ............................................................................................................................................ 134 分布式事务 ........................................................................................................................................ 135 两阶段提交 ........................................................................................................................................ 136 1 准备阶段........................................................................................................................................................... 136 2 提交阶段:....................................................................................................................................................... 136 6.1.12. Mybatis 缓存.............................................................................................................................. 137 6.1.12.1. Mybatis 的一级缓存原理(sqlsession 级别)..............................................................................138 6.1.12.2. 二级缓存原理(mapper 基本).....................................................................................................138 具体使用需要配置: .......................................................................................................................................... 139 6.1.13. Tomcat 架构 .............................................................................................................................. 139 7. 微服务 ................................................................................................................................................. 140 7.1.1. 服务注册发现 ............................................................................................................................ 140

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值