zoukankan      html  css  js  c++  java
  • 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

     



      


     
  • 相关阅读:
    Leetcode Reverse Words in a String
    topcoder SRM 619 DIV2 GoodCompanyDivTwo
    topcoder SRM 618 DIV2 MovingRooksDiv2
    topcoder SRM 618 DIV2 WritingWords
    topcoder SRM 618 DIV2 LongWordsDiv2
    Zepto Code Rush 2014 A. Feed with Candy
    Zepto Code Rush 2014 B
    Codeforces Round #245 (Div. 2) B
    Codeforces Round #245 (Div. 2) A
    Codeforces Round #247 (Div. 2) B
  • 原文地址:https://www.cnblogs.com/dxjx/p/12454690.html
Copyright © 2011-2022 走看看