エンジニア転職日記

エンジニア転職に向けての日記です

面接技術質問対策

概要

7月6日から受講していたプログラミングスクールですが、今週末に最終課題発表会があり、卒業となります。今月から本格的に就活が開始になるので面接の技術質問対策をまとめてみました。

質問・回答

MVCの仕組みについて説明してください

MVCとは、プログラミング手法の一種でRuby on Railsでも採用されています。

Webアプリケーションを羽後買うために必要な処理の一部を分類し、分けることで保守性・可読性の高いコードを維持できます。

MはModelの略。Webアプリケーションにおけるビジネスロジック(データベースから取得してきた値を加工するメソッドや、レコード検索の条件が書かれたメソッド、データを保存する前に加工するメソッドなど)を定義します。

VはViewの略。実際にクライアント側に表示される見た目の部分です。

CはControllerの略。クライアントからのリクエストに対して適切なレスポンスを返すことや、そのレスポンスに必要なデータの処理を行う。あくまでも用意するのが責務なので、データの加工など複雑な処理はControllerには書きません。

AWSとはなんですか?

Amazon Web Serviceの略で、Amazonが提供するクラウドWebサービスの総称。Webエンジニアが利用する代表的なものにはEC2があります。EC2はクラウドサーバーと行って、自社にサーバー本体を置く必要がなくなります。

 

Rubyのincludeメソッドについて説明してください

includeメソッドを使うと、例えばclassAにmoduleBをincludeすると、classAのインスタンスでもmoduleBのメソッドが使えるようになります。

エラー解決はどのように行いますか?

 エラーログを確認し、そこで仮説が立てられるのであれば仮説検証して原因を特定します。あまり見ないエラーであれば、必要に応じて検索します。

オブジェクト指向とはなんですか?

オブジェクト指向は、現実世界を正しく捉えることで、プログラムの動作をある特徴(属性値とメソッド)を持ったパーツの組み合わせで実現するという考え方です。パーツの特徴を定義するのがclass、実際のパーツはインスタンスです。インスタンスはclassの設計図をもとに生み出される具体的なかたまりです。

参照渡し、値渡しとはなんですか?

参照渡しの場合は実引数と仮引数がメモリ上の同じ場所を指すため、仮引数に変更を加えた際に実引数の方にも影響が出ます。

一方で、値渡しの場合は実引数の値がコピーされるため、仮引数に変更を加えても実引数に影響はありません。Rubyを含む多くの言語は値渡しを採用しています。

SQLとは何か説明してください

SQLはStructured Query Languageの略で、リレーショナルデータベース管理システムと対話するための言語です。

RDBMSにquery(問合せ)を投げることでデータベースのあらゆる操作を行うことができます。

SQLでは具体的にどんなことが出来ますか?

データベースやテーブルの作成、更新、削除やデータの登録、更新、削除、検索を行ったり、データを特定するための条件をしていすることができます。

ログイン、ログアウトの仕組みを説明してください

認証にメールアドレスとパスワードを利用する場合、ログインはユーザー情報を保存しているテーブルからユーザーが入力したメールアドレスとパスワードがマッチするデータがあるかどうかを判定します。

ログインするとセッションに既定のデータが保存されるので、ログアウト時にはそのセッションデータを削除することでログイン状態を解除するという仕組みです。

クッキーとセッションの違いを説明してください

HTTP通信は基本的に状態を持たないステートレスな通信です。クッキーやセッションは主にログイン情報など、状態を保っておきたい処理の時に使います。クッキーはサーバー側からクライアント側に付与する情報で、ブラウザに保存されます。一方でセッションはサーバー側にIDを割り振って保存されます。

ブラウザにURLが打ち込まれてサイトが表示されるまでの仕組みを教えてください

初めに、DNSサーバーにアクセスし、WebサイトのIPアドレスを特定します。次に、そのIPアドレスを持つサーバーに対してHTTPリクエストを送信します。

サーバーがそのHTTPリクエストをもとにクライアントの要求を承認すると、サーバーは"200 OK"というステータスコードを返します。

承認が完了すると、サーバーからWebサイトの情報が転送されてクライアント側に表示されます。

HTTPリクエストの中身を構成する3つのパートを教えてください

HTTPリクエスト行

HTTPリクエストヘッダー

HTTPリクエストボディ

です。

HTTPリクエストヘッダーはどのような役割を果たしていますか?

端的に言えば、HTTPリクエストの2行目以降のことで、ブラウザの「ユーザーエージェント名」「リファラ」「クッキー」などの情報をWebサーバーに伝える役割を果たしています。

デスクトップPCとスマートフォンでは画面のサイズが異なりますが、どのように対応していますか?

メディアクエリを利用し、画面のサイズ毎に適用するCSSを変化させます。

データベースのトランザクションについて説明してください

トランザクションとは、データベースに対して行われるワンセットになった処理のまとまりです。

トランザクションの特性であるACIDについて説明してください

Aは原子性(Atomicity)でトランザクションが終わった後に、そこに含まれていた更新処理が全て実行されるか、全て実行されない状態で終わることを保証する性質のことです。commitかrollbackのいずれかで終了します。

Cは一貫性(Consistency)でトランザクションに含まれる処理はそれぞれの制約を満たすという性質です。トランザクションの途中で規約違反があった時、処理を中断して実行前に戻すことでデータの一貫性が保たれます。

Iは独立性(Isolation)でトランザクションの実行中に他のトランザクションの影響を受けないという性質です。

Dは永続性(Durability)でトランザクションが完了した後、そのデータ状態が保存され失われることはないという性質です。

この性質の保証のために一般的にはトランザクションのログを記録しておき、障害が起きた際はログを使用して障害発生前の状態に復旧します。

Rubyの長所・短所について教えてください

 Rubyオブジェクト指向を採用しており、保守・運用に優れ、インタプリタ方式なのでデバッグも容易です。また、動的型付け言語かつシンプルな構文が多いので記述量少なくあらゆる実装を行うことができます。

一方で、処理速度は他の言語に比べて遅いので、大規模アプリや処理速度が重要なサービスには向いてないと言えます。

 

参考

https://magazine.rubyist.net/articles/0032/0032-CallByValueAndCallByReference.html

http://ohs30359.hatenablog.com/entry/2015/09/04/235027 

https://qiita.com/komattio/items/838ea5df68eb076e8099

https://docs.google.com/spreadsheets/d/1IUf-u6rAU5fkFKSHZZF8VWsAf1qvLWTrrZR6StC3z0g/edit#gid=502130766