普歌-允异团队-java面试题(基础)

Java 的 基础

1. == 与 equals区别:

== :
基本类型和引用类型 == 的作用效果是不同
基本类型:比较值是否相同
引用类型:比较引用类是否相同
equals :
本质是 == ,只不过String 和 integer 等方法重写了equals 方法,把它变为值比较。(String重写了object的equals方法,把引用比较改成了值比较)

2. http 与 302 的区别:

301,302 都是HTTP状态的编码,都代表着某个URL 发生了转移,不同之处在于:
301 redirect: 301 代表永久性转移(Permanently Moved)。
302 redirect: 302 代表暂时性转移(Temporarily Moved )。
二.现实中的差异
对于用户
301,302对用户来说没有区别,他们看到效果只是一个跳转,浏览器中旧的URL变成了新的URL。页面跳到了这个新的url指向的地方。
2.2.对于引擎及站长
302转向可能会有URL规范化及网址劫持的问题。可能被搜索引擎判为可疑转向,甚至认为是作弊。
JavaLeader 的博客

URL

在WWW 上,
每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,就是指网络地址。

3 . https 443

443 端口即网页浏览端口,主要是用于HTTPS服务,80 端口是浏览网页的默认端口。
说明
网页浏览端口,能提供加密和通过安全端口传输的另一种HTTP。
HTTPS和HTTP的区别:
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全
silencement 的博客

4.80端口

80 点击了解

HTTP
(HyperText Transport Protocol)
即超文本传输协议开放的,此为上网冲浪使用次数最多的协议,主要用于WWW(World Wide Web)即万维网传输信息的协议。

5. 404

404页面是客户端在浏览网页时,服务器无法正常提供信息,或是服务器无法回应,且不知道原因所返回的页面。
404

6. 502(服务器错误代码)

此服务器收到无效响应从上游服务器访问履行它的要求。

7. 面向对象特征(注重过程,代码可复用):

抽象 :
将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注属性和行为。不关注行为的细节。

  1. 封装
    通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口.
    面向对象的本质就是将现实世界描绘成一系列完全自治,封闭的对象,可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。
    封装给对象提供了隐藏内部特性和行为的能力,对象提供一些能这被其它对象访问的方法来改变它内部的数据。
    提供构造方法(有了构造方法才能通过new去构建一个对象
    1.构造方法必须和类名称一样
    2.构造方法不能有返回值)
    静态块(做的类的初始化的工作,执行在new之前)

控制访问
在这里插入图片描述

  1. 继承(extends)
    目的:对父类方法的复用
    继承是从已有类得到继承信息创建新类的过程,
    继承让变化中的软件系统有了一定的延续性,
    同时继承也是封装程序中可变因素的重要手段.
    子类继承父类属性(静态特征)和方法(动态特征),
    继承必须遵循封装当中的控制访问
  1. 多态
  • 向上转型
    允许相同或不同的子类类型的对象对同一信息做出不同响应。
  • 重载:
    同一动作作用在同一对象上拥有不同的解释 overload
  • 重写:
    同一动作作用在不同一对象上拥有不同的解释 override
    狭义的多态值重写
    声明一个父类型的引用指向具体子类型的实例
    运行时才能绑定

8. 接口与抽象类的区别:

实现:
抽象类子类使用 extends 来继承
接口必须使用 implements 来实现
构造函数:
抽象类 可以有
接口 不可(接口不可实例化)
抽象类不能创建对象,但有构造方法,作用是让子类初始化时,对抽象类的数据进行初始化

原因:
子类初始化前,必须先将父类初始化,因为子类初始化可能要用到父类的数据
接口中的方法都是抽象的,没有方法实体,成员变量也是常量
方法在方法区中,常量在常量池
而对象在堆内存中

Main 方法:
抽象类 可以有并能运行
接口 不可

实现数量:
类可以实现很多个接口,但只能继承一个抽象类

访问修饰符:
接口 方法中默认 使用 public 修饰
抽象 任意访问修饰符

9. 修饰符

i. Static
o 静态
能够修饰属性、方法、初始化代码快、内部类,不能修饰局部变量和类

  1. 本类所有对象共享
  2. 可以直接通过 类名.静态属性 访问
  3. 用类名直接调用静态属性,这样能把静态变量和实例变量加以区分,从而提高代码的可读性。

