プログラマー転職時に聞かれた技術的な質問

一覧

メモリリーク

メモリリーク(memory leak)とは - IT用語辞典 e-Words

プログラムを実行するためにメモリ領域を確保する必要がある。プログラム処理終了後に領域を解放する必要があるが、 解放するのを忘れて、使えるメモリ領域が少ない状態になるバグ。

デッドロック

複数のプロセスが互いに相手の占有している資源の解放を待ってしまい、処理が停止してしまうこと。データベースの排他制御の不備などが原因で起こる。

2つのプログラムA,Bがある。またa、bの2種類のデータがあるとする。 ABどちらもトランザクションをかけていて、一連の処理が終了するまで、データを確保する。 Aはまずaのデータを処理する。並行して、Bはbのデータを処理する。 続いて、Aはaの次にbのデータを処理しようとするが、Bが確保しているので処理できない。 また、Bもbの次にaのデータを処理しようとするが、Aが確保しているので処理できない。 こうして、AもBも実行中の状態になり処理が終わらず停止してしまう。

MySQLのデッドロック対処 おまけでギャップロック│システムガーディアン株式会社

  • N+1問題 N+1問題とは、データベースからデータを取り出す際に、大量のSQLが実行されて動作が重くなるという問題

N+1問題について - 理解するブログ

プロセスとスレッド

プログラムを実行する単位をプロセスという。1つのプロセスの中には1つ、もしくは複数のスレッドが含まれており、このスレッドが実際にCPUで実行される単位となる。

第3回 プロセスとスレッド:Windows OS入門(1/2 ページ) - @IT

スタックとキュー

データ構造の一つで、保管したデータをどのように取り出すのかを考える。 スタックは最後に追加したデータを最初に取り出すように扱う。例えばWebブラウザの訪問履歴 キューは最初に追加したデータを最初に取り出すように扱う。例えば航空券予約キャンセル待ち スタックとキューを極める! 〜 考え方と使い所を特集 〜 - Qiita

Webアプリのセキュリティ

Webアプリを構築する上でどのようなセキュリティに気を付けておくべきかを複数挙げる。

SQLインジェクション

formなどに悪意のあるSQLを入力して、データベースを改ざんやユーザー情報を取得する攻撃のこと 例えば

SELECT * FROM books WHERE auther = 'O'Reilly'

このSQL文は「'」で囲えてないので、「Reilly'」の代わりに悪意のあるSQLを挿入すると実行されてしまう。 なので、以下のようにプレースホルダを組み立てて、SQL文の変更を防ぐなどがある。

SELECT * FROM books WHERE auther = ? 
クロスサイト・リクエストフォージェリCSRF

攻撃用のサイトをユーザーがアクセスする。 そのサイトに別サイトへの攻撃用のスクリプトを用意していて、ユーザーのログイン状態を利用して、 別サイトで不正操作される

bit演算

bitとはコンピューターが扱う最小単位で、0、1のどちらかの値が入る情報のこと。 bit演算はそのbitを使用する計算方法。フラグ管理などで使われる考え方。

例えば 各桁の値をそれぞれ論理演算で比較して、2進数を10進数に表示する 45 OR 25 = 0b111101 = 61 となる。 45 = 0b101101 25 = 0b011001 0b111101 = 1(2**5) + 1(24) + 1*(23) + 1(2**2) + 1(2**0) = 32+16+8+4+1=61

論理演算 

AND演算
入力された2つの値のうち、「真」かつ「真」(「1・1」)であれば「1」となるが、それ以外の「1・0」「0・1」「0・0」の場合はすべて「0」となる。

OR演算
二つの入力のいずか一方あるいは両方が1のとき出力が1となり、いずれも0の場合に0となる。

もっと詳しい事は以下のサイト参考

ビット演算 (bit 演算) の使い方を総特集! 〜 マスクビットから bit DP まで 〜 - Qiita

オブジェクト指向の重要な概念3つ

継承、ポリモーフィズムカプセル化

継承

あるクラスが別のクラスの性質を受け継いでいること。 親クラスからサブクラスへとメソッドやプロパティなどが引き継がれる事。

継承(インヘリタンス)とは - IT用語辞典 e-Words

ポリモーフィズム

関数作って、その関数に引数、返り値、データの型などを用意して、これらに異なる値を入れても使い分けができる事。 関数の中に入るデータが別でも、違う処理を行える事。

ポリモーフィズム(多相性)とは - IT用語辞典 e-Words

カプセル化

できるだけ他のプログラムからアクセスされない仕組みのこと オブジェクト指向で設計をすると、クラスからインスタンスを生成して、データを処理するという仕組みを考える。 クラスのフィールドには【private】アクセス修飾子を付与して、他のプログラムからのクラスの設定をいじられないように守るように設計したほうが、わかりやすくバグが出にくくなる。

カプセル化とはなにか?超わかりやすく解説します! | Webpia

オブジェクト指向と10年戦ってわかったこと - Qiita