2024.9.2东软面试记录

算法篇

(正常应该用Java做,Python代码比较短,直接写Python版本的)

题目一

input一个列表,内容是成绩,output一个列表,结果是对应的排名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# input: [90, 85, 90, 95]
# output: [2, 3, 2, 1]

data = [90, 85, 90, 95]

# 1. 排序并去重
sorted_unique_data = sorted(set(data), reverse=True)

# 2. 构造mapping
mapping = {value: rank + 1 for rank, value in enumerate(sorted_unique_data)}

# 3. 根据mapping构造结果
result = [mapping[score] for score in data]

print(result)
# [2, 3, 2, 1]

题目二

给定一个dto list,里面包含年级、成绩、姓名,求出每个年级的平均成绩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dto_list = [
{"grade": 10, "score": 85, "name": "Alice"},
{"grade": 10, "score": 90, "name": "Bob"},
{"grade": 11, "score": 75, "name": "Charlie"},
{"grade": 11, "score": 80, "name": "David"},
{"grade": 12, "score": 95, "name": "Eve"}
]

grade_scores: dict[int, dict[str, int]] = {}
for dto in dto_list:
grade = dto["grade"]
score = dto["score"]
if grade not in grade_scores:
grade_scores[grade] = {"total_score": 0, "count": 0}
grade_scores[grade]["total_score"] += score
grade_scores[grade]["count"] += 1

for grade in grade_scores:
avg_score = grade_scores[grade]["total_score"] / grade_scores[grade]["count"]
print(f"年级 {grade} 的平均成绩是: {avg_score:.2f}")

SQL 篇

算法篇题目二的内容构成一张表,取出各年级平均成绩

1
2
3
4
5
6
7
SELECT 
grade,
AVG(score) AS average_score
FROM
students
GROUP BY
grade;

很简单,但是我忘记 SQL 语法了。。。没答上来,确实太久没写了😭

Java篇

题目一 值引用的问题。

基本数据类型会被改变,引用类型只会改变地址,不会改变对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Main {
public static void main(String[] args) {
String s = "123";
int a = 1;
changeString(s);
changeInt(a);
System.out.println(s); // 123
System.out.println(a); // 1
}
public static void changeString(String tmp) {
tmp = "234";
}
public static void changeInt(int tmp) {
tmp = 3;
}
}

想要改变值只能 return 改变。

题目二 final 作用在类、方法、常量上分别有什么作用

答案

1
2
3
4
1. 修饰常量,值不可变 
2. 修饰对象,值可变,引用不变
3. 修饰方法,方法不可重写
4. 修饰类,无子类不可以被继承,更不可能被重写

之前确实没想过修饰对象的问题,记录一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Test {
void print() {
System.out.println("test");
}
}
public class Main {

public static void main(String[] args) {
final Test a = new Test();
a = new Test();
}
}
// Main.java:10: error: cannot assign a value to final variable a
// a = new Test();
// ^
// 1 error

测试篇

问题一

以 UT 为例,怎么保证测试分支全部覆盖?

1
利用 True/False 标注以及 Jacoco 等测试工具综合判断。

问题二

IT 的 Case 是自己写的吗?根据什么写的?

1
根据画面 シナリオ 编写。

问题三

A && B || C,这种条件下,如果 A 是 True、B 是 False、C 是 True,最终结果是什么?

1
2
True
先看 True && False 是 False,False || True 是True。

日语篇

提 QA 的时候,像客户反映问题。指定场景回答对应的日文。

问题一

A 条件和 B 条件的顺序应该反过来,并不是先判断 A 再判断 B。

1
2
答案来自 ChatGPT
A 条件と B 条件の順序は逆であるべきです。A を先に判断するのではなく、B を先に判断すべきです。

问题二

变量 X 只被使用过一次,应该放在方法内作为局部变量。

1
2
答案来自 ChatGPT
変数 X は一度しか使用されていないため、メソッド内のローカル変数として定義するべきです。