プログラマーの力量を見極める質問に答えてみた

matome.naver.jp

プログラミング一般のところだけ自分なりに答えをまとめてみる

「等値」と「等価」の違いを説明してください

言葉の意味だと
等値は値の等しいこと
英語ではequality

等価は価値や価格が等しいこと
英語ではequivalence

数学的な意味だと
等値は等式のことになるので A = B
等価はA ⇔ B,すなわち,AならばBとBならばAが同時に成り立つことをいう

ここまで説明すれば,プログラム的な意味は

A == Bが等値
!(A < B) && !(B < A)が等価
等価は++EE += 1が同じとか,!E0 == Eが同じであることを表すときにも使う

正確に等しいときは等値
正確には等しくないが等しいとみなすときは等価

「値渡し」と「参照渡し」の違いはなんですか?オブジェクト指向システムや手続き型システムにおいて,これらにはどのような違いが存在するのかを説明してください

変数の中身を変えるか変えないかの違い
値渡しは変数の中身を変えない
参照渡しは変数の中身を変える

C言語で書くと

#include <stdio.h>

int call_by_value(int a) {
    ++a;
}

int call_by_reference(int* a) {
    ++*a;
}

int main(void) {
    int a = 1;
    
    call_by_value(a);
    printf("a = %d¥n", a);
    call_by_reference(&a);
    printf("a = %d¥n", a);

    return 0;
}
a = 1
a = 2

値渡しは変数の中身を渡す
参照渡しは変数が格納されているメモリのアドレスを渡す

オブジェクト指向システムや手続き型システムにおいて,これらにはどのような違いが存在するのかを説明してください

これはざっくりと言うと
 オブジェクト指向 → 値渡し
 手続き型 → 値渡し,参照渡しどっちもできる
という感じかと

ポリモーフィズム」とは何か説明してください

日本語で多態性とか多様性とか
オブジェクト指向における「継承」の概念をなす機能の一つ
例えば,与えられた引数を文字列にして返す処理を考えると
手続き型の場合だと引数の型によって処理をそれぞれ別々に書かなければいけないし,使う場合も引数の型を意識しないといけない
オブジェクト指向だと汎用的な処理を書き,型ごとに処理を書くことで,使う場合に引数の型を意識しなくて良くなる

「悲観的ロック」と「楽観的ロック」を比較し,違いを明確に述べてください

楽観的ロックは
Aさんが更新画面を開く
Aさんが更新中にBさんが更新画面を開く

Bさんの更新作業が完了する
Aさんの更新作業が完了する,そのときBさんが更新したことを知らせるメッセージを表示する

悲観的ロックはAさんが更新画面を開くとその間誰も更新作業ができない

楽観的ロックはredmineでよく見る(というよりブラウザが絡むとトランザクションを維持するのが難しいので主にこちらが使われる)