面試就业题库-01

文章目录

  • 1. java基础(1)
    • 1.1 面向对象和面向过程的区别(记住)
      • 面向过程(C,C++(即是面向过程,又是面向对象),C#,.NET)
      • 面向对象(Java)
    • 1.2 Java 语言有哪些特点(记住)
    • 1.3 JDK , JRE, jvm
    • 1.4 字符型常量和字符串常量的区别(记住)
    • 1.5 构造器 Constructor 是否可被 override(记住)
    • 1.6 Java 面向对象编程三大特性:封装、继承、多态(掌握)
      • 封装
      • 继承
      • 多态
    • 1.7 String 和 StringBuffer、StringBuilder 的区别分别是什么
    • 1.8 在一个静态方法内调用一个非静态成员为什么是非法的(记住)
    • 1.9 在java中,为什么要有无参数的构造方法,并说出应用场景?
    • 2.0 接口和抽象类的区别是什么(掌握)
    • 2.1 成员变量与局部变量的区别有那些(记住)
    • 2.2 对象和引用关系
    • 2.3 静态方法和实例方法有何不同(记住)
    • 2.4 对象的相等与指向他们的引用相等,两者有什么不同?(记住)
    • 2.5 == 与 equals(掌握)等,两者有什么不同?
  • 2. javaweb(1)
  • 3. ssm+springboot+springCloud(1.5)
  • 4. 企业开发的项目: 技术说明(1.5)
  • 5. 面试总结(3,4)

1. java基础(1)

1.1 面向对象和面向过程的区别(记住)

面試就业题库-01_第1张图片

面向过程(C,C++(即是面向过程,又是面向对象),C#,.NET)

优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

缺点: 没有面向对象易维护、不易复用、不易扩展

面向对象(Java)

优点: 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护

缺点: 性能比面向过程低(性能: 执行程序所耗费时间)

实际的应用场景:

  1. 开发大型网络游戏: C语言
  2. 企业级项目: Java语言

1.2 Java 语言有哪些特点(记住)

  1. 面向对象(三大特点: 封装,继承,多态);

  2. 平台无关性( 不同平台(操作系统),不同的操作系统,安装的虚拟机不一样(解释和执行class文件));

  3. 可靠性;

  4. 安全性;

  5. 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
    自定义线程的方式有几种?
    自定义线程池的方式有几种?

  6. 支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便,

    比如:Socket, JavaFX网络编程框架(面试的强点比如: 美团,滴滴等),这里我有个项目,学习资料);

  7. 编译与解释并存;

1.3 JDK , JRE, jvm

  • 从范围大小说:
  1. jdk: java开发环境
  2. jre: java运行环境
  3. jvm: java虚拟机(作用: 解释执行class字节码文件的)
    结论: jdk包含jre,jre包含jvm
  • 从内容来说来说
    jdk主要包含三大部分
  • java的核心命令: javac.exe(编译命令) java.exe(java运行命令)
  • 核心jar: tools.jar , rt.jar(里面有c语言的文件)等等(jar包大部分都是class文件,不能直接阅读)
  • 源码包: src.zip(sources.zip,里面都是java文件,可以直接阅读,对应的jar的class文件.)
  • 比如: src.zip: A.java(直接阅读)-------------->define.jar: A.class(不能阅读)

1.4 字符型常量和字符串常量的区别(记住)

  • 字符: 比如: char a = ‘a’; 在内存中占2个字节,char基本类型

  • 字符串: 比如: String str=“abvvv”; 在内存中根据字符串的长度去判断占多少字节,String是引用类型

  • 面試就业题库-01_第2张图片面試就业题库-01_第3张图片

1.5 构造器 Constructor 是否可被 override(记住)

* 重写:  子类(子接口 )重写 父类(父接口)的方法
* 重载: 在类中,方法名称必须相同,方法的参数个数,参数类型不同, 与返回值无关
* 构造器 Constructor 不可以被重写

1.6 Java 面向对象编程三大特性:封装、继承、多态(掌握)

封装

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

继承

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码。
关于继承如下 3 点请记住:

  1. 子类拥有父类非 private 的属性和方法。
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  3. 子类可以用自己的方式实现父类的方法。

多态

所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
比如: 父接口 f = new 子类(); 父类 f = new 子类();
在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。

1.7 String 和 StringBuffer、StringBuilder 的区别分别是什么

  • String的值不可变: 底层保存数据是 final char[] ,数组里面的值不能改变
  • StringBuffer、StringBuilder值是可变的: 底层保存数据是char[], 数组里面的值是可以改变的.
  • String被final, 不能被继承
  • StringBuffer、StringBuilder是可以被继承的
  • 从线程安全考虑:
  • StringBuffer是线程安全的,因为里面使用了同步锁 , 所以性能差
  • StringBuilder是线程不安全的, 所以性能好
  • 从使用场景上考虑
  • 补充说明
    1. 操作少量的数据 = String
    1. 单线程(一般是安全的)操作字符串缓冲区下操作大量数据 = StringBuilder
    1. 多线程(一般线程不安全)操作字符串缓冲区下操作大量数据 = StringBuffer

1.8 在一个静态方法内调用一个非静态成员为什么是非法的(记住)

  原因:  静态的优先于非静态的加载. 在静态方法里面不能调用非静态的成员变量

1.9 在java中,为什么要有无参数的构造方法,并说出应用场景?

  • 构造方法有两个作用:
    1. 给成员变量赋值
    1. 实例化该类对象
  • 为什么类中要有无参数的构造方法呢?
  • 在框架中, 创建对象默认使用的都是无参数的构造方法,
    所以我们在开发中,一定要显示的定义无参数构造方法

2.0 接口和抽象类的区别是什么(掌握)

 1. 接口可以多实现, 抽象类只能单继承
 2. 抽象类可以有非抽象方法, 接口里面(jdk8之前)都是抽象方法
 3. 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法
 4. 接口中的实例变量默认是 final 类型的,而抽象类中则不一定 
 5. 一个类可以实现多个接口,但最多只能实现一个抽象类 
 6.  一个类实现接口的话要实现接口的所有方法,而抽象类不一定 
 7. 接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

2.1 成员变量与局部变量的区别有那些(记住)

  1. 从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰;

  2. 从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存

  3. 从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。

  4. 成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被 final 修饰但没有被 static 修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值。

    • 从内存存储位置来说
      局部变量在栈里面, 成员变量在堆里面存储
    • 从生命周期来说
      局部变量随着方法的进展而初始化,随着方法出栈而被移除.
      成员变量在不被引用时,会从堆里面移除
    • 从类中存储来说
      局部变量在方法内部,必须赋值
      成员变量在方法外部,不用必须赋值,有初始默认值.

2.2 对象和引用关系

*特点: 对象在堆里面存储, 对象的地址引用在栈里面存储

  • 一个对象可以有多个地址引用? : 正确的
  • 一个地址引用可以对应多个对象? : 错误的
  • 如果地址引用不同, 那么比较的两个对象肯定不一样,
    在实际开发中,比较对象是否一样,其实比较的对象里面的内容是否一样? : 错误的
  • 一个对象可以有多个引用(引用指的对象的hashcode值)?
  • new运算符,new创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中)。一个对象引用可以指向0个或1个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有n个引用指向它(可以用n条绳子系住一个气球)。
    总结:
    对象实体: 其实一个hashcode值,在堆里面存储,只能有1个对象实体或者0个
    对象引用: 在栈空间存储, 可以有多个引用

