• 建议反复观看!精选高频java面试题20道,助你跳槽加薪!


    面向对象的特征有哪些方面?

    ① 抽象:抽象分为数据抽象和过程抽象两方面。
    数据抽象:针对对象的属性,比如建立一个鸟这样的类,鸟会有以下特征,两个翅膀,两支脚,有羽毛等等特性,写成类都是鸟的属性
    过程抽象:针对对象的行为特征,比如鸟会飞,会跳等等,这些方面的就会抽象为方法,即过程,写成类都是鸟的方法
    ② 继承:继承是从已有类得到继承信息创建新类的过程
    ③ 封装:封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
    ④ 多态:多态是同一个行为具有多个不同表现形式或形态的能力(方法的重写)

    访问修饰符public,private,protected(不写修饰符默认只能同一包下访问)

    基本数据类型

    • 字符类型:byte,char
    • 基本整型:short,int,long
    • 浮点型:float,double
    • 布尔类型:boolean
      ps: String不是基本数据类型,是final修饰的java类

    精度丢失问题(如何判定单双精度)

    • float: float f = 3.4是否正确
      不正确。3.4是双精度,将双精度型(double)赋值给单精度型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F。
    • double: 为了防止double精度丢失问题,可以使用java.math包中提供的API类BigDecimal用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。
    double a = 1;
    double b = 20.2;
    double c = 300.02;
    BigDecimal a1 = new BigDecimal(Double.toString(a));
    BigDecimal b1 = new BigDecimal(Double.toString(b));
    BigDecimal c1 = new BigDecimal(Double.toString(c));
    double result = (a1.add(b1).add(c1)).doubleValue();
    System.out.println(result);
    
    

    int和Integer有什么区别

    Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

    class AutoUnboxingTest {
    
        public static void main(String[] args) {
            Integer a = new Integer(3);
            Integer b = 3;                  // 将3自动装箱成Integer类型
            int c = 3;
            System.out.println(a == b);     // false 两个引用没有引用同一对象
            System.out.println(a == c);     // true a自动拆箱成int类型再和c比较
        }
    }
    
    

    | 和 ||,& 和 && 的区别

    • || 和 && 定义为逻辑运算符,而 | 和 & 定义为位运算符
    • && 如果两个操作数都非零,则条件为真;
    • || 如果两个操作数中有任意一个非零,则条件为真。
    • & 按位与操作,按二进制位进行"与"运算。运算规则:(有 0 则为 0)
    0&0=0;   
    0&1=0;    
    1&0=0;     
    1&1=1;
    
    

    | 按位或运算符,按二进制位进行"或"运算。运算规则:(有 1 则为 1)

    0|0=0;    
    0|1=1;   
    1|0=1;    
    1|1=1;
    
    

    解释内存中的栈(stack)、堆(heap)。

    • 通常我们定义一个基本数据类型的变量,一个对象的引用,函数调用的现场都是保存在JVM中的栈空间。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,栈和堆的大小都可以通过JVM的启动参数来进行调整,栈空间用光了会引发StackOverflowError
    • 而通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收集器都采用分代收集算法,所以堆空间还可以细分为新生代和老生代,再具体一点可以分为Eden、Survivor(又可分为From Survivor和To Survivor),堆和常量池空间不足则会引发OutOfMemoryError

    Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

    Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。

    数组有没有length()方法?String有没有length()方法?

    数组没有length()方法,有length 的属性。String 有length()方法。JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆。

    在JAVA中如何跳出当前的多重嵌套循环

    // 使用标记
    public static void main(String[] args) {
            System.out.println("标记前");
            ok: for (int i = 0; i < 10; i++) {
                for (int j = 0; j < 10; j++) {
                    System.out.println("i=" + i + ",j=" + j);
                    if (j == 5)
                        break ok;
                }
            }
            System.out.println("标记后");
        }
    

    是否可以继承String类?

    ∵ String = final类 && final类 ≠ 继承(不能被继承)
    ∴ String ≠ 继承(不能被继承)

    String、StringBuffer、StringBuilder区别(详细介绍)

    • StringBuffer、StringBuilder和String一样,也用来代表字符串。
    • String类是不可变类,任何对String的改变都 会引发新的String对象的生成。
    • StringBuffer是可变类,任何对它所指代的字符串的改变都不会产生新的对象。StringBufferd支持并发操作,线性安全的,适 合多线程中使用
    • StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高

    方法重载(Overload)和方法重写(Override)

    • 方法重载:同一个类中的多个方法有相同的名字,但这些方法的参数列表不同,参数的数量或参数类型不能完全相同。
    • 方法重写:存在子父类之间的,,子类定义的方法与父类中的方法具有相同的方法名字,以及相同的参数表和相同的返回类型。
      ps:函数的返回值只是作为函数运行之后的一个“状态” ,并不能作为某个方法的“标识” 。

    Java中接口(interface)和抽象类(abstract)的区别

    • interface:关键字是interface,用来被类实现,可以多继承(Java类只能单继承)其他接口,内部都是抽象方法,所以被Java类实现(implement)的时候就要实现内部所有的方法,内部的变量隐式的被public static final 修饰,方法则是被public abstract 修饰(而且方法只能是public权限)。
    • abstract:关键字是abstract,用来被类继承,只能单继承其他类,内部既可以有抽象方法,也可以有普通方法,被Java类继承(extend)的时候必须实现内部的抽象方法,内部的抽象方法被abstract修饰,如果子类没有将抽象类全部实现,那么子类也要加abstract关键字。

    Java 中会存在内存泄漏吗,请简单描述。

    理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被广泛使用于服务器端编程的一个重要原因);然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此也会导致内存泄露的发生。例如Hibernate的Session(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用的垃圾对象,如果不及时关闭(close)或清空(flush)一级缓存就可能导致内存泄露

    String s = new String(“ds”);创建了几个字符串对象?

    两个对象,一个是静态区的"ds",一个是用new创建在堆上的对象

    Java 中的final关键字有哪些用法?

    • 修饰类:表示该类不能被继承
    • 修饰方法:表示方法不能被重写
    • 修饰变量:表示变量只能一次赋值以后值不能被修改(常量)

    数据类型之间的转换

    如何将字符串转换为基本数据类型
    调用基本数据类型对应的包装类中的方法parseXXX(String)或valueOf(String)即可返回相应基本类型
    如何将基本数据类型转换为字符串
    一种方法是将基本数据类型与空字符串("")连接(+)即可获得其所对应的字符串;
    另一种方法是调用String 类中的valueOf()方法返回相应字符串

    列出一些你常见的运行时异常

    • ArithmeticException(算术异常)
    • ClassCastException (类转换异常)
    • IllegalArgumentException (非法参数异常)
    • IndexOutOfBoundsException (下标越界异常)
    • NullPointerException (空指针异常)
    • SecurityException (安全异常)

    java 集合(list、set、map)的特点

    List、Set是存储单列的数据集合,都继承与Collection接口。 Map是存储键值对这样的双列数据的集合,是个独立接口

    List:有顺序以线性方式存储,可以存放重复对象 (线程安全方法:List list = Collections.synchronizedList(new LinkedList(…));)

    • LinkedList:双向链表实现存储,索引数据慢插入数度较快,线程不安全(比安全性能好)
    • ArrayList: 数组方式存储数据,索引数据快插入数据慢,线程不安全
    • Vector: 数组方式存储数据,索引数据快插入数据慢,线程安全
    • Stack:继承自Vector,实现一个后进先出的堆栈(可以理解弹夹装弹,后装的先打出)

    Set:无顺序,不包含重复的元素

    • HashSet:为快速查找设计的Set。存入HashSet的对象必须定义hashCode()
    • TreeSet: 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列
    • LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示

    Map:键必须是唯一 (同步方法:Map m = Collections.synchronizedMap(new TreeMap(…));)

    • Hashtable: 基于散列表的实现,允许空键空值,线程安全
    • HashMap: 基于散列表的实现,允许空键空值,线程不安全(与Hashtable基本一致)
    • TreeMap: 基于红黑树数据结构的实现,不允许空键空值,线程不安全
    • WeakHashMap: 改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

    总结

    欢迎关注公众号:前程有光,领取一线大厂Java面试题总结+各知识点学习思维导+一份300页pdf文档的Java核心知识点总结! 这些资料的内容都是面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。

  • 相关阅读:
    如何优雅地用MATLAB生成C语言从1打印到100再打印到1
    CentOS启动报错Failed to mount /sysroot解决方法
    JVM性能监控与调优篇
    Redis 配置文件详解(翻译版,不全,有时间继续更新)
    odoo五种Action详解
    odoo环境变量env(Environment)
    odooenvmodel
    odoo常用的函数
    HashMap简单实现
    xshell6提示“要继续使用此程序,您必须应用最新的更新或使用新版本”解决办法
  • 原文地址:https://www.cnblogs.com/lwh1019/p/14496512.html
Copyright © 2020-2023  润新知