Java 基础知识(六)

1.简述HashMap实现原理

  

      每次新建一个 HashMap 时,都会初始化一个 table 数组。table 数组的元素为 Entry 节点;  
     保存数据的过程为:首先判断 key 是否为 null,若为 null,则直接调用 putForNullKey 方法。若不为空则先计算 key 的 hash 值,然后根据 hash 值搜索在 table 数组中的索引位置,如果 table 数组在该位置处有元素,则通过比较是否存在相同的 key,若存在则覆盖原来 key 的 value,否则将该元素保存在链头(最先保存的元素放在链尾);若没有,直接保存
2.简述HashSet实现原理
     HashSet 是基于 HashMap 来实现的,操作很简单,更像是对 HashMap 做了一次“封装”,而且只使用了HashMap的key来实现
    Set 相当于在 map 中存储 key 为 set 的值,map 中的值为一个虚拟[dummy]值value: Object(id=78)
3.数组和List的转换
  数组-->List:
        

      

  List-->数组:

   

4.Queue:线性结构 先进先出
  1)offer() add():添加;如果想在一个满的队列中加入一个新元素,后者会抛出一个 unchecked 异常,而前者会返回 false
  2)peek() element():在不移除的情况下返回队头;在队列为空时,前者返回null,后者会抛出 NoSuchElementException 异常
  3)poll() remove():移除并且返回对头;在队列为空时,前者返回null,后者会抛出 NoSuchElementException 异常
5.ListIterator和 Iterator
  .ListIterator:.add();hasPrevious()和 previous()方法,可以实现逆向(顺序向前)遍历;可以定位当前的索引位置,nextIndex()和 previousIndex()可以实现;可以实现对象的修改,set()方法可以实现;
   Iterator:不可添加;不可以逆向遍历;无法定位;只能遍历,不可修改;
6.并行和并发
    并发:指两个或多个事件在同一个时间段内发生。
    并行:指两个或多个事件在同一时刻发生(同时发生)。
7.线程三大特性
 1)原子性:在执行一个或者多个操作的过程中,要么全部执行完不被任何因素打断,要么不执行,保证数据一致,线程安全
  2)可见性:当多个线程访问同一个变量时,一个线程修改了变量的值,其他的线程能立即看到
 3)有序性:程序的执行顺序会按照代码先后顺序进行执行,一般情况下,处理器由于要提高执行效率,对代码进行重排序,运行的顺序可能和代码先后顺序不同,但是结果一样
8.守护线程  
      new Thread().setDaemon(true);
      专门服务于其他线程,如用户自定义线程都执行完毕,main线程也执行完毕,则jvm停止运行,守护线程也停止执行
      又被称为“服务进程”“精灵线程”“后台线程”,是指在程序运行是在后台提供一种通用的线程,这种线程并不属于程序不可或缺的部分。 通俗点讲,任何一个守护线程都是整个 JVM 中所有非守护线程的“保姆”。 
9.线程创建方式
  1)extends Thread 类
      定义子类,重写run方法--》创建子类实例--》调用start(),启动线程
     
  2)implements Runnable 接口
      定义子类,重写run方法--》创建子类实例,依此实例作为 Thread 的 target 来创建 Thread 对象--》调用start(),开启线程
    

 3)通过Callable和Future创建线程

    创建 Callable 接口的实现类,并实现 call()方法,该 call()方法将作为线程执行体,并且有返回值。
    创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象
的 call()方法的返回值。
   使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
   调用 FutureTask 对象的 get()方法来获得子线程执行结束后的返回值。
10.Runnable Callable
    1)Runnable:执行方法是run()方法;无返回值;异常内部消化
    2)Callable:执行方法是call()方法;存在返回值;可以抛出异常
11.sleep() wait()
   

 12.什么是死锁

    指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进
    形成死锁的四个必要条件(缺一不可):
              互斥条件:一个资源每次只能被一个进程使用,若有其他进程请求此资源,则需等待 
              请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放
              不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)
              循环等待条件:若干进程间形成首尾相接循环等待资源的关系 
13.synchronized volatile

 14.synchronized ReentrantLock

 



  


 
原文地址:https://www.cnblogs.com/dxjx/p/12454690.html