Skip to content

华顺信安 已完结

日期

2024 年 9 月 13 日

自我介绍

Java 基础

静态变量与实例变量有什么差别

  1. 语法形式:成员变量定义在类中,局部变量定义在方法中。成员变量可以使用修饰符,局部变量只能使用 final。
  2. 存储方式:成员变量存储在堆中,局部变量存储在栈中。
  3. 生存时间:成员变量跟随其对象的生存时间,局部变量跟随其所在代码块的开始和结束。

抽象是什么含义?

抽象主要通过抽象类和接口来实现。目的是隐藏复杂的实现细节,只暴露出必要的接口。

什么是接口?接口用什么去修饰?

接口是一个引用类型,用于定义类可以实现的行为集合。可以理解为一种规范。

接口通过 interface 关键字来定义。

接口的所有的方法都要实现吗?

类实现接口时必须实现接口中所有的抽象方法。默认方法和静态方法则不需要实现类来实现。

什么是继承

继承是指,允许子类继承父类的属性和方法。通过继承,子类可以复用父类的代码。

Java 支持多继承吗?

类不支持多继承,接口支持多继承。

什么是构造函数

构造函数是一个在创建对象时自动调用的方法,用于初始化对象,为对象成员变量设置初值。

Map 和 List 的区别?

  1. 用途:List 用于存储有序的、可重复的元素集合;Map 用于存储键值对映射,键唯一。
  2. 访问方式:List 通过索引访问元素;Map 通过键访问值。
  3. 存储结构:List 是元素的线性集合;Map 是键值对的集合。

❓Java 中有闭包吗?

形参和实参的区别是什么?

形参是函数定义时的占位符,而实参是调用函数时传递的实际数据。

静态变量什么时候初始化

当类第一次被加载到内存中时,所有的静态变量都会被初始化。

简单说一下单例模式

通过提供一个静态方法来获取该实例,客户端可以通过此方法访问唯一的实例。

Java 的基本数据类型

  1. short
  2. boolean
  3. long
  4. int
  5. char
  6. byte
  7. double
  8. float

基本数据类型和引用数据类型的区别

  1. 默认值:基本类型存在默认值,包装类型默认值为null
  2. 泛型:包装类可以用于泛型,基本类型不可以
  3. 存储位置:非 static 修饰的基本类型存在栈中,包装类存在堆中。

引用传递会不会改变调用方的原值

会的

MySQL

事务是什么?

事务的几大特性是什么?

  1. 原子性:undo log
  2. 一致性
  3. 隔离性:MVCC + 锁
  4. 持久性:redo log

MySQL 中索引的作用是什么?

提高查询性能

联合索引的优点是什么?

  1. 提高多列查询的性能
  2. 相比于多列索引,节省存储空间和维护成本
  3. 覆盖索引:如果联合索引包含了查询所需的所有列,那么查询可以直接从索引中获取数据,而不需要访问表

❓乐观锁和悲观锁有什么区别?

Redis

Redis 的优势是什么?

  1. 基于内存,性能高
  2. 多种数据结构
  3. 支持持久化
  4. 支持分布式,可以实现高可用
  5. 支持原子操作

Redis 可以做持久化吗?

Redis 支持 RDB 内存快照和 AOF 追加日志两种持久化方式。

数据结构

二分算法的原理是什么?

通过将已排序的数组分成两部分,逐步缩小查找范围来高效地定位目标元素。

冒泡排序的原理是什么?

通过重复遍历待排序的数组,比较相邻元素并交换它们的位置,从而逐步将最大或最小的元素“冒泡”到数组的一端。

代码题

pi - ruby

公式:Pi / 4 = 1 - (1/3) + (1/5) - (1/7) + (1/9) - (1/11) + (1/13) - ….

实现一个方法,输入为n,返回为用n项公式输出的Pi值

例子:

  1. n = 1, pi = 4 * 1
  2. n = 2, pi = 4 * [1 - (1/3)]
  3. n = 3, pi = 4 * [1 - (1/3) + (1/5)]
  4. n = 4, pi = 4 * [1 - (1/3) + (1/5) - (1/7)]
  5. n = 5, pi = 4 * [1 - (1/3) + (1/5) - (1/7) + (1/9)]
java
public static double piRuby(int n) {
    double val = 0;
    for (int i = 0; i < n; i++) {
        if (i % 2 == 0) {
            val += 1.0 / (i * 2 + 1);
        } else {
            val -= 1.0 / (i * 2 + 1);
        }
    }
    System.out.println("val = " + val);
    return val * 4;
}

冒泡排序

java
public static int[] bubbleSort(int[] nums) {
    int n = nums.length;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (nums[j] > nums[j + 1]) {
                // 交换相邻的元素
                int temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
    return nums;
}

Released under the MIT License.