java 复习笔记(面向秋招以及大厂)

对重点面试题目进行总结,同时按章节划分,方便复习

文章目录

  • 1.java语言基础
    • 1.1java 语言有什么特点
    • 1.2. java和c++区别
    • 1.3 Oracle JDK 和 OpenJDK 的对⽐
    • 1.4 关于 JVM JDK 和 JRE 最详细通俗的解答
    • 1.5 八种数据类型字节大小
    • 1.6 自动拆箱自动装箱⭐️
    • 1.7java中方法的参数传递机制⭐️
    • 1.8 == 和equals 以及HashCode⭐️
      • 1.8.1 == 和 equals 区别
      • 1.8.2 hashCode的作用
      • 1.8.3 **hashCode() 和 equals() 的关系**
  • 2. 面向对象
    • 2.1 简述面向对象的三大特性⭐️⭐️
    • 2.2 抽象类和接口的区别⭐️⭐️
    • 2.3 重载和重写的区别⭐️⭐️
    • 2.4 简述继承和组合的区别和选择
    • 2.5 super 和 this的区别
  • 3. 关键字
    • 3.1 final关键字 ⭐️⭐️
    • 3.2 static 关键字作用是什么 ⭐️
  • 4.java常用类
    • 4.1 string和StringBuilder和StringBuffer的区别⭐️⭐️
  • 5.异常体系
  • 6.java反射机制
  • 7.java集合
    • 7.1 hashmap⭐️⭐️
    • 7.2 ArrayList
      • 7.2.1 ArrayList和LinkedList区别⭐️⭐️
  • 8.其它
    • 8.1 什么是深拷贝,什么是浅拷贝?⭐️⭐️
    • 8.2 什么是序列化,什么是反序列化

1.java语言基础

1.1java 语言有什么特点

  • 简单
  • 安全可靠
  • 面向对象
  • 支持多线程和 网络编程

1.2. java和c++区别

  • java没有指针
  • Java 有⾃动内存管理机制,不需要程序员⼿动释放⽆⽤内存
  • Java 的类是单继承的,C++ ⽀持多重继承;虽然 Java 的类不可以多继承,但是接⼝可以多 继承。

答题思路:三点 指针 继承 垃圾回收

1.3 Oracle JDK 和 OpenJDK 的对⽐

  1. 在响应性和 JVM 性能⽅⾯,Oracle JDK 与 OpenJDK 相⽐提供了更好的性能;

  2. Oracle JDK ⽐ OpenJDK 更稳定。

1.4 关于 JVM JDK 和 JRE 最详细通俗的解答

  • JRE 是 Java 运⾏时环境。它是运⾏已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机 (JVM),Java 类库,java 命令和其他的⼀些基础构件。但是,它不能⽤于创建新程序

  • JDK 是 Java Development Kit,它是功能⻬全的 Java SDK。它拥有 JRE 所拥有的⼀切,还有编 译器和⼯具。它能够创建和编译程序。

答题思路 : 四点

1.5 八种数据类型字节大小

暂略 考到再总结

1.6 自动拆箱自动装箱⭐️

  • 自动拆箱:Integer->int 调用的实际上是a.intValue()
  • 自动装箱:int -> Integer 调用的实际上是Integer.valueOf()

引申: Integer在判断相等的时候要使用equals还是 == ?

Integer a= 100;
Integer b= 100;
Integer c= 200;
Integer d= 200;
System.out.println(a == b);
System.out.println(c == d);

true false
  • 对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑, 推荐使用 equals 方法进行判断。

所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。 - 阿里巴巴手册

1.7java中方法的参数传递机制⭐️

  • 值传递 JAVA 编程语言只有值传递参数机制

  • 如果参数是基本数据类型(包括对应的包装类型),那么参数传递时只是原始值的一份拷贝或者叫副本,对副本操作并不影响原始值;

  • 如果参数是对象(引用类型,包括数组),那么参数传递时传递的是对象的地址的一份拷贝,所以对对象内部属性的操作会改变原始对象相应值,但是对该参数进行重新赋值并不会影响原始对象;

  • String类型作为参数进行传递时,传递的也是地址。但是String类比较特殊,对参数进行concat,replace,’+‘等操作时不影响原始的串,对参数重新赋值当然也不影响原始字符串。

值传递机制

值传递机制

答题思路 : 只有值传递机制 -> 简要介绍各个部分不同的传递情况 (3部分)

1.8 == 和equals 以及HashCode⭐️

1.8.1 == 和 equals 区别

  • == : 它的作⽤是判断两个对象的地址是不是相等。即,判断两个对象是不是同⼀个对象(基本数据 类型⽐较的是值,引⽤数据类型⽐较的是内存地址)。

  • equals() : 它的作⽤也是判断两个对象是否相等,是在object类内的。但它⼀般有两种使⽤情况:

情况 1:类没有覆盖 equals() ⽅法。则通过 equals() ⽐较该类的两个对象时,等价于通过 “==”⽐较这两个对象。 (源码得出)

情况 2:类覆盖了 equals() ⽅法(有String类,以及包装类)⼀般,我们都覆盖 equals() ⽅法来⽐较两个对象的内容是 否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

1.8.2 hashCode的作用

