Golang
რა კეშდებოდა? რაიმე დირექტორიები?
/* අපට මූලාශ්රයකින් දත්ත කිසියම් පරිභෝජකයකුට මාරු කළ යුතුය. මේදී මූලාශ්රය කුඩා කට්ටලවලින් (~ දස ගණනක් වාර්තා) දත්ත ලබා දී ඇති අතර, පරිභෝජකයා විශාල බචක සමඟ වැඩ කිරීම වඩාත් ප්රයෝජනවත් වේ. සත්ය උදාහරණයක් - Kafka වර්ගයේ පෙළගැස්මවලින් දත්ත ලබා දීම Clickhouse දත්තගබඩාවට. මූලාශ්රය: - කොන්දේසි ලෙස අසීමිත. - මූලාශ්රය එක් කැඳවීමකදී MaxItems වඩා වැඩි වාර්තා ආපසු නොදේ. - එක "සෙෂන්" (Pipe ක්රියාවලියක්) තුළ, මූලාශ්රය සෑම කැඳවීමකදී නව දත්ත ආපසු දක්වයි. - එහෙත්, නැවත ආරම්භ කිරීමෙන් පසු, මූලාශ්රය පසුගිය "තහවුරු කළ" තැනින් ආරම්භ වේ, එය cookie මගින් නියමිතයි. එමනිසා, Next කැඳවීමෙන් ආපසු ලැබූ සෑම cookie අගයක්ම, දත්ත සුරක්ෂිත කිරීමෙන් පසු, 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 { 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 }
შეგიძლიათ ჩამოთვალოთ კომპანიები ან მომწოდებლები, რომლებთანაც ურთიერთობა გქონდათ?
გთხოვთ, ისაუბრეთ თქვენს ბოლო სამუშაო ადგილზე: რა საქმიანობას ეწეოდით, რა ტექნოლოგიებს იყენებდით, რა იყო რთული ამოცანები?
რა არის slice Go-ში?
შეგიძლიათ ჩამოთვალოთ gRPC-ში გამოყენებული ძირითადი ზარები?
შესაძლებელია თუ არა დახურული რეჟიმით დაყენებული არხიდან ინფორმაციის მიღება?
შესაძლებელია პირდაპირ დაწეროთ Kafka-ს გარკვეულ ნაწილში, გამოტოვოთ გასაღები ჰეშირებისთვის?
შეგიძლიათ ახსნათ მონაცემთა სტრუქტურის, მაგალითად, სიის ან მასივის, ბოლოს ელემენტის დამატების მექანიზმი?
რა მონაცემები და როგორ იდება სტეკში პროგრამის შესრულების დროს?
რომელ მეთოდებს ირჩევთ თქვენს პროექტებში გამოყენებისთვის და რატომ?
რა განსხვავებაა მატერიალიზებული ხედვისა და ჩვეულებრივი ხედვის შორის?
რა კომპონენტები შედის დაკავშირებული სიის სტრუქტურაში?
როგორ განისაზღვრება Map მონაცემთა სტრუქტურაში გასაღებით ელემენტის დამატების ოპერაციის შესრულების დრო?
რატომ არის ჩვეულებრივ თხემის დასაწყისის ზომა 2 მბ-ით?
გადახედეთ თუ არა ოდესმე ErrGroup სტრუქტურას თქვენს პროექტებში პარალელური დავალებების მართვისთვის?
პრაქტიკაში რა უცნაური ან ნორმიდან გამომდინარე პაკეტები გამოიყენეთ?
რატომ ნელი ხდება ნაჭრის ზრდა და რატომ არ შეიძლება მუდმივად ორჯერ გაზრდა?
სად ხორციელდება ბრძანებების გაშვება GitLab CI/CD-ის სამუშაო პროცესში?
როგორ შეიძლება გამოიწვიოს SOLID პრინციპების უგულებელყოფამ პროგრამული უზრუნველყოფის პროექტირებაში?