Intervjuu süsteemi disainilahendamise kohta: näpunäited Twitteri tarkvarainsenerilt

Kirjutasin hiljuti, kuidas ma pakkusin mitmelt tipptasemel tehnoloogiaettevõttelt. Intervjuu ettevalmistamise käigus lugesin läbi palju materjali ja koostasin märkmete komplekti, kuidas lahendada süsteemi kujundamisega seotud probleeme. Selles artiklis tahaksin neid näpunäiteid jagada kõigiga.

Kui olete värske koolilõpetaja, kellel pole kogemusi suuremahuliste hajutatud süsteemide alal, või isegi kogenud inseneri, kellel on teie vöö all aastane kogemus, on see artikkel teile kasulik.

Uuendus (24.03.2019): kui soovite süsteemi kujundamise kohta lisateabe saamiseks liituda õpilaste rühmaga, korraldan koos väikese klassi! Lisateabe saamiseks võite minna sellele lingile või külastada lisateabe saamiseks minu veebisaiti: zhiachong.com.

Kuidas süsteemi kujundada: näpunäited Twitteri tarkvarainsenerilt

See artikkel on jagatud neljaks osaks:

  • Esitage täpsustavaid küsimusi
  • Kasutage oma tausta
  • Probleemiga süstemaatiliselt tegeleda
  • Hoidke oma märkmeid

Esitage täpsustavaid küsimusi

Süsteemidisaini vestluse põhieesmärk on anda kandidaadile võimalus oma teadmisi näidata.

Puuduvad rangelt õiged või valed vastused. Hea süsteemikujundusküsimus kõlab tavaliselt väga mitmetähenduslikult ja selle põhjus on see, et see peaks andma teile võimaluse näidata järgmist:

  • Kuidas te mõtleksite probleemiruumist
  • Kuidas arvate kitsaskohtadest
  • Mida saate teha nende kitsaskohtade eemaldamiseks?
Kuidas seda musta kasti kujundada

Kujutage ette, et teil palutakse kujundada must kast. Kuidas lahendaksite selle probleemi? Siin pole selgeid juhiseid selle kohta, mida peate ehitama, peale kasti, et saaksite selles mõnda eset hoida.

Üks kõige kasulikumaid strateegiaid, mida ma isiklikult rakendan, on selgitada küsimuste esitamine. Mis on „head” selgitusküsimused, mida küsite?

Hea täpsustav küsimus aitab teil saavutada ühte või mitut järgmistest:

  1. Aitab teil kitsendada seda, mida peaksite tegema
  2. Aitab selgitada, millised on süsteemi ootused kasutajatele
  3. Annab teile suuna, kuhu edasi minna
  4. Teavitab teid võimalikest kitsaskohtadest / probleemsetest piirkondadest

Musta kasti näites võite küsida: „Noh, mida see kast hoiab? Mitu eset see hoiab? Ja kes on kavandatud kasutaja? ”

Selle kohta võiksin öelda, et ehitame sellele kollase kasti koos emotikoniga, mis mahutaks maksimaalselt ühte tennisepalli. See pole siiski tavaline tennisepall. See on vähemalt 0,5 m raadiusega ja kaalub umbes 1 kg. See on mõeldud kallistamiseks, mitte hoidmiseks, nii et ma ei taha, et sellel oleks mingit käepidet.

Seal sa lähed, see on kast.

Minu ideaalne naeratava näoga kast

Küsige alati täpsustavaid küsimusi. Sind ei hinnata selle järgi, kas küsisid intervjuu käigus konkreetse küsimuse või mitte, vaid sind hinnatakse selle järgi, kuidas sa arvad probleemiruumist.

Näiteks kui ma paluksin teil kohe Twitteri kujundada, siis kuidas te seda teeksite? Võtke mõni minut selle üle mõtlemiseks ja võib-olla visandage see isegi paberitükile välja. Minge nii põhjalikult ja laialt kui võimalik ja tulge tagasi selle artikli juurde. Veelgi parem, kui märkused võite jätta allpool toodud kommentaaridesse, saame edasi arutada.

