Golang
Yardımçı strukturadan istifadə edərək O(N) vaxtda ən yaxşı 5 xidməti əldə edin
Sənədlərin yeniləmələri xidmətə daxil olur message Document { string Url = 1; // Sənədin URL-i, onun unikal identifikatoru uint64 PubDate = 2; // sənədin elan olunan nəşr vaxtı uint64 FetchTime = 3; // bu sənəd yeniləməsinin alınma vaxtı, versiya identifikatoru kimi qəbul edilə bilər. Cüt (Url, FetchTime) unikaldır. string Text = 4; // sənədin mətni uint64 FirstFetchTime = 5; // ilkin olaraq mövcud deyil, doldurulmalıdır } Sənədlər istənilən ardıcıllıqla gəlir (yeniləmələrin edildiyi ardıcıllıqla deyil), və dəfələrlə mesajlar ola bilər. Çıxışda, eyni mesajlar formalaşdırmaq lazımdır, lakin aşağıdakı qaydalara uyğun olaraq düzəldilmiş sahələrlə (aşağıda qeyd olunanlar, Url sahəsi ilə eyni olan sənədlər qrupuna aiddir): Text və FetchTime sahələri, indiyə qədər alınmış ən böyük FetchTime ilə eyni olmalıdır. PubDate sahəsi, ən kiçik FetchTime ilə eyni olmalıdır. FirstFetchTime sahəsi, ən kiçik FetchTime dəyərinə bərabər olmalıdır. Başqa sözlə, hər zaman FetchTime-ə görə sıralanmış ilk versiyadan PubDate və FirstFetchTime, və son versiyadan Text götürürük. Kodda bu interfeys aşağıdakı kimi həyata keçirilə bilər: type Processor interface { Process(doc *Document) (*Document, error) } Bu kod, Kafka və ya oxşar növbədən mesajlar oxuyan və nəticəni də növbəyə yazan xidmətdə işləyəcək. Əgər Process Null qaytarırsa, heç nə növbəyə yazılmır.
gRPC və GraphQL ilə təcrübəniz varmı? Onlar haqqında danışın.
Hansı maaş gözləntilərinə əsaslanırsınız?
Loop məhsulunu tanıyırsan?
Növbələrə münasibətin necədir? Belə bir təcrübən olubmu?
Kafka-dan mesajın alınmasından verilənlər bazasında yeniləməyə qədər optimist kilidləmə yolu necə görünürdü?
Tapşırıqları necə alırsan, kimdən gəlir?
Əlaqəli verilənlər bazalarında sorğuların optimallaşdırılması təcrübəniz varmı?
Brokerlər kimi Kafka və RabbitMQ-dən necə istifadə etdiniz? Niyə ikisi?
İşçi hovuzundan istifadə edərək logların emalını necə paralelləşdirmək olar? Goroutine-lərdən necə nəticələr əldə etmək olar?
Go-da massivlər və slices nədir, onlar necə fərqlənir? append necə işləyir və capacity genişləndirilməsi necə olur?
Replikasiya etmənin üstünlükləri nədir? Hansı xərcləri var?
// Məhsullar haqqında məlumat almaq üçün metodumuz var, bu metod çox tez-tez çağrılır // Bu kodda problemlər var mı və onları necə düzəltmək olar? postgress məlumat bazası func (r *ProductRepository) GetProductDetails(ctx context.Context, productIDs []int) []Product { products := make([]Product, 0, len(productIDs)) for _, id := range productIDs { go func(id int) { var p Product query := "SELECT name, price, description FROM products WHERE id = $1" err := r.db.QueryRowContext(ctx, query, id).Scan(&p.Name, &p.Price, &p.Desc) if err != nil { r.logger.Error("error get product", "err", err) return } products = append(products, p) }(id) } return products }
Kanal tamponunun ölçüsü işçi hovuzunda nəsə üzərində təsir edir?
Gecikmiş funksiyaların arqumentləri nə vaxt hesablanır — təyin etmə zamanı və ya funksiyanı çağırma zamanı?
Xarici konturda yerləşən ticarətçilərlə necə əlaqə qurmaq olar?
Go-da çox iş parçacığı ilə işləmədə hansı sinxronizasiya vasitələri mövcuddur?
Redis-də hansı məlumatlar saxlanılırdı və elanların isti olduğunu necə başa düşürdülər?
İnterfeyslərdən niyə istifadə etmək lazımdır?