o static 修饰方法—静态方法
1)全类公有的方法
2) 可以使用类名.方法名直接调用
3) 静态方法与对象无关,不依赖对象所以无法使用this或super关键字
4) 静态方法只能访问静态成员(非静态方法中,无论方法和属性是否是静态的都能够访问)
5)静态方法/属性可以被继承
6)静态方法只能被静态方法覆盖且没有多态
使用多态时:子类对象给父类引用赋值 ,运行时会调用子类覆盖的方法,但是当对一个引用调用静态方法时,等同于对这个引用类型调用静态方法。

o 类加载
1)当JVM第一次使用某个类时(new 对象、调用静态成员、使用子类)需要通过ClassPath查找该类的.class文件
2)将.class文件中保存的该类信息(属性、方法….)加载到内存中(内存中的模板)
3)加载时会初始化该类的必要信息,初始化静态属性、静态方法、执行该类静态初始化代码块等。
4)静态方法只能访问静态成员(非静态方法中,无论方法和属性是否是静态的都能够访问)
5)静态方法/属性可以被继承
6)静态方法只能被静态方法覆盖且没有多态

一次运行中类加载只执行一次
只声明引用,不会进行类加载

o 类加载的过程:
1)如果有需要先加载父类(初始化父类静态属性、执行父类静态初始化代码块)
2)初始化本类静态属性,执行本类静态初始化代码块

ii. Final
final属性能够修饰变量、方法 和类。变量 包括属性、局部变量
用final修饰的变量和属性一般称之为常量。
定义:一旦赋值,其值不能改变的变量(final修饰的属性必须得有值)
final修饰的方法不允许被覆盖。
final修饰方法意义在于:防止子类在定义新方法时,造成不经意的重写。
final不能继承
1)常用 public static final (公开静态常量) 用于保存一些常用且不可变的值。
2)final 修饰基本类型变量- -值不可变
3)final 修饰对象引用- - 地址不可变
4)final static 可以连用,private、static、final 均不能与abstract连用。、
5)JDK中一些基础类库被定义为final,例如:String、Math、Integer、Double等
6)static final修饰的成员变量称为常量,必须声明同时初始化,不可被改变。
static final 常量会在编译期被替换。

iii. abstract
修饰类,方法
抽象类
abstract修饰类,则这个类就成为了一个抽象类,抽象类的特点是:
抽象类只能用来声明引用,不能用来创建对象。
虽然抽象类不能创建对象,但是抽象类可以被继承,从而创建子类对象。
1)抽象类可以没有抽象方法,有抽象方法的类一定是抽象类
2)子类覆盖父类的抽象方法时,并不是用一个特殊的实现替换一个一般的实现,而是在父类没有方法实现的情况下,子类给出一个方法的实现。
3)子类继承抽象类,要么也成为抽象类,要么就必须实现抽象类中所有的抽象方法。
抽象的作用
方法的声明是共性,方法的实现是特性。

10. Final

I. 修饰数据
II. 同时使用static和final修饰的成员在内存中只占据一段不能改变的存储空间
III. 修饰方法参数
IV. 修饰方法
V. 修饰类
final只保证这个引用类型变量所引用的地址不会发生改变,即一直引用这个对象,但这个对象属性是可以改变的
这瓜保熟么 的博客

  • 用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值;
  • 用来修饰方法参数,表示在变量的生存期中它的值不能被改变;
  • 修饰方法,表示该方法无法被重写;
  • 修饰类,表示该类无法被继承。

11. Arrary 和 ArrayList 的区别

Array 的容量是固定的,ArrayList 的容量是根据需求自动扩展
ArrayList 提供了 添加、插入或移除 某一范围元素的方法
而 Array 中,只能一次获取或设置一个元素值

12. 重载(Overload)和重写(Override)的区别。

  1. 重载的方法能否根据返回类型进行区分?
    答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。

重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;

重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,(有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。)

重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

13. String :不可变字符序列

StringBuffer: 可变字符序列,效率低,线程安全
stringbuilder(JDK1.5):可变字符序列,效率高,线程不安全

14. 构造方法

  1. 构造方法名称必须与类相同
  2. 构造方法是没有返回类型的,即使是void也不能有
  3. 构造方法不能被继承,不能被直接调用
  4. 类定义时提供了默认的无参构造方法
  5. 构造方法可以私有

  • 作者:麦克猫Cat
  • 本文版权归作者和CSDN共有,欢迎交流

猜你喜欢

转载自blog.csdn.net/weixin_52309367/article/details/115358319