java基础面试10题
创始人
2024-05-28 23:10:17
0

1.JVM、JRE 和 JDK 的关系

Jvm:java虚拟机,类似于一个小型的计算机,它能够将java程序编译后的.class 文件解释给相应平台的本地系统执行,从而实现跨平台。

jre:是运行java程序所需要的环境的集合,它包含了jvm的标准实现和java的核心类库。

jdk:是针对java开发的产品,其中包含了java运行环境jre和java的工具以及基础类库。

2.什么是跨平台性?原理是什么?

跨平台性指的是java的一次编译,可以在多个平台运行,即一次编译到处运行。

原理:java程序编译成.class文件后,运行在平台上的java虚拟机会将程序逻辑解释给本地系统,让本地系统底层去执行,说白了就是java程序不会与系统的底层打交道,需要java虚拟机这个中介传话。只要平台上安装有java虚拟机,都能够在该平台运行java程序。

3.&和&&的区别?

&& 操作符具有短路功能, 当前置条件为false 时,将不会判断后置的条件。如 false && xxxx ,程序将不会去判断xxxx是否为true或者false,反之 true && xxxx 时才会去判断。而 & 运算符无论什么时候都会判断两边的条件,当两边的表达式为true时结果为true

4.用最有效率的方法计算 2 乘以 8

使用移位运算 :16 >> 1 为 16 / 2 8 << 1 为 2 * 8

5.在没有使用临时变量的情况如何交换两个整数变量的值?

1.使用加减法:

a = a + b;

b = a - b;

a = a - b;

在执行第一个步骤时,a的值会变为x+y,这时我们可以利用这个和值来通过两次减法来得到b的新值。最后一步同理。

2.使用位运算:

a = a ^ b;

b = a ^ b;

a = a ^ b;

在执行第一个步骤时,a和b的值会进行异或运算,得到一个新的值c。此时,a的值变成了c,而b的值还是原来的y。在第二步中,我们将c和y再次进行异或运算,得到的结果就是原来的x,这个结果就被赋值给了b。最后一步同理。

6.short s1 = 1; s1 = s1 + 1;有错吗? short s1 = 1; s1 += 1;有错吗?

在Java中,short类型的数值是16位的有符号整数,范围是从 -32768 到 32767。对于 short s1 = 1; s1 = s1 + 1; 这行代码来说,s1 + 1的结果是一个int类型的值,需要将其强制转换为short类型才能赋值给s1,因此这行代码会报错。而对于 short s1 = 1; s1 += 1; 这行代码来说,它等价于 s1 = (short)(s1 + 1); 其中加法运算的结果会自动进行类型转换,然后再将结果强制转换为short类型,所有这行代码是合法的,不会报错。

7.float f=3.4;是否正确?

因为3.4是一个双精度浮点数,Java中的浮点数默认为双精度浮点数,而将一个双精度浮点数直接赋值给一个单精度浮点数变量是不安全的,因为单精度浮点数只有23位有效数字,而双精度浮点数有53位有效数字,会造成精度损失。要想正确的赋值,应该在数字后面加上一个f或F,将其显示地声明为单精度浮点数,即可以这样写:float f = 3.4f;

8.手动实现一下冒泡排序(快速排序)

冒泡排序:

public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 交换 arr[j] 和 arr[j+1] 的位置int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}

快速排序:

public static void quickSort(int[] arr, int left, int right) {if (left < right) {// 执行一次 partition 操作,将数组划分为两个子数组int pivotIndex = partition(arr, left, right);// 对左边子数组进行快速排序quickSort(arr, left, pivotIndex - 1);// 对右边子数组进行快速排序quickSort(arr, pivotIndex + 1, right);}
}
// partition 操作:将数组划分为左右两个子数组,并返回分界点的位置
private static int partition(int[] arr, int left, int right) {// 选取最后一个元素作为基准值int pivot = arr[right];// i 指向左子数组的末尾int i = left - 1;for (int j = left; j < right; j++) {if (arr[j] < pivot) {// 将 arr[j] 和左子数组的末尾交换位置i++;int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}// 将基准值放到分界点的位置上int temp = arr[i + 1];arr[i + 1] = arr[right];arr[right] = temp;// 返回分界点的位置return i + 1;
}

9.实现打印指定行数的空心菱形的功能

public static void printHollowDiamond(int n) {if (n % 2 == 0) {// 如果 n 是偶数,则将其加1,使得最中间的行有奇数个星号n++;}// 打印上半部分菱形for (int i = 1; i <= n / 2 + 1; i++) {for (int j = 1; j <= n / 2 + 1 - i; j++) {System.out.print(" ");}System.out.print("*");for (int k = 1; k < 2 * (i - 1); k++) {System.out.print(" ");}if (i != 1) {System.out.print("*");}System.out.println();}// 打印下半部分菱形for (int i = n / 2; i >= 1; i--) {for (int j = 1; j <= n / 2 + 1 - i; j++) {System.out.print(" ");}System.out.print("*");for (int k = 1; k < 2 * (i - 1); k++) {System.out.print(" ");}if (i != 1) {System.out.print("*");}System.out.println();}
}

10.题目:将一个正整数分解质因数。

例如:输入 90,打印出 90=2*3*3*5。

public static void factorize(int n) {System.out.print(n + "=");for (int i = 2; i <= n; i++) {while (n % i == 0) {System.out.print(i);n /= i;if (n != 1) {System.out.print("*");}}}
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...