Ogólny proces przemyślenia pytań do wywiadu „Jak zbudujesz tę stronę / aplikację” [zamknięte]


14

Zebrałem wiele pytań do wywiadu, takich jak „Opisz, jak zaprojektowałbyś aplikację do albumu ze zdjęciami”, „Opisz, jak zaprojektowałbyś tę konkretną funkcję na tej stronie” (np. Polubienia na Facebooku, rekomendacji na Amazon, koszyku, grze black jack). A co jeśli są miliony takich rzeczy? Co byś zmienił?

Wygląda na to, że oczekuje albo schematu bazy danych, albo zbioru definicji klas (lub obu tych elementów?). Dowiedziałem się o bazach danych w szkole, ale tak naprawdę nigdy wcześniej nie projektowałem aplikacji i nie mam pojęcia, od czego zacząć, czy projekty, które wymyślę, są „dobre” i co mogę zmienić, aby było skalowalne.

Czy podczas projektowania tych systemów istnieje ogólne podejście lub proces myślowy? I ogólne problemy / problemy, które wydają się często pojawiać w projekcie, którego powinienem unikać? Czy ktoś może poprowadzić mnie przez jeden (lub najlepiej wszystkie, porównując potrzeby każdego z nich) i wyjaśnić:

1) Jak wymyślić, jakie podmioty są potrzebne? 2) Jak decydujesz, jakie relacje będą miały wszystko? 3) Jak włączyć optymalizację wydajności do swojego projektu? 4) Czy robię to za pomocą klas lub baz danych? Czy to robi różnicę (np. Czy miałbym klasę, której tak naprawdę nie można na przykład przetłumaczyć na tabelę bazy danych?)

Głównym powodem, dla którego pytam, jest to, że przechodziłem przez „Wywiad z kodowaniem”, a moje odpowiedzi były całkowicie odmienne od odpowiedzi autora - miałem bardzo różne wyobrażenia o tym, które zajęcia były ważne.

MOJA PRÓBA: Dzięki aplikacji do udostępniania zdjęć miałbym zajęcia / tabele: Zdjęcie i Użytkownik na pewno.

Następnie myślę, że jeśli próbujemy utworzyć schemat, istnieje tabela łącząca zdjęcie i użytkownika, jeśli założymy, że każda osoba na zdjęciu jest powiązana ze zdjęciem (czy ta tabela jest konieczna? Jeśli nie, czy nadal jest to powszechna praktyka mieć osobną tabelę dla relacji wiele do wielu, czy nie?).

Ale jeśli spróbujemy zastosować podejście obiektowe, może zamiast tego mielibyśmy klasę o nazwie album, która wykonuje całą pracę i zawiera wszystkie informacje z dwóch innych tabel / klas. To jedna rzecz, którą zauważyłem w książce - jest kilka klas, a potem jedna klasa, która w zasadzie zawiera wszystkie informacje i łączy inne klasy - czy to jest wspólne? Na przykład w moich przykładach powyżej wydaje się, że miałoby to zastosowanie?

Mam tylko nadzieję na przestrzeganie ogólnych zasad / wytycznych, ponieważ w tej chwili nie mam pojęcia, jak powiedzieć, jak wygląda dobra architektura dla dużego systemu.


1
Załóżmy, że kodujesz album ze zdjęciami jako projekt hobby. Zamiast pytać „czy jestem na dobrej drodze?” (no cóż, oczywiście, ponieważ wszystkie wymagania są w jakiś sposób spełnione), prawdopodobnie zapytałbyś „wydaje się, że ten aspekt projektu sprawia, że ​​rzeczy są niepotrzebnie niezręczne; czy moglibyśmy zmienić rzeczy, aby wszystko było prostsze? „ Ale skąd wiesz, że jest jakiś niezręczny aspekt projektu? Pracując nad eksperymentami myślowymi, takimi jak przypadki użycia i przypadki najgorsze. Ponadto: „ten wymóg logowania jest dość powszechny; czy moglibyśmy znaleźć bibliotekę zamiast sami ją wynaleźć na nowo?”
Evgeni Sergeev

Odpowiedzi:


19

Celem takich pytań jest ocena, czy masz umiejętności w pisaniu aplikacji. Nauczyłeś się trochę teorii, ale wiedza teoretyczna może pójść tak daleko. Jedynym sposobem, aby naprawdę zrozumieć rozwój oprogramowania, jest zrobienie tego.

Nie ma na to skrótu, ponieważ nie ma czasowych odpowiedzi na pytania typu „jakie podmioty są potrzebne?” Zamiast tego musisz wykorzystać swoje doświadczenie w zakresie różnych narzędzi i paradygmatów oraz ich wzajemnej współpracy, aby znaleźć praktyczne rozwiązanie danego problemu.

