გვითხარით თქვენი ბოლო პროექტები და გამოყენებული ტექნოლოგიური სტეკი.
Golang
სად ცხოვრობ, სად ხარ?
მოდით ვისაუბროთ მიკროწესვიან არქიტექტურაზე. რა იყო ბოლო დროს მეტი: მხარდაჭერა თუ განვითარება?
/* Биз манбаадан маълумотларни бир истеъмолчига ўтказишимиз керак. Манба, маълумотларни кичик қисмлар (~ўн ёзув) шаклида беради, холос, истеъмолчи катта қисмлар (~минг ёзув) билан ишлашни самаралироқ қилади. Ҳақиқий мисол — Kafka туридаги навбатлардан маълумотларни Clickhouse маълумотлар базасига ўтказиш. Манба: - Дейдарли чексиз. - Манба ҳеч қачон Next чақирувида MaxItems дан ортиқ ёзув қайтармайди. - Бир "сесия" (бир Pipe функцияси чақируви) давомида, манба ҳар бир Next чақирувида янги маълумотлар қайтариб туради. - Аммо, қайта ишга туширгандан кейин, манба аввалги "тасдиқланган" позициядан, cookie билан белгиланган жойдан бошлайди. Шунинг учун, *ҳар бир* cookie қиймати, Next қайтарган, маълумотлар сақлангандан кейин, Commit чақируви билан тасдиқланиши керак, ва улар Next томонидан қайтарилган тартибда. Қабул қилувчи: - Бир вақтнинг ўзида MaxItems дан кўп ишлай олмайди. Талаб қилинади, func Pipe(p Producer, c Consumer) error функциясини амалга ошириш, ки маълумотларни манбаадан ўқийди, уларни MaxItemsдан ошмайдиган буферга гуруҳлайди ва қабул қилувчига сақлайди, сўнгра, манбада прогрессни тасдиқлайди. */ const MaxItems = 9999 type Producer interface { // Next қайтариб: // - ишлаш учун партия элементлари // - cookie, иш тугаши билан тасдиқланади // - хато Next() (items []any, cookie int, err error) // Commit маълумотлар партиясини ишланган деб белгилаш учун ишлатилади Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
როგორ შემოწმოთ, რომ ფანჯარაში ყველა საჭირო სიმბოლოა?
4 - შემოსული დავალებების სწრაფად მიღება, 5 - მოთხოვნის მიხედვით დავალების შედეგის დაბრუნება 6 - თუ შედეგი არ არის, შესაბამისი სტატუსის დაბრუნება /* პროცესორი - სერვისი, რომელიც ახორციელებს ხანგრძლივ, რესურსის ინტენსიურ ოპერაციას. უკვე არის განხორციელებული მისი დაბრუნებული შეცდომები უკავშირდება მხოლოდ არასწორ შემოსავალ მონაცემებს, სტაბილურია და მათი ხელახლა მოთხოვნა უსარგებლოა */ type Processor interface { Process([]byte) ([]byte, error) } /* ვივარაუდოთ, რომ გვაქვს უნიკალური იდენტიფიკატორების (მაგ., UUID) გენერატორი. გენერატორი გარანტიას იძლევა, რომ არ იქნება შეჯახება */ type ID string // func NewID() ID /* სკედულატორი იღებს დავალებებს მომხმარებლებისგან, მათ რიგში დებს და იწყებს პროცესირებას. მოწოდებს, რომ ერთდროულად არ მუშაობს მეტი, ვიდრე 'threads' მეთოდი მოწოდებს შესაძლებლობას, შეამოწმოს დავალების სტატუსი და მიიღოს შედეგი არ ბლოკავს თავის საჯარო მეთოდებს პროცესირებისთვის */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // ინიციალიზაციის ლოგიკა return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // განხორციელება return "" }
აღწერეთ ალგორითმი maxSegment პრობლემის გადაჭრისთვის
გვითხარით, რა ხდება საბოლოოდ — როგორ ვაგროვებთ ბუფერს?
რა არის თქვენი ანაზღაურების მოლოდინები?
გქონდათ თუ არა გამოცდილება მრავალთრედინგული ან ასინქრონული ოპერაციებით პროგრამების დაწერაში?
მიკროწარმოების არქიტექტურაში რა ანტიპატტერნებს იცით?
მოდით განვიხილოთ მაგალითი: first=[1,1,2], second=[1,2]. რა უნდა დააბრუნოს თქვენი ალგორითმმა და მუშაობს კი ის სწორად დუბლიკატებთან?
თუ გთავაზობენ სამუშაოს და მიიღებთ, რამდენი დრო დაგჭირდებათ მუშაობის დაწყებისთვის?
[სახელი] იკითხა: როდესაც ელემენტის პოზიცია ნაკლებია X-ზე, რა იქნება მისი პოზიცია?
ბალანსატორი უნდა გაიგოს, რომ ბექენდი პასუხობს შეცდომებით, და გარკვეული დროის განმავლობაში ზღვარს გადალახვისას, უნდა გამორიცხოს ის ბალანსირებიდან (Circuit Breaker)
რომელ მონაცემთა ბაზებთან ან სხვა მონაცემთა შენახვის სისტემებთან მუშაობდი? რამდენი მოთხოვნა წამში (RPS) წერა და კითხვა?
გახდომილხართ თუ არა ლიდერულ დავალებებზე მთელი სამუშაო დროის განმავლობაში?
გქონდათ თუ არა გამოცდილება განაწილებული სისტემების განვითარებაში და მხარდაჭერაში?
მართალია, რომ ამჟამად ცხოვრობთ [ქალაქში] და თქვენთვის სასურველია ჰიბრიდული ფორმატში მუშაობა ოფისში გასვლით?
რა არის მაქსიმალური დატვირთვა მოთხოვნებში წამში, რომელსაც ყველაზე მაღალი დატვირთვის სერვისი მართავდა? სწორი ხომ არის, რომ ეს 5–8 ათასი მოთხოვნა წამში?