2021牛年面试笔记,从零开始,持续更新~

最新更新时间2021.2.23,刚刚开始整理,算是本人的一点记录吧,如果内容不对,也请大佬们指出错误,更望嘴下留情。

  • java基础
  • 面向对象
  • 异常处理
  • jvm
  • 反射
  • 多线程与线程安全
  • 容器技术
  • 技术选型
  • 缓存
  • 设计模式
  • 网络
  • 分布式
  • 底层源码

java基础

  • jdk jre jvm三者之间的关系?

2021牛年面试笔记,从零开始,持续更新~_第1张图片

  • 数据类型?

    2021牛年面试笔记,从零开始,持续更新~_第2张图片

  • equals和==区别?

A: ==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
B: ==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
C: ==指引用是否相同, equals()指的是值是否相同

引用面试题:
两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
答案:不对
原因:hashCode()并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样(生成hash值得公式可能存在的问题),所以hashCode()只能说是大部分时候可靠,并不是绝对可靠
equal()相等的两个对象他们的hashCode()肯定相等。

  • String 属于基础的数据类型吗?

答案:不是,String是final修饰的java类

  • String str="i"与 String str=new String(“i”)一样吗?

答案:不一样,内存地址不同。

  • 请你描述一下什么是多态?

多态是继封装、继承之后,面向对象的第三大特性。
多态现实意义理解:
现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。
多态体现为父类引用变量可以指向子类对象。

  • 多态的转型?

向上转型:多态本身就是向上转型过的过程
使用格式:父类类型 变量名=new 子类类型();
适用场景:当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作。

向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型
使用格式:子类类型 变量名=(子类类型)父类类型的变量;
适用场景:当要使用子类特有功能时。

  • String、StringBuffer和StringBuilder区别

三者共同之处:都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用。
StringBuffer是线程安全,可以不需要额外的同步用于多线程中;
StringBuilder是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了;
StringBuffer与StringBuilder两者共同之处:可以通过append、indert进行字符串的操作。

面向对象

  • 面向过程与面向对象的区别?

面向过程:将问题分解成步骤,然后按照步骤实现函数,执行时依次调用函数。数据和对数据的操作是分离的。
面向对象:将问题分解成对象,描述事物在解决问题的步骤中的行为。对象与属性和行为是关联的。

  • 面向过程与面向对象的优缺点?

面向过程的优点是性能比面向对象高,不需要面向对象的实例化;缺点是不容易维护、复用和扩展。
面向对象的优点是具有封装、继承、多态的特性,因而容易维护、复用和扩展,可以设计出低耦合的系统;缺点是由于需要实例化对象,因此性能比面向过程低。

  • 对象创建的过程?

对象创建之前,首先类被加载(先加载父类再加载子类),执行静态代码块,执行构造器((先构造父类再构造子类)),创建对象实例静态方法和类有关,直接使用类名.方法来进行调用

  • 抽象类和接口有什么区别?

抽象类当中可以有普通方法,必须有抽象方法,可以有成员变量,不可以被实例化
接口当中只能有抽象方法,不能有普通方法,可以有静态常量,不可以被实例化,接口可以看做是一种特殊的抽象类

异常处理

jvm

反射

多线程与线程安全

容器技术

技术选型

缓存

设计模式

网络

分布式

底层源码

你可能感兴趣的:(java,java,分布式,设计模式)