【大学院-筆記試験練習:数据库(データベース問題訓練) と 软件工程(ソフトウェア)(9)】

大学院-筆記試験練習:数据库(データベース問題訓練) と 软件工程(ソフトウェア)(9)

1-前言

为了考上大学院,做了日语版本练习,边学边看边记录

2-数据库データベース

【問題1】B木(2次B木・挿入操作)

次に示す 2 次の B 木に対して,以下の操作 (1)〜(4) を この順で 行った後の B 木を,
図と同じ箱・●ポインタ形式で描け。

(1) キー値 18 のレコードを挿入する。

(2) (1) の結果に対して,キー値 7 のレコードを挿入する。

(3) (2) の結果に対して,キー値 26 のレコードを挿入する。

(4) (3) の結果に対して,キー値 12 のレコードを挿入する。

【注意】

  • 各ノードは 最大 2 個のキーを保持できるものとする。

  • 分割が発生する場合は,中間キーを親へ昇格させること。

  • 根ノードの分割が発生する可能性に注意せよ。

  • 内部ノード分割後の 子ポインタの本数ズレ

  • 最後の挿入で「一見空きがありそう」だが実は 葉が満杯


【問題2】関数従属と正規化(第3正規形)

次の関係 R が与えられている。

R( 学生番号, 学科番号, 学科名, GPA, 学科主任 )

ただし,下線部は主キーを表す。

(1)

この関係に成り立つ すべての関数従属を列挙せよ。

(2)

R が第 2 正規形にあるか否かを判定し,理由を述べよ。

(3)

R を 第 3 正規形 に分解せよ。

各関係について,主キーを明示すること。

  • 「主キーが単一=自動的に第3正規形」と誤解させる
  • **推移的関数従属(学科番号 → 学科名 → 学科主任)**の見落とし

【問題3】SQL(集約・副問合せ)

以下の学生表を用いて問いに答えよ。

学生(

学生番号, 学生名, 性別, GPA, 生年月日, 学科番号

)

(1)

学科番号ごとに,GPA の平均値が 3.0 以上 である学科の

学科番号と平均 GPA を求めよ。

(2)

1985 年 1 月 1 日以前に生まれた学生の GPA の最大値 よりも

GPA が高い学生の 学生番号と学生名を求めよ。

(3)

男性学生のみを対象とし,学科ごとの GPA の最小値を求めよ。

  • WHERE と HAVING の使い分け
  • 副問い合わせで ANY / ALL を使わないと誤答
  • 集約関数と非集約列の同時 SELECT

【問題4】トランザクションと排他制御

あるデータベースにおいて,次の 2 つのトランザクション T1,T2 が存在する。

  • T1:

    ① データ A を読み込む

    ② データ A を更新する

  • T2:

    ① データ A を読み込む

(1)

分離レベルが READ COMMITTED の場合,

T2 が ダーティリードを起こす可能性があるか。理由とともに述べよ。

(2)

**直列化可能性(Serializability)**の観点から,

この実行スケジュールが安全か否かを判定せよ。

(3)

この問題を防ぐために有効な 排他制御方式を 1 つ挙げ,簡潔に説明せよ。

3-数据库データベース-答案解析

問題1(B木の最終図)判定与修正

