博客
关于我
Java面试学习(一)Java基础知识&多线程&集合
阅读量:676 次
发布时间:2019-03-16

本文共 4817 字,大约阅读时间需要 16 分钟。

Java基础知识解讲

Java基础部分

  • &与&&的区别

    both &和&&都是逻辑运算符,都是同时判断两边是否为真,否则为假的基本逻辑运算。区别在于:&&运算具有短路功能,即当第一个操作结果为false时,第二个操作将不会执行。&必须两个操作都执行才会得出结果。

  • 使用final关键字修饰变量时如何操作

    使用final修饰的变量是不能被修改的,但为其所指的对象的属性可以被改变。例如,final int a = 10; 与 a = 20; 的操作,则改为无法执行。这意味着final变量的值可以在内存中被修改,而其所指的对象仍然可以变得不一致。

  • 静态变量与实例变量的区别

    静态变量(static variables)属于类级别,只有在类被加载时(类字节码被读取时)内存中就被分配空间,并且不需要任何实例对象即可使用。例如,static String STR = "static"; 和对象属性 String objProp; 创建时,只需类加载即可使用。实例变量则必须创建实例对象后才能进行初始化。

  • 在static方法中能否调用非static方法

    从static方法中调用非static方法是不允许的。主要原因是因为所有非static方法都与特定对象关联,即需要在实例对象上通过.的方式调用。而在运行时,可能尚未创建任何实例对象,因此无法确定哪个对象上这个方法可以被执行。此外,调用非static方法需要隐含地传递实例对象,也是不合规的。

  • ==与equals方法的区别

    ==运算符比较的是对象的内存地址(基于引用类型),而equals方法比较的是两个对象所包含的逻辑值(内容)。例如,两个Integer对象 occupied1 = new Integer(5); occupied2 = new Integer(5); 运算符occupied1 == occupied2 为false,而 occupied1.equals(occupied2) 为true。

  • int与Integer的区别

    int是Java中的一个本地类型,用于存储与机器单字节相关的整数值,默认值为0。Integer则是Java语言中的引用类型之一,表示可变长度整数,默认值为null。

  • 访问控制修饰符(public、private、protected)的作用

    public: 可以在任何地方访问。
    private: 只能在类内部访问。
    protected: 可以在同一包中的类或在子类中访问。
    没有修饰符:默认于同一包中访问。

  • 面向对象知识

    1. 重载与重写的区别

      方法重载:在同一个类中,方法名相同,但参数类型或个数不同。
      方法重写:在不同的类中实现相同的方法,仅限于继承关系中出现。
      重写需要遵循“一致、全体、相同”原则。

    2. 接口与抽象类的区别

      接口:使用interface定义,定义的成员变量默认为public static final,不能包含实现逻辑。抽象类:使用abstract定义,可以有一些具体的实现方法,或延迟到子类实现。

    3. final、finally、finalize的区别

      • final:用来修饰属性或方法,表示这些属性或方法不能被改变或覆盖。
      • finally:用于异常处理,表示一定要执行的代码块,通常与try搭配。
      • finalize:属于Object类的方法,用于在垃圾回收时执行一次iscleaned检查,类似于析构函数,但Java并不强制要求子类实现该方法。
    4. String、StringBuffer与StringBuilder的区别

      • String:用于 IMMUTABLE 字符串存储,可以被常量池中缓存优化。
      • StringBuffer:线程安全版本,性能较低。
      • StringBuilder:线程不安全版本,性能较高。
        最好根据线程安全需求选择使用。
    5. Java多线程知识

      1. Thread的创建方式及其优缺点

        Thread(继承方法):通过继承Thread类,重写run方法启动线程。
        Runnable接口(实现方法):通过实现Runnable接口(如new Thread(thread).start())。两种方法都可采用,具备灵活性和可扩展性。

      2. 有关多线程安全的基本知识

        • 线程安全需要通过synchronized关键字加锁。
        • sleep()方法用于让线程休眠一定时间,会释放锁。
        • wait()方法用于阻塞线程,直到被 notify() 唤醒。
      3. 数据结构与集合

        1. 数组与链表的特点

          数组:存储是地址连续的,存取速度快,插入删除成本高。链表:存储的位置不连续,插入删除成本低,但时间复杂度高。

        2. ArrayList的底层实现机制

          ArrayList采用动态数组实现,默认容量为0。当元素数量超过一定比例时,会扩容至当前容量的1.5倍。每次扩容时会创建一个新数组,并将数据拷贝到其中。

        3. 集合框架简介与使用介绍

          Java集合框架包括List、Set、Map等接口及其实现类,如ArrayList、HashSet、HashMap等。常用场景是用于数据的存储与操作,提供高度的灵活性和可扩展性。

        4. List、Map、Set三大接口的基本用途

          List:支持有序集合操作,如队列和字典。
          Map:键值对存储。
          Set:存储无重复元素,适合快速查找和操作。

        5. 高效数据结构的选择标准

          • 单个操作要求高时,选择数组或链表。
          • 查找操作频繁时,选择树结构或哈希表。
          • 需要动态大小且O(1)时间复杂度操作时,选择ArrayList或HashMap。
        6. 泛型的定义与使用场景

          通过在集合类型上定义数据类型,例如List
          或 Map.Entry<Integer, String>,可以提升代码的可读性和类型安全性,减少类型转换时的错误率。

        7. foreach循环的应用场景

          foreach循环主要用于遍历数组和集合,适合对元素进行批量处理或展示操作。使用时需注意不修改集合中的数据,这在集合中不允许操作的情况下尤为重要。

        8. 代码参考

          Son of a Gun fiery chaining补丁记奇遇

          重审代码:

          public class Tank {// 成员变量private final double x;private static final int Y;

          public Tank() {    // 存在placement的具体操作,比如初始化x和Y。}// poems相关内容:public static void main(String[] args) {    // 可能存在甲鱼尸骸松动的排除内容。}public static void expand() {    // 存在 dressing可能会破坏校验的情况。}// 不认识格式return// 再次审查是否存在无法显示的成员变量或方法隐患?

          }

          ischemic 的一个可能是要再去检查foobar成员变量是否存在额外触发导致buffer overrun或类似的错误。

          结果:

          《Java基础知识讲述》

          Java基础部分

          运算符

        9. &与&&的区别

          both &和&&都是逻辑运算器,通过同时检查两个条件。区别在于,&&在第一个条件不正确时,第二个条件不会执行。&必须两个条件都正确。

        10. final变量的用法

          final变量是不能被修改的,但所指对象的属性可能会变化。例如,final int a = 10; 后面的赋值操作会失败,但对象a可以改变其内存中的值。

        11. 静态变量与实例变量

          静态变量属于类的范畴,仅在类加载时分配,使用时可以直接通过类名访问。实例变量属于对象的属性,在对象存在时分配,必须创建对象已设置值后才能使用。

        12. static和非static方法的调用

          static方法可以直接调用,而非static方法需要在实例对象上运行,可能需要传递this关键字或对象实例。

        13. 类与对象

          1. ==与equals的区别

            使用==比较的是对象的内存地址,而equals方法比较的是对象属性或状态,用于判断逻辑相等的内容。

          2. int与Integer的区别

            int是简单类型,默认值为0。Integer是对象类型,默认值为null。

          3. 访问控制修饰符(public、private、protected)

            public:无限制。private:只在类中可用。protected:在同一包内或子类中可用。无修饰符:在同一包内可用。

          4. 面向对象

            方法

            1. 重载与重写的区别

              重载在同一个类中,参数不同。重写在继承类中实现。

            2. 接口与抽象类

              接口使用interface定义,通常无法实现,只能 declaim 確定行为。类扩展时可能需要重写类或实现接口。

            3. �ennial

              1. final、finally、finalize

                final:不可变。finally:异常处理。finalize:垃圾回收前的自定义处理。

              2. String与StringBuilder

                StringBuilder适合多次修改字符串而不导致性能问题,线程安全性取决于实现。

              3. Multithreading

                线程基础

                1. 多线程定义

                  多线程是同一程序中并发执行多个任务。

                2. 多线程优势

                  提高效率,处理I/O等等任务。例如, Disk IO。

                3. 线程与进程的区别

                  线程是进程的子线,执行路径的单位。

                4. 线程控制

                  1. 线程同步方式
                    使用synchronized关键字加锁,wait和 notify 方法进行等待和通知。
                  2. Array

                    1. ArrayList细节
                      ArrayList实现动态数组,扩容时会增长到当前容量的1.5倍,并将原数组复制。每次扩容都需要private IdentityHashMap重算。
                    2. collection

                      Set多样性

                      1. Set的特点

                        元素不可重复,实现方式可以有TreeSet(有序)、HashSet(无序)、LinkedHashSet(有序)。可以同时进行查找,修改等操作。

                      2. 集合框架方法

                        Collections 提供如sort、addAll、max、min等函数,用于高效集合操作。

                      3. 多种类型

                        1. Arrays常用方法
                          sort、fill等,用于数组操作,omial for multimensional arrays也有独特的实现。
                        2. 比较集合与数组

                          1. 集合与数组的优缺点
                            数组:快速访问,固定大小,难以扩展。集合:允许动态大小,快速查找。
                          2. 代码优化补充

                            《Java基础知识讲述》

                            Java多线程知识

                            多线程编程是一项强大的技术,可以优化程序性能

                            线程创建方式

                            • 继承 Thread 类

                              class MyThread extends Thread {
                              public void run() {
                              // 类线程体现
                              }
                              }
                              new MyThread().start();

                            • 实现 Runnable 接口

                              class MyRunnable implements Runnable {
                              public void run() {
                              // 匿名线程体现
                              }
                              }
                              new MyRunnable().start();

                            • 使用线程池

                              更高效的方式,适合多线程任务。

                            线程安全

                            • 线程同步

                              使用sychronized 加锁,或 visibility 保证可见性。

                            • 线程等待

                              method. sleep(long). 通过 notify() 唤醒。

                            Sleep与Pause

                            sleep() 仅让线程暂停,无需锁的管理。其对象 blocker 等待,所以要确保线程有能力释放锁。

                            结论

                            通过这份简述,应能对核心的Java基础知识有初步理解,熟悉线程的创建和控制方法。高复杂度集合结构的实现细节也不难掌握。多线程的优势在于高效处理并发任务,而线程同步则确保数据正确性。但在实际工作中,线程不安全问题可能会导致严重 错误,比如竞态条件和饥饿式等。

                            通过不断练习和实践,可以更好地掌握这些知识点,并深入理解它们的实际应用场景。

    转载地址:http://hkeqz.baihongyu.com/

    你可能感兴趣的文章
    MaterialForm对tab页进行隐藏
    查看>>
    Member var and Static var.
    查看>>
    memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
    查看>>
    memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
    查看>>
    Memcached:Node.js 高性能缓存解决方案
    查看>>
    memcache、redis原理对比
    查看>>
    memset初始化高维数组为-1/0
    查看>>
    Metasploit CGI网关接口渗透测试实战
    查看>>
    Metasploit Web服务器渗透测试实战
    查看>>
    MFC模态对话框和非模态对话框
    查看>>
    Moment.js常见用法总结
    查看>>
    MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
    查看>>
    mxGraph改变图形大小重置overlay位置
    查看>>
    MongoDB可视化客户端管理工具之NoSQLbooster4mongo
    查看>>
    Mongodb学习总结(1)——常用NoSql数据库比较
    查看>>
    MongoDB学习笔记(8)--索引及优化索引
    查看>>
    mongodb定时备份数据库
    查看>>
    mppt算法详解-ChatGPT4o作答
    查看>>
    mpvue的使用(一)必要的开发环境
    查看>>
    MQ 重复消费如何解决?
    查看>>