Kui te pole seda veel mõistnud, annaks ülaltoodud treeningu lõpptulemus oluliselt erinevad tulemused. Enda konkreetse tausta jaoks võiksin tõesti süveneda API disaini ja taustainfrastruktuuri. Tõenäoliselt uurin oma kogemuste tõttu ka iPhone-iga seotud probleeme. Räägin sellest, kuidas klient suhtleb keskmise astme lõpp-punktidega, kuidas logimine toimiks, kuidas kujundada taustaprogramm tööaja tagamiseks jne.

Need on üsna huvitavad arutelud, mida saate kolleegiga pidada, ja see on väga tugev signaal, mida intervjueerija otsib.

Kasutage oma tausta oma eeliseks

Sageli näen insenere, kes üritavad aru saada, mida intervjueerija proovib küsida, ja pakuvad seejärel nende vastuseid ootustele vastavaks.

Ma tegelikult hoian kedagi seda tegemast väga mitmel põhjusel:

  1. Kõigil on ainulaadne taust. Süsteemidisaini intervjuus on see teile võimalus näidata, millised on teie tugevused. Ärge raisake võimalust, üritades aru saada, mida keegi teine ​​sinult oodata võib.
  2. Intervjueerija oleks võib-olla teie vastustele noogutanud, kuid nad oleks võinud teada, et ajate lihtsalt teed läbi ja ei mõtle tegelikult probleemile.

Teie kogemus ja taust võivad järgmisest kandidaadist väga erineda. Tood lauale väärtuste ja asjatundlikkuse komplekti, mida keegi teine ​​ei saa. See teebki teid väärtuslikuks ja asendamatuks. Sõltumata sellest, mis valdkonnas te viibite, hoolivad inimesed sellest, mida saate lauale tuua.

Probleemiga süstemaatiliselt tegeleda

Nüüd, oma teadmisi silmas pidades, on mitu asja, mille üle uue süsteemi väljatöötamisel mõtlen. Soovitan tungivalt sõnastada enda jaoks ka kriteeriumide või sammude komplekt.

Mõned asjad, mis mul uue süsteemi kallal töötades on järgmised:

  • Mis on süsteemi eesmärk?
  • Kes on süsteemi kasutajad?
  • Millise skaalaga me töötame?
  • Kas see on uus / vana süsteem? Kuidas toimetame versioonimisega?

Teiste hulgas…

Vaadake, minu kriteeriumikomplekt erineb tipptasemel inseneri kriteeriumide komplektist. Ma kasutan neid kriteeriume, et oma peas pilt sõnastada, ja need juhendavad minu otsustusprotsessi.

Nende küsimuste vastustega relvastatuna saan hakata tegelema käsitletava probleemiga ja jagada see süstemaatiliselt üksikuteks osadeks.

Hea harjutus, mis mulle meeldib teha, on see, kuidas kujundada kohvi tellimissüsteem. Mõtlesin selle peale ühel päeval Starbucksis istudes ja mõistsin, et oleks tore, kui saaksin oma telefonist smuuti tellida ja selle kohalikust Starbucksist kätte saada.

Minu mõte hakkas liikuma mitmes suunas:

  • Mida see kohvi tellimise masin teeb?
  • Kui selle ehitan, kas ma saan seda Starbucksile müüa või saan selle valgeks sildistada ja teenusena müüa?
  • Kui palju kasutajaid pean toetama, kui müün selle Starbucksile?
  • Teise võimalusena, kui ma selle valges sildis märkan, kas saan liidese müüa oma kohvitellimisteenusele ja siis aidata klientidel luua taustaprogramm, et nad saaksid tellimusi oma kohalikes masinates säilitada?
Kuidas sellele probleemile läheneda?

Kui olen neile küsimustele vastused saanud, saan lõpuks moodustada täieliku pildi sellest, mida mu kohvi tellimisteenus teeb. Minu kohviteenuste tellimise teenuse versioon näeks välja järgmine:

