【就业难】面试Java部分必备知识

Java SE

  1. 面向对象有哪些特性?说说你的理解。
    封装:把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
    继承:继承是从已有类得到继承信息创建新类的过程。
    多态:多态指同一个实体同时具有多种形式。在面向对象语言中,接口的多种不同的实现方式即为多态。
    抽象:将一类对象的共同特征抽象构造成类;

  2. 访问权限修饰符public、private、protected, 以及不写(默认)时的区别?
    在这里插入图片描述

  3. & 与 && 的区别?
    &: 按位与、逻辑与;
    &&: 短路与运算;&& 左边是false则短路。

  4. Java如何跳出多重嵌套循环?
    先标记,然后break 标记

    here:  
    for (int i = 1; i <= 4; i++) {
          
            
        a1 = "外层循环第"+i+"层";  
        for (int j = 1; j <= 4; j++) {
          
            
            b1 = "内层循环第"+j+"层";  
            if (2 == j & 2 == i) {
          
            
                break here;  
            }  
        }  
    }  
  5. 重写equals()方法要重写hashCode()方法吗?为什么?
    equals与hashCode都是Obeject类的基本方法;假如在覆盖了equals方法的类中,没有覆盖hashcode,会导致该类无法结合基于散列集合(HashMap,HashSet,HashTable)一起正常运作。

  6. 两个对象值相同 (x.equals(y) == true) ,但却可有不同的hashCode,这句话对不对?
    错。Java 对于eqauls 方法和 hashCode 方法是这样规定的:
    (1)如果两个对象相同(equals 方法返回 true),那么它们的hashCode 值一定要相同;
    (2)如果两个对象的 hashCode 相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在 Set 集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。
    equals方法要满足:自反性、null性、对称性、传递性、一致性。

  7. 为什么函数不能根据返回类型来区分重载?
    因为方法调用时不能指定返回值类型。

  8. char 型变量中能不能存储一个中文汉字,为什么?
    char 类型可以存储一个中文汉字,因为Java中使用的编码是 Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个字节(16 比特),所以放一个中文是没问题的。

  9. 抽象的(abstract)方法是否可同时是静态的(static), 是否可同时是本地方法 (native),是否可同时被synchronized?
    都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。本地方法是由 本地代码(如 C 代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。synchronized 和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。

  10. ==和equals的区别?
    equals和== 最大的区别是一个是方法一个是运算符。
    ==:如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的是引用数据类型,则比较的是对象的地址值是否相等。
    equals():用来比较方法两个对象的内容是否相等。
    注意:equals 方法不能用于基本数据类型的变量,如果没有对 equals 方法进行重写,则比较的是引用类型的变量所指向的对象的地址。

  11. Java中异常分为哪些种类?
    编译时异常;
    运行时异常;

  12. error和exception的区别?
    Error类和Exception类的父类都是Throwable类,他们的区别如下。
    Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
    Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

  13. java异常处理机制?
    throws、try catch

  14. String 、StringBuilder 、StringBuffer的区别?
    (1)、可变不可变
    String:字符串常量,在修改时不会改变自身;若修改,等于重新生成新的字符串对象。
    StringBuffer:在修改时会改变对象自身,每次操作都是对StringBuffer对象本身进行修改,不是生成新的对
    象;使用场景:对字符串经常改变情况下,主要方法:append(),insert()等。
    (2)、线程是否安全
    String:对象定义后不可变,线程安全。
    StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区
    大量数据。
    StringBuilder:是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。
    (3)、共同点
    StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。 StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(…)。只是 StringBuffer 会在方法上加 synchronized 关键字,进行同步。最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。

  15. 什么情况下用“+”运算符进行字符串连接比调用StringBuffer/StringBuilder 对象的append方法连接字符串性能更好?
    在 Java 中无论使用何种方式进行字符串连接,实际上都使用的是 StringBuilder。

多线程

  1. 线程的创建方式?
  2. 线程池的原理?
  3. 介绍一下几种线程池?
  4. synchronized与volitile的区别?
  5. concurrentHashMap实现原理?
  6. 乐观锁与悲观锁?
  7. 什么是死锁?死锁的条件?
  8. wait与sleep的区别?

Java高级

  1. 什么是反射?
  2. Java的动态代理?
  3. 你所知道的设计模式有哪些?
  4. JVM内存模型?
  5. 垃圾回收机制?
  6. 对象创建过程?

Java Web

  1. 原生jdbc的实现过程?
  2. 为什么要使用PreparedStatement?
  3. TCP三次握手与四次挥手?
  4. GET与POST区别?
  5. 转发与重定向区别?
  6. 常见网络状态码?

接下来总结SSM、然后Springboot+SpringCloud+Redis+Shiro、然后Linux+大数据框架、机器学习。找个好工作真难啊,2020届应届生校招体验极差。。。

猜你喜欢

转载自blog.csdn.net/qq_42158942/article/details/104879314
今日推荐