👏

面談時対策(面談時の質問と解答例)

2023/02/22に公開約5,900字

質問内容

アクティブレコードの経験はありますか?

  • ございます
  • CRUD操作全般
  • バリデーションの追加
  • 画像系の処理(imageマジック)
  • リサイズの処理
  • 画像の削除の実装
    など

記事
https://qiita.com/penguin_note/items/adb0b9bf7c13c1b1d44d
(Rails触っていれば全員あります。)

苦労したことはなんですか?

  • 共同開発でのGitの扱い方
  • 文章でのコミュニケーション
  • Where文でデータを絞る事
  • なにを絞ってきたら良いのかがわからない・
  • フロントとサーバー側が分かれていた時のAPI通信処理
  • テストコードの実装
  • バッチ処理(Rakeタスクファイルの作成) など

バッチ処理はどういった実装をしましたか?

  • お知らせメールを規定の時間に送受信を行う実装を行いました。
  • 4ファイル程作成し、Rakeタスク内の処理の実装を行いました

実装時気を付けていたことは?(コードビューの質問でも使える)

  • 重複したメソッド名はないか?
  • わかりやすいメソッド名か?
    DeepLやChatGPTやcodicなどを活用
    https://www.deepl.com/ja/translator
    https://chat.openai.com/chat
  • 無駄な処理は入ってないか?
  • コメントアウト誰が見てもわかりやす記述してあるのか?(誤字脱字がないか?)
  • Rubyのコードが削減できないか?
  • メモ帳にタスクをユースケース毎に分けて、一旦確認をとること。
  • プルリク作成時Developブランチに上げる前は子ブランチは必ず切っておりました。
    (epic/feat/userstory)(後戻りが少ないようにする)
  • こまめにデバッグやコンソールログでの確認
  • 最後にRubocopを回すことの徹底。
  • バグがないか二重チェックを必ず行う。
  • パーシャルファイル内で、インスタンス変数を使わないように
    • 部分テンプレートの再利用性が低くなるため
  • インデントがそろっているのか?
  • CSSのClassと波かっこの間はスペース空いているのか?
  • 最後の行は改行されているのか?
  • n+1問題は大丈夫か?
    • ループ処理の中でその都度SQLを発行してしまいパフォーマンスが低下してしまう問題のことです。例えると、スーパーで商品を1点お会計して再び並ぶの繰り返しをした書き方。
      上記をまとめてお会計するようなコードを書くように考慮しているか?という観点で見ていました。
      記事(n+1)
      https://qiita.com/hirotakasasaki/items/e0be0b3fd7b0eb350327

案件を選ぶ際の優先順位は?

  • 雰囲気
    • 向上心のある方々に囲まれた雰囲気
    • チーム内でコミュニケーションは取りやすい環境か?
  • 内容
    • 新しい言語や未経験の言語をチャレンジさせて頂ける現場
    • (バックエンドだけでなく、フロントエンドやインフラ)
    • 仕様書や設計書なども積極的に書いていきたいです。

実装中に困ったことをどういったように解決したのか?

  • 「わからない場所」と「調べた記事」をまとめてから現場の方に質問して解決しておりました。その後は自分のQiita記事や、Notionにまとめてシェア。

質問の中で意識していたことは?

  • 結論からゆっくりとした口調で話す事を意識しておりました。
  • 質問テンプレートを作成し、メモ帳に貼り付け、それに沿って質問しておりました。
  • ツールやメールでは引用を必ず使っておりました
  • Slackでは質問の内容ごとにグレーで囲うなど工夫をしておりました。
  • 1時間置きに途中経過を報告

PCは何を使っているのか?

  • Windows
  • Mac

テストコードを書いた事はあるのか?

  • はいございます。
  • 質問解答マッチングサービス
    • 管理者側のテストコードを書きました。

    • 管理者がログインができているのか?

    • ユーザーの一覧の表示されているか

    • 問い合わせの一覧が表示されているのか?

    • 削除ボタンは機能するのか?

    • 編集ボタンは機能するのか?

    • スタートアップ連携管理システム

    • DB追加時

      • 各フィルター内のセレクトボックスのソートが作成順から、ABC順に変更する実装の、テストコードを記述しました。

