Golang
Ne önbelleğe alındı? Bazı dizinler mi?
/* Bir kaynaktan bir tüketiciye veri aktarmamız gerekiyor. Kaynak, verileri küçük paketler halinde (~on kayıt) verirken, tüketici daha büyük paketlerle daha verimli çalışır. Gerçek bir örnek, Kafka türü kuyruklardan Clickhouse veritabanına veri aktarımıdır. Kaynak: - Neredeyse sonsuz. - Kaynak, bir Next çağrısında hiçbir zaman MaxItems'ten fazla kayıt döndürmez. - Bir "oturum" (bir Pipe fonksiyon çağrısı) içinde, kaynak her Next çağrısında yeni veriler döndürür. - Ancak, yeniden başlatıldıktan sonra, kaynak önceki "onaylanmış" konumdan, cookie ile belirlenen noktadan başlar. Bu nedenle, Next'in döndürdüğü her cookie değeri, veriler alıcıya kaydedildikten sonra, aynı sırayla Commit çağrısı ile onaylanmalıdır. Alıcı: - Aynı anda MaxItems'ten fazla işleyemez. Temel seviye: Gerekli olan, func Pipe(p Producer, c Consumer) error fonksiyonunu uygulamaktır, bu fonksiyon kaynaktan veri okur, bunları MaxItems boyutunda bir tamponda gruplar ve alıcıya kaydeder, ve ardından kaynaktaki ilerlemeyi onaylar. */ const MaxItems = 9999 type Producer interface { // Next,: // - işlenmek üzere öğe paketleri döner // - işleme tamamlandığında onaylanacak cookie // - hata Next() (items []any, cookie int, err error) // Commit, işlenmiş veri paketini işaretlemek için kullanılır 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 }
İlgili olduğunuz şirketleri veya tedarikçileri listeleyebilir misiniz?
Son iş yerinizden bahsedin: ne yapıyordunuz, hangi teknolojileri kullanıyordunuz, zorlayıcı görevler nelerdi?
Go'da dilim nedir?
gRPC'de kullanılan temel çağrı türlerini listeleyebilir misiniz?
Kapalı mod ayarlı bir kanaldan bilgi almak izinli midir?
Kafka'da belirli bir bölüme doğrudan veri yazmak mümkün mü, hash için anahtar kullanılmadan?
Bir veri yapısının, örneğin bir liste veya dizi, sonuna öğe ekleme mekanizmasını açıklayabilir misiniz?
Program çalıştırılırken yığında hangi veriler ve nasıl yerleştirilir?
Projelerinizde hangi önbellekleme yöntemlerini kullanmayı tercih ediyorsunuz ve neden?
Materialized view ile normal view arasındaki fark nedir?
Bağlı listenin yapısına hangi bileşenler dahildir?
Map veri yapısına anahtar ile öğe ekleme işleminin çalışma süresi nasıl belirlenir?
İş parçalarının başlangıç yığını boyutu neden genellikle 2 MB olarak belirlenir?
Projelerinizde paralel görevleri yönetmek için ErrGroup yapısını hiç kullandınız mı?
Uygulamanızda kullandığınız alışılmadık veya standart olmayan paketler nelerdir?
Neden dilim büyümesi yavaşlıyor ve sürekli ikiye katlamaya devam edilemiyor?
GitLab CI/CD çalışma sürecinde komutlar hangi noktada çalıştırılır?
Yazılım tasarımında SOLID ilkelerine uyulmaması durumunda ne gibi sonuçlar ortaya çıkabilir?