Съдържание[Крия][Покажи]
- 1. Какво разбирате под системен дизайн?
- 2. Кои са най-важните характеристики на системния дизайнер?
- 3. Какво точно представлява CAP теоремата?
- 4. Какво разбирате под балансиране на натоварването?
- 5. Каква е разликата между асинхронното програмиране и паралелното програмиране?
- 6. Каква е разликата между хоризонтално и вертикално мащабиране?
- 7. Какво точно имате предвид под латентност, пропускателна способност и наличност на системата?
- 8. Какво представляват свойствата на ACID?
- 9. Какво точно е шардинг?
- 10. Какво е CDN?
- 11. Защо да използвате CDN?
- 12. Каква е разликата между шардинг и разделяне?
- 13. Какво точно е кеширането?
- 14. Какво представляват CDN периферните сървъри?
- 15. Какви са различните модели на съгласуваност за системен дизайн?
- 16. Какво имате предвид под оптимистично заключване?
- 17. Какво точно имате предвид под „избор на лидер“?
- 18. Какъв е вашият подход за проектиране на услуга за съкращаване на URL адреси, подобна на TinyURL?
- 19. Какъв е вашият подход към проектирането на twitter?
- 20. Създайте системата за новини за Facebook
- 21. Какво е свойство BASE на системата?
- 22. Какво представлява балансирането на натоварването с техниката за афинитет на IP адрес?
- 23. Какво точно представляват алгоритмите за замяна на кеша (или политика за изгонване)?
- 24. Какво точно имате предвид под разпределена транзакция?
- 25. Какво точно е гладуването?
- Заключение
Преди да започнете, препоръчваме да прочетете нашите въвеждащо ръководство за системен дизайн за да опресните фундаменталните си знания.
Когато интервюирате за позиция, която изисква познания по системен дизайн, имате шанса да говорите за своя опит и да демонстрирате способността си да разработвате сложни системи.
Когато говорите с потенциален работодател, начинът, по който изразявате своя опит, може да ви помогне да демонстрирате, че сте компетентен кандидат за позицията.
Можете да се подготвите за вашето интервю за работа, като научите основни концепции за дизайн и помислите как ще отговорите на запитвания за тях. В тази публикация ще разгледаме някои типични въпроси и отговори на интервю за проектиране на система, за да ви помогнем да се подготвите за следващото си интервю.
1. Какво разбирате под системен дизайн?
Процесът на установяване на системни характеристики, включително модули, архитектура, компоненти и техните интерфейси и данни, базирани на предварително определени критерии, е известен като системен дизайн.
Това е процесът на дефиниране, създаване и проектиране на системи за постигане на специфичните цели и задачи на компанията или организацията. Системният дизайн е по-скоро системен анализ, архитектурни модели, API, дизайнерски модели и слепването на всичко това, отколкото кодирането.
2. Кои са най-важните характеристики на системния дизайнер?
- Потребителско взаимодействие
- Извикване на външен API
- Офлайн процеси
3. Какво точно представлява CAP теоремата?
Съгласно теоремата за CAP (консистенция-наличност-толерантност на дялове), една разпределена система не може да гарантира C, A и P едновременно. Може да предостави най-много две от трите гаранции. Нека използваме разпределена система от бази данни, за да ни помогне да разберем това.
- Съгласуваност: Това указва, че данните трябва да останат съгласувани, след като транзакцията на базата данни е завършена. Например, всички заявки трябва да връщат един и същ отговор след актуализация на базата данни.
- Наличност: Базите данни трябва да са налични и да реагират по всяко време.
- Толерантност към дялове: Дори ако комуникацията стане проблематична, системата от бази данни трябва да продължи да работи.
4. Какво разбирате под балансиране на натоварването?
Балансиране на натоварването е процесът на ефективно разпръскване на входящия трафик между набор от сървъри в задната част. Те се наричат сървърни пулове. Съвременните уебсайтове са създадени да обработват милиони запитвания от клиенти и да отговарят на тях бързо и надеждно. Ще са необходими повече сървъри, за да се справят с тези изисквания.
В този случай е изключително важно трафикът на заявките да се раздели ефективно между всеки сървър, за да се избегне претоварването им. Устройството за балансиране на натоварването функционира като трафик полицай, прихваща заявки и ги насочва между наличните сървъри, така че нито един сървър да не бъде претоварен, което потенциално влошава производителността на приложението.
5. Каква е разликата между асинхронното програмиране и паралелното програмиране?
Когато изпълнявате нещо асинхронно, това означава, че не е нужно да чакате да приключи, преди да можете да продължите към нещо друго. Паралелизмът се отнася до едновременното изпълнение на много задачи.
Когато можете да разделите работните места на различни части от труда, паралелизмът работи ефективно. Async и Callbacks са средство (инструмент или механизъм) за представяне на едновременност, т.е. група от обекти, които могат да комуникират и споделят ресурси.
6. Каква е разликата между хоризонтално и вертикално мащабиране?
Добавянето на ново компютърно оборудване към мрежа, която разпределя търсенето на обработка и памет в разпръсната мрежа от устройства, се нарича хоризонтално мащабиране. Казано по-просто, към текущия пул се добавят нови сървърни екземпляри и трафикът се разпределя ефективно между тези устройства.
Вертикалното мащабиране се отнася до идеята за разширяване на ресурсния капацитет на един компютър чрез добавяне на RAM, ефективни процесори или мигриране към нова машина с по-висок капацитет. Функционалността на сървъра може да бъде увеличена, без да са необходими промени в програмирането.
7. Какво точно имате предвид под латентност, пропускателна способност и наличност на системата?
Производителността е съществен аспект от дизайна на системата, тъй като допринася за скоростта и надеждността на нашите услуги. Трите най-важни мерки за ефективност са както следва:
- Времето, необходимо за доставяне на едно съобщение в милисекунди, се нарича латентност.
- Количеството данни, успешно прехвърлени през система за определен период от време, се нарича пропускателна способност. За измерването му се използват битове в секунда.
- Времето, през което системата е на разположение, за да реагира на заявки, се определя от нейната наличност. System Uptime / (System Uptime+Downtime) е формулата за изчисляването му.
8. Какво представляват свойствата на ACID?
- Атомност: Гарантира, че промените в базата данни са или всички, или никакви.
- Съгласуваност: Стойностите на данните в базата данни са съгласувани.
- Изолация: Отнася се до разделянето на две транзакции.
- Устойчивост: Данните се запазват дори ако сървърът се повреди.
9. Какво точно е шардинг?
Шардингът е техниката за разделяне на огромен логически набор от данни в много бази данни. Отнася се и за хоризонтално разделяне на данни, тъй като данните ще се съхраняват на няколко компютъра. В резултат на това една споделена база данни може да обработва повече заявки, отколкото единичен огромен компютър.
10. Какво е CDN?
Мрежата за доставка на съдържание е световна мрежа от компютри, които си сътрудничат, за да предоставят бързо интернет информация. Той позволява бързо доставяне на елементи като HTML страници, JavaScript файлове, таблици със стилове, снимки и видеоклипове, които са необходими за зареждане на интернет съдържание.
11. Защо да използвате CDN?
- Като се има предвид, че статичните ресурси съставляват около 80% от уебсайта, приемането на CDN значително намалява напрежението върху първоначалния сървър.
- Тъй като има по-малко разстояние за пътуване, информацията ще бъде предоставена по-бързо на собствениците на уебсайтове, които имат посетители от много географски области.
- Потребителите на CDN също се възползват от капацитета за бързо мащабиране нагоре и надолу в отговор на скокове на трафика.
12. Каква е разликата между шардинг и разделяне?
Шардинг на база данни – Шардинг на база данни е метод за разделяне на единичен набор от данни в множество бази данни, така че да може да се съхранява на различни работни станции. По-големите набори от данни могат да бъдат разделени на по-малки части и съхранени в няколко възела за данни, увеличавайки общия капацитет за съхранение на системата.
Чрез разпространение на данните в много машини, споделена база данни може да обработва повече заявки от една система.
Разделянето на база данни е процес на разделяне на съхранени обекти на база данни (таблици, индекси и изгледи) на отделни части. За да се увеличи контролируемостта, производителността и наличността, големите обекти на базата данни са разделени.
В някои случаи разделянето може да подобри скоростта при достъп до разделени данни. Разделянето може да намали размера на индекса и да увеличи шанса за намиране на най-необходимите индекси в паметта, като действа като водеща колона в индексите.
13. Какво точно е кеширането?
Кеширането е техниката за съхраняване на копия на файлове във временно хранилище, известно като кеш, което ускорява достъпа до данни и намалява забавянето на сайта. Само определено количество данни може да се съхранява в кеша.
В резултат на това определянето на техники за актуализиране на кеша, които са най-подходящи за бизнес целите, е от решаващо значение.
14. Какво представляват CDN крайните сървъри?
CDN сървърите, които кешират материал, придобит от вашия първоначален сървър или клъстер за съхранение, са известни като крайни сървъри. Точка на присъствие е термин, който често се използва за описание на крайни сървъри (POP).
Крайните сървъри са физически позиционирани на POP. При този POP информацията може да бъде кеширана от много крайни сървъри.
Възможността за предоставяне на секции от уебсайт от няколко места намалява разстоянието между посетителя и уеб сървъра, което води до по-ниска латентност. Крайните CDN сървъри постигат точно тази цел.
15. Какви са различните модели на съгласуваност за системен дизайн?
Всяка заявка за четене трябва да извлича най-скоро записаните данни, съгласно теоремата на CAP. Когато има достъп до много копия на данни, синхронизирането им, така че клиентите да получават непрекъснато свежи данни, се превръща в трудност. Следните са възможните модели на последователност:
- Слаба последователност: След запис на данни заявката за четене може или не може да получи актуализираните данни. Това ниво на стабилност е идеално за приложения в реално време като VoIP, видео чат и мултиплейър игри.
- Евентуална последователност: Reads в крайна сметка ще види най-новите данни в рамките на милисекунди след записването на данните. В този случай данните се дублират асинхронно. DNS и имейл системите са примери за това. Това работи ефективно в системи с висока наличност.
- Силна последователност: След запис на данни бъдещите читатели ще видят най-новите данни. В този случай данните се копират синхронно. Това може да се наблюдава в RDBMS и файлови системи, които са подходящи за трансфер на данни.
16. Какво имате предвид под оптимистично заключване?
Оптимистичното заключване е механизъм, при който четете запис, отбелязвате номер на версия (алтернативните начини включват дати, времеви клейма или контролни суми/хешове) и след това проверявате отново дали версията не се е променила, преди да я запишете обратно.
Когато записвате обратно записа, използвате версията, за да филтрирате актуализацията, за да сте сигурни, че е атомарна. (т.е. не е променен между момента, в който проверявате версията и момента, в който записвате записа на диска) и го актуализирайте наведнъж.
17. Какво точно имате предвид под „избор на лидер“?
В разпределена система с множество сървъри, допринасящи за наличността на приложението, може да има моменти, когато само един сървър е отговорен за актуализирането на API на трети страни, тъй като множество сървъри могат да причинят проблеми при използването на API.
Този сървър е известен като основен сървър, а процедурата за избора му е известна като избор на лидер. Когато водещият сървър се провали в разпределена система, сървърите трябва да забележат повредата и да изберат нов лидер. Използвайки техника на консенсус, този подход е най-подходящ за приложения с висока наличност и силна последователност.
18. Какъв е вашият подход за проектиране на услуга за съкращаване на URL адреси, подобна на TinyURL?
TinyURL трансформира дълъг URL адрес в единичен, уникален кратък URL адрес. Тези технологии могат също да приемат кратък URL адрес и да връщат пълния URL адрес.
Кои са някои от най-важните качества?
- Направете URL, който е по-кратък от оригинала.
- Запазете по-дългия URL адрес и го заменете с по-късия.
- Разрешете пренасочване в кратки URL адреси.
- Поддържат се кратки URL адреси с персонализирани имена.
- Обработвайте няколко запитвания наведнъж.
Кои са най-разпространените проблеми?
- Как следите съхранението на базата данни?
- Какво се случва, ако потребителското натоварване надхвърли очакванията?
- Ами ако двама души използват един и същ персонализиран URL адрес?
Обмислете следните предложения:
- Хеширането е понятие, което може да се използва за свързване на стари и нови URL адреси.
- REST API може да се използва за обработка на комуникация отпред и балансиране на тежкия товар.
- Многонишковостта е идея, която ви позволява да обработвате няколко заявки наведнъж.
- Оригиналните URL адреси се съхраняват в NoSQL бази данни.
19. Какъв е вашият подход към проектирането на twitter?
Дадени изисквания:
- Изпращане на туитове
- Следване на други потребители
- Емисия с туит/новини
- Системата е мащабируема
- Натоварва бързо
- Системата е надеждна
Можете да започнете да измисляте вашия Twitter API дизайн, когато установите критериите. Ето как ще изглежда:
Като начало ще скицираме ключовите крайни точки на API. Ето няколко примера:
- изпрати туит(съобщение)
- followUser(userID)
- unfollowUser(userID)
- getFeed(страница)
Архитектурата, която ще позволи тези характеристики, може да бъде скицирана. Можем да започнем с потребителя, който изпраща заявка към сървъра. Можем да инсталираме допълнителни API сървъри зад балансьор на натоварването, за да подпомогнем насочването на по-големи нива на трафик, за да изпълним необходимостта от мащабируемост. Сега ще трябва да добавим база данни, за да съхраняваме нашите туитове.
Важно е да запомните, че API, който предоставяме, трябва да бъде мащабируем. За да направим тази услуга мащабируема, можем да накараме един от нашите API сървъри да чете от отделен кеш за нашата емисия с новини. Докато правим това, ние също трябва да използваме доставчик на емисии, за да поддържаме нашия кеш на емисии актуален.
20. Създайте системата за новини за Facebook
Информационният канал във Facebook позволява на потребителите да виждат какво се случва в кръговете на техните приятели, любимите страници и организациите, които са следвали.
Кои са някои от основните характеристики?
- Създайте емисия с новини въз основа на публикации от други системни обекти, които потребителят следва.
- Текст, снимки, аудио и видео могат да се използват в публикациите в Newsfeed.
- В реално време добавете свежо съдържание към информационния канал на потребителя.
Кои са някои от най-често срещаните проблеми?
- Какво ще стане, ако новата публикация отнеме много време, за да се появи в емисия новини?
- Може ли алгоритъмът да управлява скок в потребителската активност?
- Какви публикации трябва да се показват първи в емисията с новини?
Обмислете следните предложения:
- Разгледайте механизма за разпределяне на публикации за последователи.
- Проучете как шардингът може да се използва за ефективно справяне с големи потребителски натоварвания.
- Данните за емисиите на потребителя не трябва да се дублират в множество сървъри. Вместо това шардингът може да се извърши въз основа на потребителски идентификатори.
21. Какво е свойство BASE на системата?
Функциите BASE са повсеместни в базите данни NoSQL, които наскоро се появиха. Системата BASE не осигурява последователност, съгласно теоремата на CAP. Това е измислен акроним, който съответства на следното свойство на системата на CAP теоремата:
- Терминът „основно наличен“ означава, че системата ще бъде достъпна по всяко време.
- Мекото състояние означава, че състоянието на системата може да варира с течение на времето, дори ако не е предоставен вход. Това се дължи най-вече на евентуалната последователност на модела.
- Като се има предвид, че системата не получава входни данни през този период, евентуалната последователност означава, че системата ще стане последователна с течение на времето.
22. Какво представлява балансирането на натоварването с техниката за афинитет на IP адрес?
Друг важен метод за балансиране на натоварването е афинитетът на IP адрес. При този метод IP адресът на клиента е свързан със сървърен възел. Един сървърен възел обработва всички заявки от клиентски IP адрес.
Този метод е лесен за изпълнение, тъй като IP адресът е винаги достъпен в заглавката на HTTP заявката и не са необходими допълнителни настройки. Ако има вероятност вашите клиенти да имат деактивирани бисквитки, тази форма на балансиране на натоварването може да бъде от полза.
23. Какво точно представляват алгоритмите за замяна на кеша (или политика за изгонване)?
Кеш алгоритмите (известни също като алгоритми за замяна на кеша, правила за замяна на кеша или правила за изваждане на кеша) са инструкции за оптимизация или алгоритми, които компютърна програма или хардуерно поддържана структура може да използва за управление на кеш от данни, съхранени на компютъра.
Кеширането повишава скоростта, като съхранява наскоро използвани или често достъпни данни в региони на паметта, които са по-бързи или по-евтини за достъп от традиционното съхранение на памет. Когато кешът е пълен, алгоритъмът трябва да реши кои елементи да премахне, за да направи място за нови.
24. Какво точно имате предвид под разпределена транзакция?
Разпределена транзакция е всяко обстоятелство, при което едно събитие причинява промяна на два или повече отделни източника на данни, които не могат да бъдат ангажирани атомарно.
В света на микроуслугите става много по-сложно, тъй като всяка услуга е единица работа и през повечето време множество услуги трябва да си сътрудничат, за да направят един бизнес успешен.
25. Какво точно е гладуването?
Когато една нишка не може да получи редовен достъп до споделени ресурси, се казва, че гладува. Това се случва, когато „алчни“ нишки или нишки с по-висок „приоритет“ правят споделените ресурси недостъпни за дълги периоди от време.
Помислете за обект, който предоставя синхронизиран метод, който често се връща със закъснение. Ако една нишка многократно извиква този метод, други нишки, които изискват чест синхронизиран достъп до същия обект, често ще бъдат блокирани.
Заключение
Сесията за мозъчна атака е всичко, което включва интервюто за проектиране на системата. В тази публикация разгледахме най-често срещаните въпроси за интервю за системен дизайн.
Цялостното разбиране на метода, който използвате, когато създавате конкретна система, е от решаващо значение за преминаване на интервю за системен дизайн.
Оставете коментар