テストコードで気をつけていたことは?

  • describeとcontextの意味を理解して、誰が見ても、なんのテストかわかるように記述しました。
  • 自分の実装したタスクをユースケース毎に洗い出してから書く事
    • 手動テストを減らすため
  • ポイントだけ抑えて書くことを意識しました
  • 少ない記述内容で色々なパターンを書くようにしていた。
  • ヌケやモレがなく、必要最小限で書く事を心がける
  • 正常に動作するかを必ず確認する
  • テストで失敗したことを書き出し、動作確認を行う
  • 100%動作を保証する事を意識
    • 基本的な関数
      • letはインスタンス変数やローカル変数をletという機能で置き換え
      • describeには、テストの対象のメソッド名記述する。
      • contextに、特定の条件が何かを記述する。(なんの値を渡された時か?)
      • exampleには、アウトプット(どのようなことが起きているのか?)

リクエストスペックとコントローラースペックとの使い方の違いは理解しているのか?

  • HTTPメソッドが使用できるため、API系のテストの必要がある場合に書く

  • contorollerのテストで、URLのリクエストがちゃんと通るのかテストを実施

  • コントローラスペックはcreateというアクションに対して、リクエストスペックは具体的なルーティング名を指定

    • リクエストスペックの利点
    • Routeの設定ファイルがきちんと設定できていること
    • クライアント側からサーバー側にちゃんとHTTPメソッドの疎通ができているのかを正確に確認が取れる
  • コントローラースペックは、コントローラーのアクションごとにテストを行うことができます。一方、リクエストスペックは、アプリケーションのレスポンスをテストするため、通常はアクション単位ではなく、ページ全体をテストすることが多いです。

仕様書は何を意識して書いたか?

  • この機能は「誰が」「いつ」「どのように」「なんのために」使うかの目的を明確化にする事を意識していました
  • 誰が読んでもわかりやすく、必要な情報を的確に書くようにしていました。
  • 使う人の観点を意識して書きました
  • お絵描きなども誰でも修正できるようにスプレットシートの図形描画(ずけいびょうが)を使っておりました。
  • 必要な詳細な情報をできるだけ細かく記載。

javascriptは書けるか?

  • ごりごり書けるというわけではないですが、Bootstarapと併用しながら実現できない動作をJSで少し補っていました。

AWSは触ったか?

  • ございませんがCloud Watchでログを見て、バグを修正した事はございます

コードレビュの経験はあるのか?

  • 重複したメソッド名はないか?
  • わかりやすいメソッド名か?
  • 無駄な処理は入ってないか?
  • コメントアウト誰が見てもわかりやす記述してあるのか?(誤字脱字がないか?)
  • Rubyのコードが削減できないか?
  • バグがないか二重チェックを必ず行う。
  • パーシャルファイル内で、インスタンス変数を使わないように
    • 部分テンプレートの再利用性が低くなるため
  • インデントがそろっているのか?
  • CSSのClassと波かっこの間はスペース空いているのか?
  • 最後の行は改行されているのか?
  • n+1問題は大丈夫か?
    • ループ処理の中でその都度SQLを発行してしまいパフォーマンスが低下してしまう問題のことです。例えると、スーパーで商品を1点お会計して再び並ぶの繰り返しをした書き方。
      上記をまとめてお会計するようなコードを書くように考慮しているか?という観点で見ていました。
      記事(n+1)
      https://qiita.com/hirotakasasaki/items/e0be0b3fd7b0eb350327

興味がある技術は?

  • Go言語です。
    Go言語は色々な分野で活用しているものを開発できる言語ですので、興味があります。
    「YouTube」「ぐるなび」「ドローン」の開発にも使われてると聞きました。
    特にドローンを操作してみたいです

なんの言語やフレームワークで使っている

  • バージョンRuby2.6.6
  • rails6.0.4.1

リモートでの開発経験は?

  • ございます
  • 1回目と2回目と4回目の案件がリモートでした

目指しているエンジニア像は?

  • フルスタックエンジニアを目指しております。
  • Rubyだけでなく様々な言語の実装や上流工程も行えて、信頼が厚いエンジニアを目指しております

