• 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

     



      


     
  • 相关阅读:
    k8s问题收集
    kubeadm简单安装k8s
    centos7 --kubeadm安装
    K8S各知识点整理
    【转载】dfs序七个经典问题
    ZJOI 2018 一试记
    【模板】高精度
    【科技】扩展欧几里得 + 逆元
    【模板】ISAP最大流
    【模板】最小费用最大流
  • 原文地址:https://www.cnblogs.com/dxjx/p/12454690.html
Copyright © 2020-2023  润新知