プログラマでありたい

おっさんになっても、プログラマでありつづけたい

面接の質問に答えてみた

技術者・SE・プログラマ面接時の技術的な質問事項
酔った勢いで答えてみた。googleでカンニングは無しの自己ルール。こんな私でも雇ってくれるところある??w

・UNIX
 ・使用 OS は何か (FreeBSD/Linux/Solaris/UNIX)
   Linux 85% FreeBSD 10% Solaris 5%。貧乏なのでUnixはなし
 ・grep/tar/find の使用経験★
   grep,tar,find,xargs,sed,awkは使うよ。古いって言われるけど
  ・cron 設定経験★
    crontab -e? もしくは/etc/crontabを書けばよいの?
 ・パーミッション (chmod 777, chmod rwx など) の意味★
   実行権限
  ・ディレクトリに対する r/w/x はそれぞれどういう意味を持つか (ファイルに対する
   r/w/x との違いは何か)★
   知らん。少なくともフォルダにxが無いと使えないわなぁ
  ・1755・2755・4755 それぞれの意味は何か★
    知らん
 ・パッケージ管理には何を使っているか
   yum or emerge。時々、rpm
 ・configure からアプリケーションをコンパイルしたことがあるか
   コンパイルしたら負けだと思っている
 ・共有ライブラリとは何か
   lib
 ・シェルの役割を示せ (sh や csh が以下の入力を得た後、何を行うか)★
  ・第一段階: コマンドラインにて ls とタイプしたとき
    ファイル一覧
  ・第二段階: コマンドラインにて ls | sort とタイプしたとき
    abc順で、ファイル一覧
 ・fork/exec する簡単なシェルを書けるか
   書いたことないです
  ・子プロセスが親プロセスから引き継ぐもの、引き継がないものを、それぞれ数点あげよ★
    引き継ぐ apache
    引き継がない 

・言語
 ・どの言語が好きか。使用している言語のバージョンは(言語共通)★
   VBScriptが好きだけど、ここ5年くらい使ったことなし
 ・Perl
  ・どのモジュールが好きか
    Data::Dumper
  ・print と syswrite の違いは何か★
    知らん
  ・Web フレームワークには何を使っているか
    PerlでWebアプリは書かないようにしてる
 ・Java
  ・Web フレームワークには何を使っているか
    最近は、Seasar
  ・「クラス変数/インスタンス変数/ローカル変数のうち、スレッド
    セーフなのはローカル変数だけである」とはどういう意味か
    共有されないからねぇ
 ・PHP
  ・Web フレームワークには何を使っているか
    Smarty以降、PHPを使っていない。今使うなぁCakeかな
  ・PEAR で利用しているパッケージは何か
    DBモジュールかな
  ・php.ini で定義できる以下のディレクティブの違いを述べよ。★
   ・default_charset
   ・mbstring.language
   ・mbstring.internal_encoding
   ・mbstring.http_input
   ・mbstring.http_output 
   ・mbstring.encoding_translation
   ・mbstring.detect_order
    → 当ページ管理人は全く覚えてません。
    →→もう全く覚えていない
 ・Ruby
  ・Ruby に対する熱い思いのたけを述べよ
    最近は、さすがにバブルなんでないの?使い易くて良いと思うけど
    CPAN並みにモジュールの数と多様性が出てくるおとに期待
 ・C
  ・リンクリストを書けるか
  ・可変長引数な関数を記述したことがあるか
  ・malloc(3)/realloc(3) にて、動的メモリ管理ができるか
  ・printf(3) と write(2) の違いは何か
  ・Makefile を書けるか
  ・コンパイル・アセンブル・リンクとは何か
  ・二乗を返すマクロ #define MY_POW(x) *1 の問題点は何か★
   →小学2年生レベルです。。。