なんでIT来たの?(深い所を聞きたい!)

  • 知り合いのエンジニアの方がリモートワークのフリーランスをやっており、憧れていたため、プログラミングの勉強を行い、IT業界にきました!

  • SNSをよく使っており、

    • 投稿や、コメントやメッセンジャーなどの仕組みが気になったのがきっかけです。
  • 通帳アプリを使用しており、

    • 銀行に行かなくても残高が見れる事に興味を持ち、仕組みが気になった事がきっかけです
  • 前職である介護アプリを使っており、利用者様の健康状態、年齢、性格などがわかりやすく管理してあり、作る側に回りたいと思ったからです

現場で苦労した事エピソードなど

  • スマホとPC時のレスポンシブ対応をするのが難しかった。
  • Get、Postの違いがわからなかった。
  • OpenApiの仕組みが難しかった。
  • Reactの仕組み。(なぜ動いているのかが理解できなかった)
  • パラメーターの階層の理解
  • アソシエーションの理解
  • n+1問題の理解
  • hidden_fieldの使い方
    • フォームから入力させないまま、値を受け渡したい時に使用するもの理解が大変
      名前をformに入力しなくてもパラメーターに入力しなくても送る時に使いました。

Railsのレベルは?

  • 「CRUD操作」、「アソシエーション」「MVCの扱い方」に関してはミスなく行えます。
  • 少々力不足な所はありますがキャッチアップしついていきます!

外部連携の実装経験?

  • ラインAPI
  • グーグルAPI
  • YouTUBEAPI
  • フロントとサーバーを繋ぐためのAPI
  • S3
  • ラインの通知機能 など

Railsの魅力は?

  • 学習がやりやすい
  • 少ない記述で済むのでそれだけ開発期間を短縮できる。
    • アクティブレコードを使って、メソッドの定義などを短縮できる
  • RubyGemsなどのライブラリを活用すことで少ない人員で開発できる。
  • 読み易いコードのためメンテナンスが容易になる。

Railsのデメリットは?

  • Railsのみの学習だと、簡単にシステムが作れてしまうがゆえに、基礎レベルの低下により、新しい言語の習得が遅れてしまう危険性がある。

  • 処理速度が遅い
    - インタプリタ方式が採用されているため、速度を気にしないアプリケーションを作成する時に利用される方式

  • 汎用性が高すぎるが故に自由度も高く、エラーの特定がしずらい

  • コードの修復がしにくい

    https://kredo.jp/media/what_is_ruby-on-rails/

セキュリティ面で気をつけていたことは?

  • セッションに期限を設定する事
    • PCでユーザーがアプリからサインアウトし忘れた場合に、何者かにユーザーセッションをハイジャックされる状況を防止するためには、セッションをできる限り早期に無効にするべきです。
  • アカウントロックの仕組みを作ること
    • ユーザーがパスワードを5回以上間違えた場合にアカウントロックを10分指定

知っているセキュリティの種類は?

  • 情報セキュリティ
    • 「機密性」「完全性」「可用性」を維持することです。
      • 機密性とは、アクセスを認められたものだけが、その情報にアクセスできる状態を確保すること、つまりは関係のないものに情報を見せないことを意味する。
      • 安全性とは、情報が破壊、改ざん、消去されていない状態かを確保する事を意味する。
      • 可用性とは、必要な時はいつでも情報にアクセスできる状態を確保することを意味する。
    • 情報とセキュリティの記事
    • https://zenn.dev/takaya314/articles/dc8120b185fbd1

DBは触ったことあるか

  • ございます。
    - 以前の案件で、PHPアドミンを使用しておりました。

自己学習やRails以外の経験などはいかがでしょうか?

  • IT業界に入る前は、介護職をしておりましたが、知り合いがフリーランスでエンジニアをやっており、興味本位でプログラミングの勉強を行いました。
    最初は、知り合いのエンジニアが用件定義した、勤怠システムの実装を行い、一つ一つの機能が完成した時の達成感や喜びを感じることができました。
    直近ではReactや、HanamiというRubyのフレームワークの経験もございます。
    フロント言語を含め上流工程にも興味があり、将来的にはフルスタックエンジニアを目指していきたいと考えております

Discussion

ログインするとコメントできます