2022计算机Java二级考试四十五套题真题收藏版(一周裸考计划)
Posted zgrjddd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022计算机Java二级考试四十五套题真题收藏版(一周裸考计划)相关的知识,希望对你有一定的参考价值。
文章目录
前言
中国交流社区qq群:493184458(免费资料+大牛问题解决+案例集合)获取更多解决方案
当你看到这篇文章的时候,相信自己已经在考试的路上,或者即将踏入计算机二级考试的道路。
建议收藏,方便学习时候的查找。
再网上看了很多的java面试题,有很多都是零零碎碎的,有或者是需要付费加密🔐的,加个vip什么的,故而以下是博主整理的有关java面试题的以下内容,我想以一种幽默风趣😜的风格来给大家分享和探讨。另外附加有一些公司的面试真题(内部分享)下面我就开启🎧耳机模式。并且⭐是重要部分,要记易考噢。
2021计算机Java二级考试四十五套题(内涵原题) 请各位看官大人往下走…
一周冲刺表
当然了,这是对于时间比较紧迫的同学们,最好还是提前一个月来备考
,做好万全的准备,才能游刃有余噢。
一周考建议
1.有一定的java基础,能大致看懂代码含义
2.了解题目结构
[题目结构:45套题,每套题三个大题,分别是:基本操作,简单应用,总和应用]
3.java 选择题40道(一道一分),必须过一半的选择题,有java基础的一般都能过
4.先简单的阅览一遍,这时候有很多不懂的别急
5.一支笔,一张纸,把每道题的答案写一遍(记住手写+电脑记事本打字+理解性的记忆
),难以理解的多写几遍也无妨,俗话说好记性不如烂笔头(烂鼠标也行🤭)
6.在刷,重点抓那些单词在题目重复出现,易错和很记忆不是很模糊的部分
7.可以把题目复制到你熟悉的编辑器里面测试(eclipse,intellij idea),如果有时间你能手打出来就更好了
8.不会的地方重点标记
,你要写下让你能够开始思考的方法。感觉不够的话大题再来几次,拒绝完美主义~
小可爱你的题库一上线
45套操作题
@you 一周计划表给你安排好了,合理安排时间嗯(注释:点击就行)
java操作题1套
java操作题2套
java操作题3套
java操作题4套
java操作题5套
java操作题6套
java操作题7套
java操作题8套
java操作题9套
java操作题10套
@you 刷到这里,放松一下自己的“窗户”——👀,闭目一会儿,学习更高效噢!
java操作题11套
java操作题12套
java操作题13套
java操作题14套
java操作题15套
java操作题16套
java操作题17套
java操作题18套
java操作题19套
java操作题20套
@you 有同学叫你去玩你想去吗?🐎 给我刷,把不会的标记下来,让正能量影响他人
java操作题21套
java操作题22套
java操作题23套
java操作题24套
java操作题25套
java操作题26套
java操作题27套
java操作题28套
java操作题29套
java操作题30套
@you 该吃饭的点了吗? 叫上你的小伙伴去吧!
java操作题31套
java操作题32套
java操作题33套
java操作题34套
java操作题35套
java操作题36套
java操作题37套
java操作题38套
java操作题39套
java操作题40套
@you 以为刷完结尾就结束了吗?给我把易错疑难点在记一遍!别给我哭,坚持give five👆
java操作题41套
java操作题42套
java操作题43套
java操作题44套
java操作题45套
考试的意义
直接背题能通过二级 Java 考试吗?
本人大二…学过c语言…没学过java…现在想考二级java…我是先找本大学的清华大学出版社编写的java教材进行学习…还是直接找本真题开始做和背那?我这种水平三个月后考试可以考过嘛?
JAVA测试题
选择题(针对以下题目,请选择最符合题目要求的答案,针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分。)(每题2分)
JAVA所定义的版本中不包括:()
A、 JAVA2 EE
B、 JAVA2 Card
C、 JAVA2 ME
D、 JAVA2 HE
E、 JAVA2 SE
2、 下列说法正确的是()
A、 JAVA程序的main方法必须写在类里面
B、 JAVA程序中可以有多个main方法
C、 JAVA程序中类名必须与文件名一样
D、 JAVA程序的main方法中如果只有一条语句,可以不用(大括号)括起来
3、 Java中,在如下所示的Test类中,共有()个构造方法。
public class Test
private int x;
public Test()
x=35;
public void Test(double f)
This.x=(int)f;
public Test(String s)
A、 0
B、 1
C、 2
D、 3
4、 变量命名规范说法正确的是()
A、 变量由字母、下划线、数字、$符号随意组成;
B、 变量不能以数字作为开头;
C、 A和a在java中是同一个变量;
D、 不同类型的变量,可以起相同的名字;
5、 下列javaDoc注释正确的是()
A、 /我爱北京天安门/
B、 //我爱北京天安门*/
C、 /我爱北京天安门/*
D、 /我爱北京天安门*/
6、 为一个boolean类型变量赋值时,可以使用()方式
A、 boolean = 1;
B、 boolean a = (9 >= 10);
C、 boolean a=“真”;
D、 boolean a = = false;
7、 以下()不是合法的标识符
A、 STRING
B、 x3x;
C、 void
D、 de$f
8、 表达式(11+3*8)/4%3的值是()
A、 31
B、 0
C、 1
D、 2
9、 ()表达式不可以作为循环条件
A、 i++;
B、 i>5;
C、 bEqual = str.equals(“q”);
D、 count = = i;
10、 运算符优先级别排序正确的是()
A、 由高向低分别是:()、!、算术运算符、关系运算符、逻辑运算符、赋值运算符;
B、 由高向低分别是:()、关系运算符、算术运算符、赋值运算符、!、逻辑运算符;
C、 由高向低分别是:()、算术运算符、逻辑运算符、关系运算符、!、赋值运算符;
D、 由高向低分别是:()、!、关系运算符、赋值运算符、算术运算符、逻辑运算符;
11、 以下程序的运行结果是:()
public class Increment
public static void main(String args[])
int a;
a = 6;
System.out.print(a);
System.out.print(a++);
System.out.print(a);
A. 666
B. 667
C. 677
D. 676
12、 下列值不为true的表达式有()。
A、 “john” = = “john”
B、 “john”.equals(“john”)
C、 “john” = "john"
D、 “john”.equals(new String(“john”))
13、 下列输出结果是()
int a = 0 ;
while ( a < 5 )
switch(a)
case 0:
case 3 : a = a + 2;
case 1 :
case 2 : a = a + 3;
default : a = a + 5;
System.out.print ( a ) ;
A、 0
B、 5
C、 10
D、 其他
14、 下列代码输出结果是()
int i = 10;
while ( i > 0 )
i = i + 1;
if ( i = =10 )
break;
A. while循环执行10次
B. 死循环
C. 循环一次都不执行
D. 循环执行一次
15、 下面有关for循环的描述正确的是()
A、 for循环体语句中,可以包含多条语句,但要用大括号括起来
B、 for循环只能用于循环次数已经确定的情况
C、 在for循环中,不能使用break语句跳出循环
D、 for循环是先执行循环体语句,后进行条件判断
16、 下列()属于引用数据类型(选择两项)
A、 String
B、 char
C、 用户自定义的Student类类型
D、 int
17、 对象的特征在类中表示为变量,称为类的()。
A、 对象
B、 属性
C、 方法
D、 数据类型
18、 在java中下列关于自动类型转换说法正确的是()
A、 基本数据类型和String相加结果一定是字符串型
B、 char类型和int类型相加结果一定是字符
C、 double类型可以自动转换为int
D、 char + int + double +"" 结果一定是double;
19、 关于类的描叙正确的是()(选择两项)
A、 在类中定义的变量称为类的成员变量,在别的类中可以直接使用
B、 局部变量的作用范围仅仅在定义它的方法内,或者是在定义它的控制流块中
C、 使用别的类的方法仅仅需要引用方法的名字即可
D、 一个类的方法使用该类的另一个方法时可以直接引用方法名
20、 下列关于字符串的描叙中错误的是()(选择两项)
A、 字符串是对象
B、 String对象存储字符串的效率比StringBuffer高
C、 可以使用StringBuffer sb="这里是字符串"声明并初始化StringBuffer对象sb
D、 String类提供了许多用来操作字符串的方法:连接,提取,查询等
21、 以下()代码,能够对数组正确初始化(或者是默认初始化)。
A、 int[] a;
B、 a = 1, 2, 3, 4, 5;
C、 int[] a = new int[5]1, 2, 3, 4, 5;
D、 int[] a = new int[5];
22、 score是一个整数数组,有五个元素,已经正确初始化并赋值,仔细阅读下面代码,程序运行结果是()
temp = score[0];
for (int index = 1;index < 5;index++)
if (score[index] < temp)
temp = score[index];
A. 求最大数
B. 求最小数
C. 找到数组最后一个元素
D. 编译出错
23、 下面关于数组的说法中,错误的是()(选择两项)
A、 在类中声明一个整数数组作为成员变量,如果没有给它赋值,数值元素值为空
B、 数组可以在内存空间连续存储任意一组数据
C、 数组必须先声明,然后才能使用
D、 数组本身是一个对象
24、 在Java中下面代码是()条语句
int i;i=123;
int j=0,k=0;
System.out.println(i+";"+";"+j+""+k);
A、 3
B、 4
C、 5
D、 6
25、 在Java中,关于构造方法,下列说法错误的是( )
A、 构造方法的名称必须与类名相同
B、 构造方法可以带参数
C、 构造方法不可以重载
D、 构造方法绝对不能有返回值
26、 执行下面代码结果()
for(int i=0;😉
System.out.println("这是 "+i);
break;
A、 语法错误,缺少表达式2和表达式3
B、 死循环
C、 程序什么都不输出
D、 输出:这是0
27、 下面代码输出结果是()。
int i=0,s=0;
do
if (i%2 = = 0 )
i++;
continue;
i++;
s = s + i;
while (i<7);
System.out.println(s);
A、 16
B、 12
C、 28
D、 21
28、 下面()不是String类提供的合法的方法。
A、 equals(String)
B、 trim()
C、 append()
D、 indexOf()
29、 在JAVA中,以下( )类的对象以键-值的方式存储对象
A、 java.util.List
B、 java.util.ArrayList
C、 java.util.HashMap
D、 java.util.LinkedList
30、 给定如下所示的JAVA代码,则运行时,会产生()类型的异常
String s = null;
s.concat(“abc”);
A. ArithmeticException
B. NullPointerException
C. IOException
D. ClassNotFoundException
31、 给定java代码如下所示,在A处新增下列()方法,是对cal方法的重载(选择两项)
public class Test
public void cal(int x, int y, int z)
//A
A. public int cal(int x,int y,float z)return 0;
B. public int cal(int x,int y,int z)return 0;
C. public void cal(int x,int z)
D. public viod cal(int z,int y,int x)
32、 给定如下Java 程序代码片段,编译运行这段代码,结果是()。
java.util.HashMap map = new java.util.HashMap();
map.put(“name”,null);
map.put("name","Jack");
System.out.println(map.get("name"));
A. null
B. Jack
C. nullJack
D. 运行时出现异常
33、 给定以下JAVA代码,这段代码编译运行后输出的结果是()
public class Test
public static int aMethod(int i) throws Exception
try
return i/10;
catch(Exception ex)
throw new Exception (“exception in a aMothod”);
finally
System.out.print(“finally”);
public static void main(String [] args)
try
aMethod(0);
catch(Exception ex)
System.out.print(“exception in main”);
System.out.print(“finished”);
}
A、 finallyexception in mainfinished
B、 exception in mainfinally
C、 finallyfinished
D、 finallyexception in mainfinished
34、 在Java中,下面对于构造函数的描述错误的是()(选择两项)
A、 类不一定要显式定义构造函数
B、 构造函数的返回类型是void
C、 如果构造函数不带任何参数,那么构造函数的名称和类名可以不同
D、 一个类可以定义多个构造函数
35、 在Java语言中,下列关于类的继承的描述,正确的是()。
A、 一个类可以继承多个父类
B、 一个类可以具有多个子类
C、 子类可以使用父类的所有方法
D、 子类一定比父类有更多的成员方法
36、 下列选项中关于Java中super关键字的说法正确的是()。
A、 super关键字是在子类对象内部指代其父类对象的引用
B、 super关键字不仅可以指代子类的直接父类,还可以指代父类的父类
C、 子类通过super关键字只能调用父类的方法,而不能调用父类的属性
D、 子类通过super关键字只能调用父类的属性,而不能调用父类的方法
37、 在Java接口中,下列选项中有效的方法声明是()。(选择二项)
A、 public void aMethod();
B、 void aMethod();
C、 protected void aMethod();
D、 private void aMethod();
38、 在JAVA的异常处理模型中,能单独和finally语句一起使用的块是()。
A、 try
B、 catch
C、 throw
D、 throws
39、 分析如下Java代码,编译运行后将输出()。
public class Test
public Test()
static void print(ArrayList al)
al.add(2);
al=new ArrayList();
al.add(3);
al.add(4);
public static void main(String[]args)
Test test=new Test();
ArrayList al=new ArrayList();
al.add(1);
print(al);
System.out.println(al.get(1));
A、 1
B、 2
C、 3
D、 4
40、 在JAVA中,Object类是所有类的父亲,用户自定义类默认扩展自Object类,下列选项中的()方法不属于Object类的方法。
A、 equals(Object obj)
B、 getClass()
C、 toString()
D、 trim()
41、 下列选项中关于Java中封装的说法错误的是()。
A、 封装就是将属性私有化,提供共有的方法访问私有属性
B、 属性的访问方法包括setter方法和getter方法
C、 setter方法用于赋值,getter方法用于取值
D、 包含属性的类都必须封装属性,否则无法通过编译
42、 Java中,如果类C是类B的子类,类B是类A的子类,那么下面描述正确的是()
A、 C不仅继承了B中的成员,同样也继承了A中的成员
B、 C只继承了B中的成员
C、 C只继承了A中的成员
D、 C不能继承A或B中的成员
43、 分析选项中关于Java中this关键字的说法正确的是()
A、 this关键字是在对象内部指代自身的引用
B、 this关键字可以在类中的任何位置使用
C、 this关键字和类关联,而不是和特定的对象关联
D、 同一个类的不同对象共用一个this
44、 在JAVA中,LinkedList类和ArrayList类同属于集合框架类,下列()选项中的方法是LinkedList类有而ArrayList类没有的。
A、 add(Object o)
B、 add(int index,Object o)
C、 remove(Object o)
D、 removeLast()
45、 在JAVA中ArrayList类实现了可变大小的数组,便于遍历元素和随机访问元素,已知获得了ArrayList类的对象bookTypeList,则下列语句中能够实现判断列表中是否存在字符串“小说”的是()。
A、 bookTypeList.add(“小说”);
B、 bookTypeList.get(“小说”);
C、 bookTypeList.contains(“小说”);
D、 bookTypeList.remove(“小说”);
46、 给定如下Java代码,其中第(无答案)行代码有错误。
A、 4
B、 5
C、 6
D、 7
E、 8
F、 9
47、 以下关于布局的说法,错误的是()
A、 BorderLayout是边框布局,它是窗体的默认布局
B、 null是空布局,它是面板的默认布局
C、 FlowLayout是流布局,这种布局将其中的组件按照加入的先后顺序从左向右排列, 一行排满之后就转到下一行继续从左至右排列
D、 GridLayout是网格布局,它以矩形网格形式对容器的组件进行布置。容器被分成大小相等的矩形,一个矩形中放置一个组件
48、 以下用于创建容器对象的类是()(选择两项)
A、 Frame
B、 Checkbox
C、 Panel
D、 TextField
49、 以下关于抽象类和接口的说法错误的是()
A、 抽象类在Java语言中表示的是一种继承关系,一个类只能使用一次继承。但是一个类却可以实现多个接口。
B、 在抽象类中可以没有抽象方法
C、 实现抽象类和接口的类必须实现其中的所有方法,除非它也是抽象类。接口中的方法都不能被实现
D、 接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
E、 接口中的方法都必须加上public关键字。
50、 关于面向对象的说法正确的是()
A、 类可以让我们用程序模拟现实世界中的实体
B、 有多少个实体就要创建多少个类
C、 对象的行为和属性被封装在类中,外界通过调用类的方法来获得,但是要知道类的内部是如何实现
D、 现实世界中的某些实体不能用类来描述
传授经验
java私学网站:https://how2j.cn/
学习就要快乐
计算机二级分为选择题 ,和程序设计题。下面的就是程序设计题。只要选择题答对一半,操作题刷完下面的就没问题。
期望:如果自己只是考个二级证书,那操作题必须设为重中之重。先看一些java考试大纲
结语
祝君,红袖 顺利通过计算机二级考试,尽然完成自己的愿景。
注释:
红袖:古代女生称谓。
附加面试题
word版下载:https://download.csdn.net/download/qq_43674360/20042977
一、Java 基础
-
JDK 和 JRE 有什么区别?
JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。 -
== 和 equals 的区别是什么?
== 解读
对于基本类型和引用类型 == 的作用效果是不同的,如下所示:
基本类型:比较的是值是否相同;
引用类型:比较的是引用是否相同;
代码示例:
1 String x = "string";
2 String y = "string";
3 String z = new String("string");
4 System.out.println(x==y); // true
5 System.out.println(x==z); // false
6 System.out.println(x.equals(y)); // true
7 System.out.println(x.equals(z)); // true
代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。
equals 解读
equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。看下面的代码就明白了。
首先来看默认情况下 equals 比较一个有相同值的对象,代码如下:
1 class Cat
2 public Cat(String name)
3 this.name = name;
4
5
6 private String name;
7
8 public String getName()
9 return name;
10
11
12 public void setName(String name)
13 this.name = name;
14
15
16
17 Cat c1 = new Cat("王磊");
18 Cat c2 = new Cat("王磊");
19 System.out.println(c1.equals(c2)); // false
输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 equals 源码就知道了,源码如下:
1 public boolean equals(Object obj)
2 return (this == obj);
3
原来 equals 本质上就是 ==。
那问题来了,两个相同值的 String 对象,为什么返回的是 true?代码如下:
1 String s1 = new String("老王");
2 String s2 = new String("老王");
3 System.out.println(s1.equals(s2)); // true
同样的,当我们进入 String 的 equals 方法,找到了答案,代码如下:
1 public boolean equals(Object anObject)
2 if (this == anObject)
3 return true;
4
5 if (anObject instanceof String)
6 String anotherString = (String)anObject;
7 int n = value.length;
8 if (n == anotherString.value.length)
9 char v1[] = value;
10 char v2[] = anotherString.value;
11 int i = 0;
12 while (n-- != 0)
13 if (v1[i] != v2[i])
14 return false;
15 i++;
16
17 return true;
18
19
20 return false;
21
原来是 String 重写了 Object 的 equals 方法,把引用比较改成了值比较。
总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
- 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,两个对象的 hashCode()相同,equals()不一定 true。
代码示例:
1 String str1 = "通话";
2 String str2 = "重地";
3 System.out.println(String.format("str1:%d | str2:%d", str1.hashCode(),str2.hashCode()));
4 System.out.println(str1.equals(str2));
执行的结果:
str1:1179395 | str2:1179395
false
代码解读:很显然“通话”和“重地”的 hashCode() 相同,然而 equals() 则为 false,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。
-
final 在 java 中有什么作用?
final 修饰的类叫最终类,该类不能被继承。
final 修饰的方法不能被重写。
final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。 -
java 中的 Math.round(-1.5) 等于多少?
等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。 -
String 属于基础的数据类型吗?
String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 属于对象。 -
java 中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilder。
String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。
-
String str="i"与 String str=new String(“i”)一样吗?
不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分到堆内存中。 -
如何将字符串反转?
使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。
示例代码:
1 // StringBuffer reverse
2 StringBuffer stringBuffer = new StringBuffer();
3 stringBuffer.append("abcdefg");
4 System.out.println(stringBuffer.reverse()); // gfedcba
5 // StringBuilder reverse
6 StringBuilder stringBuilder = new StringBuilder();
7 stringBuilder.append("abcdefg");
8 System.out.println(stringBuilder.reverse()); // gfedcba
- String 类的常用方法都有那些?
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。 - 抽象类必须要有抽象方法吗?
不需要,抽象类不一定非要有抽象方法。
示例代码:
1 abstract class Cat
2 public static void sayHi()
3 System.out.println("hi~");
4
5
上面代码,抽象类并没有抽象方法但完全可以正常运行。
- 普通类和抽象类有哪些区别?
普通类不能包含抽象方法,抽象类可以包含抽象方法。
抽象类不能直接实例化,普通类可以直接实例化。 - 抽象类能使用 final 修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类,如下图所示,编辑器也会提示错误信息:
14. 接口和抽象类有什么区别?
实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
构造函数:抽象类可以有构造函数;接口不能有。
main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
15. java 中 IO 流分为几种?
按功能来分:输入流(input)、输出流(output)。
按类型来分:字节流和字符流。
字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。
- BIO、NIO、AIO 有什么区别?
BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
NIO:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。 - Files的常用方法都有哪些?
Files.exists():检测文件路径是否存在。
Files.createFile():创建文件。
Files.createDirectory():创建文件夹。
Files.delete():删除一个文件或目录。
Files.copy():复制文件。
Files.move():移动文件。
Files.size():查看文件个数。
Files.read():读取文件。
Files.write():写入文件。
二、容器 - java 容器都有哪些?
常用容器的图录:
-
Collection 和 Collections 有什么区别?
java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。 -
List、Set、Map 之间的区别是什么?
-
HashMap 和 Hashtable 有什么区别?
hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。
hashTable同步的,而HashMap是非同步的,效率上逼hashTable要高。
hashMap允许空键值,而hashTable不允许。 -
如何决定使用 HashMap 还是 TreeMap?
对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。 -
说一下 HashMap 的实现原理?
HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。
需要注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn)
-
说一下 HashSet 的实现原理?
HashSet底层由HashMap实现
HashSet的值存放于HashMap的key上
HashMap的value统一为PRESENT -
ArrayList 和 LinkedList 的区别是什么?
最明显的区别是 ArrrayList底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构是双向循环链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。 -
如何实现数组和 List 之间的转换?
List转换成为数组:调用ArrayList的toArray方法。
数组转换成为List:调用Arrays的asList方法。 -
ArrayList 和 Vector 的区别是什么?
Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList。
ArrayList比Vector快,它因为有同步,不会过载。
ArrayList更加通用,因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。 -
Array 和 ArrayList 有何区别?
Array可以容纳基本类型和对象,而ArrayList只能容纳对象。
Array是指定大小的,而ArrayList大小是固定的。
Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。 -
在 Queue 中 poll()和 remove()有什么区别?
poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回空,但是 remove() 失败的时候会抛出异常。 -
哪些集合类是线程安全的?
vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。
statck:堆栈类,先进后出。
hashtable:就比hashmap多了个线程安全。
enumeration:枚举,相当于迭代器。 -
迭代器 Iterator 是什么?
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。 -
Iterator 怎么使用?有什么特点?
Java中的Iterator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
-
Iterator 和 ListIterator 有什么区别?
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。
三、多线程 -
并行和并发有什么区别?
并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。
所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。 -
线程和进程的区别?
简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。 -
守护线程是什么?
守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程。 -
创建线程有哪几种方式?
①. 继承Thread类创建线程类
定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
创建Thread子类的实例
以上是关于2022计算机Java二级考试四十五套题真题收藏版(一周裸考计划)的主要内容,如果未能解决你的问题,请参考以下文章
历年计算机二级考试Java真题 JAVA笔试试题及答案(部分套题)
求:全国计算机等级考试历年真题必练(笔试+上机).二级Java(含光盘) 的全部序列号。
全国计算机等级考试二级Python(2021年9月)备考笔记 第十二天