2.3 静态方法和实例方法有何不同(记住)

  1. 从加载时机: 静态方法优先加载
  2. 从调用方式来说:
    静态方法调用: 1. 可以通过类名调用 2. 可以通过对象调用
    实例方法: 只能通过对象调用
  3. 从访问变量来说:
    静态方法: 调用静态变量
    实例方法: 静态或非静态变量都可调用

2.4 对象的相等与指向他们的引用相等,两者有什么不同?(记住)

对象的相等,比的是内存中存放的内容是否相等。而引用相等,比较的是他们指向的内存地址是否相等。
总结:

  1. 对象的引用: 其实一个hashcode值(一个引用一般对应一个对象)
  2. 对象实体: 指的对象里面的数据是否一样
  • 引用相等: 对象是相等(1. 地址一样 2. 对象里面的数据一样)
  • 对象的相等: 引用不一定一样

2.5 == 与 equals(掌握)等,两者有什么不同?

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

equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:

  • 情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
  • 情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。
public class test1 {
    public static void main(String[] args) {
        String a = new String("ab"); // a 为一个引用
        String b = new String("ab"); // b为另一个引用,对象的内容一样
        String aa = "ab"; // 放在常量池中
        String bb = "ab"; // 从常量池中查找
        if (aa == bb) // true
            System.out.println("aa==bb");
        if (a == b) // false,非同一对象
            System.out.println("a==b");
        if (a.equals(b)) // true
            System.out.println("aEQb");
        if (42 == 42.0) { // true
            System.out.println("true");
        }
    }
}

2. javaweb(1)

3. ssm+springboot+springCloud(1.5)

4. 企业开发的项目: 技术说明(1.5)

5. 面试总结(3,4)

你可能感兴趣的:(java,经验分享,开发语言)