Мазмуну[Жашыруу][Көрсөтүү]
- 1. Системанын дизайны дегенди эмнени түшүнөсүз?
- 2. Системалык конструктордун эң маанилүү мүнөздөмөлөрү кайсылар?
- 3. САП теоремасы так эмне?
- 4. Жүктүн тең салмактуулугу дегенди эмнени түшүнөсүз?
- 5. Асинхрондук программалоо менен параллелдүү программалоонун ортосунда кандай айырма бар?
- 6. Горизонталдык жана вертикалдуу масштабдын айырмасы эмнеде?
- 7. Кечирүү, өткөрүү жөндөмдүүлүгү жана системанын жеткиликтүүлүгү дегенди эмнени түшүнөсүз?
- 8. КИСИДдин касиеттери кандай?
- 9. Шардинг деген эмне?
- 10. CDN деген эмне?
- 11. Эмне үчүн CDN керек?
- 12. Бөлүү менен бөлүү ортосунда кандай айырма бар?
- 13. Кэштөө деген эмне?
- 14. CDN жээк серверлери деген эмне?
- 15. Системаны долбоорлоо үчүн Консистенциянын кандай үлгүлөрү бар?
- 16. Оптимисттик кулпу деп эмнени түшүнөсүз?
- 17. «Лидер шайлоо» дегенди так эмнени түшүнөсүз?
- 18. TinyURL сыяктуу URL кыскартуу кызматын долбоорлоодо сиздин мамилеңиз кандай?
- 19. Твиттерди долбоорлоого кандай мамиле жасайсыз?
- 20. Facebook үчүн жаңылыктар лентасын түзүңүз
- 21. Системанын BASE касиети деген эмне?
- 22. IP дарегин Affinity техникасы менен жүктү балансташтыруу деген эмне?
- 23. Кэшти алмаштыруу (же чыгаруу саясаты) алгоритмдери кандай?
- 24. Бөлүштүрүлгөн транзакция деп так эмнени түшүнөсүз?
- 25. Ачкачылык деген эмне?
- жыйынтыктоо
Баштоодон мурун, биз окууну сунуштайбыз Системалык дизайн боюнча киришүү колдонмо фундаменталдык билимиңизди жаңылоо үчүн.
Системалык дизайн боюнча билимди талап кылган кызматка интервью берип жатканда, сиз өзүңүздүн тек-жайыңыз жөнүндө сүйлөшүп, татаал системаларды иштеп чыгуу жөндөмүңүздү көрсөтүүгө мүмкүнчүлүк аласыз.
Потенциалдуу иш берүүчү менен сүйлөшкөндө, өзүңүздүн тажрыйбаңызды билдирүү ыкмасы сизге кызматка компетенттүү талапкер экениңизди көрсөтүүгө жардам берет.
Негизги дизайн концепцияларын үйрөнүү жана алар тууралуу суроолорго кандай жооп берериңиз жөнүндө ойлонуп, жумуш интервьюңузга даярдансаңыз болот. Кийинки маегиңизге даярданууга жардам берүү үчүн биз бул постто кээ бир типтүү система дизайн интервью суроолорун жана жоопторун карап чыгабыз.
1. Системанын дизайны дегенди эмнени түшүнөсүз?
Системалык мүнөздөмөлөрдү түзүү процесси, анын ичинде модулдар, архитектура, компоненттер жана алардын интерфейстери жана алдын ала аныкталган критерийлерге негизделген маалыматтар системалык дизайн деп аталат.
Бул компаниянын же уюмдун конкреттүү максаттарына жана милдеттерине жооп берүү үчүн системаларды аныктоо, түзүү жана долбоорлоо процесси. Системанын дизайны коддоого караганда системанын анализи, архитектуралык үлгүлөрү, API'лери, дизайн үлгүлөрү жана алардын бардыгын бириктирүү жөнүндө.
2. Системалык конструктордун эң маанилүү мүнөздөмөлөрү кайсылар?
- Колдонуучунун өз ара аракеттенүүсү
- Тышкы API чалуу
- Оффлайн процесстер
3. САП теоремасы так эмне?
CAP (Consistency-Availability-Partition Tolerance) теоремасына ылайык, бөлүштүрүлгөн система бир эле учурда C, A жана Pти камсыздай албайт. Ал эң көп дегенде үч кепилдиктин экөөсүн гана бере алат. Муну түшүнүүгө жардам берүү үчүн бөлүштүрүлгөн маалымат базасын колдонолу.
- Ырааттуулук: Бул маалымат базасы транзакциясы аяктагандан кийин маалыматтар ырааттуу болушу керек экенин көрсөтөт. Мисалы, бардык сурамдар маалымат базасын жаңырткандан кийин бирдей жооп кайтарышы керек.
- Жеткиликтүүлүк: Маалымат базалары ар дайым жеткиликтүү жана жооп берүүгө тийиш.
- Бөлүү толеранттуулук: Байланыш көйгөйлүү болуп калса да, маалымат базасы системасы иштей бериши керек.
4. Жүктүн тең салмактуулугу дегенди эмнени түшүнөсүз?
груз салмак бир катар серверлердин ортосунда кирүүчү трафикти эффективдүү таратуу процесси. Бул сервердик бассейндер деп аталат. Заманбап веб-сайттар кардарлардын миллиондогон суроо-талаптарын чечүү жана аларга тез жана ишенимдүү жооп берүү үчүн курулган. Бул талаптарды аткаруу үчүн көбүрөөк серверлер керек болот.
Бул учурда, аларды ашыкча жүктөөнү болтурбоо үчүн, суроо-талап трафигин ар бир сервердин ортосунда натыйжалуу бөлүштүрүү маанилүү. Жүктөлгөн баланс түзүүчү жол полициясынын милдетин аткарып, суроо-талаптарды кармап, аларды жеткиликтүү серверлер арасында багыттап, эч бир серверге ашыкча жүк түшпөйт, бул колдонмонун иштешин начарлатышы мүмкүн.
5. Асинхрондук программалоо менен параллелдүү программалоонун ортосунда кандай айырма бар?
Кандайдыр бир нерсени асинхрондуу иштеткенде, башка нерсеге өтүүдөн мурун анын бүтүшүн күтүүнүн кереги жок дегенди билдирет. Параллелдүүлүк көп иштердин бир убакта аткарылышын билдирет.
Жумуштарды ар кандай эмгек бөлүктөрүнө бөлсөңүз, параллелизм натыйжалуу иштейт. Асинхрондоштуруу жана кайра чалуулар - бул параллелдүүлүктү көрсөтүүчү каражат (курал же механизм), б.а. ресурстарды байланыштырып, бөлүшө алган субъектилердин тобу.
6. Горизонталдык жана вертикалдуу масштабдын айырмасы эмнеде?
Түзмөктөрдүн дисперстүү тармагы боюнча иштетүү жана эстутум суроо-талаптарын тараткан тармакка жаңы эсептөө жабдууларын кошуу горизонталдык масштабдоо деп аталат. Жөнөкөй сөз менен айтканда, учурдагы бассейнге жаңы сервер инстанциялары кошулуп, трафиктин жүгү бул түзмөктөрдүн ортосунда натыйжалуу бөлүштүрүлөт.
Вертикалдуу масштабдоо оперативдүү эстутум, эффективдүү процессорлорду кошуу же кубаттуулугу жогору жаңы машинага өтүү аркылуу бир компьютердин ресурстук сыйымдуулугун кеңейтүү түшүнүгүн билдирет. Сервердин функционалдуулугу эч кандай программалык өзгөрүүлөрдү талап кылбастан көбөйтүлүшү мүмкүн.
7. Кечирүү, өткөрүү жөндөмдүүлүгү жана системанын жеткиликтүүлүгү дегенди эмнени түшүнөсүз?
Аткаруучулук системаны долбоорлоонун маанилүү аспектиси болуп саналат, анткени ал биздин кызматтардын ылдамдыгына жана ишенимдүүлүгүнө салым кошот. Эң маанилүү үч көрсөткүчтөр төмөнкүдөй:
- Бир билдирүүнү миллисекунд менен жеткирүүгө кеткен убакыт кечигүү деп аталат.
- Белгилүү бир убакыт аралыгында система аркылуу ийгиликтүү өткөрүлүп берилген маалыматтардын көлөмү өткөрүү жөндөмдүүлүгү деп аталат. Аны өлчөө үчүн секундасына бит колдонулат.
- Системанын суроо-талаптарга жооп берүү убактысы анын жеткиликтүүлүгү менен аныкталат. Системанын иштөө убактысы / (Системанын иштөө убактысы+Жөнөкөй убакыт) аны эсептөө формуласы.
8. КИСИДдин касиеттери кандай?
- Atomicity: Бул маалымат базасын өзгөртүүлөр же баары же эч ким экенине кепилдик берет.
- Ырааттуулук: Маалыматтар базасындагы маалымат баалуулуктары ырааттуу.
- Изоляция: Бул эки бүтүмдүн бөлүнүшүн билдирет.
- Узактыгы: Сервер иштебей калса да маалыматтар сакталат.
9. Шардинг деген эмне?
Sharding - бул чоң логикалык маалымат топтомун көптөгөн маалымат базаларына бөлүү ыкмасы. Бул ошондой эле горизонталдуу маалыматтарды бөлүштүрүүнү билдирет, анткени маалыматтар бир нече компьютерде сакталат. Натыйжада, жалпы маалымат базасы бир чоң компьютерге караганда көбүрөөк суроону чече алат.
10. CDN деген эмне?
Мазмун жеткирүү тармагы - бул интернет маалыматын тез камсыз кылуу үчүн кызматташкан компьютерлердин бүткүл дүйнөлүк тармагы. Бул HTML баракчалары, JavaScript файлдары, стилдер жадыбалдары, сүрөттөр жана Интернет мазмунун жүктөө үчүн керектүү видеолор сыяктуу элементтерди тез жеткирүүгө мүмкүндүк берет.
11. Эмне үчүн CDN керек?
- Статикалык ресурстар веб-сайттын болжол менен 80% түзөрүн эске алганда, CDNди кабыл алуу баштапкы сервердеги штаммды бир топ азайтат.
- Саякатка азыраак аралык болгондуктан, көптөгөн географиялык аймактардан келген коноктору бар веб-сайт ээлерине маалымат тезирээк берилет.
- CDN колдонуучулары трафиктин көбөйүшүнө жооп катары тез масштабда жана төмөндөтүү мүмкүнчүлүгүнөн да пайда алышат.
12. Бөлүү менен бөлүү ортосунда кандай айырма бар?
Берилиштер базасын бөлүү - Берилиштер базасын бөлүү - бул бир маалымат топтомун ар кандай жумушчу станцияларда сактоо үчүн көптөгөн маалымат базаларына бөлүү ыкмасы. Чоң маалымат топтомдорун майда бөлүктөргө бөлүп, бир нече маалымат түйүндөрүндө сактоого болот, бул системанын жалпы сактоо сыйымдуулугун жогорулатат.
Маалыматтарды көптөгөн машиналарга жайылтуу менен, жалпы маалымат базасы бир системага караганда көбүрөөк суроону аткара алат.
Берилиштер базасын бөлүү – бул сакталган маалыматтар базасынын объекттерин (таблицалар, индекстер жана көрүнүштөр) өзүнчө бөлүктөргө бөлүү процесси. Башкаруу мүмкүнчүлүгүн, өндүрүмдүүлүгүн жана жеткиликтүүлүгүн жогорулатуу үчүн чоң маалымат базасы объектилери бөлүнгөн.
Кээ бир учурларда, бөлүү, бөлүнгөн маалыматтарга жетүү ылдамдыгын жакшыртат. Бөлүү индекстин өлчөмүн азайтып, индекстерде алдыңкы тилке катары иштөө менен эстутумда эң керектүү индекстерди табуу мүмкүнчүлүгүн жогорулата алат.
13. Кэштөө деген эмне?
Кэштөө - бул файлдардын көчүрмөлөрүн кэш деп аталган убактылуу сактоо мейкиндигинде сактоо ыкмасы, ал маалыматтарга жетүүнү тездетет жана сайттын күтүү убактысын азайтат. Кэште белгилүү бир көлөмдөгү маалыматтарды гана сактоого болот.
Натыйжада, бизнес максаттарына эң ылайыктуу кэш жаңыртуу ыкмаларын аныктоо өтө маанилүү.
14. CDN четки серверлери деген эмне?
Сиздин баштапкы сервериңизден же сактоо кластериңизден алынган материалдарды кэш кылган CDN серверлери четки серверлер деп аталат. Катышуу пункту - бул четки серверлерди (POP) сүрөттөө үчүн көп колдонулган термин.
Чет серверлери физикалык жактан POPде жайгашкан. Ошол POPдо маалымат көптөгөн четки серверлер тарабынан кэштелиши мүмкүн.
Веб-сайттын бөлүмдөрүн бир нече жерден берүү мүмкүнчүлүгү зыяратчы менен веб-сервердин ортосундагы аралыкты азайтат, натыйжада күтүү убактысы азаят. CDN четинин серверлери бул так максатка жетет.
15. Системаны долбоорлоо үчүн Консистенциянын кандай үлгүлөрү бар?
Ар бир окуу өтүнүчү CAP теоремасына ылайык, эң акыркы жазылган маалыматтарды алуу керек. Көптөгөн маалыматтардын көчүрмөлөрү жеткиликтүү болгондо, кардарлар жаңы маалыматтарды үзгүлтүксүз алуу үчүн аларды синхрондоштуруу кыйынчылыкка айланат. Төмөнкүлөр ырааттуулуктун мүмкүн болгон моделдери болуп саналат:
- Алсыз ырааттуулук: Маалыматтарды жазуудан кийин окуу сурамы жаңыртылган маалыматтарды ала албайт же ала албайт. Бул туруктуулук деңгээли VoIP, видео чат жана көп оюнчу оюну сыяктуу реалдуу убакыт тиркемелери үчүн идеалдуу.
- Акыры ырааттуулугу: Окуулар акыры маалыматтар жазылгандан кийин миллисекунд ичинде эң акыркы маалыматтарды көрөт. Бул учурда маалыматтар асинхрондук түрдө кайталанат. DNS жана электрондук почта системалары буга мисал болуп саналат. Бул жогорку жеткиликтүүлүгү бар системаларда натыйжалуу иштейт.
- Күчтүү ырааттуулук: Маалыматтарды жазгандан кийин, келечектеги окурмандар эң акыркы маалыматтарды көрүшөт. Бул учурда маалыматтар синхрондуу түрдө көчүрүлөт. Бул маалыматтарды берүү үчүн ылайыктуу болгон RDBMS жана файл системаларында байкоого болот.
16. Оптимисттик кулпу деп эмнени түшүнөсүз?
Оптимисттик кулпулоо - бул жазууну окуп, версиянын номерин белгилеп (альтернативалык жолдорго даталар, убакыт белгилери же контролдук суммалар/хэштер кирет) жана андан кийин аны кайра жазуудан мурун версия өзгөрбөгөнүн эки жолу текшере турган механизм.
Жазууну кайра жазганыңызда, анын атомдук экенин текшерүү үчүн жаңыртууну чыпкалоо үчүн версияны колдоносуз. (б.а., сиз версияны текшергениңиз менен дискке жазууну жазганыңыздын ортосунда өзгөрүлгөн эмес) жана баарын бир убакта жаңыртыңыз.
17. «Лидер шайлоо» дегенди так эмнени түшүнөсүз?
Колдонмонун жеткиликтүүлүгүнө салым кошкон көп сандаган серверлери бар бөлүштүрүлгөн системада үчүнчү тараптын API'лерин жаңыртуу үчүн бир гана сервер жооптуу болгон учурлар болушу мүмкүн, анткени API'лерди колдонууда бир нече серверлер көйгөйлөрдү жаратышы мүмкүн.
Бул сервер негизги сервер катары белгилүү жана аны тандоо процедурасы лидерди шайлоо деп аталат. Лидер сервер бөлүштүрүлгөн системада иштебей калганда, серверлер катаны байкап, жаңы лидерди тандап алышы керек. Консенсус ыкмасын колдонуу менен, бул ыкма жогорку жеткиликтүүлүк жана күчтүү ырааттуу колдонмолор үчүн эң ылайыктуу.
18. TinyURL сыяктуу URL кыскартуу кызматын долбоорлоодо сиздин мамилеңиз кандай?
TinyURL узун URL'ди бир, уникалдуу кыска URL'ге айлантат. Бул технологиялар кыска URL дарегин кабыл алып, толук URL кайтара алат.
Кандай маанилүү сапаттар бар?
- Түпнускадан кыскараак URL түзүңүз.
- Узун URL дарегин сактап, аны кыскараакы менен алмаштырыңыз.
- Кыска URL даректеринде кайра багыттоого уруксат бериңиз.
- Ыңгайлаштырылган аталыштар менен кыска URL'дер колдоого алынат.
- Бир эле учурда бир нече суроону чечиңиз.
Эң кеңири таралган көйгөйлөр кайсылар?
- Маалыматтар базасын сактоону кантип көзөмөлдөйсүз?
- Колдонуучу жүк күтүүлөрдөн ашып кетсе эмне болот?
- Эгер эки адам бир эле жеке URL'ди колдонсочу?
Төмөнкү сунуштарды карап көрүңүз:
- Хешинг эски жана жаңы URL'дерди туташтыруу үчүн колдонула турган түшүнүк.
- REST API алдыңкы байланышты башкаруу жана оор жүктү тең салмактоо үчүн колдонсо болот.
- Multithreading - бул бир эле учурда бир нече суроону башкарууга мүмкүндүк берүүчү түшүнүк.
- Түпнуска URL'дер NoSQL маалымат базаларында сакталат.
19. Твиттерди долбоорлоого кандай мамиле жасайсыз?
Берилген талаптар:
- Твиттерди жөнөтүү
- Башка колдонуучуларды ээрчүү
- Tweet каналы/жаңылыктар лентасы
- Система масштабдуу
- Тез жүктөлөт
- Система ишенимдүү
Сиз критерийлерди белгилегенден кийин Twitter API дизайнын ойлоп баштасаңыз болот. Бул кандайча пайда болот:
Баштоо үчүн, API'нин негизги акыркы чекиттеринин эскиздерин түзөбүз. Бул жерде бир нече мисал келтирилген:
- sendTweet(билдирүү)
- followUser(userID)
- unfollowUser(userID)
- getFeed(бет)
Бул мүнөздөмөлөрдү камсыз кыла турган архитектура андан кийин чиймелениши мүмкүн. Биз сервердин өтүнүчүн тапшырган колдонуучудан баштасак болот. Биз кошумча API серверлерин жүк балансынын артына орното алабыз, бул масштабдуулук муктаждыгын канааттандыруу үчүн трафиктин чоңураак деңгээлине багыттоого жардам берет. Биз азыр твиттерибизди сактоо үчүн маалымат базасын кошушубуз керек.
Биз берген API масштабдуу болушу керек экенин эстен чыгарбоо маанилүү. Бул кызматты масштабдуу кылуу үчүн, API серверлерибиздин бирин биздин жаңылыктар лентасы үчүн өзүнчө кэштен окуй алабыз. Муну менен бирге, каналыбыздын кэшин жаңыртып туруу үчүн тоют камсыздоочуну да колдонушубуз керек.
20. Facebook үчүн жаңылыктар лентасын түзүңүз
Фейсбуктагы жаңылыктар лентасы колдонуучуларга досторунун чөйрөлөрүндө, сүйүктүү баракчаларында жана алар жазылган уюмдарда эмне болуп жатканын көрүүгө мүмкүнчүлүк берет.
Негизги өзгөчөлүктөр кайсылар?
- Колдонуучу ээрчиген башка система объекттеринин постторунун негизинде жаңылыктар лентасын түзүңүз.
- Текст, сүрөттөр, аудио жана видеолордун бардыгы Newsfeed постторунда колдонулушу мүмкүн.
- Реалдуу убакытта колдонуучунун жаңылыктар лентасына жаңы мазмунду кошуңуз.
Көбүнчө кандай көйгөйлөр бар?
- Жаңы пост жаңылыктар лентасында көп убакытты талап кылсачы?
- Алгоритм колдонуучунун активдүүлүгүн башкара алабы?
- Жаңылыктар лентасында биринчи кезекте кандай посттор көрсөтүлүшү керек?
Төмөнкү сунуштарды карап көрүңүз:
- Постторду жолдоочуларга таратуу үчүн фанут механизмин карап көрүңүз.
- Колдонуучунун жогорку жүктөрүн натыйжалуу башкаруу үчүн sharding кантип колдонсо болорун карап көрүңүз.
- Колдонуучунун канал маалыматтары көптөгөн серверлерде кайталанбашы керек. Sharding анын ордуна колдонуучунун ID негизинде жүргүзүлүшү мүмкүн.
21. Системанын BASE касиети деген эмне?
BASE өзгөчөлүктөрү жакында пайда болгон NoSQL маалымат базаларында кеңири таралган. BASE системасы CAP теоремасы боюнча ырааттуулукту камсыз кылбайт. Бул CAP теоремасынын системанын төмөнкү касиетине туура келген жасалма кыскартылган сөз:
- "Негизинен жеткиликтүү" деген термин система ар дайым жеткиликтүү болот дегенди билдирет.
- Жумшак абал системанын абалы убакыттын өтүшү менен өзгөрүшү мүмкүн экенин билдирет, ал тургай, эч кандай киргизүү камсыз кылынбайт. Бул көбүнчө моделдин ырааттуулугуна байланыштуу.
- Система ошол мезгилде киргизүүнү албай турганын эске алсак, акыры ырааттуулук система убакыттын өтүшү менен ырааттуу болоорун билдирет.
22. IP дарегин Affinity техникасы менен жүктү балансташтыруу деген эмне?
Жүктөлгөн баланстын дагы бир көрүнүктүү ыкмасы - IP дареги жакындыгы. Кардардын IP дареги бул ыкмада сервер түйүнү менен туташтырылган. Бир сервер түйүнү кардар IP дарегинен келген бардык суроо-талаптарды аткарат.
Бул ыкманы ишке ашыруу оңой, анткени IP дареги ар дайым HTTP сурамынын баш жагында жеткиликтүү жана кошумча орнотуулар талап кылынбайт. Эгерде сиздин кардарларыңыз кукилерди өчүрүп коюшу мүмкүн болсо, жүктү балансташтыруунун бул формасы пайдалуу болушу мүмкүн.
23. Кэшти алмаштыруу (же чыгаруу саясаты) алгоритмдери кандай?
Кэш алгоритмдери (ошондой эле кэш алмаштыруу алгоритмдери, кэш алмаштыруу саясаты же кэш чыгаруу саясаты деп да белгилүү) компьютерде сакталган маалыматтардын кэшин башкаруу үчүн компьютер программасы же аппараттык түзүм колдоно ала турган оптималдаштыруу көрсөтмөлөрү же алгоритмдер.
Кэштөө салттуу эстутум сактагычка караганда тезирээк же арзаныраак болгон эстутум аймактарында акыркы колдонулган же көп колдонулган маалыматтарды сактоо менен ылдамдыкты жогорулатат. Кэш толгондо, алгоритм жаңыларына орун түзүү үчүн кайсы элементтерди алып салууну чечиши керек.
24. Бөлүштүрүлгөн транзакция деп так эмнени түшүнөсүз?
Бөлүштүрүлгөн транзакция – бул бир окуя атомдук түрдө ишке ашырылбай турган эки же андан көп айырмаланган маалымат булактарынын өзгөрүшүнө алып келген ар кандай жагдай.
Микросервис дүйнөсүндө бул бир топ татаалдашып баратат, анткени ар бир кызмат бирдик болуп саналат жана бизнести ийгиликтүү кылуу үчүн көп учурда көптөгөн кызматтар кызматташууга тийиш.
25. Ачкачылык деген эмне?
Жип жалпы ресурстарга үзгүлтүксүз кире албай калса, ал ачкачылык деп айтылат. Бул "ач көз" жиптер же "артыкчылыгы" жогору болгон жиптер жалпы ресурстарды узак убакытка жеткиликсиз кылганда пайда болот.
Көбүнчө кеч кайтып келген синхрондуу ыкманы камсыз кылган объектти карап көрөлү. Эгерде бир жип бул ыкманы кайра-кайра чакырса, ошол эле объектке тез-тез синхрондоштуруу мүмкүнчүлүгүн талап кылган башка жиптер көбүнчө бөгөттөлөт.
жыйынтыктоо
Мээ чабуулу сессиясы системанын дизайнын интервьюга алып келгендин бардыгы. Биз бул постто эң кеңири таралган Системалык Дизайн интервью суроолоруна кайрылдык.
Белгилүү бир системаны түзүүдө сиз колдонуп жаткан ыкманы ар тараптуу түшүнүү Системалык Дизайн боюнча интервьюдан өтүү үчүн абдан маанилүү..
Таштап Жооп