しょんぼり技術メモ

まいにちがしょんぼり

Web屋にはほど遠い

無精で短気で傲慢なプログラマ 技術者・SE・プログラマ面接時の技術的な質問事項より。

※本ページの記述はsyonbori_techの解答であり、正しいことを保証するものではありません。っていうかたぶん間違えてる。いろいろと。

  • UNIX
    • 使用 OS は何か (FreeBSD/Linux/Solaris/UNIX)
    • grep/tar/find を使ったことはあるか
      • cron 設定をしたことはあるか
        • →Yes
    • パーミッション (chmod 777, chmod rwx など) の意味
      • ディレクトリに対する r/w/x はそれぞれどういう意味を持つか (ファイルに対するr/w/x との違いは何か)
      • 1755・2755・4755 それぞれの意味は何か
        • →sticky, set-gid, set-uid
    • パッケージ管理には何を使っているか
    • configure からアプリケーションをコンパイルしたことがあるか
      • →Yes
    • 共有ライブラリとは何か
      • →よく使われる機能をまとめ、複数のプログラムから参照されるライブラリ
    • シェルの役割を示せ (sh や csh が以下の入力を得た後、何を行うか)
    • fork/exec する簡単なシェルを書けるか
      • 子プロセスが親プロセスから引き継ぐもの、引き継がないものを、それぞれ数点あげよ
  • 言語
    • どの言語が好きか。使用している言語のバージョンは(言語共通)
      • C#2.0
  • コンピュータ基本素養
    • エンコーディングとは。文字集合とは (ISO-2022-JPJIS X 0208 を説明できるか)
      • →文字一文字ごとに固有の数字を割り当てた集合。説明できない。
    • RFC を読んだことはあるか。
      • →Yes
    • テキスト領域とは何か。スタックとは何か。ヒープとは何か。
      • →テキスト領域:プログラムのバイナリにおいて、プログラムが用いるテキストデータが格納されている領域。スタック:複数のデータを格納するためのデータ構造で、最後に入れたデータが最初に取り出される特徴を持つ。ヒープ領域:プログラムにおいて、動的に確保されたメモリ領域。
    • ブラウザに URL を入力してから、ページが表示されるまで、ブラウザやOS が行うステップを示せ (5ステップ以上が望ましい)
    • BNF (拡張BNF) とは何か。簡単な例をあげよ
      • バッカス・ナウアー記法。構文を記述するためのメタ構文記法。