・コンピュータ基本素養
 ・エンコーディングとは。文字集合とは (ISO-2022-JP と JIS X 0208 を
  説明できるか)
   日本のプログラマ泣かせ。英語圏のプログラマにとっては、UTF-8を使えば国際化対応
   ISO-2022-JPは、主にメールで使われる。別名JIS。JIS X 0208は知らない。JISの拡張なんかな
 ・RFC を読んだことはあるか。
   読んだ事あるけど、結局実装しだいという所で涙した。
 ・テキスト領域とは何か。スタックとは何か。ヒープとは何か。
   LIFO。二分木?メモリの方?
 ・ブラウザに URL を入力してから、ページが表示されるまでのステップを示せ
   名前解決→リクエスト→レスポンス→レスポンスのHTMLを元にリクエスト→レスポンス→ユーザ的には結果が返ってくる
 ・BNF (拡張BNF) とは何か。簡単な例をあげよ★
   ジェイコム男?

・アルゴリズム★
 ・クィックソートの概要を述べよ
   情報処理試験の問題。速そうなソート。でも、そうでもないこともある
 ・O(n) とはどういう意味か
   王と長嶋
 ・スパム判定に利用されているベイズの定理とは何か
   事後確率。統計学を拓いた異才たち―経験則から科学へ進展した一世紀によれば、よく解っていないみたい。でも、便利だから使う。教師データを使って類似性を求める。別にスパムみたいにYesかNoかではなく、カテゴリに分類出来る。
 ・将棋やチェスなどの思考ルーチンで使用されるミニマックス法とは何か
   知らん。放射線状に探索していくのかな?
 ・遺伝的アルゴリズムとは何か
   アルゴリズムを掛け合わせて、最適な物を探す手法。でも、遺伝的プログラミングとの違いは語れない。
 ・"2+4*(8-1)" などの計算式の答えを出すプログラムを書けるか (字句解析/構文解析)★
   たぶん
 ・有限の在庫と、それを買いたいお客様がいます。ただし 1人のお客様には必ず
  2個の在庫を引き当てる必要があります (1個は NG。3個以上も NG。0個はアリ)
  お客様は各在庫について欲しい順に順位を付けています。在庫引き当て数と
  顧客満足を最大にする引き当てを求めるための方法を示せ。顧客満足の定義など
  不明点はおのおの考えること。
   → 「人材募集」に書いた新規サービスにおいて、こういうことをやります。
   →→眠いのでまたゆっくり考える

・データベース
 ・SQL経験
  ・WHERE 句と HAVING 句と GROUP BY 句の意味と、評価順位★
   Where→Group By→Having
  ・CASE・UNION・EXISTS の使用経験★
使いまっせ
 ・データベース利用経験 (Oracle/MySQL/PostgreSQL/その他)
  上記プラスSQLServer。SQLiteも入れてもよいのかな
  ・Oracle であれば、テーブルスペース (表領域) とは何か。エクステントとは何か。
    データを物理的に置く場所。I/Oを考えた方が良い。エクステントはどんなけ領域を増やすか
  ・MySQL であれば、MyISAM と InnoDB の違い。
    一般的には、MyISAM=速いけどトランザクションが使えない。InnoDBはちょっと遅いけどトランザクションをサポート
    でも、MyISAMはテーブルロックなので更新系で使うと遅い場合も。InnoDBは段々速くなってきている。
    でも、製造元が嫌がらせでOracleに買収された
 ・ER図とは何か
   解ったような感じになる
 ・正規化とは何か
  ・第一正規形/第二正規形/第三正規形とは何か
    あんまり気にしない。アプリ次第で変えるかな
 ・ACID 属性とは何か
  ・ヒントとして
   ・Atomicity(原子性)/Consistency(一貫性)/Isolation(独立性)/Durability(永続性)
    DBの根性
 ・バックアップ/リストア経験
   あり。でも本番系でリストアしたことはないなぁ。開発機ではあるけど
 ・レプリケーション経験
   クラスタリングよりシンプルで良いと思う
 ・トランザクションログとは何か (ロールフォワードとは何か)
   情報処理試験。現実では使ったことがない。昔のSQLServerは、バックアップの設定次第で酷いことになったなぁ
 ・トリガ・ビュー・ファンクション・プロシージャ・NOT NULL 以外の制約・参照整合性
  制約(外部キー)の利用経験★
  ・上記のものを使うべきか使わざるべきか (DB でやるかアプリでやるか)。また、それはなぜか。
    使わない。エラー処理と見通しの問題
 ・ORマッパ利用経験
   Hibernateから使ってるなぁ

