見出し画像

システム設計課題を出す理由、と実例

就職活動では色々なシチュエーションで面接が設定されますよね。

ソフトウェアエンジニアの枠で面接を受ける際、スキルチェックの一環でコーディング面接を設けられているケースが多々あります。あまりに多いので、専門の攻略本もたくさん出ています。

世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法
https://www.amazon.co.jp/dp/4839960100

出される問題はだいたい、コンピュータサイエンスの基礎知識を前提にしていて、アルゴリズムをホワイトボードに書かせたり、計算量の見積もりをさせたり、漏れ無く考慮が出来てるかをチェックされたりするわけです。

僕もこの手の本は好きでたまに見ます。とはいえ、実際の業務で、コンピュータサイエンスの知見をフルに活かしてゴリゴリ効率的なアルゴリズムを書いたりメモリ空間をカリカリにチューニングしたりすることはあるか?と言われるとそんなにないのです。webまわりエンジニアリングはもう歴史が長く、大体の複雑な問題は解決されてライブラリに隠蔽されています。

他方、ますますチームで仕事をすることが多くなってます。そうなると、誰が見ても仕様が伝わりやすいように実装できたり、設計の議論が出来たり、不明点をみんなと詰めて合意を取るスキルも重要になってきます。マシンのスペックも上がっているので、技巧を尽くさずとも力技で書いても大きな問題にならなくなってもいます。

そこで、弊社ではアルゴリズムのどーのこーのを面接で聞くのはやめて、仮想のwebサービスを題材にしてどう設計する(特にデータベースの設計)のがbetterかを議論しながら決めていく課題を出すことにしています。例題を出したほうが分かりやすいと思うので早速実例を紹介します。

問題: インターネットTVサービス あま〜べTV

1) RDBMSで永続層を組むとします テーブル設計を考えてください
2) インフラ構成を考えてください DAUは数万程度とします。

仕様

チャンネルと番組
- 動画をブロードキャスト(=垂れ流し)するインターネットTV局サービス。
- ペット、アイドル、ドラマなど複数のチャンネルがある
- チャンネルの所有者は `TV局` 、`個人` 、`外部パートナー企業` 、`事業者` の4タイプある。ひとつのチャンネルに複数の所有者が紐づくこともある
- 各チャンネルの下では時間帯ごとに番組枠が設定されており、番組が連続して放映される。番組の所有者もTV局、個人、外部パートナー企業、事業者の4タイプある。
- 再放送も行う予定なため、ある番組が複数のチャンネルの異なる番組枠で放映される事はあり得る
- KPIとして番組枠、番組及びチャンネルごとにPVを記録しておきたい
- 番組のPV: ひとつの番組は複数の異なるチャンネルで放映されることがある(上述)ので、属するチャンネルごと(=番組枠)にPVがどうだったかも追えるように保存したい。管理者ツールで表示するために、日ごとに集計を行う
- 番組は `録画` は `生放送` かどちらかである


提供機能
- 番組表を提供している。チャンネル毎に、それぞれの日付と時間でなにをブロードキャストするかを確認することができる
- 今日 + 過去6日の計7daysを表示
- 番組によっては放映後にも閲覧できる性質がある(タイムシフト視聴)
- 放映するコンテンツがない時間帯もあるので、放映の有無が区別できるようにする
- 視聴数ランキングを提供している。更新は5分毎である。過去7日分閲覧可能


コンテンツ出稿
- 出稿者向けの管理ツールを提供している
- コンテンツ提供者は配信の12時間前までにあま〜べTVが用意するファイルサーバーにコンテンツの動画データをアップする。その後、あま〜べTVはスマホ用、タブレット用、PC用、TV用の4つに変換する処理を走らせる(サイズ縮小のため)。変換完了すると公開可能状態になる。
- なんらかの原因で変換が失敗する時もある。再アップロードする機能がある
- 公開可能状態になると、タイトルを設定して公開日時を設定することができる。
- ストリーミング放送は考えない

- - - - - - - -

こんな感じで新規案件が振ってきた! という想定でその場でプリントアウトを渡して考えてもらい、ホワイトボードで議論します。考慮ポイントはいくつかありますが、弊社のエンジニア数名でテストした所だいたい同じ解答がすぐに出てきたので激烈に難しいわけではないと思います。そもそも、解答は想定負荷、インフラ環境や設計思想で変わるので、模範解答は用意しておらず、建設的な議論が出来るかを重視しています。

みなさんの会社ではどういう風に技術面談されてるのでしょうか。個人的に気になるポイントでございます。

好評のようなら、次回に解答例をのせてみようとおもいます

- - - - - - - - 

というわけで、ピースオブケイク社ではエンジニア募集中です!ご興味ある方はぜひwantedlyからご応募をお願い致します

https://www.wantedly.com/projects/75063
https://www.wantedly.com/projects/80091

こんぴゅです! 外苑前から皆様に役立つテックな話題をお届けしております。もし100円でもサポいただければ励みになります。記事もグレードアップします。何卒よろしくお願いいたします