Minu kohvitellimisteenus on tarkvara kui teenus (SAAS). See pakub erinevatele partneritele liidese, millesse saab ühendada.

  • Sellel on API, mida nimetatakse addCoffeeForMerchant, mis lisab kohvi nime, kohvi hinna ja kohvi koostisosad.
  • Sellel on GET API nimega getCoffeesForMerchant, mis tagastab antud kaupmehe ID kohvide loendi.
  • Kaupmehe ID on unikaalne identifikaator (UUID), mis genereeritakse mõnda räsimehhanismi kasutades, mida saab kliendiga täiendavalt selgitada.
  • Tarkvara on optimeeritud kirjutuskaitstud toimingute jaoks, kuna enamik minu kliente loob oma menüü üks kord ja loeb seda terve päeva jooksul mitu korda.
  • Sellel on vahemälumehhanism, mis kasutab väljaviimisstrateegiat Vähim hiljuti kasutatud (LRU), sest kui menüüelementi pole mõnda aega tellitud, siis ei huvita mind klient, kas ta kuvab menüüs pisut aeglasemalt.
  • Kui üks andmemahtudest purskab ennast, reprodutseerib minu kohvitellimisteenus andmeid erinevate klastrite lõikes kogu USA lääne- ja idarannikul, kuna sihin ainult USA turgu.

Samuti on suure tõenäosusega võimalik kasutada ka muid kohvi tellimisteenuseid. See on lihtsalt küsimus, mida te optimeerite. Ma arvan, et need on väga huvitavad probleemid ja mõistuse hoidmiseks on see suurepärane vaimne harjutus.

Hoidke oma märkmeid

Tarkvarainsenerina on see lõputu õppimisprotsess. Soovitan märkmete tegemiseks kasutada kas Evernote'i või Moleskini. Isiklikult on mul kaasas väike märkmik kiirete ideede jaoks, mille pean kirja panema, ja hoian Evernote'is mitmesuguseid muid asju, kui vähegi võimalik.

Minu Evernote'is on sülearvuti nimega “Programming”. Kui ma satun kokku millegi uue või huvitavaga, kirjutan selle oma märkmikusse täiendavaks tutvumiseks.

Käin läbi ja määran neile uutele märkmetele sildid kord kuus või kord kvartalis, et veenduda märkmete korrastatuses. Näiteks on mul silt “Kujundus” kõigele, mis on seotud süsteemi kujundamisega. See võib olla midagi linki YouTube'i videole, mis oli minu arvates huvitav, või huvitav argument, mille esitas mu töökaaslane ja mille peale ma polnud mõelnud.

See on näide sellest, kuidas üks minu märkmetest välja näeb:

Vabandame halva grammatika ja kirjavigade pärast: lk

Üks asi, mida ma hiljuti töökaaslaselt õppisin, on see, et NoSQL sobib suurepäraselt prototüüpide loomiseks, kuna pole vaja teiste meeskondadega skeemiarutelusid läbida. Kui soovisin skeemi muuta, saan seda NoSQL-i andmebaasiga tõesti kiiresti teha. See oli võtmetähtsusega tööst õppimine, mille sisestasin märkmikusse „Programmeerimine“.

Jaotan oma märkused järgmiselt:

  1. Süsteemide kujundus
  2. Intervjuud (kogemus + ülevaade erinevatest intervjuudest, mis mul on varem olnud, jaotatud ettevõtte nime järgi)
  3. Juhuslikud korrektsed bitid, CS hea teada, näiteks kasulikud bash-skriptid või käsuridade näpunäited
  4. Lugemised / YouTube'i videod

Kõik ülaltoodud märkused asuvad jaotises Programmeerimine. Aja jooksul leian, et mul on pseudo-organiseeritud kollektsioon asju, mida ma olen varem lugenud või uurinud.