<mobile_tel_number> ::= <digit> <digit> <digit> "-" <digit> <digit> <digit> <digit> "-" <digit> <digit> <digit> <digit>
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
  • アルゴリズム
    • クイックソートの概要を述べよ
      • →比較領域を2つに分け、左側の全ての要素は右側の要素よりも小さいことを満たすように再帰的に並べ替えるソート手法
    • O(n) とはどういう意味か
      • →処理対象が2倍になったときに、処理時間が2倍となるようなアルゴリズム
    • スパム判定に利用されているベイズの定理とは何か
      • →確率論大嫌いです
    • 将棋やチェスなどの思考ルーチンで使用されるミニマックス法とは何か
      • →相手が最善手を取ると仮定し、自分の得点を最大化し、相手の得点を最小化する手を探索する手法
    • 遺伝的アルゴリズムとは何か
      • →突然変異と交叉によりパターンを順次生成するアルゴリズム。局所解に陥りにくい。
    • "2+4*(8-1)" などの計算式の答えを出すプログラムを書けるか (字句解析/構文解析)
      • →Yes
    • 有限の在庫と、それを買いたい有限のお客様がいる。お客様は、各在庫について欲しい順に順位を付けている。
      • →(略)
  • データベース
    • SQL経験
      • WHERE 句と HAVING 句と GROUP BY 句の意味と、評価順位は
      • CASE・UNION・EXISTS の意味は
      • →未だに本を引かないとさっぱりわからない
    • データベース利用経験 (Oracle/MySQL/PostgreSQL/その他)
    • ER図とは何か
      • →Entity-Relationship図。DBの要素間の関連を表す図
    • 正規化とは何か
      • →DBから重複したデータをなくす作業
    • ACID 属性とは何か
      • →覚えてない
    • バックアップ/リストアはできるか
      • →本を読みながら
    • レプリケーションはできるか
      • →やったことない
    • トランザクションログとは何か (ロールフォワードとは何か)
      • →実行した処理の内容が記述されたログ。DBのバックアップから障害発生直前の状態に戻す(ロールフォワード)ときにこのトランザクションログの内容を再生していく。
    • トリガ・ビュー・ファンクション・プロシージャ・NOT NULL 以外の制約・参照整合性制約(外部キー)とは何か
      • →よくわかってない
    • ORマッパとは何か。どのORマッパが好きか
  • バッチ系
    • CSV/固定長ファイルを取り込むことはできるか
    • メール配信ができるか
    • EDI連携 (受発注や在庫流通などのデータ連携) はできるか
      • →やったことない
    • バッチにて途中でエラー終了した場合、
      • DB を更新するバッチの場合、後始末として何をすべきか
      • 1000人にメールを送るバッチの場合、後始末として何をすべきか
        • →やりたいことが不明
      • CSV ファイルを出力するバッチの場合、後始末として何をすべきか
        • →エラーが起きたことを明記
  • セキュリティ
    • 外部のセキュリティ診断を受けたことがあるか
      • →No
    • SQL インジェクションとは何か。その対策は
      • →外部からパラメタとして取り込んだデータにSQLクエリが埋め込まれ、そのクエリを実行してしまうこと。対策はパラメタのサニタイズ
    • XSS 脆弱性とは何か。その対策は
      • →外部からパラメタとして取り込んだデータにHTMLコードが埋め込まれ、埋め込まれたコードを表示してしまうこと。対策はパラメタのサニタイズ
    • CSRF (クロスサイト・リクエスト・フォージュリ) とは何か。その対策は
      • →悪意のあるサイトに仕掛けられたコードにより攻撃対象のサイトに対するリクエストを送出してしまい、意図しない書き込みなどを実行させる攻撃。対策は投稿処理などにおいて送出元や利用者を確認できる情報を検証すること。
    • 暗号化知識
      • ブロック暗号とは何か
        • →対象データをあるサイズのブロックに分割し、それぞれのデータを暗号化していく方式
      • 公開鍵暗号とは何か
        • →暗号化・復号化において両者を異なる鍵で行う暗号方式
      • MD5・SHA とは何か。暗号化と一方向ハッシュの違いは何か
        • →MessageDigest5 / Secure Hash Algorithm どちらもハッシュ関数。暗号化は可逆、ハッシュは不可逆。
    • 日々のセキュリティ情報をどこから入手しているか
    • 高木浩光を知っているか
        • →シュッシュッ
  • HTML/Javascript/CSS
    • HTML
      • HTML を書けるか
      • XML を書けるか
        • →たぶん
      • XHTML を書けるか
      • DTD とは何か
        • →Document Type Definition。XML文書の構造定義
      • DOCTYPE 宣言とは何か
        • →そのドキュメントがどのフォーマットに従ったものかを宣言する
      • 「HTML 4.0 Transitional では IE は quirk モードになる」の意味がわかるか
      • 実体参照とは何か
        • UNICODE文字を直接指示する文字の記述法。&hearts;など。
      • META タグとは、「何の」META 情報か。
        • →そのページのメタ情報
    • Javascript を書けるか
      • AjaxJavascript を書けるか
        • →一応いろいろ見ながらなら
      • Ajax ライブラリを使ったことはあるか (jQuery/prototype.js/script.aculo.us)
      • DOM (Document Object Model) とは何か
        • →HTML文書の各要素を論理木構造におこしたもの
      • getElementById を使ったことはあるか
        • →Yes
      • appendChild でまっさらな HTML から任意の HTML を動的に生成できるか
        • →たぶんできるけどやりたくない
    • CSS
      • CSS を書けるか
        • →Yes
      • padding と margin の違いは何か
        • →paddingは要素本体を囲む枠からのマージンで、ここまでが要素の大きさになる。marginはpaddingの枠からのマージンで、ここには背景色などは適用されない
      • CSS Sprite とは何か
        • →しらない
    • その他
      • favicon とは何か
        • →そのサイトのアイコン。通常アドレスバーの横に表示される。
      • URL エンコードとは何か
        • →一部の表示可能な文字を除き、データを%xxの形で16進数表現したもの
      • BASE64 とは何か
  • Web アプリケーション
    • CSVファイルをアップロードし、DB に格納するアプリケーションを作成できるか
      • →本を見ながらなら
      • CSVファイルをダウンロードするアプリケーションを作成できるか
        • →本を見ながらなら
      • 動的画像生成経験
      • PDF生成経験
        • →なし
    • セッション管理
      • PHPになげっぱなし
    • デザイナとの協業経験
      • →なし
    • SEO を意識して Web サイトを作成したことがあるか
      • →なし
    • リスティング広告組み込み経験
      • →なにそれ
    • Google Sitemap
      • →なにそれ
    • 全文検索エンジン利用経験 (Namazu/Hyper Estraier/Senna/Lucene など)
      • Namazu / HE
      • n-gram形態素解析の違いは何か
        • n-gramはn近傍の単語を利用して検索するが、後者は文法に基づいて解析するため後者の方が自然な結果が得られる
    • 負荷計測はできるか
      • →したことない
    • クロスブラウザな Web を作成したことがあるか (IE 以外のブラウザ)
      • →むしろIE死ね。IE/Fx/Opera/NNで確認。
  • モバイル
    • モバイルサイト構築経験
      • →なし
  • ネットワーク管理
    • Windows または UNIX マシンを、LAN に接続できるか
      • →Yes
    • DHCP サーバがないとして、PC に何を設定すれば LAN 経由でインターネットに出られるか
    • ルータ設定はできるか
      • →Yes
    • DNSサーバ管理はできるか
      • →一応
    • DNS サーバの役割は
      • DNS の正引きとは何か、逆引きとは何か
      • A レコードとは何か、CNAME レコードとは何か、AAAA レコードとは何か
        • →Aレコード:正引き用エントリ(IPv4)、CNAME:Aレコードへの別名、AAAA:IPv6正引き用エントリ
      • SPF レコードとは何か
    • FTP における active/passive とは何か
      • →クライアントがデータ転送セッションを待ち受けるのがActive、サーバが待ち受けるのがPassive
    • telnet を起動し、HTTP/SMTP/POP3/FTP サーバとしゃべることができるか
    • メールサーバ管理経験(sendmail/Postfix/qmail/その他)
      • →無理
    • traceroute の動作原理は
      • TTLを1,2,3,…にセットしたパケットを送出する
      • UNIX 系の traceroute と、Windows の tracert コマンドの大きな違いは何か(ヒント: ICMP)
        • →知らん
    • NAT (NAPT) とは何か
      • →1つのグローバルIPアドレスで複数のコンピュータが通信できるようにする仕組み。Network Address (Port) Translation
  • プロジェクト管理/構成管理
    • バージョン管理ツールの使用経験 (CVS/Subversion/Git など)
    • 過去のプロジェクトでは、システムは何環境あったか (開発/テスト/本番など)
    • 複数の環境で整合性を取るため、どのような工夫をしたか
      • →大規模なものの経験なし
    • Wiki の利用経験
  • インフラ管理
    • Webサーバ(Apache)
      • どのようなモジュールを使ったことがあるか
        • →mod_ssl mod_spnego
      • バーチャルホストを設定できるか
        • →Yes
      • SSL
      • SSL 対応ページを準備するまでの手順を示せ (ヒント: 秘密鍵CSR)
        • 秘密鍵を生成/CSR作成/CSR提出/証明書受領/証明書インストール/SSL設定の記述
      • 負荷分散の経験
        • →なし
    • 静的 Web ページを高速化する方法を示せ
      • →知らん
    • Web サイトが重いため、定量的な分析を行ってボトルネックを調査したい。具体的にどのようにするか。
      • →知らん

ああ長かった。しかも読みづらいなこれ。