风也温柔

计算机科学知识库

java queue原理-史上最全的Java面试知识点总结

  本篇文章会对面试中常遇到的Java技术点进行全面深入的总结java queue原理,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺(阅读本文需要有一定的Java基础)。

  1. Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么?

  2. 谈一谈”==“与”()"的区别。

  《Think in Java》中说:“关系操作符生成的是一个结果,它们计算的是操作数的值之间的关系”。

  "=="判断的是两个对象的内存地址是否一样,适用于原始数据类型和枚举类型(它们的变量存储的是值本身,而引用类型变量存储的是引用);是类的方法,对它的实现是比较内存地址,我们可以重写这个方法来自定义“相等”这个概念。比如类库中的、Date等类就对这个方法进行了重写。

  综上,对于枚举类型和原始数据类型的相等性比较,应该使用"==";对于引用类型的相等性比较java queue原理-史上最全的Java面试知识点总结,应该使用方法。

  3. Java中的四种引用及其应用场景是什么?

  4. 中定义了哪些方法?

  clone(), (), (), (), (), (), wait(), (), ()

  5. 的作用是什么?

  6. , , 的区别是什么?

  7. , , 的区别是什么?

  8. Map, Set, List, Queue、Stack的特点及用法。

  更详细的说明请参考官方文档,对相关数据结构不太熟悉的同学可以参考《算法导论》或其他相关书籍

  9. 和的区别

  10. 的实现原理

  简单的说,的底层实现是“基于拉链法的散列表”

  11. 的实现原理

  java queue原理_java的queue_java中的queue

  是支持并发读写的,它的特点是读取数据时无需加锁java queue原理,写数据时可以保证加锁粒度尽可能的小。由于其内部采用“分段存储”,只需对要进行写操作的数据所在的“段”进行加锁。

  12. , , 的区别是什么?

  13. 与的区别是什么?

  14. 对于“try-catch-”,若try语句块中包含“”语句,语句块会执行吗?

  会执行。只有两种情况块中的语句不会被执行:**

  15. Java中的异常层次结构

  Java中的异常层次结构如下图所示:

  我们可以看到类是异常层级中的基类。Error类表示内部错误,这类错误使我们无法控制的;表示异常,及其子类属于未检查异常,这类异常包括、等,我们应该通过条件判断等方式语句避免未检查异常的发生。及其子类属于已检查异常,编译器会检查我们是否为所有可能抛出的已检查异常提供了异常处理器,若没有则会报错。对于未检查异常,我们无需捕获(当然Java也允许我们捕获,但我们应该做的事避免未检查异常的发生)。

  16. Java面向对象的三个特征与含义

   三大特征:封装、继承、多态。

  17. , 的含义与区别

  18. 接口与抽象类的区别

  19. 静态内部类与非静态内部类的区别

  静态内部类不会持有外围类的引用,而非静态内部类会隐式持有外围类的一个引用。

  20. Java中多态的实现原理

  所谓多态,指的就是父类引用指向子类对象,调用方法时会调用子类的实现而不是父类的实现。多态的实现的关键在于“动态绑定”。

  21. 简述Java中创建新线程的两种方法

  22. 简述Java中进行线程同步的方法

  23. 简述Java中具有哪几种粒度的锁 Java中可以对类、对象、方法或是代码块上锁。

  24. 给出“生产者-消费者”问题的一种解决方案 使用阻塞队列:

   public class BlockingQueueTest {

      private int size = 20;
      private ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue(size);
      public static void main(String[] args) {
        BlockingQueueTest test = new BlockingQueueTest(); 
        Producer producer = test.new Producer(); 
        Consumer consumer = test.new Consumer(); 
        producer.start(); consumer.start(); 
      } 
     
      class Consumer extends Thread{ 
        @Override 
        public void run() { 
          while(true){ 
            try { 
              //从阻塞队列中取出一个元素 
              queue.take(); 
              System.out.println("队列剩余" + queue.size() + "个元素"); 
            } catch (InterruptedException e) { 
            } 
          } 
        } 
      } 
      class Producer extends Thread{ 
        @Override 
        public void run() { 
          while (true) { 
            try { 
              //向阻塞队列中插入一个元素 
              queue.put(1); 
              System.out.println("队列剩余空间:" + (size - queue.size())); 
            } catch (InterruptedException e) { 
            } 
          } 
        } 
      }

  25. 的设计理念与作用

  的作用是提供线程内的局部变量,在多线程环境下访问时能保证各个线程内的变量各自独立。也就是说,每个线程的变量是自己专用的,其他线程是访问不到的。最常用于以下这个场景:多线程环境下存在对非线程安全对象的并发访问,而且该对象不需要在线程间共享,但是我们不想加锁,这时候可以使用来使得每个线程都持有一个该对象的副本。

  26. 包的整体架构

  27. , 类的作用

  28. wait(),sleep() 的区别

  29. 线程池的用法与优势

  30.for-each与常规for循环的效率对比

  关于这个问题我们直接看《》给我们做的解答: for-each能够让代码更加清晰,并且减少了出错的机会。 下面的惯用代码适用于集合与数组类型:

   for (Element e : elements) { doSomething(e); }

  使用for-each循环与常规的for循环相比,并不存在性能损失,即使对数组进行迭代也是如此。实际上,在有些场合下它还能带来微小的性能提升,因为它只计算一次数组索引的上限。

  31. 简述Java IO与NIO的区别

  32. 反射的作用与原理

  反射的作用概括地说是运行时获取类的各种定义信息,比如定义了哪些属性与方法。原理是通过类的class对象来获取它的各种信息。

  大家如果有java方面的问题可以加Q裙问我哦~欢迎志同道合的朋友一起交流经验,解决疑问、互相学习、共同进步!每天分享各种运营干货课程供大家学习。

  文章来源:https://zhuanlan.zhihu.com/p/148109767