**hashCode() 在散列表中才有用,在其它情况下没用。**在散列表中hashCode() 的作用是获取对象的散列码(根据对象的内存地址转化而来的),进而确定该对象在散列表中的位置。

1.8.3 hashCode() 和 equals() 的关系

  • 两个对象hashCode相同,两个对象未必相等,可能是hash碰撞。equals相同,hashcode一定相同
  • 如果equals被重写那么hashcode也要被重写(因为如果重写了equals,那么equals比较的就是内容,不是地址,那么就可能存在两个内容相同但是地址不同的对象,euqals判断相等,hashcode判断不同)为什么equals被重写hashcode也要被重写

答题思路:hashcode与equals关系 以及重写的问题

2. 面向对象

2.1 简述面向对象的三大特性⭐️⭐️

  • 封装:封装把⼀个对象的属性私有化,同时提供⼀些可以被外界访问的属性的⽅法,如果属性不想被外界访问,我们⼤可不必提供⽅法给外界访问。但是如果⼀个类没有提供给外界访问的⽅法,那么 这个类也没有什么意义了。

  • 继承:主要有以下四点

  1. ⼦类可以拥有⾃⼰属性和⽅法,即⼦类可以对⽗类进⾏**扩展,但是不能选择性的继承父类。

  2. ⼦类可以⽤⾃⼰的⽅式实现⽗类的⽅法,即重写

  3. java只允许单继承

  4. 显示继承:所有非私有操作属于显示继承(可以直接调用)。
    隐式继承:所有私有操作属于隐式继承(不可以直接调用,需要通过其它形式调用(get或者set))。

  • 多态
  1. 父亲的引用变量指向子类的对象
  2. 实现的三个必要条件:
  • 继承:在多态中必须有子父类的继承关系

  • 重写:子类对父类中的某些方法进行重新定义,可以调用子类的方法。

  • 向上转型:需要将子类的对象赋值给父类

  1. 具体实现方式: 接口多态(实现接口的方法),继承的多态(多个子类对同一方法的重写)

2.2 抽象类和接口的区别⭐️⭐️

接口 抽象类
方法 不能被实现(1.8以后可以有实现的方法),默认是public 需要被实现否则也是抽象类,可以是抽象的方法也可以是抽象的方法,不能是private
变量 都是被默认的public static final 修饰的 无所谓
关系 一个接口可以被多个类实现 一个类只能继承一个抽象类
设计层面 是对行为的抽象 是对类的抽象

2.3 重载和重写的区别⭐️⭐️

重载 重写
什么情况下发生 发生在一个类中,例如构造器 发生在子类中
方法名 相同 相同
参数 必须不相同 必须相同
返回类型 可以修改 更小
访问修饰符 可以修改 更大
异常 可以修改 更小

答题思路:重写:两小一大 重载:均可以修改

2.4 简述继承和组合的区别和选择

暂略

2.5 super 和 this的区别

3. 关键字

3.1 final关键字 ⭐️⭐️

修饰 效果
修饰方法参数 不可变
修饰方法 无法被重写
修饰类 无法被继承
修饰变量 只能被赋值一次不能被更改

3.2 static 关键字作用是什么 ⭐️

修饰 效果
修饰方法 使用类.方法名调用
修饰静态代码块 类初次加载时候加在一次
修饰变量 因为是加载在方法区的所以是多个变量共享的

4.java常用类

4.1 string和StringBuilder和StringBuffer的区别⭐️⭐️

  • String是不可变的(final修饰的char数组) StringBuilder 和StringBuffer是可变的字符串对象(无final修饰的char数组3)

  • StringBuilder是线程不安全的,stringBuffer是线程安全的(添加字符方法(append)上加上了synchrozied)

  • 实际使用 :字符串改动少用string,线程安全且字符串有改动用stringbuilder,线程不安全且有改动用stringBuffer

5.异常体系

  • 运行时异常:比如空指针异常,属于不可查的异常通常是由于逻辑错误导致的,处理即可
  • 编译时的异常: FileNotFoundException 必须进行处理否则通不过,try catch 或者 throw 进行处理

6.java反射机制

  • 反射基本概念

    通过对象,能够获取到他们的属性和方法,并且可以修改 这种机制称为反射机制

  • 优点:动态获取类,提高了灵活度

  • 缺点:性能比较低,有安全问题

7.java集合

7.1 hashmap⭐️⭐️

转容器复习笔记

7.2 ArrayList

7.2.1 ArrayList和LinkedList区别⭐️⭐️

  • 数据结构:ArrayList 是数组 LinkedList是双向链表

  • 增删改查的效率:

    add操作都是o(1),添加到指定位置都是o(n)(解释)

    随机访问(get):LinkedList不支持高效的随机访问,ArrayList支持高速的随机访问

  • 内存占用:arrayList浪费是主要体现在会在结尾预留空间,LinkedList体现在每一个数多两个指针

8.其它

8.1 什么是深拷贝,什么是浅拷贝?⭐️⭐️

  • 如果只是对数据内容进行了拷贝,对引用的地址进行了传递那么是浅拷贝
  • 如果在拷贝数据类型的时候创建了一个新的对象,那么就是深拷贝

8.2 什么是序列化,什么是反序列化

序列化:数据变成字符串

反序列化:字符串变为数据

你可能感兴趣的:(java,基础,java,面试,编程语言,网络)