你给的最终结构是:

  • 根:[15,23]
  • 左内部:[9,12](叶:[3,5][7][10,13]
  • 右内部:[18,30](叶:[17][25,26]

这里有致命点

❌ 错误1:叶子[10,13]里仍保留了13

在 2次B木(每节点最多2个キー)中,插入 12 到叶 [10,13] 会变成 [10,12,13]必须分裂 ,中间キー 12 上升到父节点,叶子应变成:

  • 左叶 [10]
  • 右叶 [13]

也就是说:你不能同时出现"父节点有12"且叶子里还保持10|13不分裂

✅ 你根与右侧大结构"方向"是对的

[15,23]、右侧出现 [18,30]、叶出现 [25,26] 这些走向是合理的。


✅ 正确的最終図(箱・●ポインタ形式)

这是按操作 18 → 7 → 26 → 12 的最终结果(能直接抄):

复制代码
                      ┌───┬────┬───┬────┬───┐
                      │ ● │ 15 │ ● │ 23 │ ● │
                      └─┬─┴────┴─┬─┴────┴─┬─┘
                        │        │        │
           ┌────────────┘        │        └────────────┐
           │                     │                     │

   ┌───┬────┬───┬────┬───┐   ┌───┬────┬───┬────┬───┐   ┌───┬────┬───┬────┬───┐
   │ ● │  9 │ ● │ 12 │ ● │   │ ● │ 18 │ ● │ 30 │ ● │
   └─┬─┴────┴─┬─┴────┴─┘   └─┬─┴────┴─┬─┴────┴─┘
     │        │        │       │        │        │
  ┌──┴───┐  ┌─┴──┐  ┌──┴──┐  ┌──┴──┐  ┌──┴──┐  ┌──┴──┐
  │ 3| 5 │  │ 7  │  │ 10 │  │ 13 │  │ 17 │  │ 25|26│
  └──────┘  └────┘  └────┘  └────┘  └────┘  └──────┘
  • 左内部 [9,12] 的三个叶必须是:[3,5][7][10][13](注意12把[10,13]拆成两个叶)
  • 右内部 [18,30] 的叶:[17][25,26](以及第三个为空/未用)

你原图只要把 [10|13] 拆成 [10][13],并把指针补齐,就能拿满分。


問題2(正規化)判定与标准写法

你写的:

(1)

  • 学生番号と学科番号 → GPA
  • 学科番号 → 学科名
  • 学科番号 → 学科主任

基本方向对 ,但要注意:题目主キー是 学生番号(下划线只在学生番号下),所以常规更自然的写法是:

✅(1) 满分写法

  • 学生番号 → 学科番号, GPA
  • 学科番号 → 学科名, 学科主任

(你写成"学生番号と学科番号→GPA"也能给分,但不如上面简洁且贴合主キー)


你写的:

(2) "Rが第2正規形ではありません...主要の非従属関係..."

这一句会被判"理由不成立/表达不清"

因为主キー是单一属性(学生番号),部分関数従属不存在 ,所以它一定满足第2正規形。真正的问题在第3正規形:存在推移的依存(学生番号 → 学科番号 → 学科名/主任)。

✅(2) 正确判定(标准句)

  • R は主キーが単一属性(学生番号)であるため,部分関数従属が存在せず,第2正規形を満たす。
  • しかし,学生番号 → 学科番号,かつ 学科番号 → 学科名(学科主任)が成り立つので推移的従属があり,第3正規形は満たさない。

你写的(3)分解:

成績(学生番号,学科番号,GPA)

学科(学科番号,学科名,学科主任)

方向正确 ,但第一张表名不一定叫成績;更重要是主キー写清楚

✅(3) 满分写法

  • 学生( 学生番号, 学科番号, GPA )
  • 学科( 学科番号, 学科名, 学科主任 )

問題3(SQL)逐条修正

(1) 你写:

sql 复制代码
SELECT 学科番号, AVG(GPA) FROM 学生 GROUP 学科番号 HAVING AVG(GPA) >= 3.0;

❌ 两个语法错:GROUPBY,且 HAVING 前面要 GROUP BY 成功。

✅ 正解:

sql 复制代码
SELECT 学科番号, AVG(GPA)
FROM 学生
GROUP BY 学科番号
HAVING AVG(GPA) >= 3.0;

(2) 你写:

sql 复制代码
SELECT 学生番号,学生名
FROM 学生
WHERE GPA > (ALL SELECT GPA FROM 学生 WHERE 生年月日 >= '1981-1-1');

❌ 语法错:ALL 必须跟在比较符号后面,且子查询要括号。

❌ 题目我出的条件是 "1985-1-1以前",你用了 1981 且方向相反。

✅ 正解(按我题意:1985-1-1以前生的最大GPA):

sql 复制代码
SELECT 学生番号, 学生名
FROM 学生
WHERE GPA >
  (SELECT MAX(GPA)
   FROM 学生
   WHERE 生年月日 < '1985-01-01');

(3) 你写:

sql 复制代码
SELECT MIN(GPA) FROM 学生 WHERE 性別='男';

❌ 少了 "学科ごとに" → 必须分组并输出学科番号。

✅ 正解:

sql 复制代码
SELECT 学科番号, MIN(GPA)
FROM 学生
WHERE 性別 = '男'
GROUP BY 学科番号;

問題4(トランザクション)逐条修正

你写的(1)(2)逻辑方向是"可能发生dirty read",但这里有关键点:

  • READ COMMITTED 下:一般不允许 dirty read (至少读到的必须是已提交的数据)。
    所以你(1)会被判 ❌。

✅(1) 标准答案句

  • READ COMMITTED では,未コミットデータは読み取れないため,ダーティリードは原則として発生しない。

(2) "安全じゃない" 你说得很泛,需要用 直列化可能性 或者 ロストアップデート/不可重复读 这样的具体点。

如果 T1 在更新中,T2 读取已提交版本,可能出现 不可重复読読み取りの一貫性問題(具体看是否 T2 读两次)。你题干只写一次读,所以最稳回答:

✅(2) 能得分的写法

  • T1 が更新中に T2 が読み込む場合,スケジュールによっては直列化可能でない(整合性が保証されない)可能性がある。
  • 直列化可能性を保証するにはロック制御が必要である。

(3) 你想表达"锁住不让别人动",对,但要写成术语:

✅(3) 满分写法(举一种)

  • 二相ロック(2PL) :トランザクションはロック取得(増加相)の後にロック解放(減少相)を行い,その順序を守ることで直列化可能性を保証する。
    (或写:排他ロックXロック、共有ロックSロック)

4-软件工程(ソフトウェア)

【問1】

ウォーターフォールモデルにおいて、

開発途中で要求変更が発生した場合に

問題となりやすい理由を説明せよ。


【問2】

ソフトウェアテストにおける

スタブとドライバについて、

それぞれの役割の違いを説明せよ。


【問3】

分岐網羅と条件網羅は、

いずれもソフトウェアテストにおける

網羅基準である。

両者の違いについて説明せよ。


【問4】

オブジェクト指向プログラミングにおいて、

メッセージパッシングが

どのような役割を持つか説明せよ。


5-软件工程(ソフトウェア)答案解析

【問1】ウォーターフォールモデル ✅

🔍 评价

  • 用词学术
  • 逻辑完整
  • 「順序的」「手戻り」

🏆 判定

完全满分,不需要改

(你这题已经是"模范答案级")


【問2】スタブとドライバ ✅

🔍 评价

  • 概念 100% 正确
  • 句式是教科书级
  • 没有多余内容

🏆 判定

满分


【問3】分岐網羅と条件網羅 ⚠️

❌ 小问题

你写的是:

各条件式が真と偽ことを確認する

这里:

  • 缺少 「の」
  • 考试会被当作语法错误(轻微)

✅ 修正版(请直接换掉)

条件網羅とは、

分岐条件を構成する各条件式が

真と偽の両方を取ることを確認する

テスト手法である。

📌 加上「の両方」= 安全


【問4】メッセージパッシング ❌

❌ 问题点(考试会直接扣)

  • ❌ 「ポロだラミング」→ 拼写错误(致命)
  • ❌ 「メソッド呼び出すを通じて」→ 语法错误
  • 内容虽然方向对,但表达错误过多

✅ 本番安全答案(强烈建议直接背)

メッセージパッシングとは、

オブジェクト指向プログラミングにおいて、

オブジェクト同士が

メソッド呼び出しを通じて

処理を依頼する仕組みである。


🎯 最终「考试提交版」(你该写的)

如果我帮你整合成可直接交卷的版本,就是👇:


✅ 提交用答案(最终版)

ウォーターフォールモデルの欠点は、開発工程が順序的であり、開発途中で発生する要求変更や想定外の事象に柔軟に対応しにくい点である。一度設計したシステムを変更することが難しく、手戻りが大きくなるという問題がある。

スタブは、テスト対象モジュールが呼び出す下位モジュールの代替として用いられる。一方、ドライバは、上位モジュールの代わりにテスト対象モジュールを呼び出すためのものである。

分岐網羅とは、プログラム中のすべての分岐が真と偽の両方を一度以上通過することを確認するテスト手法である。条件網羅とは、分岐条件を構成する各条件式が真と偽の両方を取ることを確認するテスト手法である。

メッセージパッシングとは、オブジェクト指向プログラミングにおいて、オブジェクト同士がメソッド呼び出しを通じて処理を依頼する仕組みである。


6-总结

用日语的方式来直接训练,我认为是提示能力的好办法吧,希望从今天开始,每天坚持到考试那天,一直训练。

相关推荐
茶猫_20 小时前
C++学习记录-旧题新做-链表求和
数据结构·c++·学习·算法·leetcode·链表
龘龍龙20 小时前
Python基础学习(十一)
python·学习·mysql
Chris_121920 小时前
Halcon学习笔记-Day5
人工智能·笔记·python·学习·机器学习·halcon
悠哉悠哉愿意20 小时前
【嵌入式学习笔记】AD/DA
笔记·单片机·嵌入式硬件·学习
前端程序猿之路20 小时前
30天大模型学习之Day 2:Prompt 工程基础系统
大数据·人工智能·学习·算法·语言模型·prompt·ai编程
硬件yun20 小时前
汽车CAN为何选用0.25W电阻?
学习
testpassportcn20 小时前
Technology Solutions Professional NS0-005 認證介紹【NetApp 官方認證
网络·学习·改行学it
星火开发设计21 小时前
堆排序原理与C++实现详解
java·数据结构·c++·学习·算法·排序算法
好奇龙猫21 小时前
【人工智能学习-AI-MIT公开课第 15 讲学习:相近差错、受适应条件】
学习
崇山峻岭之间21 小时前
Matlab学习记录24
javascript·学习·matlab