Golang
Кагаздардын жаңыртуулары кызматка келет message Document { string Url = 1; // Кагаздын URL, анын уникалдуу идентификатору uint64 PubDate = 2; // жарыяланган убакыт uint64 FetchTime = 3; // бул кагаздын жаңыртуусун алуу убактысы, версия идентификатору катары каралышы мүмкүн. Жуп (Url, FetchTime) уникалдуу. string Text = 4; // кагаздын тексті uint64 FirstFetchTime = 5; // башында жок, толтурулушу керек } Кагаздар каалаган тартипте келип калышы мүмкүн (жаңыртуулар жасалган тартипте эмес), жана дублдик билдирүүлөр болушу мүмкүн. Чыгышта, ошол эле билдирүүлөрдү түзүү керек, бирок төмөнкү эрежелер боюнча оңдолгон талаалар менен (төмөндө көрсөтүлгөндөр, Url талаасы менен бирдей топтогон документтер үчүн): Text жана FetchTime талаалары, азыркыга чейин алынган эң чоң FetchTime менен бирдей болушу керек. PubDate талаасы, эң кичинекей FetchTime менен бирдей болушу керек. FirstFetchTime талаасы, эң кичинекей FetchTime маанисине барабар болушу керек. Башкача айтканда, ар бир учурда FetchTime боюнча сорттолгон биринчи версиядан PubDate жана FirstFetchTime, жана акыркы версиядан Text алынады. Коддогу интерфейс мындайча ишке ашырылышы мүмкүн: type Processor interface { Process(doc *Document) (*Document, error) } Бул код Kafka же окшош кезекчеден билдирүүлөрдү окуган жана натыйжаны дагы кезекке жазган кызматта иштейт. Эгер Process Null кайтарса, эч нерсе кезекке жазылбайт.
Эмне менен көбүрөөк иштедиңиз? Кантип технологияларды колдондуңуз?
Бир deferде паника менен иштесе болот беле?
Redis жана Postgres кантип синхрондоштурулат? Эң негизгиси, алар айырмаланышы мүмкүн.
Tracing деген эмне? Кантип жүргүзүү керек?
Go менен коммерциялык өнүктүрүү боюнча жалпы тажрыйбаңыз кандай?
Кандай контейнерлөө жана оркестрация системаларын билесиз?
RoleBinding эске алынып, кластердеги колдонуучунун укуктарын кантип текшерсе болот?
Эмне болсо да, сен тыгылып калдың жана көйгөйдү кантип чечүүнү билбедиң, ошол учурду эстеп кал
Defer деген эмне жана ал эмне үчүн колдонулат? Эгер бир функцияда бир нече defer чакыруулары болсо, алар кайсы тартипте ишке ашырылат?
Эмне үчүн иш ордуңузду өзгөртүүнү чечтиңиз? Нени издеп жатасыз?
Кайсы продукт метрикаларын чогултасыз?
Эгерде defer горутинадан тышкары болсо, эмне болот?
Резюмене караганда, сиз азыр [ұйымда] иштейсиз, туурабы?
/* Mikroservis arxitekturasy bilen programm. Mikroservis Backend interfeysı vasitəsilə abstraktsiya edilə bilər. Mikroservisin bir nüsxəsinə giriş üçün, artıq tətbiq olunmuş BackendImpl tipindən istifadə edə bilərsiniz. Hər mikroservisdə bir neçə onlarla işləyən nüsxə var, hər biri öz ünvanı addr ilə əlçatan. Ancaq, mikroservisin ayrı-ayrı nüsxələri etibarlı deyil: Onlar çökmə, əlçatan olmama və ya yüklənmə ilə qarşılaşa bilər. Buna görə, siz müştəri tərəfi yük balanslaşdırması həyata keçirən və hər dəfə **ən az yüklənmiş** nüsxəni seçən Balancer tipini tətbiq etməlisiniz. */ type Request interface{} type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr, müəyyən nüsxənin ip:port ünvanını ehtiva edir func NewBackend(addr string) *BackendImpl type Balancer struct { // TODO } var _ Backend = &Balancer{} // addrs, yüklənməni balanslaşdıran bütün nüsxələrin ünvanlarını ehtiva edir func NewBalancer(addrs []string) *Balancer { // TODO }
Өз тажрыйбаңыз жөнүндө айтып бере аласызбы? — эмне менен иштедиңиз, эмне жетиштиңиз?
JSON тегдери менен модел (мисалы, RegisterUserRequest) домен моделиби? DTO жана домендик бирдикти туура бөлүү үчүн кандай кылуу керек?
Эң чоң долбоордо канча адам иштеген? Ондон аз, ондон көп, жүздөгөнбү?
Кабарды айт, азыркы учурда кэшти ишке ашырууда кандай көйгөйлөрдү көрөсүң?
Неге автоматтык эмес, кол менен commit offset кылдыңыз?