Java经典笔试题—day11
🔎选择题
(1)下面哪个标识符是合法的?
A.9HelloWorld
B._Hello World
C.Hello*World
D.Hello$World
(2)以下java程序代码,执行后的结果是()
java.util.*
HashMap<String, String> map = new HashMap<>();
map.put("name",null);
map.put("name","Jack");
System.out.println(map.size());
A.0
B.null
C.1
D.2
(3)Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述错误的是()
A.ArrayList和LinkedList均实现了List接口
B.ArrayList的访问速度比LinkedList快
C.添加和删除元素时,ArrayList的表现更佳
D.HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
(4)以下描述正确的是 ( )
A.CallableStatement是PreparedStatement的父接口
B.PreparedStatement是CallableStatement的父接口
C.CallableStatement是Statement的父接口
D.PreparedStatement是Statement的父接口
(5)下面有关重载函数的说法中正确的是()
A.重载函数必须具有不同的返回值类型
B.重载函数形参个数必须不同
C.重载函数必须有不同的形参列表
D.重载函数名可以不同
(6)下列关于容器集合类的说法正确的是?
A.LinkedList继承自List
B.AbstractSet继承自Set
C.HashSet继承自AbstractSet
D.WeakMap继承自HashMap
(7)ArrayList list = new ArrayList(20);中的list扩充几次 ( )
A.0
B.1
C.2
D.3
(8)以下程序的输出结果是?
public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public static void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
A.good and abc
B.good and gbc
C.test ok and abc
D.test ok and gbc
(9)下面的方法,当输入为2的时候返回值是多少?
public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2:
result = result + i * 2;
case 3:
result = result + i * 3;
}
return result;
}
A.0
B.2
C.4
D.10
(10)提供Java存取数据库能力的包是( )
A.java.sql
B.java.awt
C.java.lang
D.java.swing
🔎编程题
🥝最近公共祖先
题目描述
将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身
解题思路
以该图为例
- 因为根节点为 1, 所以子节点 = 父节点 / 2
- 当a, b 为同一节点时, 其最近公共祖先就是自己
- 当a, b 在同一侧时
- a = 2,b = 4, 最近公共祖先为2
- a = 4, b = 5, 最近公共祖先为2
- 当a, b 不在同一侧时
- a = 2, b = 3, 最近公共祖先为1
根据上面的信息, 我们需要判断a, b 节点中较大的节点
通过较大的节点 / 2, 得到该节点的父节点, 并判断父节点是否与a, b 中较小的节点相等
如果相等, 则该节点即为最近公共祖先
如果不等, 则继续下一轮循环
public static int getLCA(int a, int b) {
// write code here
while(a != b) {
if(a > b) {
a /= 2;
} else {
b /= 2;
}
}
return a;
}
📢题目链接
链接: link
🥝最大连续bit数
题目描述
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
数据范围:数据组数:1≤t≤5 ,1≤n≤500000
进阶:时间复杂度:O(logn) ,空间复杂度:O(1)
输入描述
输入一个int类型数字
输出描述
输出转成二进制之后连续1的个数
解题思路
枚举
枚举输入数字的连续1的个数, 记录为 count
当前位的数字不是1时, 比较 count 和 maxCount 中的较大值赋值给 maxCount
//最大连续bit数
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int maxCount = getMAX(num);
System.out.println(maxCount);
}
private static int getMAX(int num) {
int maxCount = 0,count = 0;
for (int i = 31; i >= 0; i--) {
if((num & (1 << i)) != 0) {
count++;
} else {
maxCount = Math.max(maxCount,count);
count = 0;
}
}
return Math.max(maxCount, count);
}
}
📢题目链接
链接: link