当前位置: 首页 > news >正文

Java企业面试题3

1. break和continue的作用(智*图)

  • break:用于完全退出一个循环(如 for, while)或一个 switch 语句。当在循环体内遇到 break 语句时,程序会立即跳出当前循环体,继续执行循环之后的代码。
  • continue:用于跳过当前循环体中剩余的部分,并开始下一次循环。如果是在 for 循环中使用 continue,则会直接进行条件判断以决定是否执行下一轮循环。

2. if分支语句和switch分支语句的异同之处(智*图)

  • 相同点:都是用来根据不同的条件执行不同的代码块。
  • 不同点
    • if语句可以处理范围条件和复杂条件判断,而switch语句通常用于等值判断,即变量等于某个特定值的情况。
    • switch语句支持的类型有限,主要是整型(包括byteshortintchar)和枚举类型,以及从Java 7开始支持的字符串类型。if语句没有这种限制。
    • switch语句在执行完一个case后,如果没有break,会继续执行下一个case的代码(称为“穿透”),而if语句不会出现这种情况。

3. 什么时候用语句if,什么时候选用语句switch(灵伴*来科技)

  • 使用 if 语句:当你的程序需要根据某个条件执行特定的代码段,或者条件是复杂的布尔表达式时,适合使用 if 语句。
  • 使用 switch 语句:当有多个互斥的选项(即一次只能选择一个选项),并且这些选项是基于一个具体的值时,使用 switch 语句可以使代码更加清晰和简洁。

4. switch语句中忘写break会发生什么(北京*蓝)

  • case穿透:在 switch 语句中忘记写 break 会导致“fall through”现象,即执行完当前 case 的代码后,会继续执行下一个 case 的代码,直到遇到 break 或者 switch 结束为止。这可能会导致未预期的行为。

5. Java支持哪些类型循环(上海*睿)

  • for循环:通过初始化表达式、条件表达式和迭代表达式来控制循环次数。
  • while循环:在循环开始前检查条件,如果条件为真,则执行循环体。
  • do-while循环:至少执行一次循环体,之后再检查条件是否满足。
  • 增强型for循环(也称为for-each循环):用于遍历数组或集合中的元素,简化了遍历过程。

6. while和do while循环的区别(国*科技研究院)

  • while 循环:先检查条件是否为真,然后才进入循环执行循环体。如果初始条件下就为假,则循环体一次也不会执行。
  • do...while 循环:先执行循环体内的代码,然后检查条件是否为真。这意味着无论条件如何,do...while 循环的循环体会至少执行一次。

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

  • 数组:在Java中,数组没有length()方法,而是有一个length属性。例如,int[] arr = new int[10]; 中,arr.length会返回数组的长度,即10。
  • String:字符串(String)有length()方法,用于返回字符串的长度。例如,String str = "Hello"; 中,str.length()会返回5。

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

