企业真题(数组\面向对象-基础)

二、企业真题

1. 数组有没有length()这个方法? String有没有length()这个方法?(*蓝)

数组没有length(),是length属性。

String有length()

2. 有数组int[] arr,用Java代码将数组元素顺序颠倒(闪*购)

3. 为什么数组要从0开始编号,而不是1(中*支付)

数组的索引,表示了数组元素距离首地址的偏离量。因为第1个元素的地址与首地址相同,所以偏移量就是0。所以从0开始。

4. 数组有什么排序的方式,手写一下(平*保险)

冒泡。

快排。(讲完递归方法以后,大家就可以练习一下)

5. 常见排序算法,说下快排过程,时间复杂度?(5*到家)

见课件。

快排:O(nlogn)

6. 二分算法实现数组的查找(神舟*天软件)

 class Solution {
   
 public int search(int[] nums, int target) {
   
        int left = 0;
        int right = nums.length - 1;
        // 循环条件
        while(left <= right){
   
            // 防止溢出, 等同于(left + right) / 2
            int mid = left + (right - left) / 2;
            if(nums[mid] > target) {
   
                // target 在左区间[left mid - 1]
                right = mid - 1;
            } else if (nums[mid] < target) {
   
                // target 在右区间[mid + 1, right]
                left = mid + 1;
            } else {
    // nums[mid] == target
                return mid; // 在数组中找到target, 直接返回下标
            }
        }
        return -1; // 没有找目标值
    }
}

7. 怎么求数组的最大子序列和(携*)

/*
 * 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
 * 求所有子数组的和的最大值。要求时间复杂度为O(n)。
 例如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,
 因此输出为该子数组的和18。
 * @author 尚硅谷-宋红康
 */
public class ArrDemo {
   
	public static void main(String[] args) {
   
		int[] arr = new int[]{
   1, -2, 3, 10, -4, 7, 2, -5};
		int i = getGreatestSum(arr);
		System.out.println(i);
	}
	
	public static int getGreatestSum(int[] arr){
   
		int greatestSum = 0;
		if(arr == null || arr.length == 0){
   
			return 0;
		}
		int temp = greatestSum;
		for(int i = 0;i < arr.length;i++){
   
			temp += arr[i];
			
			if(temp < 0){
   
				temp = 0;
			}
			
			if(temp > greatestSum){
   
				greatestSum = temp;
			}
		}
		if(greatestSum == 0){
   
			greatestSum = arr[0];
			for(int i = 1;i < arr.length;i++){
   
				if(greatestSum < arr[i]){
   
					greatestSum = arr[i];
				}
			}
		}
		return greatestSum;
	}
}

8. Arrays 类的排序方法是什么?如何实现排序的?(阿*、阿*校招)

sort方法用于对数组进行串行排序。它有多个重载的方法,可以根据排序需求选择不同的方法。

二、企业真题

2.1 类与对象

1. 面向对象,面向过程的理解?(平*金服、英**达)

“一切皆对象”,对象就是面向对象编程的核心

所有的事情都可以拆分成一系列要执行的计算步骤,通常采用自上而下、顺序执行的方式来实现

2. Java 的引用类型有哪几种(阿*校招)

类、数组、接口;枚举、注解、记录

3. 类和对象的区别(凡*科技、上*银行)

(一)类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。对象是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。

(二)范畴不同:类是一个抽象的概念,它不存在于现实中的时间、空间里。 对象是类的一个具体。它是一个实实在在存在的东西。

4. 面向对象,你解释一下,项目中哪些地方用到面向对象?(燕*金融)

“万事万物皆对象”。

2.2 Java内存结构

1. Java虚拟机中内存划分为哪些区域,详细介绍一下(神**岳、数*互融)

线程私有的:

  • 程序计数器
  • 虚拟机栈
  • 本地方法栈

线程共享的:

  • 堆外内存(永久代或元空间、代码缓存也叫方法区,jdk8以后叫元空间)
2. 对象存在Java内存的哪块区域里面?(阿*)

堆空间。

2.3 权限修饰符(封装性)

1. private 、缺省、protected、public的表格化作用区域(爱*信、拓*思、中*瑞飞)

在这里插入图片描述

2. main方法的public能不能换成private?为什么?(凡*科技、顺*)

能。但是改以后就不能作为程序的入口了,就只是一个普通的方法。

2.4 构造器

1. 构造方法和普通方法的区别(凡*科技、软*动力、中*软)

编写代码的角度:没有共同点。声明格式、作用都不同。

字节码文件的角度:构造器会以<init>()方法的形态呈现,用以初始化对象。

2. 构造器Constructor是否可被overload?(鸿*网络)

可以。

3. 无参构造器和有参构造器的的作用和应用(北京楚*龙)

作用:用来初始化 java 类,提供类的初始化和实例化,以便调用。

有参数的构造方法的主要目的是为类中的属性初始化的,而无参数的构造方法,可以控制new对象。

2.5 属性及属性赋值顺序

1. 成员变量与局部变量的区别(艾*软件)

6个点。

2. 变量赋值和构造方法加载的优先级问题(凡*科技、博*软件)

变量显式赋值先于构造器中的赋值。

如何证明?我看的字节码文件。

相关推荐

  1. 第08章:随堂复习与企业面向对象-高级)

    2023-12-07 23:28:05       51 阅读
  2. 数据开发-面试

    2023-12-07 23:28:05       42 阅读
  3. 数据开发(Hadoop面试

    2023-12-07 23:28:05       37 阅读
  4. 数据开发(Kafka面试

    2023-12-07 23:28:05       36 阅读
  5. 数据开发(Spark面试

    2023-12-07 23:28:05       36 阅读
  6. 数据开发(Hive面试

    2023-12-07 23:28:05       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 23:28:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 23:28:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 23:28:05       82 阅读
  4. Python语言-面向对象

    2023-12-07 23:28:05       91 阅读

热门阅读

  1. 【bug排查解决】现象级延迟8-10s

    2023-12-07 23:28:05       66 阅读
  2. 如何诊断处理生产环境服务器变慢

    2023-12-07 23:28:05       56 阅读
  3. pcl-2 pcl结合opencv做svm分类(高程数据)

    2023-12-07 23:28:05       55 阅读
  4. jdbc4.MySQLSyntaxErrorException: Query was empty

    2023-12-07 23:28:05       56 阅读