・バッチ系
 ・CSV/固定長ファイル取込経験
   あるよ
 ・メール配信経験
   あるけど
 ・EDI連携の経験
   ありまっせ
 ・バッチにて途中でエラー終了した場合、
  ・DB を更新するバッチの場合、後始末何をすべきか
   ロールバック。元に戻せない作りであれば、作った奴を呼び出せ!!
  ・1000人にメールを送るバッチの場合、後始末として何をすべきか
    とりあえず、詫び状を書く
  ・CSV ファイルを出力するバッチの場合、後始末として何をすべきか
    作りかけのファイルを消して、無かったことにする

・セキュリティ
 ・外部のセキュリティ診断を受けたことがあるか
   あるよ
 ・SQL インジェクションとは何か。その対策は
   挿入。DBを使わない。。。エスケープとバインディング
 ・XSS 脆弱性とは何か。その対策は
   はまちゃん
 ・CSRF (クロスサイト・リクエスト・フォージュリ) とは何か。その対策は
   知らない
 ・暗号化知識
  ・ブロック暗号とは何か
    知らん
  ・公開鍵暗号とは何か
    公開鍵で暗号化して、秘密鍵で復元
  ・MD5・SHA とは何か。暗号化と一方向ハッシュの違いは何か
    暗号化の方式。復元出来るか否か
 ・日々のセキュリティ情報をどこから入手しているか★
   最近は特に。。メールとWebくらいかなぁ
 ・高木浩光を知っているか★
   Googleストーカー

・HTML/Javascript/CSS
 ・HTML
  ・HTML を書けるか
    昔の書き方だったら
   ・XML を書けるか
     書けるけど、手で書くものなの?
   ・XHTML を書けるか
    ・DTD とは何か
      タイプの宣言
    ・DOCTYPE 宣言とは何か
      あんまり良くしらん
  ・「HTML 4.0 Transitional では IE は quirk モードになる」の意味がわかるか
    知らん
  ・実体参照とは何か
    &  初めてXML書いた時に、強制的に覚えさせられた
  ・META タグとは、「何の」META 情報か。
    SEO業者の飯の種
 ・Javascript を書けるか
   書けるけど、ついて行けない
  ・Ajax な Javascript を書けるか
    ライブラリ使ったら
  ・Ajax ライブラリを使ったことはあるか (jQuery/prototype.js/script.aculo.us)
    jQuery&prototypeくらい
  ・DOM (Document Object Model) とは何か
   ・getElementById を使ったことはあるか
     あるよ
   ・appendChild でまっさらな HTML から任意の HTML を動的に生成できるか
     無理じゃない
 ・CSS
  ・CSS を書けるか
    書こうとは思わない
  ・padding と margin の違いは何か
    知らん
  ・CSS Sprite とは何か
    知らん
 ・その他
  ・favicon とは何か
   ブラウザに勝手に要求されるもの
  ・URLエンコードとは何か
    日本語URLって困るよね
  ・BASE64 とは何か
    圧縮形式。メール以外使ってるの見た事ない

・Web アプリケーション
 ・CSVファイルをアップロードし、DB に格納するアプリケーションを作成できるか★
  たぶん
  ・CSVファイルをダウンロードするアプリケーションを作成できるか★
   たぶん
  ・動的画像生成経験★
   ImageMagick使うとかもあり?
  ・PDF生成経験★
   ライブラリ使ってよいのであればあり。
 ・セッション管理
   管理するよ
 ・デザイナとの協業経験
   仲良いよ
 ・SEO経験
   SEOを語る人間は信じないことにしている。
  ・何を行ったか、効果測定をしたか
    結局、コンテンツなんだよ
 ・リスティング広告組み込み経験
   なし
 ・Google Sitemap
   でも、使ってる
 ・全文検索エンジン利用経験 (Namazu/Hyper Estraier/Senna/Lucene など)
   全部あるよ
  ・n-gram と形態素解析の違いは何か
    文章の区切り方。一定文字ごとに切ってずらしていくか、形態素で区切るか。全文検索でいえば、n-gramは検索漏れはないが、ノイズが多い。形態素解析は、検索漏れが発生しうる
 ・負荷計測経験
  ・どのような負荷計測ツールを使ったか
   JMeter or MicrosoftのWS
 ・クロスブラウザな Web を作成したことがあるか (IE 以外のブラウザ)
   何それ?

