Najlepsza odpowiedź
Oto kilka, które pamiętam z mojego eskapady z wywiadami:
- Zaprojektuj instagram lub jakiś rodzaj źródła treści. Ten jest w rzeczywistości BARDZO powszechny, i musiałem go zdobyć 3 lub 4 razy w różnych firmach. To całkiem niezłe narzędzie do robienia ciastek i prawdopodobnie zadadzą je ankieterzy, którzy są zbyt leniwi, by wymyślić lepsze pytanie.
- Zaprojektuj z wyprzedzeniem / autouzupełnianie. Otrzymałem ten egzemplarz wiele razy, czasami z niewielkimi różnicami. Zwykle opiera się na strukturze danych Trie. Świetnie się to sprawdza!
- Zaprojektuj magistralę komunikacyjną (apache kafka / zeromq / rabbitmq). Możesz dostać coś takiego, jeśli rozmawiasz o roli oprogramowania zorientowanego na podczerwień. Jest to świetne pytanie, które może spowodować powstanie wielu różnych obszarów zainteresowania i pytań podrzędnych.
- Zaprojektuj pamięć podręczną LRU. Zwykle sprowadza się do zaimplementowania podwójnie połączonej listy, aby uzyskać stały czas usuwania przynajmniej ostatnio używanych elementów, gdy pamięć podręczna jest pełna.
- Projekt rozproszona pamięć podręczna. Ponownie, może być dla roli, która jest zorientowana na podczerwień. Może być również prowadzony w wielu różnych kierunkach.
- Projektuj tabele bazy danych / hurtownię danych. Może to być rola bardziej zorientowana na inżyniera danych, ale jest również powszechna dla SWE, biorąc pod uwagę, że dobry projekt danych jest szalenie ważny.
Oto kilka, których NIE widziałem osobiście pomimo powszechnej akceptacji:
- Zaprojektuj skracacz adresów URL
- Zaprojektuj sklep internetowy / witrynę e-commerce
Mam nadzieję, że to pomoże! Byłbym skłonny założyć się, że 4–5 najlepszych będzie obejmować WIĘKSZOŚĆ wywiadów z projektowaniem systemu – a jeśli chodzi o te, których nie obejmują, wiedza, którą zdobędziesz podczas ich studiowania, powinna dobrze przenieść się na różne warianty pytań.
Odpowiedź
Wywiady z projektowaniem systemu sprawdzają Twoje umiejętności projektowe i umiejętność pracy ze złożonymi i skalowalnymi usługami. Twoje wyniki w tych wywiadach decydują o tym, jakie stanowisko i pensję otrzymasz. Jeśli masz godne pochwały umiejętności projektowe, otrzymasz wyższą ofertę. Dobre źródło do przygotowania się do tego wywiadu: Rozmowa o projekcie systemu
Oto kilka przykładowych problemów projektowych:
- Projektowanie usługi skracania adresów URL, takiej jak TinyURL
- Projektowanie Instagrama
- Projektowanie Twittera
- Projektowanie YouTube
- Projektowanie Facebook Messenger
- Projektowanie Dropbox
- Projektowanie sugestii z wyprzedzeniem
- Projektowanie Facebooka Kanał informacyjny
- Projektowanie Yelp
- Projektowanie Uber
Ponadto warto zapoznać się z koncepcjami systemów rozproszonych, takimi jak Spójne haszowanie, Partycjonowanie danych , równoważenie obciążenia , Redundancja i replikacja , Twierdzenie CAP itp.
Z mojego doświadczenia wynika, że kandydaci, którzy lepiej radzili sobie z projektowaniem rozmów, postępowali zgodnie z następującymi siedmioma krokami:
Krok 1: Wyjaśnienia wymagań: Zawsze zadawaj pytania, aby znaleźć dokładny zakres problemu, który rozwiązujesz.
Krok 2: Definicja interfejsu systemu: Zdefiniuj, jakich interfejsów API oczekuje się od systemu. Zapewni to również, jeśli żadne wymaganie nie jest błędne.
Krok 3: Oszacowanie na koniec koperty: Zawsze dobrze jest oszacować skalę systemu, który zamierzasz zaprojektować.
Krok 4: Zdefiniuj model danych: nie jest wymagane na początku, to wyjaśni, w jaki sposób dane będą przepływać między różnymi komponentami systemu, a później poprowadzi Cię również do partycjonowania danych.
Krok 5: Projekt wysokiego poziomu: Narysuj schemat blokowy z 5-6 ramkami reprezentującymi podstawowe komponenty Twojego systemu.
Krok 6: Szczegółowy projekt komponentów : Zagłęb się w 2-3 składniki; Opinie ankieterów powinny zawsze wskazywać, które części systemu chcą, abyś wyjaśnił dalej.
Krok 7: Wąskie gardła: Spróbuj przedyskutować jak najwięcej wąskich gardeł i różne podejścia do ich łagodzenia.
Mam nadzieję, że to pomogło.