考试时间下午15:40~17:40分 共计2个小时
周考的目的是检验我们本周学习效果的一种方式,除了讲师知道大家的学习情况外,也可以检验一下自身的学习情况,做到查漏补缺,切勿作弊!
一、简答题(40分)
1、简述OOM异常
很多同学都没有回答完全:OOM异常属于内存溢出异常:分为栈溢出、堆溢出、以及元空间(永久代)溢出。一般常见的是堆内存溢出。可以通过调整堆大小来解决。默认堆大小是最小内存是物理机器内存的1/64,最大内存是物理机器的1/4;
2、说说JVM中的堆
分为三个区:新生区,养老区,永久区。1.8以后没有了永久区,变成了元空间。新生区分为:伊甸区,0区,1区。每当达到70%时进行小GC,将伊甸区和from区中的有用数据复制到to区。经过15次小GC的数据存储到养老区。
3、简述JVM中的垃圾回收算法
1、复制算法:将数据复制到不删除的地方,优点是效率高,缺点是浪费内存且不适合频繁GC;2、标记-清除算法:扫描标记,在扫描删除。优点是节约内存,缺点是效率低,会产生碎片垃圾。3、标记-整理算法:扫描标记删除后压缩在一起。优点是不会产生垃圾,缺点是效率低。没有最好的算法,所以最好使用分代整理算法。
4、简述JVM中方法区都可以存储哪些内容
class 信息,静态方法,静态变量。1.6及以前存储常量池
二、编程题(60分)
1、Stream流编程题(20分)
有如下List集合:
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");1、空字符串数量2、字符串长度为 3 的数量3、获取2题目筛选后的列表4、合并字符串
参考代码:
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");Stream<String> stream = strings.stream();stream.filter(String::isEmpty);// str.equals("")stream.filter(s -> {if (s.length() == 3) {return true;}return false;}).collect(Collectors.toList());String mergedString = strings.stream().filter(string -> !string.isEmpty()).reduce((s1, s2) -> s1 + s2);System.out.println("合并字符串: " + mergedString);
List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19);1、求每个数字立方后的list集合2、列表中最大的数3、列表中最小的数4、所有数之和5、平均数
List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19);IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();System.out.println("列表中最大的数 : " + stats.getMax());System.out.println("列表中最小的数 : " + stats.getMin());System.out.println("所有数之和 : " + stats.getSum());System.out.println("平均数 : " + stats.getAverage());
2、在控制台模拟登陆注册功能。(40分)
欢迎来到农联天下商城,请选择操作:
1)登陆
2)注册
当用户进行注册时,输入账户和密码,我们判断该账户和密码是否重复,如果重复,提示用户重新注册。如果没有重复的,就保存,将账户和密码信息保存至磁盘上。
当用户登录是,用户输入账户和密码,查看注册列表中是否有该账户的信息,如果比对成功,提示登录成功,如果不存在,提示登录失败。
提示:以上操作可以使用IO流(对象序列化,List 或者Map)
以下为李欣阳同学的答案,符合题意,考虑到了多用户的情况:
package com.qfedu.day13.TestWeek;
import java.io.Serializable;
import java.util.Objects;
public class User implements Serializable {
private String name;
private String password;
public User() {
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(name, user.name) && Objects.equals(password, user.password);
}
@Override
public int hashCode() {
return Objects.hash(name, password);
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
package com.qfedu.day17;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/26 17:52
* @Version 1.0
*/
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
startMenu();
}
public static void zuche(File file) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名");
String name = scanner.next();
System.out.println("请输入密码");
String password = scanner.next();
User user = new User(name, password);
ArrayList<User> users = getUserList(file);
if (users.contains(user)) {
System.out.println("该账号已存在,请更换后注册");
} else {
users.add(user);
try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file))) {
// 说明是新文件,没有对象
objectOutputStream.writeObject(users);
objectOutputStream.flush();
System.out.println("注册成功");
} catch (Exception e) {
e.printStackTrace();
System.err.println("注册失败");
}
}
}
public static ArrayList<User> getUserList(File file) {
if (!file.exists()) {
return new ArrayList<User>();
} else {
try (ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file))) {
Object o = objectInputStream.readObject();
if (o != null && o instanceof ArrayList) {
ArrayList<User> users = (ArrayList<User>) o;
return users;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
public static void denglu(File file) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名");
String name = scanner.next();
System.out.println("请输入密码");
String password = scanner.next();
User user = new User(name, password);
ArrayList<User> users = getUserList(file);
if (users.contains(user)) {
System.out.println("登录成功!");
} else {
System.out.println("登录失败");
}
}
public static void startMenu() {
Scanner scanner = new Scanner(System.in);
System.out.println("1)登录");
System.out.println("2)注册");
System.out.println("3)退出");
File file = new File("C:\\Users\\User\\Desktop\\a.txt");
int n = scanner.nextInt();
switch (n) {
case 1:
denglu(file);
startMenu();
break;
case 2:
zuche(file);
startMenu();
break;
case 3:
break;
default:
System.out.println("请重新输入");
startMenu();
}
}
}
