目次
トグル序文
このソフトウェア・エンジニアの面接のヒントを書く前に、まず第一に、以下の方々に感謝の意を表したい。 KyleMo. 彼は記事の構成を参考にさせてくれるそうだ。
2023 ウェブ・フルスタック&FEエンジニア 求職心得とても良いインタビュー記事なので、熟読されることをお勧めする。
コンテキスト
- 前職ではフルタイムのエンジニアとして1年8ヶ月、前半はアプリチームでFlutterを使ったiosとAndroidアプリの開発、後半はReactとASP.Netを使った開発をしていました。
- 大学在学中からプロジェクトに参加し、卒業後はフロントエンドエンジニアとして新しいチームに参加。
- フロントエンド・スキル:バックエンド・スキル 7:3
- 面接当時、私はあきらめ半分で面接の準備をしていた。
- リートコードは300問近く出題され、その半分以上が中問だった。
- 国立成功大学電気工学科卒業
目的
- 多国籍チームに参加し、英語でコミュニケーションをとる。
- フレキシブルなリモートワーク(個人的には物理的な場所で働くというアイデアが好きだが)
Yahoo! ソフトウェア・エンジニア・インタビュー
ヤフーでは、フロントエンド志向のソフトウェア・エンジニアを募集しています。 フロントエンド開発だけでなく、バックエンド開発やプロジェクト管理にも携わる必要があります。
LinkedInでその募集を見たとき、私は友人にそのポジションに私を推薦してくれるよう頼んだ。 また、そのポジションが多国籍チームであること、毎日のミーティングで英語が必要であること、時差があるかもしれないことも友人から聞いた。
Yahoo! 面接プロセス
0次人事電話→1次オンライン面接(2時間)→2次現地面接(4.5時間)→人事による面接合格通知→台湾口頭オファー→米国本社物理オファー
面接の全体的な経験はとても良かったし、人事は面接の前に、面接でどの部分が重視されるかを詳しく説明してくれた。
そこで、シリコンバレー企業の面接のコツをもとに準備をし、エクリェージの記事をブラッシュアップして、準備の方向性がばらばらにならないようにした。
各関門はほぼ1ヶ月間隔で、次の関門に入る前に人事が現在の希望や他の面接の有無などを再度聞いてくるので、人事の採用に対するこだわりやプロ意識を感じることができる。
I D + 14
HRと話し、その求人がネイティブ・プログラミング言語を使用する多国籍チームのためのものであることを概ね理解した。
それ以降のレベルでは、英語、ネイティブ・コード、システム設計、データ構造アルゴリズム、専門知識に焦点を当てる。
D + 33
面接官は3人で、過去の経験、フロントエンドとバックエンドの知識、情報セキュリティ、ブラウザの知識などを聞かれた。
パート I:履歴書
履歴書の経験は、例えば詳細な問い合わせの対象となる:
React NativeではなくFlutterを選んだ理由は?
なぜTailwindを選ぶのか?
MonoRepoを使う理由とその難しさは?
また、面接官はさまざまな技術について質問し、実務経験との関連で深く突っ込んでくるので、やりとりの中で各技術の長所と短所を分析しておくとよい。
ある問題に対する解決策が3つ以上思い浮かばないなら、それはその問題が何なのかわかっていないということだ。
例えば、Kubernetes、Docker、TypeScript、PHP、Flutter、GCP...など。
パートII:専門知識
ナレッジのフロントエンドとバックエンドに行き、Q&Aを行う。
JavaScriptのAsync Awaitに興味のある方は、以下を参照してください これは。
JavaScript高次関数にご興味のある方は、以下をご参照ください。 これは。
D + 64
面接官は全部で4人で、英語面接、体験質問、プログラム練習などいくつかのパートに分かれている。
パート I: 英語の自己紹介と行動面接
面接は30分ほどで、英語での自己紹介や経験などを話した。
ただ、英語はずっと練習してきたので、この面接のために特別に英語で準備する必要はなかった。
パート II: 履歴書の洞察
今回は、Flutterの根本原理や、Android端末とパッケージの非互換性に対応したことがあるかなど、レジュメについてより突っ込んだ質問をした。
パート III: HTML、CSSカットバージョン
私はCodePenを使ってオンサイト・コーディング・インタビューを行ったが、いくつかの不都合があった。
たまたまその時は、どんなHTMLコードを書いても自動的に冗長なコードが生成されてしまい、このバグを解決するのに10分以上かかったので、最終的には使い慣れたVSコードを開いてプロジェクトを終わらせることになった。
前日にCodePenを使って手書きの練習をしていたのだが、まさかプログラムが書けなくなるバグに遭遇するとは思ってもいなかったからだ。
パートIV:データ構造とアルゴリズム
問題をブラッシュアップする習慣があり、たいていはPythonを使うが、直感的に書ける簡単な問題はJavaScriptを使う。
3つの質問の合計があり、個人的な経験は質問です 簡単な2つの質問 中、最初のウォームアップの質問は古典的な質問です、2つのソリューションを与えるためにJavaScriptの直接かつ高速な使用のこの側。
2問目と3問目は忘れてしまったが、どちらも再帰関数を使った問題だった。 3問目も見た瞬間にバックトラックの問題だったのと、問題をブラッシュアップしているときにPythonの構文に詳しくなっていたので、面接官に「Pythonを使うことは可能ですか」と質問したこともあり、結局2問目と3問目は事前に終わらせてしまった。
パートV:JavaScriptのドム操作
このチームはバニラJavaScript(純粋なJavaScript)を使っていることがわかっていたので、バニラJavaScriptのテストでもあるFAANGのフロントエンド・インタビューのヒントを見ながら、準備に多くの時間を費やした。
このレベルはやや急ぎ足で、最後のキーボードコントロールは実装されていなかったが、面接官とのコミュニケーションでキーボード機能の実装方法を説明し、最後のボーナスポイントも実装されていた。
パート VI: 行動に関する質問
他の面接官が先にオフラインになり、最後にテクニカル・マネージャーが面接を行った。 実は、行動に関する質問は別に用意していた。
行動面接では、「仕事で何か困難にぶつかったことがありますか、そしてそれをどのように解決しましたか」といった、ごく基本的な質問しかされないと感じる人も多いだろう。
しかし、実はこの種の質問はSTARアプローチで答えられるだけでなく、チーム横断的なのか、部門横断的なのか、はたまたユニークな面接官なのかを面接官に知らせることもできるので、よくある質問の答え方を2つか3つ用意した。
最後に面接官と30分ほど話し、会社、チーム、技術......を紹介した。その時、個人的に感じたのは、面接のこの部分の雰囲気が心地よかったということだ。
人事部より面接合格通知 D + 77
面接の際、面接の結果は1週間から3週間以内に連絡すると言われました。しかし、私はここで本当にラッキーでした。1週間以内に面接に合格し、さらに面接に合格した後、給与や福利厚生などのフォローアップの話し合いに1~2週間かかると言われました。
ヤフオク!台湾 オーラルオファーD + 80
実際、面接に合格してわずか数日後、ヤフーから口頭でオファーをもらいました。 承認された給与がすでに理想とする給与と一致しており、Compete Offerをする必要がないため、より早いからかもしれません。
台湾の会社から口頭でオファーをもらった後、人事部はそれを米国本社に送る手続きも手伝ってくれ、正式なオファーをもらうまでには1カ月近くかかるとも言われた。
ヤフー米国本社オファー D + 84
アメリカからオファーが届いたと再度連絡があったのは4日前だったから、本当にラッキーだった!
というのも、私自身は10月末に面接を終え、12月にオファーにサインし、来年1月に出勤する予定だからだ。
しかし、まさかスケジュールが1カ月も早まるとは思っていなかった。
準備
テストに備える方法は、その日の最初にテストに出ると予想される内容を準備することだ。
また、海外ではどのように面接が行われているのかを調べ、プログラムを書き始める前に面接官と何度もやり取りをして要件を確認することを強くお勧めする。
私自身は、プログラミング面接を職場のシナリオに見立て、コーディング面接の段階をペアプログラミングに見立て、面接官に自分の考えを理解してもらい、プログラミングのプロセスや考え方を整理するために、お互いに行き来しながらコミュニケーションをとっています。
システム設計の部分は面接では出題されなかったが、私はその準備に多くの時間を費やしたので、皆さんにお伝えする。
データ構造とアルゴリズム
面接時には、JavaScript30問、Blind75問、Neetcode、SQLなど300問近くあったが、より一般的なアルゴリズムやデータ構造を選んで練習した。
データ構造
Array & Hashing、Stack、Tree、Tries、Heap、Queue、Graph
アルゴリズム
Two Pointer、Sliding Window、BInary Search、Backtracking、Dynamic Programming、Greedy
しかし、正直なところ、Dynamic Programmingの対策は簡単ではないので、ほとんどの場合、大企業でよく出題されるようなタイプの問題に集中すべきです。
特別推薦
Neetcode、Blind 75、一畝三分地、javaScript-algorithm
それが必要な人のために、私のGithub Leetcodeソリューションを紹介しよう。 leetcode-solution
これからも定期的に更新していくので、気軽に「いいね!」や「お気に入り」をしてほしい!
ドメイン知識
フロントエンド
JavaScript、HTML、CSS、Vue、Reactなど、一般的な質問からそうでない質問まで、すべて用意されている。私は、遭遇した質問の80%はリフレックスで直接答えられると言えるほど熟練しており、新しい技術、非常に低レベルの技術、パフォーマンスの最適化、フロントエンド・アーキテクチャなども含まれている。
バックエンド
Python、Node.js、OOP、SQL構文は、実際にはそれほど深くない方法の準備のこの側面は、おそらく最後までポイント、結局のところ、本当にあまりにも多くのことを準備する必要があり、データベースの最適化に加えて、APIの最適化は、一連の記事を読む。
モバイル
Flutter、React Native、この2つは、私は彼らの根本的な操作を勉強するために別の時間を持っている、私は関連する多くの質問をされる予感があるので、面接の段階の準備では、彼らの根本的な練習、違い、利点と欠点の良い理解があります。
フロントエンドコーディング
JavaSciptドム操作
例えば、Pure JavaScriptの実装を使ったウィジェットをいくつか追加している: Todo List、Typeahead、Validation Form、Cacluator、Timer、Tic Tac Toe、Infinite Scroll、Drag Drop List。
CSSのステレオタイプ
というのも、私はフロントエンド生まれで、カットバージョンでプレーすることが多いので、カットバージョンの方が練習が面倒なのですが、Flex & Gridも練習しています。
ここで私が想定しているのは、もし私が今日フレックスで1ページを完成させたら、グリッドを使って切り抜きを完成させ、2つか3つの異なる書き方の長所と短所を分析することもできるはずだということだ。
JavaScriptの実装
ここでの実装範囲は実はとても広いので、一般的な機能はすべて自分で実装するカーペットを用意している。
Curry、Throttle、Debounce、DeepEqual、Memoize、Promise、Flatten、Polyfill、PromiseAll、Promisify、ShallowClone、DeepClone、Apply、Generator。
ここにも別の練習がある Reduce、Event Loop、Promise、Proto プログラムのテーマは数多くある。
推奨リソース
莫立全KyleMo Medium & フロントエンド・パフォーマンス最適化チュートリアル
Yii|Flutter|Cross-Platform Developer
行動面接
ここでは、シリコンバレーでよくある行動に関する質問を10問近く用意し、それぞれの質問に反射的に答えられるように練習した。特に、One Acre and Three Centsは、シリコンバレー中国人の記事が多く、彼らの記事を通して、自分には足りないところが多すぎることを実感できる。
また、重要でないページに時間をかけすぎないよう、「行動に関する質問」のSTARアプローチに加え、「職務内容」と「ヤフーの企業文化」にも着目し、回答の最適化と修正を行いました。
推奨リソース
システム設計
HRテレフォンコールでシステム設計試験のことを聞いたとき、実はかなり緊張しました。何しろ、準備したことのない面接でしたから、たくさんの記事を這いずり回り、多くの種類のシステム設計記事を比較しました。最終的にByteByteGoとGrokking Modern System Design Interviewのどちらかを選びました。結局、Grokking Modern System Design Interviewを使って、システム設計記事で有名なRepoの面接対策をしました。
システム設計ルール
システム設計の準備をしていた当初は、何が含まれているかを理解するためにルールから始めた:
Availability、Reliability、Scalability、Maintainability、Fault Tolenrance、Back-of-the-envelope Calculations
システム設計コンポーネント
そして、まず幅を広げることから始め、含めるべき各システムコンポーネントを把握する:
Domain Name System、Load Balancers、Database、Key-value Store、Content Delivery Network、Sequencer、Monitoring、Cache、Messaging Queue、Pub-sub、Blob Store、Distributed Search
システム設計演習
その後、一般的なシステム設計を練習する:
Youtube、Uber、Web Crawler
しかし、私は本当にすべての練習は本当にあまりにも多くの欠陥があることを見つけるだけでなく、面接で実際に良いが、システム設計の障壁を満たしていなかったとき、将来はゆっくりとシステム設計の記事に書き込む必要があります。一方では、私は私の欠点を補うだろうし、他方では、私はあなたと私のスキルを共有します。
推奨リソース
Grokking Modern System Design Interview
追記
このインタビューも終わりに近づいてきた。
また、面接や模擬面接のやり方についても多くの人に聞いてきた。
この面接のために準備してきた質問をされたのは本当にラッキーだった。
そして、その後のプロセスは本当に幸運の女神の後援の下にあるので、私はとてもスムーズにオファーにサインすることができる。
最後に、私がセルフ・メディア・ビジネスを展開していることを宣伝したい hogan.tech, 興味のある人はフォローすればいい!
現在、インタビューに関する質問と回答は、すべて購読者エリアに掲載されています。
サブスクリプションのサポートは大歓迎だ!