public static void reverseArray(int[] arr) {int leftIndex = 0;int rightIndex = arr.length - 1;while (leftIndex < rightIndex) {// 交换两端的元素int temp = arr[leftIndex];arr[leftIndex] = arr[rightIndex];arr[rightIndex] = temp;// 移动索引leftIndex++;rightIndex--;}
}

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

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

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

  • 常见的数组排序方式包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。这里以冒泡排序为例:
public static void bubbleSort(int[] arr) {int temp;for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}

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

  • 快速排序是一种高效的排序算法,它使用分治法。基本步骤如下:

        选择一个'pivot'(基准)元素。
        将所有比pivot小的元素放到它的左边,比pivot大的放到右边。
        对左右两边递归执行上述步骤。

  • 平均时间复杂度为O(n log n),最坏情况下的时间复杂度为O(n^2),当每次划分都极不平衡时会发生这种情况

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

  • 二分查找适用于有序数组,以下是其实现:
public static int binarySearch(int[] arr, int target) {int left = 0, right = arr.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (arr[mid] == target) {return mid;} else if (arr[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return -1; // 如果没有找到目标值,则返回-1
}

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

  • 这个问题可以通过动态规划解决,著名的解法是Kadane算法:
public static int maxSubArraySum(int[] arr) {int maxSoFar = arr[0];int currMax = arr[0];for (int i = 1; i < arr.length; i++) {currMax = Math.max(arr[i], currMax + arr[i]);maxSoFar = Math.max(maxSoFar, currMax);}return maxSoFar;
}

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

  • Java 的 java.util.Arrays 类提供了一系列静态方法来对数组进行操作,包括排序。对于基本类型的数组,可以使用 Arrays.sort() 方法进行排序。这个方法内部实现了使用一种称为“双支枢快速排序”的高效算法,它对于大多数情况下的性能表现是非常好的。下面是使用 Arrays.sort() 方法的一个例子:
import java.util.Arrays;public class ArraySortExample {public static void main(String[] args) {int[] arr = {9, 5, 1, 8, 2, 7};// 对数组进行排序Arrays.sort(arr);// 输出排序后的数组System.out.println(Arrays.toString(arr));}
}

        这段代码将会输出一个已经按照升序排列的数组 [1, 2, 5, 7, 8, 9]。

  • 对于对象数组,Arrays.sort() 同样可以使用,但是要求这些对象必须实现 Comparable 接口,并且重写其中的 compareTo 方法来定义自然排序的顺序。如果没有实现 Comparable 或者需要自定义排序规则,可以传递一个 Comparator 实例给 Arrays.sort() 方法。示例代码如下:
import java.util.Arrays;
import java.util.Comparator;class Person implements Comparable<Person> {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic int compareTo(Person other) {return Integer.compare(this.age, other.age);}@Overridepublic String toString() {return name + ": " + age;}
}public class ObjectArraySortExample {public static void main(String[] args) {Person[] people = new Person[] {new Person("Tom", 30),new Person("Jerry", 25),new Person("Bob", 22)};// 按照年龄排序Arrays.sort(people);// 输出排序后的数组System.out.println(Arrays.toString(people));// 使用Comparator按姓名排序Arrays.sort(people, new Comparator<Person>() {@Overridepublic int compare(Person p1, Person p2) {return p1.getName().compareTo(p2.getName());}});// 输出按姓名排序后的数组System.out.println(Arrays.toString(people));}
}

        在这个例子中,我们首先根据年龄对 Person 实例进行排序,然后使用 Comparator 根据名字进行排序。注意 toString 方法的重写是为了更好地展示输出结果。


http://www.mrgr.cn/news/28134.html

相关文章:

  • 《动手学深度学习》中d2l库的安装以及问题解决
  • 微信小程序 === 使用腾讯地图选点
  • java程序打包及执行 jar命令及运行jar文件
  • Flink_DataStreamAPI_执行环境
  • 【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的到家护理服务平台的设计与实现
  • Python 占位语句 pass
  • 基于是springboot小区物业管理系统
  • JAVA基础:线程优先级和精灵线程
  • 【演化博弈论】:双方演化博弈的原理与过程
  • java数据结构----图
  • 【Kubernetes】常见面试题汇总(十九)
  • C++第五十一弹---IO流实战:高效文件读写与格式化输出
  • 数据结构之基数排序简介与举例
  • 图像增强技术分析
  • aspcms webshell漏洞复现
  • 卡拉兹(Callatz)猜想也叫(3n+1)猜想
  • 【数据结构】排序算法---希尔排序
  • 第T11周:优化器对比实验
  • Vue基础
  • 【C++】深入理解作用域和命名空间:从基础到进阶详解
  • 深入浅出Java匿名内部类:用法详解与实例演示
  • 有了数据中台,是否需要升级到数据飞轮?怎么做才能升级到数据飞轮?
  • 包装盒型自动生成插件 Origami Boxshot illustrator盒型自动生成插件
  • 北大对齐团队独家解读:OpenAI o1开启「后训练」时代强化学习新范式
  • SpringCloud-05 Resilience4J 服务降级和熔断
  • 汽车英文单词缩写汇总