java基础面试知识点

1.java中==和equals和hashCode的区别
  •   ==是运算符,用于比较两个变量是否相等,对栈中的值进行比较;
  •   equals,是Objec类的方法,用于比较两个对象是否相等,默认Object类的equals方法是比较两个对象的地址
  •   hashCode也是Object类的一个方法。返回一个离散的int型整数。在集合类操作中使用,为了提高查询速度。(HashMap,HashSet等)
  对于基本数据类型比较,应该用==,对引用类型比较,使用==比较对象的内存地址,比较堆中的值需要重写equals()来比较对象的内容。  
2.int、char、long各占多少字节数   
  • 整型 int 4字节
  • 长整型 long 4字节
  • 字符型 char 1字节
  • 单精度 float 4字节
  • 双精度 double 8字节
  • 长双精度 long double 8字节
java规范中,没有明确指出boolean的大小。在 《Java虚拟机规范》给出了4个字节,和boolean数组1个字节的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。
3.int与integer的区别
  •     Integer是int的包装类,int则是java的一种基本数据类型 
  •     Integer变量必须实例化后才能使用,而int变量不需要 
  •     Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 
  •     Integer的默认值是null,int的默认值是0

4.java多态

  多态存在的三个必要条件

  • 一、要有继承;
  • 二、要有重写;
  • 三、父类引用指向子类对象

5.String和StringBuilder、StringBuffer的区别?

Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。StringBuffer是线程安全的,效率低。

6.什么是内部类?内部类的作用

内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

内部类的主要作用如下:

  • 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
  • 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
  • 3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

内部类可分为以下几种:

7.抽象类和接口区别

抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。
8.抽象类的意义
java中抽象类更利于代码的维护和重用。
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。具体分析如下:
  • 因为抽象类不能实例化对象,所以必须要有子类来实现它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,这样更有利于代码和程序的维护。
比如本科和研究生可以抽象成学生,他们有相同的属性和方法。这样当你对其中某个类进行修改时会受到父类的限制,这样就会提醒开发人员有些东西不能进行随意修改,这样可以对比较重要的东西进行统一的限制,也算是一种保护,对维护会有很大的帮助。
  • 当又有一个具有相似的组件产生时,只需要实现该抽象类就可以获得该抽象类的那些属性和方法。
比如学校又新产生了专科生这类学生,那么专科生直接继承学生,然后对自己特有的属性和方法进行补充即可。这样对于代码的重用也是很好的体现。
所以,Java中抽象类对于代码的维护和重用有很好的帮助,也是Java面向对象的一个重要体现

tcp三次握手:

第一次,客户端发送syn,等待服务端确认,此时客户端进入SYN_SEND状态

第二次,服务端接收syn包并确认,发送syn+ack给客户端,此时服务端进入SYN_RECV状态

第三次,客户端收到syn+ack,再次向服务端发送ack,此时客户端进入ESTAB状态(注意,此时服务端未必进入ESTAB状态


猜你喜欢

转载自blog.csdn.net/YISHENGYOUNI95/article/details/79518865