Golang
Nima kesh qilindi? Biror kataloglar bormi?
/* Biz ma'lumotlarni manbadan iste'molchiga o'tkazishimiz kerak. Manba kichik partiyalar (taxminan o'n yozuv) bilan ma'lumotlarni taqdim etadi, iste'molch esa katta partiyalar bilan samaraliroq ishlaydi. Haqiqiy misol - Kafka turidagi navbatlardan Clickhouse bazasiga ma'lumot uzatish. Manba: - deyarli cheksiz. - Manba har doim Next chaqiruvida MaxItems dan ko'p yozuvlarni qaytirmaydi. - Bir "sessiya" (bir Pipe funksiyasi chaqiruvi) davomida, manba har Next chaqiruvida yangi ma'lumotlarni qaytaradi. - Biroq, qayta ishga tushirilgandan so'ng, manba avvalgi "tasdiqlangan" pozitsiyadan, cookie bilan belgilangan joydan boshlanadi. Shuning uchun, har bir cookie qiymati, Next qaytarib bergandan so'ng, ma'lumotlar qabul qiluvchiga saqlangandan keyin, Commit chaqiruvi bilan tasdiqlanishi kerak, va ular Next tomonidan qaytarilgan tartibda bo'lishi shart. Qabul qiluvchi: - Bir vaqtning o'zida MaxItems dan ko'p ishlov berolmaydi. Asosiy daraja: Kerak bo'lsa, func Pipe(p Producer, c Consumer) error funksiyasini amalga oshiring, bu funktsiya manbadan ma'lumotlarni o'qiydi, ularni MaxItems o'lchamdagi bufferga guruhlaydi va qabul qiluvchiga saqlaydi, so'ngra manbada progressni tasdiqlaydi. */ const MaxItems = 9999 type Producer interface { // Next quyidagilarni qaytaradi: // - ishlov beriladigan elementlar partiyasi // - tasdiqlash uchun cookie // - xato Next() (items []any, cookie int, err error) // Commit, ma'lumotlar partiyasini ishlov berilgan deb belgilash uchun ishlatiladi Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }
Ushbu bilan ishlagan kompaniyalar yoki ta'minotchilarni ro'yxatlab berishingiz mumkinmi?
So'nggi ish joyingiz haqida gapiring: nima bilan shug'ullandingiz, qanday texnologiyalarni ishlatdingiz, qiyin vazifalar nima edi?
Go tilida slice nima?
gRPC'da ishlatiladigan asosiy chaqirish turlarini ro'yxatga olishingiz mumkinmi?
Yopiq rejim o'rnatilgan kanaldan ma'lumot olish mumkinmi?
Kafka'da ma'lum bir partitsiyaga to'g'ridan-to'g'ri yozish mumkinmi, hash uchun kalitni o'tkazib yuborish?
Ma'lumotlar tuzilmasining, masalan, ro'yxat yoki massivning oxiriga element qo'shish mexanizmini tushuntirib bera olasizmi?
Dastur bajarilayotganda qanday ma'lumotlar va qanday tarzda stekda joylashtiriladi?
Loyihalaringizda qaysi kechirish usullarini afzal ko'rasiz va nima uchun?
Materialized view nima oddiy view dan qanday farqi bor?
Bog'langan ro'yxat tuzilmasiga qanday komponentlar kiradi?
Map ma'lumotlar tuzilmasida kalit bo'yicha element qo'shish operatsiyasining bajarilish vaqtini qanday aniqlash mumkin?
Nima uchun odatda iplar uchun boshlang'ich stek o'lchami 2 MB ga o'rnatiladi?
Loyihalaringizda parallel vazifalarni boshqarish uchun ErrGroup tuzilmasidan foydalandingizmi?
Amaliyotingizda qanday noodat yoki standart bo'lmagan paketlarni ishlatgansiz?
Nima uchun bo'lak o'sishi sekinlashmoqda va nima uchun uni doimiy ravishda ikki baravar oshirish mumkin emas?
GitLab CI/CD ish jarayonida buyruqlar qayerda bajariladi?
Dasturiy ta'minot loyihalashtirishda SOLID tamoyillariga rioya qilmaslik natijasida qanday oqibatlar yuzaga kelishi mumkin?