Pytanie takie jak „Czy robię to za pomocą klas lub baz danych?” sugeruje, że brakuje ci podstawowej wiedzy o tym, czym są rzeczy i jak działają. Klasy są paradygmatem organizowania kodu; bazy danych są metodą przechowywania danych. Są to dwa z natury niezwiązane ze sobą pojęcia (choć mogą ze sobą współpracować). To nie jest pytanie ani.

Nie chcę być surowy, ale myślę, że musisz rozwinąć swoje doświadczenie w programowaniu, aby odnieść sukces w rozmowie o pracę. Z pewnością masz potencjał - dyskusja na temat aplikacji do udostępniania zdjęć ma kilka właściwych pomysłów i zmierza we właściwym kierunku. Ale musisz nauczyć się, jak to działa z pierwszej ręki. Najlepszym sposobem na przygotowanie się do rozmowy kwalifikacyjnej jest stworzenie aplikacji od początku do końca. Aplikacja do udostępniania zdjęć byłaby projektem o odpowiednim rozmiarze, lub możesz wybrać coś innego. Twoja wiedza naprawdę się poszerzy, gdy zobaczysz, jak wszystkie części mogą ze sobą współpracować, tworząc działającą aplikację.


8

Wygląda na to, że oczekuje albo schematu bazy danych, albo zbioru definicji klas (lub obu?)

Myślę, że jesteś zbyt skoncentrowany na szczegółach tutaj. Z tym pytaniem rekruter nie oczekuje pełnego opisu wszystkich klas, które napiszesz (w przeciwnym razie poprosiłby cię o kodowanie, a nie rozmowę o tym).

Twoja odpowiedź musi najpierw dotyczyć całościowego obrazu - architektury, poziomów, warstw, a nawet cyklu życia projektu i procesu rozwoju, który chciałbyś wdrożyć. Nie wahaj się zadawać pytań na temat wymagań i środowiska, w którym aplikacja ma działać, aby dostosować twoją odpowiedź. Jak wskazał Dan1111, nie ma ogólnej recepty na prawidłowy projekt aplikacji. Wszystkie projekty zależą od kontekstu.

Tylko wtedy, gdy osoba rekrutująca zacznie zadawać naprawdę konkretne pytania, powinieneś zapoznać się ze szczegółowymi informacjami na temat klas, encji lub tabel bazy danych, których używałbyś pod maską.

Ponadto, jeśli masz niewielkie doświadczenie, normalne jest powiedzenie: „Pokażę rozwiązanie wykorzystujące projekt, którego do tej pory nauczono mnie i którego używałem. Wiem o tym i innych podejściach, które mogę opisać w dużej mierze, ale nigdy tak naprawdę ich nie zastosowałem. Jestem również otwarty na odkrywanie i stosowanie innych ”.

Nie ma nic złego w przyznaniu, że w twoim zestawie narzędzi jest tylko tyle narzędzi, że twoje doświadczenie na to pozwala - w rzeczywistości jest to lepsze niż wypróbowanie odpowiedzi, na którą nie masz pojęcia, jak to działa w praktyce.


2

Pomyślałem, że skomentuję twoje pierwsze pytanie:

1) Jak wymyślić, jakie podmioty są potrzebne?

Pierwszą rzeczą, którą robię w przypadku nowego projektu, jest zapisanie na białej tablicy lub dużej pustej kartce wszystkich fizycznych i koncepcyjnych rzeczy związanych z tym konkretnym projektem, o których ja i mój zespół możemy myśleć. To sesja burzy mózgów.

Rzeczowniki są zwykle obiektami, czasowniki są przypadkami użycia lub metodami.

Fizyczne: zdjęcie (oczywiste!), Typ wyświetlania, system, plik zdjęcia, format pliku, użytkownik, data ....
Koncepcyjne: dodawanie, usuwanie, zapisywanie / przechowywanie, pobieranie, sortowanie, modyfikacja, wyświetlanie / wyświetlanie zdjęcia ....

Nawiąż połączenia między rzeczownikami a czasownikami. Użytkownik dodaje zdjęcie. (Cóż - istnieje przypadek użycia!)

Sugerowałbym również przyjrzenie się wzorcom UML i wzorom projektowym oraz sposobom ich wykorzystania w ogólnym OOD. (Uwaga - nigdzie wyżej nie wspomniałem o języku ani bazie danych. Nie wybieraj języka, a następnie wykonaj swoje OOD. Wykonaj OOD w sposób umożliwiający implementację projektu przez dowolne OOL.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.