・モバイル
 ・モバイルサイト構築経験
   ありまっせ
 ・公式サイト構築経験
   結果的に公式になったことはある
 ・(いわゆる) 携帯 UID とは
   使っちゃダメだと思う
 ・画像表示に関する機種ごとの差異を述べよ
   考え出すと夜も眠れない。jpegにするのが良いよ
 ・HTML に関する機種ごとの差異を述べよ
   機種が違えば、別のブラウザと考えよ。ってか、破綻していない?

・ネットワーク管理
 ・Windows または UNIX マシンを、LAN に接続できるか
   あるよ
 ・DHCP サーバがないとして、PC に何を設定すれば LAN 経由で
  インターネットに出られるか
   IPアドレス、サブネット、GW、DNS
 ・ルータ設定経験
   あるよ
 ・DNSサーバ管理経験
   おれおれサーバならば
 ・DNS サーバの役割は
  ・DNS の正引きとは何か、逆引きとは何か
    名前解決と身元確認
   ・A レコードとは何か、CNAME レコードとは何か、AAAA レコードとは何か
     IPアドレスと名前のひも付け。あだ名。AAAAは知らない。
   ・SPF レコードとは何か
     スパムに汚染された世の中
 ・FTP における active/passive とは何か
   データポートをどうするか
 ・telnet を起動し、HTTP/SMTP/POP3/FTP サーバとしゃべることができるか
   しゃべれる
 ・メールサーバ管理経験(sendmail/Postfix/qmail/その他)
   sendmailとqmailくらい。今やれと言われたら、嫌という
  ・携帯宛のメール送信経験
    あるよ
  ・大量メール配信経験
    あるよ
  ・マルチパートメール送信経験
    あるよ
   ・(いわゆる)デコメールの仕組みを述べよ
     HTMLメールなんでないの?
  ・bounce メール処理
    大変
  ・foo.@exmaple.co.jp というメールアドレスが不正であることを説明せよ。
    .@がRFC違反。
   ・(送信できない環境の場合) どうしてもこのメールアドレスにメールを
    送信したい場合の方法は。
     Docomoで送る。"foo."@exmaple.co.jp
 ・traceroute の動作原理
  ・UNIX 系の traceroute と、Windows の tracert コマンドの大きな違いは何か
   (ヒント: ICMP)
    知らん
 ・NAT (NAPT) とは何か
   資源節約

・プロジェクト管理/構成管理
 ・バージョン管理ツールの使用経験 (CVS/Subversion/Git など)
   Git使ってみたい
 ・過去のプロジェクトでは、システムは何環境あったか (開発/テスト/本番など)
   全部
 ・複数の環境で整合性を取るため、どのような工夫をしたか
   涙ぐましい努力。
 ・Wiki の利用経験
   あるよ

・インフラ管理
 ・Webサーバ(Apache)
  ・どのようなモジュールを使ったことがあるか
    mod_rewriteって言えばよい?
  ・バーチャルホストを設定できるか
    うす
  ・SSL
   ・SSL 対応ページを準備するまでの手順を示せ (ヒント: 秘密鍵・CSR)
    ベリサインのページを見る
  ・負荷分散の経験
    あり
 ・静的 Web ページを高速化する方法を示せ
   キャッシュ
  ・Apache における ETag とは何か
    キャッシュの動作
 ・Web サイトが重い場合、どのような手順で解決するか (できるだけ定量的な分析を)
  ボトルネックの調査。対象の分析


疲れた。。。

*1:x)*(x