Nagu keegi, kes mind isiklikult tunneb, pole ma eriti organiseeritud inimene. Seega olen kogunud vaid 10–15% asjadest, seega on seal veel palju teha.

Teadmised ja praktika käivad käsikäes süsteemide kavandamise paremaks muutmisel. Kui teile tundub, et teie praegune töö ei anna teile võimalust süsteemide kavandamiseks, siis peaksite leidma sellise, mis seda teeb, või proovima kujundada olemasoleva arhitektuuri ühe väikese osa nii, et see oleks kas kiirem, odavam, robustsem, või mida on tulevikus lihtsam muuta.

Ressursid, mida soovitan

Tutvustus: Arhitektuur ja süsteemidisainilahendused - Suurepärane Youtube'i õpetus endiselt Facebooki-insenerilt, kuidas läheneda süsteemide kavandamise probleemidele.

Andmemahukate rakenduste kujundamine - veel üks hea ressurss mõõtkava kujundamise õppimiseks. See räägib mitmesugustest asjadest, mida tüüpiline tarkvarainsener peab enesestmõistetavaks - kuidas andmebaasid (mySQL ja noSQL) töötavad, millal neid kasutada, mitmesuguste tehnikate plussid ja miinused skaala käsitlemiseks jne. Soovitan seda tungivalt

Võltsintervjuud - intervjuudeks valmistumisel on äärmiselt kasulik simuleeritud keskkond, mis jäljendab tegelikku intervjuud. Kui leiate sõbra, kes teeks seda teie heaks, siis soovitan seda tungivalt. Samuti korraldan pilk-intervjuusid, nii et kui olete huvitatud, pöörduge julgesti minuni saidil zhiachong.com!

Mida peaks iga tarkvarainsener teadma reaalajas andmete ühendava abstraktsiooni kohta - väga pikk ja tehniline arutelu logide, kompromisside üle. Ma pole seda veel lõpetanud, kuid seda soovitab töökaaslane.

Evernote - parim märkmete salvestamise rakendus, mida olen kasutanud. Evernote'i kõige paremaks kasutamiseks on palju õpetusi. Ma pole neid veel läbi elanud lihtsalt seetõttu, et kasutan seda lihtsalt märkmikuna. Ma login sinna kõik õpitud ja siis aeg-ajalt neid läbi ja korraldan uuesti.

Moleskini märkmik - ma tõesti naudin seda. Selle kvaliteet on äärmiselt kõrge. Hind on pisut kõrgem, kuid kuna kasutan seda igapäevaselt, pean seda heaks investeeringuks. Ilusa märkmiku hoidmine iga päev minu kätes paneb mind rohkem põnevust kirjutama.

Pilot G2 (must) - hõlpsalt parimad pastapliiatsid, mida ma kunagi kasutanud olen, ja ainsad pastakad, mida kasutan. Ostan neid lahtiselt Amazonist ja hoian neid igal pool, kus käin. Mul on üks seljakotis, üks kontoris ja üks kodukontoris, nii et mul on alati sulepea. See kirjutab suurepäraselt, tint voolab sujuvalt ja ma lihtsalt armastan seda kirjutades. Koos Moleskiniga tahan vahel lihtsalt G2-d korjata, et seal juhuslikke asju kirjutada, sest need kaks on koos nii ideaalsed.

Süsteemikujundusintervjuu muutmine - see tuleb sõprade soovitusel. See on veebikursus, mis õpetab hajutatud süsteemi üksikasjalikult kavandama. See on aga 79 dollarine kursus. Seal on meeskonnahinnad. Kui on huvi, uurin nendega, kas on võimalik moodustada grupp grupisoodustuse saamiseks.

Jälgi mind Twitteris, Facebookis ja LinkedInis. Liituge oma meililistiga, kuhu saadan regulaarselt näpunäiteid, näpunäiteid ja tööstusalaseid teadmisi.

Kui teile see artikkel meeldis, kommenteerige allpool: mis on teie nipp skaleeritava ja usaldusväärse süsteemi loomiseks?