模拟笔试做题总结(第一周)
Day-1
选择题
1.下列选项中属于面向对象编程主要特征的是(C)
A 继承
B 自顶向下
C 模块化
D 逐步求精正确答案:A
四大特征:抽象,封装,继承,多态2.在基本 JAVA 类型中,如果不明确指定,整数型的默认是 __ 类型,浮点数的默认是 __ 类型(A)
A int float
B int double
C long float
D long double正确答案:B
boolean的默认值为false
3.Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 (B).
A 11 ,-11
B 11 ,-12
C 12 ,-11
D 12 ,-12正确答案:C
Math.round()
为“四舍五入”方法,对传入的数字+0.5后向下取整,传入的参数为float
返回int
,传入的参数为double
返回long
编程题
【组队竞赛】牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现
队伍的水平值等于该队伍队员中第二高水平值。
例如:
一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2
为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。
如样例所示:
如果牛牛把6个队员划分到两个队伍
team1:{1,2,5}, team2:{5,5,8}, 这时候水平值总和为7.
而如果方案为:
team1:{2,5,8}, team2:{1,5,5}, 这时候水平值总和为10.
没有比总和为10更大的方案,所以输出10
输入 :
2
5 2 8 5 1 5
输出:
10
1 | import java.util.Arrays; |
Day-2
选择题
1.A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:
A a0=new A();
A a1=new B();
A a2=new C();
问以下哪个说法是正确的(B)
A 只有第一行能通过编译
B 第1、2行能通过编译,但第3行编译出错
C 第1、2、3行能通过编译,但第2、3行运行时出错
D 第1行,第2行和第3行的声明都是正确的正确答案:D
多态有三种表现形式:继承重写、重载、向上转型,A a1 = new B();
属于向上转型,即父类的引用指向子类的对象,
而A a2=new C();
体现了继承具有传递性,也可以称为间接继承。比如所有的类都见间接继承自Object
类。4.在使用
super
和this
关键字时,以下描述正确的是(A)
A 在子类构造方法中使用super()
显示调用父类的构造方法,super()
必须写在子类构造方法的第一行,否则编译不通过
Bsuper()
和this()
不一定要放在构造方法内第一行
Cthis()
和super()
可以同时出现在一个构造函数中
Dthis()
和super()
可以在static
环境中使用,包括static
方法和static
语句块B:
super()
和this()
均需放在构造方法内第一行。
C:this
必然会调用其他的构造函数,而其他构造函数必然有super
语句存在,这样会使得同一个构造函数中有相同的语句,编译不通过。
D:this()
和super()
都指的是对象,不能在static
环境中使用。5.如下代码的结果是什么?(C)
A Base
B BaseBase
C 编译失败
D 代码运行但没有输出
E 运行时抛出异常1
2
3
4
5
6
7
8
9
10
11
12
13class Base {
Base() {
System.out.print("Base");
}
}
public class Alpha extends Base {
public static void main(String[] args) {
new Alpha();
//调用父类无参的构造方法
new Base();
}
}正确答案:B
创建子类对象时,会先执行父类中的构造方法,若子类的直接父类美没有无参构造器,必须在自己构造器的第一行显式指明是调用父类”super()
“还是自己”this()
“的哪一个构造器。
Day-3选择题第2题考点。6.如下代码的输出结果是什么?(D)
A 0
B 1
C 2
D 编译失败1
2
3
4
5
6
7
8
9
10
11
12
13public class Test {
public int aMethod(){
static int i = 0;
i++;
return i;
}
public static void main(String args[]){
Test test = new Test();
test.aMethod();
int j = test.aMethod();
System.out.println(j);
}
}静态变量只能在类主体中定义,不能在方法中定义。
static
直属于类,在静态方法中可以使用静态变量,但不能定义。
编程题
【排序子序列】牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.
如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2
输入:
6
1 2 3 2 2 1
输出:
2
1 | import java.util.*; |
Day-3
选择题
1.以下代码运行输出的是(C)
A 输出:Person
B 没有输出
C 编译出错
D 运行出错1
2
3
4
5
6
7
8
9
10
11
12
13public class Person {
private String name = "Person";
int age = 0;
}
public class Child extends Person {
public String grade;
public static void main(String[] args) {
Person p = new Child();
System.out.println(p.name);
}
}1.一个JAVA文件中不能有两个
pubilc
类。
2.private
修饰的变量只能在内内部才能访问,其子类也不能访问。
3.若改为Person p = new Person();
也不无法访问name
,因为此时仍处于子类的作用域。2.以下程序的输出结果为(D)
A BD
B DB
C C
D 编译错误1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16class Base {
public Base(String s) {
System.out.print("B");
}
}
public class Derived extends Base {
public Derived(String s) {
// super(s);
System.out.print("D");
}
public static void main(String[] args) {
new Derived("C");
}
}创建子类对象会默认先调用父类的空参构造方法,此时父类已经创建有参构造器,则不会自动创建空参构造器,
super()
就会编译出错,正确做法如代码中注释。10.在创建派生类对象,构造函数的执行顺序(C)
A 基类构造函数,派生类对象成员构造函数,派生类本身的构造函数
B 派生类本身的构造函数,基类构造函数,对象成员构造函数
C 基类构造函数,派生类本身的构造函数,派生类对象成员构造函数
D 对象成员构造函数,基类构造函数,派生类本身的构造函数正确答案:A
1.初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化。
2.初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化。
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法。
4.初始化子类的普通成员变量和代码块,在执行子类的构造方法。
编程题
1.字符串中找出连续最长的数字串
输入:
abcd12345ed125ss123456789
输出:
1234567891
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22/*
使用split方法将字符串按字符分割开即可,"[a-z]"为正则表达式.
*/
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String[] sp = s.split("[a-z]");
String res = "";
for (String str : sp) {
if (str.contains(" ")) {
continue;
}
if (res.length() < str.length()) {
res = str;
}
}
System.out.println(res);
}
}-
String.split(String regex, int limit)
用法:limit
不显式指明时默认为0。limit = 0
:尽可能的多匹配, 且长度无限制, 但结尾空字符串将被丢弃。limit < 0
:尽可能的多匹配, 且长度无限制。limit > 0
:最多匹配limit-1
次,得到一个长度为limit
的数组.String[limit-1]
为余下未匹配的字符串。2.【数组中出现次数超过一半的数字】
给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
要求:空间复杂度:O(1),时间复杂度O(N)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21/*
摩尔投票法:不同的两者一旦相遇就彼此抵消,最后剩下来的值都是相同的
*/
public class Solution {
public int majorityElement(int[] nums) {
int res = 0, count = 0;
for (int i = 0; i < nums.length; i++) {
if (count == 0) {
res = nums[i];
count++;
} else {
if (res == nums[i]) {
count++;
} else {
count--;
}
}
}
return res;
}
}
Day-4
选择题
- 4.java语言的下面几种数组复制方法中,哪个效率最高?(C)
Afor
循环逐一复制
BSystem.arraycopy
CArray.copyOf
D 使用clone
方法正确答案:B
System.arraycopy
是一个静态本地方法,由虚拟机实现,效率最高。
浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存,换言之,修改修对象会影响到原对象。
深拷贝:会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象,是“值”而不是“引用”。 - 9.下面哪些类实现或继承了
Collection
接口?(BCD)
AHashMap
BArrayList
CVector
DIterator
正确答案:BC
HashMap
继承自Map
接口,而Iterator
接口是Collection
的父类。
编程题
进制转换:给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数。
输入:
7 2
输出:
111
1 | import java.util.Scanner; |
Day-5
选择题
2.以下代码结果是什么?
1
2
3
4
5
6
7
8
9
10
11
12
13public class foo {
public static void main(String sgf[]) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a, b);
System.out.println(a + "." + b);
}
static void operate(StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
}
}值传递:在调用函数时将实际参数复制一份传递到方法中,在方法中修改参数不会影响到实际参数。
引用传递:将实际参数的地址值传入方法,此题中y = x
这一步是让y指向了x,而实际的B还是指向它自己。3.在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为(A)
Athis.A(x)
Bthis(x)
Csuper(x)
DA(x)
正确答案:B
A.这是调用普通方法的写法
C.这是显示调用父类构造方法
D.调用静态方法7.下列哪个说法是正确的(A)
AConcurrentHashMap
使用synchronized
关键字保证线程安全
BHashMap
实现了Collction
接口
CArray.asList
方法返回java.util.ArrayList
对象
DSimpleDateFormat
是线程不安全的正确答案:D
A.JDK1.7
中采用segment的分段锁机制实现线程安全,而JDK1.8
采用CAS+Synchronized保证线程安全。
B.HashMap
实现了Map
接口。
C.Arrays.asList()
方法返回的是Arrays.ArrayList
类型。
编程题
【连续最大和】一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3.
输入:
3 -1 2 1
输出:
3
1 | import java.util.*; |
Day-6
选择题
1.下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:(D)
byte[] src,dst;
A.dst=String.fromBytes(src,"GBK").getBytes("UTF-8")
B.dst=new String(src,"GBK").getBytes("UTF-8")
C.dst=new String("GBK",src).getBytes()
D.dst=String.encode(String.decode(src,"GBK")),"UTF-8" )
正确答案:B
思路为解码->还原->编码,然而String
并没有fromBytes
和encode
这两个静态方法。3.下列哪个对访问修饰符作用范围由大到小排列是正确的?(B)
Aprivate
>default
>protected
>public
Bpublic
>default
>protected
>private
Cprivate
>protected
>default
>public
Dpublic
>protected
>default
>private
正确答案:D
public
:当前类,子类,包,其他包protected
:当前类,子类,包default
:当前类,包内private
:当前类5.阅读下列程序,选择哪一个是正确的输出结果(C)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23class HelloA {
public HelloA() {
System.out.println("I’m A class ");
}
static {
System.out.println("static A");
}
}
public class HelloB extends HelloA {
public HelloB() {
System.out.println("I’m B class");
}
static {
System.out.println("static B");
}
public static void main(String[] args) {
new HelloB();
}
}A
static A I’m A class static B I’m B class
BI’m A class I’m B class static A static B
Cstatic A static B I’m A class I’m B class
DI’m A class static A I’m B class static B
对应Day-3选择题第二题
8.在Java中下面Class的声明哪些是错误的?(BCD)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18A:
public abstract final class Test {
abstract void method();
}
B:
public abstract class Test {
abstract final void method();
}
C:
public abstract class Test {
abstract void method() {
}
}
D:
public class Test {
final void method() {
}
}正确答案:ABC
A.final
修饰的类为终态类,不能被继承,而抽象类必须被继承才有意义。
B.final
修饰的方法不能被重写,而继承抽象类必须重写其抽象方法。
C.抽象方法仅声明,并不做实现的方法。10.下面哪些赋值语句是正确的(ABDE)
Along test=012
Bfloat f=-412
Cint other =(int)true
Ddouble d=0x12345678
Ebyte b=128
正确答案:ABD
byte
的取值范围为-128~127,因此会抛出异常:java: 不兼容的类型: 从int转换到byte可能会有损失
。
也可写为byte b = (byte) 128;
此时b = -128。
编程题
【把字符串转换成整数】
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0.
注意:
①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0
②字符串中可能出现 +/- 且仅可能出现在字符串首位。
输入:
+2147483647
1a33
输出:
2147483647
0
1 | /* |